=== Eye Viewer Log Rotated at 2026-01-21 10:56:04 +0000 === alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 11:04:49"; "file_name" = ""; message = Okii; "message_id" = 18384; "message_type" = 0; "prev_session_message_id" = 18383; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18384, AnyHashable("operation_type"): 3] - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18385] datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18385] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp "LocalWebSocketTask <622300CF-5BD1-445E-9935-9BE955B4F47C>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <622300CF-5BD1-445E-9935-9BE955B4F47C>.<1>} "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18386, AnyHashable("operation_type"): 3] "LocalWebSocketTask <37837BEB-46F9-4935-AF5A-43BDB98CA0DD>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <37837BEB-46F9-4935-AF5A-43BDB98CA0DD>.<1>} datesent = "2026-01-21 12:16:28"; "file_name" = ""; message = "I was in a call with sasa baby"; "message_id" = 18388; "message_type" = 0; "prev_session_message_id" = 18387; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-21 12:16:31"; "file_name" = ""; message = "Sorry\Ud83e\Udd72"; "message_id" = 18389; "message_type" = 0; "prev_session_message_id" = 18388; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:16:31"; "file_name" = ""; message = "Sorry\Ud83e\Udd72"; "message_id" = 18389; "message_type" = 0; "prev_session_message_id" = 18388; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18389] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18390] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18391] "LocalWebSocketTask <5B5E188C-4F2F-44A5-A562-5B4D26D46C91>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5B5E188C-4F2F-44A5-A562-5B4D26D46C91>.<1>} datesent = "2026-01-21 12:24:40"; "file_name" = ""; message = "Im sure it will baby\U2665\Ufe0f"; "message_id" = 18393; "message_type" = 0; "prev_session_message_id" = 18392; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18393, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18393, AnyHashable("message_data"): { datesent = "2026-01-21 12:24:40"; "file_name" = ""; message = "Im sure it will baby\U2665\Ufe0f"; "message_id" = 18393; "message_type" = 0; "prev_session_message_id" = 18392; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:13"; "file_name" = ""; message = "Babyyy!!!!!!"; "message_id" = 18396; "message_type" = 0; "prev_session_message_id" = 18395; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18396] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18396] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:22"; "file_name" = ""; message = "\Ud83d\Ude21"; "message_id" = 18397; "message_type" = 0; "prev_session_message_id" = 18396; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18397, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "LocalWebSocketTask <6DEF45AE-ECF0-48E2-ABCE-C8D608D0AC30>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6DEF45AE-ECF0-48E2-ABCE-C8D608D0AC30>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18397, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:22"; "file_name" = ""; message = "\Ud83d\Ude21"; "message_id" = 18397; "message_type" = 0; "prev_session_message_id" = 18396; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18397] datesent = "2026-01-21 12:56:37"; "file_name" = ""; message = "I do, I always do !"; "message_id" = 18400; "message_type" = 0; "prev_session_message_id" = 18399; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18400, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "LocalDataTask <7074F352-0D31-4D01-A5AE-7D58AE30AFF6>.<150>" ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18404, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-21 16:09:06"; "file_name" = ""; message = "Ahhh I wish I can go\Ud83e\Udd72"; "message_id" = 18416; "message_type" = 0; "prev_session_message_id" = 18415; "replied_message" = "Maybe Pilates ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18408; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 7; "content-available" = 1; sound = default; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18415] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18414] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18412] "content-available" = 1; }, AnyHashable("message_id"): 18410] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18419] datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18421, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18423, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18423, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18424] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18425, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} "LocalWebSocketTask <6E11C228-B24A-4F7A-AC00-58DDE0A5B60C>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6E11C228-B24A-4F7A-AC00-58DDE0A5B60C>.<1>} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18429,"event_type":2} "content-available" = 1; }, AnyHashable("message_id"): 18428] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18429,"event_type":2} ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18432,"event_type":2} "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18435, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18435, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18436, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18439] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18439] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18440, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18441] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18442, AnyHashable("message_data"): { datesent = "2026-01-21 18:56:25"; "file_name" = ""; message = "I want you to do 5 1-0s until tomorrow lunch time\Ud83d\Ude0f"; "message_id" = 18442; "message_type" = 0; "prev_session_message_id" = 18441; "replied_message" = "If my baby is in the mood and wants to give me orders for tonight in bed and / or tomorrow morning at wake up and / or under shower, her slave will have no other choice than to obey. If my baby is less in the mood, then absolutely no problem \U2764\Ufe0f"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18429; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:56:25"; "file_name" = ""; message = "I want you to do 5 1-0s until tomorrow lunch time\Ud83d\Ude0f"; "message_id" = 18442; "message_type" = 0; "prev_session_message_id" = 18441; "replied_message" = "If my baby is in the mood and wants to give me orders for tonight in bed and / or tomorrow morning at wake up and / or under shower, her slave will have no other choice than to obey. If my baby is less in the mood, then absolutely no problem \U2764\Ufe0f"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18429; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18443] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] "content-available" = 1; }, AnyHashable("message_id"): 18444] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18445, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 18:58:12"; "file_name" = ""; message = "For the next sessions I\U2019ll let you know \Ud83d\Ude0f"; "message_id" = 18450; "message_type" = 0; "prev_session_message_id" = 18449; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18450, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "LocalWebSocketTask <993FA04D-7827-4411-B1BC-9A841D07A0D8>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <993FA04D-7827-4411-B1BC-9A841D07A0D8>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18452] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18455] "content-available" = 1; }, AnyHashable("message_id"): 18457] "content-available" = 1; }, AnyHashable("message_id"): 18458] "content-available" = 1; }, AnyHashable("message_id"): 18459] "content-available" = 1; }, AnyHashable("message_id"): 18460] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18460,"event_type":2} "content-available" = 1; }] datesent = "2026-01-21 20:16:37"; "file_name" = ""; message = "Babyy\Ud83d\Ude0d\Ud83d\Ude0d"; "message_id" = 18461; "message_type" = 0; "prev_session_message_id" = 18460; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18461, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-21 20:17:37"; "file_name" = ""; message = "Before you sleep, you will do one more 1-0"; "message_id" = 18463; "message_type" = 0; "prev_session_message_id" = 18462; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18463, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18464] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18465, AnyHashable("message_data"): { datesent = "2026-01-21 20:18:44"; "file_name" = ""; message = "For 2nd round 10, for 3rd 15"; "message_id" = 18465; "message_type" = 0; "prev_session_message_id" = 18464; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18465, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18467] "content-available" = 1; }, AnyHashable("message_id"): 18468, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 20:20:52"; "file_name" = ""; message = "If you dont, then you will do morning, in that case you have to remain 15mins."; "message_id" = 18468; "message_type" = 0; "prev_session_message_id" = 18467; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18468, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18469, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18470, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18471, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-21 20:21:48"; "file_name" = ""; message = "Please baby\Ud83d\Ude0f\Ud83d\Ude0f"; "message_id" = 18472; "message_type" = 0; "prev_session_message_id" = 18471; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18472, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-21 20:22:26"; "file_name" = ""; message = "Probably I\U2019ll read all morning \Ud83e\Udd2d"; "message_id" = 18473; "message_type" = 0; "prev_session_message_id" = 18472; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 18474, AnyHashable("message_data"): { datesent = "2026-01-21 20:22:43"; "file_name" = ""; message = "Its 23:22 here, almost bedtime for me"; "message_id" = 18474; "message_type" = 0; "prev_session_message_id" = 18473; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18474] "content-available" = 1; }] datesent = "2026-01-21 20:22:50"; "file_name" = ""; message = "And office tomorrow \Ud83e\Udd72"; "message_id" = 18475; "message_type" = 0; "prev_session_message_id" = 18474; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18475, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18475] "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-21 20:30:25"; "file_name" = ""; message = "Good night \Ud83d\Ude0f\Ud83d\Ude0f\Ud83d\Ude0f"; "message_id" = 18478; "message_type" = 0; "prev_session_message_id" = 18477; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18477, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18478] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 662] "content-available" = 1; }, AnyHashable("message_id"): 664, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 665, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 699, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 700] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 701] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 705] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 704] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 707, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 710, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 719, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 718, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 716] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 15913, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18514,"event_type":2} ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18534,"event_type":2}[02:59:32] [LOG] Pruned 15680 entries older than 3 hours "content-available" = 1; }, AnyHashable("operation_type"): 3] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18544,"event_type":2} "content-available" = 1; }] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18564,"event_type":2} "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18607, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18608] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18609, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18611, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18612, AnyHashable("operation_type"): 3] - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18601, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18599] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18603] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18604] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18605] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18613] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18614] "content-available" = 1; }, AnyHashable("message_id"): 18615, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18616] "content-available" = 1; }, AnyHashable("message_id"): 18618, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18617, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} "LocalWebSocketTask <92DCA5D8-0B25-4C64-8AB6-2587258A16B7>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <92DCA5D8-0B25-4C64-8AB6-2587258A16B7>.<1>} "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask <5D60B215-CD05-4F5F-8702-F311400A96FC>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5D60B215-CD05-4F5F-8702-F311400A96FC>.<1>, NSLocalizedDescription=The network connection was lost.} "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-22 06:37:22"; "file_name" = ""; message = "Thank youuu\U2665\Ufe0f\U2665\Ufe0f\U2665\Ufe0f\U2665\Ufe0f"; "message_id" = 18619; "message_type" = 0; "prev_session_message_id" = 18618; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18619] "content-available" = 1; }, AnyHashable("message_id"): 18619, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18621,"event_type":2} "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-22 07:19:55"; "file_name" = ""; message = "My looove\U2665\Ufe0f"; "message_id" = 18639; "message_type" = 0; "prev_session_message_id" = 18638; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18622; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18639, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18641] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18657, AnyHashable("message_data"): { datesent = "2026-01-22 08:51:57"; "file_name" = ""; message = "ILU, I love the game that we are playing"; "message_id" = 18657; "message_type" = 0; "prev_session_message_id" = 18656; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] datesent = "2026-01-22 08:51:57"; "file_name" = ""; message = "ILU, I love the game that we are playing"; "message_id" = 18657; "message_type" = 0; "prev_session_message_id" = 18656; "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 = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] datesent = "2026-01-22 09:05:40"; "file_name" = ""; message = "Because ILU\U2665\Ufe0f because you deserve \U2665\Ufe0f because you are perfect \U2665\Ufe0f because you are mine !"; "message_id" = 18660; "message_type" = 0; "prev_session_message_id" = 18659; "replied_message" = "Why are you so kind to me ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18641; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-22 09:05:40"; "file_name" = ""; message = "Because ILU\U2665\Ufe0f because you deserve \U2665\Ufe0f because you are perfect \U2665\Ufe0f because you are mine !"; "message_id" = 18660; "message_type" = 0; "prev_session_message_id" = 18659; "replied_message" = "Why are you so kind to me ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18641; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18660, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-22 09:58:11"; "file_name" = ""; message = "ILU2\U2665\Ufe0f\U2665\Ufe0f\U2665\Ufe0f"; "message_id" = 18685; "message_type" = 0; "prev_session_message_id" = 18684; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18685] datesent = "2026-01-22 09:58:16"; "file_name" = ""; message = "I hope you enjoyed"; "message_id" = 18686; "message_type" = 0; "prev_session_message_id" = 18685; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18686, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] datesent = "2026-01-22 09:58:16"; "file_name" = ""; message = "I hope you enjoyed"; "message_id" = 18686; "message_type" = 0; "prev_session_message_id" = 18685; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18686, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] datesent = "2026-01-22 09:58:16"; "file_name" = ""; message = "I hope you enjoyed"; "message_id" = 18686; "message_type" = 0; "prev_session_message_id" = 18685; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18686, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18685] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18684] "content-available" = 1; }] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18689,"event_type":2} ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18689,"event_type":2} - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18714, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18719, AnyHashable("message_data"): { datesent = "2026-01-22 11:55:56"; "file_name" = ""; message = "Just my hands\Ud83d\Ude0f\Ud83d\Ude0f???"; "message_id" = 18719; "message_type" = 0; "prev_session_message_id" = 18718; "replied_message" = "Your hands ARE on me"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18702; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 18718, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18719, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18720,"event_type":2} "LocalWebSocketTask <2B5C9C23-286B-4F70-9C58-A7DD50C4C270>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <2B5C9C23-286B-4F70-9C58-A7DD50C4C270>.<1>} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask <581B959D-9707-4620-8EAE-676244B44AB5>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <581B959D-9707-4620-8EAE-676244B44AB5>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18720] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-22 12:42:30"; "file_name" = ""; message = "Me too my loveee"; "message_id" = 18722; "message_type" = 0; "prev_session_message_id" = 18721; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18722] "LocalWebSocketTask <0657C1BB-3D2A-4926-ABD6-04F95825EBC3>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <0657C1BB-3D2A-4926-ABD6-04F95825EBC3>.<1>} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18723, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-22 12:42:33"; "file_name" = ""; message = "Me too\Ud83e\Udd72\Ud83e\Udd72\Ud83e\Udd72"; "message_id" = 18723; "message_type" = 0; "prev_session_message_id" = 18722; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18724, AnyHashable("message_data"): { datesent = "2026-01-22 12:43:07"; "file_name" = ""; message = "Im missing sleeping with you"; "message_id" = 18724; "message_type" = 0; "prev_session_message_id" = 18723; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} datesent = "2026-01-22 12:43:07"; "file_name" = ""; message = "Im missing sleeping with you"; "message_id" = 18725; "message_type" = 0; "prev_session_message_id" = 18724; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 3; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18725] alert = { body = "New message received"; title = Eye; }; badge = 4; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 12:43:12"; "file_name" = ""; message = "Waking up with you"; "message_id" = 18726; "message_type" = 0; "prev_session_message_id" = 18725; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18726, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 5; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18727] "LocalDataTask .<387>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?session_id=ILUIWU&viewer=1&messages=18727, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?session_id=ILUIWU&viewer=1&messages=18727, _kCFStreamErrorDomainKey=4} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "content-available" = 1; }, AnyHashable("message_id"): 18727, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "LocalWebSocketTask <3951D1BC-16A7-42EC-8B53-5CD520C747A3>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <3951D1BC-16A7-42EC-8B53-5CD520C747A3>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18723, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18725] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 13:25:20"; "file_name" = ""; message = "Good baby thanks\U2665\Ufe0f"; "message_id" = 18730; "message_type" = 0; "prev_session_message_id" = 18729; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-22 13:25:20"; "file_name" = ""; message = "Good baby thanks\U2665\Ufe0f"; "message_id" = 18730; "message_type" = 0; "prev_session_message_id" = 18729; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18730, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18730] datesent = "2026-01-22 13:25:39"; "file_name" = ""; message = "Done for me\Ud83e\Udd13\Ud83e\Udd13"; "message_id" = 18732; "message_type" = 0; "prev_session_message_id" = 18731; "replied_message" = "Last meeting of the day starting now \Ud83d\Ude0a"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18728; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18732, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-22 13:25:39"; "file_name" = ""; message = "Done for me\Ud83e\Udd13\Ud83e\Udd13"; "message_id" = 18732; "message_type" = 0; "prev_session_message_id" = 18731; "replied_message" = "Last meeting of the day starting now \Ud83d\Ude0a"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18728; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18732, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-22 13:25:39"; "file_name" = ""; message = "Done for me\Ud83e\Udd13\Ud83e\Udd13"; "message_id" = 18732; "message_type" = 0; "prev_session_message_id" = 18731; "replied_message" = "Last meeting of the day starting now \Ud83d\Ude0a"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18728; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18732, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18731, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18733, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18734, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18735,"event_type":2} "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-22 13:27:01"; "file_name" = ""; message = "Nope baby, I wont"; "message_id" = 18736; "message_type" = 0; "prev_session_message_id" = 18735; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18736, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-22 13:27:01"; "file_name" = ""; message = "Nope baby, I wont"; "message_id" = 18736; "message_type" = 0; "prev_session_message_id" = 18735; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18736, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-22 13:27:01"; "file_name" = ""; message = "Nope baby, I wont"; "message_id" = 18736; "message_type" = 0; "prev_session_message_id" = 18735; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18736, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18736] 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-22 13:27:11"; "file_name" = ""; message = "My neck is still hurting a bit"; "message_id" = 18737; "message_type" = 0; "prev_session_message_id" = 18736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18737] 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-22 13:27:11"; "file_name" = ""; message = "My neck is still hurting a bit"; "message_id" = 18737; "message_type" = 0; "prev_session_message_id" = 18736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18737] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 13:27:11"; "file_name" = ""; message = "My neck is still hurting a bit"; "message_id" = 18737; "message_type" = 0; "prev_session_message_id" = 18736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18737] "content-available" = 1; }, AnyHashable("message_id"): 18737, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 13:27:24"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18738; "message_type" = 0; "prev_session_message_id" = 18737; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18738] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 13:27:24"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18738; "message_type" = 0; "prev_session_message_id" = 18737; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18738] datesent = "2026-01-22 13:27:24"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18738; "message_type" = 0; "prev_session_message_id" = 18737; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "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"): 18738, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18738, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18739,"event_type":2} "content-available" = 1; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18740; "message_type" = 0; "prev_session_message_id" = 18739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18740, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18740; "message_type" = 0; "prev_session_message_id" = 18739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18740, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18740; "message_type" = 0; "prev_session_message_id" = 18739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18740] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18741, AnyHashable("message_data"): { datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18741; "message_type" = 0; "prev_session_message_id" = 18740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18741, AnyHashable("message_data"): { datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18741; "message_type" = 0; "prev_session_message_id" = 18740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18741, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-22 14:00:14"; "file_name" = ""; message = "In 30 mins I hope"; "message_id" = 18741; "message_type" = 0; "prev_session_message_id" = 18740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18741, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 14:11:14"; "file_name" = ""; message = "Leaving now \Ud83d\Ude43\Ud83d\Ude43"; "message_id" = 18742; "message_type" = 0; "prev_session_message_id" = 18741; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 14:11:14"; "file_name" = ""; message = "Leaving now \Ud83d\Ude43\Ud83d\Ude43"; "message_id" = 18742; "message_type" = 0; "prev_session_message_id" = 18741; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-22 14:11:14"; "file_name" = ""; message = "Leaving now \Ud83d\Ude43\Ud83d\Ude43"; "message_id" = 18742; "message_type" = 0; "prev_session_message_id" = 18741; "replied_message" = "Leaving not too late today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18744, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18743] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18746,"event_type":2} "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18747, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18746,"event_type":2} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18748] "content-available" = 1; }] datesent = "2026-01-22 17:47:58"; "file_name" = ""; message = "Before vacation my love"; "message_id" = 18755; "message_type" = 0; "prev_session_message_id" = 18754; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18755] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-22 17:48:09"; "file_name" = ""; message = "Couldn\U2019t remember the exact date"; "message_id" = 18756; "message_type" = 0; "prev_session_message_id" = 18755; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18756, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 2, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18756] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18756] "content-available" = 1; }, AnyHashable("operation_type"): 2, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18756] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18757,"event_type":2} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "content-available" = 1; }, AnyHashable("message_id"): 18758, AnyHashable("message_data"): { datesent = "2026-01-22 19:47:48"; "file_name" = ""; message = "Nope baby, Im not feeling well %100, probably I\U2019ll be sick \Ud83e\Udd12"; "message_id" = 18758; "message_type" = 0; "prev_session_message_id" = 18757; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18758] "content-available" = 1; }, AnyHashable("message_id"): 18761, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18763, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }][06:07:22] [LOG] Pruned 2394 entries older than 3 hours "content-available" = 1; }, AnyHashable("message_id"): 18767] "content-available" = 1; }] datesent = "2026-01-23 07:19:58"; "file_name" = ""; message = "And you?"; "message_id" = 18771; "message_type" = 0; "prev_session_message_id" = 18770; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18771, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 07:19:58"; "file_name" = ""; message = "And you?"; "message_id" = 18771; "message_type" = 0; "prev_session_message_id" = 18770; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18771, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18771, AnyHashable("message_data"): { datesent = "2026-01-23 07:19:58"; "file_name" = ""; message = "And you?"; "message_id" = 18771; "message_type" = 0; "prev_session_message_id" = 18770; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 18772, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18775, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18774] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:19"; "file_name" = ""; message = "Seems home for you\Ud83e\Udd70"; "message_id" = 18777; "message_type" = 0; "prev_session_message_id" = 18776; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18774; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18777] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:19"; "file_name" = ""; message = "Seems home for you\Ud83e\Udd70"; "message_id" = 18777; "message_type" = 0; "prev_session_message_id" = 18776; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18774; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18777] datesent = "2026-01-23 07:21:19"; "file_name" = ""; message = "Seems home for you\Ud83e\Udd70"; "message_id" = 18777; "message_type" = 0; "prev_session_message_id" = 18776; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18774; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18777, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 18777, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18778, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:23"; "file_name" = ""; message = Yeap; "message_id" = 18778; "message_type" = 0; "prev_session_message_id" = 18777; "replied_message" = "Office ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18776; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18778, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:23"; "file_name" = ""; message = Yeap; "message_id" = 18778; "message_type" = 0; "prev_session_message_id" = 18777; "replied_message" = "Office ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18776; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18778, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:23"; "file_name" = ""; message = Yeap; "message_id" = 18778; "message_type" = 0; "prev_session_message_id" = 18777; "replied_message" = "Office ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18776; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18778] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18779] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18780, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:56"; "file_name" = ""; message = "Happy for you babyy"; "message_id" = 18780; "message_type" = 0; "prev_session_message_id" = 18779; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18780, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 07:21:56"; "file_name" = ""; message = "Happy for you babyy"; "message_id" = 18780; "message_type" = 0; "prev_session_message_id" = 18779; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 07:22:11"; "file_name" = ""; message = "2nd for me \Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 18781; "message_type" = 0; "prev_session_message_id" = 18780; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18781, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 07:22:11"; "file_name" = ""; message = "2nd for me \Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 18781; "message_type" = 0; "prev_session_message_id" = 18780; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18781, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-23 07:22:37"; "file_name" = ""; message = "Ha ha true \Ud83e\Udd23"; "message_id" = 18784; "message_type" = 0; "prev_session_message_id" = 18783; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18784] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18784, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 07:22:37"; "file_name" = ""; message = "Ha ha true \Ud83e\Udd23"; "message_id" = 18784; "message_type" = 0; "prev_session_message_id" = 18783; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 07:30:08"; "file_name" = ""; message = "Alone?"; "message_id" = 18785; "message_type" = 0; "prev_session_message_id" = 18784; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18785, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18788, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18791, AnyHashable("message_data"): { datesent = "2026-01-23 09:27:57"; "file_name" = ""; message = "Hi babyyyy"; "message_id" = 18791; "message_type" = 0; "prev_session_message_id" = 18790; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 09:27:57"; "file_name" = ""; message = "Hi babyyyy"; "message_id" = 18791; "message_type" = 0; "prev_session_message_id" = 18790; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18791, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }] "LocalDataTask <63C09C9E-3ABC-4476-8348-1E3B8EEE98A3>.<235>" ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=1} datesent = "2026-01-23 09:50:29"; "file_name" = ""; message = "No, Im not actually baby"; "message_id" = 18794; "message_type" = 0; "prev_session_message_id" = 18793; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18794, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18794, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18794] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18796, AnyHashable("message_data"): { datesent = "2026-01-23 09:51:11"; "file_name" = ""; message = "Because Im not believing this process tbh \Ud83d\Ude43"; "message_id" = 18796; "message_type" = 0; "prev_session_message_id" = 18795; "replied_message" = "No, Im not actually baby"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 18794; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 09:51:11"; "file_name" = ""; message = "Because Im not believing this process tbh \Ud83d\Ude43"; "message_id" = 18796; "message_type" = 0; "prev_session_message_id" = 18795; "replied_message" = "No, Im not actually baby"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 18794; "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; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18798, AnyHashable("message_data"): { datesent = "2026-01-23 09:51:42"; "file_name" = ""; message = "Some presentation maybe, but depends on the participants or subjects"; "message_id" = 18798; "message_type" = 0; "prev_session_message_id" = 18797; "replied_message" = "Good. Relaxed baby. What is stressing you in life ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18795; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18798, AnyHashable("message_data"): { datesent = "2026-01-23 09:51:42"; "file_name" = ""; message = "Some presentation maybe, but depends on the participants or subjects"; "message_id" = 18798; "message_type" = 0; "prev_session_message_id" = 18797; "replied_message" = "Good. Relaxed baby. What is stressing you in life ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18795; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 09:51:42"; "file_name" = ""; message = "Some presentation maybe, but depends on the participants or subjects"; "message_id" = 18798; "message_type" = 0; "prev_session_message_id" = 18797; "replied_message" = "Good. Relaxed baby. What is stressing you in life ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18795; "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; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18799, AnyHashable("operation_type"): 3] datesent = "2026-01-23 09:53:00"; "file_name" = ""; message = "You are not getting a note depends on your value that you created, its more related to other\U2019s."; "message_id" = 18801; "message_type" = 0; "prev_session_message_id" = 18800; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18801, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-23 10:32:37"; "file_name" = ""; message = "\Ud83e\Udd2d\Ud83e\Udd2d\Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 18804; "message_type" = 0; "prev_session_message_id" = 18803; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18804, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-23 10:33:12"; "file_name" = ""; message = "Thank youuuuu my love\U2665\Ufe0f"; "message_id" = 18806; "message_type" = 0; "prev_session_message_id" = 18805; "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; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18806, AnyHashable("message_data"): { datesent = "2026-01-23 10:33:12"; "file_name" = ""; message = "Thank youuuuu my love\U2665\Ufe0f"; "message_id" = 18806; "message_type" = 0; "prev_session_message_id" = 18805; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18806] "LocalDataTask <83BC1087-D9BF-4F0F-BEC1-ACB966ADF67B>.<357>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 11:21:26"; "file_name" = ""; message = "And Im happy for both of us\Ud83e\Udd70"; "message_id" = 18809; "message_type" = 0; "prev_session_message_id" = 18808; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18809] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 11:21:26"; "file_name" = ""; message = "And Im happy for both of us\Ud83e\Udd70"; "message_id" = 18809; "message_type" = 0; "prev_session_message_id" = 18808; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18809, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18809, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18810, AnyHashable("operation_type"): 3] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18812, AnyHashable("message_data"): { datesent = "2026-01-23 11:21:55"; "file_name" = ""; message = "\U2665\Ufe0f\U2665\Ufe0f"; "message_id" = 18812; "message_type" = 0; "prev_session_message_id" = 18811; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "LocalWebSocketTask <5069D1ED-9A99-41EC-A5E9-210B01E3D71A>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5069D1ED-9A99-41EC-A5E9-210B01E3D71A>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18812, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 11:22:15"; "file_name" = ""; message = "Im surprised actually, I was thinking 2-2 \Ud83e\Udd23"; "message_id" = 18813; "message_type" = 0; "prev_session_message_id" = 18812; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "LocalWebSocketTask <66092B1B-4575-4193-8F49-5AA577F4EE09>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <66092B1B-4575-4193-8F49-5AA577F4EE09>.<1>} "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 11:30:03"; "file_name" = ""; message = "Thank you my loooove\U2665\Ufe0f"; "message_id" = 18815; "message_type" = 0; "prev_session_message_id" = 18814; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-23 11:30:03"; "file_name" = ""; message = "Thank you my loooove\U2665\Ufe0f"; "message_id" = 18815; "message_type" = 0; "prev_session_message_id" = 18814; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 11:30:03"; "file_name" = ""; message = "Thank you my loooove\U2665\Ufe0f"; "message_id" = 18815; "message_type" = 0; "prev_session_message_id" = 18814; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18815, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 12:38:29"; "file_name" = ""; message = "I didn\U2019t know I had so many options \Ud83d\Ude43"; "message_id" = 18817; "message_type" = 0; "prev_session_message_id" = 18816; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18817, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 18817, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18818] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18818] "content-available" = 1; }, AnyHashable("message_id"): 18818] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18818] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-23 13:11:18"; "file_name" = ""; message = "I was thinking the same before but global position much more better I think. What is your opinion"; "message_id" = 18823; "message_type" = 0; "prev_session_message_id" = 18822; "replied_message" = "Oh wow. I would have bet you would choose IT OPS Manager. But indeed maybe program or delivery manager suits you more."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18821; "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; }] datesent = "2026-01-23 13:11:18"; "file_name" = ""; message = "I was thinking the same before but global position much more better I think. What is your opinion"; "message_id" = 18823; "message_type" = 0; "prev_session_message_id" = 18822; "replied_message" = "Oh wow. I would have bet you would choose IT OPS Manager. But indeed maybe program or delivery manager suits you more."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18821; "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; }] datesent = "2026-01-23 13:11:18"; "file_name" = ""; message = "I was thinking the same before but global position much more better I think. What is your opinion"; "message_id" = 18823; "message_type" = 0; "prev_session_message_id" = 18822; "replied_message" = "Oh wow. I would have bet you would choose IT OPS Manager. But indeed maybe program or delivery manager suits you more."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18821; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18823, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:11:28"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18825; "message_type" = 0; "prev_session_message_id" = 18824; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18822; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18825] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:11:28"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18825; "message_type" = 0; "prev_session_message_id" = 18824; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18822; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18825] datesent = "2026-01-23 13:11:28"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18825; "message_type" = 0; "prev_session_message_id" = 18824; "replied_message" = ""; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18822; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18825, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18824] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18825, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:13:43"; "file_name" = ""; message = "Yes, I dont want \Ud83e\Udd23"; "message_id" = 18828; "message_type" = 0; "prev_session_message_id" = 18827; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18828] "content-available" = 1; }] alert = { body = ""; title = StreamCam; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 2, AnyHashable("message_id"): 18828, AnyHashable("session_id"): ILUIWU] alert = { body = ""; title = StreamCam; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 2, AnyHashable("message_id"): 18828, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18828, AnyHashable("operation_type"): 3] alert = { body = ""; title = StreamCam; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18828, AnyHashable("operation_type"): 2, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18829] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:14:02"; "file_name" = ""; message = Truee; "message_id" = 18830; "message_type" = 0; "prev_session_message_id" = 18829; "replied_message" = "The IT OPS Manager until last year was more sexy. But now with vision it will quickly become a 1 man show. Delivery more visible."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18826; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18830] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:14:02"; "file_name" = ""; message = Truee; "message_id" = 18830; "message_type" = 0; "prev_session_message_id" = 18829; "replied_message" = "The IT OPS Manager until last year was more sexy. But now with vision it will quickly become a 1 man show. Delivery more visible."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18826; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18830] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:14:02"; "file_name" = ""; message = Truee; "message_id" = 18830; "message_type" = 0; "prev_session_message_id" = 18829; "replied_message" = "The IT OPS Manager until last year was more sexy. But now with vision it will quickly become a 1 man show. Delivery more visible."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18826; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18830] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18830] datesent = "2026-01-23 13:14:13"; "file_name" = ""; message = "Ha ha \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18831; "message_type" = 0; "prev_session_message_id" = 18830; "replied_message" = "Babyyyy. You're sooo mean"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18829; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18831, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 13:14:13"; "file_name" = ""; message = "Ha ha \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18831; "message_type" = 0; "prev_session_message_id" = 18830; "replied_message" = "Babyyyy. You're sooo mean"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18829; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18831, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 13:14:13"; "file_name" = ""; message = "Ha ha \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18831; "message_type" = 0; "prev_session_message_id" = 18830; "replied_message" = "Babyyyy. You're sooo mean"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18829; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18831, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18832, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18833, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 13:14:57"; "file_name" = ""; message = "But it means taht being a king of nothing \Ud83e\Udd23 and this also good if you can manage"; "message_id" = 18833; "message_type" = 0; "prev_session_message_id" = 18832; "replied_message" = "The IT OPS Manager until last year was more sexy. But now with vision it will quickly become a 1 man show. Delivery more visible."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18826; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:14:57"; "file_name" = ""; message = "But it means taht being a king of nothing \Ud83e\Udd23 and this also good if you can manage"; "message_id" = 18833; "message_type" = 0; "prev_session_message_id" = 18832; "replied_message" = "The IT OPS Manager until last year was more sexy. But now with vision it will quickly become a 1 man show. Delivery more visible."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18826; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18833] "content-available" = 1; }, AnyHashable("message_id"): 18833] datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18835; "message_type" = 0; "prev_session_message_id" = 18834; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18835, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18835; "message_type" = 0; "prev_session_message_id" = 18834; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18835, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18835; "message_type" = 0; "prev_session_message_id" = 18834; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18836, AnyHashable("message_data"): { datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18836; "message_type" = 0; "prev_session_message_id" = 18835; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18836, AnyHashable("message_data"): { datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18836; "message_type" = 0; "prev_session_message_id" = 18835; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 13:18:12"; "file_name" = ""; message = "Mmmm\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 18836; "message_type" = 0; "prev_session_message_id" = 18835; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18836, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18836] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18834] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18837, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 13:18:20"; "file_name" = ""; message = "\Ud83e\Udd70\Ud83e\Udd70\Ud83e\Udd70"; "message_id" = 18837; "message_type" = 0; "prev_session_message_id" = 18836; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 13:18:20"; "file_name" = ""; message = "\Ud83e\Udd70\Ud83e\Udd70\Ud83e\Udd70"; "message_id" = 18837; "message_type" = 0; "prev_session_message_id" = 18836; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18837, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 13:18:20"; "file_name" = ""; message = "\Ud83e\Udd70\Ud83e\Udd70\Ud83e\Udd70"; "message_id" = 18837; "message_type" = 0; "prev_session_message_id" = 18836; "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"): 18837, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18838] datesent = "2026-01-23 13:18:36"; "file_name" = ""; message = "Do I have a potential ?"; "message_id" = 18839; "message_type" = 0; "prev_session_message_id" = 18838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18839, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 13:18:36"; "file_name" = ""; message = "Do I have a potential ?"; "message_id" = 18839; "message_type" = 0; "prev_session_message_id" = 18838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18839] "content-available" = 1; }, AnyHashable("message_id"): 18839] datesent = "2026-01-23 13:22:02"; "file_name" = ""; message = "What\U2019s yours?"; "message_id" = 18843; "message_type" = 0; "prev_session_message_id" = 18842; "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 = 2; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18843, AnyHashable("message_data"): { datesent = "2026-01-23 13:22:02"; "file_name" = ""; message = "What\U2019s yours?"; "message_id" = 18843; "message_type" = 0; "prev_session_message_id" = 18842; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:02:31"; "file_name" = ""; message = "Wow, 10 years???! Really \Ud83d\Ude33\Ud83d\Ude33\Ud83d\Ude33\Ud83d\Ude33"; "message_id" = 18845; "message_type" = 0; "prev_session_message_id" = 18844; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 14:02:31"; "file_name" = ""; message = "Wow, 10 years???! Really \Ud83d\Ude33\Ud83d\Ude33\Ud83d\Ude33\Ud83d\Ude33"; "message_id" = 18845; "message_type" = 0; "prev_session_message_id" = 18844; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18845] "content-available" = 1; }, AnyHashable("message_id"): 18845] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18842] datesent = "2026-01-23 14:02:40"; "file_name" = ""; message = "You deserve more!"; "message_id" = 18846; "message_type" = 0; "prev_session_message_id" = 18845; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:02:40"; "file_name" = ""; message = "You deserve more!"; "message_id" = 18846; "message_type" = 0; "prev_session_message_id" = 18845; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:02:40"; "file_name" = ""; message = "You deserve more!"; "message_id" = 18846; "message_type" = 0; "prev_session_message_id" = 18845; "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"): 18846] "content-available" = 1; }, AnyHashable("message_id"): 18846, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 14:02:53"; "file_name" = ""; message = Baby; "message_id" = 18847; "message_type" = 0; "prev_session_message_id" = 18846; "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"): 18847] datesent = "2026-01-23 14:02:53"; "file_name" = ""; message = Baby; "message_id" = 18847; "message_type" = 0; "prev_session_message_id" = 18846; "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"): 18847] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 14:02:53"; "file_name" = ""; message = Baby; "message_id" = 18847; "message_type" = 0; "prev_session_message_id" = 18846; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18847, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18847, AnyHashable("operation_type"): 3] datesent = "2026-01-23 14:02:59"; "file_name" = ""; message = "An order for you"; "message_id" = 18849; "message_type" = 0; "prev_session_message_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18849] datesent = "2026-01-23 14:02:59"; "file_name" = ""; message = "An order for you"; "message_id" = 18849; "message_type" = 0; "prev_session_message_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18849] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18849, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 14:02:59"; "file_name" = ""; message = "An order for you"; "message_id" = 18849; "message_type" = 0; "prev_session_message_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18849] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18848] datesent = "2026-01-23 14:03:15"; "file_name" = ""; message = "I want you to come tonight!"; "message_id" = 18850; "message_type" = 0; "prev_session_message_id" = 18849; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18850, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:03:15"; "file_name" = ""; message = "I want you to come tonight!"; "message_id" = 18850; "message_type" = 0; "prev_session_message_id" = 18849; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18850, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 14:03:15"; "file_name" = ""; message = "I want you to come tonight!"; "message_id" = 18850; "message_type" = 0; "prev_session_message_id" = 18849; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18850, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18850, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 14:03:25"; "file_name" = ""; message = "\Ud83e\Udd7a\Ud83e\Udd7a\Ud83e\Udd7a"; "message_id" = 18851; "message_type" = 0; "prev_session_message_id" = 18850; "replied_message" = "Yeah baby. But blocked 8 years by Amar and Natascia."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18851, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 14:03:25"; "file_name" = ""; message = "\Ud83e\Udd7a\Ud83e\Udd7a\Ud83e\Udd7a"; "message_id" = 18851; "message_type" = 0; "prev_session_message_id" = 18850; "replied_message" = "Yeah baby. But blocked 8 years by Amar and Natascia."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18851, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 14:03:25"; "file_name" = ""; message = "\Ud83e\Udd7a\Ud83e\Udd7a\Ud83e\Udd7a"; "message_id" = 18851; "message_type" = 0; "prev_session_message_id" = 18850; "replied_message" = "Yeah baby. But blocked 8 years by Amar and Natascia."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18848; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18851, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18853, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18854, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:04:18"; "file_name" = ""; message = "I want you to come! There is no but !"; "message_id" = 18856; "message_type" = 0; "prev_session_message_id" = 18855; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18856, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18856, AnyHashable("message_data"): { datesent = "2026-01-23 14:04:18"; "file_name" = ""; message = "I want you to come! There is no but !"; "message_id" = 18856; "message_type" = 0; "prev_session_message_id" = 18855; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18856, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:04:26"; "file_name" = ""; message = "I will"; "message_id" = 18857; "message_type" = 0; "prev_session_message_id" = 18856; "replied_message" = "You can me suffer much more"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18854; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18857, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:04:26"; "file_name" = ""; message = "I will"; "message_id" = 18857; "message_type" = 0; "prev_session_message_id" = 18856; "replied_message" = "You can me suffer much more"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18854; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18857, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:04:26"; "file_name" = ""; message = "I will"; "message_id" = 18857; "message_type" = 0; "prev_session_message_id" = 18856; "replied_message" = "You can me suffer much more"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18854; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18857, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18858, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 14:04:47"; "file_name" = ""; message = "But this is what I want right now"; "message_id" = 18858; "message_type" = 0; "prev_session_message_id" = 18857; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18858, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 14:04:47"; "file_name" = ""; message = "But this is what I want right now"; "message_id" = 18858; "message_type" = 0; "prev_session_message_id" = 18857; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-23 14:04:47"; "file_name" = ""; message = "But this is what I want right now"; "message_id" = 18858; "message_type" = 0; "prev_session_message_id" = 18857; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18858, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18858] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:12:56"; "file_name" = ""; message = "You have to think about me for sure \Ud83d\Ude0f\Ud83d\Ude09"; "message_id" = 18860; "message_type" = 0; "prev_session_message_id" = 18859; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18860] "content-available" = 1; }, AnyHashable("message_id"): 18860] datesent = "2026-01-23 14:13:23"; "file_name" = ""; message = "But it doesn\U2019t matter with her or alone. You decide !"; "message_id" = 18861; "message_type" = 0; "prev_session_message_id" = 18860; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18861, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:13:23"; "file_name" = ""; message = "But it doesn\U2019t matter with her or alone. You decide !"; "message_id" = 18861; "message_type" = 0; "prev_session_message_id" = 18860; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18861, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:13:23"; "file_name" = ""; message = "But it doesn\U2019t matter with her or alone. You decide !"; "message_id" = 18861; "message_type" = 0; "prev_session_message_id" = 18860; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18861] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18861] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18859, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18863] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18865] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18865,"event_type":2} "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18866, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18866, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18866] datesent = "2026-01-23 14:43:44"; "file_name" = ""; message = "IWU2 my looooove\U2665\Ufe0f"; "message_id" = 18867; "message_type" = 0; "prev_session_message_id" = 18866; "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"): 18867, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:43:44"; "file_name" = ""; message = "IWU2 my looooove\U2665\Ufe0f"; "message_id" = 18867; "message_type" = 0; "prev_session_message_id" = 18866; "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"): 18867, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18867, AnyHashable("message_data"): { datesent = "2026-01-23 14:43:44"; "file_name" = ""; message = "IWU2 my looooove\U2665\Ufe0f"; "message_id" = 18867; "message_type" = 0; "prev_session_message_id" = 18866; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-23 14:44:19"; "file_name" = ""; message = "Dinner at swiss with melis\Ud83d\Ude43"; "message_id" = 18869; "message_type" = 0; "prev_session_message_id" = 18868; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18869, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] 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-23 14:44:28"; "file_name" = ""; message = "You saw on my agenda \Ud83e\Udd2d"; "message_id" = 18870; "message_type" = 0; "prev_session_message_id" = 18869; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18870] 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-23 14:44:28"; "file_name" = ""; message = "You saw on my agenda \Ud83e\Udd2d"; "message_id" = 18870; "message_type" = 0; "prev_session_message_id" = 18869; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18870] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18870, AnyHashable("message_data"): { datesent = "2026-01-23 14:44:28"; "file_name" = ""; message = "You saw on my agenda \Ud83e\Udd2d"; "message_id" = 18870; "message_type" = 0; "prev_session_message_id" = 18869; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18870, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18872] "content-available" = 1; }, AnyHashable("message_id"): 18873, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18873, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18873, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18873, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 14:46:03"; "file_name" = ""; message = "\Ud83e\Udd70\Ud83e\Udd70\Ud83e\Udd70"; "message_id" = 18877; "message_type" = 0; "prev_session_message_id" = 18876; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18877] datesent = "2026-01-23 14:46:03"; "file_name" = ""; message = "\Ud83e\Udd70\Ud83e\Udd70\Ud83e\Udd70"; "message_id" = 18877; "message_type" = 0; "prev_session_message_id" = 18876; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 18877, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18878, AnyHashable("message_data"): { datesent = "2026-01-23 14:46:29"; "file_name" = ""; message = "Have you ever tried anything different with your wife during sex?"; "message_id" = 18878; "message_type" = 0; "prev_session_message_id" = 18877; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18878] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18878] datesent = "2026-01-23 14:46:43"; "file_name" = ""; message = "Or what was the different one\Ud83e\Udd2d"; "message_id" = 18879; "message_type" = 0; "prev_session_message_id" = 18878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:46:43"; "file_name" = ""; message = "Or what was the different one\Ud83e\Udd2d"; "message_id" = 18879; "message_type" = 0; "prev_session_message_id" = 18878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:46:43"; "file_name" = ""; message = "Or what was the different one\Ud83e\Udd2d"; "message_id" = 18879; "message_type" = 0; "prev_session_message_id" = 18878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18879] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18879] datesent = "2026-01-23 14:46:55"; "file_name" = ""; message = "I want you to try something different today"; "message_id" = 18880; "message_type" = 0; "prev_session_message_id" = 18879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18880, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:46:55"; "file_name" = ""; message = "I want you to try something different today"; "message_id" = 18880; "message_type" = 0; "prev_session_message_id" = 18879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18880, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 14:46:55"; "file_name" = ""; message = "I want you to try something different today"; "message_id" = 18880; "message_type" = 0; "prev_session_message_id" = 18879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18880, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18880] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18881, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:02"; "file_name" = ""; message = "Different position maybe"; "message_id" = 18881; "message_type" = 0; "prev_session_message_id" = 18880; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18881, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:02"; "file_name" = ""; message = "Different position maybe"; "message_id" = 18881; "message_type" = 0; "prev_session_message_id" = 18880; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:02"; "file_name" = ""; message = "Different position maybe"; "message_id" = 18881; "message_type" = 0; "prev_session_message_id" = 18880; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18881, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18875] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18875] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18882] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:47"; "file_name" = ""; message = "What about oral sex?"; "message_id" = 18883; "message_type" = 0; "prev_session_message_id" = 18882; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:47"; "file_name" = ""; message = "What about oral sex?"; "message_id" = 18883; "message_type" = 0; "prev_session_message_id" = 18882; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:47:47"; "file_name" = ""; message = "What about oral sex?"; "message_id" = 18883; "message_type" = 0; "prev_session_message_id" = 18882; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18883, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18883, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:47:53"; "file_name" = ""; message = "Does she like?"; "message_id" = 18884; "message_type" = 0; "prev_session_message_id" = 18883; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 14:47:53"; "file_name" = ""; message = "Does she like?"; "message_id" = 18884; "message_type" = 0; "prev_session_message_id" = 18883; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 14:47:53"; "file_name" = ""; message = "Does she like?"; "message_id" = 18884; "message_type" = 0; "prev_session_message_id" = 18883; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18884, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:48:11"; "file_name" = ""; message = "Or do you like to do with her?"; "message_id" = 18885; "message_type" = 0; "prev_session_message_id" = 18884; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 14:48:11"; "file_name" = ""; message = "Or do you like to do with her?"; "message_id" = 18885; "message_type" = 0; "prev_session_message_id" = 18884; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] 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-23 14:48:11"; "file_name" = ""; message = "Or do you like to do with her?"; "message_id" = 18885; "message_type" = 0; "prev_session_message_id" = 18884; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18885] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18886, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 14:49:51"; "file_name" = ""; message = "Can you watch it?"; "message_id" = 18888; "message_type" = 0; "prev_session_message_id" = 18887; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18888, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 14:49:51"; "file_name" = ""; message = "Can you watch it?"; "message_id" = 18888; "message_type" = 0; "prev_session_message_id" = 18887; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18888, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18888] datesent = "2026-01-23 14:50:45"; "file_name" = ""; message = "I guess I dont want to see it"; "message_id" = 18891; "message_type" = 0; "prev_session_message_id" = 18890; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18891, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18891, AnyHashable("message_data"): { datesent = "2026-01-23 14:50:45"; "file_name" = ""; message = "I guess I dont want to see it"; "message_id" = 18891; "message_type" = 0; "prev_session_message_id" = 18890; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] alert = { body = ""; title = StreamCam; }; badge = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18894] "content-available" = 1; }, AnyHashable("message_id"): 18895, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18895] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18899, AnyHashable("message_data"): { datesent = "2026-01-23 15:02:27"; "file_name" = ""; message = "Ha ha \Ud83e\Udd23"; "message_id" = 18899; "message_type" = 0; "prev_session_message_id" = 18898; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18899, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 15:02:27"; "file_name" = ""; message = "Ha ha \Ud83e\Udd23"; "message_id" = 18899; "message_type" = 0; "prev_session_message_id" = 18898; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }] datesent = "2026-01-23 15:02:47"; "file_name" = ""; message = "Make sense"; "message_id" = 18900; "message_type" = 0; "prev_session_message_id" = 18899; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18900] datesent = "2026-01-23 15:02:47"; "file_name" = ""; message = "Make sense"; "message_id" = 18900; "message_type" = 0; "prev_session_message_id" = 18899; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18900] datesent = "2026-01-23 15:02:47"; "file_name" = ""; message = "Make sense"; "message_id" = 18900; "message_type" = 0; "prev_session_message_id" = 18899; "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; }] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 15:02:49"; "file_name" = ""; message = "\Ud83e\Udd2a\Ud83e\Udd2a"; "message_id" = 18901; "message_type" = 0; "prev_session_message_id" = 18900; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-23 15:02:49"; "file_name" = ""; message = "\Ud83e\Udd2a\Ud83e\Udd2a"; "message_id" = 18901; "message_type" = 0; "prev_session_message_id" = 18900; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] datesent = "2026-01-23 15:02:49"; "file_name" = ""; message = "\Ud83e\Udd2a\Ud83e\Udd2a"; "message_id" = 18901; "message_type" = 0; "prev_session_message_id" = 18900; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18901] datesent = "2026-01-23 15:02:49"; "file_name" = ""; message = "\Ud83e\Udd2a\Ud83e\Udd2a"; "message_id" = 18901; "message_type" = 0; "prev_session_message_id" = 18900; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18901] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18901] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask <20E4B1E2-2B79-4864-8F48-151078BDDC1B>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <20E4B1E2-2B79-4864-8F48-151078BDDC1B>.<1>} "LocalWebSocketTask <654965D2-C196-4240-990A-C232CC223F7A>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <654965D2-C196-4240-990A-C232CC223F7A>.<1>} "content-available" = 1; }, AnyHashable("message_id"): 18904, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-23 16:50:35"; "file_name" = ""; message = "Thank you babyy\U2665\Ufe0f"; "message_id" = 18905; "message_type" = 0; "prev_session_message_id" = 18904; "replied_message" = "Enjoy Melis !!"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18903; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18905, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-23 16:50:35"; "file_name" = ""; message = "Thank you babyy\U2665\Ufe0f"; "message_id" = 18905; "message_type" = 0; "prev_session_message_id" = 18904; "replied_message" = "Enjoy Melis !!"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18903; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18905, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18905, AnyHashable("message_data"): { datesent = "2026-01-23 16:50:35"; "file_name" = ""; message = "Thank you babyy\U2665\Ufe0f"; "message_id" = 18905; "message_type" = 0; "prev_session_message_id" = 18904; "replied_message" = "Enjoy Melis !!"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18903; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18907, AnyHashable("message_data"): { datesent = "2026-01-23 16:50:57"; "file_name" = ""; message = "Time to time, Im seeing you in my dreams"; "message_id" = 18907; "message_type" = 0; "prev_session_message_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18907, AnyHashable("message_data"): { datesent = "2026-01-23 16:50:57"; "file_name" = ""; message = "Time to time, Im seeing you in my dreams"; "message_id" = 18907; "message_type" = 0; "prev_session_message_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 16:50:57"; "file_name" = ""; message = "Time to time, Im seeing you in my dreams"; "message_id" = 18907; "message_type" = 0; "prev_session_message_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18906, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18907, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 16:51:38"; "file_name" = ""; message = "And every time, Im feeling same way \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18909; "message_type" = 0; "prev_session_message_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-23 16:51:38"; "file_name" = ""; message = "And every time, Im feeling same way \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18909; "message_type" = 0; "prev_session_message_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-23 16:51:38"; "file_name" = ""; message = "And every time, Im feeling same way \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18909; "message_type" = 0; "prev_session_message_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18909] "content-available" = 1; }, AnyHashable("message_id"): 18909, AnyHashable("operation_type"): 3] datesent = "2026-01-23 16:51:51"; "file_name" = ""; message = "Still with her baby\U2665\Ufe0f"; "message_id" = 18910; "message_type" = 0; "prev_session_message_id" = 18909; "replied_message" = "Still with her or leaving already ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18910, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 16:51:51"; "file_name" = ""; message = "Still with her baby\U2665\Ufe0f"; "message_id" = 18910; "message_type" = 0; "prev_session_message_id" = 18909; "replied_message" = "Still with her or leaving already ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18910, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-23 16:51:51"; "file_name" = ""; message = "Still with her baby\U2665\Ufe0f"; "message_id" = 18910; "message_type" = 0; "prev_session_message_id" = 18909; "replied_message" = "Still with her or leaving already ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18906; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18910, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18910, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18910] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 16:51:58"; "file_name" = ""; message = "More than sweet \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18911; "message_type" = 0; "prev_session_message_id" = 18910; "replied_message" = "Mmmm. Very sweet dreams then \Ud83d\Ude0b"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18911, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 16:51:58"; "file_name" = ""; message = "More than sweet \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18911; "message_type" = 0; "prev_session_message_id" = 18910; "replied_message" = "Mmmm. Very sweet dreams then \Ud83d\Ude0b"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18911, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-23 16:51:58"; "file_name" = ""; message = "More than sweet \Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 18911; "message_type" = 0; "prev_session_message_id" = 18910; "replied_message" = "Mmmm. Very sweet dreams then \Ud83d\Ude0b"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18908; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18911] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 1] -- Response Headers -- Server: Apache/2.4.65 (Debian) Date: Fri, 23 Jan 2026 17:23:25 GMT Content-Length: 67 Keep-Alive: timeout=5, max=97 Content-Type: application/json; charset=utf-8 Connection: Keep-Alive -- Body -- {"ok":true,"event_type":1,"message_id":18912,"session_id":"ILUIWU"} "content-available" = 1; }, AnyHashable("message_id"): 18917, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18920, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18921] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18924] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18923] "content-available" = 1; }, AnyHashable("message_id"): 18922, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18958,"event_type":2} "LocalDataTask .<342>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, _kCFStreamErrorDomainKey=4} - keeping existing messages[08:18:09] [LOG] Pruned 6020 entries older than 3 hours "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18962] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18965, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18964] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18973,"event_type":2}[12:29:55] [LOG] Pruned 1968 entries older than 3 hours "content-available" = 1; }, AnyHashable("message_id"): 18977] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18976, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3][16:49:44] [LOG] Pruned 904 entries older than 3 hours "content-available" = 1; }, AnyHashable("message_id"): 18982, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 13:23:37"; "file_name" = ""; message = "My looooove\U2665\Ufe0f\U2665\Ufe0f"; "message_id" = 18982; "message_type" = 0; "prev_session_message_id" = 18981; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 18982, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 18991, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18988] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18989] datesent = "2026-01-24 20:37:30"; "file_name" = ""; message = "How is your night going babyyy"; "message_id" = 18997; "message_type" = 0; "prev_session_message_id" = 18996; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19013, AnyHashable("message_data"): { datesent = "2026-01-24 22:05:51"; "file_name" = ""; message = "Babyyyyyyyy\Ud83e\Udd29\Ud83e\Udd29\Ud83e\Udd29"; "message_id" = 19013; "message_type" = 0; "prev_session_message_id" = 19012; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 19013] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19014] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19015, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:07:06"; "file_name" = ""; message = "I am actually baby"; "message_id" = 19018; "message_type" = 0; "prev_session_message_id" = 19017; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 19018, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-24 22:07:46"; "file_name" = ""; message = "Nooo\Ud83e\Udd72 my neck is still not good"; "message_id" = 19020; "message_type" = 0; "prev_session_message_id" = 19019; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19020, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:07:58"; "file_name" = ""; message = "I\U2019ll go the doctor on Monday"; "message_id" = 19021; "message_type" = 0; "prev_session_message_id" = 19020; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19023] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19025, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:08:35"; "file_name" = ""; message = "I dont want to do anything wrong, doctor first"; "message_id" = 19025; "message_type" = 0; "prev_session_message_id" = 19024; "replied_message" = "Will you ask for a massage ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19022; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19026, AnyHashable("message_data"): { datesent = "2026-01-24 22:08:43"; "file_name" = ""; message = "Maybe.."; "message_id" = 19026; "message_type" = 0; "prev_session_message_id" = 19025; "replied_message" = "Best thing to do. Maybe osteopath can help you"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19024; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 19026] "content-available" = 1; }, AnyHashable("message_id"): 19027, AnyHashable("message_data"): { datesent = "2026-01-24 22:08:55"; "file_name" = ""; message = "How are you my love"; "message_id" = 19027; "message_type" = 0; "prev_session_message_id" = 19026; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 19027, AnyHashable("message_data"): { datesent = "2026-01-24 22:08:55"; "file_name" = ""; message = "How are you my love"; "message_id" = 19027; "message_type" = 0; "prev_session_message_id" = 19026; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19029, AnyHashable("message_data"): { datesent = "2026-01-24 22:09:06"; "file_name" = ""; message = "Everything is good?"; "message_id" = 19029; "message_type" = 0; "prev_session_message_id" = 19028; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19030] "content-available" = 1; }, AnyHashable("message_id"): 19029] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19031] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19033, AnyHashable("message_data"): { datesent = "2026-01-24 22:09:44"; "file_name" = ""; message = "Happy for you my love"; "message_id" = 19033; "message_type" = 0; "prev_session_message_id" = 19032; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 19033, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-24 22:10:03"; "file_name" = ""; message = "Tomorrow \U26f7\Ufe0f again?"; "message_id" = 19034; "message_type" = 0; "prev_session_message_id" = 19033; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19034, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19034, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19035, AnyHashable("operation_type"): 3] "LocalDataTask .<166>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:12:17"; "file_name" = ""; message = "You tell me\Ud83e\Udd13\Ud83e\Udd13\Ud83e\Udd2a"; "message_id" = 19038; "message_type" = 0; "prev_session_message_id" = 19037; "replied_message" = "Spoiled me, am I not \Ud83d\Ude01 ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19036; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19038] "content-available" = 1; }, AnyHashable("message_id"): 19038, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19039, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19037] "content-available" = 1; }, AnyHashable("message_id"): 19040, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:12:46"; "file_name" = ""; message = "How many hours to your home ?"; "message_id" = 19040; "message_type" = 0; "prev_session_message_id" = 19039; "replied_message" = "I don't think so. We will leave back to home just after lunch time I think so easy peazy in the morning normally"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19035; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19041] "LocalDataTask <2115A431-8814-4310-B92A-33E915FC1898>.<192>" ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=1} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19044, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:13:28"; "file_name" = ""; message = "I\U2019ll be early tomorrow, we are going to breakfast with gorkem, emrah and others"; "message_id" = 19044; "message_type" = 0; "prev_session_message_id" = 19043; "replied_message" = "And for once a late wake up hopefully also"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19039; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19043, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:13:51"; "file_name" = ""; message = "Wooow closer than expected"; "message_id" = 19045; "message_type" = 0; "prev_session_message_id" = 19044; "replied_message" = "It's roughly 1h45 drive time so not too far"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19042; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19045] datesent = "2026-01-24 22:13:56"; "file_name" = ""; message = "Lucky youuuu"; "message_id" = 19047; "message_type" = 0; "prev_session_message_id" = 19046; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19047] "content-available" = 1; }, AnyHashable("message_id"): 19045, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19047] datesent = "2026-01-24 22:14:50"; "file_name" = ""; message = "Yes Im actually. Im a social butterfly \Ud83e\Udd2a"; "message_id" = 19049; "message_type" = 0; "prev_session_message_id" = 19048; "replied_message" = "Oh. Business morning for my baby \Ud83d\Ude0a You like such outings ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19046; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19049] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19049] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:15:37"; "file_name" = ""; message = "You can\U2019t imagine \Ud83d\Ude0f\Ud83d\Ude0f\Ud83d\Ude09"; "message_id" = 19051; "message_type" = 0; "prev_session_message_id" = 19050; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19051] "content-available" = 1; }] "LocalDataTask <07F0EA4B-4990-4764-AF66-8F6223E8FCFA>.<273>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19053] datesent = "2026-01-24 22:21:27"; "file_name" = ""; message = "Yes true, not a good thing but its not including negative feelings. I mean yes Im jealous of you but in a positive way."; "message_id" = 19056; "message_type" = 0; "prev_session_message_id" = 19055; "replied_message" = "I was thinking about it today and really value the fact you're jealous of my wife. I know it's usually not good to be jealous but it shows you are really living that sense of belonging. I belong to you."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19052; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19056, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:21:27"; "file_name" = ""; message = "Yes true, not a good thing but its not including negative feelings. I mean yes Im jealous of you but in a positive way."; "message_id" = 19056; "message_type" = 0; "prev_session_message_id" = 19055; "replied_message" = "I was thinking about it today and really value the fact you're jealous of my wife. I know it's usually not good to be jealous but it shows you are really living that sense of belonging. I belong to you."; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19052; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 19056, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] datesent = "2026-01-24 22:22:07"; "file_name" = ""; message = "Ha ha"; "message_id" = 19060; "message_type" = 0; "prev_session_message_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:22:07"; "file_name" = ""; message = "Ha ha"; "message_id" = 19060; "message_type" = 0; "prev_session_message_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:22:07"; "file_name" = ""; message = "Ha ha"; "message_id" = 19060; "message_type" = 0; "prev_session_message_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19060] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-24 22:22:44"; "file_name" = ""; message = "Trueee!"; "message_id" = 19061; "message_type" = 0; "prev_session_message_id" = 19060; "replied_message" = "Every element is an opportunity for us baby"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19061, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:22:44"; "file_name" = ""; message = "Trueee!"; "message_id" = 19061; "message_type" = 0; "prev_session_message_id" = 19060; "replied_message" = "Every element is an opportunity for us baby"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19061, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:22:44"; "file_name" = ""; message = "Trueee!"; "message_id" = 19061; "message_type" = 0; "prev_session_message_id" = 19060; "replied_message" = "Every element is an opportunity for us baby"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19059; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19061, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19062] "LocalWebSocketTask <5689C622-E2B1-4A2D-BAB4-5885B3C95F94>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5689C622-E2B1-4A2D-BAB4-5885B3C95F94>.<1>} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:23:50"; "file_name" = ""; message = "Nope\Ud83d\Ude0f"; "message_id" = 19063; "message_type" = 0; "prev_session_message_id" = 19062; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19063, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19063, AnyHashable("message_data"): { datesent = "2026-01-24 22:23:50"; "file_name" = ""; message = "Nope\Ud83d\Ude0f"; "message_id" = 19063; "message_type" = 0; "prev_session_message_id" = 19062; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19064, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19065] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19065, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19066] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} datesent = "2026-01-24 22:25:46"; "file_name" = ""; message = "You have to convince me for 1-1, I mean when I want to come then you may come"; "message_id" = 19067; "message_type" = 0; "prev_session_message_id" = 19066; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:25:46"; "file_name" = ""; message = "You have to convince me for 1-1, I mean when I want to come then you may come"; "message_id" = 19067; "message_type" = 0; "prev_session_message_id" = 19066; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19067, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:25:46"; "file_name" = ""; message = "You have to convince me for 1-1, I mean when I want to come then you may come"; "message_id" = 19067; "message_type" = 0; "prev_session_message_id" = 19066; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-24 22:26:14"; "file_name" = ""; message = "Which means you have to turn me on\Ud83e\Udd2d"; "message_id" = 19068; "message_type" = 0; "prev_session_message_id" = 19067; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:26:14"; "file_name" = ""; message = "Which means you have to turn me on\Ud83e\Udd2d"; "message_id" = 19068; "message_type" = 0; "prev_session_message_id" = 19067; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:26:14"; "file_name" = ""; message = "Which means you have to turn me on\Ud83e\Udd2d"; "message_id" = 19068; "message_type" = 0; "prev_session_message_id" = 19067; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19068, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19069, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }] datesent = "2026-01-24 22:26:48"; "file_name" = ""; message = Yeap; "message_id" = 19071; "message_type" = 0; "prev_session_message_id" = 19070; "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; }] datesent = "2026-01-24 22:26:48"; "file_name" = ""; message = Yeap; "message_id" = 19071; "message_type" = 0; "prev_session_message_id" = 19070; "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; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19071, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:26:48"; "file_name" = ""; message = Yeap; "message_id" = 19071; "message_type" = 0; "prev_session_message_id" = 19070; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }] datesent = "2026-01-24 22:27:22"; "file_name" = ""; message = Correct; "message_id" = 19074; "message_type" = 0; "prev_session_message_id" = 19073; "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; }] datesent = "2026-01-24 22:27:22"; "file_name" = ""; message = Correct; "message_id" = 19074; "message_type" = 0; "prev_session_message_id" = 19073; "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; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19074, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:27:22"; "file_name" = ""; message = Correct; "message_id" = 19074; "message_type" = 0; "prev_session_message_id" = 19073; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 19074] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19074] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:30:21"; "file_name" = ""; message = "Oh babyyy come on! Of course turned on! But I wasn\U2019t alone so I didn\U2019t have a chance to enjoy with them \Ud83e\Udd24\Ud83e\Udd24\Ud83e\Udd24"; "message_id" = 19077; "message_type" = 0; "prev_session_message_id" = 19076; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19077] datesent = "2026-01-24 22:30:21"; "file_name" = ""; message = "Oh babyyy come on! Of course turned on! But I wasn\U2019t alone so I didn\U2019t have a chance to enjoy with them \Ud83e\Udd24\Ud83e\Udd24\Ud83e\Udd24"; "message_id" = 19077; "message_type" = 0; "prev_session_message_id" = 19076; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19077, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 19077, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19078] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:31:38"; "file_name" = ""; message = "Yes baby \U2665\Ufe0f"; "message_id" = 19079; "message_type" = 0; "prev_session_message_id" = 19078; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19079, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:31:38"; "file_name" = ""; message = "Yes baby \U2665\Ufe0f"; "message_id" = 19079; "message_type" = 0; "prev_session_message_id" = 19078; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19079, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:31:38"; "file_name" = ""; message = "Yes baby \U2665\Ufe0f"; "message_id" = 19079; "message_type" = 0; "prev_session_message_id" = 19078; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19079, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:31:38"; "file_name" = ""; message = "Yes baby \U2665\Ufe0f"; "message_id" = 19079; "message_type" = 0; "prev_session_message_id" = 19078; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-24 22:33:32"; "file_name" = ""; message = "In bed, starting slowly"; "message_id" = 19084; "message_type" = 0; "prev_session_message_id" = 19083; "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 = 2; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19084, AnyHashable("message_data"): { datesent = "2026-01-24 22:33:32"; "file_name" = ""; message = "In bed, starting slowly"; "message_id" = 19084; "message_type" = 0; "prev_session_message_id" = 19083; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19084] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 1] -- Response Headers -- Date: Sat, 24 Jan 2026 22:35:56 GMT Content-Type: application/json; charset=utf-8 Keep-Alive: timeout=5, max=100 Server: Apache/2.4.65 (Debian) Content-Length: 67 Connection: Keep-Alive -- Body -- {"ok":true,"event_type":1,"message_id":19083,"session_id":"ILUIWU"} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:36:38"; "file_name" = ""; message = "I want him!"; "message_id" = 19088; "message_type" = 0; "prev_session_message_id" = 19087; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-24 22:36:38"; "file_name" = ""; message = "I want him!"; "message_id" = 19088; "message_type" = 0; "prev_session_message_id" = 19087; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19088, AnyHashable("message_data"): { datesent = "2026-01-24 22:36:38"; "file_name" = ""; message = "I want him!"; "message_id" = 19088; "message_type" = 0; "prev_session_message_id" = 19087; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:36:44"; "file_name" = ""; message = "In me!"; "message_id" = 19089; "message_type" = 0; "prev_session_message_id" = 19088; "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; }] datesent = "2026-01-24 22:36:44"; "file_name" = ""; message = "In me!"; "message_id" = 19089; "message_type" = 0; "prev_session_message_id" = 19088; "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; }] datesent = "2026-01-24 22:36:44"; "file_name" = ""; message = "In me!"; "message_id" = 19089; "message_type" = 0; "prev_session_message_id" = 19088; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19089] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19090] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":19090,"event_type":2} "content-available" = 1; }, AnyHashable("message_id"): 19090, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:37:11"; "file_name" = ""; message = "Yes baby, I can"; "message_id" = 19091; "message_type" = 0; "prev_session_message_id" = 19090; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-24 22:37:11"; "file_name" = ""; message = "Yes baby, I can"; "message_id" = 19091; "message_type" = 0; "prev_session_message_id" = 19090; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-24 22:37:11"; "file_name" = ""; message = "Yes baby, I can"; "message_id" = 19091; "message_type" = 0; "prev_session_message_id" = 19090; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19091] "content-available" = 1; }, AnyHashable("message_id"): 19091, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:37:33"; "file_name" = ""; message = "From your face, from his shape, I can see\Ud83d\Ude0f\Ud83e\Udd24"; "message_id" = 19093; "message_type" = 0; "prev_session_message_id" = 19092; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19093] datesent = "2026-01-24 22:37:33"; "file_name" = ""; message = "From your face, from his shape, I can see\Ud83d\Ude0f\Ud83e\Udd24"; "message_id" = 19093; "message_type" = 0; "prev_session_message_id" = 19092; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19093] datesent = "2026-01-24 22:37:33"; "file_name" = ""; message = "From your face, from his shape, I can see\Ud83d\Ude0f\Ud83e\Udd24"; "message_id" = 19093; "message_type" = 0; "prev_session_message_id" = 19092; "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; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19093, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19094, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:41:06"; "file_name" = ""; message = Babyy; "message_id" = 19095; "message_type" = 0; "prev_session_message_id" = 19094; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19095] datesent = "2026-01-24 22:41:06"; "file_name" = ""; message = Babyy; "message_id" = 19095; "message_type" = 0; "prev_session_message_id" = 19094; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19095] datesent = "2026-01-24 22:41:06"; "file_name" = ""; message = Babyy; "message_id" = 19095; "message_type" = 0; "prev_session_message_id" = 19094; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19095] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:41:18"; "file_name" = ""; message = "I need you"; "message_id" = 19096; "message_type" = 0; "prev_session_message_id" = 19095; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:41:18"; "file_name" = ""; message = "I need you"; "message_id" = 19096; "message_type" = 0; "prev_session_message_id" = 19095; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:41:18"; "file_name" = ""; message = "I need you"; "message_id" = 19096; "message_type" = 0; "prev_session_message_id" = 19095; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19096] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19096] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19097] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":19098,"event_type":2} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19098, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:42:03"; "file_name" = ""; message = "Sooooo much!!!"; "message_id" = 19099; "message_type" = 0; "prev_session_message_id" = 19098; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19099, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:42:03"; "file_name" = ""; message = "Sooooo much!!!"; "message_id" = 19099; "message_type" = 0; "prev_session_message_id" = 19098; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19099, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:42:03"; "file_name" = ""; message = "Sooooo much!!!"; "message_id" = 19099; "message_type" = 0; "prev_session_message_id" = 19098; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19099, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:42:03"; "file_name" = ""; message = "Sooooo much!!!"; "message_id" = 19099; "message_type" = 0; "prev_session_message_id" = 19098; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":19100,"event_type":2} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19100] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:44:01"; "file_name" = ""; message = "Yes but, probably not so quickly"; "message_id" = 19101; "message_type" = 0; "prev_session_message_id" = 19100; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19101, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:44:01"; "file_name" = ""; message = "Yes but, probably not so quickly"; "message_id" = 19101; "message_type" = 0; "prev_session_message_id" = 19100; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19101] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:46:28"; "file_name" = ""; message = "He will come in 15 mins I guess, almost 2am here"; "message_id" = 19104; "message_type" = 0; "prev_session_message_id" = 19103; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19104] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:46:28"; "file_name" = ""; message = "He will come in 15 mins I guess, almost 2am here"; "message_id" = 19104; "message_type" = 0; "prev_session_message_id" = 19103; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19104] datesent = "2026-01-24 22:46:28"; "file_name" = ""; message = "He will come in 15 mins I guess, almost 2am here"; "message_id" = 19104; "message_type" = 0; "prev_session_message_id" = 19103; "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 = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }] "content-available" = 1; }] datesent = "2026-01-24 22:47:08"; "file_name" = ""; message = "I want to keep myself at 5 \Ud83e\Udd2d"; "message_id" = 19105; "message_type" = 0; "prev_session_message_id" = 19104; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:47:08"; "file_name" = ""; message = "I want to keep myself at 5 \Ud83e\Udd2d"; "message_id" = 19105; "message_type" = 0; "prev_session_message_id" = 19104; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:47:08"; "file_name" = ""; message = "I want to keep myself at 5 \Ud83e\Udd2d"; "message_id" = 19105; "message_type" = 0; "prev_session_message_id" = 19104; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19105] "content-available" = 1; }, AnyHashable("message_id"): 19106] "content-available" = 1; }, AnyHashable("message_id"): 19105, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:47:49"; "file_name" = ""; message = "What about you? Are you gonna sleep or read a book?"; "message_id" = 19108; "message_type" = 0; "prev_session_message_id" = 19107; "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; }] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19108, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:47:49"; "file_name" = ""; message = "What about you? Are you gonna sleep or read a book?"; "message_id" = 19108; "message_type" = 0; "prev_session_message_id" = 19107; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19109, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:48:37"; "file_name" = ""; message = "\Ud83e\Udee6"; "message_id" = 19110; "message_type" = 0; "prev_session_message_id" = 19109; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19110] datesent = "2026-01-24 22:48:37"; "file_name" = ""; message = "\Ud83e\Udee6"; "message_id" = 19110; "message_type" = 0; "prev_session_message_id" = 19109; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19110] datesent = "2026-01-24 22:48:37"; "file_name" = ""; message = "\Ud83e\Udee6"; "message_id" = 19110; "message_type" = 0; "prev_session_message_id" = 19109; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19110, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19112, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:48:54"; "file_name" = ""; message = "I want to see you in my dreams again! Come plsss"; "message_id" = 19112; "message_type" = 0; "prev_session_message_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19112, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:48:54"; "file_name" = ""; message = "I want to see you in my dreams again! Come plsss"; "message_id" = 19112; "message_type" = 0; "prev_session_message_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:48:54"; "file_name" = ""; message = "I want to see you in my dreams again! Come plsss"; "message_id" = 19112; "message_type" = 0; "prev_session_message_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19112] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19112, AnyHashable("message_data"): { datesent = "2026-01-24 22:48:54"; "file_name" = ""; message = "I want to see you in my dreams again! Come plsss"; "message_id" = 19112; "message_type" = 0; "prev_session_message_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19112] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19115, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:49:39"; "file_name" = ""; message = "If you are not so tired, then one more 1-0 would be great \Ud83d\Ude09"; "message_id" = 19115; "message_type" = 0; "prev_session_message_id" = 19114; "replied_message" = "(assuming you don't want to be more cruel with me \Ud83d\Ude09)"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19115, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:49:39"; "file_name" = ""; message = "If you are not so tired, then one more 1-0 would be great \Ud83d\Ude09"; "message_id" = 19115; "message_type" = 0; "prev_session_message_id" = 19114; "replied_message" = "(assuming you don't want to be more cruel with me \Ud83d\Ude09)"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19111; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-24 22:49:39"; "file_name" = ""; message = "If you are not so tired, then one more 1-0 would be great \Ud83d\Ude09"; "message_id" = 19115; "message_type" = 0; "prev_session_message_id" = 19114; "replied_message" = "(assuming you don't want to be more cruel with me \Ud83d\Ude09)"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19111; "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; }] "content-available" = 1; }] datesent = "2026-01-24 22:49:52"; "file_name" = ""; message = "Ha ha \Ud83e\Udd2a"; "message_id" = 19116; "message_type" = 0; "prev_session_message_id" = 19115; "replied_message" = "I know. In your dreams \Ud83d\Ude01"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19114; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:49:52"; "file_name" = ""; message = "Ha ha \Ud83e\Udd2a"; "message_id" = 19116; "message_type" = 0; "prev_session_message_id" = 19115; "replied_message" = "I know. In your dreams \Ud83d\Ude01"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19114; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:49:52"; "file_name" = ""; message = "Ha ha \Ud83e\Udd2a"; "message_id" = 19116; "message_type" = 0; "prev_session_message_id" = 19115; "replied_message" = "I know. In your dreams \Ud83d\Ude01"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 19114; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19116] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19116, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19118, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:01"; "file_name" = ""; message = "\U2665\Ufe0f\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 19118; "message_type" = 0; "prev_session_message_id" = 19117; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19118, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:01"; "file_name" = ""; message = "\U2665\Ufe0f\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 19118; "message_type" = 0; "prev_session_message_id" = 19117; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] datesent = "2026-01-24 22:50:01"; "file_name" = ""; message = "\U2665\Ufe0f\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 19118; "message_type" = 0; "prev_session_message_id" = 19117; "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"): 19118, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19118, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] datesent = "2026-01-24 22:50:09"; "file_name" = ""; message = "Then enjoy my love\U2665\Ufe0f"; "message_id" = 19119; "message_type" = 0; "prev_session_message_id" = 19118; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19119, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] datesent = "2026-01-24 22:50:09"; "file_name" = ""; message = "Then enjoy my love\U2665\Ufe0f"; "message_id" = 19119; "message_type" = 0; "prev_session_message_id" = 19118; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19119, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19119, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:09"; "file_name" = ""; message = "Then enjoy my love\U2665\Ufe0f"; "message_id" = 19119; "message_type" = 0; "prev_session_message_id" = 19118; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19120, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19121, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:19"; "file_name" = ""; message = ILU; "message_id" = 19121; "message_type" = 0; "prev_session_message_id" = 19120; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19121, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:19"; "file_name" = ""; message = ILU; "message_id" = 19121; "message_type" = 0; "prev_session_message_id" = 19120; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19121, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:19"; "file_name" = ""; message = ILU; "message_id" = 19121; "message_type" = 0; "prev_session_message_id" = 19120; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19121, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:39"; "file_name" = ""; message = "Good night \Ud83e\Udee6"; "message_id" = 19124; "message_type" = 0; "prev_session_message_id" = 19123; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19124, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:39"; "file_name" = ""; message = "Good night \Ud83e\Udee6"; "message_id" = 19124; "message_type" = 0; "prev_session_message_id" = 19123; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19124, AnyHashable("session_id"): ILUIWU] datesent = "2026-01-24 22:50:39"; "file_name" = ""; message = "Good night \Ud83e\Udee6"; "message_id" = 19124; "message_type" = 0; "prev_session_message_id" = 19123; "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; }] "content-available" = 1; }, AnyHashable("message_id"): 19124, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19126, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:55"; "file_name" = ""; message = "Ha ha\Ud83e\Udd2d\Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 19126; "message_type" = 0; "prev_session_message_id" = 19125; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19126, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:55"; "file_name" = ""; message = "Ha ha\Ud83e\Udd2d\Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 19126; "message_type" = 0; "prev_session_message_id" = 19125; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-24 22:50:55"; "file_name" = ""; message = "Ha ha\Ud83e\Udd2d\Ud83e\Udd2d\Ud83e\Udd2d"; "message_id" = 19126; "message_type" = 0; "prev_session_message_id" = 19125; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19126] "content-available" = 1; }, AnyHashable("message_id"): 19126, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "LocalDataTask <1688884E-EB1F-4FBD-A2CE-6855E0AC372A>.<26>" ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=1} -- Response Headers -- Connection: Keep-Alive Server: Apache/2.4.65 (Debian) Keep-Alive: timeout=5, max=100 Date: Sat, 24 Jan 2026 23:02:14 GMT Content-Type: application/json; charset=utf-8 Content-Length: 67 -- Body -- {"ok":true,"event_type":1,"message_id":19132,"session_id":"ILUIWU"} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19083, AnyHashable("session_id"): ILUIWU][07:32:27] [LOG] Pruned 11413 entries older than 3 hours "content-available" = 1; }, AnyHashable("message_id"): 19138, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19139] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19140, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19141] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19142] "content-available" = 1; }, AnyHashable("message_id"): 19149] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19148, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19147] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19146] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-25 13:50:43"; "file_name" = ""; message = "Back home \Ud83d\Ude43"; "message_id" = 19152; "message_type" = 0; "prev_session_message_id" = 19151; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19152, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19152, AnyHashable("session_id"): ILUIWU] "LocalDataTask <184AE323-0BBE-4EDF-BC99-2D9305C1ACB3>.<8>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF&since_id=19158, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF&since_id=19158, _kCFStreamErrorDomainKey=4} "LocalDataTask .<22>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} "LocalWebSocketTask <8B788495-17C7-46A7-BD11-BC79FF58AA05>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <8B788495-17C7-46A7-BD11-BC79FF58AA05>.<1>, NSLocalizedDescription=cancelled} "LocalDataTask <0808DC6E-5F05-4DB1-949A-D9F163563FD0>.<1>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/register_device.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/register_device.php, _kCFStreamErrorDomainKey=4} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19157, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask <6293631B-03F8-4278-A41D-FBE89FCEB36D>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6293631B-03F8-4278-A41D-FBE89FCEB36D>.<1>} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 19166, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 19165, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 19172] "content-available" = 1; }, AnyHashable("message_id"): 19171, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19170] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":19174,"event_type":2}[06:55:03] [LOG] Pruned 940 entries older than 3 hours "LocalDataTask <2BE3F0BF-1506-4A87-9C1C-FB63CA0B6407>.<16>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU, _kCFStreamErrorDomainKey=4} "content-available" = 1; }, AnyHashable("message_id"): 19175] "LocalDataTask .<31>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&messages=19175&mark_read=0, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&messages=19175&mark_read=0, _kCFStreamErrorDomainKey=4} "LocalDataTask <8064542B-4B62-4E84-8B9D-F04ABDBC475E>.<21>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU&m=get, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU&m=get, _kCFStreamErrorDomainKey=4} "content-available" = 1; }, AnyHashable("operation_type"): 3] [08:00:32] [NETWORK] Status changed: connected [08:00:32] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:00:32] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [08:00:32] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:00:32] [LIFECYCLE] App entering foreground - restoring connections [08:00:32] [LIFECYCLE] Away > 2 minutes (1393s) - will scroll to bottom [08:00:32] [UPLOAD_RETRY] No pending uploads to retry [08:00:32] [LIFECYCLE] Merged 972 reactions from local DB [08:00:32] [LIFECYCLE] WebRTC audio re-enabled [08:00:32] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:00:32] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [08:00:32] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:00:32] [VIEWER] Reconnecting after background - querying agents [08:00:32] [UNSENT_RETRY] Checking for unsent messages... [08:00:32] [PENDING_UPLOAD] Total pending upload messages: 0 [08:00:32] [UNSENT_RETRY] No unsent messages found [08:00:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19178, 19177, 19176, 19175, 19174] [08:00:32] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:32] [CELL_UPLOAD] → not my message, setting complete [08:00:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:32] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:32] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:32] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:00:32] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:00:32] [PUSH] handlePollEventsNotification userInfo: [:] [08:00:32] [PUSH] No message_id in userInfo [08:00:32] [PUSH] No operation_type in userInfo [08:00:32] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:00:32] [FAST_REFRESH] Already have 51 messages - skipping local DB load [08:00:32] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:00:32] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:00:32] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [08:00:32] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19178 [08:00:32] [CLIENT_SIG] WebSocket opened [08:00:32] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:00:32] [CLIENT_SIG] Connected! clientId=JpvGJlZQm6xW0XQd [08:00:32] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:00:32] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:00:32] [INCREMENTAL_SYNC] ✅ No new messages [08:00:32] [FAST_REFRESH] Incremental sync complete - 51 messages [08:00:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19178, 19177, 19176, 19175, 19174] [08:00:32] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:32] [CELL_UPLOAD] → not my message, setting complete [08:00:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:32] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:32] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:33] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:00:33] [FOREGROUND] Enriched 0 messages with readBy data from server [08:00:33] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:00:33] [FAST_REFRESH] Enriched 51 messages with readBy data [08:00:33] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:00:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19178, 19177, 19176, 19175, 19174] [08:00:33] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:33] [CELL_UPLOAD] → not my message, setting complete [08:00:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:33] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:33] [PIN_AUTH] Correct PIN [08:00:33] [SECURITY] Restored real session: ILUIWU [08:00:33] [SECURITY] Restored real session: ILUIWU [08:00:33] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [08:00:33] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:00:33] [AUTH] UI update complete [08:00:33] [FAKE MODE] Exiting fake mode, restoring real session [08:00:33] [SECURITY] Restored real session: ILUIWU [08:00:33] [SECURITY] Saved real session: ILUIWU [08:00:33] [FAKE MODE] ✅ Restored real session: ILUIWU [08:00:33] [FAKE MODE] Loaded 50 messages (limited to page size) [08:00:34] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:00:34] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:00:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → not my message, setting complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:00:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → not my message, setting complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:34] [USER] ✅ User registered successfully [08:00:34] [PUSH] User registration after token update: success [08:00:34] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:00:34] [FAKE MODE] Enriched 50 messages with readBy data [08:00:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:00:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → not my message, setting complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:00:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:00:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:00:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:00:38] [LIFECYCLE] App resigning active - cleared crash flag [08:00:39] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [08:00:39] [SECURITY] Saved background timestamp [08:00:39] [LIFECYCLE] App entering background - cleared crash flag [08:00:39] [CLIENT_SIG] Disconnecting [08:00:39] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [08:00:39] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [08:00:39] In cleanupPeer [08:00:39] In cleanupPeer [08:00:39] [LIFECYCLE] WebRTC audio disabled [08:00:39] [LIFECYCLE] AVAudioSession deactivated [08:00:39] [LIFECYCLE] All connections stopped [08:00:39] [CLIENT_SIG] WebSocket closed with code 1001 [08:00:39] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:00:39] [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/} [08:00:39] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:00:39] [SERVER] Stopped reconnect polling [08:00:39] Will request stop of video 0 [08:00:39] Will request stop of video 0 [08:00:39] [PIP] Removing 0 tracks from PiP for connection 0 [08:00:39] [PIP] ✅ All tracks removed for connection 0 [08:00:39] [PIP] Removing 0 tracks from PiP for connection 0 [08:00:39] [PIP] ✅ All tracks removed for connection 0 [08:22:33] [SECURITY] Timeout check: elapsed=1313.8464848995209s, timeout=300.0s [08:22:33] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [08:22:33] [AUTH] ✅ All guards passed, showing privacy cover [08:22:33] [LIFECYCLE] App entering foreground - restoring connections [08:22:33] [LIFECYCLE] Away > 2 minutes (1313s) - will scroll to bottom [08:22:33] [UPLOAD_RETRY] No pending uploads to retry [08:22:33] [LIFECYCLE] Merged 972 reactions from local DB [08:22:33] [LIFECYCLE] WebRTC audio re-enabled [08:22:33] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:22:33] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [08:22:33] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:22:33] [VIEWER] Reconnecting after background - querying agents [08:22:33] [UNSENT_RETRY] Checking for unsent messages... [08:22:33] [PENDING_UPLOAD] Total pending upload messages: 0 [08:22:33] [UNSENT_RETRY] No unsent messages found [08:22:33] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:22:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:22:33] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:33] [CELL_UPLOAD] → not my message, setting complete [08:22:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:33] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:33] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:22:33] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:22:33] [PUSH] handlePollEventsNotification userInfo: [:] [08:22:33] [PUSH] No message_id in userInfo [08:22:33] [PUSH] No operation_type in userInfo [08:22:33] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:22:33] [FAST_REFRESH] Already have 50 messages - skipping local DB load [08:22:33] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:22:33] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:22:33] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [08:22:33] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19178 [08:22:33] [INCREMENTAL_SYNC] ✅ No new messages [08:22:33] [FAST_REFRESH] Incremental sync complete - 50 messages [08:22:33] [CLIENT_SIG] WebSocket opened [08:22:33] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:22:33] [CLIENT_SIG] Connected! clientId=fnCsIb2xwJzrFvBu [08:22:33] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:22:33] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:22:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:22:33] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:33] [CELL_UPLOAD] → not my message, setting complete [08:22:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:33] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:33] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:22:33] [FOREGROUND] Enriched 0 messages with readBy data from server [08:22:34] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:22:34] [FAST_REFRESH] Enriched 50 messages with readBy data [08:22:34] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:22:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:22:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → not my message, setting complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:34] [PIN_AUTH] Correct PIN [08:22:34] [SECURITY] Restored real session: ILUIWU [08:22:34] [SECURITY] Restored real session: ILUIWU [08:22:34] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:22:34] [AUTH] UI update complete [08:22:34] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [08:22:34] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:22:34] [FAKE MODE] Exiting fake mode, restoring real session [08:22:34] [SECURITY] Restored real session: ILUIWU [08:22:34] [SECURITY] Saved real session: ILUIWU [08:22:34] [FAKE MODE] ✅ Restored real session: ILUIWU [08:22:34] [FAKE MODE] Loaded 50 messages (limited to page size) [08:22:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → not my message, setting complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:34] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:22:34] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:22:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:22:34] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → not my message, setting complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:34] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:35] [USER] ✅ User registered successfully [08:22:35] [PUSH] User registration after token update: success [08:22:35] [COMBINED_FETCH] Loaded 7940 read receipts, 974 messages with reactions [08:22:35] [FAKE MODE] Enriched 50 messages with readBy data [08:22:35] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19128, 19129, 19130, 19131, 19133] [08:22:35] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:35] [CELL_UPLOAD] → not my message, setting complete [08:22:35] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:35] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:35] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:35] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:56] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [08:22:56] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [08:22:56] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=51 [08:22:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-2, 19178, 19177, 19176, 19175] [08:22:56] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:56] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:56] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [08:22:56] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [08:22:56] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:56] [CELL_UPLOAD] → not my message, setting complete [08:22:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:57] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:57] [CELL_UPLOAD] → not my message, setting complete [08:22:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:57] [LOCK] Lock button tapped - locking app immediately [08:22:57] [LOCK] Received lock app notification [08:22:57] [LIFECYCLE] App resigning active - cleared crash flag [08:22:58] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [08:22:58] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [08:22:58] [LIFECYCLE] App entering background - cleared crash flag [08:22:58] [CLIENT_SIG] Disconnecting [08:22:58] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [08:22:58] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [08:22:58] In cleanupPeer [08:22:58] In cleanupPeer [08:22:58] [LIFECYCLE] WebRTC audio disabled [08:22:58] [LIFECYCLE] AVAudioSession deactivated [08:22:58] [LIFECYCLE] All connections stopped [08:22:58] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19179,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 07:22:56"} [08:22:58] [CHAT] receive_message.php JSON: ["message_type": 0, "file_name": , "datesent_utc": 2026-01-26 07:22:56, "message_id": 19179, "ok": 1, "session_id": ILUIWU] [08:22:58] [DB_UPGRADE] Upgrading message ID: -2 → 19179, preserveOriginalDate=false [08:22:58] [DB_UPGRADE] ✅ Upgraded -2 → 19179 with send_status=0, 1 row(s) affected [08:22:58] [CLIENT_SIG] WebSocket closed with code 1001 [08:22:58] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:22:58] [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/} [08:22:58] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:22:58] [SERVER] Stopped reconnect polling [08:22:58] Will request stop of video 0 [08:22:58] Will request stop of video 0 [08:22:58] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 19179 [08:22:58] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 19179 [08:22:58] ReloadData 9 [08:22:58] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:58] [CELL_UPLOAD] → not my message, setting complete [08:22:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:22:58] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:22:58] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:22:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:22:58] [PIP] Removing 0 tracks from PiP for connection 0 [08:22:58] [PIP] ✅ All tracks removed for connection 0 [08:22:58] [PIP] Removing 0 tracks from PiP for connection 0 [08:22:58] [PIP] ✅ All tracks removed for connection 0 [08:28:14] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:14] [PUSH] Notification tapped - session_id: ILUIWU [08:28:14] [PUSH] Max message_id before tap: 19179 [08:28:14] [PUSH] Stored pending session: ILUIWU [08:28:14] [PUSH_EMBED] 📩 Received embedded message: id=19181, type=0, sender=Esra [08:28:14] [PUSH_EMBED] ✅ Saved message 19181 to local DB (sync) [08:28:14] [PUSH_EMBED] Created new cache with embedded message 19181 [08:28:14] [PUSH_EMBED] Fetching evolution data for message 19181 in background [08:28:14] [PUSH_EMBED] ✅ Fully processed message 19181 [08:28:14] [PUSH] Embedded message handled instantly on tap [08:28:14] [PUSH] Fetching server messages since_id=19179 to catch coalesced notifications on tap [08:28:14] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [08:28:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:28:14] [PUSH_PRELOAD] Fetching up to 50 messages since_id=19179 to catch coalesced notifications [08:28:14] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:14] [LIFECYCLE] App entering foreground - restoring connections [08:28:14] [LIFECYCLE] Away > 2 minutes (315s) - will scroll to bottom [08:28:14] [UPLOAD_RETRY] No pending uploads to retry [08:28:14] [LIFECYCLE] Merged 972 reactions from local DB [08:28:14] [LIFECYCLE] WebRTC audio re-enabled [08:28:14] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:28:14] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [08:28:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:28:14] [VIEWER] Reconnecting after background - querying agents [08:28:14] [UNSENT_RETRY] Checking for unsent messages... [08:28:14] [PENDING_UPLOAD] Total pending upload messages: 0 [08:28:14] [UNSENT_RETRY] No unsent messages found [08:28:14] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:14] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:14] [PUSH_UI] Inserted message 19181 into UI (now 52 messages) [08:28:14] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:28:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19181, 19179, 19178, 19177, 19176] [08:28:14] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:14] [CELL_UPLOAD] → not my message, setting complete [08:28:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:14] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:14] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19179 → 19181 [08:28:14] [CLIENT_SIG] WebSocket opened [08:28:14] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:28:14] [CLIENT_SIG] Connected! clientId=dIu_nwjhWuda-bey [08:28:14] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:28:14] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:28:14] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:14] [PUSH_EMBED] Got evolution data for message 19181, saving to local DB [08:28:14] [PUSH_EMBED] Saved evolution data for message 19181 [08:28:14] [PUSH_PRELOAD] Fetched 2 messages - caching for instant display [08:28:14] [PUSH_PRELOAD] ⚡ Pre-cached 2 messages for instant display (preserved 0 from push) [08:28:14] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:14] [PUSH] Server fetch on tap completed (success=true) [08:28:14] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19181, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:10"; "file_name" = ""; message = "Thank youuu"; "message_id" = 19181; "message_type" = 0; "prev_session_message_id" = 19180; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [08:28:14] [PUSH_EMBED_VC] Message 19181 already in memory - skipping [08:28:14] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:14] [PUSH] Parsed message_id: 19181 [08:28:14] [PUSH] Parsed operation_type: 0 [08:28:14] [PUSH] Taking direct action: opType=0, messageId=19181 [08:28:14] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19181 [08:28:14] [PUSH] ⚡ Message 19181 already in memory - skipping duplicate notification entirely [08:28:14] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:28:14] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:28:14] [PUSH] handlePollEventsNotification userInfo: [:] [08:28:14] [PUSH] No message_id in userInfo [08:28:14] [PUSH] No operation_type in userInfo [08:28:14] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:28:14] [FAST_REFRESH] Already have 52 messages - skipping local DB load [08:28:14] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:28:14] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:28:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [08:28:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19181 [08:28:14] [INCREMENTAL_SYNC] ✅ No new messages [08:28:14] [FAST_REFRESH] Incremental sync complete - 52 messages [08:28:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19181, 19179, 19178, 19177, 19176] [08:28:15] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:15] [CELL_UPLOAD] → not my message, setting complete [08:28:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:15] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:15] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:15] [COMBINED_FETCH] Loaded 7943 read receipts, 974 messages with reactions [08:28:15] [FAST_REFRESH] Enriched 52 messages with readBy data [08:28:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19181, 19179, 19178, 19177, 19176] [08:28:15] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:15] [CELL_UPLOAD] → not my message, setting complete [08:28:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:15] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:15] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:15] [PUSH] Silent push received [08:28:15] [PUSH_EMBED] 📩 Received embedded message: id=19181, type=0, sender=Esra [08:28:15] [PUSH_EMBED] ✅ Saved message 19181 to local DB (sync) [08:28:15] [PUSH_EMBED] Created new cache with embedded message 19181 [08:28:15] [PUSH_EMBED] Fetching evolution data for message 19181 in background [08:28:15] [PUSH_EMBED] ✅ Fully processed message 19181 [08:28:15] [PUSH] Embedded message handled instantly from silent push [08:28:15] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:15] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:15] [PUSH_UI] Message 19181 already in memory - skipping insert [08:28:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19181, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:10"; "file_name" = ""; message = "Thank youuu"; "message_id" = 19181; "message_type" = 0; "prev_session_message_id" = 19180; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [08:28:15] [PUSH_EMBED_VC] Message 19181 already in memory - skipping [08:28:15] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:15] [PUSH] Parsed message_id: 19181 [08:28:15] [PUSH] Parsed operation_type: 0 [08:28:15] [PUSH] Taking direct action: opType=0, messageId=19181 [08:28:15] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19181 [08:28:15] [PUSH] ⚡ Message 19181 already in memory - skipping duplicate notification entirely [08:28:15] [COMBINED_FETCH] Loaded 7943 read receipts, 974 messages with reactions [08:28:15] [FOREGROUND] Enriched 0 messages with readBy data from server [08:28:15] [PUSH_EMBED] Got evolution data for message 19181, saving to local DB [08:28:15] [PUSH_EMBED] Saved evolution data for message 19181 [08:28:15] [PIN_AUTH] Correct PIN [08:28:15] [SECURITY] Restored real session: ILUIWU [08:28:15] [SECURITY] Restored real session: ILUIWU [08:28:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19181, 19179, 19178, 19177, 19176] [08:28:16] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → not my message, setting complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:16] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:16] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [08:28:16] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:28:16] [AUTH] UI update complete [08:28:16] [FAKE MODE] Exiting fake mode, restoring real session [08:28:16] [SECURITY] Restored real session: ILUIWU [08:28:16] [SECURITY] Saved real session: ILUIWU [08:28:16] [FAKE MODE] ✅ Restored real session: ILUIWU [08:28:16] [FAKE MODE] Loaded 50 messages (limited to page size) [08:28:16] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:16] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → not my message, setting complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:16] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:28:16] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:28:16] [USER] ✅ User registered successfully [08:28:16] [PUSH] User registration after token update: success [08:28:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:28:16] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → not my message, setting complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:16] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:16] [COMBINED_FETCH] Loaded 7943 read receipts, 974 messages with reactions [08:28:16] [FAKE MODE] Enriched 50 messages with readBy data [08:28:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:28:16] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → not my message, setting complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:16] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:17] [PUSH] Silent push received [08:28:17] [PUSH_EMBED] No embedded message_data in notification [08:28:17] [PUSH] No embedded data, pre-loading messages from server [08:28:17] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:17] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:28:17] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [08:28:17] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:17] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19181, AnyHashable("aps"): { "content-available" = 1; }] [08:28:17] [PUSH] Parsed message_id: 19181 [08:28:17] [PUSH] Parsed operation_type: 3 [08:28:17] [PUSH] Taking direct action: opType=3, messageId=19181 [08:28:17] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19181 [08:28:18] [CLIENT_SIG] Event received: type=3 messageId=19181 [08:28:18] [WS_EVENT] Received event: type=3, messageId=19181 [08:28:18] [WS_EVENT] Read receipt for message 19181 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:18] [PUSH] Silent push received [08:28:18] [PUSH_EMBED] No embedded message_data in notification [08:28:18] [PUSH] No embedded data, pre-loading messages from server [08:28:18] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:18] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:28:18] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [08:28:18] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:18] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19180, AnyHashable("operation_type"): 3] [08:28:18] [PUSH] Parsed message_id: 19180 [08:28:18] [PUSH] Parsed operation_type: 3 [08:28:18] [PUSH] Taking direct action: opType=3, messageId=19180 [08:28:18] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19180 [08:28:18] [CLIENT_SIG] Event received: type=3 messageId=19180 [08:28:18] [WS_EVENT] Received event: type=3, messageId=19180 [08:28:18] [WS_EVENT] Read receipt for message 19180 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:21] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:28:23] [CLIENT_SIG] Event received: type=0 messageId=19182 [08:28:23] [WS_EVENT] Received event: type=0, messageId=19182 [08:28:23] [WS_EVENT] 📨 New message notification (msgId=19182) - triggering incremental refresh, currentMsgCount=50 [08:28:23] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [08:28:23] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19181 [08:28:23] [INCREMENTAL_SYNC] ✅ Found 1 new messages [08:28:23] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [08:28:23] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [08:28:23] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-26 07:28:23 +0000 - type: unknown, operation_type: 0, message_id: 19182, session_id: ILUIWU, state: 0 [08:28:23] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19182, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:21"; "file_name" = ""; message = "I\U2019ll let you know \U2665\Ufe0f"; "message_id" = 19182; "message_type" = 0; "prev_session_message_id" = 19181; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [08:28:23] [PUSH] App active - suppressing notification UI, posting internal event [08:28:23] [PUSH_EMBED] 📩 Received embedded message: id=19182, type=0, sender=Esra [08:28:23] [PUSH_EMBED] ✅ Saved message 19182 to local DB (sync) [08:28:23] [PUSH_EMBED] Inserted message 19182 into existing cache (now 51 messages) [08:28:23] [PUSH_EMBED] Fetching evolution data for message 19182 in background [08:28:23] [PUSH_EMBED] ✅ Fully processed message 19182 [08:28:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19182, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:21"; "file_name" = ""; message = "I\U2019ll let you know \U2665\Ufe0f"; "message_id" = 19182; "message_type" = 0; "prev_session_message_id" = 19181; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [08:28:23] [PUSH_EMBED_VC] Message 19182 already in memory - skipping [08:28:23] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:23] [PUSH] Parsed message_id: 19182 [08:28:23] [PUSH] Parsed operation_type: 0 [08:28:23] [PUSH] Taking direct action: opType=0, messageId=19182 [08:28:23] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19182 [08:28:23] [PUSH] ⚡ Message 19182 already in memory - skipping duplicate notification entirely [08:28:23] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:23] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:23] [PUSH_UI] Message 19182 already in memory - skipping insert [08:28:23] [PUSH] Silent push received [08:28:23] [PUSH_EMBED] 📩 Received embedded message: id=19182, type=0, sender=Esra [08:28:23] [PUSH_EMBED] ✅ Saved message 19182 to local DB (sync) [08:28:23] [PUSH_EMBED] Fetching evolution data for message 19182 in background [08:28:23] [PUSH_EMBED] ✅ Fully processed message 19182 [08:28:23] [PUSH] Embedded message handled instantly from silent push [08:28:23] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:23] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:23] [PUSH_UI] Message 19182 already in memory - skipping insert [08:28:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19182, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:21"; "file_name" = ""; message = "I\U2019ll let you know \U2665\Ufe0f"; "message_id" = 19182; "message_type" = 0; "prev_session_message_id" = 19181; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [08:28:23] [PUSH_EMBED_VC] Message 19182 already in memory - skipping [08:28:23] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:23] [PUSH] Parsed message_id: 19182 [08:28:23] [PUSH] Parsed operation_type: 0 [08:28:23] [PUSH] Taking direct action: opType=0, messageId=19182 [08:28:23] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19182 [08:28:23] [PUSH] ⚡ Message 19182 already in memory - skipping duplicate notification entirely [08:28:23] [PUSH_EMBED] Got evolution data for message 19182, saving to local DB [08:28:23] [PUSH_EMBED] Saved evolution data for message 19182 [08:28:23] [PUSH_EMBED] Got evolution data for message 19182, saving to local DB [08:28:23] [PUSH_EMBED] Saved evolution data for message 19182 [08:28:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:28:23] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:23] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:23] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:23] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19181 → 19182 [08:28:26] [PUSH] Silent push received [08:28:26] [PUSH_EMBED] No embedded message_data in notification [08:28:26] [PUSH] No embedded data, pre-loading messages from server [08:28:26] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:26] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:28:26] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19131] [08:28:26] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [08:28:26] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:26] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19182] [08:28:26] [PUSH] Parsed message_id: 19182 [08:28:26] [PUSH] Parsed operation_type: 3 [08:28:26] [PUSH] Taking direct action: opType=3, messageId=19182 [08:28:26] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19182 [08:28:26] [CLIENT_SIG] Event received: type=3 messageId=19182 [08:28:26] [WS_EVENT] Received event: type=3, messageId=19182 [08:28:26] [WS_EVENT] Read receipt for message 19182 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:30] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [08:28:30] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [08:28:30] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=52 [08:28:30] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-3, 19182, 19181, 19180, 19179] [08:28:30] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:30] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:30] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [08:28:30] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [08:28:31] [CLIENT_SIG] Event received: type=0 messageId=19183 [08:28:31] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19183,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 07:28:30"} [08:28:31] [WS_EVENT] Received event: type=0, messageId=19183 [08:28:31] [WS_EVENT] 📨 New message notification (msgId=19183) - triggering incremental refresh, currentMsgCount=52 [08:28:31] [CHAT] receive_message.php JSON: ["file_name": , "session_id": ILUIWU, "message_type": 0, "datesent_utc": 2026-01-26 07:28:30, "message_id": 19183, "ok": 1] [08:28:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [08:28:31] [DB_UPGRADE] Upgrading message ID: -3 → 19183, preserveOriginalDate=false [08:28:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19182 [08:28:31] [DB_UPGRADE] ✅ Upgraded -3 → 19183 with send_status=0, 1 row(s) affected [08:28:31] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 19183 [08:28:31] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 19183 [08:28:31] ReloadData 9 [08:28:31] [INCREMENTAL_SYNC] ✅ Found 1 new messages [08:28:31] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:31] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:31] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [08:28:31] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [08:28:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:28:31] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:31] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:34] [PUSH] Silent push received [08:28:34] [PUSH_EMBED] No embedded message_data in notification [08:28:34] [PUSH] No embedded data, pre-loading messages from server [08:28:34] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:28:34] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [19133, 19131] [08:28:34] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [08:28:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19183, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [08:28:34] [PUSH] Parsed message_id: 19183 [08:28:34] [PUSH] Parsed operation_type: 3 [08:28:34] [PUSH] Taking direct action: opType=3, messageId=19183 [08:28:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19183 [08:28:35] [BROADCAST] Starting camera broadcast on session: iosILUIWU [08:28:35] Initing with camera 0 [08:28:35] [START] AgentController.start() called with session: iosILUIWU [08:28:35] [START] Cancelling any existing idle stop timer [08:28:35] [BROADCAST] Lightbulb shown at lower left, frame=(20.0, 800.0, 50.0, 50.0) [08:28:35] [CLIENT_SIG] Event received: type=3 messageId=19183 [08:28:35] [WS_EVENT] Received event: type=3, messageId=19183 [08:28:35] [WS_EVENT] Read receipt for message 19183 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:28:35] WS connected [08:28:38] [CAM] ✅ Connected to signaling server. Session: iosILUIWU, agentId: XOm3hDPAUQce0W19 [08:28:38] [CAM] helloOK → connected=true, myAgentId=XOm3hDPAUQce0W19 [08:28:38] [WEBRTC] Creating new WebRTC client [08:28:38] [CODEC] Available video codecs: H264, H264, VP8, VP9, AV1 [08:28:38] [CODEC] Agent selected encoder: AV1 (best quality) [08:28:38] [WS AUDIO] Initializing WebSocket audio sender... [08:28:38] [WS AUDIO] ✅ WebSocket audio sender initialized [08:28:38] [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 [08:28:38] [ICE] Using 2 ICE server entries [08:28:38] [CAPTURE] startCapture() called with width:1920, height:1080, fps:30 [08:28:38] [CAPTURE] Creating audio track [08:28:38] [CAPTURE] DataChannelAudioSender already exists [08:28:38] [CAPTURE] Creating front video source and track [08:28:38] [CAPTURE] Creating back video source and track [08:28:38] localVideoTrackFront ok [08:28:38] localVideoTrackBack ok [08:28:38] Marking tracks as ready and firing callbacks [08:28:38] [CAPTURE] ✅ Device supports MultiCam, starting dual camera session [08:28:38] [CAPTURE] configureAndStartMultiCamSession() starting... [08:28:38] Video capture stopped (audio still running) [08:28:38] [CAPTURE] Created MultiCamSession and began configuration [08:28:38] [CAPTURE] Looking for camera devices... [08:28:38] [CAPTURE] ✅ Found front camera: Front Camera [08:28:38] [CAPTURE] ✅ Found back camera: Back Camera [08:28:38] Selected camera format: 1920x1080, pixel format: 875704438 [08:28:38] [CAPTURE] Enabled continuous autofocus for front camera [08:28:38] Selected camera format: 1920x1080, pixel format: 875704438 [08:28:38] [CAPTURE] Enabled continuous autofocus for back camera [08:28:38] Selected camera format: 640x480, pixel format: 875704438 [08:28:38] Selected camera format: 640x480, pixel format: 875704438 [08:28:38] [iOS AUDIO] ========== START CAPTURE ========== [08:28:38] [iOS AUDIO] BEFORE - category: AVAudioSessionCategorySoloAmbient [08:28:38] [iOS AUDIO] BEFORE - mode: AVAudioSessionModeDefault [08:28:38] [iOS AUDIO] BEFORE - isOtherAudioPlaying: false [08:28:38] [iOS AUDIO] BEFORE - availableInputs: ["iPhone Microphone"] [08:28:38] [iOS AUDIO] BEFORE - currentRoute.inputs: [] [08:28:38] [iOS AUDIO] BEFORE - currentRoute.outputs: ["Speaker"] [08:28:38] [iOS AUDIO] Setting category to .playAndRecord... [08:28:38] [iOS AUDIO] Activating audio session... [08:28:38] [iOS AUDIO] ✅ Audio session configured [08:28:38] [iOS AUDIO] AFTER - category: AVAudioSessionCategoryPlayAndRecord [08:28:38] [iOS AUDIO] AFTER - mode: AVAudioSessionModeVideoChat [08:28:38] [iOS AUDIO] AFTER - currentRoute.inputs: ["iPhone Microphone"] [08:28:38] [iOS AUDIO] AFTER - currentRoute.outputs: ["Speaker"] [08:28:38] [iOS AUDIO] AFTER - recordPermission: 1735552628 [08:28:38] [iOS AUDIO] Creating AVAudioEngine... [08:28:38] [iOS AUDIO] Got inputNode: [08:28:38] [iOS AUDIO] Input format: 48000.0Hz, 1 channels, 1 [08:28:38] [iOS AUDIO] Installing tap on inputNode... [08:28:38] [iOS AUDIO] ✅ Tap installed [08:28:38] [iOS AUDIO] Starting engine... [08:28:38] [iOS AUDIO] ✅ AVAudioEngine started [08:28:38] [iOS AUDIO] engine.isRunning: true [08:28:38] [iOS AUDIO] inputNode.isVoiceProcessingEnabled: false [08:28:38] [iOS AUDIO] ========== END START CAPTURE ========== [08:28:38] [CAPTURE] Configuration committed [08:28:38] [CAPTURE] Starting MultiCam session... [08:28:38] [iOS AUDIO] 📤 Sent packet #1: 9600 bytes (4800 samples, ~100ms) [08:28:38] [iOS AUDIO] 📤 Sent packet #2: 9600 bytes (4800 samples, ~100ms) [08:28:39] [CAPTURE] ✅ AVCaptureMultiCamSession started successfully (front + back) [08:28:39] [CAPTURE] Session running: true [08:28:39] [CAM] viewerJoin → session: iosILUIWU, viewerId: Is43q7-x81tHjYbv [08:28:39] [WEBRTC] WebRTC client already exists, reusing it [08:28:39] [WEBRTC] WebRTC client already exists, reusing it [08:28:39] ensureCaptureStarted - adding peer [08:28:39] tracksReady = true [08:28:39] Added front video track to peer connection for Is43q7-x81tHjYbv [08:28:39] Added back video track to peer connection for Is43q7-x81tHjYbv [08:28:39] Added audio track to peer connection for Is43q7-x81tHjYbv [08:28:39] localVideoTrackFront ok [08:28:39] localVideoTrackBack ok [08:28:39] tracks already marked as ready [08:28:39] Peer added with tracks, notifying viewer ready [08:28:39] notifyViewerReady called [08:28:39] notifyViewerReady -> Will send [08:28:39] [iOS AUDIO] 📤 Sent packet #3: 9600 bytes (4800 samples, ~100ms) [08:28:39] [iOS AUDIO] 📤 Sent packet #4: 9600 bytes (4800 samples, ~100ms) [08:28:39] [iOS AUDIO] 📤 Sent packet #5: 9600 bytes (4800 samples, ~100ms) [08:28:39] [iOS AUDIO] 📤 Sent packet #6: 9600 bytes (4800 samples, ~100ms) [08:28:39] [iOS AUDIO] 📤 Sent packet #7: 9600 bytes (4800 samples, ~100ms) [08:28:39] [iOS AUDIO] 📤 Sent packet #8: 9600 bytes (4800 samples, ~100ms) [08:28:39] [CAM] Offer → session: iosILUIWU, viewerId: Is43q7-x81tHjYbv [08:28:39] [WEBRTC] WebRTC client already exists, reusing it [08:28:39] [CAM] Peer connection ready, processing offer immediately [08:28:39] Creating answer for Is43q7-x81tHjYbv. Found 3 transceivers: [08:28:39] Transceiver 0: video, direction=sendRecv, hasTrack=true [08:28:39] Transceiver 1: video, direction=sendRecv, hasTrack=true [08:28:39] Transceiver 2: audio, direction=sendRecv, hasTrack=true [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4071504272 1 udp 2122260224 192.168.1.8 52643 typ host generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote host → applying [08:28:39] SEND answer for viewerId=Is43q7-x81tHjYbv [08:28:39] SDP length: 4815 [08:28:39] ICE gathering state: 1 [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2991868729 1 udp 1686052608 212.252.142.37 43158 typ srflx raddr 192.168.1.8 rport 52643 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote srflx → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] ICE state for vid=Is43q7-x81tHjYbv: 1 ( RTCIceConnectionState ) [08:28:39] Found s:candidate:1039999794 1 udp 2122129152 10.253.162.116 62112 typ host generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [ICE] agent local host [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2872395243 1 udp 1685921536 188.58.29.36 28232 typ srflx raddr 10.253.162.116 rport 62112 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote srflx → applying [08:28:39] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:1528760099 1 udp 2122129151 192.168.1.177 64011 typ host generation 0 ufrag k90g network-id 1 network-cost 10"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:1136277931 1 udp 2122063615 10.62.157.247 63963 typ host generation 0 ufrag k90g network-id 9 network-cost 900"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:2031408212 1 udp 2121998079 10.115.51.36 60116 typ host generation 0 ufrag k90g network-id 10 network-cost 900"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:2031408212 1 udp 2121932543 10.115.51.36 49954 typ host generation 0 ufrag k90g network-id 4 network-cost 50"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:2031408212 1 udp 2121867007 10.115.51.36 64756 typ host generation 0 ufrag k90g network-id 5 network-cost 50"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:2031408212 1 udp 2121801471 10.115.51.36 61031 typ host generation 0 ufrag k90g network-id 6 network-cost 50", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:1215958092 1 udp 2122265343 fdaa:bbcc:ddee:0:1841:8c4f:993a:7857 62800 typ host generation 0 ufrag k90g network-id 3 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:751239009 1 udp 2122197247 2001:1708:bb9:ed00:f5a0:db2b:e1f0:8dc1 63163 typ host generation 0 ufrag k90g network-id 2 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1558409667 1 udp 2121670400 192.0.0.6 62632 typ host generation 0 ufrag 59g5 network-id 3 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1558409667 1 udp 2121604864 192.0.0.6 56090 typ host generation 0 ufrag 59g5 network-id 6 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:35652204 1 udp 2122197248 2a02:4e0:5fd:553a:ddc3:aed2:9843:8560 57432 typ host generation 0 ufrag 59g5 network-id 13 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4212483920 1 udp 2122068736 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 65089 typ host generation 0 ufrag 59g5 network-id 4 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3386594126 1 udp 2122003200 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 50925 typ host generation 0 ufrag 59g5 network-id 5 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4212483920 1 udp 2121937664 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 49877 typ host generation 0 ufrag 59g5 network-id 7 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3125946125 1 udp 2121869568 2a02:4e0:5fd:553a:872:a579:644e:58b5 50535 typ host generation 0 ufrag 59g5 network-id 2 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2753134952 1 udp 41885952 192.168.1.31 49692 typ relay raddr 212.252.142.37 rport 43158 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=49692) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1521702396 1 udp 25108736 192.168.1.31 63116 typ relay raddr 212.252.142.37 rport 42576 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=63116) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2753134952 1 udp 41754880 192.168.1.31 50468 typ relay raddr 188.58.29.36 rport 28232 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=50468) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:201649412 1 tcp 1518280448 192.168.1.8 49348 typ host tcptype passive generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3277322150 1 tcp 1518149376 10.253.162.116 49349 typ host tcptype passive generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2722735447 1 tcp 1517690624 192.0.0.6 49350 typ host tcptype passive generation 0 ufrag 59g5 network-id 3 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [iOS AUDIO] 📤 Sent packet #9: 9600 bytes (4800 samples, ~100ms) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2722735447 1 tcp 1517625088 192.0.0.6 49351 typ host tcptype passive generation 0 ufrag 59g5 network-id 6 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4236957432 1 tcp 1518217472 2a02:4e0:5fd:553a:ddc3:aed2:9843:8560 49352 typ host tcptype passive generation 0 ufrag 59g5 network-id 13 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:96449476 1 tcp 1518088960 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 49353 typ host tcptype passive generation 0 ufrag 59g5 network-id 4 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:930187226 1 tcp 1518023424 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 49354 typ host tcptype passive generation 0 ufrag 59g5 network-id 5 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:96449476 1 tcp 1517957888 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 49355 typ host tcptype passive generation 0 ufrag 59g5 network-id 7 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1157165977 1 tcp 1517889792 2a02:4e0:5fd:553a:872:a579:644e:58b5 49356 typ host tcptype passive generation 0 ufrag 59g5 network-id 2 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4071504272 1 udp 2122260224 192.168.1.8 57431 typ host generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2991868729 1 udp 1686052608 212.252.142.37 42906 typ srflx raddr 192.168.1.8 rport 57431 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote srflx → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] [ICE] agent local srflx [08:28:39] Found s:candidate:1039999794 1 udp 2122129152 10.253.162.116 52379 typ host generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) srflx candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:4099270173 1 udp 1685921535 84.227.75.34 64011 typ srflx raddr 192.168.1.177 rport 64011 generation 0 ufrag k90g network-id 1 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2872395243 1 udp 1685921536 188.58.29.36 28579 typ srflx raddr 10.253.162.116 rport 52379 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote srflx → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1558409667 1 udp 2121670400 192.0.0.6 53665 typ host generation 0 ufrag 59g5 network-id 3 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1558409667 1 udp 2121604864 192.0.0.6 52866 typ host generation 0 ufrag 59g5 network-id 6 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:35652204 1 udp 2122197248 2a02:4e0:5fd:553a:ddc3:aed2:9843:8560 51284 typ host generation 0 ufrag 59g5 network-id 13 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4212483920 1 udp 2122068736 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 52561 typ host generation 0 ufrag 59g5 network-id 4 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3386594126 1 udp 2122003200 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 62829 typ host generation 0 ufrag 59g5 network-id 5 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4212483920 1 udp 2121937664 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 56049 typ host generation 0 ufrag 59g5 network-id 7 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3125946125 1 udp 2121869568 2a02:4e0:5fd:553a:872:a579:644e:58b5 52184 typ host generation 0 ufrag 59g5 network-id 2 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2753134952 1 udp 41885952 192.168.1.31 54437 typ relay raddr 212.252.142.37 rport 42906 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=54437) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1521702396 1 udp 25108736 192.168.1.31 55743 typ relay raddr 212.252.142.37 rport 43007 generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=55743) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2753134952 1 udp 41754880 192.168.1.31 54511 typ relay raddr 188.58.29.36 rport 28579 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=54511) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:201649412 1 tcp 1518280448 192.168.1.8 49357 typ host tcptype passive generation 0 ufrag 59g5 network-id 1 network-cost 10 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:3277322150 1 tcp 1518149376 10.253.162.116 49358 typ host tcptype passive generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2722735447 1 tcp 1517690624 192.0.0.6 49359 typ host tcptype passive generation 0 ufrag 59g5 network-id 3 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:2722735447 1 tcp 1517625088 192.0.0.6 49360 typ host tcptype passive generation 0 ufrag 59g5 network-id 6 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:4236957432 1 tcp 1518217472 2a02:4e0:5fd:553a:ddc3:aed2:9843:8560 49361 typ host tcptype passive generation 0 ufrag 59g5 network-id 13 network-cost 900 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:96449476 1 tcp 1518088960 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 49362 typ host tcptype passive generation 0 ufrag 59g5 network-id 4 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:930187226 1 tcp 1518023424 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 49363 typ host tcptype passive generation 0 ufrag 59g5 network-id 5 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:96449476 1 tcp 1517957888 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 49364 typ host tcptype passive generation 0 ufrag 59g5 network-id 7 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1157165977 1 tcp 1517889792 2a02:4e0:5fd:553a:872:a579:644e:58b5 49365 typ host tcptype passive generation 0 ufrag 59g5 network-id 2 network-cost 50 [08:28:39] [ICE] remote host → applying [08:28:39] [ICE] agent local relay → ip=192.168.1.31 port=62918 [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) relay candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:122267067 1 udp 41755135 192.168.1.31 62918 typ relay raddr 84.227.75.34 rport 64011 generation 0 ufrag k90g network-id 1 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1521702396 1 udp 24977663 192.168.1.31 50992 typ relay raddr 188.58.29.36 rport 26761 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=50992) [08:28:39] [CAM] iceFromViewer viewerId=Is43q7-x81tHjYbv [08:28:39] [CAM] Peer connection ready, processing ICE candidate immediately [08:28:39] addRemoteCandidate for vid=Is43q7-x81tHjYbv [08:28:39] Found s:candidate:1521702396 1 udp 24977663 192.168.1.31 50392 typ relay raddr 188.58.29.36 rport 26291 generation 0 ufrag 59g5 network-id 12 network-cost 900 [08:28:39] [ICE] remote relay → applying (ip=192.168.1.31 port=50392) [08:28:39] [ICE] agent local relay → ip=192.168.1.31 port=65268 [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) relay candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:2038843171 1 udp 24977663 192.168.1.31 65268 typ relay raddr 84.227.75.34 rport 52930 generation 0 ufrag k90g network-id 1 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:634447291 1 tcp 1518149375 192.168.1.177 52933 typ host tcptype passive generation 0 ufrag k90g network-id 1 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:1031134003 1 tcp 1518083839 10.62.157.247 52938 typ host tcptype passive generation 0 ufrag k90g network-id 9 network-cost 900", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:131806924 1 tcp 1518018303 10.115.51.36 52943 typ host tcptype passive generation 0 ufrag k90g network-id 10 network-cost 900", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMid": Optional("0"), "sdpMLineIndex": 0, "candidate": "candidate:131806924 1 tcp 1517952767 10.115.51.36 52948 typ host tcptype passive generation 0 ufrag k90g network-id 4 network-cost 50"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMid": Optional("0"), "sdpMLineIndex": 0, "candidate": "candidate:131806924 1 tcp 1517887231 10.115.51.36 52953 typ host tcptype passive generation 0 ufrag k90g network-id 5 network-cost 50"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["sdpMid": Optional("0"), "sdpMLineIndex": 0, "candidate": "candidate:131806924 1 tcp 1517821695 10.115.51.36 52958 typ host tcptype passive generation 0 ufrag k90g network-id 6 network-cost 50"] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:917892820 1 tcp 1518285567 fdaa:bbcc:ddee:0:1841:8c4f:993a:7857 52963 typ host tcptype passive generation 0 ufrag k90g network-id 3 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [ICE] agent local host [08:28:39] [ICE] local → remote (Is43q7-x81tHjYbv) host candidate [08:28:39] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:39] Candidate: ["candidate": "candidate:1376329209 1 tcp 1518217471 2001:1708:bb9:ed00:f5a0:db2b:e1f0:8dc1 52969 typ host tcptype passive generation 0 ufrag k90g network-id 2 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [08:28:39] [iOS AUDIO] 📤 Sent packet #10: 9600 bytes (4800 samples, ~100ms) [08:28:40] [ICE] agent local srflx [08:28:40] [ICE] local → remote (Is43q7-x81tHjYbv) srflx candidate [08:28:40] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:40] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:3975207061 1 udp 1685855999 194.230.158.239 55890 typ srflx raddr 10.62.157.247 rport 63963 generation 0 ufrag k90g network-id 9 network-cost 900", "sdpMLineIndex": 0] [08:28:40] [ICE] agent local srflx [08:28:40] [ICE] local → remote (Is43q7-x81tHjYbv) srflx candidate [08:28:40] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:40] Candidate: ["sdpMid": Optional("0"), "sdpMLineIndex": 0, "candidate": "candidate:3975207061 1 udp 1685855999 194.230.158.239 43148 typ srflx raddr 10.62.157.247 rport 63963 generation 0 ufrag k90g network-id 9 network-cost 900"] [08:28:40] [ICE] agent local relay → ip=192.168.1.31 port=61186 [08:28:40] [ICE] local → remote (Is43q7-x81tHjYbv) relay candidate [08:28:40] SEND ice for viewerId=Is43q7-x81tHjYbv [08:28:40] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:122267067 1 udp 41689599 192.168.1.31 61186 typ relay raddr 194.230.158.239 rport 55890 generation 0 ufrag k90g network-id 9 network-cost 900"] [08:28:40] ICE state for vid=Is43q7-x81tHjYbv: 2 ( RTCIceConnectionState ) [08:28:40] [STATS] starting poll for vid=Is43q7-x81tHjYbv [08:28:43] [BROADCAST] Stopping camera broadcast [08:28:43] [CAM] Disconnected from signaling server [08:28:43] [iOS AUDIO] ✅ Streaming: 50 packets sent [08:28:43] Video capture stopped (audio still running) [08:28:43] [iOS AUDIO] Audio capture stopped [08:28:43] Capture stopped (video + audio) [08:28:43] ICE state for vid=Is43q7-x81tHjYbv: 6 ( RTCIceConnectionState ) [08:28:43] Video capture stopped (audio still running) [08:28:43] Capture stopped (video + audio) [08:28:43] [WEBRTC] WebRTCClient deinit - timers cleaned up [08:28:43] [WEBRTC] ✅ Media teardown complete - camera stopped [08:28:43] WS closed [08:28:44] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:28:48] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:28:49] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:28:49] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:28:50] [CLIENT_SIG] Event received: type=0 messageId=19184 [08:28:50] [WS_EVENT] Received event: type=0, messageId=19184 [08:28:50] [WS_EVENT] 📨 New message notification (msgId=19184) - triggering incremental refresh, currentMsgCount=52 [08:28:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [08:28:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19183 [08:28:50] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-26 07:28:50 +0000 - type: unknown, operation_type: 0, message_id: 19184, session_id: ILUIWU, state: 0 [08:28:50] [PUSH_DEBUG] Full userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 07:28:48"; "file_name" = ""; message = "Babyyy\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 19184; "message_type" = 0; "prev_session_message_id" = 19183; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19184, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [08:28:50] [PUSH] App active - suppressing notification UI, posting internal event [08:28:50] [PUSH_EMBED] 📩 Received embedded message: id=19184, type=0, sender=Esra [08:28:50] [PUSH_EMBED] ✅ Saved message 19184 to local DB (sync) [08:28:50] [PUSH_EMBED] Inserted message 19184 into existing cache (now 53 messages) [08:28:50] [PUSH_EMBED] Fetching evolution data for message 19184 in background [08:28:50] [PUSH_EMBED] ✅ Fully processed message 19184 [08:28:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 07:28:48"; "file_name" = ""; message = "Babyyy\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 19184; "message_type" = 0; "prev_session_message_id" = 19183; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19184, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [08:28:50] [PUSH_EMBED_VC] Processing embedded message: id=19184, type=0, sender=Esra, prevId=19183 [08:28:50] [PUSH_EMBED_VC] Inserted message 19184 into allMessagesWithReadBy (now 53 messages) [08:28:50] [PUSH_EMBED_VC] ✅ Previous message 19183 exists in memory [08:28:50] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:50] [PUSH] Parsed message_id: 19184 [08:28:50] [PUSH] Parsed operation_type: 0 [08:28:50] [PUSH] Taking direct action: opType=0, messageId=19184 [08:28:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19184 [08:28:50] [PUSH] ⚡ Message 19184 already in memory - skipping duplicate notification entirely [08:28:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:50] [PUSH_UI] Message 19184 already in memory - skipping insert [08:28:50] [PUSH_EMBED_VC] Saved message 19184 to local DB [08:28:50] [PUSH] Silent push received [08:28:50] [PUSH_EMBED] 📩 Received embedded message: id=19184, type=0, sender=Esra [08:28:50] [PUSH_EMBED] ✅ Saved message 19184 to local DB (sync) [08:28:50] [PUSH_EMBED] Fetching evolution data for message 19184 in background [08:28:50] [PUSH_EMBED] ✅ Fully processed message 19184 [08:28:50] [PUSH] Embedded message handled instantly from silent push [08:28:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:50] [PUSH_UI] Message 19184 already in memory - skipping insert [08:28:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19184, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:48"; "file_name" = ""; message = "Babyyy\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 19184; "message_type" = 0; "prev_session_message_id" = 19183; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [08:28:50] [PUSH_EMBED_VC] Message 19184 already in memory - skipping [08:28:50] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:50] [PUSH] Parsed message_id: 19184 [08:28:50] [PUSH] Parsed operation_type: 0 [08:28:50] [PUSH] Taking direct action: opType=0, messageId=19184 [08:28:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19184 [08:28:50] [PUSH] ⚡ Message 19184 already in memory - skipping duplicate notification entirely [08:28:50] [PUSH] Silent push received [08:28:50] [PUSH_EMBED] 📩 Received embedded message: id=19184, type=0, sender=Esra [08:28:50] [PUSH_EMBED] ✅ Saved message 19184 to local DB (sync) [08:28:50] [PUSH_EMBED] Fetching evolution data for message 19184 in background [08:28:50] [PUSH_EMBED] ✅ Fully processed message 19184 [08:28:50] [PUSH] Embedded message handled instantly from silent push [08:28:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [08:28:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [08:28:50] [PUSH_UI] Message 19184 already in memory - skipping insert [08:28:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 19184, AnyHashable("message_data"): { datesent = "2026-01-26 07:28:48"; "file_name" = ""; message = "Babyyy\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 19184; "message_type" = 0; "prev_session_message_id" = 19183; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [08:28:50] [PUSH_EMBED_VC] Message 19184 already in memory - skipping [08:28:50] [PUSH] ⚡ Embedded message handled directly in ViewController [08:28:50] [PUSH] Parsed message_id: 19184 [08:28:50] [PUSH] Parsed operation_type: 0 [08:28:50] [PUSH] Taking direct action: opType=0, messageId=19184 [08:28:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19184 [08:28:50] [PUSH] ⚡ Message 19184 already in memory - skipping duplicate notification entirely [08:28:50] [INCREMENTAL_SYNC] ✅ Found 1 new messages [08:28:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [08:28:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:28:50] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [08:28:50] [PUSH_EMBED] Got evolution data for message 19184, saving to local DB [08:28:50] [PUSH_EMBED] Saved evolution data for message 19184 [08:28:50] [PUSH_EMBED] Got evolution data for message 19184, saving to local DB [08:28:50] [PUSH_EMBED] Saved evolution data for message 19184 [08:28:50] [PUSH_EMBED] Got evolution data for message 19184, saving to local DB [08:28:50] [PUSH_EMBED] Saved evolution data for message 19184 [08:28:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:28:50] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:50] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:28:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:28:50] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19183 → 19184 [08:28:50] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:28:50] [CELL_UPLOAD] → not my message, setting complete [08:28:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [08:28:53] [PUSH] Silent push received [08:28:53] [PUSH_EMBED] No embedded message_data in notification [08:28:53] [PUSH] No embedded data, pre-loading messages from server [08:28:53] [PUSH_PRELOAD] Fetching messages for instant display cache [08:28:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:28:53] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [19134, 19133, 19131] [08:28:53] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [08:28:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:28:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19184, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [08:28:53] [PUSH] Parsed message_id: 19184 [08:28:53] [PUSH] Parsed operation_type: 3 [08:28:53] [PUSH] Taking direct action: opType=3, messageId=19184 [08:28:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19184 [08:28:53] [CLIENT_SIG] Event received: type=3 messageId=19184 [08:28:53] [WS_EVENT] Received event: type=3, messageId=19184 [08:28:53] [WS_EVENT] Read receipt for message 19184 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:28:54] [LIFECYCLE] App resigning active - cleared crash flag [08:28:54] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:28:55] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [08:28:55] [SECURITY] Saved background timestamp [08:28:55] [LIFECYCLE] App entering background - cleared crash flag [08:28:55] [CLIENT_SIG] Disconnecting [08:28:55] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [08:28:55] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [08:28:55] In cleanupPeer [08:28:55] In cleanupPeer [08:28:55] [LIFECYCLE] WebRTC audio disabled [08:28:55] [LIFECYCLE] AVAudioSession deactivated [08:28:55] [LIFECYCLE] All connections stopped [08:28:55] [CLIENT_SIG] WebSocket closed with code 1001 [08:28:55] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:28:55] [SERVER] Stopped reconnect polling [08:28:55] Will request stop of video 0 [08:28:55] Will request stop of video 0 [08:28:55] [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/} [08:28:55] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:28:55] [PIP] Removing 0 tracks from PiP for connection 0 [08:28:55] [PIP] ✅ All tracks removed for connection 0 [08:28:55] [PIP] Removing 0 tracks from PiP for connection 0 [08:28:55] [PIP] ✅ All tracks removed for connection 0 [08:56:46] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:56:46] [PUSH] Notification tapped - session_id: ILUIWU [08:56:46] [PUSH] Max message_id before tap: 19184 [08:56:46] [PUSH] Stored pending session: ILUIWU [08:56:46] [PUSH_EMBED] No embedded message_data in notification [08:56:46] [PUSH] Pre-loading messages on notification tap... [08:56:46] [PUSH_PRELOAD] Fetching messages for instant display cache [08:56:46] [SECURITY] Timeout check: elapsed=1671.0670239925385s, timeout=300.0s [08:56:46] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [08:56:46] [AUTH] ✅ All guards passed, showing privacy cover [08:56:46] [LIFECYCLE] App entering foreground - restoring connections [08:56:46] [LIFECYCLE] Away > 2 minutes (1671s) - will scroll to bottom [08:56:46] [UPLOAD_RETRY] No pending uploads to retry [08:56:46] [LIFECYCLE] Merged 972 reactions from local DB [08:56:46] [LIFECYCLE] WebRTC audio re-enabled [08:56:46] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:56:46] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [08:56:46] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:56:46] [VIEWER] Reconnecting after background - querying agents [08:56:46] [UNSENT_RETRY] Checking for unsent messages... [08:56:46] [PENDING_UPLOAD] Total pending upload messages: 0 [08:56:46] [UNSENT_RETRY] No unsent messages found [08:56:46] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:56:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:56:46] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [19135, 19134, 19133, 19131] [08:56:46] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [08:56:46] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:46] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:46] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:46] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:56:46] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19185, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] [08:56:46] [PUSH] Parsed message_id: 19185 [08:56:46] [PUSH] Parsed operation_type: 0 [08:56:46] [PUSH] Taking direct action: opType=0, messageId=19185 [08:56:46] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19185 [08:56:46] [PUSH] Handling message fetch for opType=0, messageId=19185 [08:56:46] [PUSH] Requesting URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?session_id=ILUIWU&viewer=1&messages=19185 [08:56:46] [CLIENT_SIG] WebSocket opened [08:56:46] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:56:46] [CLIENT_SIG] Connected! clientId=ZMz6dQ3t82BYjOtG [08:56:46] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:56:46] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:56:46] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:56:46] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:56:46] [PUSH] handlePollEventsNotification userInfo: [:] [08:56:46] [PUSH] No message_id in userInfo [08:56:46] [PUSH] No operation_type in userInfo [08:56:46] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:56:46] [FAST_REFRESH] Already have 53 messages - skipping local DB load [08:56:46] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:56:46] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:56:46] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [08:56:46] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19185 [08:56:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:56:47] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:47] [COMBINED_FETCH] Loaded 7947 read receipts, 974 messages with reactions [08:56:47] [FOREGROUND] Enriched 0 messages with readBy data from server [08:56:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19131, 19133, 19134, 19135, 19136] [08:56:47] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:47] [PIN_AUTH] Correct PIN [08:56:47] [SECURITY] Restored real session: ILUIWU [08:56:47] [SECURITY] Restored real session: ILUIWU [08:56:47] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:56:47] [AUTH] Cache had 54 messages, maxExistingId=19184, inserted 1 truly new [08:56:47] [AUTH] UI update complete [08:56:47] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [08:56:47] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:56:47] [FAKE MODE] Exiting fake mode, restoring real session [08:56:47] [SECURITY] Restored real session: ILUIWU [08:56:47] [SECURITY] Saved real session: ILUIWU [08:56:47] [FAKE MODE] ✅ Restored real session: ILUIWU [08:56:47] [FAKE MODE] Loaded 50 messages (limited to page size) [08:56:47] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → not my message, setting complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:47] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19184 → 19185 [08:56:47] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:47] DOWNLOADIIING t_05fe08044942bf44.jpg [08:56:47] DOWNLOADIIING 05fe08044942bf44.jpg [08:56:47] [MEDIA_DOWNLOAD] ✅ t_05fe08044942bf44.jpg complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:47] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 05fe08044942bf44.jpg from downloaded: t_05fe08044942bf44.jpg [08:56:47] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → not my message, setting complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19136, 19137, 19138, 19139, 19140] [08:56:47] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:47] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:47] [CELL_UPLOAD] → not my message, setting complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:47] [MEDIA_DOWNLOAD] ✅ 05fe08044942bf44.jpg complete [08:56:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:47] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 05fe08044942bf44.jpg from downloaded: 05fe08044942bf44.jpg [08:56:47] [PUSH] Silent push received [08:56:47] [PUSH_EMBED] No embedded message_data in notification [08:56:47] [PUSH] No embedded data, pre-loading messages from server [08:56:47] [PUSH_PRELOAD] Fetching messages for instant display cache [08:56:48] [PUSH] Silent push received [08:56:48] [PUSH_EMBED] No embedded message_data in notification [08:56:48] [PUSH] No embedded data, pre-loading messages from server [08:56:48] [PUSH_PRELOAD] Fetching messages for instant display cache [08:56:49] [PUSH] get_message response: HTTP 200, 495 bytes [08:56:49] [PUSH] get_message response body: [{"message_type":1,"message_id":19185,"session_id":"ILUIWU","message":"","file_name":"05fe08044942bf44.jpg","msgread":0,"datesent":"2026-01-26 07:56:38","timer":0,"timer_started_at":null,"timer_played":0,"sender_id":"EDAD55A1-003F-415D-AA60-672B34B504FE","sender_name":"Esra","distance":null,"link_url":null,"link_title":null,"link_description":null,"link_image_url":null,"reply_to_id":null,"replied_message":null,"replied_sender_id":null,"replied_sender_name":null,"read_by":[],"reactions":[]}] [08:56:49] [PUSH] Updated readBy in allMessagesWithReadBy for message 19185: readBy=0 [08:56:49] [PUSH] Updated readBy in chatMessages for message 19185: readBy=0 [08:56:49] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:56:49] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:56:49] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:56:49] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:56:49] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [08:56:49] [INCREMENTAL_SYNC] ✅ No new messages [08:56:49] [FAST_REFRESH] Incremental sync complete - 50 messages [08:56:49] [USER] ✅ User registered successfully [08:56:49] [PUSH] User registration after token update: success [08:56:49] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:56:49] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [08:56:49] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:56:49] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19185, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] [08:56:49] [PUSH] Parsed message_id: 19185 [08:56:49] [PUSH] Parsed operation_type: 0 [08:56:49] [PUSH] Taking direct action: opType=0, messageId=19185 [08:56:49] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19185 [08:56:49] [PUSH] ⚡ Message 19185 already in memory - skipping duplicate notification entirely [08:56:49] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:56:49] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19185, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [08:56:49] [PUSH] Parsed message_id: 19185 [08:56:49] [PUSH] Parsed operation_type: 3 [08:56:49] [PUSH] Taking direct action: opType=3, messageId=19185 [08:56:49] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19185 [08:56:49] [COMBINED_FETCH] Loaded 7947 read receipts, 974 messages with reactions [08:56:49] [FAKE MODE] Enriched 50 messages with readBy data [08:56:49] [COMBINED_FETCH] Loaded 7947 read receipts, 974 messages with reactions [08:56:49] [FAST_REFRESH] Enriched 50 messages with readBy data [08:56:49] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:56:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19136, 19137, 19138, 19139, 19140] [08:56:50] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:50] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [08:56:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [08:56:50] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:56:50] [CELL_UPLOAD] → not my message, setting complete [08:56:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:56:50] [PUSH] Silent push received [08:56:50] [PUSH_EMBED] No embedded message_data in notification [08:56:50] [PUSH] No embedded data, pre-loading messages from server [08:56:50] [PUSH_PRELOAD] Fetching messages for instant display cache [08:56:50] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:56:50] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [08:56:50] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:56:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19185] [08:56:50] [PUSH] Parsed message_id: 19185 [08:56:50] [PUSH] Parsed operation_type: 3 [08:56:50] [PUSH] Taking direct action: opType=3, messageId=19185 [08:56:50] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19185 [08:56:51] [CLIENT_SIG] Event received: type=3 messageId=19185 [08:56:51] [WS_EVENT] Received event: type=3, messageId=19185 [08:56:51] [WS_EVENT] Read receipt for message 19185 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:56:53] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:56:53] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:57:01] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [08:57:01] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [08:57:01] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=51 [08:57:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-4, 19185, 19184, 19183, 19182] [08:57:01] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:57:01] [CELL_UPLOAD] → not my message, setting complete [08:57:01] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:57:01] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [08:57:01] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [08:57:02] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19186,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 07:57:01"} [08:57:02] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-26 07:57:01, "file_name": , "message_id": 19186, "message_type": 0, "ok": 1, "session_id": ILUIWU] [08:57:02] [DB_UPGRADE] Upgrading message ID: -4 → 19186, preserveOriginalDate=false [08:57:02] [CLIENT_SIG] Event received: type=0 messageId=19186 [08:57:02] [WS_EVENT] Received event: type=0, messageId=19186 [08:57:02] [WS_EVENT] 📨 New message notification (msgId=19186) - triggering incremental refresh, currentMsgCount=51 [08:57:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [08:57:02] [DB_UPGRADE] ✅ Upgraded -4 → 19186 with send_status=0, 1 row(s) affected [08:57:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19186 [08:57:02] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 19186 [08:57:02] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 19186 [08:57:02] ReloadData 9 [08:57:02] [INCREMENTAL_SYNC] ✅ No new messages [08:57:03] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:57:03] [CELL_UPLOAD] → not my message, setting complete [08:57:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:57:03] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [08:57:05] [PUSH] Silent push received [08:57:05] [PUSH_EMBED] No embedded message_data in notification [08:57:05] [PUSH] No embedded data, pre-loading messages from server [08:57:05] [PUSH_PRELOAD] Fetching messages for instant display cache [08:57:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:57:05] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19136] [08:57:05] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [08:57:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:57:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19186, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [08:57:05] [PUSH] Parsed message_id: 19186 [08:57:05] [PUSH] Parsed operation_type: 3 [08:57:05] [PUSH] Taking direct action: opType=3, messageId=19186 [08:57:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19186 [08:57:05] [CLIENT_SIG] Event received: type=3 messageId=19186 [08:57:05] [WS_EVENT] Received event: type=3, messageId=19186 [08:57:05] [WS_EVENT] Read receipt for message 19186 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:57:08] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:57:18] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:57:18] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:57:21] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [08:57:21] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [08:57:21] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=52 [08:57:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-5, 19186, 19185, 19184, 19183] [08:57:21] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:57:21] [CELL_UPLOAD] → not my message, setting complete [08:57:21] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:57:21] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [08:57:21] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [08:57:22] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19183 [08:57:22] [TAP_REPLAY] 📦 Found message: text.count=11, evolutionData.isEmpty=true [08:57:22] [TAP_REPLAY] 📡 No local evolution data - fetching from server [08:57:22] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [08:57:22] [TAP_REPLAY] ✅ Successfully fetched 11 events from server - calling playEvolutionInline [08:57:22] [EVOLUTION] 🎬 playEvolutionInline called for message 19183 with 11 events [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='P', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: 'P' [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pl', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pl' [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Ple', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Ple' [08:57:22] [CLIENT_SIG] Event received: type=0 messageId=19187 [08:57:22] [WS_EVENT] Received event: type=0, messageId=19187 [08:57:22] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19187,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 07:57:21"} [08:57:22] [WS_EVENT] 📨 New message notification (msgId=19187) - triggering incremental refresh, currentMsgCount=52 [08:57:22] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [08:57:22] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-26 07:57:21, "ok": 1, "message_type": 0, "file_name": , "session_id": ILUIWU, "message_id": 19187] [08:57:22] [DB_UPGRADE] Upgrading message ID: -5 → 19187, preserveOriginalDate=false [08:57:22] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19186 [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Plee', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Plee' [08:57:22] [DB_UPGRADE] ✅ Upgraded -5 → 19187 with send_status=0, 1 row(s) affected [08:57:22] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 19187 [08:57:22] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 19187 [08:57:22] ReloadData 9 [08:57:22] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:57:22] [CELL_UPLOAD] → not my message, setting complete [08:57:22] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:57:22] [INCREMENTAL_SYNC] ✅ Found 1 new messages [08:57:22] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [08:57:22] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [08:57:22] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:22] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:22] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:22] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleee', text='Pleeeaaaase' [08:57:22] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleee' [08:57:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19136, 19137, 19138, 19139, 19140] [08:57:23] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [08:57:23] [CELL_UPLOAD] → not my message, setting complete [08:57:23] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [08:57:23] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:23] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:23] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:23] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeea', text='Pleeeaaaase' [08:57:23] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeea' [08:57:23] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:23] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:23] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:23] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeeaa', text='Pleeeaaaase' [08:57:23] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaa' [08:57:23] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:23] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:23] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:23] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeeaaa', text='Pleeeaaaase' [08:57:23] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaa' [08:57:23] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:23] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:23] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:23] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeeaaaa', text='Pleeeaaaase' [08:57:23] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaaa' [08:57:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:24] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeeaaaas', text='Pleeeaaaase' [08:57:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaaas' [08:57:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:24] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [08:57:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleeeaaaase', text='Pleeeaaaase' [08:57:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaaase' [08:57:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [08:57:24] [UPDATE_CELL] Initial targetRowIndex=49 [08:57:24] [UPDATE_CELL] Rebuilt chatRows, count=54 [08:57:24] [UPDATE_CELL] After rebuild targetRowIndex=49 [08:57:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Pleeeaaaase', text='Pleeeaaaase' [08:57:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaaase' [08:57:24] [EVOLUTION] ✅ Animation complete for message 19183 - marking as read now [08:57:25] [PUSH] Silent push received [08:57:25] [PUSH_EMBED] No embedded message_data in notification [08:57:25] [PUSH] No embedded data, pre-loading messages from server [08:57:25] [PUSH_PRELOAD] Fetching messages for instant display cache [08:57:26] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [08:57:26] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [19137, 19136] [08:57:26] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [08:57:26] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [08:57:26] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19187, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [08:57:26] [PUSH] Parsed message_id: 19187 [08:57:26] [PUSH] Parsed operation_type: 3 [08:57:26] [PUSH] Taking direct action: opType=3, messageId=19187 [08:57:26] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19187 [08:57:26] [CLIENT_SIG] Event received: type=3 messageId=19187 [08:57:26] [WS_EVENT] Received event: type=3, messageId=19187 [08:57:26] [WS_EVENT] Read receipt for message 19187 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [08:57:28] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [08:57:28] [LIFECYCLE] App resigning active - cleared crash flag [08:57:29] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [08:57:29] [SECURITY] Saved background timestamp [08:57:29] [LIFECYCLE] App entering background - cleared crash flag [08:57:29] [CLIENT_SIG] Disconnecting [08:57:29] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [08:57:29] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [08:57:29] In cleanupPeer [08:57:29] In cleanupPeer [08:57:29] [LIFECYCLE] WebRTC audio disabled [08:57:29] [LIFECYCLE] AVAudioSession deactivated [08:57:29] [LIFECYCLE] All connections stopped [08:57:29] [CLIENT_SIG] WebSocket closed with code 1001 [08:57:29] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:57:29] [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/} [08:57:29] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:57:29] [SERVER] Stopped reconnect polling [08:57:29] Will request stop of video 0 [08:57:29] Will request stop of video 0 [08:57:29] [PIP] Removing 0 tracks from PiP for connection 0 [08:57:29] [PIP] ✅ All tracks removed for connection 0 [08:57:29] [PIP] Removing 0 tracks from PiP for connection 0 [08:57:29] [PIP] ✅ All tracks removed for connection 0 [09:11:31] [CRASH] No crash detected [09:11:31] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:11:31] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:11:31] [GIPHY] SDK not available - using REST API fallback [09:11:31] [BACKGROUND] Background fetch enabled [09:11:31] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:11:31] [CLEANUP] No old timer messages to delete [09:11:31] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:11:31] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:11:31] [USER] ✅ User registered successfully [09:11:31] [PUSH] User registration after token update: success [09:25:04] [SECURITY] Initial launch - timeout exceeded (1654.5156960487366s > 300.0s) [09:25:04] [AUTH] Starting PIN authentication [09:25:04] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:25:04] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:25:04] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:25:04] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:25:04] [CLIENT_SIG] WebSocket opened [09:25:04] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:25:04] [CLIENT_SIG] Connected! clientId=y_tEFtPEtHjSylv7 [09:25:04] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [09:25:04] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:25:04] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:25:04] [PRELOAD] No messages or parse error [09:25:05] [PIN_AUTH] Correct PIN [09:25:05] [SECURITY] Restored real session: ILUIWU [09:25:05] [SECURITY] Restored real session: ILUIWU [09:25:05] [SECURITY] Saved real session: ILUIWU [09:25:05] [SCENE] Launched directly to chat view with sessionId: ILUIWU [09:25:05] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:25:05] Documents Directory: /var/mobile/Containers/Data/Application/75035B73-3F30-4A91-A570-8F3EEDE21803/Documents [09:25:05] [THEME] Applying current theme [09:25:05] [CHAT] Applied day theme (mode: day) [09:25:05] [SECURITY] Saved real session: ILUIWU [09:25:05] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [09:25:05] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:25:05] [NETWORK] Network monitor started [09:25:05] [NETWORK] Status changed: connected [09:25:05] Did transition [09:25:05] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:25:05] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [09:25:05] [VIEWER] Screen lock enabled - normal idle behavior [09:25:05] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [09:25:05] [VCC] ========== VideoConnectionClass INIT ========== [09:25:05] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [09:25:05] [DATA AUDIO] ========== setupWebRTC() START ========== [09:25:05] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:25:05] [DATA AUDIO] Creating encoder/decoder factories... [09:25:05] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:25:05] [CODEC] Viewer selected encoder: AV1 (best quality) [09:25:05] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:25:05] [DATA AUDIO] ✅ Factory created [09:25:05] [DATA AUDIO] RTCAudioSession locked [09:25:05] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:25:05] [DATA AUDIO] RTCAudioSession unlocked [09:25:05] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:25:05] [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"] [09:25:05] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [09:25:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:25:05] [QUERY] ✅ tempQueryConnection created for iosILUIWU [09:25:05] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:25:05] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:25:05] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:25:05] Did transition [09:25:05] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:25:05] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:25:05] [CHUNK] Merged 972 reactions synchronously [09:25:05] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:25:05] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [09:25:05] [MIGRATION] No messages need sender_name backfill [09:25:05] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:25:05] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [09:25:05] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [09:25:05] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [09:25:05] [USER] ✅ User registered successfully [09:25:05] [USER] User registration successful [09:25:06] [GALLERY_DB] ✅ Loaded 503 media messages [09:25:06] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [09:25:06] [INCREMENTAL_SYNC] ✅ No new messages [09:25:06] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [09:25:06] [GALLERY] First 5 after sort (newest first): [09:25:06] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [09:25:06] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [09:25:06] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [09:25:06] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [09:25:06] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [09:25:06] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:25:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19138, 19139, 19140, 19141, 19142] [09:25:06] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:25:06] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:06] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:25:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [09:25:06] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:06] [CELL_UPLOAD] → not my message, setting complete [09:25:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [09:25:06] [SERVER] Starting reconnect polling (5s interval) [09:25:06] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:25:06] [ICONS] Offset applied: -14.6 [09:25:06] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:25:06] [ICONS] Chat center: (31.2, 87.0) [09:25:06] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:25:06] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:25:06] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:25:06] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:25:06] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:25:06] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:25:06] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:25:06] [ICONS] Screen width: 440.0 [09:25:06] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:25:06] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:25:06] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:25:06] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [09:25:06] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:25:06] [UNSENT_RETRY] Checking for unsent messages... [09:25:06] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:25:06] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:25:06] [UPLOAD_RECOVERY] Session: ILUIWU [09:25:06] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:25:06] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:25:06] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [09:25:06] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [09:25:06] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [09:25:06] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [09:25:06] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [09:25:06] [PENDING_UPLOAD] Total pending upload messages: 0 [09:25:06] [UNSENT_RETRY] No unsent messages found [09:25:06] new_session POST ok: token len=157 [09:25:06] HELLO → sent (fetched token, role=query) [09:25:06] [SIG] hello_ok received for query connection - ready to query agents [09:25:06] [SIG] get_agents request sent for sessionId=ILUIWU [09:25:06] [SIG] get_agents request sent for sessionId=iosILUIWU [09:25:06] [SERVER] Stopped reconnect polling [09:25:06] [SIG] agents_list received: [] [09:25:06] [SIG] agents_list received: [] [09:25:06] [UPLOAD_RECOVERY] ✅ All media files verified on server [09:25:06] [COMBINED_FETCH] Loaded 7949 read receipts, 974 messages with reactions [09:25:06] [READBY_ENRICH] Enriched 50 messages with readBy data [09:25:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19138, 19139, 19140, 19141, 19142] [09:25:06] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:06] [CELL_UPLOAD] → not my message, setting complete [09:25:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [09:25:07] [MENU] dismissAnyExistingMenu called [09:25:07] [MENU] dismissAnyExistingMenu completed [09:25:07] [EMOJI_PICKER] Starting emoji picker for message 19185 [09:25:07] [MENU] Created button 'Reply' at index 0 [09:25:07] [MENU] Created button 'Hide' at index 1 [09:25:07] [MENU] Created button 'Delete' at index 2 [09:25:07] [MENU] Menu added at y=623.0 [09:25:07] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:25:07] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:25:07] [EMOJI_PICKER] ✅ Picker shown at y=253.0 [09:25:08] [REACTION] add ❤️ to message 19185 (alreadyReacted: false) [09:25:08] [MENU] dismissAnyExistingMenu called [09:25:08] [MENU] Found menu with tag 9999, removing [09:25:08] [MENU] Removing blur effect [09:25:08] [MENU] Removing floating message snapshot [09:25:08] [MENU] Dismissing emoji picker [09:25:08] [MENU] Recorded dismissal time for debounce [09:25:08] [MENU] dismissAnyExistingMenu completed [09:25:08] [REACTION] Added ❤️ reaction to message 19185 [09:25:08] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:08] [CELL_UPLOAD] → not my message, setting complete [09:25:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [09:25:15] [INFO] Current channel: 'ILUIWU' [09:25:15] [KEYCHAIN] ✅ Password retrieved for channel: ILUIWU [09:25:15] [INFO] Retrieved password from keychain: length=7 [09:25:18] [SECURITY] Saved real session: ILUIWU2 [09:25:18] [KEYCHAIN] ✅ Password deleted for channel: ILUIWU2 [09:25:18] [KEYCHAIN] ✅ Password saved for channel: ILUIWU2 [09:25:18] [CHANNEL_SWITCH] 🔄 handleChannelChanged received: newChannel='ILUIWU2', role='viewer' [09:25:18] [INFO] Device registered to 'ILUIWU2': HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":1} [09:25:18] [CHANNEL_SWITCH] ⏹️ Stopped event polling timer [09:25:18] [CHANNEL_SWITCH] 🔄 Old sessionId='ILUIWU', switching to 'ILUIWU2' [09:25:18] [CHANNEL_SWITCH] 🗑️ Cleared local DB for old session 'ILUIWU' [09:25:18] [CHANNEL_SWITCH] 🗑️ Cleared memory arrays [09:25:18] [SECURITY] Saved real session: ILUIWU2 [09:25:18] [CHANNEL_SWITCH] ✅ Updated sessionId to 'ILUIWU2' [09:25:18] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:25:18] [CLIENT_SIG] Disconnecting [09:25:18] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:25:18] [CHANNEL_SWITCH] 🔌 Reconnected client signaling to 'ILUIWU2' [09:25:18] [CHANNEL_SWITCH] 📤 Calling refreshAllFromServer... [09:25:18] [REFRESH_ALL] 🔄 refreshAllFromServer called from: channelSwitch, currentMsgCount=0 [09:25:18] [REFRESH_ALL] 📸 Captured 0 message IDs before request [09:25:18] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU2&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:25:18] [CLIENT_SIG] WebSocket closed with code 1001 [09:25:18] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:25:18] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:25:18] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:25:18] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:25:19] [CLIENT_SIG] WebSocket opened [09:25:19] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:25:19] [CLIENT_SIG] Connected! clientId=_UbTFR0xjzw9tkAl [09:25:19] [CLIENT_SIG] Received 1 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:25:19] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:25:19] [PENDING_UPLOAD] Total pending upload messages: 0 [09:25:19] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [09:25:19] DOWNLOADIIING t_8f2a2de52768ee96.jpg [09:25:19] DOWNLOADIIING t_674db2cc35314166.jpg [09:25:19] DOWNLOADIIING t_6864b3095b79fd0d.jpg [09:25:19] ReloadData 14 (all 4 media thumbnails loaded) - applying tab 3 filtering [09:25:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=0, first5Ids=[] [09:25:19] [RELOAD_TAB] ⚠️ allMessagesWithReadBy is EMPTY - falling back to DB [09:25:19] [RELOAD_TAB] Loaded 50 messages from DB (limited) [09:25:19] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 0 → 1744 [09:25:19] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 1744 → 4195 [09:25:20] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=10572 [09:25:20] [REFRESH_ALL] 📊 Server returned 10572 messages [09:25:20] [REFRESH_ALL] 📊 Final merge: server=10572, preserved=0, total=10572 [09:25:20] [REFRESH_ALL] 📊 Displaying 50 of 10572 messages, hasMore=true [09:25:20] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [09:25:20] [CHANNEL_SWITCH] ✅ Completion handler called! allMessagesWithReadBy.count=50, currentTabIndex=3 [09:25:20] [CHANNEL_SWITCH] 🔄 Switching tab UI to tab 0 [09:25:20] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:25:20] [CHANNEL_SWITCH] ✅ Channel switch complete! [09:25:20] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:25:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:25:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:25:20] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:25:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:25:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:25:22] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:26:14] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=17157 [09:26:14] [TAP_REPLAY] 📦 Found message: text.count=2, evolutionData.isEmpty=true [09:26:14] [TAP_REPLAY] 📡 No local evolution data - fetching from server [09:26:14] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [09:26:14] [TAP_REPLAY] ✅ Successfully fetched 3 events from server - calling playEvolutionInline [09:26:14] [EVOLUTION] 🎬 playEvolutionInline called for message 17157 with 3 events [09:26:14] [UPDATE_CELL] 🔍 updateMessageCell called for message 17157 [09:26:14] [UPDATE_CELL] Initial targetRowIndex=59 [09:26:14] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [09:26:14] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Je' [09:26:14] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [09:26:14] [UPDATE_CELL] 🔍 updateMessageCell called for message 17157 [09:26:14] [UPDATE_CELL] Initial targetRowIndex=59 [09:26:14] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [09:26:14] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='J', text='Je' [09:26:14] [UPDATE_CELL] ✅ Updating ChatCell label to: 'J' [09:26:14] [UPDATE_CELL] 🔍 updateMessageCell called for message 17157 [09:26:14] [UPDATE_CELL] Initial targetRowIndex=59 [09:26:14] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [09:26:14] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Je', text='Je' [09:26:14] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Je' [09:26:14] [UPDATE_CELL] 🔍 updateMessageCell called for message 17157 [09:26:14] [UPDATE_CELL] Initial targetRowIndex=59 [09:26:14] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [09:26:14] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Je ', text='Je' [09:26:14] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Je ' [09:26:14] [UPDATE_CELL] 🔍 updateMessageCell called for message 17157 [09:26:14] [UPDATE_CELL] Initial targetRowIndex=59 [09:26:14] [UPDATE_CELL] Rebuilt chatRows, count=63 [09:26:14] [UPDATE_CELL] After rebuild targetRowIndex=59 [09:26:14] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Je', text='Je' [09:26:14] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Je' [09:26:14] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [09:26:14] [EVOLUTION] ✅ Animation complete for message 17157 - marking as read now [09:26:14] [MENU] dismissAnyExistingMenu called [09:26:14] [MENU] dismissAnyExistingMenu completed [09:26:14] [CELL_UPLOAD] configure: msgId=3275, file=979ed1b3bb8031c5.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:26:14] [CELL_UPLOAD] → not my message, setting complete [09:26:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=979ed1b3bb8031c5.heic, overlayExists=true [09:26:15] [SCROLL_BTN] Showing button - 380pt from bottom > half 379pt [09:26:15] [MENU] dismissAnyExistingMenu called [09:26:15] [MENU] dismissAnyExistingMenu completed [09:27:11] [LIFECYCLE] App resigning active - cleared crash flag [09:27:11] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:27:11] [SECURITY] Saved background timestamp [09:27:11] [LIFECYCLE] App entering background - cleared crash flag [09:27:11] [CLIENT_SIG] Disconnecting [09:27:11] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:27:11] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:27:11] [WS] Canceling WebSocket for query connection to iosILUIWU [09:27:11] In cleanupPeer [09:27:11] In cleanupPeer [09:27:11] [LIFECYCLE] WebRTC audio disabled [09:27:11] [LIFECYCLE] AVAudioSession deactivated [09:27:11] [LIFECYCLE] All connections stopped [09:27:11] [CLIENT_SIG] WebSocket closed with code 1001 [09:27:11] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:27:11] [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/} [09:27:11] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:27:11] [SERVER] Stopped reconnect polling [09:27:11] Will request stop of video 0 [09:27:11] Will request stop of video 0 [09:27:11] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:27:11] [WS] Query connection error - cleaning up all agent connections and views [09:27:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:27:11] [WS] Query connection failed - cleaning up all agent connections and views [09:27:11] [PIP] Removing 0 tracks from PiP for connection 0 [09:27:11] [PIP] ✅ All tracks removed for connection 0 [09:27:11] [PIP] Removing 0 tracks from PiP for connection 0 [09:27:11] [PIP] ✅ All tracks removed for connection 0 [09:27:11] [CLEANUP] ======================================== [09:27:11] [CLEANUP] Cleaning up all agent connections and views [09:27:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:27:11] [CLEANUP] Stopped and removed 0 video connections [09:27:11] [CLEANUP] Removed 0 video views [09:27:11] [CLEANUP] Removed 0 feed scroll views [09:27:11] [CLEANUP] Removed 0 status labels [09:27:11] [CLEANUP] Reset agent query state [09:27:11] [CLEANUP] Updated page indicator [09:27:11] [CLEANUP] Rebuilt video layout [09:27:11] [CLEANUP] ✅ All agent connections and views cleaned up [09:27:11] [CLEANUP] ======================================== [09:27:11] [SERVER] Skipping reconnect polling - app is in background [09:27:11] [WS] URLSession invalidated successfully [09:27:11] [CLEANUP] ======================================== [09:27:11] [CLEANUP] Cleaning up all agent connections and views [09:27:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:27:11] [CLEANUP] Stopped and removed 0 video connections [09:27:11] [CLEANUP] Removed 0 video views [09:27:11] [CLEANUP] Removed 0 feed scroll views [09:27:11] [CLEANUP] Removed 0 status labels [09:27:11] [CLEANUP] Reset agent query state [09:27:11] [CLEANUP] Updated page indicator [09:27:11] [CLEANUP] Rebuilt video layout [09:27:11] [CLEANUP] ✅ All agent connections and views cleaned up [09:27:11] [CLEANUP] ======================================== [09:27:11] [SERVER] Skipping reconnect polling - app is in background [09:29:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:29:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [PUSH] Silent push received [09:29:22] [PUSH_EMBED] No embedded message_data in notification [09:29:22] [PUSH] No embedded data, pre-loading messages from server [09:29:22] [PUSH_PRELOAD] Fetching messages for instant display cache [09:29:22] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:29:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:29:22] HELLO → sent (cached token, role=query) [09:29:22] [SIG] hello_ok received for query connection - ready to query agents [09:29:22] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:29:22] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:29:22] [SERVER] Stopped reconnect polling [09:29:22] [SIG] agents_list received: [] [09:29:22] [SIG] agents_list received: [] [09:29:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:22] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:22] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:22] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:22] [CLIENT_SIG] WebSocket opened [09:29:22] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:29:22] [CLIENT_SIG] Connected! clientId=B_4ThsqLnvoRpDuX [09:29:22] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:29:22] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:29:22] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:29:22] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:22] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:22] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:22] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:22] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:22] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 14693, AnyHashable("aps"): { "content-available" = 1; }] [09:29:22] [PUSH] Parsed message_id: 14693 [09:29:22] [PUSH] Parsed operation_type: 3 [09:29:22] [PUSH] Taking direct action: opType=3, messageId=14693 [09:29:22] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=14693 [09:29:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 17161, AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { "content-available" = 1; }] [09:29:22] [PUSH] Parsed message_id: 17161 [09:29:22] [PUSH] Parsed operation_type: 3 [09:29:22] [PUSH] Taking direct action: opType=3, messageId=17161 [09:29:22] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17161 [09:29:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 17158, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [09:29:22] [PUSH] Parsed message_id: 17158 [09:29:22] [PUSH] Parsed operation_type: 3 [09:29:22] [PUSH] Taking direct action: opType=3, messageId=17158 [09:29:22] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17158 [09:29:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 14692, AnyHashable("session_id"): ILUIWU2] [09:29:22] [PUSH] Parsed message_id: 14692 [09:29:22] [PUSH] Parsed operation_type: 3 [09:29:22] [PUSH] Taking direct action: opType=3, messageId=14692 [09:29:22] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=14692 [09:29:22] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:23] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:29:23] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:29:23] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:29:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17157, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] [09:29:23] [PUSH] Parsed message_id: 17157 [09:29:23] [PUSH] Parsed operation_type: 3 [09:29:23] [PUSH] Taking direct action: opType=3, messageId=17157 [09:29:23] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17157 [09:29:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 17159] [09:29:23] [PUSH] Parsed message_id: 17159 [09:29:23] [PUSH] Parsed operation_type: 3 [09:29:23] [PUSH] Taking direct action: opType=3, messageId=17159 [09:29:23] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17159 [09:29:26] [SECURITY] Timeout check: elapsed=134.9616777896881s, timeout=300.0s [09:29:26] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:29:26] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:29:26] [LIFECYCLE] App entering foreground - restoring connections [09:29:26] [LIFECYCLE] Away > 2 minutes (134s) - will scroll to bottom [09:29:26] [UPLOAD_RETRY] No pending uploads to retry [09:29:26] [LIFECYCLE] Merged 978 reactions from local DB [09:29:26] [LIFECYCLE] WebRTC audio re-enabled [09:29:26] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:29:26] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:29:26] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:29:26] [VIEWER] Reconnecting after background - querying agents [09:29:26] [UNSENT_RETRY] Checking for unsent messages... [09:29:26] [PENDING_UPLOAD] Total pending upload messages: 0 [09:29:26] [UNSENT_RETRY] No unsent messages found [09:29:26] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [09:29:26] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:29:26] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} [09:29:26] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:29:26] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [09:29:26] [WS] Query connection failed - cleaning up all agent connections and views [09:29:26] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [09:29:26] [WS] Query connection error - cleaning up all agent connections and views [09:29:26] [CLEANUP] ======================================== [09:29:26] [CLEANUP] Cleaning up all agent connections and views [09:29:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:29:26] [CLEANUP] Stopped and removed 0 video connections [09:29:26] [CLEANUP] Removed 0 video views [09:29:26] [CLEANUP] Removed 0 feed scroll views [09:29:26] [CLEANUP] Removed 0 status labels [09:29:26] [CLEANUP] Reset agent query state [09:29:26] [CLEANUP] Updated page indicator [09:29:26] [CLEANUP] Rebuilt video layout [09:29:26] [CLEANUP] ✅ All agent connections and views cleaned up [09:29:26] [CLEANUP] ======================================== [09:29:26] [SERVER] Starting reconnect polling (5s interval) [09:29:26] [CLEANUP] ======================================== [09:29:26] [CLEANUP] Cleaning up all agent connections and views [09:29:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:29:26] [CLEANUP] Stopped and removed 0 video connections [09:29:26] [CLEANUP] Removed 0 video views [09:29:26] [CLEANUP] Removed 0 feed scroll views [09:29:26] [CLEANUP] Removed 0 status labels [09:29:26] [CLEANUP] Reset agent query state [09:29:26] [CLEANUP] Updated page indicator [09:29:26] [CLEANUP] Rebuilt video layout [09:29:26] [CLEANUP] ✅ All agent connections and views cleaned up [09:29:26] [CLEANUP] ======================================== [09:29:26] [SERVER] Starting reconnect polling (5s interval) [09:29:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:26] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:26] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:27] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:29:27] [SECURITY] Within timeout - cleared background flag [09:29:27] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:29:27] [PUSH] handlePollEventsNotification userInfo: [:] [09:29:27] [PUSH] No message_id in userInfo [09:29:27] [PUSH] No operation_type in userInfo [09:29:27] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:29:27] [FAST_REFRESH] Already have 50 messages - skipping local DB load [09:29:27] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:29:27] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:29:27] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:29:27] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [09:29:27] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:29:27] [FOREGROUND] Enriched 6 messages with readBy data from server [09:29:27] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:29:27] [INCREMENTAL_SYNC] ✅ No new messages [09:29:27] [FAST_REFRESH] Incremental sync complete - 50 messages [09:29:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:27] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:27] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:29:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:29:28] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:29:28] [FAST_REFRESH] Enriched 50 messages with readBy data [09:29:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:29:28] HELLO → sent (cached token, role=query) [09:29:28] [SIG] hello_ok received for query connection - ready to query agents [09:29:28] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:29:28] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:29:28] [SERVER] Stopped reconnect polling [09:29:28] [SIG] agents_list received: [] [09:29:28] [SIG] agents_list received: [] [09:29:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:28] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:28] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:28] [MUTE] Status sent to server: muted=1, response code=200 [09:29:28] [MUTE] Status sent to server: muted=1, response code=200 [09:29:29] [LIFECYCLE] App resigning active - cleared crash flag [09:29:30] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:29:30] [SECURITY] Saved background timestamp [09:29:30] [LIFECYCLE] App entering background - cleared crash flag [09:29:30] [CLIENT_SIG] Disconnecting [09:29:30] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:29:30] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:29:30] [WS] Canceling WebSocket for query connection to iosILUIWU [09:29:30] In cleanupPeer [09:29:30] In cleanupPeer [09:29:30] [LIFECYCLE] WebRTC audio disabled [09:29:30] [LIFECYCLE] AVAudioSession deactivated [09:29:30] [LIFECYCLE] All connections stopped [09:29:30] [SERVER] Stopped reconnect polling [09:29:30] Will request stop of video 0 [09:29:30] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:29:30] [WS] Query connection error - cleaning up all agent connections and views [09:29:30] Will request stop of video 0 [09:29:30] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:29:30] [WS] Query connection failed - cleaning up all agent connections and views [09:29:30] [PIP] Removing 0 tracks from PiP for connection 0 [09:29:30] [PIP] ✅ All tracks removed for connection 0 [09:29:30] [CLEANUP] ======================================== [09:29:30] [CLEANUP] Cleaning up all agent connections and views [09:29:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:29:30] [CLEANUP] Stopped and removed 0 video connections [09:29:30] [CLEANUP] Removed 0 video views [09:29:30] [CLEANUP] Removed 0 feed scroll views [09:29:30] [CLEANUP] Removed 0 status labels [09:29:30] [CLEANUP] Reset agent query state [09:29:30] [CLEANUP] Updated page indicator [09:29:30] [CLEANUP] Rebuilt video layout [09:29:30] [CLEANUP] ✅ All agent connections and views cleaned up [09:29:30] [CLEANUP] ======================================== [09:29:30] [SERVER] Skipping reconnect polling - app is in background [09:29:30] [WS] URLSession invalidated successfully [09:29:30] [PIP] Removing 0 tracks from PiP for connection 0 [09:29:30] [PIP] ✅ All tracks removed for connection 0 [09:29:30] [CLEANUP] ======================================== [09:29:30] [CLEANUP] Cleaning up all agent connections and views [09:29:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:29:30] [CLEANUP] Stopped and removed 0 video connections [09:29:30] [CLEANUP] Removed 0 video views [09:29:30] [CLEANUP] Removed 0 feed scroll views [09:29:30] [CLEANUP] Removed 0 status labels [09:29:30] [CLEANUP] Reset agent query state [09:29:30] [CLEANUP] Updated page indicator [09:29:30] [CLEANUP] Rebuilt video layout [09:29:30] [CLEANUP] ✅ All agent connections and views cleaned up [09:29:30] [CLEANUP] ======================================== [09:29:30] [SERVER] Skipping reconnect polling - app is in background [09:29:50] [SECURITY] Timeout check: elapsed=20.46915102005005s, timeout=300.0s [09:29:50] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:29:50] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:29:50] [LIFECYCLE] App entering foreground - restoring connections [09:29:50] [UPLOAD_RETRY] No pending uploads to retry [09:29:50] [LIFECYCLE] Merged 978 reactions from local DB [09:29:50] [LIFECYCLE] WebRTC audio re-enabled [09:29:50] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:29:50] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:29:50] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:29:50] [VIEWER] Reconnecting after background - querying agents [09:29:50] [UNSENT_RETRY] Checking for unsent messages... [09:29:50] [PENDING_UPLOAD] Total pending upload messages: 0 [09:29:50] [UNSENT_RETRY] No unsent messages found [09:29:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:29:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:29:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:50] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:50] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:51] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:29:51] [SECURITY] Within timeout - cleared background flag [09:29:51] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:29:51] [PUSH] handlePollEventsNotification userInfo: [:] [09:29:51] [PUSH] No message_id in userInfo [09:29:51] [PUSH] No operation_type in userInfo [09:29:51] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:29:51] [FAST_REFRESH] Already have 50 messages - skipping local DB load [09:29:51] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:29:51] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:29:51] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:29:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [09:29:51] [CLIENT_SIG] WebSocket opened [09:29:51] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:29:51] [CLIENT_SIG] Connected! clientId=THLpV5xPKE__LYVh [09:29:51] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:29:51] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:29:51] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:29:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:29:51] HELLO → sent (cached token, role=query) [09:29:51] [SIG] hello_ok received for query connection - ready to query agents [09:29:51] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:29:51] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:29:51] [SERVER] Stopped reconnect polling [09:29:51] [SIG] agents_list received: [] [09:29:51] [SIG] agents_list received: [] [09:29:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:51] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:52] [PUSH] Silent push received [09:29:52] [PUSH_EMBED] 📩 Received embedded message: id=19189, type=0, sender=Lolo [09:29:52] [PUSH_EMBED] ✅ Saved message 19189 to local DB (sync) [09:29:52] [PUSH_EMBED] Inserted message 19189 into existing cache (now 51 messages) [09:29:52] [PUSH_EMBED] Fetching evolution data for message 19189 in background [09:29:52] [PUSH_EMBED] ✅ Fully processed message 19189 [09:29:52] [PUSH] Embedded message handled instantly from silent push [09:29:52] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:29:52] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:29:52] [PUSH_UI] Inserted message 19189 into UI (now 51 messages) [09:29:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 08:29:44"; "file_name" = ""; message = Msg2; "message_id" = 19189; "message_type" = 0; "prev_session_message_id" = 19188; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19189] [09:29:52] [PUSH_EMBED_VC] Message 19189 already in memory - skipping [09:29:52] [PUSH] ⚡ Embedded message handled directly in ViewController [09:29:52] [PUSH] Parsed message_id: 19189 [09:29:52] [PUSH] Parsed operation_type: 0 [09:29:52] [PUSH] Taking direct action: opType=0, messageId=19189 [09:29:52] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19189 [09:29:52] [PUSH] ⚡ Message 19189 already in memory - skipping duplicate notification entirely [09:29:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19189, 1744, 4195, 1781, 1817] [09:29:52] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:52] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:29:55] [MENU] dismissAnyExistingMenu called [09:29:55] [MENU] dismissAnyExistingMenu completed [09:29:55] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17161 → 19189 [09:29:59] [CLIENT_SIG] Event received: type=0 messageId=19189 [09:29:59] [WS_EVENT] Received event: type=0, messageId=19189 [09:29:59] [WS_EVENT] 📨 New message notification (msgId=19189) - triggering incremental refresh, currentMsgCount=51 [09:29:59] [INCREMENTAL_SYNC] ⚠️ Already reloading - skipping incremental refresh [09:29:59] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [09:29:59] [INCREMENTAL_SYNC] ✅ Found 2 new messages [09:29:59] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=2 [09:29:59] [FAST_REFRESH] Incremental sync complete - 52 messages [09:29:59] [PUSH_EMBED] Got evolution data for message 19189, saving to local DB [09:29:59] [PUSH_EMBED] Saved evolution data for message 19189 [09:29:59] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:29:59] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:29:59] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:29:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:30:00] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:30:00] [FAST_REFRESH] Enriched 52 messages with readBy data [09:30:00] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:30:00] [FOREGROUND] Enriched 1 messages with readBy data from server [09:30:00] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:30:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:30:01] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [09:30:01] [WS] Query connection error - cleaning up all agent connections and views [09:30:01] [CLEANUP] ======================================== [09:30:01] [CLEANUP] Cleaning up all agent connections and views [09:30:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:30:01] [CLEANUP] Stopped and removed 0 video connections [09:30:01] [CLEANUP] Removed 0 video views [09:30:01] [CLEANUP] Removed 0 feed scroll views [09:30:01] [CLEANUP] Removed 0 status labels [09:30:01] [CLEANUP] Reset agent query state [09:30:01] [CLEANUP] Updated page indicator [09:30:01] [CLEANUP] Rebuilt video layout [09:30:01] [CLEANUP] ✅ All agent connections and views cleaned up [09:30:01] [CLEANUP] ======================================== [09:30:01] [SERVER] Starting reconnect polling (5s interval) [09:30:01] [PUSH] Silent push received [09:30:01] [PUSH_EMBED] No embedded message_data in notification [09:30:01] [PUSH] No embedded data, pre-loading messages from server [09:30:01] [PUSH_PRELOAD] Fetching messages for instant display cache [09:30:01] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:30:01] [PUSH] Silent push received [09:30:01] [PUSH_EMBED] No embedded message_data in notification [09:30:01] [PUSH] No embedded data, pre-loading messages from server [09:30:01] [PUSH_PRELOAD] Fetching messages for instant display cache [09:30:01] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [4195, 1744] [09:30:01] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:30:01] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:30:01] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19189, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] [09:30:01] [PUSH] Parsed message_id: 19189 [09:30:01] [PUSH] Parsed operation_type: 3 [09:30:01] [PUSH] Taking direct action: opType=3, messageId=19189 [09:30:01] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19189 [09:30:01] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:30:01] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [4195, 1744] [09:30:01] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:30:01] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:30:01] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19188, AnyHashable("aps"): { "content-available" = 1; }] [09:30:01] [PUSH] Parsed message_id: 19188 [09:30:01] [PUSH] Parsed operation_type: 3 [09:30:01] [PUSH] Taking direct action: opType=3, messageId=19188 [09:30:01] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19188 [09:30:06] [SERVER] Polling - attempting to reconnect... [09:30:10] [CLIENT_SIG] Event received: type=3 messageId=19189 [09:30:10] [WS_EVENT] Received event: type=3, messageId=19189 [09:30:10] [WS_EVENT] Read receipt for message 19189 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:30:10] [CLIENT_SIG] Event received: type=3 messageId=19188 [09:30:10] [WS_EVENT] Received event: type=3, messageId=19188 [09:30:10] [WS_EVENT] Read receipt for message 19188 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:30:11] [SERVER] Polling - attempting to reconnect... [09:30:16] [SERVER] Polling - attempting to reconnect... [09:30:21] [SERVER] Polling - attempting to reconnect... [09:30:26] [SERVER] Polling - attempting to reconnect... [09:30:31] [SERVER] Polling - attempting to reconnect... [09:30:36] [SERVER] Polling - attempting to reconnect... [09:30:41] [SERVER] Polling - attempting to reconnect... [09:30:46] [SERVER] Polling - attempting to reconnect... [09:30:51] [SERVER] Polling - attempting to reconnect... [09:30:56] [SERVER] Polling - attempting to reconnect... [09:31:01] [SERVER] Polling - attempting to reconnect... [09:31:06] [SERVER] Polling - attempting to reconnect... [09:31:11] [SERVER] Polling - attempting to reconnect... [09:31:16] [SERVER] Polling - attempting to reconnect... [09:31:21] [SERVER] Polling - attempting to reconnect... [09:31:26] [SERVER] Polling - attempting to reconnect... [09:31:31] [SERVER] Polling - attempting to reconnect... [09:31:36] [SERVER] Polling - attempting to reconnect... [09:31:41] [SERVER] Polling - attempting to reconnect... [09:31:46] [SERVER] Polling - attempting to reconnect... [09:31:51] [SERVER] Polling - attempting to reconnect... [09:31:56] [SERVER] Polling - attempting to reconnect... [09:32:01] [SERVER] Polling - attempting to reconnect... [09:32:06] [SERVER] Polling - attempting to reconnect... [09:32:11] [SERVER] Polling - attempting to reconnect... [09:32:16] [SERVER] Polling - attempting to reconnect... [09:32:21] [SERVER] Polling - attempting to reconnect... [09:32:26] [SERVER] Polling - attempting to reconnect... [09:32:31] [SERVER] Polling - attempting to reconnect... [09:32:36] [SERVER] Polling - attempting to reconnect... [09:32:41] [SERVER] Polling - attempting to reconnect... [09:32:46] [SERVER] Polling - attempting to reconnect... [09:32:51] [SERVER] Polling - attempting to reconnect... [09:32:56] [SERVER] Polling - attempting to reconnect... [09:33:01] [SERVER] Polling - attempting to reconnect... [09:33:06] [SERVER] Polling - attempting to reconnect... [09:33:11] [SERVER] Polling - attempting to reconnect... [09:33:16] [SERVER] Polling - attempting to reconnect... [09:33:21] [SERVER] Polling - attempting to reconnect... [09:33:26] [SERVER] Polling - attempting to reconnect... [09:33:31] [SERVER] Polling - attempting to reconnect... [09:33:36] [SERVER] Polling - attempting to reconnect... [09:33:41] [SERVER] Polling - attempting to reconnect... [09:33:46] [SERVER] Polling - attempting to reconnect... [09:33:51] [SERVER] Polling - attempting to reconnect... [09:33:51] [LIFECYCLE] App resigning active - cleared crash flag [09:33:52] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:33:52] [SECURITY] Saved background timestamp [09:33:52] [LIFECYCLE] App entering background - cleared crash flag [09:33:52] [CLIENT_SIG] Disconnecting [09:33:52] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:33:52] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [09:33:52] [WS] Canceling WebSocket for query connection to iosILUIWU [09:33:52] In cleanupPeer [09:33:52] In cleanupPeer [09:33:52] [LIFECYCLE] WebRTC audio disabled [09:33:52] [LIFECYCLE] AVAudioSession deactivated [09:33:52] [LIFECYCLE] All connections stopped [09:33:52] [CLIENT_SIG] WebSocket closed with code 1001 [09:33:52] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:33:52] [SERVER] Stopped reconnect polling [09:33:52] [WS] URLSession invalidated successfully [09:33:52] Will request stop of video 0 [09:33:52] Will request stop of video 0 [09:33:52] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:33:52] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:33:52] [PIP] Removing 0 tracks from PiP for connection 0 [09:33:52] [PIP] ✅ All tracks removed for connection 0 [09:33:52] [PIP] Removing 0 tracks from PiP for connection 0 [09:33:52] [PIP] ✅ All tracks removed for connection 0 [09:43:50] [CRASH] No crash detected [09:43:50] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:43:50] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:43:50] [GIPHY] SDK not available - using REST API fallback [09:43:50] [BACKGROUND] Background fetch enabled [09:43:50] [SECURITY] Initial launch - timeout exceeded (597.886655330658s > 300.0s) [09:43:50] [AUTH] Starting PIN authentication [09:43:50] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:43:50] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:43:50] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:43:50] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:43:50] [CLEANUP] No old timer messages to delete [09:43:50] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:43:50] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [09:43:50] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:43:50] [USER] ✅ User registered successfully [09:43:50] [PUSH] User registration after token update: success [09:43:50] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19189)... [09:43:50] [CLIENT_SIG] WebSocket opened [09:43:50] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:43:50] [CLIENT_SIG] Connected! clientId=VqZwU4Bc062CA1tv [09:43:50] [PRELOAD] No messages or parse error [09:43:50] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:43:50] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:43:50] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:43:52] [PIN_AUTH] Correct PIN [09:43:52] [SECURITY] Restored real session: ILUIWU2 [09:43:52] [SECURITY] Restored real session: ILUIWU2 [09:43:52] [SECURITY] Saved real session: ILUIWU2 [09:43:52] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:43:52] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:43:52] Documents Directory: /var/mobile/Containers/Data/Application/3AC01166-C687-4982-BE84-6DCD32D50197/Documents [09:43:52] [THEME] Applying current theme [09:43:52] [CHAT] Applied day theme (mode: day) [09:43:52] [SECURITY] Saved real session: ILUIWU2 [09:43:52] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:43:52] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:43:52] [NETWORK] Network monitor started [09:43:52] [NETWORK] Status changed: connected [09:43:52] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:43:52] Did transition [09:43:52] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:43:52] [VIEWER] Screen lock enabled - normal idle behavior [09:43:52] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:43:52] [VCC] ========== VideoConnectionClass INIT ========== [09:43:52] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:43:52] [DATA AUDIO] ========== setupWebRTC() START ========== [09:43:52] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:43:52] [DATA AUDIO] Creating encoder/decoder factories... [09:43:52] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:43:52] [CODEC] Viewer selected encoder: AV1 (best quality) [09:43:52] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:43:52] [DATA AUDIO] ✅ Factory created [09:43:52] [DATA AUDIO] RTCAudioSession locked [09:43:52] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:43:52] [DATA AUDIO] RTCAudioSession unlocked [09:43:52] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:43:52] [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"] [09:43:52] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:43:52] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:43:52] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:43:52] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:43:52] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:43:52] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:43:52] Did transition [09:43:52] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:43:52] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:43:52] [CHUNK] Merged 978 reactions synchronously [09:43:52] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:43:52] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:43:52] [MIGRATION] Found 3 messages needing sender_name backfill [09:43:52] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:43:52] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:43:52] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:43:52] [GALLERY_DB] ✅ Loaded 8 media messages [09:43:52] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:43:52] [GALLERY] First 5 after sort (newest first): [09:43:52] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:43:52] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:43:52] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:43:52] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:43:52] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:43:52] [USER] ✅ User registered successfully [09:43:52] [USER] User registration successful [09:43:52] [SERVER] Starting reconnect polling (5s interval) [09:43:52] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:43:52] [ICONS] Offset applied: -14.6 [09:43:52] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:43:52] [MIGRATION] Failed to parse user names response [09:43:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:43:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19189, maxMemoryId=19189 [09:43:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19189 [09:43:52] [INCREMENTAL_SYNC] ✅ No new messages [09:43:52] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:43:52] [UNSENT_RETRY] Checking for unsent messages... [09:43:52] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:43:52] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:43:52] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:43:52] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:43:52] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:43:52] [UPLOAD_RECOVERY] No recent media messages to check on server [09:43:52] [PENDING_UPLOAD] Total pending upload messages: 0 [09:43:52] [UNSENT_RETRY] No unsent messages found [09:43:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:43:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:43:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:43:52] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:43:52] [ICONS] Chat center: (31.2, 87.0) [09:43:52] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:43:52] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:43:52] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:43:52] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:43:52] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:43:52] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:43:52] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:43:52] [ICONS] Screen width: 440.0 [09:43:52] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:43:52] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:43:52] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:43:52] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:43:53] [CHAT] Bubble color update notification received [09:43:53] new_session POST ok: token len=159 [09:43:53] HELLO → sent (fetched token, role=query) [09:43:53] [SIG] hello_ok received for query connection - ready to query agents [09:43:53] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:43:53] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:43:53] [SERVER] Stopped reconnect polling [09:43:53] [SIG] agents_list received: [] [09:43:53] [SIG] agents_list received: [] [09:43:53] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:43:53] [READBY_ENRICH] Enriched 50 messages with readBy data [09:43:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:43:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:43:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:43:56] [MUTE] Status sent to server: muted=0, response code=200 [09:43:56] [MUTE] Status sent to server: muted=0, response code=200 [09:43:58] [MUTE] Status sent to server: muted=1, response code=200 [09:43:58] [MUTE] Status sent to server: muted=1, response code=200 [09:44:01] [LIFECYCLE] App resigning active - cleared crash flag [09:44:02] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:44:02] [SECURITY] Saved background timestamp [09:44:02] [LIFECYCLE] App entering background - cleared crash flag [09:44:02] [CLIENT_SIG] Disconnecting [09:44:02] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:44:02] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:44:02] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=0 [09:44:02] [WS] Canceling WebSocket for query connection to iosILUIWU2 [09:44:02] In cleanupPeer [09:44:02] In cleanupPeer [09:44:02] [LIFECYCLE] WebRTC audio disabled [09:44:02] [LIFECYCLE] AVAudioSession deactivated [09:44:02] [LIFECYCLE] All connections stopped [09:44:02] [CLIENT_SIG] WebSocket closed with code 1001 [09:44:02] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:44:02] [SERVER] Stopped reconnect polling [09:44:02] [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/} [09:44:02] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:44:02] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:44:02] [WS] Query connection error - cleaning up all agent connections and views [09:44:02] Will request stop of video 0 [09:44:02] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:44:02] [WS] Query connection failed - cleaning up all agent connections and views [09:44:02] Will request stop of video 0 [09:44:02] [CLEANUP] ======================================== [09:44:02] [CLEANUP] Cleaning up all agent connections and views [09:44:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:44:02] [CLEANUP] Stopped and removed 0 video connections [09:44:02] [CLEANUP] Removed 0 video views [09:44:02] [CLEANUP] Removed 0 feed scroll views [09:44:02] [CLEANUP] Removed 0 status labels [09:44:02] [CLEANUP] Reset agent query state [09:44:02] [CLEANUP] Updated page indicator [09:44:02] [CLEANUP] Rebuilt video layout [09:44:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:44:02] [CLEANUP] ======================================== [09:44:02] [SERVER] Skipping reconnect polling - app is in background [09:44:02] [WS] URLSession invalidated successfully [09:44:02] [PIP] Removing 0 tracks from PiP for connection 0 [09:44:02] [PIP] ✅ All tracks removed for connection 0 [09:44:02] [CLEANUP] ======================================== [09:44:02] [CLEANUP] Cleaning up all agent connections and views [09:44:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:44:02] [CLEANUP] Stopped and removed 0 video connections [09:44:02] [CLEANUP] Removed 0 video views [09:44:02] [CLEANUP] Removed 0 feed scroll views [09:44:02] [CLEANUP] Removed 0 status labels [09:44:02] [CLEANUP] Reset agent query state [09:44:02] [CLEANUP] Updated page indicator [09:44:02] [CLEANUP] Rebuilt video layout [09:44:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:44:02] [CLEANUP] ======================================== [09:44:02] [SERVER] Skipping reconnect polling - app is in background [09:44:02] [PIP] Removing 0 tracks from PiP for connection 0 [09:44:02] [PIP] ✅ All tracks removed for connection 0 [09:44:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU2 [09:44:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:44:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:44:04] HELLO → sent (cached token, role=query) [09:44:04] [SIG] hello_ok received for query connection - ready to query agents [09:44:04] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:44:04] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:44:04] [SERVER] Stopped reconnect polling [09:44:04] [SIG] agents_list received: [] [09:44:04] [SIG] agents_list received: [] [09:44:06] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:44:06] [CLIENT_SIG] WebSocket opened [09:44:06] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:44:06] [CLIENT_SIG] Connected! clientId=fcqHkf4WPI5457H6 [09:44:06] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:44:06] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:44:06] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:44:06] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:44:12] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:44:14] [PUSH] Silent push received [09:44:14] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:44:14 +0000, appState=2, message_id=19190 [09:44:14] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:44:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:44:14 +0000 [09:44:14] [PUSH_TRACE] ⬇️ Processing embedded message_id=19190 [09:44:14] [PUSH_EMBED] 📩 Received embedded message: id=19190, type=0, sender=Lolo [09:44:14] [PUSH_TRACE] ⬇️ Message details: text="Msg3...", datesent=2026-01-26 08:44:12 [09:44:14] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [09:44:14] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19190 [09:44:14] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19190 [09:44:14] [PUSH_EMBED] ✅ Saved message 19190 to local DB (sync) [09:44:14] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19190 [09:44:14] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19190 [09:44:14] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19190 [09:44:14] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [09:44:14] [PUSH_EMBED] Created new cache with embedded message 19190 [09:44:14] [PUSH_TRACE] 📦 ✅ Created new cache with message 19190 [09:44:14] [PUSH_TRACE] 📦 EXITING cache update queue for message 19190 [09:44:14] [PUSH_EMBED] Fetching evolution data for message 19190 in background [09:44:14] [PUSH_EMBED] ✅ Fully processed message 19190 [09:44:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19190 [09:44:14] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19190], handled=true [09:44:14] [PUSH] Embedded message handled instantly from silent push [09:44:14] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:44:14] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19190 [09:44:14] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:44:14] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:44:14] [PUSH_TRACE] 👁️ Received message id=19190, text="Msg3..." [09:44:14] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:44:14] [PUSH_TRACE] 👁️ BEFORE insert: 50 messages, first 5 IDs: [1781, 1817, 1818, 1819, 1820] [09:44:14] [PUSH_TRACE] 👁️ Inserted message 19190 at index 0 [09:44:14] [PUSH_UI] Inserted message 19190 into UI (now 51 messages) [09:44:14] [PUSH_TRACE] 👁️ AFTER insert: 51 messages, first 5 IDs: [19190, 1781, 1817, 1818, 1819] [09:44:14] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [09:44:14] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [09:44:14] [WS] Query connection error - cleaning up all agent connections and views [09:44:14] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891] [09:44:14] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("message_data"): { datesent = "2026-01-26 08:44:12"; "file_name" = ""; message = Msg3; "message_id" = 19190; "message_type" = 0; "prev_session_message_id" = 19189; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19190, AnyHashable("aps"): { "content-available" = 1; }] [09:44:14] [PUSH_EMBED_VC] Message 19190 already in memory - skipping [09:44:14] [PUSH] ⚡ Embedded message handled directly in ViewController [09:44:14] [PUSH] Parsed message_id: 19190 [09:44:14] [PUSH] Parsed operation_type: 0 [09:44:14] [PUSH] Taking direct action: opType=0, messageId=19190 [09:44:14] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19190 [09:44:14] [PUSH] ⚡ Message 19190 already in memory - skipping duplicate notification entirely [09:44:14] [CLEANUP] ======================================== [09:44:14] [CLEANUP] Cleaning up all agent connections and views [09:44:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:44:14] [CLEANUP] Stopped and removed 0 video connections [09:44:14] [CLEANUP] Removed 0 video views [09:44:14] [CLEANUP] Removed 0 feed scroll views [09:44:14] [CLEANUP] Removed 0 status labels [09:44:14] [CLEANUP] Reset agent query state [09:44:14] [CLEANUP] Updated page indicator [09:44:14] [CLEANUP] Rebuilt video layout [09:44:14] [CLEANUP] ✅ All agent connections and views cleaned up [09:44:14] [CLEANUP] ======================================== [09:44:14] [SERVER] Skipping reconnect polling - app is in background [09:44:14] [PUSH_EMBED] Got evolution data for message 19190, saving to local DB [09:44:14] [PUSH_EMBED] Saved evolution data for message 19190 [09:44:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19190, 1781, 1817, 1818, 1819] [09:44:14] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:44:14] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891] [09:44:14] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19189 → 19190 [09:44:19] [CLIENT_SIG] Event received: type=0 messageId=19190 [09:44:19] [WS_EVENT] Received event: type=0, messageId=19190 [09:44:19] [WS_EVENT] 📨 New message notification (msgId=19190) - triggering incremental refresh, currentMsgCount=51 [09:44:19] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:44:19] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19190, maxMemoryId=19190 [09:44:19] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19190 [09:44:19] [INCREMENTAL_SYNC] ✅ No new messages [09:44:19] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [09:44:20] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:44:21] [PUSH] Silent push received [09:44:21] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:44:21 +0000, appState=2, message_id=nil [09:44:21] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19190] [09:44:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:44:21 +0000 [09:44:21] [PUSH_EMBED] No embedded message_data in notification [09:44:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:44:21] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19190], handled=false [09:44:21] [PUSH] No embedded data, pre-loading messages from server [09:44:21] [PUSH_PRELOAD] Fetching messages for instant display cache [09:44:21] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:44:21] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:44:21] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [09:44:21] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19190] [09:44:21] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:44:21] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [09:44:21] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:44:21] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:44:21] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891] [09:44:21] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19190, AnyHashable("aps"): { "content-available" = 1; }] [09:44:21] [PUSH] Parsed message_id: 19190 [09:44:21] [PUSH] Parsed operation_type: 3 [09:44:21] [PUSH] Taking direct action: opType=3, messageId=19190 [09:44:21] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19190 [09:44:24] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:44:26] [PUSH] Silent push received [09:44:26] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:44:26 +0000, appState=2, message_id=19191 [09:44:26] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [09:44:26] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:44:26 +0000 [09:44:26] [PUSH_TRACE] ⬇️ Processing embedded message_id=19191 [09:44:26] [PUSH_EMBED] 📩 Received embedded message: id=19191, type=0, sender=Lolo [09:44:26] [PUSH_TRACE] ⬇️ Message details: text="Msg4...", datesent=2026-01-26 08:44:24 [09:44:26] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [09:44:26] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19191 [09:44:26] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19191 [09:44:26] [PUSH_EMBED] ✅ Saved message 19191 to local DB (sync) [09:44:26] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19191 [09:44:26] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19191 [09:44:26] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19191 [09:44:26] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [09:44:26] [PUSH_EMBED] Inserted message 19191 into existing cache (now 51 messages) [09:44:26] [PUSH_TRACE] 📦 ✅ Inserted message 19191, cache now has IDs: [19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:26] [PUSH_TRACE] 📦 EXITING cache update queue for message 19191 [09:44:26] [PUSH_EMBED] Fetching evolution data for message 19191 in background [09:44:26] [PUSH_EMBED] ✅ Fully processed message 19191 [09:44:26] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19191 [09:44:26] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692], handled=true [09:44:26] [PUSH] Embedded message handled instantly from silent push [09:44:26] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:44:26] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19191 [09:44:26] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:44:26] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:44:26] [PUSH_TRACE] 👁️ Received message id=19191, text="Msg4..." [09:44:26] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:44:26] [PUSH_TRACE] 👁️ BEFORE insert: 51 messages, first 5 IDs: [19190, 1781, 1817, 1818, 1819] [09:44:26] [PUSH_TRACE] 👁️ Inserted message 19191 at index 0 [09:44:26] [PUSH_UI] Inserted message 19191 into UI (now 52 messages) [09:44:26] [PUSH_TRACE] 👁️ AFTER insert: 52 messages, first 5 IDs: [19191, 19190, 1781, 1817, 1818] [09:44:26] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [09:44:26] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:26] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("message_data"): { datesent = "2026-01-26 08:44:24"; "file_name" = ""; message = Msg4; "message_id" = 19191; "message_type" = 0; "prev_session_message_id" = 19190; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19191, AnyHashable("aps"): { "content-available" = 1; }] [09:44:26] [PUSH_EMBED_VC] Message 19191 already in memory - skipping [09:44:26] [PUSH] ⚡ Embedded message handled directly in ViewController [09:44:26] [PUSH] Parsed message_id: 19191 [09:44:26] [PUSH] Parsed operation_type: 0 [09:44:26] [PUSH] Taking direct action: opType=0, messageId=19191 [09:44:26] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19191 [09:44:26] [PUSH] ⚡ Message 19191 already in memory - skipping duplicate notification entirely [09:44:26] [PUSH_EMBED] Got evolution data for message 19191, saving to local DB [09:44:26] [PUSH_EMBED] Saved evolution data for message 19191 [09:44:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19191, 19190, 1781, 1817, 1818] [09:44:26] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:44:26] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:28] [CLIENT_SIG] Event received: type=3 messageId=19190 [09:44:28] [WS_EVENT] Received event: type=3, messageId=19190 [09:44:28] [WS_EVENT] Read receipt for message 19190 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:44:33] [CLIENT_SIG] Event received: type=0 messageId=19191 [09:44:33] [WS_EVENT] Received event: type=0, messageId=19191 [09:44:33] [WS_EVENT] 📨 New message notification (msgId=19191) - triggering incremental refresh, currentMsgCount=52 [09:44:33] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:44:33] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19191, maxMemoryId=19191 [09:44:33] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19191 [09:44:33] [INCREMENTAL_SYNC] ✅ No new messages [09:44:33] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [09:44:35] [SECURITY] Timeout check: elapsed=33.665066719055176s, timeout=300.0s [09:44:35] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:44:35] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:44:35] [LIFECYCLE] App entering foreground - restoring connections [09:44:35] [PUSH_TRACE] 🔄 FOREGROUND: memory has 52 msgs, IDs=[19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:35] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:35] [UPLOAD_RETRY] No pending uploads to retry [09:44:35] [LIFECYCLE] Merged 978 reactions from local DB [09:44:35] [LIFECYCLE] WebRTC audio re-enabled [09:44:35] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:44:35] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:44:35] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:44:35] [VIEWER] Reconnecting after background - querying agents [09:44:35] [UNSENT_RETRY] Checking for unsent messages... [09:44:35] [PENDING_UPLOAD] Total pending upload messages: 0 [09:44:35] [UNSENT_RETRY] No unsent messages found [09:44:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19191, 19190, 1781, 1817, 1818] [09:44:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:44:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:36] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:44:36] [SECURITY] Within timeout - cleared background flag [09:44:36] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:44:36] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:36] [PUSH] handlePollEventsNotification userInfo: [:] [09:44:36] [PUSH] No message_id in userInfo [09:44:36] [PUSH] No operation_type in userInfo [09:44:36] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:44:36] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:36] [PUSH_TRACE] 📬 POLL: memory state: count=52, first 10 IDs=[19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:36] [FAST_REFRESH] Already have 52 messages - skipping local DB load [09:44:36] [PUSH_TRACE] ⚠️ POLL: NOT loading from DB because allMessagesWithReadBy has 52 messages [09:44:36] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:44:36] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:44:36] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:44:36] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19191, maxMemoryId=19191 [09:44:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19191 [09:44:36] [INCREMENTAL_SYNC] ✅ No new messages [09:44:36] [FAST_REFRESH] Incremental sync complete - 52 messages [09:44:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19191, 19190, 1781, 1817, 1818] [09:44:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:44:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:36] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:44:36] [FOREGROUND] Enriched 0 messages with readBy data from server [09:44:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19191, 19190, 1781, 1817, 1818] [09:44:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:44:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:36] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19190 → 19191 [09:44:37] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:44:37] [FAST_REFRESH] Enriched 52 messages with readBy data [09:44:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19191, 19190, 1781, 1817, 1818] [09:44:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:44:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:38] [PUSH] Silent push received [09:44:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:44:38 +0000, appState=0, message_id=nil [09:44:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:44:38 +0000 [09:44:38] [PUSH_EMBED] No embedded message_data in notification [09:44:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:44:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692], handled=false [09:44:38] [PUSH] No embedded data, pre-loading messages from server [09:44:38] [PUSH_PRELOAD] Fetching messages for instant display cache [09:44:39] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:44:39] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:44:39] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:39] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:39] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [1817] [09:44:39] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[1817] [09:44:39] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:44:39] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:44:39] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:44:39] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19191, 19190, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:44:39] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19191, AnyHashable("operation_type"): 3] [09:44:39] [PUSH] Parsed message_id: 19191 [09:44:39] [PUSH] Parsed operation_type: 3 [09:44:39] [PUSH] Taking direct action: opType=3, messageId=19191 [09:44:39] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19191 [09:44:47] [CLIENT_SIG] Event received: type=3 messageId=19191 [09:44:47] [WS_EVENT] Received event: type=3, messageId=19191 [09:44:47] [WS_EVENT] Read receipt for message 19191 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:44:58] [MENU] dismissAnyExistingMenu called [09:44:58] [MENU] dismissAnyExistingMenu completed [09:45:23] [CRASH] No crash detected [09:45:23] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:45:23] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:45:23] [GIPHY] SDK not available - using REST API fallback [09:45:23] [BACKGROUND] Background fetch enabled [09:45:23] [CLEANUP] No old timer messages to delete [09:45:23] [SECURITY] Initial launch - within timeout (81.12095403671265s < 300.0s) [09:45:23] [AUTH] Starting PIN authentication [09:45:23] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:45:23] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:45:23] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:45:23] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:45:23] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:45:23] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [09:45:23] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:45:23] [USER] ✅ User registered successfully [09:45:23] [PUSH] User registration after token update: success [09:45:23] [CLIENT_SIG] WebSocket opened [09:45:23] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:45:23] [CLIENT_SIG] Connected! clientId=THgFf0RJo34_KKrh [09:45:23] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19191)... [09:45:23] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:45:23] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:45:23] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:45:23] [PRELOAD] No messages or parse error [09:45:26] [PIN_AUTH] Correct PIN [09:45:26] [SECURITY] Restored real session: ILUIWU2 [09:45:26] [SECURITY] Restored real session: ILUIWU2 [09:45:26] [SECURITY] Saved real session: ILUIWU2 [09:45:26] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:45:26] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:45:26] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:45:26] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:45:26] [THEME] Applying current theme [09:45:26] [CHAT] Applied day theme (mode: day) [09:45:26] [SECURITY] Saved real session: ILUIWU2 [09:45:26] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:45:26] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:45:26] [NETWORK] Network monitor started [09:45:26] [NETWORK] Status changed: connected [09:45:26] Did transition [09:45:26] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:45:26] [VIEWER] Screen lock enabled - normal idle behavior [09:45:26] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:45:26] [VCC] ========== VideoConnectionClass INIT ========== [09:45:26] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:45:26] [DATA AUDIO] ========== setupWebRTC() START ========== [09:45:26] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:45:26] [DATA AUDIO] Creating encoder/decoder factories... [09:45:26] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:45:26] [CODEC] Viewer selected encoder: AV1 (best quality) [09:45:26] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:45:26] [DATA AUDIO] ✅ Factory created [09:45:26] [DATA AUDIO] RTCAudioSession locked [09:45:26] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:45:26] [DATA AUDIO] RTCAudioSession unlocked [09:45:26] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:45:26] [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"] [09:45:26] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:45:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:45:26] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:45:26] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:45:26] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:45:26] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:45:26] Did transition [09:45:26] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:45:26] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:45:26] [CHUNK] Merged 978 reactions synchronously [09:45:26] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:45:26] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:45:26] [MIGRATION] Found 3 messages needing sender_name backfill [09:45:26] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:45:26] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:45:26] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:45:26] [GALLERY_DB] ✅ Loaded 8 media messages [09:45:26] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:45:26] [GALLERY] First 5 after sort (newest first): [09:45:26] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:45:26] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:45:26] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:45:26] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:45:26] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:45:26] [USER] ✅ User registered successfully [09:45:26] [USER] User registration successful [09:45:26] [SERVER] Starting reconnect polling (5s interval) [09:45:26] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:45:26] [ICONS] Offset applied: -14.6 [09:45:26] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:45:26] [MIGRATION] Failed to parse user names response [09:45:26] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:45:26] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19191, maxMemoryId=19191 [09:45:26] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19191 [09:45:26] [INCREMENTAL_SYNC] ✅ No new messages [09:45:26] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:45:26] [UNSENT_RETRY] Checking for unsent messages... [09:45:26] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:45:26] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:45:26] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:45:26] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:45:26] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:45:26] [UPLOAD_RECOVERY] No recent media messages to check on server [09:45:26] [PENDING_UPLOAD] Total pending upload messages: 0 [09:45:26] [UNSENT_RETRY] No unsent messages found [09:45:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:45:27] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:45:27] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:45:27] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:45:27] [ICONS] Chat center: (31.2, 87.0) [09:45:27] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:45:27] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:45:27] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:45:27] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:45:27] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:45:27] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:45:27] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:45:27] [ICONS] Screen width: 440.0 [09:45:27] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:45:27] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:45:27] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:45:27] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:45:27] new_session POST ok: token len=159 [09:45:27] HELLO → sent (fetched token, role=query) [09:45:27] [SIG] hello_ok received for query connection - ready to query agents [09:45:27] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:45:27] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:45:27] [SERVER] Stopped reconnect polling [09:45:27] [SIG] agents_list received: [] [09:45:27] [SIG] agents_list received: [] [09:45:27] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:45:27] [READBY_ENRICH] Enriched 50 messages with readBy data [09:45:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:45:27] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:45:27] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:45:31] [LIFECYCLE] App resigning active - cleared crash flag [09:45:32] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:45:32] [SECURITY] Saved background timestamp [09:45:32] [LIFECYCLE] App entering background - cleared crash flag [09:45:32] [CLIENT_SIG] Disconnecting [09:45:32] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:45:32] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:45:32] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=0 [09:45:32] [WS] Canceling WebSocket for query connection to iosILUIWU2 [09:45:32] In cleanupPeer [09:45:32] In cleanupPeer [09:45:32] [LIFECYCLE] WebRTC audio disabled [09:45:32] [LIFECYCLE] AVAudioSession deactivated [09:45:32] [LIFECYCLE] All connections stopped [09:45:32] [SERVER] Stopped reconnect polling [09:45:32] Will request stop of video 0 [09:45:32] Will request stop of video 0 [09:45:32] [CLIENT_SIG] WebSocket closed with code 1001 [09:45:32] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:45:32] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU2, closeCode=1001 [09:45:32] [WS] Query connection to iosILUIWU2 closed - cleaning up all agent connections and views [09:45:32] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:45:32] [WS] Query connection failed - cleaning up all agent connections and views [09:45:32] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:45:32] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:45:32] [PIP] Removing 0 tracks from PiP for connection 0 [09:45:32] [PIP] ✅ All tracks removed for connection 0 [09:45:32] [PIP] Removing 0 tracks from PiP for connection 0 [09:45:32] [PIP] ✅ All tracks removed for connection 0 [09:45:32] [CLEANUP] ======================================== [09:45:32] [CLEANUP] Cleaning up all agent connections and views [09:45:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:45:32] [CLEANUP] Stopped and removed 0 video connections [09:45:32] [CLEANUP] Removed 0 video views [09:45:32] [CLEANUP] Removed 0 feed scroll views [09:45:32] [CLEANUP] Removed 0 status labels [09:45:32] [CLEANUP] Reset agent query state [09:45:32] [CLEANUP] Updated page indicator [09:45:32] [CLEANUP] Rebuilt video layout [09:45:32] [CLEANUP] ✅ All agent connections and views cleaned up [09:45:32] [CLEANUP] ======================================== [09:45:32] [SERVER] Skipping reconnect polling - app is in background [09:45:32] [WS] URLSession invalidated successfully [09:45:32] [CLEANUP] ======================================== [09:45:32] [CLEANUP] Cleaning up all agent connections and views [09:45:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:45:32] [CLEANUP] Stopped and removed 0 video connections [09:45:32] [CLEANUP] Removed 0 video views [09:45:32] [CLEANUP] Removed 0 feed scroll views [09:45:32] [CLEANUP] Removed 0 status labels [09:45:32] [CLEANUP] Reset agent query state [09:45:32] [CLEANUP] Updated page indicator [09:45:32] [CLEANUP] Rebuilt video layout [09:45:32] [CLEANUP] ✅ All agent connections and views cleaned up [09:45:32] [CLEANUP] ======================================== [09:45:32] [SERVER] Skipping reconnect polling - app is in background [09:45:33] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU2 [09:45:33] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:45:34] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:45:34] HELLO → sent (cached token, role=query) [09:45:34] [SIG] hello_ok received for query connection - ready to query agents [09:45:34] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:45:34] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:45:34] [SERVER] Stopped reconnect polling [09:45:34] [SIG] agents_list received: [] [09:45:34] [SIG] agents_list received: [] [09:45:36] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:45:36] [CLIENT_SIG] WebSocket opened [09:45:36] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:45:36] [CLIENT_SIG] Connected! clientId=cfnppcn8B6cFmmyX [09:45:36] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:45:36] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:45:36] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:45:44] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [09:45:44] [WS] Query connection error - cleaning up all agent connections and views [09:45:44] [CLEANUP] ======================================== [09:45:44] [CLEANUP] Cleaning up all agent connections and views [09:45:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:45:44] [CLEANUP] Stopped and removed 0 video connections [09:45:44] [CLEANUP] Removed 0 video views [09:45:44] [CLEANUP] Removed 0 feed scroll views [09:45:44] [CLEANUP] Removed 0 status labels [09:45:44] [CLEANUP] Reset agent query state [09:45:44] [CLEANUP] Updated page indicator [09:45:44] [CLEANUP] Rebuilt video layout [09:45:44] [CLEANUP] ✅ All agent connections and views cleaned up [09:45:44] [CLEANUP] ======================================== [09:45:44] [SERVER] Skipping reconnect polling - app is in background [09:45:45] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:45:48] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:45:50] [PUSH] Silent push received [09:45:50] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:45:50 +0000, appState=2, message_id=19192 [09:45:50] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:45:50] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:45:50 +0000 [09:45:50] [PUSH_TRACE] ⬇️ Processing embedded message_id=19192 [09:45:50] [PUSH_EMBED] 📩 Received embedded message: id=19192, type=0, sender=Lolo [09:45:50] [PUSH_TRACE] ⬇️ Message details: text="Msg5...", datesent=2026-01-26 08:45:48 [09:45:50] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [09:45:50] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19192 [09:45:50] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19192 [09:45:50] [PUSH_EMBED] ✅ Saved message 19192 to local DB (sync) [09:45:50] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19192 [09:45:50] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19192 [09:45:50] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19192 [09:45:50] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [09:45:50] [PUSH_EMBED] Created new cache with embedded message 19192 [09:45:50] [PUSH_TRACE] 📦 ✅ Created new cache with message 19192 [09:45:50] [PUSH_TRACE] 📦 EXITING cache update queue for message 19192 [09:45:50] [PUSH_EMBED] Fetching evolution data for message 19192 in background [09:45:50] [PUSH_EMBED] ✅ Fully processed message 19192 [09:45:50] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19192 [09:45:50] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19192], handled=true [09:45:50] [PUSH] Embedded message handled instantly from silent push [09:45:50] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:45:50] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19192 [09:45:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:45:50] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:45:50] [PUSH_TRACE] 👁️ Received message id=19192, text="Msg5..." [09:45:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:45:50] [PUSH_TRACE] 👁️ BEFORE insert: 50 messages, first 5 IDs: [1818, 1819, 1820, 1821, 1822] [09:45:50] [PUSH_TRACE] 👁️ Inserted message 19192 at index 0 [09:45:50] [PUSH_UI] Inserted message 19192 into UI (now 51 messages) [09:45:50] [PUSH_TRACE] 👁️ AFTER insert: 51 messages, first 5 IDs: [19192, 1818, 1819, 1820, 1821] [09:45:50] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [09:45:50] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909] [09:45:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19192, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-26 08:45:48"; "file_name" = ""; message = Msg5; "message_id" = 19192; "message_type" = 0; "prev_session_message_id" = 19191; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("session_id"): ILUIWU2] [09:45:50] [PUSH_EMBED_VC] Message 19192 already in memory - skipping [09:45:50] [PUSH] ⚡ Embedded message handled directly in ViewController [09:45:50] [PUSH] Parsed message_id: 19192 [09:45:50] [PUSH] Parsed operation_type: 0 [09:45:50] [PUSH] Taking direct action: opType=0, messageId=19192 [09:45:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19192 [09:45:50] [PUSH] ⚡ Message 19192 already in memory - skipping duplicate notification entirely [09:45:50] [PUSH_EMBED] Got evolution data for message 19192, saving to local DB [09:45:50] [PUSH_EMBED] Saved evolution data for message 19192 [09:45:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19192, 1818, 1819, 1820, 1821] [09:45:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:45:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909] [09:45:51] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19191 → 19192 [09:45:52] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:45:58] [CLIENT_SIG] Event received: type=0 messageId=19192 [09:45:58] [WS_EVENT] Received event: type=0, messageId=19192 [09:45:58] [WS_EVENT] 📨 New message notification (msgId=19192) - triggering incremental refresh, currentMsgCount=51 [09:45:58] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:45:58] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19192, maxMemoryId=19192 [09:45:58] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19192 [09:45:58] [INCREMENTAL_SYNC] ✅ No new messages [09:45:58] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [09:45:58] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:46:00] [PUSH] Silent push received [09:46:00] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:46:00 +0000, appState=2, message_id=nil [09:46:00] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19192] [09:46:00] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:46:00 +0000 [09:46:00] [PUSH_EMBED] No embedded message_data in notification [09:46:00] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:46:00] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19192], handled=false [09:46:00] [PUSH] No embedded data, pre-loading messages from server [09:46:00] [PUSH_PRELOAD] Fetching messages for instant display cache [09:46:00] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:46:00] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:46:00] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:00] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19192] [09:46:00] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:46:00] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:00] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:46:00] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:46:00] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909] [09:46:00] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19192, AnyHashable("aps"): { "content-available" = 1; }] [09:46:00] [PUSH] Parsed message_id: 19192 [09:46:00] [PUSH] Parsed operation_type: 3 [09:46:00] [PUSH] Taking direct action: opType=3, messageId=19192 [09:46:00] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19192 [09:46:00] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:46:01] [PUSH] Silent push received [09:46:01] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:46:01 +0000, appState=2, message_id=19193 [09:46:01] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:46:01 +0000 [09:46:01] [PUSH_TRACE] ⬇️ Processing embedded message_id=19193 [09:46:01] [PUSH_EMBED] 📩 Received embedded message: id=19193, type=0, sender=Lolo [09:46:01] [PUSH_TRACE] ⬇️ Message details: text="Msg6...", datesent=2026-01-26 08:45:59 [09:46:01] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [09:46:01] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19193 [09:46:01] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19193 [09:46:01] [PUSH_EMBED] ✅ Saved message 19193 to local DB (sync) [09:46:01] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19193 [09:46:01] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19193 [09:46:01] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19193 [09:46:01] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:01] [PUSH_TRACE] 📦 ⚠️ Message 19193 already in cache, skipping insert [09:46:01] [PUSH_TRACE] 📦 EXITING cache update queue for message 19193 [09:46:01] [PUSH_EMBED] Fetching evolution data for message 19193 in background [09:46:01] [PUSH_EMBED] ✅ Fully processed message 19193 [09:46:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19193 [09:46:01] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157], handled=true [09:46:01] [PUSH] Embedded message handled instantly from silent push [09:46:01] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:46:01] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19193 [09:46:01] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:46:01] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:46:01] [PUSH_TRACE] 👁️ Received message id=19193, text="Msg6..." [09:46:01] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:46:01] [PUSH_TRACE] 👁️ BEFORE insert: 51 messages, first 5 IDs: [19192, 1818, 1819, 1820, 1821] [09:46:01] [PUSH_TRACE] 👁️ Inserted message 19193 at index 0 [09:46:01] [PUSH_UI] Inserted message 19193 into UI (now 52 messages) [09:46:01] [PUSH_TRACE] 👁️ AFTER insert: 52 messages, first 5 IDs: [19193, 19192, 1818, 1819, 1820] [09:46:01] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [09:46:01] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19193, 19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:46:01] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 08:45:59"; "file_name" = ""; message = Msg6; "message_id" = 19193; "message_type" = 0; "prev_session_message_id" = 19192; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19193, AnyHashable("session_id"): ILUIWU2] [09:46:01] [PUSH_EMBED_VC] Message 19193 already in memory - skipping [09:46:01] [PUSH] ⚡ Embedded message handled directly in ViewController [09:46:01] [PUSH] Parsed message_id: 19193 [09:46:01] [PUSH] Parsed operation_type: 0 [09:46:01] [PUSH] Taking direct action: opType=0, messageId=19193 [09:46:01] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19193 [09:46:01] [PUSH] ⚡ Message 19193 already in memory - skipping duplicate notification entirely [09:46:01] [PUSH_EMBED] Got evolution data for message 19193, saving to local DB [09:46:01] [PUSH_EMBED] Saved evolution data for message 19193 [09:46:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19193, 19192, 1818, 1819, 1820] [09:46:01] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:46:01] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19193, 19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:46:02] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:46:09] [CLIENT_SIG] Event received: type=0 messageId=19193 [09:46:09] [WS_EVENT] Received event: type=0, messageId=19193 [09:46:09] [WS_EVENT] 📨 New message notification (msgId=19193) - triggering incremental refresh, currentMsgCount=52 [09:46:09] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:46:09] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19193, maxMemoryId=19193 [09:46:09] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19193 [09:46:09] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:46:09] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19194] [09:46:09] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[19193, 19192, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:46:09] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=19194 [09:46:09] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 53, first 10 IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:09] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:46:09] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [09:46:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:46:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:46:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:09] [CLIENT_SIG] Event received: type=3 messageId=19192 [09:46:09] [WS_EVENT] Received event: type=3, messageId=19192 [09:46:09] [WS_EVENT] Read receipt for message 19192 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:46:11] [PUSH] Silent push received [09:46:11] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:46:11 +0000, appState=2, message_id=19194 [09:46:11] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:46:11 +0000 [09:46:11] [PUSH_TRACE] ⬇️ Processing embedded message_id=19194 [09:46:11] [PUSH_EMBED] 📩 Received embedded message: id=19194, type=0, sender=Lolo [09:46:11] [PUSH_TRACE] ⬇️ Message details: text="Msg7...", datesent=2026-01-26 08:46:02 [09:46:11] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [09:46:11] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19194 [09:46:11] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19194 [09:46:11] [PUSH_EMBED] ✅ Saved message 19194 to local DB (sync) [09:46:11] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19194 [09:46:11] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19194 [09:46:11] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19194 [09:46:11] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:46:11] [PUSH_EMBED] Inserted message 19194 into existing cache (now 51 messages) [09:46:11] [PUSH_TRACE] 📦 ✅ Inserted message 19194, cache now has IDs: [19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:11] [PUSH_TRACE] 📦 EXITING cache update queue for message 19194 [09:46:11] [PUSH_EMBED] Fetching evolution data for message 19194 in background [09:46:11] [PUSH_EMBED] ✅ Fully processed message 19194 [09:46:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19194 [09:46:11] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158], handled=true [09:46:11] [PUSH] Embedded message handled instantly from silent push [09:46:11] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:46:11] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19194 [09:46:11] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:46:11] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:46:11] [PUSH_TRACE] 👁️ Received message id=19194, text="Msg7..." [09:46:11] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:46:11] [PUSH_UI] Message 19194 already in memory - skipping insert [09:46:11] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:46:11] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:11] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 19194, AnyHashable("message_data"): { datesent = "2026-01-26 08:46:02"; "file_name" = ""; message = Msg7; "message_id" = 19194; "message_type" = 0; "prev_session_message_id" = 19193; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("session_id"): ILUIWU2] [09:46:11] [PUSH_EMBED_VC] Message 19194 already in memory - skipping [09:46:11] [PUSH] ⚡ Embedded message handled directly in ViewController [09:46:11] [PUSH] Parsed message_id: 19194 [09:46:11] [PUSH] Parsed operation_type: 0 [09:46:11] [PUSH] Taking direct action: opType=0, messageId=19194 [09:46:11] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19194 [09:46:11] [PUSH] ⚡ Message 19194 already in memory - skipping duplicate notification entirely [09:46:11] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19192 → 19193 [09:46:11] [PUSH_EMBED] Got evolution data for message 19194, saving to local DB [09:46:11] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19193 → 19194 [09:46:11] [PUSH_EMBED] Saved evolution data for message 19194 [09:46:18] [CLIENT_SIG] Event received: type=0 messageId=19194 [09:46:18] [WS_EVENT] Received event: type=0, messageId=19194 [09:46:18] [WS_EVENT] 📨 New message notification (msgId=19194) - triggering incremental refresh, currentMsgCount=53 [09:46:18] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:46:18] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19194, maxMemoryId=19194 [09:46:18] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19194 [09:46:18] [INCREMENTAL_SYNC] ✅ No new messages [09:46:18] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [09:46:20] [PUSH] Silent push received [09:46:20] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:46:20 +0000, appState=2, message_id=nil [09:46:20] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:46:20 +0000 [09:46:20] [PUSH_EMBED] No embedded message_data in notification [09:46:20] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:46:20] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158], handled=false [09:46:20] [PUSH] No embedded data, pre-loading messages from server [09:46:20] [PUSH_PRELOAD] Fetching messages for instant display cache [09:46:20] [PUSH] Silent push received [09:46:20] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:46:20 +0000, appState=2, message_id=nil [09:46:20] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:46:20 +0000 [09:46:20] [PUSH_EMBED] No embedded message_data in notification [09:46:20] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:46:20] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158], handled=false [09:46:20] [PUSH] No embedded data, pre-loading messages from server [09:46:20] [PUSH_PRELOAD] Fetching messages for instant display cache [09:46:20] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:46:20] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [1820] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[1820] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:46:20] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:46:20] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [1820] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[1820] [09:46:20] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:20] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:46:20] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:46:20] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:20] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19194, AnyHashable("session_id"): ILUIWU2] [09:46:20] [PUSH] Parsed message_id: 19194 [09:46:20] [PUSH] Parsed operation_type: 3 [09:46:20] [PUSH] Taking direct action: opType=3, messageId=19194 [09:46:20] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19194 [09:46:20] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:46:21] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:21] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19193] [09:46:21] [PUSH] Parsed message_id: 19193 [09:46:21] [PUSH] Parsed operation_type: 3 [09:46:21] [PUSH] Taking direct action: opType=3, messageId=19193 [09:46:21] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19193 [09:46:29] [CLIENT_SIG] Event received: type=3 messageId=19193 [09:46:29] [WS_EVENT] Received event: type=3, messageId=19193 [09:46:29] [WS_EVENT] Read receipt for message 19193 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:46:29] [CLIENT_SIG] Event received: type=3 messageId=19194 [09:46:29] [WS_EVENT] Received event: type=3, messageId=19194 [09:46:29] [WS_EVENT] Read receipt for message 19194 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:46:31] [SECURITY] Timeout check: elapsed=59.94228196144104s, timeout=300.0s [09:46:31] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:46:31] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:46:31] [LIFECYCLE] App entering foreground - restoring connections [09:46:31] [PUSH_TRACE] 🔄 FOREGROUND: memory has 53 msgs, IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:31] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:31] [UPLOAD_RETRY] No pending uploads to retry [09:46:31] [LIFECYCLE] Merged 978 reactions from local DB [09:46:31] [LIFECYCLE] WebRTC audio re-enabled [09:46:31] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:46:31] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:46:31] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:46:31] [VIEWER] Reconnecting after background - querying agents [09:46:31] [UNSENT_RETRY] Checking for unsent messages... [09:46:31] [PENDING_UPLOAD] Total pending upload messages: 0 [09:46:31] [UNSENT_RETRY] No unsent messages found [09:46:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:46:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:46:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:32] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:46:32] [SECURITY] Within timeout - cleared background flag [09:46:32] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:46:32] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:32] [PUSH] handlePollEventsNotification userInfo: [:] [09:46:32] [PUSH] No message_id in userInfo [09:46:32] [PUSH] No operation_type in userInfo [09:46:32] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:46:32] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[19194, 19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158] [09:46:32] [PUSH_TRACE] 📬 POLL: memory state: count=53, first 10 IDs=[1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:32] [FAST_REFRESH] Already have 53 messages - skipping local DB load [09:46:32] [PUSH_TRACE] ⚠️ POLL: NOT loading from DB because allMessagesWithReadBy has 53 messages [09:46:32] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:46:32] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:46:32] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:46:32] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19194, maxMemoryId=19194 [09:46:32] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19194 [09:46:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:46:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:46:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:32] [INCREMENTAL_SYNC] ✅ No new messages [09:46:32] [FAST_REFRESH] Incremental sync complete - 53 messages [09:46:32] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:46:32] [FOREGROUND] Enriched 0 messages with readBy data from server [09:46:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:46:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:46:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:33] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:46:33] [FAST_REFRESH] Enriched 53 messages with readBy data [09:46:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[1818, 1819, 1820, 1821, 1822] [09:46:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:46:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911] [09:46:53] [CRASH] No crash detected [09:46:53] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:46:53] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:46:53] [GIPHY] SDK not available - using REST API fallback [09:46:53] [BACKGROUND] Background fetch enabled [09:46:53] [SECURITY] Initial launch - within timeout (81.50501608848572s < 300.0s) [09:46:53] [AUTH] Starting PIN authentication [09:46:53] [CLEANUP] No old timer messages to delete [09:46:53] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:46:53] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:46:53] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:46:53] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [09:46:53] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:46:53] [USER] ✅ User registered successfully [09:46:53] [PUSH] User registration after token update: success [09:46:53] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:46:53] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:46:53] [CLIENT_SIG] WebSocket opened [09:46:53] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:46:53] [CLIENT_SIG] Connected! clientId=JJ6aIwtEM9ctTwzw [09:46:53] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:46:53] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:46:53] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:46:53] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19194)... [09:46:53] [PRELOAD] No messages or parse error [09:46:55] [PIN_AUTH] Correct PIN [09:46:55] [SECURITY] Restored real session: ILUIWU2 [09:46:55] [SECURITY] Restored real session: ILUIWU2 [09:46:55] [SECURITY] Saved real session: ILUIWU2 [09:46:55] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:46:55] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:46:55] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:46:55] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:46:55] [THEME] Applying current theme [09:46:55] [CHAT] Applied day theme (mode: day) [09:46:55] [SECURITY] Saved real session: ILUIWU2 [09:46:55] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:46:55] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:46:55] [NETWORK] Network monitor started [09:46:55] [NETWORK] Status changed: connected [09:46:55] Did transition [09:46:55] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:46:55] [VIEWER] Screen lock enabled - normal idle behavior [09:46:55] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:46:55] [VCC] ========== VideoConnectionClass INIT ========== [09:46:55] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:46:55] [DATA AUDIO] ========== setupWebRTC() START ========== [09:46:55] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:46:55] [DATA AUDIO] Creating encoder/decoder factories... [09:46:55] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:46:55] [CODEC] Viewer selected encoder: AV1 (best quality) [09:46:55] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:46:55] [DATA AUDIO] ✅ Factory created [09:46:55] [DATA AUDIO] RTCAudioSession locked [09:46:55] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:46:55] [DATA AUDIO] RTCAudioSession unlocked [09:46:55] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:46:55] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [09:46:55] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:46:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:46:55] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:46:55] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:46:55] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:46:55] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:46:55] Did transition [09:46:55] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:46:55] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:46:55] [CHUNK] Merged 978 reactions synchronously [09:46:55] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:46:55] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:46:55] [MIGRATION] Found 3 messages needing sender_name backfill [09:46:55] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:46:55] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:46:55] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:46:55] [GALLERY_DB] ✅ Loaded 8 media messages [09:46:55] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:46:55] [GALLERY] First 5 after sort (newest first): [09:46:55] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:46:55] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:46:55] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:46:55] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:46:55] [USER] ✅ User registered successfully [09:46:55] [USER] User registration successful [09:46:55] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:46:55] [SERVER] Starting reconnect polling (5s interval) [09:46:55] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:46:55] [ICONS] Offset applied: -14.6 [09:46:55] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:46:55] [MIGRATION] Failed to parse user names response [09:46:55] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:46:55] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19194, maxMemoryId=19194 [09:46:55] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19194 [09:46:55] [INCREMENTAL_SYNC] ✅ No new messages [09:46:55] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:46:55] [UNSENT_RETRY] Checking for unsent messages... [09:46:55] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:46:55] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:46:55] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:46:55] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:46:55] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:46:55] [UPLOAD_RECOVERY] No recent media messages to check on server [09:46:55] [PENDING_UPLOAD] Total pending upload messages: 0 [09:46:55] [UNSENT_RETRY] No unsent messages found [09:46:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1821, 1822, 1823, 1891, 1908] [09:46:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:46:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:46:55] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:46:55] [ICONS] Chat center: (31.2, 87.0) [09:46:55] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:46:55] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:46:55] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:46:55] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:46:55] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:46:55] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:46:55] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:46:55] [ICONS] Screen width: 440.0 [09:46:55] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:46:55] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:46:55] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:46:55] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:46:56] new_session POST ok: token len=159 [09:46:56] HELLO → sent (fetched token, role=query) [09:46:56] [SIG] hello_ok received for query connection - ready to query agents [09:46:56] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:46:56] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:46:56] [SERVER] Stopped reconnect polling [09:46:56] [SIG] agents_list received: [] [09:46:56] [SIG] agents_list received: [] [09:46:56] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:46:56] [READBY_ENRICH] Enriched 50 messages with readBy data [09:46:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1821, 1822, 1823, 1891, 1908] [09:46:56] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:46:56] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:46:58] [LOG] Long press on chat icon detected! Triggering log upload... [09:46:58] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [09:47:01] [LOG] Uploading log as '2026-01-26-09-47-msg-Laurent.log' (645 KB) to server... [09:47:02] [LOG] Upload HTTP status: 200 [09:47:02] [LOG] Upload successful: 2026-01-26-09-47-msg-Laurent.log [09:47:02] [LOG] Skipping cross-device log request (description doesn't end with '2') [09:48:44] [MENU] dismissAnyExistingMenu called [09:48:44] [MENU] dismissAnyExistingMenu completed [09:48:44] [EMOJI_PICKER] Starting emoji picker for message 19194 [09:48:44] [MENU] Created button 'Reply' at index 0 [09:48:44] [MENU] Created button 'Copy' at index 1 [09:48:44] [MENU] Created button 'Delete' at index 2 [09:48:44] [MENU] Menu added at y=494.0 [09:48:44] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:48:44] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:48:44] [EMOJI_PICKER] ✅ Picker shown at y=382.0 [09:48:45] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:48:45] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:48:45] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:48:45] [MENU] Found action closure, dismissing menu first [09:48:45] [MENU] dismissAnyExistingMenu called [09:48:45] [MENU] Found menu with tag 9999, removing [09:48:45] [MENU] Removing blur effect [09:48:45] [MENU] Removing floating message snapshot [09:48:45] [MENU] Dismissing emoji picker [09:48:45] [MENU] Recorded dismissal time for debounce [09:48:45] [MENU] dismissAnyExistingMenu completed [09:48:45] [MENU] Menu dismissed, executing action [09:48:45] [DELETE] requestDeleteMessage called for message id=19194 [09:48:45] [MENU] dismissAnyExistingMenu called [09:48:45] [MENU] dismissAnyExistingMenu completed [09:48:46] [GUARD] ⚠️ buildChatRows received 10578 messages - truncating to 500 [09:48:46] [MENU] Action executed [09:48:47] [PUSH] Silent push received [09:48:47] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:48:47 +0000, appState=0, message_id=nil [09:48:47] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:48:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:48:47 +0000 [09:48:47] [PUSH_EMBED] No embedded message_data in notification [09:48:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:48:47] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [09:48:47] [PUSH] No embedded data, pre-loading messages from server [09:48:47] [PUSH_PRELOAD] Fetching messages for instant display cache [09:48:47] [MENU] dismissAnyExistingMenu called [09:48:47] [MENU] dismissAnyExistingMenu completed [09:48:47] [SCROLL_BTN] Showing button - 31908pt from bottom > half 379pt [09:48:47] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:48:47] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:48:47] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:47] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU2), replacing cache [09:48:47] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:48:48] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:48:48] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:48:48] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19194, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 1, AnyHashable("aps"): { "content-available" = 1; }] [09:48:48] [PUSH] Parsed message_id: 19194 [09:48:48] [PUSH] Parsed operation_type: 1 [09:48:48] [PUSH] Taking direct action: opType=1, messageId=19194 [09:48:48] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19194 [09:48:48] [PUSH] Removed message 19194 from allMessagesWithReadBy [09:48:48] [GUARD] ⚠️ buildChatRows received 10578 messages - truncating to 500 [09:48:48] [CELL_UPLOAD] configure: msgId=2616, file=92668b65c604182e.jpeg, senderId=test-script, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:48:48] [CELL_UPLOAD] → not my message, setting complete [09:48:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=92668b65c604182e.jpeg, overlayExists=true [09:48:48] [CELL_UPLOAD] configure: msgId=3258, file=46824a6556317ee6.mov, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:48:48] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:48:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=46824a6556317ee6.mov, overlayExists=true [09:48:48] [SCROLL_BTN] Showing button - 721pt from bottom > half 379pt [09:48:48] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:48:48] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:48:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:48:50] [MENU] dismissAnyExistingMenu called [09:48:50] [MENU] dismissAnyExistingMenu completed [09:48:50] [EMOJI_PICKER] Starting emoji picker for message 19193 [09:48:50] [MENU] Created button 'Reply' at index 0 [09:48:50] [MENU] Created button 'Copy' at index 1 [09:48:50] [MENU] Created button 'Delete' at index 2 [09:48:50] [MENU] Menu added at y=494.0 [09:48:51] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:48:51] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:48:51] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:48:51] [MENU] Found action closure, dismissing menu first [09:48:51] [MENU] dismissAnyExistingMenu called [09:48:51] [MENU] Found menu with tag 9999, removing [09:48:51] [MENU] Removing blur effect [09:48:51] [MENU] Removing floating message snapshot [09:48:51] [MENU] Recorded dismissal time for debounce [09:48:51] [MENU] dismissAnyExistingMenu completed [09:48:51] [MENU] Menu dismissed, executing action [09:48:51] [DELETE] requestDeleteMessage called for message id=19193 [09:48:51] [MENU] dismissAnyExistingMenu called [09:48:51] [MENU] dismissAnyExistingMenu completed [09:48:51] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:48:52] [GUARD] ⚠️ buildChatRows received 10577 messages - truncating to 500 [09:48:52] [MENU] Action executed [09:48:52] [EMOJI_PICKER] ❌ Menu was dismissed before emojis loaded - skipping picker [09:48:52] [PUSH] Silent push received [09:48:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:48:52 +0000, appState=0, message_id=nil [09:48:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:48:52 +0000 [09:48:52] [PUSH_EMBED] No embedded message_data in notification [09:48:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:48:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157], handled=false [09:48:52] [PUSH] No embedded data, pre-loading messages from server [09:48:52] [PUSH_PRELOAD] Fetching messages for instant display cache [09:48:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:48:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:48:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:48:52] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:52] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19193] [09:48:52] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19193] [09:48:52] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:52] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:48:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:48:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 49 msgs, IDs=[1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:48:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 4193, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] [09:48:52] [PUSH] Parsed message_id: 4193 [09:48:52] [PUSH] Parsed operation_type: 3 [09:48:52] [PUSH] Taking direct action: opType=3, messageId=4193 [09:48:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4193 [09:48:52] [GUARD] ⚠️ buildChatRows received 10577 messages - truncating to 500 [09:48:53] [MENU] dismissAnyExistingMenu called [09:48:53] [MENU] dismissAnyExistingMenu completed [09:48:53] [EMOJI_PICKER] Starting emoji picker for message 19192 [09:48:53] [MENU] Created button 'Reply' at index 0 [09:48:53] [MENU] Created button 'Copy' at index 1 [09:48:53] [MENU] Created button 'Delete' at index 2 [09:48:53] [MENU] Menu added at y=494.0 [09:48:53] [PUSH] Silent push received [09:48:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:48:53 +0000, appState=0, message_id=nil [09:48:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:48:53 +0000 [09:48:53] [PUSH_EMBED] No embedded message_data in notification [09:48:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:48:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157], handled=false [09:48:53] [PUSH] No embedded data, pre-loading messages from server [09:48:53] [PUSH_PRELOAD] Fetching messages for instant display cache [09:48:53] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:48:53] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:48:53] [EMOJI_PICKER] ✅ Picker shown at y=382.0 [09:48:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:48:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:48:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:48:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:53] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19193] [09:48:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19193] [09:48:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19193, 19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157] [09:48:53] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:48:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:48:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 49 msgs, IDs=[1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:48:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 1, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19193] [09:48:53] [PUSH] Parsed message_id: 19193 [09:48:53] [PUSH] Parsed operation_type: 1 [09:48:53] [PUSH] Taking direct action: opType=1, messageId=19193 [09:48:53] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19193 [09:48:53] [PUSH] Removed message 19193 from allMessagesWithReadBy [09:48:53] [GUARD] ⚠️ buildChatRows received 10577 messages - truncating to 500 [09:48:54] [CHAT] delete error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x11c43cf00 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<36>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask .<36>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, _kCFStreamErrorDomainKey=4} [09:48:54] [CLIENT_SIG] Event received: type=1 messageId=19194 [09:48:54] [WS_EVENT] Received event: type=1, messageId=19194 [09:48:54] [WS_EVENT] Message deleted: 19194 [09:48:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1821, 1822, 1823, 1891, 1908] [09:48:54] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:48:54] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913, 2351, 2352] [09:48:55] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:48:55] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:48:55] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:48:55] [MENU] Found action closure, dismissing menu first [09:48:55] [MENU] dismissAnyExistingMenu called [09:48:55] [MENU] Found menu with tag 9999, removing [09:48:55] [MENU] Removing blur effect [09:48:55] [MENU] Removing floating message snapshot [09:48:55] [MENU] Dismissing emoji picker [09:48:55] [MENU] Recorded dismissal time for debounce [09:48:55] [MENU] dismissAnyExistingMenu completed [09:49:01] [CRASH] Previous session did not exit cleanly - crash detected [09:49:01] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:49:01] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:49:01] [GIPHY] SDK not available - using REST API fallback [09:49:01] [BACKGROUND] Background fetch enabled [09:49:01] [CLEANUP] No old timer messages to delete [09:49:01] [AUTH] Starting PIN authentication [09:49:01] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:49:01] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:49:01] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:49:01] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [09:49:01] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:49:01] [USER] ✅ User registered successfully [09:49:01] [PUSH] User registration after token update: success [09:49:01] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:49:01] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:49:01] [CLIENT_SIG] WebSocket opened [09:49:01] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:49:01] [CLIENT_SIG] Connected! clientId=NKFqIQvPlFbOlvAl [09:49:01] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19191)... [09:49:01] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:49:01] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:49:01] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:49:01] [PRELOAD] Fetched 1 messages [09:49:01] [PRELOAD] ✅ Saved 1 messages to local DB [09:49:01] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=1, sessionId=ILUIWU2 [09:49:01] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19192] [09:49:01] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU2), replacing cache [09:49:01] [PRELOAD] ⚡ Cached 1 messages for instant display (preserved 0 from push) [09:49:03] [PIN_AUTH] Correct PIN [09:49:03] [SECURITY] Restored real session: ILUIWU2 [09:49:03] [SECURITY] Restored real session: ILUIWU2 [09:49:03] [SECURITY] Saved real session: ILUIWU2 [09:49:03] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:49:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:49:03] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:49:03] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:49:03] [THEME] Applying current theme [09:49:03] [CHAT] Applied day theme (mode: day) [09:49:03] [SECURITY] Saved real session: ILUIWU2 [09:49:03] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:49:03] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:49:03] [NETWORK] Network monitor started [09:49:03] [NETWORK] Status changed: connected [09:49:03] Did transition [09:49:03] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:49:03] [VIEWER] Screen lock enabled - normal idle behavior [09:49:03] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:49:03] [VCC] ========== VideoConnectionClass INIT ========== [09:49:03] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:49:03] [DATA AUDIO] ========== setupWebRTC() START ========== [09:49:03] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:49:03] [DATA AUDIO] Creating encoder/decoder factories... [09:49:03] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:49:03] [CODEC] Viewer selected encoder: AV1 (best quality) [09:49:03] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:49:03] [DATA AUDIO] ✅ Factory created [09:49:03] [DATA AUDIO] RTCAudioSession locked [09:49:03] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:49:03] [DATA AUDIO] RTCAudioSession unlocked [09:49:03] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:49:03] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [09:49:03] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:49:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:49:03] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:49:03] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:49:03] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:49:03] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:49:03] Did transition [09:49:03] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:49:03] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:49:03] [CHUNK] Merged 978 reactions synchronously [09:49:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:49:03] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:49:03] [MIGRATION] Found 3 messages needing sender_name backfill [09:49:03] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:49:03] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:49:03] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:49:03] [GALLERY_DB] ✅ Loaded 8 media messages [09:49:03] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:49:03] [GALLERY] First 5 after sort (newest first): [09:49:03] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:49:03] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:49:03] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:49:03] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:49:03] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:49:03] [SERVER] Starting reconnect polling (5s interval) [09:49:03] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:49:03] [ICONS] Offset applied: -14.6 [09:49:03] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:49:03] [MIGRATION] Failed to parse user names response [09:49:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:49:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19192, maxMemoryId=19192 [09:49:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19192 [09:49:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1819, 1820, 1821, 1822, 1823] [09:49:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:49:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:03] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:49:03] [ICONS] Chat center: (31.2, 87.0) [09:49:03] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:49:03] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:49:03] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:49:03] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:49:03] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:49:03] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:49:03] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:49:03] [ICONS] Screen width: 440.0 [09:49:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:49:03] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:49:03] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:49:03] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:49:03] [USER] ✅ User registered successfully [09:49:03] [USER] User registration successful [09:49:04] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:49:04] [READBY_ENRICH] Enriched 50 messages with readBy data [09:49:04] [INCREMENTAL_SYNC] ✅ No new messages [09:49:04] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:49:04] [UNSENT_RETRY] Checking for unsent messages... [09:49:04] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:49:04] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:49:04] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:49:04] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:49:04] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:49:04] [UPLOAD_RECOVERY] No recent media messages to check on server [09:49:04] [PENDING_UPLOAD] Total pending upload messages: 0 [09:49:04] [UNSENT_RETRY] No unsent messages found [09:49:04] new_session POST ok: token len=159 [09:49:04] HELLO → sent (fetched token, role=query) [09:49:04] [SIG] hello_ok received for query connection - ready to query agents [09:49:04] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:49:04] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:49:04] [SERVER] Stopped reconnect polling [09:49:04] [SIG] agents_list received: [] [09:49:04] [SIG] agents_list received: [] [09:49:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1819, 1820, 1821, 1822, 1823] [09:49:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:49:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:05] [LOG] Long press on chat icon detected! Triggering log upload... [09:49:05] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [09:49:11] [LOG] Uploading log as '2026-01-26-09-49-crash-Laurent.log' (669 KB) to server... [09:49:12] [LOG] Upload HTTP status: 200 [09:49:12] [LOG] Upload successful: 2026-01-26-09-49-crash-Laurent.log [09:49:12] [LOG] Skipping cross-device log request (description doesn't end with '2') [09:49:15] [MENU] dismissAnyExistingMenu called [09:49:15] [MENU] dismissAnyExistingMenu completed [09:49:15] [EMOJI_PICKER] Starting emoji picker for message 19192 [09:49:15] [MENU] Created button 'Reply' at index 0 [09:49:15] [MENU] Created button 'Copy' at index 1 [09:49:15] [MENU] Created button 'Delete' at index 2 [09:49:15] [MENU] Menu added at y=494.0 [09:49:15] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:15] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:49:15] [EMOJI_PICKER] ✅ Picker shown at y=382.0 [09:49:16] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:16] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:16] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:16] [MENU] Found action closure, dismissing menu first [09:49:16] [MENU] dismissAnyExistingMenu called [09:49:16] [MENU] Found menu with tag 9999, removing [09:49:16] [MENU] Removing blur effect [09:49:16] [MENU] Removing floating message snapshot [09:49:16] [MENU] Dismissing emoji picker [09:49:16] [MENU] Recorded dismissal time for debounce [09:49:16] [MENU] dismissAnyExistingMenu completed [09:49:16] [MENU] Menu dismissed, executing action [09:49:16] [DELETE] requestDeleteMessage called for message id=19192 [09:49:16] [MENU] dismissAnyExistingMenu called [09:49:16] [MENU] dismissAnyExistingMenu completed [09:49:17] [GUARD] ⚠️ buildChatRows received 10576 messages - truncating to 500 [09:49:17] [MENU] Action executed [09:49:18] [MENU] dismissAnyExistingMenu called [09:49:18] [MENU] dismissAnyExistingMenu completed [09:49:18] [SCROLL_BTN] Showing button - 31998pt from bottom > half 379pt [09:49:18] [PUSH] Silent push received [09:49:18] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:18 +0000, appState=0, message_id=nil [09:49:18] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19192] [09:49:18] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:18 +0000 [09:49:18] [PUSH_EMBED] No embedded message_data in notification [09:49:18] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:18] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19192], handled=false [09:49:18] [PUSH] No embedded data, pre-loading messages from server [09:49:18] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:18] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:18] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:18] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:49:18] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19192] [09:49:18] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19192] [09:49:18] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19192] [09:49:18] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:18] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:49:18] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:18] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:18] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19192, AnyHashable("operation_type"): 1] [09:49:18] [PUSH] Parsed message_id: 19192 [09:49:18] [PUSH] Parsed operation_type: 1 [09:49:18] [PUSH] Taking direct action: opType=1, messageId=19192 [09:49:18] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19192 [09:49:18] [PUSH] Removed message 19192 from allMessagesWithReadBy [09:49:18] [GUARD] ⚠️ buildChatRows received 10576 messages - truncating to 500 [09:49:19] [GIF] configure msgId=1708 file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif msgChanged=true owner=false animating=false completed=false [09:49:19] [GIF] msgId=1708 START fresh animation [09:49:19] [CELL_UPLOAD] configure: msgId=1708, file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=true, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, overlayExists=true [09:49:19] [CELL_UPLOAD] configure: msgId=1713, file=674db2cc35314166.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → not my message, setting complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=674db2cc35314166.heic, overlayExists=true [09:49:19] [CELL_UPLOAD] configure: msgId=1740, file=8f2a2de52768ee96.MOV, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f2a2de52768ee96.MOV, overlayExists=true [09:49:19] DOWNLOADIIING t_674db2cc35314166.jpg [09:49:19] DOWNLOADIIING 674db2cc35314166.heic [09:49:19] DOWNLOADIIING t_8f2a2de52768ee96.jpg [09:49:19] DOWNLOADIIING 8f2a2de52768ee96.MOV [09:49:19] [CELL_UPLOAD] configure: msgId=2616, file=92668b65c604182e.jpeg, senderId=test-script, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → not my message, setting complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=92668b65c604182e.jpeg, overlayExists=true [09:49:19] [CELL_UPLOAD] configure: msgId=3258, file=46824a6556317ee6.mov, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=46824a6556317ee6.mov, overlayExists=true [09:49:19] [CELL_UPLOAD] configure: msgId=3275, file=979ed1b3bb8031c5.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → not my message, setting complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=979ed1b3bb8031c5.heic, overlayExists=true [09:49:19] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:19] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:20] [MENU] dismissAnyExistingMenu called [09:49:20] [MENU] dismissAnyExistingMenu completed [09:49:20] [EMOJI_PICKER] Starting emoji picker for message 19190 [09:49:20] [MENU] Created button 'Reply' at index 0 [09:49:20] [MENU] Created button 'Copy' at index 1 [09:49:20] [MENU] Created button 'Delete' at index 2 [09:49:20] [MENU] Menu added at y=494.0 [09:49:21] [PUSH] Silent push received [09:49:21] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:21 +0000, appState=0, message_id=nil [09:49:21] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:21 +0000 [09:49:21] [PUSH_EMBED] No embedded message_data in notification [09:49:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:21] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693], handled=false [09:49:21] [PUSH] No embedded data, pre-loading messages from server [09:49:21] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:22] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:22] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:22] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:22] [MENU] Found action closure, dismissing menu first [09:49:22] [MENU] dismissAnyExistingMenu called [09:49:22] [MENU] Found menu with tag 9999, removing [09:49:22] [MENU] Removing blur effect [09:49:22] [MENU] Removing floating message snapshot [09:49:22] [MENU] Recorded dismissal time for debounce [09:49:22] [MENU] dismissAnyExistingMenu completed [09:49:22] [MENU] Menu dismissed, executing action [09:49:22] [DELETE] requestDeleteMessage called for message id=19190 [09:49:22] [MENU] dismissAnyExistingMenu called [09:49:22] [MENU] dismissAnyExistingMenu completed [09:49:22] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:23] [GUARD] ⚠️ buildChatRows received 10575 messages - truncating to 500 [09:49:23] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:23] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692] [09:49:23] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:23] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19192] [09:49:23] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19192] [09:49:23] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:23] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:49:23] [MENU] Action executed [09:49:23] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:23] [EMOJI_PICKER] ❌ Menu was dismissed before emojis loaded - skipping picker [09:49:23] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 49 msgs, IDs=[1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 4192] [09:49:23] [PUSH] Parsed message_id: 4192 [09:49:23] [PUSH] Parsed operation_type: 3 [09:49:23] [PUSH] Taking direct action: opType=3, messageId=4192 [09:49:23] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4192 [09:49:23] [GUARD] ⚠️ buildChatRows received 10575 messages - truncating to 500 [09:49:24] [PUSH] Silent push received [09:49:24] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:24 +0000, appState=0, message_id=nil [09:49:24] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:24 +0000 [09:49:24] [PUSH_EMBED] No embedded message_data in notification [09:49:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:24] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693], handled=false [09:49:24] [PUSH] No embedded data, pre-loading messages from server [09:49:24] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:24] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:24] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:24] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 19189, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [09:49:24] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:24] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [19192, 19190] [09:49:24] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[19192, 19190] [09:49:24] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:24] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:49:24] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:24] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 49 msgs, IDs=[1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:24] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19190, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 1] [09:49:24] [PUSH] Parsed message_id: 19190 [09:49:24] [PUSH] Parsed operation_type: 1 [09:49:24] [PUSH] Taking direct action: opType=1, messageId=19190 [09:49:24] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19190 [09:49:24] [PUSH] Removed message 19190 from allMessagesWithReadBy [09:49:24] [GUARD] ⚠️ buildChatRows received 10575 messages - truncating to 500 [09:49:25] [CHAT] delete error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x1291b3540 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <7FA5C6D0-C2D3-432E-BD48-14E3165FC2EA>.<36>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <7FA5C6D0-C2D3-432E-BD48-14E3165FC2EA>.<36>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, _kCFStreamErrorDomainKey=4} [09:49:25] [CLIENT_SIG] Event received: type=1 messageId=19192 [09:49:25] [WS_EVENT] Received event: type=1, messageId=19192 [09:49:25] [WS_EVENT] Message deleted: 19192 [09:49:25] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1819, 1820, 1821, 1822, 1823] [09:49:25] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:49:25] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:26] [MENU] dismissAnyExistingMenu called [09:49:26] [MENU] dismissAnyExistingMenu completed [09:49:26] [EMOJI_PICKER] Starting emoji picker for message 19189 [09:49:26] [MENU] Created button 'Reply' at index 0 [09:49:26] [MENU] Created button 'Copy' at index 1 [09:49:26] [MENU] Created button 'Delete' at index 2 [09:49:26] [MENU] Menu added at y=494.0 [09:49:26] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:26] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:49:26] [EMOJI_PICKER] ✅ Picker shown at y=382.0 [09:49:27] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:27] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:27] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:27] [MENU] Found action closure, dismissing menu first [09:49:27] [MENU] dismissAnyExistingMenu called [09:49:27] [MENU] Found menu with tag 9999, removing [09:49:27] [MENU] Removing blur effect [09:49:27] [MENU] Removing floating message snapshot [09:49:27] [MENU] Dismissing emoji picker [09:49:27] [MENU] Recorded dismissal time for debounce [09:49:27] [MENU] dismissAnyExistingMenu completed [09:49:27] [MENU] Menu dismissed, executing action [09:49:27] [DELETE] requestDeleteMessage called for message id=19189 [09:49:27] [MENU] dismissAnyExistingMenu called [09:49:27] [MENU] dismissAnyExistingMenu completed [09:49:28] [GUARD] ⚠️ buildChatRows received 10574 messages - truncating to 500 [09:49:28] [MENU] Action executed [09:49:28] [CLIENT_SIG] Event received: type=3 messageId=4192 [09:49:28] [WS_EVENT] Received event: type=3, messageId=4192 [09:49:28] [WS_EVENT] Read receipt for message 4192 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:49:28] [GUARD] ⚠️ buildChatRows received 10574 messages - truncating to 500 [09:49:29] [MENU] dismissAnyExistingMenu called [09:49:29] [MENU] dismissAnyExistingMenu completed [09:49:29] [SCROLL_BTN] Showing button - 32115pt from bottom > half 379pt [09:49:29] [PUSH] Silent push received [09:49:29] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:29 +0000, appState=0, message_id=nil [09:49:29] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:29] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:29 +0000 [09:49:29] [PUSH_EMBED] No embedded message_data in notification [09:49:29] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:29] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693], handled=false [09:49:29] [PUSH] No embedded data, pre-loading messages from server [09:49:29] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:29] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:29] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:29] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 19188, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [09:49:29] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:29] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [19192, 19190, 19189] [09:49:29] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[19192, 19190, 19189] [09:49:29] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[19192, 19191, 19190, 19189, 19188, 17161, 17159, 17158, 17157, 14693] [09:49:29] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [09:49:29] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:29] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 48 msgs, IDs=[1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:29] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 1, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19189, AnyHashable("session_id"): ILUIWU2] [09:49:29] [PUSH] Parsed message_id: 19189 [09:49:29] [PUSH] Parsed operation_type: 1 [09:49:29] [PUSH] Taking direct action: opType=1, messageId=19189 [09:49:29] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19189 [09:49:29] [PUSH] Removed message 19189 from allMessagesWithReadBy [09:49:29] [GUARD] ⚠️ buildChatRows received 10574 messages - truncating to 500 [09:49:30] [GIF] configure msgId=1708 file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif msgChanged=true owner=false animating=false completed=false [09:49:30] [GIF] msgId=1708 CONTINUE animation (elapsed=10.717147946357727s) [09:49:30] [CELL_UPLOAD] configure: msgId=1708, file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=true, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, overlayExists=true [09:49:30] [CELL_UPLOAD] configure: msgId=1713, file=674db2cc35314166.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → not my message, setting complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=674db2cc35314166.heic, overlayExists=true [09:49:30] [CELL_UPLOAD] configure: msgId=2616, file=92668b65c604182e.jpeg, senderId=test-script, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → not my message, setting complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=92668b65c604182e.jpeg, overlayExists=true [09:49:30] [CELL_UPLOAD] configure: msgId=3258, file=46824a6556317ee6.mov, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=46824a6556317ee6.mov, overlayExists=true [09:49:30] [SCROLL_BTN] Showing button - 941pt from bottom > half 379pt [09:49:30] [CELL_UPLOAD] configure: msgId=3275, file=979ed1b3bb8031c5.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → not my message, setting complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=979ed1b3bb8031c5.heic, overlayExists=true [09:49:30] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:30] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:30] [CLIENT_SIG] Event received: type=1 messageId=19190 [09:49:30] [CHAT] delete_message.php HTTP 200 -- Response Headers -- Server: Apache/2.4.65 (Debian) Content-Type: application/json; charset=utf-8 Keep-Alive: timeout=5, max=47 Date: Mon, 26 Jan 2026 08:49:23 GMT Connection: Keep-Alive Content-Length: 68 -- Body -- {"ok":true,"event_type":1,"message_id":19190,"session_id":"ILUIWU2"} [09:49:30] [WS_EVENT] Received event: type=1, messageId=19190 [09:49:30] [WS_EVENT] Message deleted: 19190 [09:49:31] [MENU] dismissAnyExistingMenu called [09:49:31] [MENU] dismissAnyExistingMenu completed [09:49:31] [EMOJI_PICKER] Starting emoji picker for message 19191 [09:49:31] [MENU] Created button 'Reply' at index 0 [09:49:31] [MENU] Created button 'Copy' at index 1 [09:49:31] [MENU] Created button 'Delete' at index 2 [09:49:31] [MENU] Menu added at y=494.0 [09:49:31] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:31] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:49:31] [EMOJI_PICKER] ✅ Picker shown at y=382.0 [09:49:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=47, first5Ids=[1819, 1820, 1821, 1822, 1823] [09:49:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 47 messages [09:49:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1819, 1820, 1821, 1822, 1823, 1891, 1908, 1909, 1911, 1913] [09:49:32] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:32] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:32] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:32] [MENU] Found action closure, dismissing menu first [09:49:32] [MENU] dismissAnyExistingMenu called [09:49:32] [MENU] Found menu with tag 9999, removing [09:49:32] [MENU] Removing blur effect [09:49:32] [MENU] Removing floating message snapshot [09:49:32] [MENU] Dismissing emoji picker [09:49:32] [MENU] Recorded dismissal time for debounce [09:49:32] [MENU] dismissAnyExistingMenu completed [09:49:34] [CRASH] Previous session did not exit cleanly - crash detected [09:49:34] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:49:34] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:49:34] [GIPHY] SDK not available - using REST API fallback [09:49:34] [BACKGROUND] Background fetch enabled [09:49:34] [CLEANUP] No old timer messages to delete [09:49:34] [AUTH] Starting PIN authentication [09:49:34] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:49:34] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:49:34] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:49:34] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [09:49:34] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:49:34] [USER] ✅ User registered successfully [09:49:34] [PUSH] User registration after token update: success [09:49:34] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:49:34] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:49:35] [CLIENT_SIG] WebSocket opened [09:49:35] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:49:35] [CLIENT_SIG] Connected! clientId=4iPXnam8D-wf_Oqv [09:49:35] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:49:35] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:49:35] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:49:35] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19188)... [09:49:35] [PRELOAD] Fetched 1 messages [09:49:35] [PRELOAD] ✅ Saved 1 messages to local DB [09:49:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=1, sessionId=ILUIWU2 [09:49:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191] [09:49:35] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU2), replacing cache [09:49:35] [PRELOAD] ⚡ Cached 1 messages for instant display (preserved 0 from push) [09:49:36] [CLIENT_SIG] Event received: type=1 messageId=19189 [09:49:36] [PIN_AUTH] Correct PIN [09:49:36] [SECURITY] Restored real session: ILUIWU2 [09:49:36] [SECURITY] Restored real session: ILUIWU2 [09:49:36] [SECURITY] Saved real session: ILUIWU2 [09:49:36] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:49:36] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:49:36] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:49:36] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:49:36] [THEME] Applying current theme [09:49:36] [CHAT] Applied day theme (mode: day) [09:49:36] [SECURITY] Saved real session: ILUIWU2 [09:49:36] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:49:36] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:49:36] [NETWORK] Network monitor started [09:49:36] [NETWORK] Status changed: connected [09:49:36] Did transition [09:49:36] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:49:36] [VIEWER] Screen lock enabled - normal idle behavior [09:49:36] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:49:36] [VCC] ========== VideoConnectionClass INIT ========== [09:49:36] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:49:36] [DATA AUDIO] ========== setupWebRTC() START ========== [09:49:36] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:49:36] [DATA AUDIO] Creating encoder/decoder factories... [09:49:36] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:49:36] [CODEC] Viewer selected encoder: AV1 (best quality) [09:49:36] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:49:36] [DATA AUDIO] ✅ Factory created [09:49:36] [DATA AUDIO] RTCAudioSession locked [09:49:36] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:49:36] [DATA AUDIO] RTCAudioSession unlocked [09:49:36] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:49:36] [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"] [09:49:36] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:49:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:49:36] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:49:36] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:49:36] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:49:36] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:49:36] Did transition [09:49:36] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:49:36] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:49:36] [CHUNK] Merged 978 reactions synchronously [09:49:36] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:49:36] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:49:36] [MIGRATION] Found 3 messages needing sender_name backfill [09:49:36] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:49:36] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:49:36] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:49:36] [GALLERY_DB] ✅ Loaded 8 media messages [09:49:36] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:49:36] [GALLERY] First 5 after sort (newest first): [09:49:36] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:49:36] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:49:36] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:49:36] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:49:36] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:49:36] [SERVER] Starting reconnect polling (5s interval) [09:49:36] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:49:36] [ICONS] Offset applied: -14.6 [09:49:36] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:49:36] [MIGRATION] Failed to parse user names response [09:49:36] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:49:36] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19191, maxMemoryId=19191 [09:49:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19191 [09:49:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:49:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:49:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:36] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:49:36] [ICONS] Chat center: (31.2, 87.0) [09:49:36] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:49:36] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:49:36] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:49:36] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:49:36] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:49:36] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:49:36] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:49:36] [ICONS] Screen width: 440.0 [09:49:37] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:49:37] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:49:37] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:49:37] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:49:37] [USER] ✅ User registered successfully [09:49:37] [USER] User registration successful [09:49:37] new_session POST ok: token len=159 [09:49:37] HELLO → sent (fetched token, role=query) [09:49:37] [SIG] hello_ok received for query connection - ready to query agents [09:49:37] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:49:37] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:49:37] [SERVER] Stopped reconnect polling [09:49:37] [SIG] agents_list received: [] [09:49:37] [SIG] agents_list received: [] [09:49:37] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:49:37] [READBY_ENRICH] Enriched 50 messages with readBy data [09:49:37] [INCREMENTAL_SYNC] ✅ No new messages [09:49:37] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:49:37] [UNSENT_RETRY] Checking for unsent messages... [09:49:37] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:49:37] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:49:37] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:49:37] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:49:37] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:49:37] [UPLOAD_RECOVERY] No recent media messages to check on server [09:49:37] [PENDING_UPLOAD] Total pending upload messages: 0 [09:49:37] [UNSENT_RETRY] No unsent messages found [09:49:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:49:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:49:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:38] [MENU] dismissAnyExistingMenu called [09:49:38] [MENU] dismissAnyExistingMenu completed [09:49:38] [EMOJI_PICKER] Starting emoji picker for message 19188 [09:49:38] [MENU] Created button 'Reply' at index 0 [09:49:38] [MENU] Created button 'Copy' at index 1 [09:49:38] [MENU] Created button 'Delete' at index 2 [09:49:38] [MENU] Menu added at y=506.5 [09:49:38] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:38] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:49:38] [EMOJI_PICKER] ✅ Picker shown at y=369.5 [09:49:39] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:39] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:39] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:39] [MENU] Found action closure, dismissing menu first [09:49:39] [MENU] dismissAnyExistingMenu called [09:49:39] [MENU] Found menu with tag 9999, removing [09:49:39] [MENU] Removing blur effect [09:49:39] [MENU] Removing floating message snapshot [09:49:39] [MENU] Dismissing emoji picker [09:49:39] [MENU] Recorded dismissal time for debounce [09:49:39] [MENU] dismissAnyExistingMenu completed [09:49:39] [MENU] Menu dismissed, executing action [09:49:39] [DELETE] requestDeleteMessage called for message id=19188 [09:49:39] [MENU] dismissAnyExistingMenu called [09:49:39] [MENU] dismissAnyExistingMenu completed [09:49:39] [GUARD] ⚠️ buildChatRows received 10573 messages - truncating to 500 [09:49:39] [MENU] Action executed [09:49:40] [MENU] dismissAnyExistingMenu called [09:49:40] [MENU] dismissAnyExistingMenu completed [09:49:41] [SCROLL_BTN] Showing button - 32012pt from bottom > half 379pt [09:49:41] [PUSH] Silent push received [09:49:41] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:41 +0000, appState=0, message_id=nil [09:49:41] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19191] [09:49:41] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:41 +0000 [09:49:41] [PUSH_EMBED] No embedded message_data in notification [09:49:41] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:41] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19191], handled=false [09:49:41] [PUSH] No embedded data, pre-loading messages from server [09:49:41] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:49:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19191] [09:49:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:49:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:49:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:49:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 1, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19188] [09:49:41] [PUSH] Parsed message_id: 19188 [09:49:41] [PUSH] Parsed operation_type: 1 [09:49:41] [PUSH] Taking direct action: opType=1, messageId=19188 [09:49:41] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19188 [09:49:41] [PUSH] Removed message 19188 from allMessagesWithReadBy [09:49:41] [GUARD] ⚠️ buildChatRows received 10573 messages - truncating to 500 [09:49:41] [GIF] configure msgId=1708 file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif msgChanged=true owner=false animating=false completed=false [09:49:41] [GIF] msgId=1708 START fresh animation [09:49:41] [CELL_UPLOAD] configure: msgId=1708, file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=true, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media4.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzeW4yOTBubWI3OGg2d2JlcXQ1djlpajJ3eTNqczVzaTZ0aWVmOGtrbyZlcD12MV9naWZzX3RyZW5kaW5nJmN0PWc/8592ghhkChZtlPckIT/giphy.gif, overlayExists=true [09:49:41] [CELL_UPLOAD] configure: msgId=1713, file=674db2cc35314166.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → not my message, setting complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=674db2cc35314166.heic, overlayExists=true [09:49:41] [CELL_UPLOAD] configure: msgId=1740, file=8f2a2de52768ee96.MOV, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f2a2de52768ee96.MOV, overlayExists=true [09:49:41] DOWNLOADIIING t_674db2cc35314166.jpg [09:49:41] DOWNLOADIIING 674db2cc35314166.heic [09:49:41] DOWNLOADIIING t_8f2a2de52768ee96.jpg [09:49:41] DOWNLOADIIING 8f2a2de52768ee96.MOV [09:49:41] [CELL_UPLOAD] configure: msgId=2616, file=92668b65c604182e.jpeg, senderId=test-script, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → not my message, setting complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=92668b65c604182e.jpeg, overlayExists=true [09:49:41] [CELL_UPLOAD] configure: msgId=3258, file=46824a6556317ee6.mov, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=46824a6556317ee6.mov, overlayExists=true [09:49:41] [CELL_UPLOAD] configure: msgId=3275, file=979ed1b3bb8031c5.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → not my message, setting complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=979ed1b3bb8031c5.heic, overlayExists=true [09:49:41] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:41] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:43] [MENU] dismissAnyExistingMenu called [09:49:43] [MENU] dismissAnyExistingMenu completed [09:49:43] [EMOJI_PICKER] Starting emoji picker for message 19191 [09:49:43] [MENU] Created button 'Reply' at index 0 [09:49:43] [MENU] Created button 'Copy' at index 1 [09:49:43] [MENU] Created button 'Delete' at index 2 [09:49:43] [MENU] Menu added at y=506.5 [09:49:43] [MENU] menuButtonTouchDown - button title: Delete, tag: 2 [09:49:43] [MENU] menuButtonTapped - button title: Delete, tag: 2 [09:49:43] [MENU] Button frame: (0.0, 88.0, 120.0, 44.0), superview: true [09:49:43] [MENU] Found action closure, dismissing menu first [09:49:43] [MENU] dismissAnyExistingMenu called [09:49:43] [MENU] Found menu with tag 9999, removing [09:49:43] [MENU] Removing blur effect [09:49:43] [MENU] Removing floating message snapshot [09:49:43] [MENU] Recorded dismissal time for debounce [09:49:43] [MENU] dismissAnyExistingMenu completed [09:49:43] [MENU] Menu dismissed, executing action [09:49:43] [DELETE] requestDeleteMessage called for message id=19191 [09:49:43] [MENU] dismissAnyExistingMenu called [09:49:43] [MENU] dismissAnyExistingMenu completed [09:49:44] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:49:44] [GUARD] ⚠️ buildChatRows received 10572 messages - truncating to 500 [09:49:44] [MENU] Action executed [09:49:44] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:44] [EMOJI_PICKER] ❌ Menu was dismissed before emojis loaded - skipping picker [09:49:45] [MENU] dismissAnyExistingMenu called [09:49:45] [MENU] dismissAnyExistingMenu completed [09:49:46] [PUSH] Silent push received [09:49:46] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 08:49:46 +0000, appState=0, message_id=nil [09:49:46] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:49:46] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 08:49:46 +0000 [09:49:46] [PUSH_EMBED] No embedded message_data in notification [09:49:46] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:49:46] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689], handled=false [09:49:46] [PUSH] No embedded data, pre-loading messages from server [09:49:46] [PUSH_PRELOAD] Fetching messages for instant display cache [09:49:46] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:49:46] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689, 14688] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:49:46] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19191] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19191] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:49:46] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:49:46] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:49:46] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 49 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:46] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 1, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19191] [09:49:46] [PUSH] Parsed message_id: 19191 [09:49:46] [PUSH] Parsed operation_type: 1 [09:49:46] [PUSH] Taking direct action: opType=1, messageId=19191 [09:49:46] [PUSH] TakeActionFromPush called: OperationType=1, MessageIds=19191 [09:49:46] [PUSH] Removed message 19191 from allMessagesWithReadBy [09:49:46] [GUARD] ⚠️ buildChatRows received 10572 messages - truncating to 500 [09:49:46] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:46] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:46] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:47] [CHAT] delete error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x1243884e0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<34>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask .<34>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, _kCFStreamErrorDomainKey=4} [09:49:48] [CLIENT_SIG] Event received: type=1 messageId=19188 [09:49:48] [WS_EVENT] Received event: type=1, messageId=19188 [09:49:48] [WS_EVENT] Message deleted: 19188 [09:49:48] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:49:48] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:49:48] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:48] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:48] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:49:52] [CHAT] delete error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x124389740 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <494511F0-70B5-4B71-A18D-CCFFF10CA872>.<213>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <494511F0-70B5-4B71-A18D-CCFFF10CA872>.<213>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/delete_message.php, _kCFStreamErrorDomainKey=4} [09:49:52] [CLIENT_SIG] Event received: type=1 messageId=19191 [09:49:52] [WS_EVENT] Received event: type=1, messageId=19191 [09:49:52] [WS_EVENT] Message deleted: 19191 [09:49:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:49:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:49:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:49:53] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:49:53] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:49:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:50:30] [LIFECYCLE] App resigning active - cleared crash flag [09:50:30] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:50:30] [SECURITY] Saved background timestamp [09:50:30] [LIFECYCLE] App entering background - cleared crash flag [09:50:30] [CLIENT_SIG] Disconnecting [09:50:30] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:50:30] [PUSH_TRACE] 💤 BACKGROUND: memory has 48 messages, first 10 IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:50:30] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=0 [09:50:30] [WS] Canceling WebSocket for query connection to iosILUIWU2 [09:50:30] In cleanupPeer [09:50:30] In cleanupPeer [09:50:30] [LIFECYCLE] WebRTC audio disabled [09:50:30] [LIFECYCLE] AVAudioSession deactivated [09:50:30] [LIFECYCLE] All connections stopped [09:50:31] [CLIENT_SIG] WebSocket closed with code 1001 [09:50:31] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:50:31] [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/} [09:50:31] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:50:31] [SERVER] Stopped reconnect polling [09:50:31] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:50:31] [WS] Query connection error - cleaning up all agent connections and views [09:50:31] Will request stop of video 0 [09:50:31] Will request stop of video 0 [09:50:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:50:31] [WS] Query connection failed - cleaning up all agent connections and views [09:50:31] [CLEANUP] ======================================== [09:50:31] [CLEANUP] Cleaning up all agent connections and views [09:50:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:50:31] [CLEANUP] Stopped and removed 0 video connections [09:50:31] [CLEANUP] Removed 0 video views [09:50:31] [CLEANUP] Removed 0 feed scroll views [09:50:31] [CLEANUP] Removed 0 status labels [09:50:31] [CLEANUP] Reset agent query state [09:50:31] [CLEANUP] Updated page indicator [09:50:31] [CLEANUP] Rebuilt video layout [09:50:31] [CLEANUP] ✅ All agent connections and views cleaned up [09:50:31] [CLEANUP] ======================================== [09:50:31] [SERVER] Skipping reconnect polling - app is in background [09:50:31] [WS] URLSession invalidated successfully [09:50:31] [PIP] Removing 0 tracks from PiP for connection 0 [09:50:31] [PIP] ✅ All tracks removed for connection 0 [09:50:31] [PIP] Removing 0 tracks from PiP for connection 0 [09:50:31] [PIP] ✅ All tracks removed for connection 0 [09:50:31] [CLEANUP] ======================================== [09:50:31] [CLEANUP] Cleaning up all agent connections and views [09:50:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:50:31] [CLEANUP] Stopped and removed 0 video connections [09:50:31] [CLEANUP] Removed 0 video views [09:50:31] [CLEANUP] Removed 0 feed scroll views [09:50:31] [CLEANUP] Removed 0 status labels [09:50:31] [CLEANUP] Reset agent query state [09:50:31] [CLEANUP] Updated page indicator [09:50:31] [CLEANUP] Rebuilt video layout [09:50:31] [CLEANUP] ✅ All agent connections and views cleaned up [09:50:31] [CLEANUP] ======================================== [09:50:31] [SERVER] Skipping reconnect polling - app is in background [09:51:19] [SECURITY] Timeout check: elapsed=48.93867802619934s, timeout=300.0s [09:51:19] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:51:19] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:51:19] [LIFECYCLE] App entering foreground - restoring connections [09:51:19] [PUSH_TRACE] 🔄 FOREGROUND: memory has 48 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:19] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:51:19] [UPLOAD_RETRY] No pending uploads to retry [09:51:19] [LIFECYCLE] Merged 978 reactions from local DB [09:51:19] [LIFECYCLE] WebRTC audio re-enabled [09:51:19] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:51:19] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:51:19] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:51:19] [VIEWER] Reconnecting after background - querying agents [09:51:19] [UNSENT_RETRY] Checking for unsent messages... [09:51:19] [PENDING_UPLOAD] Total pending upload messages: 0 [09:51:19] [UNSENT_RETRY] No unsent messages found [09:51:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU2 [09:51:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:51:19] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:51:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:51:19] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:51:19] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:20] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:51:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:51:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:51:20] [CLIENT_SIG] WebSocket opened [09:51:20] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:51:20] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:51:20] HELLO → sent (cached token, role=query) [09:51:20] [CLIENT_SIG] Connected! clientId=J5Vo2s5s5lrgY6hu [09:51:20] [SIG] hello_ok received for query connection - ready to query agents [09:51:20] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:51:20] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:51:20] [SERVER] Stopped reconnect polling [09:51:20] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:51:20] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:51:20] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:51:20] [SIG] agents_list received: [] [09:51:20] [SIG] agents_list received: [] [09:51:20] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:51:20] [SECURITY] Within timeout - cleared background flag [09:51:20] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:51:20] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 48 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:20] [PUSH] handlePollEventsNotification userInfo: [:] [09:51:20] [PUSH] No message_id in userInfo [09:51:20] [PUSH] No operation_type in userInfo [09:51:20] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:51:20] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:51:20] [PUSH_TRACE] 📬 POLL: memory state: count=48, first 10 IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:20] [FAST_REFRESH] Already have 48 messages - skipping local DB load [09:51:20] [PUSH_TRACE] ⚠️ POLL: NOT loading from DB because allMessagesWithReadBy has 48 messages [09:51:20] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:51:20] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:51:20] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=48 [09:51:20] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=17161, maxMemoryId=17161 [09:51:20] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [09:51:20] [INCREMENTAL_SYNC] ✅ No new messages [09:51:20] [FAST_REFRESH] Incremental sync complete - 48 messages [09:51:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:51:20] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:51:20] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:20] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:51:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:51:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:51:20] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:51:20] [FOREGROUND] Enriched 0 messages with readBy data from server [09:51:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:51:20] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:51:20] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:20] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:51:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:51:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:51:21] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:51:21] [FAST_REFRESH] Enriched 48 messages with readBy data [09:51:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:51:21] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:51:21] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:51:21] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:51:21] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:51:21] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:51:30] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [09:51:30] [WS] Query connection error - cleaning up all agent connections and views [09:51:30] [CLEANUP] ======================================== [09:51:30] [CLEANUP] Cleaning up all agent connections and views [09:51:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:51:30] [CLEANUP] Stopped and removed 0 video connections [09:51:30] [CLEANUP] Removed 0 video views [09:51:30] [CLEANUP] Removed 0 feed scroll views [09:51:30] [CLEANUP] Removed 0 status labels [09:51:30] [CLEANUP] Reset agent query state [09:51:30] [CLEANUP] Updated page indicator [09:51:30] [CLEANUP] Rebuilt video layout [09:51:30] [CLEANUP] ✅ All agent connections and views cleaned up [09:51:30] [CLEANUP] ======================================== [09:51:30] [SERVER] Starting reconnect polling (5s interval) [09:51:35] [SERVER] Polling - attempting to reconnect... [09:51:40] [SERVER] Polling - attempting to reconnect... [09:51:45] [SERVER] Polling - attempting to reconnect... [09:51:50] [SERVER] Polling - attempting to reconnect... [09:51:55] [SERVER] Polling - attempting to reconnect... [09:52:00] [SERVER] Polling - attempting to reconnect... [09:52:05] [SERVER] Polling - attempting to reconnect... [09:52:10] [SERVER] Polling - attempting to reconnect... [09:52:15] [SERVER] Polling - attempting to reconnect... [09:52:20] [SERVER] Polling - attempting to reconnect... [09:52:25] [SERVER] Polling - attempting to reconnect... [09:52:30] [SERVER] Polling - attempting to reconnect... [09:52:35] [SERVER] Polling - attempting to reconnect... [09:52:40] [SERVER] Polling - attempting to reconnect... [09:52:45] [SERVER] Polling - attempting to reconnect... [09:52:50] [SERVER] Polling - attempting to reconnect... [09:52:55] [SERVER] Polling - attempting to reconnect... [09:53:00] [SERVER] Polling - attempting to reconnect... [09:53:05] [SERVER] Polling - attempting to reconnect... [09:53:10] [SERVER] Polling - attempting to reconnect... [09:53:15] [SERVER] Polling - attempting to reconnect... [09:53:20] [SERVER] Polling - attempting to reconnect... [09:53:25] [SERVER] Polling - attempting to reconnect... [09:53:30] [SERVER] Polling - attempting to reconnect... [09:53:35] [SERVER] Polling - attempting to reconnect... [09:53:40] [SERVER] Polling - attempting to reconnect... [09:53:45] [SERVER] Polling - attempting to reconnect... [09:53:47] [LIFECYCLE] App resigning active - cleared crash flag [09:53:47] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:53:47] [SECURITY] Saved background timestamp [09:53:47] [LIFECYCLE] App entering background - cleared crash flag [09:53:47] [CLIENT_SIG] Disconnecting [09:53:47] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:53:47] [PUSH_TRACE] 💤 BACKGROUND: memory has 48 messages, first 10 IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:47] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=3 [09:53:47] [WS] Canceling WebSocket for query connection to iosILUIWU2 [09:53:47] In cleanupPeer [09:53:47] In cleanupPeer [09:53:47] [LIFECYCLE] WebRTC audio disabled [09:53:47] [LIFECYCLE] AVAudioSession deactivated [09:53:47] [LIFECYCLE] All connections stopped [09:53:47] [CLIENT_SIG] WebSocket closed with code 1001 [09:53:47] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:53:47] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:53:47] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:53:47] [SERVER] Stopped reconnect polling [09:53:47] [WS] URLSession invalidated successfully [09:53:47] Will request stop of video 0 [09:53:47] Will request stop of video 0 [09:53:47] [PIP] Removing 0 tracks from PiP for connection 0 [09:53:47] [PIP] ✅ All tracks removed for connection 0 [09:53:47] [PIP] Removing 0 tracks from PiP for connection 0 [09:53:47] [PIP] ✅ All tracks removed for connection 0 [09:53:50] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [09:53:50] [WS] Query connection failed - cleaning up all agent connections and views [09:53:50] [CLEANUP] ======================================== [09:53:50] [CLEANUP] Cleaning up all agent connections and views [09:53:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:53:50] [CLEANUP] Stopped and removed 0 video connections [09:53:50] [CLEANUP] Removed 0 video views [09:53:50] [CLEANUP] Removed 0 feed scroll views [09:53:50] [CLEANUP] Removed 0 status labels [09:53:50] [CLEANUP] Reset agent query state [09:53:50] [CLEANUP] Updated page indicator [09:53:50] [CLEANUP] Rebuilt video layout [09:53:50] [CLEANUP] ✅ All agent connections and views cleaned up [09:53:50] [CLEANUP] ======================================== [09:53:50] [SERVER] Skipping reconnect polling - app is in background [09:53:51] [SECURITY] Timeout check: elapsed=3.507762908935547s, timeout=300.0s [09:53:51] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:53:51] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:53:51] [LIFECYCLE] App entering foreground - restoring connections [09:53:51] [PUSH_TRACE] 🔄 FOREGROUND: memory has 48 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:51] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:53:51] [UPLOAD_RETRY] No pending uploads to retry [09:53:51] [LIFECYCLE] Merged 978 reactions from local DB [09:53:51] [LIFECYCLE] WebRTC audio re-enabled [09:53:51] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:53:51] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:53:51] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:53:51] [VIEWER] Reconnecting after background - querying agents [09:53:51] [UNSENT_RETRY] Checking for unsent messages... [09:53:51] [PENDING_UPLOAD] Total pending upload messages: 0 [09:53:51] [UNSENT_RETRY] No unsent messages found [09:53:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:53:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:53:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:51] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:53:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:53:51] [CLIENT_SIG] WebSocket opened [09:53:51] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:53:51] [CLIENT_SIG] Connected! clientId=7zfO-td2L5Ii86kF [09:53:51] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:53:51] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:53:51] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:53:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU2 [09:53:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:53:51] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:53:51] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:53:51] [SECURITY] Within timeout - cleared background flag [09:53:51] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:53:51] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 48 msgs, IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:51] [PUSH] handlePollEventsNotification userInfo: [:] [09:53:51] [PUSH] No message_id in userInfo [09:53:51] [PUSH] No operation_type in userInfo [09:53:51] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:53:51] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[19191, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [09:53:51] [PUSH_TRACE] 📬 POLL: memory state: count=48, first 10 IDs=[1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:51] [FAST_REFRESH] Already have 48 messages - skipping local DB load [09:53:51] [PUSH_TRACE] ⚠️ POLL: NOT loading from DB because allMessagesWithReadBy has 48 messages [09:53:51] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:53:51] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:53:51] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=48 [09:53:51] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=17161, maxMemoryId=17161 [09:53:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [09:53:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:53:51] HELLO → sent (cached token, role=query) [09:53:51] [SIG] hello_ok received for query connection - ready to query agents [09:53:51] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:53:51] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:53:51] [SERVER] Stopped reconnect polling [09:53:51] [SIG] agents_list received: [] [09:53:51] [SIG] agents_list received: [] [09:53:52] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:53:52] [FOREGROUND] Enriched 0 messages with readBy data from server [09:53:52] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:53:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:53:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:53:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:52] [INCREMENTAL_SYNC] ✅ No new messages [09:53:52] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:52] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:53:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:53:52] [FAST_REFRESH] Incremental sync complete - 48 messages [09:53:52] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:53:52] [FAST_REFRESH] Enriched 48 messages with readBy data [09:53:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=48, first5Ids=[1781, 1817, 1818, 1819, 1820] [09:53:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 48 messages [09:53:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1891, 1908] [09:53:52] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:52] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:53:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:53:54] [INFO] Current channel: 'ILUIWU2' [09:53:54] [KEYCHAIN] ✅ Password retrieved for channel: ILUIWU2 [09:53:54] [INFO] Retrieved password from keychain: length=7 [09:53:56] [SECURITY] Saved real session: ILUIWU [09:53:56] [KEYCHAIN] ✅ Password deleted for channel: ILUIWU [09:53:56] [KEYCHAIN] ✅ Password saved for channel: ILUIWU [09:53:56] [CHANNEL_SWITCH] 🔄 handleChannelChanged received: newChannel='ILUIWU', role='viewer' [09:53:56] [INFO] Device registered to 'ILUIWU': HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":1} [09:53:56] [CHANNEL_SWITCH] ⏹️ Stopped event polling timer [09:53:56] [CHANNEL_SWITCH] 🔄 Old sessionId='ILUIWU2', switching to 'ILUIWU' [09:53:56] [CHANNEL_SWITCH] 🗑️ Cleared local DB for old session 'ILUIWU2' [09:53:56] [CHANNEL_SWITCH] 🗑️ Cleared memory arrays [09:53:56] [SECURITY] Saved real session: ILUIWU [09:53:56] [CHANNEL_SWITCH] ✅ Updated sessionId to 'ILUIWU' [09:53:56] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [09:53:56] [CLIENT_SIG] Disconnecting [09:53:56] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:53:56] [CHANNEL_SWITCH] 🔌 Reconnected client signaling to 'ILUIWU' [09:53:56] [CHANNEL_SWITCH] 📤 Calling refreshAllFromServer... [09:53:56] [REFRESH_ALL] 🔄 refreshAllFromServer called from: channelSwitch, currentMsgCount=0 [09:53:56] [REFRESH_ALL] 📸 Captured 0 message IDs before request [09:53:56] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:53:56] [INFO] 🔔 Syncing notification state with server: local=true → server=false [09:53:56] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:53:56] [CLIENT_SIG] WebSocket closed with code 1001 [09:53:56] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:53:56] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:53:56] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:53:57] [CLIENT_SIG] WebSocket opened [09:53:57] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:53:57] [CLIENT_SIG] Connected! clientId=Le1j-OhMDL9iYV-c [09:53:57] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:53:57] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:53:57] [PENDING_UPLOAD] Total pending upload messages: 0 [09:53:57] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [09:53:57] DOWNLOADIIING t_A838C8A7-6ACB-4EC0-8A9C-B457DDC4006E.jpg [09:53:57] DOWNLOADIIING t_203DADEC-DEED-4A33-908B-8F8E344461B1.jpg [09:53:58] DOWNLOADIIING t_1b1a78050ebe099b.jpg [09:53:58] DOWNLOADIIING t_bae538c2a3076c11.jpg [09:53:58] DOWNLOADIIING t_ee42d57ffd8ab767.jpg [09:53:58] DOWNLOADIIING t_5cfd84d52271d308.jpg [09:53:58] DOWNLOADIIING t_919f4df51be24b2c.jpg [09:53:58] DOWNLOADIIING t_0f2dda66cccdeadf.jpg [09:53:58] DOWNLOADIIING t_32675c319a37fee7.jpg [09:53:58] DOWNLOADIIING t_a45f085b5a2c50aa.jpg [09:53:58] DOWNLOADIIING t_7cd3ce3d7797eb3c.jpg [09:53:58] DOWNLOADIIING t_abb65f630e55dc61.jpg [09:53:58] DOWNLOADIIING t_2a4c7380908d6595.jpg [09:53:58] DOWNLOADIIING t_1ee77a72ee5013e0.jpg [09:53:58] DOWNLOADIIING t_02f48c94671cc64e.jpg [09:53:58] DOWNLOADIIING t_d0fd8cabebf807d5.jpg [09:53:58] DOWNLOADIIING t_364b0669ed2f3378.jpg [09:53:58] DOWNLOADIIING t_7f3c34ff05eb7c95.jpg [09:53:58] DOWNLOADIIING t_66e5f4c7c82fef18.jpg [09:53:58] DOWNLOADIIING t_f4d9bbe2fc21d5ae.jpg [09:53:58] DOWNLOADIIING t_e1d06c52c18e20ce.jpg [09:53:58] DOWNLOADIIING t_722d39e0d91dd954.jpg [09:53:58] DOWNLOADIIING t_97828ef5de49a612.jpg [09:53:58] DOWNLOADIIING t_98986cbb2cd2ae48.jpg [09:53:58] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=7949 [09:53:58] [REFRESH_ALL] 📊 Server returned 7949 messages [09:53:58] [REFRESH_ALL] 📊 Final merge: server=7949, preserved=0, total=7949 [09:53:58] [REFRESH_ALL] 📊 Displaying 50 of 7949 messages, hasMore=true [09:53:58] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [09:53:58] [CHANNEL_SWITCH] ✅ Completion handler called! allMessagesWithReadBy.count=50, currentTabIndex=3 [09:54:14] [CRASH] No crash detected [09:54:14] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:54:14] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:54:14] [GIPHY] SDK not available - using REST API fallback [09:54:14] [BACKGROUND] Background fetch enabled [09:54:14] [CLEANUP] ✅ Deleted 4 timer messages older than 24h [09:54:14] [SECURITY] Initial launch - within timeout (26.514596939086914s < 300.0s) [09:54:14] [AUTH] Starting PIN authentication [09:54:14] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:54:14] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:14] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:54:14] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:54:14] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:54:14] [USER] ✅ User registered successfully [09:54:14] [PUSH] User registration after token update: success [09:54:14] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:54:14] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:54:14] [CLIENT_SIG] WebSocket opened [09:54:14] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:54:14] [CLIENT_SIG] Connected! clientId=bWUhHbwm3NaKEO1P [09:54:14] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:54:14] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:14] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [09:54:14] [PRELOAD] No messages or parse error [09:54:15] [PIN_AUTH] Correct PIN [09:54:15] [SECURITY] Restored real session: ILUIWU [09:54:15] [SECURITY] Restored real session: ILUIWU [09:54:15] [SECURITY] Saved real session: ILUIWU [09:54:15] [SCENE] Launched directly to chat view with sessionId: ILUIWU [09:54:15] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:54:15] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:54:16] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:54:16] [THEME] Applying current theme [09:54:16] [CHAT] Applied day theme (mode: day) [09:54:16] [SECURITY] Saved real session: ILUIWU [09:54:16] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [09:54:16] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:54:16] [NETWORK] Network monitor started [09:54:16] [NETWORK] Status changed: connected [09:54:16] Did transition [09:54:16] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [09:54:16] [VIEWER] Screen lock enabled - normal idle behavior [09:54:16] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [09:54:16] [VCC] ========== VideoConnectionClass INIT ========== [09:54:16] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [09:54:16] [DATA AUDIO] ========== setupWebRTC() START ========== [09:54:16] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:54:16] [DATA AUDIO] Creating encoder/decoder factories... [09:54:16] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:54:16] [CODEC] Viewer selected encoder: AV1 (best quality) [09:54:16] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:54:16] [DATA AUDIO] ✅ Factory created [09:54:16] [DATA AUDIO] RTCAudioSession locked [09:54:16] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:54:16] [DATA AUDIO] RTCAudioSession unlocked [09:54:16] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:54:16] [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"] [09:54:16] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [09:54:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:54:16] [QUERY] ✅ tempQueryConnection created for iosILUIWU [09:54:16] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:54:16] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:54:16] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:54:16] Did transition [09:54:16] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:54:16] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:54:16] [CHUNK] Merged 978 reactions synchronously [09:54:16] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:16] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [09:54:16] [MIGRATION] No messages need sender_name backfill [09:54:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:54:16] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [09:54:16] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [09:54:16] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [09:54:16] [USER] ✅ User registered successfully [09:54:16] [USER] User registration successful [09:54:16] [GALLERY_DB] ✅ Loaded 503 media messages [09:54:16] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [09:54:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [09:54:16] [INCREMENTAL_SYNC] ✅ No new messages [09:54:16] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [09:54:16] [GALLERY] First 5 after sort (newest first): [09:54:16] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [09:54:16] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [09:54:16] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [09:54:16] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [09:54:16] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [09:54:16] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:54:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19138, 19139, 19140, 19141, 19142] [09:54:16] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:16] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19138, 19139, 19140, 19141, 19142, 19143, 19144, 19145, 19146, 19147] [09:54:16] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 0 → 19138 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19138 → 19139 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19139 → 19140 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19140 → 19141 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19141 → 19142 [09:54:16] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19145 → 19180 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19180 → 19181 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19181 → 19182 [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19183 → 19184 [09:54:16] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:16] [CELL_UPLOAD] → not my message, setting complete [09:54:16] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [09:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19184 → 19185 [09:54:16] [SERVER] Starting reconnect polling (5s interval) [09:54:16] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:54:16] [ICONS] Offset applied: -14.6 [09:54:16] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:54:16] [ICONS] Chat center: (31.2, 87.0) [09:54:16] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:54:16] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:54:16] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:54:16] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:54:16] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:54:16] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:54:16] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:54:16] [ICONS] Screen width: 440.0 [09:54:16] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:54:16] [UNSENT_RETRY] Checking for unsent messages... [09:54:16] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:54:16] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:54:16] [UPLOAD_RECOVERY] Session: ILUIWU [09:54:16] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:54:16] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:54:16] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [09:54:16] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [09:54:16] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [09:54:16] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [09:54:16] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [09:54:16] [PENDING_UPLOAD] Total pending upload messages: 0 [09:54:16] [UNSENT_RETRY] No unsent messages found [09:54:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:54:16] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:54:16] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:54:16] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [09:54:16] [UPLOAD_RECOVERY] ✅ All media files verified on server [09:54:16] new_session POST ok: token len=157 [09:54:16] HELLO → sent (fetched token, role=query) [09:54:16] [SIG] hello_ok received for query connection - ready to query agents [09:54:16] [SIG] get_agents request sent for sessionId=ILUIWU [09:54:16] [SIG] get_agents request sent for sessionId=iosILUIWU [09:54:16] [SERVER] Stopped reconnect polling [09:54:16] [SIG] agents_list received: [] [09:54:16] [SIG] agents_list received: [] [09:54:16] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [09:54:16] [READBY_ENRICH] Enriched 50 messages with readBy data [09:54:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19138, 19139, 19140, 19141, 19142] [09:54:17] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:17] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19138, 19139, 19140, 19141, 19142, 19143, 19144, 19145, 19146, 19147] [09:54:17] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:17] [CELL_UPLOAD] → not my message, setting complete [09:54:17] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [09:54:21] [INFO] Current channel: 'ILUIWU' [09:54:21] [KEYCHAIN] ✅ Password retrieved for channel: ILUIWU [09:54:21] [INFO] Retrieved password from keychain: length=7 [09:54:24] [SECURITY] Saved real session: ILUIWU2 [09:54:24] [KEYCHAIN] ✅ Password deleted for channel: ILUIWU2 [09:54:24] [KEYCHAIN] ✅ Password saved for channel: ILUIWU2 [09:54:24] [CHANNEL_SWITCH] 🔄 handleChannelChanged received: newChannel='ILUIWU2', role='viewer' [09:54:25] [INFO] Device registered to 'ILUIWU2': HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":1} [09:54:25] [CHANNEL_SWITCH] ⏹️ Stopped event polling timer [09:54:25] [CHANNEL_SWITCH] 🔄 Old sessionId='ILUIWU', switching to 'ILUIWU2' [09:54:25] [CHANNEL_SWITCH] 🗑️ Cleared local DB for old session 'ILUIWU' [09:54:25] [CHANNEL_SWITCH] 🗑️ Cleared memory arrays [09:54:25] [SECURITY] Saved real session: ILUIWU2 [09:54:25] [CHANNEL_SWITCH] ✅ Updated sessionId to 'ILUIWU2' [09:54:25] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:54:25] [CLIENT_SIG] Disconnecting [09:54:25] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:25] [CHANNEL_SWITCH] 🔌 Reconnected client signaling to 'ILUIWU2' [09:54:25] [CHANNEL_SWITCH] 📤 Calling refreshAllFromServer... [09:54:25] [REFRESH_ALL] 🔄 refreshAllFromServer called from: channelSwitch, currentMsgCount=0 [09:54:25] [REFRESH_ALL] 📸 Captured 0 message IDs before request [09:54:25] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU2&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:54:25] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:54:25] [CLIENT_SIG] WebSocket closed with code 1001 [09:54:25] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:54:25] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:54:25] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:54:25] [CLIENT_SIG] WebSocket opened [09:54:25] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:54:25] [CLIENT_SIG] Connected! clientId=lbmktKVB541UH-sg [09:54:25] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:54:25] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:54:25] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:25] [PENDING_UPLOAD] Total pending upload messages: 0 [09:54:25] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [09:54:25] DOWNLOADIIING t_8f2a2de52768ee96.jpg [09:54:25] DOWNLOADIIING t_674db2cc35314166.jpg [09:54:25] DOWNLOADIIING t_6864b3095b79fd0d.jpg [09:54:25] ReloadData 14 (all 4 media thumbnails loaded) - applying tab 3 filtering [09:54:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=0, first5Ids=[] [09:54:26] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 0 messages [09:54:26] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [] [09:54:26] [RELOAD_TAB] ⚠️ allMessagesWithReadBy is EMPTY - falling back to DB [09:54:26] [RELOAD_TAB] Loaded 50 messages from DB (limited) [09:54:26] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 0 → 1744 [09:54:26] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 1744 → 4195 [09:54:26] [LIFECYCLE] App resigning active - cleared crash flag [09:54:26] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=10572 [09:54:26] [REFRESH_ALL] 📊 Server returned 10572 messages [09:54:26] [REFRESH_ALL] 📊 Final merge: server=10572, preserved=0, total=10572 [09:54:26] [REFRESH_ALL] 📊 Displaying 50 of 10572 messages, hasMore=true [09:54:26] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [09:54:26] [CHANNEL_SWITCH] ✅ Completion handler called! allMessagesWithReadBy.count=50, currentTabIndex=3 [09:54:26] [CHANNEL_SWITCH] 🔄 Switching tab UI to tab 0 [09:54:26] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:54:26] [CHANNEL_SWITCH] ✅ Channel switch complete! [09:54:26] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:26] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:54:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:54:26] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:26] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:26] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:26] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:54:27] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:54:27] [SECURITY] Saved background timestamp [09:54:27] [LIFECYCLE] App entering background - cleared crash flag [09:54:27] [CLIENT_SIG] Disconnecting [09:54:27] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:54:27] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:27] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:54:27] [WS] Canceling WebSocket for query connection to iosILUIWU [09:54:27] In cleanupPeer [09:54:27] In cleanupPeer [09:54:27] [LIFECYCLE] WebRTC audio disabled [09:54:27] [LIFECYCLE] AVAudioSession deactivated [09:54:27] [LIFECYCLE] All connections stopped [09:54:27] [CLIENT_SIG] WebSocket closed with code 1001 [09:54:27] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:54:27] [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/} [09:54:27] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:54:27] [SERVER] Stopped reconnect polling [09:54:27] Will request stop of video 0 [09:54:27] Will request stop of video 0 [09:54:27] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:54:27] [WS] Query connection error - cleaning up all agent connections and views [09:54:27] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:54:27] [WS] Query connection failed - cleaning up all agent connections and views [09:54:28] [CRASH] No crash detected [09:54:28] [FONT] Roboto fonts loaded successfully: Roboto-Regular [09:54:28] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [09:54:28] [GIPHY] SDK not available - using REST API fallback [09:54:28] [BACKGROUND] Background fetch enabled [09:54:28] [CLEANUP] No old timer messages to delete [09:54:28] [SECURITY] Initial launch - within timeout (1.1192560195922852s < 300.0s) [09:54:28] [AUTH] Starting PIN authentication [09:54:28] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [09:54:28] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:28] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [09:54:28] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:54:28] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:54:28] [USER] ✅ User registered successfully [09:54:28] [PUSH] User registration after token update: success [09:54:29] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:54:29] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:54:29] [CLIENT_SIG] WebSocket opened [09:54:29] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [09:54:29] [CLIENT_SIG] Connected! clientId=XC8Y4EqKpsbzoxmw [09:54:29] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [09:54:29] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [09:54:29] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:29] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=17161)... [09:54:29] [PRELOAD] No messages or parse error [09:54:30] [PIN_AUTH] Correct PIN [09:54:30] [SECURITY] Restored real session: ILUIWU2 [09:54:30] [SECURITY] Restored real session: ILUIWU2 [09:54:30] [SECURITY] Saved real session: ILUIWU2 [09:54:30] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [09:54:30] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:54:30] Documents Directory: /var/mobile/Containers/Data/Application/A47A5FFA-E0A7-4C62-BEA2-22D916EA9B09/Documents [09:54:30] [UPLOAD_QUEUE] Found 0 pending uploads to resume [09:54:30] [THEME] Applying current theme [09:54:30] [CHAT] Applied day theme (mode: day) [09:54:30] [SECURITY] Saved real session: ILUIWU2 [09:54:30] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [09:54:30] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [09:54:30] [NETWORK] Network monitor started [09:54:30] [NETWORK] Status changed: connected [09:54:30] Did transition [09:54:30] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [09:54:30] [VIEWER] Screen lock enabled - normal idle behavior [09:54:30] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [09:54:30] [VCC] ========== VideoConnectionClass INIT ========== [09:54:30] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [09:54:30] [DATA AUDIO] ========== setupWebRTC() START ========== [09:54:30] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [09:54:30] [DATA AUDIO] Creating encoder/decoder factories... [09:54:30] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [09:54:30] [CODEC] Viewer selected encoder: AV1 (best quality) [09:54:30] [DATA AUDIO] Creating RTCPeerConnectionFactory... [09:54:30] [DATA AUDIO] ✅ Factory created [09:54:30] [DATA AUDIO] RTCAudioSession locked [09:54:30] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [09:54:30] [DATA AUDIO] RTCAudioSession unlocked [09:54:30] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [09:54:30] [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"] [09:54:30] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [09:54:30] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:54:30] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [09:54:30] [VIEWER_INIT] Already have 50 messages - just filtering for tab [09:54:30] [EVENT_POLL] Event polling disabled - using WebSocket events instead [09:54:30] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [09:54:30] Did transition [09:54:30] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [09:54:30] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:54:30] [CHUNK] Merged 978 reactions synchronously [09:54:30] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:30] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [09:54:30] [MIGRATION] Found 3 messages needing sender_name backfill [09:54:30] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [09:54:30] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [09:54:30] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [09:54:30] [GALLERY_DB] ✅ Loaded 8 media messages [09:54:30] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [09:54:30] [GALLERY] First 5 after sort (newest first): [09:54:30] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [09:54:30] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [09:54:30] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [09:54:30] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [09:54:30] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:54:30] [SERVER] Starting reconnect polling (5s interval) [09:54:30] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:54:30] [ICONS] Offset applied: -14.6 [09:54:30] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:54:30] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:54:30] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:30] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:30] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:54:30] [MIGRATION] Failed to parse user names response [09:54:30] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:54:30] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=17161, maxMemoryId=17161 [09:54:30] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [09:54:30] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:30] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:54:30] [INCREMENTAL_SYNC] ✅ No new messages [09:54:30] [ICONS] Chat center: (31.2, 87.0) [09:54:30] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:54:30] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:54:30] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:54:30] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:54:30] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:54:30] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:54:30] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:54:30] [ICONS] Screen width: 440.0 [09:54:30] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:54:30] [UNSENT_RETRY] Checking for unsent messages... [09:54:30] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:54:30] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:54:30] [UPLOAD_RECOVERY] Session: ILUIWU2 [09:54:30] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:54:30] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:54:30] [UPLOAD_RECOVERY] No recent media messages to check on server [09:54:30] [PENDING_UPLOAD] Total pending upload messages: 0 [09:54:30] [UNSENT_RETRY] No unsent messages found [09:54:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [09:54:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:54:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:54:31] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [09:54:31] [USER] ✅ User registered successfully [09:54:31] [USER] User registration successful [09:54:31] new_session POST ok: token len=159 [09:54:31] HELLO → sent (fetched token, role=query) [09:54:31] [SIG] hello_ok received for query connection - ready to query agents [09:54:31] [SIG] get_agents request sent for sessionId=ILUIWU2 [09:54:31] [SIG] get_agents request sent for sessionId=iosILUIWU2 [09:54:31] [SERVER] Stopped reconnect polling [09:54:31] [SIG] agents_list received: [] [09:54:31] [SIG] agents_list received: [] [09:54:31] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [09:54:31] [READBY_ENRICH] Enriched 50 messages with readBy data [09:54:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:54:31] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:31] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:31] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:31] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:54:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[1744, 4195, 1781, 1817, 1818] [09:54:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:54:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:33] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [09:54:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [09:54:34] [MENU] dismissAnyExistingMenu called [09:54:34] [MENU] dismissAnyExistingMenu completed [09:54:34] [CELL_UPLOAD] configure: msgId=3275, file=979ed1b3bb8031c5.heic, senderId=96488CEA-CEE8-4DD8-AD91-6475B3A94A3E, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:34] [CELL_UPLOAD] → not my message, setting complete [09:54:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=979ed1b3bb8031c5.heic, overlayExists=true [09:54:34] [SCROLL_BTN] Showing button - 386pt from bottom > half 379pt [09:54:35] [MENU] dismissAnyExistingMenu called [09:54:35] [MENU] dismissAnyExistingMenu completed [09:54:37] [LIFECYCLE] App resigning active - cleared crash flag [09:54:37] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:54:37] [SECURITY] Saved background timestamp [09:54:37] [LIFECYCLE] App entering background - cleared crash flag [09:54:37] [CLIENT_SIG] Disconnecting [09:54:37] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:54:37] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[1744, 4195, 1781, 1817, 1818, 1819, 1820, 1821, 1822, 1823] [09:54:37] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=0 [09:54:37] [WS] Canceling WebSocket for query connection to iosILUIWU2 [09:54:37] In cleanupPeer [09:54:37] In cleanupPeer [09:54:37] [LIFECYCLE] WebRTC audio disabled [09:54:37] [LIFECYCLE] AVAudioSession deactivated [09:54:37] [LIFECYCLE] All connections stopped [09:54:38] [CLIENT_SIG] WebSocket closed with code 1001 [09:54:38] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:54:38] [SERVER] Stopped reconnect polling [09:54:38] [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/} [09:54:38] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:54:38] Will request stop of video 0 [09:54:38] Will request stop of video 0 [09:54:38] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:54:38] [WS] Query connection error - cleaning up all agent connections and views [09:54:38] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:54:38] [WS] Query connection failed - cleaning up all agent connections and views [09:54:38] [PIP] Removing 0 tracks from PiP for connection 0 [09:54:38] [PIP] ✅ All tracks removed for connection 0 [09:54:38] [PIP] Removing 0 tracks from PiP for connection 0 [09:54:38] [PIP] ✅ All tracks removed for connection 0 [09:54:38] [CLEANUP] ======================================== [09:54:38] [CLEANUP] Cleaning up all agent connections and views [09:54:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:54:38] [CLEANUP] Stopped and removed 0 video connections [09:54:38] [CLEANUP] Removed 0 video views [09:54:38] [CLEANUP] Removed 0 feed scroll views [09:54:38] [CLEANUP] Removed 0 status labels [09:54:38] [CLEANUP] Reset agent query state [09:54:38] [CLEANUP] Updated page indicator [09:54:38] [CLEANUP] Rebuilt video layout [09:54:38] [CLEANUP] ✅ All agent connections and views cleaned up [09:54:38] [CLEANUP] ======================================== [09:54:38] [SERVER] Skipping reconnect polling - app is in background [09:54:38] [WS] URLSession invalidated successfully [09:54:38] [CLEANUP] ======================================== [09:54:38] [CLEANUP] Cleaning up all agent connections and views [09:54:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:54:38] [CLEANUP] Stopped and removed 0 video connections [09:54:38] [CLEANUP] Removed 0 video views [09:54:38] [CLEANUP] Removed 0 feed scroll views [09:54:38] [CLEANUP] Removed 0 status labels [09:54:38] [CLEANUP] Reset agent query state [09:54:38] [CLEANUP] Updated page indicator [09:54:38] [CLEANUP] Rebuilt video layout [09:54:38] [CLEANUP] ✅ All agent connections and views cleaned up [09:54:38] [CLEANUP] ======================================== [09:54:38] [SERVER] Skipping reconnect polling - app is in background[10:14:18] [LOG] Pruned 542 entries older than 3 hours [10:14:18] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:14:18] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:14:18] [GIPHY] SDK not available - using REST API fallback [10:14:18] [BACKGROUND] Background fetch enabled [10:14:18] [CLEANUP] No old timer messages to delete [10:14:18] [SECURITY] Initial launch - timeout exceeded (1180.920429944992s > 300.0s) [10:14:18] [AUTH] Starting PIN authentication [10:14:18] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [10:14:18] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:14:18] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:14:18] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU2","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:14:18] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:14:18] [USER] ✅ User registered successfully [10:14:18] [PUSH] User registration after token update: success [10:14:18] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:14:18] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:14:19] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=17161)... [10:14:19] [CLIENT_SIG] WebSocket opened [10:14:19] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [10:14:19] [CLIENT_SIG] Connected! clientId=eMOnIWm1SgnssUt5 [10:14:19] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [10:14:19] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:19] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:14:19] [PRELOAD] No messages or parse error [10:14:36] [PIN_AUTH] Correct PIN [10:14:36] [SECURITY] Restored real session: ILUIWU2 [10:14:36] [SECURITY] Restored real session: ILUIWU2 [10:14:36] [SECURITY] Saved real session: ILUIWU2 [10:14:36] [SCENE] Launched directly to chat view with sessionId: ILUIWU2 [10:14:36] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:14:36] Documents Directory: /var/mobile/Containers/Data/Application/BFC32460-9DB4-424E-95C9-61FB5022C510/Documents [10:14:36] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:14:36] [THEME] Applying current theme [10:14:36] [CHAT] Applied day theme (mode: day) [10:14:36] [SECURITY] Saved real session: ILUIWU2 [10:14:36] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [10:14:36] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:14:36] [NETWORK] Network monitor started [10:14:36] [NETWORK] Status changed: connected [10:14:36] Did transition [10:14:36] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU2 [10:14:36] [VIEWER] Screen lock enabled - normal idle behavior [10:14:36] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU2 [10:14:36] [VCC] ========== VideoConnectionClass INIT ========== [10:14:36] [VCC] Session: iosILUIWU2, ViewIdx: 0, AgentId: nil [10:14:36] [DATA AUDIO] ========== setupWebRTC() START ========== [10:14:36] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:14:36] [DATA AUDIO] Creating encoder/decoder factories... [10:14:36] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:14:36] [CODEC] Viewer selected encoder: AV1 (best quality) [10:14:36] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:14:36] [DATA AUDIO] ✅ Factory created [10:14:36] [DATA AUDIO] RTCAudioSession locked [10:14:36] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:14:36] [DATA AUDIO] RTCAudioSession unlocked [10:14:36] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:14:36] [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"] [10:14:36] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU2 [10:14:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:14:36] [QUERY] ✅ tempQueryConnection created for iosILUIWU2 [10:14:36] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:14:36] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:14:36] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:14:36] Did transition [10:14:36] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:14:36] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:14:36] [CHUNK] Merged 978 reactions synchronously [10:14:36] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:14:36] [GALLERY_DB] Loading ALL media messages for session: ILUIWU2 [10:14:36] [MIGRATION] Found 3 messages needing sender_name backfill [10:14:36] [GALLERY_DB] Raw datesent for msg 4147: '2025-12-07 13:57:55' [10:14:36] [GALLERY_DB] Raw datesent for msg 3275: '2025-12-04 12:57:27' [10:14:36] [GALLERY_DB] Raw datesent for msg 3258: '2025-12-04 11:07:25' [10:14:36] [GALLERY_DB] ✅ Loaded 8 media messages [10:14:36] [GALLERY] Filtered 8 -> 4 (only with local thumbnails) [10:14:36] [GALLERY] First 5 after sort (newest first): [10:14:36] [GALLERY] 0: id=4147, date=2025-12-07 13:57:55, file=8f9a7578f1011fa7.png [10:14:36] [GALLERY] 1: id=3275, date=2025-12-04 12:57:27, file=979ed1b3bb8031c5.heic [10:14:36] [GALLERY] 2: id=3258, date=2025-12-04 11:07:25, file=46824a6556317ee6.mov [10:14:36] [GALLERY] 3: id=2616, date=2025-11-29 16:12:09, file=92668b65c604182e.jpeg [10:14:36] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:14:36] [SERVER] Starting reconnect polling (5s interval) [10:14:36] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:14:36] [ICONS] Offset applied: -14.6 [10:14:36] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:14:36] [MIGRATION] Failed to parse user names response [10:14:36] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:14:36] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=17161, maxMemoryId=17161 [10:14:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17161 [10:14:36] [USER] ✅ User registered successfully [10:14:36] [USER] User registration successful [10:14:36] [INCREMENTAL_SYNC] ✅ No new messages [10:14:36] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:14:36] [UNSENT_RETRY] Checking for unsent messages... [10:14:36] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:14:36] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:14:36] [UPLOAD_RECOVERY] Session: ILUIWU2 [10:14:36] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:14:36] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:14:36] [UPLOAD_RECOVERY] No recent media messages to check on server [10:14:36] [PENDING_UPLOAD] Total pending upload messages: 0 [10:14:36] [UNSENT_RETRY] No unsent messages found [10:14:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17161, 17159, 17158, 17157, 14693] [10:14:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:14:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689, 14688] [10:14:36] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:14:37] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:37] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:37] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:37] [ICONS] Chat center: (31.2, 87.0) [10:14:37] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:14:37] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:14:37] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:14:37] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:14:37] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:14:37] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:14:37] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:14:37] [ICONS] Screen width: 440.0 [10:14:37] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [10:14:37] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:14:37] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:14:37] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU2 [10:14:37] new_session POST ok: token len=159 [10:14:37] HELLO → sent (fetched token, role=query) [10:14:37] [SIG] hello_ok received for query connection - ready to query agents [10:14:37] [SIG] get_agents request sent for sessionId=ILUIWU2 [10:14:37] [SIG] get_agents request sent for sessionId=iosILUIWU2 [10:14:37] [SERVER] Stopped reconnect polling [10:14:37] [SIG] agents_list received: [] [10:14:37] [SIG] agents_list received: [] [10:14:37] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:14:37] [READBY_ENRICH] Enriched 50 messages with readBy data [10:14:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17161, 17159, 17158, 17157, 14693] [10:14:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:14:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689, 14688] [10:14:38] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:38] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:38] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:39] [LIFECYCLE] App resigning active - cleared crash flag [10:14:39] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:14:39] [SECURITY] Saved background timestamp [10:14:39] [LIFECYCLE] App entering background - cleared crash flag [10:14:39] [CLIENT_SIG] Disconnecting [10:14:39] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:14:39] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689, 14688] [10:14:39] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=0 [10:14:39] [WS] Canceling WebSocket for query connection to iosILUIWU2 [10:14:39] In cleanupPeer [10:14:39] In cleanupPeer [10:14:39] [LIFECYCLE] WebRTC audio disabled [10:14:39] [LIFECYCLE] AVAudioSession deactivated [10:14:39] [LIFECYCLE] All connections stopped [10:14:39] [SERVER] Stopped reconnect polling [10:14:39] [CLIENT_SIG] WebSocket closed with code 1001 [10:14:39] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:14:39] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:14:39] [WS] Query connection error - cleaning up all agent connections and views [10:14:39] Will request stop of video 0 [10:14:39] Will request stop of video 0 [10:14:39] [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/} [10:14:39] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:14:39] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:14:39] [WS] Query connection failed - cleaning up all agent connections and views [10:14:39] [CLEANUP] ======================================== [10:14:39] [CLEANUP] Cleaning up all agent connections and views [10:14:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:14:39] [CLEANUP] Stopped and removed 0 video connections [10:14:39] [CLEANUP] Removed 0 video views [10:14:39] [CLEANUP] Removed 0 feed scroll views [10:14:39] [CLEANUP] Removed 0 status labels [10:14:39] [CLEANUP] Reset agent query state [10:14:39] [CLEANUP] Updated page indicator [10:14:39] [CLEANUP] Rebuilt video layout [10:14:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:14:39] [CLEANUP] ======================================== [10:14:39] [SERVER] Skipping reconnect polling - app is in background [10:14:39] [WS] URLSession invalidated successfully [10:14:39] [PIP] Removing 0 tracks from PiP for connection 0 [10:14:39] [PIP] ✅ All tracks removed for connection 0 [10:14:39] [PIP] Removing 0 tracks from PiP for connection 0 [10:14:39] [PIP] ✅ All tracks removed for connection 0 [10:14:39] [CLEANUP] ======================================== [10:14:39] [CLEANUP] Cleaning up all agent connections and views [10:14:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:14:39] [CLEANUP] Stopped and removed 0 video connections [10:14:39] [CLEANUP] Removed 0 video views [10:14:39] [CLEANUP] Removed 0 feed scroll views [10:14:39] [CLEANUP] Removed 0 status labels [10:14:39] [CLEANUP] Reset agent query state [10:14:39] [CLEANUP] Updated page indicator [10:14:39] [CLEANUP] Rebuilt video layout [10:14:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:14:39] [CLEANUP] ======================================== [10:14:39] [SERVER] Skipping reconnect polling - app is in background [10:14:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU2 [10:14:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:14:41] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU2 [10:14:41] HELLO → sent (cached token, role=query) [10:14:41] [SIG] hello_ok received for query connection - ready to query agents [10:14:41] [SIG] get_agents request sent for sessionId=ILUIWU2 [10:14:41] [SIG] get_agents request sent for sessionId=iosILUIWU2 [10:14:41] [SERVER] Stopped reconnect polling [10:14:41] [SIG] agents_list received: [] [10:14:41] [SIG] agents_list received: [] [10:14:44] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:14:44] [CLIENT_SIG] WebSocket opened [10:14:44] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [10:14:44] [CLIENT_SIG] Connected! clientId=ThkBKUL5oM5QNHfd [10:14:44] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [10:14:44] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:44] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:14:46] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:48] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:49] [PUSH] Silent push received [10:14:49] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:14:49 +0000, appState=2, message_id=19195 [10:14:49] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:14:49] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:14:49 +0000 [10:14:49] [PUSH_TRACE] ⬇️ Processing embedded message_id=19195 [10:14:49] [PUSH_EMBED] 📩 Received embedded message: id=19195, type=0, sender=Lolo [10:14:49] [PUSH_TRACE] ⬇️ Message details: text="Msg1...", datesent=2026-01-26 09:14:48 [10:14:49] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [10:14:49] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19195 [10:14:49] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19195 [10:14:49] [PUSH_EMBED] ✅ Saved message 19195 to local DB (sync) [10:14:49] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19195 [10:14:49] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19195 [10:14:49] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19195 [10:14:49] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [10:14:49] [PUSH_EMBED] Created new cache with embedded message 19195 [10:14:49] [PUSH_TRACE] 📦 ✅ Created new cache with message 19195 [10:14:49] [PUSH_TRACE] 📦 EXITING cache update queue for message 19195 [10:14:49] [PUSH_EMBED] Fetching evolution data for message 19195 in background [10:14:49] [PUSH_EMBED] ✅ Fully processed message 19195 [10:14:49] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19195 [10:14:49] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19195], handled=true [10:14:49] [PUSH] Embedded message handled instantly from silent push [10:14:49] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:14:49] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19195 [10:14:49] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:14:49] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:14:49] [PUSH_TRACE] 👁️ Received message id=19195, text="Msg1..." [10:14:49] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:14:49] [PUSH_TRACE] 👁️ BEFORE insert: 50 messages, first 5 IDs: [17161, 17159, 17158, 17157, 14693] [10:14:49] [PUSH_TRACE] 👁️ Inserted message 19195 at index 0 [10:14:49] [PUSH_UI] Inserted message 19195 into UI (now 51 messages) [10:14:49] [PUSH_TRACE] 👁️ AFTER insert: 51 messages, first 5 IDs: [19195, 17161, 17159, 17158, 17157] [10:14:49] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [10:14:49] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:49] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:14:48"; "file_name" = ""; message = Msg1; "message_id" = 19195; "message_type" = 0; "prev_session_message_id" = 17161; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19195, AnyHashable("operation_type"): 0] [10:14:49] [PUSH_EMBED_VC] Message 19195 already in memory - skipping [10:14:49] [PUSH] ⚡ Embedded message handled directly in ViewController [10:14:49] [PUSH] Parsed message_id: 19195 [10:14:49] [PUSH] Parsed operation_type: 0 [10:14:49] [PUSH] Taking direct action: opType=0, messageId=19195 [10:14:49] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19195 [10:14:49] [PUSH] ⚡ Message 19195 already in memory - skipping duplicate notification entirely [10:14:49] [PUSH_EMBED] Got evolution data for message 19195, saving to local DB [10:14:49] [PUSH_EMBED] Saved evolution data for message 19195 [10:14:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19195, 17161, 17159, 17158, 17157] [10:14:49] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:14:49] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:49] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:49] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:49] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:50] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:52] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [10:14:52] [WS] Query connection error - cleaning up all agent connections and views [10:14:52] [CLEANUP] ======================================== [10:14:52] [CLEANUP] Cleaning up all agent connections and views [10:14:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:14:52] [CLEANUP] Stopped and removed 0 video connections [10:14:52] [CLEANUP] Removed 0 video views [10:14:52] [CLEANUP] Removed 0 feed scroll views [10:14:52] [CLEANUP] Removed 0 status labels [10:14:52] [CLEANUP] Reset agent query state [10:14:52] [CLEANUP] Updated page indicator [10:14:52] [CLEANUP] Rebuilt video layout [10:14:52] [CLEANUP] ✅ All agent connections and views cleaned up [10:14:52] [CLEANUP] ======================================== [10:14:52] [SERVER] Skipping reconnect polling - app is in background [10:14:52] [PUSH] Notification tapped - session_id: ILUIWU2 [10:14:52] [PUSH] Max message_id before tap: 19195 [10:14:52] [PUSH] Stored pending session: ILUIWU2 [10:14:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:14:52 +0000 [10:14:52] [PUSH_TRACE] ⬇️ Processing embedded message_id=19195 [10:14:52] [PUSH_EMBED] 📩 Received embedded message: id=19195, type=0, sender=Lolo [10:14:52] [PUSH_TRACE] ⬇️ Message details: text="Msg1...", datesent=2026-01-26 09:14:48 [10:14:52] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [10:14:52] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19195 [10:14:52] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19195 [10:14:52] [PUSH_EMBED] ✅ Saved message 19195 to local DB (sync) [10:14:52] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19195 [10:14:52] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19195 [10:14:52] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19195 [10:14:52] [PUSH_TRACE] 📦 Cache state: valid=true, count=1, IDs=[19195] [10:14:52] [PUSH_TRACE] 📦 ⚠️ Message 19195 already in cache, skipping insert [10:14:52] [PUSH_TRACE] 📦 EXITING cache update queue for message 19195 [10:14:52] [PUSH_EMBED] Fetching evolution data for message 19195 in background [10:14:52] [PUSH_EMBED] ✅ Fully processed message 19195 [10:14:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19195 [10:14:52] [PUSH] Embedded message handled instantly on tap [10:14:52] [PUSH] Fetching server messages since_id=19195 to catch coalesced notifications on tap [10:14:52] [SECURITY] Timeout check: elapsed=12.613593816757202s, timeout=300.0s [10:14:52] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [10:14:52] [PUSH_PRELOAD] Fetching up to 50 messages since_id=19195 to catch coalesced notifications [10:14:52] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:14:52] [PUSH_PRELOAD] Fetching messages for instant display cache [10:14:52] [LIFECYCLE] App entering foreground - restoring connections [10:14:52] [PUSH_TRACE] 🔄 FOREGROUND: memory has 51 msgs, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [PUSH_TRACE] 🔄 FOREGROUND: cache has 1 msgs, valid=true, IDs=[19195] [10:14:52] [UPLOAD_RETRY] No pending uploads to retry [10:14:52] [PUSH_EMBED] Got evolution data for message 19195, saving to local DB [10:14:52] [LIFECYCLE] Merged 978 reactions from local DB [10:14:52] [LIFECYCLE] WebRTC audio re-enabled [10:14:52] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:14:52] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [10:14:52] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:14:52] [VIEWER] Reconnecting after background - querying agents [10:14:52] [UNSENT_RETRY] Checking for unsent messages... [10:14:52] [PUSH_EMBED] Saved evolution data for message 19195 [10:14:52] [PENDING_UPLOAD] Total pending upload messages: 0 [10:14:52] [UNSENT_RETRY] No unsent messages found [10:14:52] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:14:52] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:14:52] [PUSH_TRACE] 👁️ Received message id=19195, text="Msg1..." [10:14:52] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:14:52] [PUSH_UI] Message 19195 already in memory - skipping insert [10:14:52] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:14:52] [PUSH_PRELOAD] No messages or parse error [10:14:52] [PUSH] Server fetch on tap completed (success=false) [10:14:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19195, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_data"): { datesent = "2026-01-26 09:14:48"; "file_name" = ""; message = Msg1; "message_id" = 19195; "message_type" = 0; "prev_session_message_id" = 17161; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("operation_type"): 0] [10:14:52] [PUSH_EMBED_VC] Message 19195 already in memory - skipping [10:14:52] [PUSH] ⚡ Embedded message handled directly in ViewController [10:14:52] [PUSH] Parsed message_id: 19195 [10:14:52] [PUSH] Parsed operation_type: 0 [10:14:52] [PUSH] Taking direct action: opType=0, messageId=19195 [10:14:52] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19195 [10:14:52] [PUSH] ⚡ Message 19195 already in memory - skipping duplicate notification entirely [10:14:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19195, 17161, 17159, 17158, 17157] [10:14:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:14:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:52] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:52] [CLIENT_SIG] Event received: type=0 messageId=19195 [10:14:52] [WS_EVENT] Received event: type=0, messageId=19195 [10:14:52] [WS_EVENT] 📨 New message notification (msgId=19195) - triggering incremental refresh, currentMsgCount=51 [10:14:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:14:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19195, maxMemoryId=19195 [10:14:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19195 [10:14:52] [INCREMENTAL_SYNC] ✅ No new messages [10:14:52] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:14:52] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:14:52] [SECURITY] Within timeout - cleared background flag [10:14:52] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:14:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [PUSH] handlePollEventsNotification userInfo: [:] [10:14:52] [PUSH] No message_id in userInfo [10:14:52] [PUSH] No operation_type in userInfo [10:14:52] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:14:52] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=1, IDs=[19195] [10:14:52] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [FAST_REFRESH] Already have 51 messages in memory [10:14:52] [FAST_REFRESH] maxMemoryId=19195, maxLocalId=19195 [10:14:52] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:14:52] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:14:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:14:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19195, maxMemoryId=19195 [10:14:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19195 [10:14:52] [INCREMENTAL_SYNC] ✅ No new messages [10:14:52] [FAST_REFRESH] Incremental sync complete - 51 messages [10:14:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19195, 17161, 17159, 17158, 17157] [10:14:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:14:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:52] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:52] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:53] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:14:53] [FOREGROUND] Enriched 0 messages with readBy data from server [10:14:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19195, 17161, 17159, 17158, 17157] [10:14:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:14:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:53] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:53] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:53] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17161 → 19195 [10:14:53] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:14:53] [FAST_REFRESH] Enriched 51 messages with readBy data [10:14:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19195, 17161, 17159, 17158, 17157] [10:14:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:14:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:53] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:14:53] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:14:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:14:53] [MUTE] Status sent to server: muted=1, response code=200 [10:14:53] [MUTE] Status sent to server: muted=1, response code=200 [10:14:54] [PUSH] Silent push received [10:14:54] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:14:54 +0000, appState=0, message_id=nil [10:14:54] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19195] [10:14:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:14:54 +0000 [10:14:54] [PUSH_EMBED] No embedded message_data in notification [10:14:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:14:54] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19195], handled=false [10:14:54] [PUSH] No embedded data, pre-loading messages from server [10:14:54] [PUSH_PRELOAD] Fetching messages for instant display cache [10:14:54] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:14:54] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [10:14:54] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:54] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19195] [10:14:54] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:14:54] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:54] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:14:54] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:14:54] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:54] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19195, AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [10:14:54] [PUSH] Parsed message_id: 19195 [10:14:54] [PUSH] Parsed operation_type: 3 [10:14:54] [PUSH] Taking direct action: opType=3, messageId=19195 [10:14:54] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19195 [10:14:55] [LIFECYCLE] App resigning active - cleared crash flag [10:14:55] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:14:56] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:14:56] [SECURITY] Saved background timestamp [10:14:56] [LIFECYCLE] App entering background - cleared crash flag [10:14:56] [CLIENT_SIG] Disconnecting [10:14:56] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:14:56] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:14:56] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=3 [10:14:56] [WS] Canceling WebSocket for query connection to iosILUIWU2 [10:14:56] In cleanupPeer [10:14:56] In cleanupPeer [10:14:56] [LIFECYCLE] WebRTC audio disabled [10:14:56] [LIFECYCLE] AVAudioSession deactivated [10:14:56] [LIFECYCLE] All connections stopped [10:14:56] [CLIENT_SIG] WebSocket closed with code 1001 [10:14:56] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:14:56] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:14:56] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:14:56] [SERVER] Stopped reconnect polling [10:14:56] [WS] URLSession invalidated successfully [10:14:56] Will request stop of video 0 [10:14:56] Will request stop of video 0 [10:14:56] [PIP] Removing 0 tracks from PiP for connection 0 [10:14:56] [PIP] ✅ All tracks removed for connection 0 [10:14:56] [PIP] Removing 0 tracks from PiP for connection 0 [10:14:56] [PIP] ✅ All tracks removed for connection 0 [10:15:00] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:15:00] [CLIENT_SIG] WebSocket opened [10:15:00] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [10:15:00] [CLIENT_SIG] Connected! clientId=p8IutZOqFzgb0_0K [10:15:00] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [10:15:00] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:00] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:15:00] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:01] [PUSH] Silent push received [10:15:01] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:01 +0000, appState=2, message_id=19196 [10:15:01] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:15:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:01 +0000 [10:15:01] [PUSH_TRACE] ⬇️ Processing embedded message_id=19196 [10:15:01] [PUSH_EMBED] 📩 Received embedded message: id=19196, type=0, sender=Lolo [10:15:01] [PUSH_TRACE] ⬇️ Message details: text="Msg2...", datesent=2026-01-26 09:15:00 [10:15:01] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [10:15:01] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19196 [10:15:01] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19196 [10:15:01] [PUSH_EMBED] ✅ Saved message 19196 to local DB (sync) [10:15:01] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19196 [10:15:01] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19196 [10:15:01] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19196 [10:15:01] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690, 14689] [10:15:01] [PUSH_EMBED] Inserted message 19196 into existing cache (now 51 messages) [10:15:01] [PUSH_TRACE] 📦 ✅ Inserted message 19196, cache now has IDs: [19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:01] [PUSH_TRACE] 📦 EXITING cache update queue for message 19196 [10:15:01] [PUSH_EMBED] Fetching evolution data for message 19196 in background [10:15:01] [PUSH_EMBED] ✅ Fully processed message 19196 [10:15:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19196 [10:15:01] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690], handled=true [10:15:01] [PUSH] Embedded message handled instantly from silent push [10:15:01] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:15:01] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19196 [10:15:01] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:15:01] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:15:01] [PUSH_TRACE] 👁️ Received message id=19196, text="Msg2..." [10:15:01] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:15:01] [PUSH_TRACE] 👁️ BEFORE insert: 51 messages, first 5 IDs: [19195, 17161, 17159, 17158, 17157] [10:15:01] [PUSH_TRACE] 👁️ Inserted message 19196 at index 0 [10:15:01] [PUSH_UI] Inserted message 19196 into UI (now 52 messages) [10:15:01] [PUSH_TRACE] 👁️ AFTER insert: 52 messages, first 5 IDs: [19196, 19195, 17161, 17159, 17158] [10:15:01] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [10:15:01] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:01] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19196, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:15:00"; "file_name" = ""; message = Msg2; "message_id" = 19196; "message_type" = 0; "prev_session_message_id" = 19195; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2] [10:15:01] [PUSH_EMBED_VC] Message 19196 already in memory - skipping [10:15:01] [PUSH] ⚡ Embedded message handled directly in ViewController [10:15:01] [PUSH] Parsed message_id: 19196 [10:15:01] [PUSH] Parsed operation_type: 0 [10:15:01] [PUSH] Taking direct action: opType=0, messageId=19196 [10:15:01] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19196 [10:15:01] [PUSH] ⚡ Message 19196 already in memory - skipping duplicate notification entirely [10:15:01] [PUSH_EMBED] Got evolution data for message 19196, saving to local DB [10:15:01] [PUSH_EMBED] Saved evolution data for message 19196 [10:15:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19196, 19195, 17161, 17159, 17158] [10:15:01] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:15:01] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:01] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:01] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:01] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:15:01] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19195 → 19196 [10:15:02] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:04] [CLIENT_SIG] Event received: type=0 messageId=19196 [10:15:04] [WS_EVENT] Received event: type=0, messageId=19196 [10:15:04] [WS_EVENT] 📨 New message notification (msgId=19196) - triggering incremental refresh, currentMsgCount=52 [10:15:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:15:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19196, maxMemoryId=19196 [10:15:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19196 [10:15:04] [INCREMENTAL_SYNC] ✅ No new messages [10:15:04] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [10:15:05] [PUSH] Silent push received [10:15:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:05 +0000, appState=2, message_id=nil [10:15:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:05 +0000 [10:15:05] [PUSH_EMBED] No embedded message_data in notification [10:15:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:15:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690], handled=false [10:15:05] [PUSH] No embedded data, pre-loading messages from server [10:15:05] [PUSH_PRELOAD] Fetching messages for instant display cache [10:15:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:15:05] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [10:15:05] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:05] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:05] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [4195] [10:15:05] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[4195] [10:15:05] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:05] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:15:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:15:05] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19196, AnyHashable("aps"): { "content-available" = 1; }] [10:15:05] [PUSH] Parsed message_id: 19196 [10:15:05] [PUSH] Parsed operation_type: 3 [10:15:05] [PUSH] Taking direct action: opType=3, messageId=19196 [10:15:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19196 [10:15:08] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:09] [CLIENT_SIG] Event received: type=3 messageId=19196 [10:15:09] [WS_EVENT] Received event: type=3, messageId=19196 [10:15:09] [WS_EVENT] Read receipt for message 19196 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:15:14] [PUSH] Silent push received [10:15:14] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:14 +0000, appState=2, message_id=19197 [10:15:14] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:14 +0000 [10:15:14] [PUSH_TRACE] ⬇️ Processing embedded message_id=19197 [10:15:14] [PUSH_EMBED] 📩 Received embedded message: id=19197, type=0, sender=Lolo [10:15:14] [PUSH_TRACE] ⬇️ Message details: text="Msg3...", datesent=2026-01-26 09:15:13 [10:15:14] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [10:15:14] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19197 [10:15:14] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19197 [10:15:14] [PUSH_EMBED] ✅ Saved message 19197 to local DB (sync) [10:15:14] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19197 [10:15:14] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19197 [10:15:14] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19197 [10:15:14] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691, 14690] [10:15:14] [PUSH_EMBED] Inserted message 19197 into existing cache (now 52 messages) [10:15:14] [PUSH_TRACE] 📦 ✅ Inserted message 19197, cache now has IDs: [19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [10:15:14] [PUSH_TRACE] 📦 EXITING cache update queue for message 19197 [10:15:14] [PUSH_EMBED] Fetching evolution data for message 19197 in background [10:15:14] [PUSH_EMBED] ✅ Fully processed message 19197 [10:15:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19197 [10:15:14] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691], handled=true [10:15:14] [PUSH] Embedded message handled instantly from silent push [10:15:14] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:15:14] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19197 [10:15:14] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:15:14] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:15:14] [PUSH_TRACE] 👁️ Received message id=19197, text="Msg3..." [10:15:14] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:15:14] [PUSH_TRACE] 👁️ BEFORE insert: 52 messages, first 5 IDs: [19196, 19195, 17161, 17159, 17158] [10:15:14] [PUSH_TRACE] 👁️ Inserted message 19197 at index 0 [10:15:14] [PUSH_UI] Inserted message 19197 into UI (now 53 messages) [10:15:14] [PUSH_TRACE] 👁️ AFTER insert: 53 messages, first 5 IDs: [19197, 19196, 19195, 17161, 17159] [10:15:14] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [10:15:14] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [10:15:14] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19197, AnyHashable("message_data"): { datesent = "2026-01-26 09:15:13"; "file_name" = ""; message = Msg3; "message_id" = 19197; "message_type" = 0; "prev_session_message_id" = 19196; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }] [10:15:14] [PUSH_EMBED_VC] Message 19197 already in memory - skipping [10:15:14] [PUSH] ⚡ Embedded message handled directly in ViewController [10:15:14] [PUSH] Parsed message_id: 19197 [10:15:14] [PUSH] Parsed operation_type: 0 [10:15:14] [PUSH] Taking direct action: opType=0, messageId=19197 [10:15:14] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19197 [10:15:14] [PUSH] ⚡ Message 19197 already in memory - skipping duplicate notification entirely [10:15:14] [PUSH_EMBED] Got evolution data for message 19197, saving to local DB [10:15:14] [PUSH_EMBED] Saved evolution data for message 19197 [10:15:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19197, 19196, 19195, 17161, 17159] [10:15:14] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:15:14] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [10:15:14] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:15:17] [CLIENT_SIG] Event received: type=0 messageId=19197 [10:15:17] [WS_EVENT] Received event: type=0, messageId=19197 [10:15:17] [WS_EVENT] 📨 New message notification (msgId=19197) - triggering incremental refresh, currentMsgCount=53 [10:15:17] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [10:15:17] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19197, maxMemoryId=19197 [10:15:17] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19197 [10:15:17] [INCREMENTAL_SYNC] ✅ No new messages [10:15:17] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [10:15:25] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:27] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:27] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:29] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:30] [CLIENT_SIG] Typing start from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:32] [CLIENT_SIG] Typing stop from: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:15:34] [PUSH] Silent push received [10:15:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:34 +0000, appState=2, message_id=19198 [10:15:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [10:15:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:34 +0000 [10:15:34] [PUSH_TRACE] ⬇️ Processing embedded message_id=19198 [10:15:34] [PUSH_EMBED] 📩 Received embedded message: id=19198, type=0, sender=Lolo [10:15:34] [PUSH_TRACE] ⬇️ Message details: text="Msg4...", datesent=2026-01-26 09:15:32 [10:15:34] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU2, currentSession=ILUIWU2 [10:15:34] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19198 [10:15:34] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19198 [10:15:34] [PUSH_EMBED] ✅ Saved message 19198 to local DB (sync) [10:15:34] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19198 [10:15:34] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19198 [10:15:34] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19198 [10:15:34] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692, 14691] [10:15:34] [PUSH_EMBED] Inserted message 19198 into existing cache (now 53 messages) [10:15:34] [PUSH_TRACE] 📦 ✅ Inserted message 19198, cache now has IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:34] [PUSH_TRACE] 📦 EXITING cache update queue for message 19198 [10:15:34] [PUSH_EMBED] Fetching evolution data for message 19198 in background [10:15:34] [PUSH_EMBED] ✅ Fully processed message 19198 [10:15:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19198 [10:15:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692], handled=true [10:15:34] [PUSH] Embedded message handled instantly from silent push [10:15:34] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:15:34] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19198 [10:15:34] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:15:34] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:15:34] [PUSH_TRACE] 👁️ Received message id=19198, text="Msg4..." [10:15:34] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=3F6A8511-914A-4BE0-9540-3582F1C2DD43, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:15:34] [PUSH_TRACE] 👁️ BEFORE insert: 53 messages, first 5 IDs: [19197, 19196, 19195, 17161, 17159] [10:15:34] [PUSH_TRACE] 👁️ Inserted message 19198 at index 0 [10:15:34] [PUSH_UI] Inserted message 19198 into UI (now 54 messages) [10:15:34] [PUSH_TRACE] 👁️ AFTER insert: 54 messages, first 5 IDs: [19198, 19197, 19196, 19195, 17161] [10:15:34] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [10:15:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:15:32"; "file_name" = ""; message = Msg4; "message_id" = 19198; "message_type" = 0; "prev_session_message_id" = 19197; "sender_id" = "3F6A8511-914A-4BE0-9540-3582F1C2DD43"; "sender_name" = Lolo; "session_id" = ILUIWU2; timer = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19198, AnyHashable("operation_type"): 0] [10:15:34] [PUSH_EMBED_VC] Message 19198 already in memory - skipping [10:15:34] [PUSH] ⚡ Embedded message handled directly in ViewController [10:15:34] [PUSH] Parsed message_id: 19198 [10:15:34] [PUSH] Parsed operation_type: 0 [10:15:34] [PUSH] Taking direct action: opType=0, messageId=19198 [10:15:34] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19198 [10:15:34] [PUSH] ⚡ Message 19198 already in memory - skipping duplicate notification entirely [10:15:34] [PUSH_EMBED] Got evolution data for message 19198, saving to local DB [10:15:34] [PUSH_EMBED] Saved evolution data for message 19198 [10:15:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:15:34] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:15:34] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:34] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:34] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:15:42] [CLIENT_SIG] Event received: type=0 messageId=19198 [10:15:42] [WS_EVENT] Received event: type=0, messageId=19198 [10:15:42] [WS_EVENT] 📨 New message notification (msgId=19198) - triggering incremental refresh, currentMsgCount=54 [10:15:42] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:15:42] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19198, maxMemoryId=19198 [10:15:42] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19198 [10:15:42] [INCREMENTAL_SYNC] ✅ No new messages [10:15:42] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [10:15:51] [SECURITY] Timeout check: elapsed=55.07273483276367s, timeout=300.0s [10:15:51] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [10:15:51] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:15:51] [LIFECYCLE] App entering foreground - restoring connections [10:15:51] [PUSH_TRACE] 🔄 FOREGROUND: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [PUSH_TRACE] 🔄 FOREGROUND: cache has 53 msgs, valid=true, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [UPLOAD_RETRY] No pending uploads to retry [10:15:51] [LIFECYCLE] Merged 978 reactions from local DB [10:15:51] [LIFECYCLE] WebRTC audio re-enabled [10:15:51] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:15:51] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [10:15:51] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:15:51] [VIEWER] Reconnecting after background - querying agents [10:15:51] [UNSENT_RETRY] Checking for unsent messages... [10:15:51] [PENDING_UPLOAD] Total pending upload messages: 0 [10:15:51] [UNSENT_RETRY] No unsent messages found [10:15:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:15:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:15:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:15:51] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:15:51] [SECURITY] Within timeout - cleared background flag [10:15:51] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:15:51] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [PUSH] handlePollEventsNotification userInfo: [:] [10:15:51] [PUSH] No message_id in userInfo [10:15:51] [PUSH] No operation_type in userInfo [10:15:51] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:15:51] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [PUSH_TRACE] 📬 POLL: memory state: count=54, first 10 IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [FAST_REFRESH] Already have 54 messages in memory [10:15:51] [FAST_REFRESH] maxMemoryId=19198, maxLocalId=19198 [10:15:51] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:15:51] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:15:51] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:15:51] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19198, maxMemoryId=19198 [10:15:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19198 [10:15:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:15:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:15:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:51] [CELL_UPLOAD] configure: msgId=4147, file=8f9a7578f1011fa7.png, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=8f9a7578f1011fa7.png, overlayExists=true [10:15:51] [INCREMENTAL_SYNC] ✅ No new messages [10:15:51] [FAST_REFRESH] Incremental sync complete - 54 messages [10:15:52] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:15:52] [FOREGROUND] Enriched 1 messages with readBy data from server [10:15:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:15:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:15:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:52] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19196 → 19197 [10:15:52] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19197 → 19198 [10:15:52] [MENU] dismissAnyExistingMenu called [10:15:52] [MENU] dismissAnyExistingMenu completed [10:15:52] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:15:52] [FAST_REFRESH] Enriched 54 messages with readBy data [10:15:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:15:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:15:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PUSH] Silent push received [10:15:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:53 +0000, appState=0, message_id=nil [10:15:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:53 +0000 [10:15:53] [PUSH_EMBED] No embedded message_data in notification [10:15:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:15:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692], handled=false [10:15:53] [PUSH] No embedded data, pre-loading messages from server [10:15:53] [PUSH_PRELOAD] Fetching messages for instant display cache [10:15:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:15:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [10:15:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [1817, 1781, 4195] [10:15:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[1817, 1781, 4195] [10:15:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [10:15:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:15:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19197] [10:15:53] [PUSH] Parsed message_id: 19197 [10:15:53] [PUSH] Parsed operation_type: 3 [10:15:53] [PUSH] Taking direct action: opType=3, messageId=19197 [10:15:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19197 [10:15:54] [PUSH] Silent push received [10:15:54] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:15:54 +0000, appState=0, message_id=nil [10:15:54] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:15:54 +0000 [10:15:54] [PUSH_EMBED] No embedded message_data in notification [10:15:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:15:54] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692], handled=false [10:15:54] [PUSH] No embedded data, pre-loading messages from server [10:15:54] [PUSH_PRELOAD] Fetching messages for instant display cache [10:15:54] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:15:54] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU2 [10:15:54] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:54] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:54] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [1817, 1781, 4195] [10:15:54] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[1817, 1781, 4195] [10:15:54] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:54] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [10:15:54] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:15:54] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:15:54] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 19198] [10:15:54] [PUSH] Parsed message_id: 19198 [10:15:54] [PUSH] Parsed operation_type: 3 [10:15:54] [PUSH] Taking direct action: opType=3, messageId=19198 [10:15:54] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19198 [10:15:57] [LOG] Long press on chat icon detected! Triggering log upload... [10:15:58] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:16:00] [LOG] Uploading log as '2026-01-26-10-16-s-Laurent.log' (805 KB) to server... [10:16:01] [LOG] Upload HTTP status: 200 [10:16:01] [LOG] Upload successful: 2026-01-26-10-16-s-Laurent.log [10:16:01] [LOG] Skipping cross-device log request (description doesn't end with '2') [10:16:03] [CLIENT_SIG] Event received: type=3 messageId=19198 [10:16:03] [WS_EVENT] Received event: type=3, messageId=19198 [10:16:03] [WS_EVENT] Read receipt for message 19198 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:16:03] [CLIENT_SIG] Event received: type=3 messageId=19197 [10:16:03] [WS_EVENT] Received event: type=3, messageId=19197 [10:16:03] [WS_EVENT] Read receipt for message 19197 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:16:04] [LIFECYCLE] App resigning active - cleared crash flag [10:16:05] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:16:05] [SECURITY] Saved background timestamp [10:16:05] [LIFECYCLE] App entering background - cleared crash flag [10:16:05] [CLIENT_SIG] Disconnecting [10:16:05] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:16:05] [PUSH_TRACE] 💤 BACKGROUND: memory has 54 messages, first 10 IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:16:05] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU2, wsState=-1 [10:16:05] In cleanupPeer [10:16:05] In cleanupPeer [10:16:05] [LIFECYCLE] WebRTC audio disabled [10:16:05] [LIFECYCLE] AVAudioSession deactivated [10:16:05] [LIFECYCLE] All connections stopped [10:16:05] [CLIENT_SIG] WebSocket closed with code 1001 [10:16:05] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:16:05] [SERVER] Stopped reconnect polling [10:16:05] Will request stop of video 0 [10:16:05] Will request stop of video 0 [10:16:05] [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/} [10:16:05] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:16:05] [PIP] Removing 0 tracks from PiP for connection 0 [10:16:05] [PIP] ✅ All tracks removed for connection 0 [10:16:05] [PIP] Removing 0 tracks from PiP for connection 0 [10:16:05] [PIP] ✅ All tracks removed for connection 0 [10:16:10] [CLIENT_SIG] Connecting to session ILUIWU2 as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:16:10] [CLIENT_SIG] WebSocket opened [10:16:10] [CLIENT_SIG] HELLO sent as client for session ILUIWU2 [10:16:10] [CLIENT_SIG] Connected! clientId=OREAZiZyX-4g4318 [10:16:10] [CLIENT_SIG] Received 2 clients for session 'ILUIWU2' (my session: 'ILUIWU2') [10:16:10] [CLIENT_SIG] - Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) [10:16:10] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:17:59] [CLIENT_SIG] Client disconnected: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) on session 'ILUIWU2' (my session: 'ILUIWU2') [10:17:59] [CLIENT_SIG] Client disconnected: Lolo (3F6A8511-914A-4BE0-9540-3582F1C2DD43) on session 'ILUIWU2' (my session: 'ILUIWU2') [10:18:19] [SECURITY] Timeout check: elapsed=133.69272804260254s, timeout=300.0s [10:18:19] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU2 [10:18:19] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:18:19] [LIFECYCLE] App entering foreground - restoring connections [10:18:19] [PUSH_TRACE] 🔄 FOREGROUND: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [PUSH_TRACE] 🔄 FOREGROUND: cache has 53 msgs, valid=true, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [LIFECYCLE] Away > 2 minutes (133s) - will scroll to bottom [10:18:19] [UPLOAD_RETRY] No pending uploads to retry [10:18:19] [LIFECYCLE] Merged 978 reactions from local DB [10:18:19] [LIFECYCLE] WebRTC audio re-enabled [10:18:19] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:18:19] [CLIENT_SIG] Setting up client signaling for session: ILUIWU2 [10:18:19] [CLIENT_SIG] Already connected/connecting to session ILUIWU2 [10:18:19] [VIEWER] Reconnecting after background - querying agents [10:18:19] [UNSENT_RETRY] Checking for unsent messages... [10:18:19] [PENDING_UPLOAD] Total pending upload messages: 0 [10:18:19] [UNSENT_RETRY] No unsent messages found [10:18:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:18:19] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:18:19] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:18:19] [SECURITY] Within timeout - cleared background flag [10:18:19] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:18:19] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [PUSH] handlePollEventsNotification userInfo: [:] [10:18:19] [PUSH] No message_id in userInfo [10:18:19] [PUSH] No operation_type in userInfo [10:18:19] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:18:19] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=53, IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [PUSH_TRACE] 📬 POLL: memory state: count=54, first 10 IDs=[19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [FAST_REFRESH] Already have 54 messages in memory [10:18:19] [FAST_REFRESH] maxMemoryId=19198, maxLocalId=19198 [10:18:19] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:18:19] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:18:19] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:18:19] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19198, maxMemoryId=19198 [10:18:19] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19198 [10:18:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:18:19] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:18:19] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:19] [INCREMENTAL_SYNC] ✅ No new messages [10:18:19] [FAST_REFRESH] Incremental sync complete - 54 messages [10:18:20] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:18:20] [FOREGROUND] Enriched 0 messages with readBy data from server [10:18:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:18:20] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:18:20] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:20] [COMBINED_FETCH] Loaded 10000 read receipts, 5 messages with reactions [10:18:20] [FAST_REFRESH] Enriched 54 messages with readBy data [10:18:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19198, 19197, 19196, 19195, 17161] [10:18:20] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:18:20] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19198, 19197, 19196, 19195, 17161, 17159, 17158, 17157, 14693, 14692] [10:18:23] [INFO] Current channel: 'ILUIWU2' [10:18:23] [KEYCHAIN] ✅ Password retrieved for channel: ILUIWU2 [10:18:23] [INFO] Retrieved password from keychain: length=7 [10:18:26] [SECURITY] Saved real session: ILUIWU [10:18:26] [KEYCHAIN] ✅ Password deleted for channel: ILUIWU [10:18:26] [KEYCHAIN] ✅ Password saved for channel: ILUIWU [10:18:26] [CHANNEL_SWITCH] 🔄 handleChannelChanged received: newChannel='ILUIWU', role='viewer' [10:18:26] [INFO] Device registered to 'ILUIWU': HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":1} [10:18:26] [CHANNEL_SWITCH] ⏹️ Stopped event polling timer [10:18:26] [CHANNEL_SWITCH] 🔄 Old sessionId='ILUIWU2', switching to 'ILUIWU' [10:18:26] [CHANNEL_SWITCH] 🗑️ Cleared local DB for old session 'ILUIWU2' [10:18:26] [CHANNEL_SWITCH] 🗑️ Cleared memory arrays [10:18:26] [SECURITY] Saved real session: ILUIWU [10:18:26] [CHANNEL_SWITCH] ✅ Updated sessionId to 'ILUIWU' [10:18:26] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:18:26] [CLIENT_SIG] Disconnecting [10:18:26] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:18:26] [CHANNEL_SWITCH] 🔌 Reconnected client signaling to 'ILUIWU' [10:18:26] [CHANNEL_SWITCH] 📤 Calling refreshAllFromServer... [10:18:26] [REFRESH_ALL] 🔄 refreshAllFromServer called from: channelSwitch, currentMsgCount=0 [10:18:26] [REFRESH_ALL] 📸 Captured 0 message IDs before request [10:18:26] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:18:26] [INFO] 🔔 Syncing notification state with server: local=true → server=false [10:18:26] [CLIENT_SIG] WebSocket closed with code 1001 [10:18:26] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:18:26] [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/} [10:18:26] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:18:26] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:18:26] [CLIENT_SIG] WebSocket opened [10:18:26] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:18:26] [CLIENT_SIG] Connected! clientId=LI4Sy8-Vyn3bF4j9 [10:18:26] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:18:26] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:18:26] [PENDING_UPLOAD] Total pending upload messages: 0 [10:18:26] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [10:18:27] DOWNLOADIIING t_A838C8A7-6ACB-4EC0-8A9C-B457DDC4006E.jpg [10:18:27] DOWNLOADIIING t_203DADEC-DEED-4A33-908B-8F8E344461B1.jpg [10:18:27] DOWNLOADIIING t_1b1a78050ebe099b.jpg [10:18:27] DOWNLOADIIING t_bae538c2a3076c11.jpg [10:18:27] DOWNLOADIIING t_ee42d57ffd8ab767.jpg [10:18:27] DOWNLOADIIING t_5cfd84d52271d308.jpg [10:18:27] DOWNLOADIIING t_919f4df51be24b2c.jpg [10:18:27] DOWNLOADIIING t_0f2dda66cccdeadf.jpg [10:18:27] DOWNLOADIIING t_32675c319a37fee7.jpg [10:18:27] DOWNLOADIIING t_a45f085b5a2c50aa.jpg [10:18:27] DOWNLOADIIING t_7cd3ce3d7797eb3c.jpg [10:18:27] DOWNLOADIIING t_abb65f630e55dc61.jpg [10:18:27] DOWNLOADIIING t_2a4c7380908d6595.jpg [10:18:27] DOWNLOADIIING t_1ee77a72ee5013e0.jpg [10:18:27] DOWNLOADIIING t_02f48c94671cc64e.jpg [10:18:27] DOWNLOADIIING t_d0fd8cabebf807d5.jpg [10:18:27] DOWNLOADIIING t_364b0669ed2f3378.jpg [10:18:27] DOWNLOADIIING t_7f3c34ff05eb7c95.jpg [10:18:27] DOWNLOADIIING t_66e5f4c7c82fef18.jpg [10:18:27] DOWNLOADIIING t_f4d9bbe2fc21d5ae.jpg [10:18:27] DOWNLOADIIING t_e1d06c52c18e20ce.jpg [10:18:27] DOWNLOADIIING t_722d39e0d91dd954.jpg [10:18:27] DOWNLOADIIING t_97828ef5de49a612.jpg [10:18:27] DOWNLOADIIING t_98986cbb2cd2ae48.jpg [10:18:27] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=7949 [10:18:27] [REFRESH_ALL] 📊 Server returned 7949 messages [10:18:27] [REFRESH_ALL] 📊 Final merge: server=7949, preserved=0, total=7949 [10:18:27] [REFRESH_ALL] 📊 Displaying 50 of 7949 messages, hasMore=true [10:18:27] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [10:18:27] [CHANNEL_SWITCH] ✅ Completion handler called! allMessagesWithReadBy.count=50, currentTabIndex=3 [10:18:27] [CHANNEL_SWITCH] 🔄 Switching tab UI to tab 0 [10:18:30] [CRASH] No crash detected [10:18:30] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:18:30] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:18:30] [GIPHY] SDK not available - using REST API fallback [10:18:30] [BACKGROUND] Background fetch enabled [10:18:30] [CLEANUP] ✅ Deleted 4 timer messages older than 24h [10:18:30] [SECURITY] Initial launch - within timeout (144.90308094024658s < 300.0s) [10:18:30] [AUTH] Starting PIN authentication [10:18:30] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:18:30] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:18:30] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:18:30] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:18:30] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:18:30] [USER] ✅ User registered successfully [10:18:30] [PUSH] User registration after token update: success [10:18:30] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:18:30] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:18:30] [CLIENT_SIG] WebSocket opened [10:18:30] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:18:30] [CLIENT_SIG] Connected! clientId=6V-3Oz4gmY2CS-5X [10:18:30] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:18:30] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:18:30] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:18:30] [PRELOAD] No messages or parse error [10:18:31] [PIN_AUTH] Correct PIN [10:18:31] [SECURITY] Restored real session: ILUIWU [10:18:31] [SECURITY] Restored real session: ILUIWU [10:18:32] [SECURITY] Saved real session: ILUIWU [10:18:32] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:18:32] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:18:32] Documents Directory: /var/mobile/Containers/Data/Application/BFC32460-9DB4-424E-95C9-61FB5022C510/Documents [10:18:32] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:18:32] [THEME] Applying current theme [10:18:32] [CHAT] Applied day theme (mode: day) [10:18:32] [SECURITY] Saved real session: ILUIWU [10:18:32] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:18:32] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:18:32] [NETWORK] Network monitor started [10:18:32] [NETWORK] Status changed: connected [10:18:32] Did transition [10:18:32] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:18:32] [VIEWER] Screen lock enabled - normal idle behavior [10:18:32] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:18:32] [VCC] ========== VideoConnectionClass INIT ========== [10:18:32] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:18:32] [DATA AUDIO] ========== setupWebRTC() START ========== [10:18:32] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:18:32] [DATA AUDIO] Creating encoder/decoder factories... [10:18:32] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:18:32] [CODEC] Viewer selected encoder: AV1 (best quality) [10:18:32] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:18:32] [DATA AUDIO] ✅ Factory created [10:18:32] [DATA AUDIO] RTCAudioSession locked [10:18:32] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:18:32] [DATA AUDIO] RTCAudioSession unlocked [10:18:32] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:18:32] [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"] [10:18:32] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:18:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:18:32] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:18:32] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:18:32] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:18:32] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:18:32] Did transition [10:18:32] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:18:32] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:18:32] [CHUNK] Merged 980 reactions synchronously [10:18:32] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:18:32] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:18:32] [MIGRATION] No messages need sender_name backfill [10:18:32] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:18:32] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:18:32] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:18:32] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:18:32] [USER] ✅ User registered successfully [10:18:32] [USER] User registration successful [10:18:32] [GALLERY_DB] ✅ Loaded 503 media messages [10:18:32] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:18:32] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:18:32] [INCREMENTAL_SYNC] ✅ No new messages [10:18:32] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:18:32] [GALLERY] First 5 after sort (newest first): [10:18:32] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:18:32] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:18:32] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:18:32] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:18:32] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:18:32] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:18:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:18:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:18:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:18:32] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 0 → 19138 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19138 → 19139 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19139 → 19140 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19140 → 19141 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19141 → 19142 [10:18:32] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:18:32] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:18:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19145 → 19180 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19180 → 19181 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19181 → 19182 [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19183 → 19184 [10:18:32] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:18:32] [CELL_UPLOAD] → not my message, setting complete [10:18:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:18:32] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19184 → 19185 [10:18:32] [SERVER] Starting reconnect polling (5s interval) [10:18:32] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:18:32] [ICONS] Offset applied: -14.6 [10:18:32] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:18:32] [ICONS] Chat center: (31.2, 87.0) [10:18:32] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:18:32] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:18:32] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:18:32] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:18:32] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:18:32] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:18:32] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:18:32] [ICONS] Screen width: 440.0 [10:18:32] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:18:32] [UNSENT_RETRY] Checking for unsent messages... [10:18:32] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:18:32] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:18:32] [UPLOAD_RECOVERY] Session: ILUIWU [10:18:32] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:18:32] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:18:32] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:18:32] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:18:32] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:18:32] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:18:32] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:18:32] [PENDING_UPLOAD] Total pending upload messages: 0 [10:18:32] [UNSENT_RETRY] No unsent messages found [10:18:32] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:18:32] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:18:32] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:18:32] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:18:32] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:18:32] new_session POST ok: token len=157 [10:18:32] HELLO → sent (fetched token, role=query) [10:18:32] [SIG] hello_ok received for query connection - ready to query agents [10:18:32] [SIG] get_agents request sent for sessionId=ILUIWU [10:18:32] [SIG] get_agents request sent for sessionId=iosILUIWU [10:18:32] [SERVER] Stopped reconnect polling [10:18:32] [SIG] agents_list received: [] [10:18:32] [SIG] agents_list received: [] [10:18:32] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:18:32] [READBY_ENRICH] Enriched 50 messages with readBy data [10:18:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:18:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:18:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:18:33] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:18:33] [CELL_UPLOAD] → not my message, setting complete [10:18:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:18:34] [LIFECYCLE] App resigning active - cleared crash flag [10:18:35] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:18:35] [SECURITY] Saved background timestamp [10:18:35] [LIFECYCLE] App entering background - cleared crash flag [10:18:35] [CLIENT_SIG] Disconnecting [10:18:35] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:18:35] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:18:35] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:18:35] [WS] Canceling WebSocket for query connection to iosILUIWU [10:18:35] In cleanupPeer [10:18:35] In cleanupPeer [10:18:35] [LIFECYCLE] WebRTC audio disabled [10:18:35] [LIFECYCLE] AVAudioSession deactivated [10:18:35] [LIFECYCLE] All connections stopped [10:18:35] [SERVER] Stopped reconnect polling [10:18:35] Will request stop of video 0 [10:18:35] [CLIENT_SIG] WebSocket closed with code 1001 [10:18:35] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:18:35] Will request stop of video 0 [10:18:35] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [10:18:35] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:18:35] [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/} [10:18:35] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:18:35] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:18:35] [WS] Query connection failed - cleaning up all agent connections and views [10:18:35] [PIP] Removing 0 tracks from PiP for connection 0 [10:18:35] [PIP] ✅ All tracks removed for connection 0 [10:18:35] [PIP] Removing 0 tracks from PiP for connection 0 [10:18:35] [PIP] ✅ All tracks removed for connection 0 [10:18:35] [CLEANUP] ======================================== [10:18:35] [CLEANUP] Cleaning up all agent connections and views [10:18:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:18:35] [CLEANUP] Stopped and removed 0 video connections [10:18:35] [CLEANUP] Removed 0 video views [10:18:35] [CLEANUP] Removed 0 feed scroll views [10:18:35] [CLEANUP] Removed 0 status labels [10:18:35] [CLEANUP] Reset agent query state [10:18:35] [CLEANUP] Updated page indicator [10:18:35] [CLEANUP] Rebuilt video layout [10:18:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:18:35] [CLEANUP] ======================================== [10:18:35] [SERVER] Skipping reconnect polling - app is in background [10:18:35] [WS] URLSession invalidated successfully [10:18:35] [CLEANUP] ======================================== [10:18:35] [CLEANUP] Cleaning up all agent connections and views [10:18:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:18:35] [CLEANUP] Stopped and removed 0 video connections [10:18:35] [CLEANUP] Removed 0 video views [10:18:35] [CLEANUP] Removed 0 feed scroll views [10:18:35] [CLEANUP] Removed 0 status labels [10:18:35] [CLEANUP] Reset agent query state [10:18:35] [CLEANUP] Updated page indicator [10:18:35] [CLEANUP] Rebuilt video layout [10:18:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:18:35] [CLEANUP] ======================================== [10:18:35] [SERVER] Skipping reconnect polling - app is in background [10:20:02] [SECURITY] Timeout check: elapsed=87.30935502052307s, timeout=300.0s [10:20:02] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:20:02] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:20:02] [LIFECYCLE] App entering foreground - restoring connections [10:20:02] [PUSH_TRACE] 🔄 FOREGROUND: memory has 50 msgs, IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:02] [PUSH_TRACE] 🔄 FOREGROUND: cache has 0 msgs, valid=false, IDs=[] [10:20:02] [UPLOAD_RETRY] No pending uploads to retry [10:20:02] [LIFECYCLE] Merged 980 reactions from local DB [10:20:02] [LIFECYCLE] WebRTC audio re-enabled [10:20:02] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:20:02] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:20:02] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:20:02] [VIEWER] Reconnecting after background - querying agents [10:20:02] [UNSENT_RETRY] Checking for unsent messages... [10:20:02] [PENDING_UPLOAD] Total pending upload messages: 0 [10:20:02] [UNSENT_RETRY] No unsent messages found [10:20:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:20:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:20:02] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:20:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:20:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:20:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:02] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:20:02] [CELL_UPLOAD] → not my message, setting complete [10:20:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:20:02] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:20:02] [SECURITY] Within timeout - cleared background flag [10:20:02] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:20:02] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:02] [PUSH] handlePollEventsNotification userInfo: [:] [10:20:02] [PUSH] No message_id in userInfo [10:20:02] [PUSH] No operation_type in userInfo [10:20:02] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:20:02] [PUSH_TRACE] 📬 POLL: cache state: valid=false, count=0, IDs=[] [10:20:02] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:02] [FAST_REFRESH] Already have 50 messages in memory [10:20:02] [FAST_REFRESH] maxMemoryId=19187, maxLocalId=19187 [10:20:02] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:20:02] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:20:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:20:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:20:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:20:02] [CLIENT_SIG] WebSocket opened [10:20:02] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:20:02] [CLIENT_SIG] Connected! clientId=Xrhso1gKa1OD8DV8 [10:20:02] [INCREMENTAL_SYNC] ✅ No new messages [10:20:02] [FAST_REFRESH] Incremental sync complete - 50 messages [10:20:02] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:20:02] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:20:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:20:02] HELLO → sent (cached token, role=query) [10:20:02] [SIG] hello_ok received for query connection - ready to query agents [10:20:02] [SIG] get_agents request sent for sessionId=ILUIWU [10:20:02] [SIG] get_agents request sent for sessionId=iosILUIWU [10:20:02] [SERVER] Stopped reconnect polling [10:20:02] [SIG] agents_list received: [] [10:20:02] [SIG] agents_list received: [] [10:20:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:20:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:20:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:03] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:20:03] [CELL_UPLOAD] → not my message, setting complete [10:20:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:20:03] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:20:03] [FOREGROUND] Enriched 0 messages with readBy data from server [10:20:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:20:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:20:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:03] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:20:03] [CELL_UPLOAD] → not my message, setting complete [10:20:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:20:03] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:20:03] [FAST_REFRESH] Enriched 50 messages with readBy data [10:20:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:20:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:20:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:03] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:20:03] [CELL_UPLOAD] → not my message, setting complete [10:20:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:20:03] [LIFECYCLE] App resigning active - cleared crash flag [10:20:04] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:20:04] [SECURITY] Saved background timestamp [10:20:04] [LIFECYCLE] App entering background - cleared crash flag [10:20:04] [CLIENT_SIG] Disconnecting [10:20:04] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:20:04] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:20:04] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:20:04] [WS] Canceling WebSocket for query connection to iosILUIWU [10:20:04] In cleanupPeer [10:20:04] In cleanupPeer [10:20:04] [LIFECYCLE] WebRTC audio disabled [10:20:04] [LIFECYCLE] AVAudioSession deactivated [10:20:04] [LIFECYCLE] All connections stopped [10:20:04] [CLIENT_SIG] WebSocket closed with code 1001 [10:20:04] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:20:04] [SERVER] Stopped reconnect polling [10:20:04] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [10:20:04] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:20:04] Will request stop of video 0 [10:20:04] Will request stop of video 0 [10:20:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:20:04] [WS] Query connection failed - cleaning up all agent connections and views [10:20: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/} [10:20:04] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:20:04] [CLEANUP] ======================================== [10:20:04] [CLEANUP] Cleaning up all agent connections and views [10:20:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:20:04] [CLEANUP] Stopped and removed 0 video connections [10:20:04] [CLEANUP] Removed 0 video views [10:20:04] [CLEANUP] Removed 0 feed scroll views [10:20:04] [CLEANUP] Removed 0 status labels [10:20:04] [CLEANUP] Reset agent query state [10:20:04] [CLEANUP] Updated page indicator [10:20:04] [CLEANUP] Rebuilt video layout [10:20:04] [CLEANUP] ✅ All agent connections and views cleaned up [10:20:04] [CLEANUP] ======================================== [10:20:04] [SERVER] Skipping reconnect polling - app is in background [10:20:04] [PIP] Removing 0 tracks from PiP for connection 0 [10:20:04] [PIP] ✅ All tracks removed for connection 0 [10:20:04] [WS] URLSession invalidated successfully [10:20:04] [PIP] Removing 0 tracks from PiP for connection 0 [10:20:04] [PIP] ✅ All tracks removed for connection 0 [10:20:04] [CLEANUP] ======================================== [10:20:04] [CLEANUP] Cleaning up all agent connections and views [10:20:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:20:04] [CLEANUP] Stopped and removed 0 video connections [10:20:04] [CLEANUP] Removed 0 video views [10:20:04] [CLEANUP] Removed 0 feed scroll views [10:20:04] [CLEANUP] Removed 0 status labels [10:20:04] [CLEANUP] Reset agent query state [10:20:04] [CLEANUP] Updated page indicator [10:20:04] [CLEANUP] Rebuilt video layout [10:20:04] [CLEANUP] ✅ All agent connections and views cleaned up [10:20:04] [CLEANUP] ======================================== [10:20:04] [SERVER] Skipping reconnect polling - app is in background [10:25:06] [CRASH] No crash detected [10:25:06] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:25:06] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:25:06] [GIPHY] SDK not available - using REST API fallback [10:25:06] [BACKGROUND] Background fetch enabled [10:25:06] [CLEANUP] No old timer messages to delete [10:25:06] [SECURITY] Initial launch - timeout exceeded (301.6567509174347s > 300.0s) [10:25:06] [AUTH] Starting PIN authentication [10:25:06] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:25:06] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:25:06] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:25:06] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:25:06] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:25:06] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:25:06] [CLIENT_SIG] WebSocket opened [10:25:06] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:25:06] [CLIENT_SIG] Connected! clientId=0-AvuFcF5COFIuqA [10:25:06] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:25:06] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:25:06] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:25:06] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:25:06] [PRELOAD] No messages or parse error [10:25:06] [USER] ✅ User registered successfully [10:25:06] [PUSH] User registration after token update: success [10:25:08] [PIN_AUTH] Correct PIN [10:25:08] [SECURITY] Restored real session: ILUIWU [10:25:08] [SECURITY] Restored real session: ILUIWU [10:25:08] [SECURITY] Saved real session: ILUIWU [10:25:08] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:25:08] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:25:08] Documents Directory: /var/mobile/Containers/Data/Application/5DC696A3-4480-411C-9C0C-103AB1B92C2D/Documents [10:25:08] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:25:08] [THEME] Applying current theme [10:25:08] [CHAT] Applied day theme (mode: day) [10:25:08] [SECURITY] Saved real session: ILUIWU [10:25:08] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:25:08] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:25:08] [NETWORK] Network monitor started [10:25:08] [NETWORK] Status changed: connected [10:25:08] Did transition [10:25:08] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:25:08] [VIEWER] Screen lock enabled - normal idle behavior [10:25:08] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:25:08] [VCC] ========== VideoConnectionClass INIT ========== [10:25:08] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:25:08] [DATA AUDIO] ========== setupWebRTC() START ========== [10:25:08] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:25:08] [DATA AUDIO] Creating encoder/decoder factories... [10:25:08] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:25:08] [CODEC] Viewer selected encoder: AV1 (best quality) [10:25:08] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:25:08] [DATA AUDIO] ✅ Factory created [10:25:08] [DATA AUDIO] RTCAudioSession locked [10:25:08] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:25:08] [DATA AUDIO] RTCAudioSession unlocked [10:25:08] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:25:08] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [10:25:08] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:25:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:25:08] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:25:08] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:25:08] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:25:08] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:25:08] Did transition [10:25:08] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:25:08] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:25:08] [CHUNK] Merged 980 reactions synchronously [10:25:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:25:08] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:25:08] [MIGRATION] No messages need sender_name backfill [10:25:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:25:08] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:25:08] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:25:08] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:25:08] [USER] ✅ User registered successfully [10:25:08] [USER] User registration successful [10:25:08] [GALLERY_DB] ✅ Loaded 503 media messages [10:25:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:25:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:25:08] [INCREMENTAL_SYNC] ✅ No new messages [10:25:08] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:25:08] [GALLERY] First 5 after sort (newest first): [10:25:08] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:25:08] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:25:08] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:25:08] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:25:08] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:25:08] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:25:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:25:08] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:25:08] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:25:08] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:25:08] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:25:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:25:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:25:08] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:25:08] [CELL_UPLOAD] → not my message, setting complete [10:25:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:25:08] [SERVER] Starting reconnect polling (5s interval) [10:25:08] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:25:08] [ICONS] Offset applied: -14.6 [10:25:08] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:25:08] [ICONS] Chat center: (31.2, 87.0) [10:25:08] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:25:08] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:25:08] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:25:08] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:25:08] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:25:08] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:25:08] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:25:08] [ICONS] Screen width: 440.0 [10:25:08] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:25:08] [UNSENT_RETRY] Checking for unsent messages... [10:25:08] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:25:08] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:25:08] [UPLOAD_RECOVERY] Session: ILUIWU [10:25:08] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:25:08] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:25:08] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:25:08] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:25:08] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:25:08] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:25:08] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:25:08] [PENDING_UPLOAD] Total pending upload messages: 0 [10:25:08] [UNSENT_RETRY] No unsent messages found [10:25:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:25:08] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:25:08] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:25:08] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:25:09] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:25:09] new_session POST ok: token len=157 [10:25:09] HELLO → sent (fetched token, role=query) [10:25:09] [SIG] hello_ok received for query connection - ready to query agents [10:25:09] [SIG] get_agents request sent for sessionId=ILUIWU [10:25:09] [SIG] get_agents request sent for sessionId=iosILUIWU [10:25:09] [SERVER] Stopped reconnect polling [10:25:09] [SIG] agents_list received: [] [10:25:09] [SIG] agents_list received: [] [10:25:09] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:25:09] [READBY_ENRICH] Enriched 50 messages with readBy data [10:25:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:25:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:25:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:25:09] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:25:09] [CELL_UPLOAD] → not my message, setting complete [10:25:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:25:56] [MENU] dismissAnyExistingMenu called [10:25:56] [MENU] dismissAnyExistingMenu completed [10:25:56] [MENU] Created button 'Reply' at index 0 [10:25:56] [MENU] Created button 'Edit' at index 1 [10:25:56] [MENU] Created button 'Copy' at index 2 [10:25:56] [MENU] Created button 'Delete' at index 3 [10:25:56] [MENU] Menu added at y=454.5 [10:25:57] [MENU] menuButtonTouchDown - button title: Edit, tag: 1 [10:25:57] [MENU] menuButtonTapped - button title: Edit, tag: 1 [10:25:57] [MENU] Button frame: (0.0, 44.0, 120.0, 44.0), superview: true [10:25:57] [MENU] Found action closure, dismissing menu first [10:25:57] [MENU] dismissAnyExistingMenu called [10:25:57] [MENU] Found menu with tag 9999, removing [10:25:57] [MENU] Removing blur effect [10:25:57] [MENU] Removing floating message snapshot [10:25:57] [MENU] Recorded dismissal time for debounce [10:25:57] [MENU] dismissAnyExistingMenu completed [10:25:57] [MENU] Menu dismissed, executing action [10:25:57] [MENU] Action executed [10:25:57] [SCROLL_BTN] Showing button - 323pt from bottom > half 214pt [10:26:12] ReloadData 11 - applying tab 0 filtering after message edit [10:26:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:26:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:26:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:26:12] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:26:12] [CELL_UPLOAD] → not my message, setting complete [10:26:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:26:13] [CLIENT_SIG] Event received: type=2 messageId=19187 [10:26:13] [CHAT] edit_message.php HTTP 200 ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":19187,"event_type":2} [10:26:13] [WS_EVENT] Received event: type=2, messageId=19187 [10:26:13] [WS_EVENT] Message edited/updated: 19187 [10:26:13] [LIFECYCLE] App resigning active - cleared crash flag [10:26:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:26:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:26:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:26:13] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:26:13] [CELL_UPLOAD] → not my message, setting complete [10:26:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:26:14] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:26:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:26:14] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:26:14] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:26:14] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:26:14] [CELL_UPLOAD] → not my message, setting complete [10:26:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:26:14] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:26:14] [SECURITY] Saved background timestamp [10:26:14] [LIFECYCLE] App entering background - cleared crash flag [10:26:14] [CLIENT_SIG] Disconnecting [10:26:14] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:26:14] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:26:14] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:26:14] [WS] Canceling WebSocket for query connection to iosILUIWU [10:26:14] In cleanupPeer [10:26:14] In cleanupPeer [10:26:14] [LIFECYCLE] WebRTC audio disabled [10:26:14] [LIFECYCLE] AVAudioSession deactivated [10:26:14] [LIFECYCLE] All connections stopped [10:26:14] [CLIENT_SIG] WebSocket closed with code 1001 [10:26:14] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:26:14] [SERVER] Stopped reconnect polling [10:26:14] Will request stop of video 0 [10:26:14] Will request stop of video 0 [10:26:14] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:26:14] [WS] Query connection error - cleaning up all agent connections and views [10:26:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:26:14] [WS] Query connection failed - cleaning up all agent connections and views [10:26:14] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:26:14] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:26:14] [PIP] Removing 0 tracks from PiP for connection 0 [10:26:14] [PIP] ✅ All tracks removed for connection 0 [10:26:14] [PIP] Removing 0 tracks from PiP for connection 0 [10:26:14] [PIP] ✅ All tracks removed for connection 0 [10:26:14] [CLEANUP] ======================================== [10:26:14] [CLEANUP] Cleaning up all agent connections and views [10:26:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:26:14] [CLEANUP] Stopped and removed 0 video connections [10:26:14] [CLEANUP] Removed 0 video views [10:26:14] [CLEANUP] Removed 0 feed scroll views [10:26:14] [CLEANUP] Removed 0 status labels [10:26:14] [CLEANUP] Reset agent query state [10:26:14] [CLEANUP] Updated page indicator [10:26:14] [CLEANUP] Rebuilt video layout [10:26:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:26:14] [CLEANUP] ======================================== [10:26:14] [SERVER] Skipping reconnect polling - app is in background [10:26:14] [WS] URLSession invalidated successfully [10:26:14] [CLEANUP] ======================================== [10:26:14] [CLEANUP] Cleaning up all agent connections and views [10:26:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:26:14] [CLEANUP] Stopped and removed 0 video connections [10:26:14] [CLEANUP] Removed 0 video views [10:26:14] [CLEANUP] Removed 0 feed scroll views [10:26:14] [CLEANUP] Removed 0 status labels [10:26:14] [CLEANUP] Reset agent query state [10:26:14] [CLEANUP] Updated page indicator [10:26:14] [CLEANUP] Rebuilt video layout [10:26:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:26:14] [CLEANUP] ======================================== [10:26:14] [SERVER] Skipping reconnect polling - app is in background [10:26:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:26:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:26:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:26:16] HELLO → sent (cached token, role=query) [10:26:16] [SIG] hello_ok received for query connection - ready to query agents [10:26:16] [SIG] get_agents request sent for sessionId=ILUIWU [10:26:16] [SIG] get_agents request sent for sessionId=iosILUIWU [10:26:16] [SERVER] Stopped reconnect polling [10:26:16] [SIG] agents_list received: [] [10:26:16] [SIG] agents_list received: [] [10:26:16] [CLIENT_SIG] Cannot send typing_stop - not connected [10:26:19] [CRASH] No crash detected [10:26:19] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:26:19] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:26:19] [GIPHY] SDK not available - using REST API fallback [10:26:19] [BACKGROUND] Background fetch enabled [10:26:19] [CLEANUP] No old timer messages to delete [10:26:19] [SECURITY] Initial launch - within timeout (5.2593700885772705s < 300.0s) [10:26:19] [AUTH] Starting PIN authentication [10:26:19] [PUSH] Silent push received [10:26:19] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:26:19 +0000, appState=2, message_id=nil [10:26:19] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:26:19] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:26:19 +0000 [10:26:19] [PUSH_EMBED] No embedded message_data in notification [10:26:19] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:26:19] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:26:19] [PUSH] No embedded data, pre-loading messages from server [10:26:19] [PUSH_PRELOAD] Fetching messages for instant display cache [10:26:19] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:26:19] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:26:19] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:26:19] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:26:19] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:26:20] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:26:20] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:26:20] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:26:20] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:26:20] [USER] ✅ User registered successfully [10:26:20] [PUSH] User registration after token update: success [10:26:20] [PRELOAD] No messages or parse error [10:26:20] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails[10:27:54] [LOG] Pruned 211 entries older than 3 hours [10:27:54] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:27:54] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:27:54] [GIPHY] SDK not available - using REST API fallback [10:27:54] [BACKGROUND] Background fetch enabled [10:27:54] [CLEANUP] No old timer messages to delete [10:27:54] [SECURITY] Initial launch - within timeout (100.16204905509949s < 300.0s) [10:27:54] [AUTH] Starting PIN authentication [10:27:54] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:27:54] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:27:54] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:27:54] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:27:54] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:27:54] [CLIENT_SIG] WebSocket opened [10:27:54] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:27:54] [CLIENT_SIG] Connected! clientId=pItDmCsMrZc2JC5z [10:27:54] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:27:54] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:27:54] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:27:55] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:27:55] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:27:55] [PRELOAD] No messages or parse error [10:27:55] [USER] ✅ User registered successfully [10:27:55] [PUSH] User registration after token update: success [10:27:56] [PIN_AUTH] Correct PIN [10:27:56] [SECURITY] Restored real session: ILUIWU [10:27:56] [SECURITY] Restored real session: ILUIWU [10:27:57] [SECURITY] Saved real session: ILUIWU [10:27:57] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:27:57] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:27:57] Documents Directory: /var/mobile/Containers/Data/Application/1E765B34-A2D0-4A3E-A185-C93BE7981D35/Documents [10:27:57] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:27:57] [THEME] Applying current theme [10:27:57] [CHAT] Applied day theme (mode: day) [10:27:57] [SECURITY] Saved real session: ILUIWU [10:27:57] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:27:57] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:27:57] [NETWORK] Network monitor started [10:27:57] [NETWORK] Status changed: connected [10:27:57] Did transition [10:27:57] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:27:57] [VIEWER] Screen lock enabled - normal idle behavior [10:27:57] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:27:57] [VCC] ========== VideoConnectionClass INIT ========== [10:27:57] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:27:57] [DATA AUDIO] ========== setupWebRTC() START ========== [10:27:57] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:27:57] [DATA AUDIO] Creating encoder/decoder factories... [10:27:57] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:27:57] [CODEC] Viewer selected encoder: AV1 (best quality) [10:27:57] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:27:57] [DATA AUDIO] ✅ Factory created [10:27:57] [DATA AUDIO] RTCAudioSession locked [10:27:57] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:27:57] [DATA AUDIO] RTCAudioSession unlocked [10:27:57] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:27:57] [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"] [10:27:57] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:27:57] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:57] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:27:57] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:27:57] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:27:57] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:27:57] Did transition [10:27:57] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:27:57] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:27:57] [CHUNK] Merged 980 reactions synchronously [10:27:57] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:27:57] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:27:57] [MIGRATION] No messages need sender_name backfill [10:27:57] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:27:57] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:27:57] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:27:57] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:27:57] [GALLERY_DB] ✅ Loaded 503 media messages [10:27:57] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:27:57] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:27:57] [USER] ✅ User registered successfully [10:27:57] [USER] User registration successful [10:27:57] [INCREMENTAL_SYNC] ✅ No new messages [10:27:57] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:27:57] [GALLERY] First 5 after sort (newest first): [10:27:57] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:27:57] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:27:57] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:27:57] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:27:57] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:27:57] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:27:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:27:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:27:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:27:57] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:27:57] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:57] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:27:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:27:57] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:57] [CELL_UPLOAD] → not my message, setting complete [10:27:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:27:57] [SERVER] Starting reconnect polling (5s interval) [10:27:57] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:27:57] [ICONS] Offset applied: -14.6 [10:27:57] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:27:57] [ICONS] Chat center: (31.2, 87.0) [10:27:57] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:27:57] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:27:57] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:27:57] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:27:57] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:27:57] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:27:57] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:27:57] [ICONS] Screen width: 440.0 [10:27:57] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:27:57] [UNSENT_RETRY] Checking for unsent messages... [10:27:57] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:27:57] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:27:57] [UPLOAD_RECOVERY] Session: ILUIWU [10:27:57] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:27:57] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:27:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:27:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:27:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:27:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:27:57] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:27:57] [PENDING_UPLOAD] Total pending upload messages: 0 [10:27:57] [UNSENT_RETRY] No unsent messages found [10:27:57] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:57] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:27:57] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:27:57] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:27:57] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:27:57] new_session POST ok: token len=157 [10:27:57] HELLO → sent (fetched token, role=query) [10:27:57] [SIG] hello_ok received for query connection - ready to query agents [10:27:57] [SIG] get_agents request sent for sessionId=ILUIWU [10:27:57] [SIG] get_agents request sent for sessionId=iosILUIWU [10:27:57] [SERVER] Stopped reconnect polling [10:27:57] [SIG] agents_list received: [] [10:27:57] [SIG] agents_list received: [] [10:27:58] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:27:58] [READBY_ENRICH] Enriched 50 messages with readBy data [10:27:58] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:27:58] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:27:58] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:27:58] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:58] [CELL_UPLOAD] → not my message, setting complete [10:27:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:27:59] [REFRESH] Long press on gear icon detected! Triggering full refresh... [10:27:59] [REFRESH_ALL] 🔄 refreshAllFromServer called from: gearLongPress, currentMsgCount=50 [10:27:59] [REFRESH_ALL] 📸 Captured 50 message IDs before request [10:27:59] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:27:59] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:59] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:27:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:27:59] [SCROLL_BTN] Showing button - 429pt from bottom > half 379pt [10:27:59] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:59] [CELL_UPLOAD] → not my message, setting complete [10:27:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [10:27:59] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:59] [CELL_UPLOAD] → not my message, setting complete [10:27:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:28:00] [PENDING_UPLOAD] Total pending upload messages: 0 [10:28:00] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [10:28:00] [TIMER] Preserving 4 played timer IDs before DB refresh [10:28:00] [TIMER] Restored 4 played timer flags after DB refresh [10:28:00] DOWNLOADIIING t_A838C8A7-6ACB-4EC0-8A9C-B457DDC4006E.jpg [10:28:00] DOWNLOADIIING t_203DADEC-DEED-4A33-908B-8F8E344461B1.jpg [10:28:00] DOWNLOADIIING t_1b1a78050ebe099b.jpg [10:28:00] DOWNLOADIIING t_bae538c2a3076c11.jpg [10:28:00] DOWNLOADIIING t_ee42d57ffd8ab767.jpg [10:28:00] DOWNLOADIIING t_5cfd84d52271d308.jpg [10:28:00] DOWNLOADIIING t_919f4df51be24b2c.jpg [10:28:00] DOWNLOADIIING t_0f2dda66cccdeadf.jpg [10:28:00] DOWNLOADIIING t_32675c319a37fee7.jpg [10:28:00] DOWNLOADIIING t_a45f085b5a2c50aa.jpg [10:28:00] DOWNLOADIIING t_7cd3ce3d7797eb3c.jpg [10:28:00] DOWNLOADIIING t_abb65f630e55dc61.jpg [10:28:00] DOWNLOADIIING t_2a4c7380908d6595.jpg [10:28:00] DOWNLOADIIING t_1ee77a72ee5013e0.jpg [10:28:00] DOWNLOADIIING t_02f48c94671cc64e.jpg [10:28:00] DOWNLOADIIING t_d0fd8cabebf807d5.jpg [10:28:00] DOWNLOADIIING t_364b0669ed2f3378.jpg [10:28:00] DOWNLOADIIING t_7f3c34ff05eb7c95.jpg [10:28:00] DOWNLOADIIING t_66e5f4c7c82fef18.jpg [10:28:00] DOWNLOADIIING t_f4d9bbe2fc21d5ae.jpg [10:28:00] DOWNLOADIIING t_e1d06c52c18e20ce.jpg [10:28:00] DOWNLOADIIING t_722d39e0d91dd954.jpg [10:28:00] DOWNLOADIIING t_97828ef5de49a612.jpg [10:28:00] DOWNLOADIIING t_98986cbb2cd2ae48.jpg [10:28:00] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=7949 [10:28:00] [REFRESH_ALL] 📊 Server returned 7949 messages [10:28:00] [REFRESH_ALL] 📊 Final merge: server=7949, preserved=0, total=7949 [10:28:00] [REFRESH_ALL] 📊 Displaying 50 of 7949 messages, hasMore=true [10:28:00] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [10:28:00] [REFRESH] Gear long-press refresh completed - loaded 50 messages [10:28:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:28:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:28:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:28:01] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:28:01] [CELL_UPLOAD] → not my message, setting complete [10:28:01] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:28:02] [MENU] dismissAnyExistingMenu called [10:28:02] [MENU] dismissAnyExistingMenu completed [10:28:02] [SCROLL_BTN] Showing button - 345pt from bottom > half 223pt [10:28:04] ReloadData 14 (all 42 media thumbnails loaded) - applying tab 0 filtering [10:28:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:28:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:28:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:28:04] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:28:04] [CELL_UPLOAD] → not my message, setting complete [10:28:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:28:59] [LIFECYCLE] App resigning active - cleared crash flag [10:29:00] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:29:00] [SECURITY] Saved background timestamp [10:29:00] [LIFECYCLE] App entering background - cleared crash flag [10:29:00] [CLIENT_SIG] Disconnecting [10:29:00] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:29:00] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:29:00] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:29:00] [WS] Canceling WebSocket for query connection to iosILUIWU [10:29:00] In cleanupPeer [10:29:00] In cleanupPeer [10:29:00] [LIFECYCLE] WebRTC audio disabled [10:29:00] [LIFECYCLE] AVAudioSession deactivated [10:29:00] [LIFECYCLE] All connections stopped [10:29:00] [SERVER] Stopped reconnect polling [10:29:00] [CLIENT_SIG] WebSocket closed with code 1001 [10:29:00] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:29:00] Will request stop of video 0 [10:29:00] Will request stop of video 0 [10:29:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [10:29:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:29:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:29:00] [WS] Query connection failed - cleaning up all agent connections and views [10:29:00] [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/} [10:29:00] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:29:00] [PIP] Removing 0 tracks from PiP for connection 0 [10:29:00] [PIP] ✅ All tracks removed for connection 0 [10:29:00] [PIP] Removing 0 tracks from PiP for connection 0 [10:29:00] [PIP] ✅ All tracks removed for connection 0 [10:29:00] [CLEANUP] ======================================== [10:29:00] [CLEANUP] Cleaning up all agent connections and views [10:29:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:29:00] [CLEANUP] Stopped and removed 0 video connections [10:29:00] [CLEANUP] Removed 0 video views [10:29:00] [CLEANUP] Removed 0 feed scroll views [10:29:00] [CLEANUP] Removed 0 status labels [10:29:00] [CLEANUP] Reset agent query state [10:29:00] [CLEANUP] Updated page indicator [10:29:00] [CLEANUP] Rebuilt video layout [10:29:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:29:00] [CLEANUP] ======================================== [10:29:00] [SERVER] Skipping reconnect polling - app is in background [10:29:00] [WS] URLSession invalidated successfully [10:29:00] [CLEANUP] ======================================== [10:29:00] [CLEANUP] Cleaning up all agent connections and views [10:29:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:29:00] [CLEANUP] Stopped and removed 0 video connections [10:29:00] [CLEANUP] Removed 0 video views [10:29:00] [CLEANUP] Removed 0 feed scroll views [10:29:00] [CLEANUP] Removed 0 status labels [10:29:00] [CLEANUP] Reset agent query state [10:29:00] [CLEANUP] Updated page indicator [10:29:00] [CLEANUP] Rebuilt video layout [10:29:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:29:00] [CLEANUP] ======================================== [10:29:00] [SERVER] Skipping reconnect polling - app is in background [10:29:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:29:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:29:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:29:02] HELLO → sent (cached token, role=query) [10:29:02] [SIG] hello_ok received for query connection - ready to query agents [10:29:02] [SIG] get_agents request sent for sessionId=ILUIWU [10:29:02] [SIG] get_agents request sent for sessionId=iosILUIWU [10:29:02] [SERVER] Stopped reconnect polling [10:29:02] [SIG] agents_list received: [] [10:29:02] [SIG] agents_list received: [] [10:29:04] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:29:05] [CLIENT_SIG] WebSocket opened [10:29:05] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:29:05] [CLIENT_SIG] Connected! clientId=aUDhod-j9VVOAt0c [10:29:05] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:29:05] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:29:42] [CRASH] No crash detected [10:29:42] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:29:42] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:29:42] [GIPHY] SDK not available - using REST API fallback [10:29:42] [BACKGROUND] Background fetch enabled [10:29:42] [CLEANUP] ✅ Deleted 4 timer messages older than 24h [10:29:42] [SECURITY] Initial launch - within timeout (42.10107612609863s < 300.0s) [10:29:42] [AUTH] Starting PIN authentication [10:29:42] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:29:42] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:29:42] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:29:42] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:29:42] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:29:42] [USER] ✅ User registered successfully [10:29:42] [PUSH] User registration after token update: success [10:29:42] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:29:42] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:29:42] [CLIENT_SIG] WebSocket opened [10:29:42] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:29:42] [CLIENT_SIG] Connected! clientId=Wr2BYmLt1cV9diej [10:29:42] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:29:42] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:29:42] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:29:42] [PRELOAD] No messages or parse error [10:29:44] [PIN_AUTH] Correct PIN [10:29:44] [SECURITY] Restored real session: ILUIWU [10:29:44] [SECURITY] Restored real session: ILUIWU [10:29:44] [SECURITY] Saved real session: ILUIWU [10:29:44] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:29:44] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:29:44] Documents Directory: /var/mobile/Containers/Data/Application/1E765B34-A2D0-4A3E-A185-C93BE7981D35/Documents [10:29:44] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:29:44] [THEME] Applying current theme [10:29:44] [CHAT] Applied day theme (mode: day) [10:29:44] [SECURITY] Saved real session: ILUIWU [10:29:44] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:29:44] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:29:44] [NETWORK] Network monitor started [10:29:44] [NETWORK] Status changed: connected [10:29:44] Did transition [10:29:44] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:29:44] [VIEWER] Screen lock enabled - normal idle behavior [10:29:44] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:29:44] [VCC] ========== VideoConnectionClass INIT ========== [10:29:44] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:29:44] [DATA AUDIO] ========== setupWebRTC() START ========== [10:29:44] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:29:44] [DATA AUDIO] Creating encoder/decoder factories... [10:29:44] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:29:44] [CODEC] Viewer selected encoder: AV1 (best quality) [10:29:44] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:29:44] [DATA AUDIO] ✅ Factory created [10:29:44] [DATA AUDIO] RTCAudioSession locked [10:29:44] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:29:44] [DATA AUDIO] RTCAudioSession unlocked [10:29:44] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:29:44] [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"] [10:29:44] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:29:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:29:44] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:29:44] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:29:44] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:29:44] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:29:44] Did transition [10:29:44] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:29:44] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:29:44] [CHUNK] Merged 980 reactions synchronously [10:29:44] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:29:44] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:29:44] [MIGRATION] No messages need sender_name backfill [10:29:44] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:29:44] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:29:44] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:29:44] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:29:44] [USER] ✅ User registered successfully [10:29:44] [USER] User registration successful [10:29:44] [GALLERY_DB] ✅ Loaded 503 media messages [10:29:44] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:29:44] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:29:44] [INCREMENTAL_SYNC] ✅ No new messages [10:29:44] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:29:44] [GALLERY] First 5 after sort (newest first): [10:29:44] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:29:44] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:29:44] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:29:44] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:29:44] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:29:44] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:29:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:29:44] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:29:44] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:29:44] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:29:44] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:29:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:29:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:29:44] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:29:44] [CELL_UPLOAD] → not my message, setting complete [10:29:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:29:44] [SERVER] Starting reconnect polling (5s interval) [10:29:44] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:29:44] [ICONS] Offset applied: -14.6 [10:29:44] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:29:44] [ICONS] Chat center: (31.2, 87.0) [10:29:44] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:29:44] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:29:44] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:29:44] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:29:44] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:29:44] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:29:44] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:29:44] [ICONS] Screen width: 440.0 [10:29:44] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:29:44] [UNSENT_RETRY] Checking for unsent messages... [10:29:44] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:29:44] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:29:44] [UPLOAD_RECOVERY] Session: ILUIWU [10:29:44] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:29:44] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:29:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:29:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:29:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:29:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:29:44] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:29:44] [PENDING_UPLOAD] Total pending upload messages: 0 [10:29:44] [UNSENT_RETRY] No unsent messages found [10:29:44] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:29:44] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:29:44] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:29:44] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:29:44] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:29:44] new_session POST ok: token len=157 [10:29:44] HELLO → sent (fetched token, role=query) [10:29:44] [SIG] hello_ok received for query connection - ready to query agents [10:29:44] [SIG] get_agents request sent for sessionId=ILUIWU [10:29:44] [SIG] get_agents request sent for sessionId=iosILUIWU [10:29:44] [SERVER] Stopped reconnect polling [10:29:44] [SIG] agents_list received: [] [10:29:44] [SIG] agents_list received: [] [10:29:45] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:29:45] [READBY_ENRICH] Enriched 50 messages with readBy data [10:29:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:29:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:29:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:29:45] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:29:45] [CELL_UPLOAD] → not my message, setting complete [10:29:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:32:41] [LIFECYCLE] App resigning active - cleared crash flag [10:32:42] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:32:42] [SECURITY] Saved background timestamp [10:32:42] [LIFECYCLE] App entering background - cleared crash flag [10:32:42] [CLIENT_SIG] Disconnecting [10:32:42] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:32:42] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:32:42] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:32:42] [WS] Canceling WebSocket for query connection to iosILUIWU [10:32:42] In cleanupPeer [10:32:42] In cleanupPeer [10:32:42] [LIFECYCLE] WebRTC audio disabled [10:32:42] [LIFECYCLE] AVAudioSession deactivated [10:32:42] [LIFECYCLE] All connections stopped [10:32:42] [CLIENT_SIG] WebSocket closed with code 1001 [10:32:42] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:32:42] [SERVER] Stopped reconnect polling [10:32:42] Will request stop of video 0 [10:32:42] Will request stop of video 0 [10:32:42] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:32:42] [WS] Query connection error - cleaning up all agent connections and views [10:32:42] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:42] [WS] Query connection failed - cleaning up all agent connections and views [10:32:42] [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/} [10:32:42] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:32:42] [PIP] Removing 0 tracks from PiP for connection 0 [10:32:42] [PIP] ✅ All tracks removed for connection 0 [10:32:42] [PIP] Removing 0 tracks from PiP for connection 0 [10:32:42] [PIP] ✅ All tracks removed for connection 0 [10:32:42] [CLEANUP] ======================================== [10:32:42] [CLEANUP] Cleaning up all agent connections and views [10:32:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:42] [CLEANUP] Stopped and removed 0 video connections [10:32:42] [CLEANUP] Removed 0 video views [10:32:42] [CLEANUP] Removed 0 feed scroll views [10:32:42] [CLEANUP] Removed 0 status labels [10:32:42] [CLEANUP] Reset agent query state [10:32:42] [CLEANUP] Updated page indicator [10:32:42] [CLEANUP] Rebuilt video layout [10:32:42] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:42] [CLEANUP] ======================================== [10:32:42] [SERVER] Skipping reconnect polling - app is in background [10:32:42] [WS] URLSession invalidated successfully [10:32:42] [CLEANUP] ======================================== [10:32:42] [CLEANUP] Cleaning up all agent connections and views [10:32:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:42] [CLEANUP] Stopped and removed 0 video connections [10:32:42] [CLEANUP] Removed 0 video views [10:32:42] [CLEANUP] Removed 0 feed scroll views [10:32:42] [CLEANUP] Removed 0 status labels [10:32:42] [CLEANUP] Reset agent query state [10:32:42] [CLEANUP] Updated page indicator [10:32:42] [CLEANUP] Rebuilt video layout [10:32:42] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:42] [CLEANUP] ======================================== [10:32:42] [SERVER] Skipping reconnect polling - app is in background[10:39:42] [LOG] Pruned 417 entries older than 3 hours [10:39:42] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:39:42] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:39:42] [GIPHY] SDK not available - using REST API fallback [10:39:42] [BACKGROUND] Background fetch enabled [10:39:42] [CLEANUP] No old timer messages to delete [10:39:42] [SECURITY] Initial launch - timeout exceeded (420.07590508461s > 300.0s) [10:39:42] [AUTH] Starting PIN authentication [10:39:42] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:39:42] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:39:42] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:39:42] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:39:42] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:39:42] [USER] ✅ User registered successfully [10:39:42] [PUSH] User registration after token update: success [10:39:42] [CLIENT_SIG] WebSocket opened [10:39:42] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:39:42] [CLIENT_SIG] Connected! clientId=JTaiVCoNNPT3dXqv [10:39:42] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:39:42] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:39:42] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:39:42] [PRELOAD] No messages or parse error [10:39:43] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:39:43] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:39:48] [PIN_AUTH] Correct PIN [10:39:48] [SECURITY] Restored real session: ILUIWU [10:39:48] [SECURITY] Restored real session: ILUIWU [10:39:48] [SECURITY] Saved real session: ILUIWU [10:39:48] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:39:48] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:39:48] Documents Directory: /var/mobile/Containers/Data/Application/D7A80AA7-68C0-48F8-8185-01204E5F072D/Documents [10:39:48] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:39:48] [THEME] Applying current theme [10:39:48] [CHAT] Applied day theme (mode: day) [10:39:48] [SECURITY] Saved real session: ILUIWU [10:39:48] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:39:48] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:39:48] [NETWORK] Network monitor started [10:39:48] [NETWORK] Status changed: connected [10:39:48] Did transition [10:39:48] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:39:48] [VIEWER] Screen lock enabled - normal idle behavior [10:39:48] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:39:48] [VCC] ========== VideoConnectionClass INIT ========== [10:39:48] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:39:48] [DATA AUDIO] ========== setupWebRTC() START ========== [10:39:48] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:39:48] [DATA AUDIO] Creating encoder/decoder factories... [10:39:48] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:39:48] [CODEC] Viewer selected encoder: AV1 (best quality) [10:39:48] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:39:48] [DATA AUDIO] ✅ Factory created [10:39:48] [DATA AUDIO] RTCAudioSession locked [10:39:48] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:39:48] [DATA AUDIO] RTCAudioSession unlocked [10:39:48] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:39:48] [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"] [10:39:48] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:39:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:39:48] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:39:48] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:39:48] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:39:48] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:39:48] Did transition [10:39:48] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:39:48] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:39:48] [CHUNK] Merged 980 reactions synchronously [10:39:48] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:39:48] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:39:48] [MIGRATION] No messages need sender_name backfill [10:39:48] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:39:48] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:39:48] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:39:48] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:39:48] [USER] ✅ User registered successfully [10:39:48] [USER] User registration successful [10:39:48] [GALLERY_DB] ✅ Loaded 503 media messages [10:39:48] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:39:48] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:39:48] [INCREMENTAL_SYNC] ✅ No new messages [10:39:48] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:39:48] [GALLERY] First 5 after sort (newest first): [10:39:48] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:39:48] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:39:48] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:39:48] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:39:48] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:39:48] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:39:48] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:39:48] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:39:48] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:39:48] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:39:48] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:39:48] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:39:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:39:48] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:39:48] [CELL_UPLOAD] → not my message, setting complete [10:39:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:39:48] [SERVER] Starting reconnect polling (5s interval) [10:39:48] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:39:48] [ICONS] Offset applied: -14.6 [10:39:48] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:39:48] [ICONS] Chat center: (31.2, 87.0) [10:39:48] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:39:48] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:39:48] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:39:48] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:39:48] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:39:48] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:39:48] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:39:48] [ICONS] Screen width: 440.0 [10:39:48] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:39:48] [UNSENT_RETRY] Checking for unsent messages... [10:39:48] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:39:48] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:39:48] [UPLOAD_RECOVERY] Session: ILUIWU [10:39:48] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:39:48] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:39:48] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:39:48] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:39:48] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:39:48] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:39:48] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:39:48] [PENDING_UPLOAD] Total pending upload messages: 0 [10:39:48] [UNSENT_RETRY] No unsent messages found [10:39:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:39:48] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:39:48] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:39:48] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:39:48] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:39:48] new_session POST ok: token len=157 [10:39:48] HELLO → sent (fetched token, role=query) [10:39:48] [SIG] hello_ok received for query connection - ready to query agents [10:39:48] [SIG] get_agents request sent for sessionId=ILUIWU [10:39:48] [SIG] get_agents request sent for sessionId=iosILUIWU [10:39:48] [SERVER] Stopped reconnect polling [10:39:48] [SIG] agents_list received: [] [10:39:48] [SIG] agents_list received: [] [10:39:49] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:39:49] [READBY_ENRICH] Enriched 50 messages with readBy data [10:39:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:39:49] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:39:49] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:39:49] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:39:49] [CELL_UPLOAD] → not my message, setting complete [10:39:49] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:39:50] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:39:52] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:39:53] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:39:54] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:39:55] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:39:56] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:39:57] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:42:00] [LIFECYCLE] App resigning active - cleared crash flag [10:42:00] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:42:00] [SECURITY] Saved background timestamp [10:42:00] [LIFECYCLE] App entering background - cleared crash flag [10:42:00] [CLIENT_SIG] Disconnecting [10:42:00] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:42:00] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:42:00] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:42:00] [WS] Canceling WebSocket for query connection to iosILUIWU [10:42:00] In cleanupPeer [10:42:00] In cleanupPeer [10:42:00] [LIFECYCLE] WebRTC audio disabled [10:42:00] [LIFECYCLE] AVAudioSession deactivated [10:42:00] [LIFECYCLE] All connections stopped [10:42:00] [SERVER] Stopped reconnect polling [10:42:00] [CLIENT_SIG] WebSocket closed with code 1001 [10:42:00] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:42:00] Will request stop of video 0 [10:42:00] Will request stop of video 0 [10:42:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [10:42:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:42:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:42:00] [WS] Query connection failed - cleaning up all agent connections and views [10:42:00] [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/} [10:42:00] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:42:00] [PIP] Removing 0 tracks from PiP for connection 0 [10:42:00] [PIP] ✅ All tracks removed for connection 0 [10:42:00] [PIP] Removing 0 tracks from PiP for connection 0 [10:42:00] [PIP] ✅ All tracks removed for connection 0 [10:42:00] [CLEANUP] ======================================== [10:42:00] [CLEANUP] Cleaning up all agent connections and views [10:42:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:42:00] [CLEANUP] Stopped and removed 0 video connections [10:42:00] [CLEANUP] Removed 0 video views [10:42:00] [CLEANUP] Removed 0 feed scroll views [10:42:00] [CLEANUP] Removed 0 status labels [10:42:00] [CLEANUP] Reset agent query state [10:42:00] [CLEANUP] Updated page indicator [10:42:00] [CLEANUP] Rebuilt video layout [10:42:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:42:00] [CLEANUP] ======================================== [10:42:00] [SERVER] Skipping reconnect polling - app is in background [10:42:00] [WS] URLSession invalidated successfully [10:42:00] [CLEANUP] ======================================== [10:42:00] [CLEANUP] Cleaning up all agent connections and views [10:42:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:42:00] [CLEANUP] Stopped and removed 0 video connections [10:42:00] [CLEANUP] Removed 0 video views [10:42:00] [CLEANUP] Removed 0 feed scroll views [10:42:00] [CLEANUP] Removed 0 status labels [10:42:00] [CLEANUP] Reset agent query state [10:42:00] [CLEANUP] Updated page indicator [10:42:00] [CLEANUP] Rebuilt video layout [10:42:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:42:00] [CLEANUP] ======================================== [10:42:00] [SERVER] Skipping reconnect polling - app is in background [10:42:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:42:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:42:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:42:02] HELLO → sent (cached token, role=query) [10:42:02] [SIG] hello_ok received for query connection - ready to query agents [10:42:02] [SIG] get_agents request sent for sessionId=ILUIWU [10:42:02] [SIG] get_agents request sent for sessionId=iosILUIWU [10:42:02] [SERVER] Stopped reconnect polling [10:42:02] [SIG] agents_list received: [] [10:42:02] [SIG] agents_list received: [] [10:42:05] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:42:05] [CLIENT_SIG] WebSocket opened [10:42:05] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:42:05] [CLIENT_SIG] Connected! clientId=7e1J00fnNxfTYIFa [10:42:05] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:42:05] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:42:12] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [10:42:12] [WS] Query connection error - cleaning up all agent connections and views [10:42:12] [CLEANUP] ======================================== [10:42:12] [CLEANUP] Cleaning up all agent connections and views [10:42:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:42:12] [CLEANUP] Stopped and removed 0 video connections [10:42:12] [CLEANUP] Removed 0 video views [10:42:12] [CLEANUP] Removed 0 feed scroll views [10:42:12] [CLEANUP] Removed 0 status labels [10:42:12] [CLEANUP] Reset agent query state [10:42:12] [CLEANUP] Updated page indicator [10:42:12] [CLEANUP] Rebuilt video layout [10:42:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:42:12] [CLEANUP] ======================================== [10:42:12] [SERVER] Skipping reconnect polling - app is in background [10:42:48] [CRASH] No crash detected [10:42:48] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:42:48] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:42:48] [GIPHY] SDK not available - using REST API fallback [10:42:48] [BACKGROUND] Background fetch enabled [10:42:48] [CLEANUP] No old timer messages to delete [10:42:48] [SECURITY] Initial launch - within timeout (48.34472894668579s < 300.0s) [10:42:48] [AUTH] Starting PIN authentication [10:42:48] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:42:48] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:42:49] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:42:49] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:42:49] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:42:49] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:42:49] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:42:49] [USER] ✅ User registered successfully [10:42:49] [PUSH] User registration after token update: success [10:42:49] [CLIENT_SIG] WebSocket opened [10:42:49] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:42:49] [CLIENT_SIG] Connected! clientId=PHdk4bvfoTCj-jbU [10:42:49] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:42:49] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:42:49] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:42:49] [PRELOAD] No messages or parse error [10:42:50] [PIN_AUTH] Correct PIN [10:42:50] [SECURITY] Restored real session: ILUIWU [10:42:50] [SECURITY] Restored real session: ILUIWU [10:42:50] [SECURITY] Saved real session: ILUIWU [10:42:50] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:42:50] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:42:50] Documents Directory: /var/mobile/Containers/Data/Application/78FEA22C-1DD4-4245-9FA7-DE272142553C/Documents [10:42:50] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:42:50] [THEME] Applying current theme [10:42:50] [CHAT] Applied day theme (mode: day) [10:42:50] [SECURITY] Saved real session: ILUIWU [10:42:50] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:42:50] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:42:50] [NETWORK] Network monitor started [10:42:50] [NETWORK] Status changed: connected [10:42:50] Did transition [10:42:50] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:42:50] [VIEWER] Screen lock enabled - normal idle behavior [10:42:50] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:42:50] [VCC] ========== VideoConnectionClass INIT ========== [10:42:50] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:42:50] [DATA AUDIO] ========== setupWebRTC() START ========== [10:42:50] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:42:50] [DATA AUDIO] Creating encoder/decoder factories... [10:42:50] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:42:50] [CODEC] Viewer selected encoder: AV1 (best quality) [10:42:50] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:42:50] [DATA AUDIO] ✅ Factory created [10:42:50] [DATA AUDIO] RTCAudioSession locked [10:42:50] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:42:50] [DATA AUDIO] RTCAudioSession unlocked [10:42:50] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:42:50] [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"] [10:42:50] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:42:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:42:50] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:42:50] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:42:50] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:42:50] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:42:50] Did transition [10:42:50] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:42:50] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:42:50] [CHUNK] Merged 980 reactions synchronously [10:42:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:42:50] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:42:50] [MIGRATION] No messages need sender_name backfill [10:42:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:42:50] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:42:50] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:42:50] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:42:50] [USER] ✅ User registered successfully [10:42:50] [USER] User registration successful [10:42:50] [GALLERY_DB] ✅ Loaded 503 media messages [10:42:50] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:42:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:42:50] [INCREMENTAL_SYNC] ✅ No new messages [10:42:50] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:42:50] [GALLERY] First 5 after sort (newest first): [10:42:50] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:42:50] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:42:50] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:42:50] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:42:50] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:42:50] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:42:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:42:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:42:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:42:50] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:42:51] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:42:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:42:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:42:51] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:42:51] [CELL_UPLOAD] → not my message, setting complete [10:42:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:42:51] [SERVER] Starting reconnect polling (5s interval) [10:42:51] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:42:51] [ICONS] Offset applied: -14.6 [10:42:51] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:42:51] [ICONS] Chat center: (31.2, 87.0) [10:42:51] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:42:51] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:42:51] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:42:51] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:42:51] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:42:51] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:42:51] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:42:51] [ICONS] Screen width: 440.0 [10:42:51] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:42:51] [UNSENT_RETRY] Checking for unsent messages... [10:42:51] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:42:51] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:42:51] [UPLOAD_RECOVERY] Session: ILUIWU [10:42:51] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:42:51] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:42:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:42:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:42:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:42:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:42:51] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:42:51] [PENDING_UPLOAD] Total pending upload messages: 0 [10:42:51] [UNSENT_RETRY] No unsent messages found [10:42:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:42:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:42:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:42:51] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:42:51] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:42:51] new_session POST ok: token len=157 [10:42:51] HELLO → sent (fetched token, role=query) [10:42:51] [SIG] hello_ok received for query connection - ready to query agents [10:42:51] [SIG] get_agents request sent for sessionId=ILUIWU [10:42:51] [SIG] get_agents request sent for sessionId=iosILUIWU [10:42:51] [SERVER] Stopped reconnect polling [10:42:51] [SIG] agents_list received: [] [10:42:51] [SIG] agents_list received: [] [10:42:51] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:42:51] [READBY_ENRICH] Enriched 50 messages with readBy data [10:42:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:42:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:42:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:42:51] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:42:51] [CELL_UPLOAD] → not my message, setting complete [10:42:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:42:52] [SCROLL_BTN] Showing button - 308pt from bottom > half 223pt [10:42:55] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:42:57] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:44:57] [CRASH] Previous session did not exit cleanly - crash detected [10:44:57] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:44:57] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:44:57] [GIPHY] SDK not available - using REST API fallback [10:44:57] [BACKGROUND] Background fetch enabled [10:44:57] [CLEANUP] No old timer messages to delete [10:44:57] [AUTH] Starting PIN authentication [10:44:57] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:44:57] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:44:57] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:44:57] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:44:57] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:44:57] [USER] ✅ User registered successfully [10:44:57] [PUSH] User registration after token update: success [10:44:57] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:44:57] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:44:57] [CLIENT_SIG] WebSocket opened [10:44:57] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:44:57] [CLIENT_SIG] Connected! clientId=Tps0qjHZLQRPg6zb [10:44:57] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:44:57] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:44:57] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:44:57] [PRELOAD] No messages or parse error [10:44:58] [PIN_AUTH] Correct PIN [10:44:59] [SECURITY] Restored real session: ILUIWU [10:44:59] [SECURITY] Restored real session: ILUIWU [10:44:59] [SECURITY] Saved real session: ILUIWU [10:44:59] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:44:59] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:44:59] Documents Directory: /var/mobile/Containers/Data/Application/F2B9A637-E4F8-4CD4-B924-BBD9407104B2/Documents [10:44:59] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:44:59] [THEME] Applying current theme [10:44:59] [CHAT] Applied day theme (mode: day) [10:44:59] [SECURITY] Saved real session: ILUIWU [10:44:59] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:44:59] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:44:59] [NETWORK] Network monitor started [10:44:59] [NETWORK] Status changed: connected [10:44:59] Did transition [10:44:59] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:44:59] [VIEWER] Screen lock enabled - normal idle behavior [10:44:59] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:44:59] [VCC] ========== VideoConnectionClass INIT ========== [10:44:59] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:44:59] [DATA AUDIO] ========== setupWebRTC() START ========== [10:44:59] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:44:59] [DATA AUDIO] Creating encoder/decoder factories... [10:44:59] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:44:59] [CODEC] Viewer selected encoder: AV1 (best quality) [10:44:59] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:44:59] [DATA AUDIO] ✅ Factory created [10:44:59] [DATA AUDIO] RTCAudioSession locked [10:44:59] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:44:59] [DATA AUDIO] RTCAudioSession unlocked [10:44:59] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:44:59] [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"] [10:44:59] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:44:59] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:44:59] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:44:59] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:44:59] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:44:59] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:44:59] Did transition [10:44:59] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:44:59] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:44:59] [CHUNK] Merged 980 reactions synchronously [10:44:59] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:44:59] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:44:59] [MIGRATION] No messages need sender_name backfill [10:44:59] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:44:59] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:44:59] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:44:59] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:44:59] [USER] ✅ User registered successfully [10:44:59] [USER] User registration successful [10:44:59] [GALLERY_DB] ✅ Loaded 503 media messages [10:44:59] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:44:59] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:44:59] [INCREMENTAL_SYNC] ✅ No new messages [10:44:59] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:44:59] [GALLERY] First 5 after sort (newest first): [10:44:59] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:44:59] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:44:59] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:44:59] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:44:59] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:44:59] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:44:59] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:44:59] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:44:59] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:44:59] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:44:59] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:44:59] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:44:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:44:59] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:44:59] [CELL_UPLOAD] → not my message, setting complete [10:44:59] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:44:59] [SERVER] Starting reconnect polling (5s interval) [10:44:59] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:44:59] [ICONS] Offset applied: -14.6 [10:44:59] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:44:59] [ICONS] Chat center: (31.2, 87.0) [10:44:59] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:44:59] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:44:59] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:44:59] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:44:59] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:44:59] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:44:59] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:44:59] [ICONS] Screen width: 440.0 [10:44:59] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:44:59] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:44:59] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:44:59] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:44:59] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:44:59] [UNSENT_RETRY] Checking for unsent messages... [10:44:59] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:44:59] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:44:59] [UPLOAD_RECOVERY] Session: ILUIWU [10:44:59] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:44:59] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:44:59] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:44:59] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:44:59] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:44:59] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:44:59] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:44:59] [PENDING_UPLOAD] Total pending upload messages: 0 [10:44:59] [UNSENT_RETRY] No unsent messages found [10:44:59] new_session POST ok: token len=157 [10:44:59] HELLO → sent (fetched token, role=query) [10:44:59] [SIG] hello_ok received for query connection - ready to query agents [10:44:59] [SIG] get_agents request sent for sessionId=ILUIWU [10:44:59] [SIG] get_agents request sent for sessionId=iosILUIWU [10:44:59] [SERVER] Stopped reconnect polling [10:44:59] [SIG] agents_list received: [] [10:44:59] [SIG] agents_list received: [] [10:44:59] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:45:00] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:45:00] [READBY_ENRICH] Enriched 50 messages with readBy data [10:45:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:45:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:45:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:45:00] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:45:00] [CELL_UPLOAD] → not my message, setting complete [10:45:00] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:45:00] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:45:00] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:45:00] [SEARCH] Calling showSearchBar [10:45:00] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:45:00] [SEARCH] ✅ Setting isSearchBarVisible = true [10:45:00] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:45:00] [SEARCH] isSearchBarShowAnimating = true [10:45:00] [SEARCH] Adjusting table contentInset.top by +56.0 [10:45:00] [SEARCH] Focusing search field [10:45:00] [SCROLL_BTN] Showing button - 307pt from bottom > half 223pt [10:45:00] [SEARCH] Animation settled - dragStartContentOffsetY=4990.666666666667, isSearchBarShowAnimating=false [10:45:00] [SEARCH_SCROLL] Hiding search bar (scrolled down by 40.33333333333303pt, current=5031.0, start=4990.666666666667) [10:45:00] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:45:00] [SEARCH] ✅ Setting isSearchBarVisible = false [10:45:00] [SEARCH] Adjusting table contentInset.top by -56.0 [10:45:03] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:45:03] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:45:03] [SEARCH] Calling showSearchBar [10:45:03] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:45:03] [SEARCH] ✅ Setting isSearchBarVisible = true [10:45:03] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:45:03] [SEARCH] isSearchBarShowAnimating = true [10:45:03] [SEARCH] Adjusting table contentInset.top by +56.0 [10:45:04] [SEARCH] Focusing search field [10:45:04] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:45:04] [SEARCH] Animation settled - dragStartContentOffsetY=5084.666666666667, isSearchBarShowAnimating=false [10:45:04] [SEARCH_SCROLL] Hiding search bar (scrolled down by 35.33333333333303pt, current=5120.0, start=5084.666666666667) [10:45:04] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:45:04] [SEARCH] ✅ Setting isSearchBarVisible = false [10:45:04] [SEARCH] Adjusting table contentInset.top by -56.0 [10:46:41] [CRASH] Previous session did not exit cleanly - crash detected [10:46:41] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:46:41] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:46:41] [GIPHY] SDK not available - using REST API fallback [10:46:41] [BACKGROUND] Background fetch enabled [10:46:41] [CLEANUP] No old timer messages to delete [10:46:41] [AUTH] Starting PIN authentication [10:46:41] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:46:41] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:46:41] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:46:41] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:46:41] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:46:41] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:46:41] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:46:41] [USER] ✅ User registered successfully [10:46:41] [PUSH] User registration after token update: success [10:46:42] [CLIENT_SIG] WebSocket opened [10:46:42] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:46:42] [CLIENT_SIG] Connected! clientId=88jwxQmj-8yR64sa [10:46:42] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:46:42] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:46:42] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:46:42] [PRELOAD] No messages or parse error [10:46:43] [PIN_AUTH] Correct PIN [10:46:43] [SECURITY] Restored real session: ILUIWU [10:46:43] [SECURITY] Restored real session: ILUIWU [10:46:43] [SECURITY] Saved real session: ILUIWU [10:46:43] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:46:43] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:46:43] Documents Directory: /var/mobile/Containers/Data/Application/752D7F90-5F04-43D7-B478-548B594753B3/Documents [10:46:43] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:46:43] [THEME] Applying current theme [10:46:43] [CHAT] Applied day theme (mode: day) [10:46:43] [SECURITY] Saved real session: ILUIWU [10:46:43] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:46:43] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:46:43] [NETWORK] Network monitor started [10:46:43] [NETWORK] Status changed: connected [10:46:43] Did transition [10:46:43] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:46:43] [VIEWER] Screen lock enabled - normal idle behavior [10:46:43] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:46:43] [VCC] ========== VideoConnectionClass INIT ========== [10:46:43] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:46:43] [DATA AUDIO] ========== setupWebRTC() START ========== [10:46:43] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:46:43] [DATA AUDIO] Creating encoder/decoder factories... [10:46:43] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:46:43] [CODEC] Viewer selected encoder: AV1 (best quality) [10:46:43] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:46:43] [DATA AUDIO] ✅ Factory created [10:46:43] [DATA AUDIO] RTCAudioSession locked [10:46:43] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:46:43] [DATA AUDIO] RTCAudioSession unlocked [10:46:43] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:46:43] [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"] [10:46:43] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:46:43] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:46:43] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:46:43] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:46:43] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:46:43] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:46:43] Did transition [10:46:43] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:46:43] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:46:43] [CHUNK] Merged 980 reactions synchronously [10:46:43] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:46:43] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:46:43] [MIGRATION] No messages need sender_name backfill [10:46:43] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:46:43] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:46:43] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:46:43] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:46:43] [USER] ✅ User registered successfully [10:46:43] [USER] User registration successful [10:46:43] [GALLERY_DB] ✅ Loaded 503 media messages [10:46:43] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:46:43] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:46:43] [INCREMENTAL_SYNC] ✅ No new messages [10:46:44] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:46:44] [GALLERY] First 5 after sort (newest first): [10:46:44] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:46:44] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:46:44] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:46:44] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:46:44] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:46:44] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:46:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:46:44] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:46:44] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:46:44] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:46:44] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:46:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:46:44] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:44] [CELL_UPLOAD] → not my message, setting complete [10:46:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:46:44] [SERVER] Starting reconnect polling (5s interval) [10:46:44] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:46:44] [ICONS] Offset applied: -14.6 [10:46:44] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:46:44] [ICONS] Chat center: (31.2, 87.0) [10:46:44] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:46:44] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:46:44] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:46:44] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:46:44] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:46:44] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:46:44] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:46:44] [ICONS] Screen width: 440.0 [10:46:44] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:46:44] [UNSENT_RETRY] Checking for unsent messages... [10:46:44] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:46:44] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:46:44] [UPLOAD_RECOVERY] Session: ILUIWU [10:46:44] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:46:44] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:46:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:46:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:46:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:46:44] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:46:44] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:46:44] [PENDING_UPLOAD] Total pending upload messages: 0 [10:46:44] [UNSENT_RETRY] No unsent messages found [10:46:44] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:46:44] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:46:44] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:46:44] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:46:44] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:46:44] new_session POST ok: token len=157 [10:46:44] HELLO → sent (fetched token, role=query) [10:46:44] [SIG] hello_ok received for query connection - ready to query agents [10:46:44] [SIG] get_agents request sent for sessionId=ILUIWU [10:46:44] [SIG] get_agents request sent for sessionId=iosILUIWU [10:46:44] [SERVER] Stopped reconnect polling [10:46:44] [SIG] agents_list received: [] [10:46:44] [SIG] agents_list received: [] [10:46:44] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:46:44] [READBY_ENRICH] Enriched 50 messages with readBy data [10:46:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:46:44] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:46:44] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:46:44] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:44] [CELL_UPLOAD] → not my message, setting complete [10:46:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:46:44] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:46:44] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:46:44] [SEARCH] Calling showSearchBar [10:46:44] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:46:44] [SEARCH] ✅ Setting isSearchBarVisible = true [10:46:44] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:46:44] [SEARCH] isSearchBarShowAnimating = true [10:46:44] [SEARCH] Adjusting table contentInset.top by +56.0 [10:46:45] [SEARCH] Focusing search field [10:46:45] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:46:45] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:46:47] [SEARCH] Found 2697 messages matching 'b' in local DB [10:46:47] [SEARCH] Found 1423 messages matching 'ba' in local DB [10:46:48] [SEARCH] Found 1271 messages matching 'bab' in local DB [10:46:48] [SEARCH] Found 1241 messages matching 'baby' in local DB [10:46:50] [SEARCH] 🔍 User selected search result: id=19169, text='Yes baby', sender='Esra' [10:46:50] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:46:50] [SEARCH] ✅ Setting isSearchBarVisible = false [10:46:51] [SEARCH] Adjusting table contentInset.top by -56.0 [10:46:51] [SEARCH] 🔍 scrollToMessage called for id=19169, chatRows.count=52, allMessages.count=50, totalInDB=7945 [10:46:51] [SEARCH] ✅ Message 19169 found in chatRows at index 32, scrolling directly [10:46:51] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:46:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:46:51] [SCROLL_BTN] Showing button - 404pt from bottom > half 379pt [10:46:51] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:51] [CELL_UPLOAD] → not my message, setting complete [10:46:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [10:46:53] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:53] [CELL_UPLOAD] → not my message, setting complete [10:46:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [10:46:53] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:53] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:46:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:46:53] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:53] [CELL_UPLOAD] → not my message, setting complete [10:46:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:46:54] [SEARCH] searchIconLongPressed gesture state=1 [10:46:54] [SEARCH] Long press began - showing settings [10:46:55] [SEARCH] searchIconLongPressed gesture state=3 [10:46:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:46:56] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:46:56] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:46:56] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:46:56] [CELL_UPLOAD] → not my message, setting complete [10:46:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:46:58] [LOG] Long press on chat icon detected! Triggering log upload... [10:46:58] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:47:00] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:47:00] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:47:00] [SEARCH] Calling showSearchBar [10:47:00] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:47:00] [SEARCH] ✅ Setting isSearchBarVisible = true [10:47:00] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:47:00] [SEARCH] isSearchBarShowAnimating = true [10:47:00] [SEARCH] Adjusting table contentInset.top by +56.0 [10:47:00] [SEARCH] Focusing search field [10:47:00] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:47:01] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:47:02] [SEARCH] chatSearchBarDidCancel called (chevron tapped) [10:47:02] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:47:02] [SEARCH] ✅ Setting isSearchBarVisible = false [10:47:02] [SEARCH] Adjusting table contentInset.top by -56.0 [10:47:03] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:47:03] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:47:03] [SEARCH] Calling showSearchBar [10:47:03] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:47:03] [SEARCH] ✅ Setting isSearchBarVisible = true [10:47:03] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:47:03] [SEARCH] isSearchBarShowAnimating = true [10:47:03] [SEARCH] Adjusting table contentInset.top by +56.0 [10:47:03] [SEARCH] Focusing search field [10:47:03] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:47:04] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:47:20] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:47:20] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=true, currentTabIndex=0 [10:47:20] [SEARCH] Already visible, hiding [10:47:20] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:47:20] [SEARCH] ✅ Setting isSearchBarVisible = false [10:47:20] [SEARCH] Adjusting table contentInset.top by -56.0 [10:47:22] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:47:22] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:47:22] [SEARCH] Calling showSearchBar [10:47:22] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:47:22] [SEARCH] ✅ Setting isSearchBarVisible = true [10:47:22] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:47:22] [SEARCH] isSearchBarShowAnimating = true [10:47:22] [SEARCH] Adjusting table contentInset.top by +56.0 [10:47:22] [SEARCH] Focusing search field [10:47:22] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:47:23] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:47:24] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19184 [10:47:24] [TAP_REPLAY] 📦 Found message: text.count=9, evolutionData.isEmpty=true [10:47:24] [TAP_REPLAY] 📡 No local evolution data - fetching from server [10:47:24] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [10:47:24] [TAP_REPLAY] ✅ Successfully fetched 9 events from server - calling playEvolutionInline [10:47:24] [EVOLUTION] 🎬 playEvolutionInline called for message 19184 with 9 events [10:47:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:24] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Babyyy💋💋♥️' [10:47:24] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [10:47:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:24] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='B', text='Babyyy💋💋♥️' [10:47:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'B' [10:47:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:24] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Ba', text='Babyyy💋💋♥️' [10:47:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Ba' [10:47:24] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:24] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:24] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:24] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Bab', text='Babyyy💋💋♥️' [10:47:24] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Bab' [10:47:25] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:25] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:25] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:25] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Baby', text='Babyyy💋💋♥️' [10:47:25] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Baby' [10:47:25] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:25] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:25] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:25] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Babyy', text='Babyyy💋💋♥️' [10:47:25] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyy' [10:47:25] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:25] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:25] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:25] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Babyyy', text='Babyyy💋💋♥️' [10:47:25] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyyy' [10:47:26] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19184 [10:47:26] [TAP_REPLAY] ⏹️ Animation already playing - stopping and showing final text [10:47:26] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:26] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:26] [UPDATE_CELL] Rebuilt chatRows, count=52 [10:47:26] [UPDATE_CELL] After rebuild targetRowIndex=48 [10:47:26] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Babyyy💋💋♥️', text='Babyyy💋💋♥️' [10:47:26] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyyy💋💋♥️' [10:47:26] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [10:47:52] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19184 [10:47:52] [TAP_REPLAY] 📦 Found message: text.count=9, evolutionData.isEmpty=true [10:47:52] [TAP_REPLAY] 📡 No local evolution data - fetching from server [10:47:52] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [10:47:52] [TAP_REPLAY] ✅ Successfully fetched 9 events from server - calling playEvolutionInline [10:47:52] [EVOLUTION] 🎬 playEvolutionInline called for message 19184 with 9 events [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='B', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'B' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Ba', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Ba' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Bab', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Bab' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Baby', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Baby' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Babyy', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyy' [10:47:52] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:52] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:52] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:47:52] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Babyyy', text='Babyyy💋💋♥️' [10:47:52] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyyy' [10:47:53] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19184 [10:47:53] [TAP_REPLAY] ⏹️ Animation already playing - stopping and showing final text [10:47:53] [UPDATE_CELL] 🔍 updateMessageCell called for message 19184 [10:47:53] [UPDATE_CELL] Initial targetRowIndex=48 [10:47:53] [UPDATE_CELL] Rebuilt chatRows, count=52 [10:47:53] [UPDATE_CELL] After rebuild targetRowIndex=48 [10:47:53] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Babyyy💋💋♥️', text='Babyyy💋💋♥️' [10:47:53] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Babyyy💋💋♥️' [10:47:53] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [10:47:54] [SEARCH] chatSearchBarDidCancel called (chevron tapped) [10:47:54] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:47:54] [SEARCH] ✅ Setting isSearchBarVisible = false [10:47:54] [SEARCH] Adjusting table contentInset.top by -56.0 [10:48:43] [LIFECYCLE] App resigning active - cleared crash flag [10:48:43] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:48:43] [SECURITY] Saved background timestamp [10:48:43] [LIFECYCLE] App entering background - cleared crash flag [10:48:43] [CLIENT_SIG] Disconnecting [10:48:43] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:48:43] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:48:43] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:48:43] [WS] Canceling WebSocket for query connection to iosILUIWU [10:48:43] In cleanupPeer [10:48:43] In cleanupPeer [10:48:43] [LIFECYCLE] WebRTC audio disabled [10:48:43] [LIFECYCLE] AVAudioSession deactivated [10:48:43] [LIFECYCLE] All connections stopped [10:48:43] [CLIENT_SIG] WebSocket closed with code 1001 [10:48:43] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:48:43] [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/} [10:48:43] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:48:43] [SERVER] Stopped reconnect polling [10:48:43] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:48:43] [WS] Query connection error - cleaning up all agent connections and views [10:48:43] Will request stop of video 0 [10:48:43] Will request stop of video 0 [10:48:44] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:48:44] [WS] Query connection failed - cleaning up all agent connections and views [10:48:44] [CLEANUP] ======================================== [10:48:44] [CLEANUP] Cleaning up all agent connections and views [10:48:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:48:44] [CLEANUP] Stopped and removed 0 video connections [10:48:44] [CLEANUP] Removed 0 video views [10:48:44] [CLEANUP] Removed 0 feed scroll views [10:48:44] [CLEANUP] Removed 0 status labels [10:48:44] [CLEANUP] Reset agent query state [10:48:44] [CLEANUP] Updated page indicator [10:48:44] [CLEANUP] Rebuilt video layout [10:48:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:48:44] [CLEANUP] ======================================== [10:48:44] [SERVER] Skipping reconnect polling - app is in background [10:48:44] [WS] URLSession invalidated successfully [10:48:44] [PIP] Removing 0 tracks from PiP for connection 0 [10:48:44] [PIP] ✅ All tracks removed for connection 0 [10:48:44] [PIP] Removing 0 tracks from PiP for connection 0 [10:48:44] [PIP] ✅ All tracks removed for connection 0 [10:48:44] [CLEANUP] ======================================== [10:48:44] [CLEANUP] Cleaning up all agent connections and views [10:48:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:48:44] [CLEANUP] Stopped and removed 0 video connections [10:48:44] [CLEANUP] Removed 0 video views [10:48:44] [CLEANUP] Removed 0 feed scroll views [10:48:44] [CLEANUP] Removed 0 status labels [10:48:44] [CLEANUP] Reset agent query state [10:48:44] [CLEANUP] Updated page indicator [10:48:44] [CLEANUP] Rebuilt video layout [10:48:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:48:44] [CLEANUP] ======================================== [10:48:44] [SERVER] Skipping reconnect polling - app is in background [10:48:45] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:48:45] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:48:45] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:48:45] HELLO → sent (cached token, role=query) [10:48:45] [SIG] hello_ok received for query connection - ready to query agents [10:48:45] [SIG] get_agents request sent for sessionId=ILUIWU [10:48:45] [SIG] get_agents request sent for sessionId=iosILUIWU [10:48:45] [SERVER] Stopped reconnect polling [10:48:45] [SIG] agents_list received: [] [10:48:45] [SIG] agents_list received: [] [10:48:48] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:48:48] [CLIENT_SIG] WebSocket opened [10:48:48] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:48:48] [CLIENT_SIG] Connected! clientId=ZYD9iveC0lZGRbZE [10:48:48] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:48:48] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:48:56] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [10:48:56] [WS] Query connection error - cleaning up all agent connections and views [10:48:56] [CLEANUP] ======================================== [10:48:56] [CLEANUP] Cleaning up all agent connections and views [10:48:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:48:56] [CLEANUP] Stopped and removed 0 video connections [10:48:56] [CLEANUP] Removed 0 video views [10:48:56] [CLEANUP] Removed 0 feed scroll views [10:48:56] [CLEANUP] Removed 0 status labels [10:48:56] [CLEANUP] Reset agent query state [10:48:56] [CLEANUP] Updated page indicator [10:48:56] [CLEANUP] Rebuilt video layout [10:48:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:48:56] [CLEANUP] ======================================== [10:48:56] [SERVER] Skipping reconnect polling - app is in background [10:49:27] [CRASH] No crash detected [10:49:27] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:49:27] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:49:27] [GIPHY] SDK not available - using REST API fallback [10:49:27] [BACKGROUND] Background fetch enabled [10:49:27] [CLEANUP] No old timer messages to delete [10:49:27] [SECURITY] Initial launch - within timeout (43.95084309577942s < 300.0s) [10:49:27] [AUTH] Starting PIN authentication [10:49:27] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:49:27] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:49:27] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:49:27] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:49:27] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:49:27] [USER] ✅ User registered successfully [10:49:27] [PUSH] User registration after token update: success [10:49:27] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:49:27] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:49:27] [CLIENT_SIG] WebSocket opened [10:49:27] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:49:27] [CLIENT_SIG] Connected! clientId=0riEUH2Xl4gm7bo0 [10:49:27] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:49:27] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:49:27] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:49:28] [PRELOAD] No messages or parse error [10:49:29] [PIN_AUTH] Correct PIN [10:49:29] [SECURITY] Restored real session: ILUIWU [10:49:29] [SECURITY] Restored real session: ILUIWU [10:49:29] [SECURITY] Saved real session: ILUIWU [10:49:29] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:49:29] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:49:29] Documents Directory: /var/mobile/Containers/Data/Application/BF722642-37C2-4CFF-A951-1929CE54BF4E/Documents [10:49:29] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:49:29] [THEME] Applying current theme [10:49:29] [CHAT] Applied day theme (mode: day) [10:49:29] [SECURITY] Saved real session: ILUIWU [10:49:29] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:49:29] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:49:29] [NETWORK] Network monitor started [10:49:29] [NETWORK] Status changed: connected [10:49:29] Did transition [10:49:29] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:49:29] [VIEWER] Screen lock enabled - normal idle behavior [10:49:29] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:49:29] [VCC] ========== VideoConnectionClass INIT ========== [10:49:29] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:49:29] [DATA AUDIO] ========== setupWebRTC() START ========== [10:49:29] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:49:29] [DATA AUDIO] Creating encoder/decoder factories... [10:49:29] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:49:29] [CODEC] Viewer selected encoder: AV1 (best quality) [10:49:29] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:49:29] [DATA AUDIO] ✅ Factory created [10:49:29] [DATA AUDIO] RTCAudioSession locked [10:49:29] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:49:29] [DATA AUDIO] RTCAudioSession unlocked [10:49:29] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:49:29] [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"] [10:49:29] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:49:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:49:29] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:49:29] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:49:29] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:49:29] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:49:29] Did transition [10:49:29] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:49:29] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:49:29] [CHUNK] Merged 980 reactions synchronously [10:49:29] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:49:29] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:49:29] [MIGRATION] No messages need sender_name backfill [10:49:29] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:49:29] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:49:29] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:49:29] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:49:29] [USER] ✅ User registered successfully [10:49:29] [USER] User registration successful [10:49:29] [GALLERY_DB] ✅ Loaded 503 media messages [10:49:29] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:49:29] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:49:29] [INCREMENTAL_SYNC] ✅ No new messages [10:49:29] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:49:29] [GALLERY] First 5 after sort (newest first): [10:49:29] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:49:29] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:49:29] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:49:29] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:49:29] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:49:29] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:49:29] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:49:29] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:49:29] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:49:29] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:49:29] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:29] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:49:29] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:49:29] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:29] [CELL_UPLOAD] → not my message, setting complete [10:49:29] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:49:29] [SERVER] Starting reconnect polling (5s interval) [10:49:29] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:49:29] [ICONS] Offset applied: -14.6 [10:49:29] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:49:29] [ICONS] Chat center: (31.2, 87.0) [10:49:29] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:49:29] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:49:29] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:49:29] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:49:29] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:49:29] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:49:29] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:49:29] [ICONS] Screen width: 440.0 [10:49:29] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:49:29] [UNSENT_RETRY] Checking for unsent messages... [10:49:29] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:49:29] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:49:29] [UPLOAD_RECOVERY] Session: ILUIWU [10:49:29] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:49:29] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:49:29] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:49:29] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:49:29] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:49:29] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:49:29] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:49:29] [PENDING_UPLOAD] Total pending upload messages: 0 [10:49:29] [UNSENT_RETRY] No unsent messages found [10:49:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:49:29] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:49:29] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:49:29] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:49:29] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:49:29] new_session POST ok: token len=157 [10:49:29] HELLO → sent (fetched token, role=query) [10:49:29] [SIG] hello_ok received for query connection - ready to query agents [10:49:29] [SIG] get_agents request sent for sessionId=ILUIWU [10:49:29] [SIG] get_agents request sent for sessionId=iosILUIWU [10:49:29] [SERVER] Stopped reconnect polling [10:49:29] [SIG] agents_list received: [] [10:49:29] [SIG] agents_list received: [] [10:49:30] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:49:30] [READBY_ENRICH] Enriched 50 messages with readBy data [10:49:30] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:49:30] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:49:30] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:49:30] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:30] [CELL_UPLOAD] → not my message, setting complete [10:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:49:30] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:49:30] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:49:30] [SEARCH] Calling showSearchBar [10:49:30] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:49:30] [SEARCH] ✅ Setting isSearchBarVisible = true [10:49:30] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:49:30] [SEARCH] isSearchBarShowAnimating = true [10:49:30] [SEARCH] Adjusting table contentInset.top by +56.0 [10:49:30] [SEARCH] Focusing search field [10:49:30] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:49:30] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:49:31] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:49:31] [SEARCH] ✅ Setting isSearchBarVisible = false [10:49:31] [SEARCH] Adjusting table contentInset.top by -56.0 [10:49:33] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:49:33] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:49:33] [SEARCH] Calling showSearchBar [10:49:33] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:49:33] [SEARCH] ✅ Setting isSearchBarVisible = true [10:49:33] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:49:33] [SEARCH] isSearchBarShowAnimating = true [10:49:33] [SEARCH] Adjusting table contentInset.top by +56.0 [10:49:33] [SEARCH] Focusing search field [10:49:33] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:49:34] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:49:34] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:49:34] [SEARCH] ✅ Setting isSearchBarVisible = false [10:49:35] [SEARCH] Adjusting table contentInset.top by -56.0 [10:49:36] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:49:36] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:49:36] [SEARCH] Calling showSearchBar [10:49:36] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:49:36] [SEARCH] ✅ Setting isSearchBarVisible = true [10:49:36] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:49:36] [SEARCH] isSearchBarShowAnimating = true [10:49:36] [SEARCH] Adjusting table contentInset.top by +56.0 [10:49:37] [SEARCH] Focusing search field [10:49:37] [SCROLL_BTN] Showing button - 309pt from bottom > half 223pt [10:49:37] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:49:38] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:49:38] [SEARCH] ✅ Setting isSearchBarVisible = false [10:49:38] [SEARCH] Adjusting table contentInset.top by -56.0 [10:49:40] [MENU] dismissAnyExistingMenu called [10:49:40] [MENU] dismissAnyExistingMenu completed [10:49:40] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:40] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:49:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:49:40] [SCROLL_BTN] Showing button - 409pt from bottom > half 379pt [10:49:40] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:40] [CELL_UPLOAD] → not my message, setting complete [10:49:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [10:49:40] [MENU] dismissAnyExistingMenu called [10:49:40] [MENU] dismissAnyExistingMenu completed [10:49:41] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:49:41] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:49:41] [SEARCH] Calling showSearchBar [10:49:41] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:49:41] [SEARCH] ✅ Setting isSearchBarVisible = true [10:49:41] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:49:41] [SEARCH] isSearchBarShowAnimating = true [10:49:41] [SEARCH] Adjusting table contentInset.top by +56.0 [10:49:41] [SEARCH] Focusing search field [10:49:41] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:41] [CELL_UPLOAD] → not my message, setting complete [10:49:41] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:49:42] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:49:43] [MENU] dismissAnyExistingMenu called [10:49:43] [MENU] dismissAnyExistingMenu completed [10:49:43] [SCROLL_BTN] Showing button - 229pt from bottom > half 223pt [10:49:44] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:49:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:49:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:49:44] [MENU] dismissAnyExistingMenu called [10:49:44] [MENU] dismissAnyExistingMenu completed [10:49:44] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:49:44] [SEARCH] ✅ Setting isSearchBarVisible = false [10:49:44] [SEARCH] Adjusting table contentInset.top by -56.0 [10:49:46] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:49:46] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:49:46] [SEARCH] Calling showSearchBar [10:49:46] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:49:46] [SEARCH] ✅ Setting isSearchBarVisible = true [10:49:46] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:49:46] [SEARCH] isSearchBarShowAnimating = true [10:49:46] [SEARCH] Adjusting table contentInset.top by +56.0 [10:49:46] [SEARCH] Focusing search field [10:49:46] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:49:47] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:49:47] [SEARCH] ✅ Setting isSearchBarVisible = false [10:49:47] [SEARCH] Adjusting table contentInset.top by -56.0 [10:50:00] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19183 [10:50:00] [TAP_REPLAY] 📦 Found message: text.count=11, evolutionData.isEmpty=true [10:50:00] [TAP_REPLAY] 📡 No local evolution data - fetching from server [10:50:00] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [10:50:00] [TAP_REPLAY] ✅ Successfully fetched 11 events from server - calling playEvolutionInline [10:50:00] [EVOLUTION] 🎬 playEvolutionInline called for message 19183 with 11 events [10:50:00] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:00] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:00] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:00] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Pleeeaaaase' [10:50:00] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [10:50:00] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:00] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:00] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:00] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='P', text='Pleeeaaaase' [10:50:00] [UPDATE_CELL] ✅ Updating ChatCell label to: 'P' [10:50:00] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:00] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:00] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:00] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pl', text='Pleeeaaaase' [10:50:00] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pl' [10:50:00] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:00] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:00] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:00] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Ple', text='Pleeeaaaase' [10:50:00] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Ple' [10:50:01] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:01] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:01] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:01] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Plee', text='Pleeeaaaase' [10:50:01] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Plee' [10:50:01] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:01] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:01] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:50:01] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Pleee', text='Pleeeaaaase' [10:50:01] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleee' [10:50:01] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19183 [10:50:01] [TAP_REPLAY] ⏹️ Animation already playing - stopping and showing final text [10:50:01] [UPDATE_CELL] 🔍 updateMessageCell called for message 19183 [10:50:01] [UPDATE_CELL] Initial targetRowIndex=47 [10:50:01] [UPDATE_CELL] Rebuilt chatRows, count=52 [10:50:01] [UPDATE_CELL] After rebuild targetRowIndex=47 [10:50:01] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Pleeeaaaase', text='Pleeeaaaase' [10:50:01] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Pleeeaaaase' [10:50:01] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [10:51:46] [CRASH] Previous session did not exit cleanly - crash detected [10:51:46] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:51:46] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:51:46] [GIPHY] SDK not available - using REST API fallback [10:51:46] [BACKGROUND] Background fetch enabled [10:51:46] [CLEANUP] No old timer messages to delete [10:51:46] [AUTH] Starting PIN authentication [10:51:46] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:51:46] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:51:46] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:51:46] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:51:46] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:51:46] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:51:46] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:51:46] [USER] ✅ User registered successfully [10:51:46] [PUSH] User registration after token update: success [10:51:46] [CLIENT_SIG] WebSocket opened [10:51:46] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:51:46] [CLIENT_SIG] Connected! clientId=s3mY8PUUWZvBYYI7 [10:51:46] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:51:46] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:51:46] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:51:46] [PRELOAD] No messages or parse error [10:51:51] [PIN_AUTH] Correct PIN [10:51:51] [SECURITY] Restored real session: ILUIWU [10:51:51] [SECURITY] Restored real session: ILUIWU [10:51:51] [SECURITY] Saved real session: ILUIWU [10:51:51] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:51:51] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:51:51] Documents Directory: /var/mobile/Containers/Data/Application/574B7207-75E7-4B99-A618-7D530FC5E86C/Documents [10:51:51] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:51:51] [THEME] Applying current theme [10:51:51] [CHAT] Applied day theme (mode: day) [10:51:51] [SECURITY] Saved real session: ILUIWU [10:51:51] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:51:51] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:51:51] [NETWORK] Network monitor started [10:51:51] [NETWORK] Status changed: connected [10:51:51] Did transition [10:51:51] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:51:51] [VIEWER] Screen lock enabled - normal idle behavior [10:51:51] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:51:51] [VCC] ========== VideoConnectionClass INIT ========== [10:51:51] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:51:51] [DATA AUDIO] ========== setupWebRTC() START ========== [10:51:51] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:51:51] [DATA AUDIO] Creating encoder/decoder factories... [10:51:51] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:51:51] [CODEC] Viewer selected encoder: AV1 (best quality) [10:51:51] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:51:51] [DATA AUDIO] ✅ Factory created [10:51:51] [DATA AUDIO] RTCAudioSession locked [10:51:51] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:51:51] [DATA AUDIO] RTCAudioSession unlocked [10:51:51] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:51:51] [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"] [10:51:51] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:51:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:51:51] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:51:51] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:51:51] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:51:51] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:51:51] Did transition [10:51:51] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:51:51] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:51:51] [CHUNK] Merged 980 reactions synchronously [10:51:51] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:51:51] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:51:51] [MIGRATION] No messages need sender_name backfill [10:51:51] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:51:51] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:51:51] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:51:51] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:51:51] [USER] ✅ User registered successfully [10:51:51] [USER] User registration successful [10:51:51] [GALLERY_DB] ✅ Loaded 503 media messages [10:51:51] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:51:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:51:51] [INCREMENTAL_SYNC] ✅ No new messages [10:51:51] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:51:51] [GALLERY] First 5 after sort (newest first): [10:51:51] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:51:51] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:51:51] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:51:51] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:51:51] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:51:51] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:51:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:51:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:51:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:51:51] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:51:51] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:51:51] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:51:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:51:51] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:51:51] [CELL_UPLOAD] → not my message, setting complete [10:51:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:51:51] [SERVER] Starting reconnect polling (5s interval) [10:51:51] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:51:51] [ICONS] Offset applied: -14.6 [10:51:51] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:51:51] [ICONS] Chat center: (31.2, 87.0) [10:51:51] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:51:51] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:51:51] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:51:51] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:51:51] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:51:51] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:51:51] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:51:51] [ICONS] Screen width: 440.0 [10:51:51] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:51:51] [UNSENT_RETRY] Checking for unsent messages... [10:51:51] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:51:51] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:51:51] [UPLOAD_RECOVERY] Session: ILUIWU [10:51:51] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:51:51] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:51:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:51:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:51:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:51:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:51:51] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:51:51] [PENDING_UPLOAD] Total pending upload messages: 0 [10:51:51] [UNSENT_RETRY] No unsent messages found [10:51:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:51:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:51:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:51:51] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:51:52] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:51:52] new_session POST ok: token len=157 [10:51:52] HELLO → sent (fetched token, role=query) [10:51:52] [SIG] hello_ok received for query connection - ready to query agents [10:51:52] [SIG] get_agents request sent for sessionId=ILUIWU [10:51:52] [SIG] get_agents request sent for sessionId=iosILUIWU [10:51:52] [SERVER] Stopped reconnect polling [10:51:52] [SIG] agents_list received: [] [10:51:52] [SIG] agents_list received: [] [10:51:52] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:51:52] [READBY_ENRICH] Enriched 50 messages with readBy data [10:51:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:51:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:51:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:51:52] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:51:52] [CELL_UPLOAD] → not my message, setting complete [10:51:52] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:51:53] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:51:53] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:51:53] [SEARCH] Calling showSearchBar [10:51:53] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:51:53] [SEARCH] ✅ Setting isSearchBarVisible = true [10:51:53] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:51:53] [SEARCH] isSearchBarShowAnimating = true [10:51:53] [SEARCH] Adjusting table contentInset.top by +56.0 [10:51:53] [SEARCH] Focusing search field [10:51:53] [SCROLL_BTN] Showing button - 307pt from bottom > half 223pt [10:51:53] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:51:54] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:51:54] [SEARCH] ✅ Setting isSearchBarVisible = false [10:51:54] [SEARCH] Adjusting table contentInset.top by -56.0 [10:52:02] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:52:02] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:52:02] [SEARCH] Calling showSearchBar [10:52:02] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:52:02] [SEARCH] ✅ Setting isSearchBarVisible = true [10:52:02] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:52:02] [SEARCH] isSearchBarShowAnimating = true [10:52:02] [SEARCH] Adjusting table contentInset.top by +56.0 [10:52:03] [SEARCH] Focusing search field [10:52:03] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:52:03] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:52:08] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:52:08] [SEARCH] ✅ Setting isSearchBarVisible = false [10:52:08] [SEARCH] Adjusting table contentInset.top by -56.0 [10:53:40] [CRASH] Previous session did not exit cleanly - crash detected [10:53:40] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:53:40] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:53:40] [GIPHY] SDK not available - using REST API fallback [10:53:40] [BACKGROUND] Background fetch enabled [10:53:40] [CLEANUP] No old timer messages to delete [10:53:40] [AUTH] Starting PIN authentication [10:53:40] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:53:40] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:53:40] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:53:40] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:53:40] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:53:40] [CLIENT_SIG] WebSocket opened [10:53:40] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:53:40] [CLIENT_SIG] Connected! clientId=tQTn1TpcJmzJY3v6 [10:53:40] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:53:40] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:53:40] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:53:40] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:53:40] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:53:40] [USER] ✅ User registered successfully [10:53:40] [PUSH] User registration after token update: success [10:53:40] [PRELOAD] No messages or parse error [10:53:42] [PIN_AUTH] Correct PIN [10:53:42] [SECURITY] Restored real session: ILUIWU [10:53:42] [SECURITY] Restored real session: ILUIWU [10:53:42] [SECURITY] Saved real session: ILUIWU [10:53:42] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:53:42] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:53:42] Documents Directory: /var/mobile/Containers/Data/Application/929067B7-E9A7-4AAC-92B6-C6B37A0F99F7/Documents [10:53:42] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:53:42] [THEME] Applying current theme [10:53:42] [CHAT] Applied day theme (mode: day) [10:53:42] [SECURITY] Saved real session: ILUIWU [10:53:42] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:53:42] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:53:42] [NETWORK] Network monitor started [10:53:42] [NETWORK] Status changed: connected [10:53:42] Did transition [10:53:42] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:53:42] [VIEWER] Screen lock enabled - normal idle behavior [10:53:42] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:53:42] [VCC] ========== VideoConnectionClass INIT ========== [10:53:42] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:53:42] [DATA AUDIO] ========== setupWebRTC() START ========== [10:53:42] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:53:42] [DATA AUDIO] Creating encoder/decoder factories... [10:53:42] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:53:42] [CODEC] Viewer selected encoder: AV1 (best quality) [10:53:42] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:53:42] [DATA AUDIO] ✅ Factory created [10:53:42] [DATA AUDIO] RTCAudioSession locked [10:53:42] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:53:42] [DATA AUDIO] RTCAudioSession unlocked [10:53:42] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:53:42] [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"] [10:53:42] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:53:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:53:42] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:53:42] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:53:42] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:53:42] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:53:42] Did transition [10:53:42] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:53:42] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:53:42] [CHUNK] Merged 980 reactions synchronously [10:53:42] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:53:42] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:53:42] [MIGRATION] No messages need sender_name backfill [10:53:42] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:53:42] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:53:42] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:53:42] [GALLERY_DB] Raw datesent for msg 19175: '2026-01-26 01:00:43' [10:53:42] [USER] ✅ User registered successfully [10:53:42] [USER] User registration successful [10:53:42] [GALLERY_DB] ✅ Loaded 503 media messages [10:53:42] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19187, maxMemoryId=19187 [10:53:42] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19187 [10:53:42] [INCREMENTAL_SYNC] ✅ No new messages [10:53:42] [GALLERY] Filtered 503 -> 463 (only with local thumbnails) [10:53:42] [GALLERY] First 5 after sort (newest first): [10:53:42] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:53:42] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:53:42] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:53:42] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:53:42] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:53:42] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:53:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:53:42] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:53:42] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:53:42] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:53:42] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:53:42] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:42] [CELL_UPLOAD] → not my message, setting complete [10:53:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:53:42] [SERVER] Starting reconnect polling (5s interval) [10:53:42] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:53:42] [ICONS] Offset applied: -14.6 [10:53:42] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:53:42] [ICONS] Chat center: (31.2, 87.0) [10:53:42] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:53:42] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:53:42] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:53:42] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:53:42] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:53:42] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:53:42] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:53:42] [ICONS] Screen width: 440.0 [10:53:42] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:53:42] [UNSENT_RETRY] Checking for unsent messages... [10:53:42] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:53:42] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:53:42] [UPLOAD_RECOVERY] Session: ILUIWU [10:53:42] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:53:42] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:53:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:53:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:53:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:53:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:53:42] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:53:42] [PENDING_UPLOAD] Total pending upload messages: 0 [10:53:42] [UNSENT_RETRY] No unsent messages found [10:53:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:53:42] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:53:42] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:53:42] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:53:42] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:53:42] new_session POST ok: token len=157 [10:53:42] HELLO → sent (fetched token, role=query) [10:53:42] [SIG] hello_ok received for query connection - ready to query agents [10:53:42] [SIG] get_agents request sent for sessionId=ILUIWU [10:53:42] [SIG] get_agents request sent for sessionId=iosILUIWU [10:53:42] [SERVER] Stopped reconnect polling [10:53:42] [SIG] agents_list received: [] [10:53:42] [SIG] agents_list received: [] [10:53:43] [COMBINED_FETCH] Loaded 7949 read receipts, 975 messages with reactions [10:53:43] [READBY_ENRICH] Enriched 50 messages with readBy data [10:53:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19187, 19186, 19185, 19184, 19183] [10:53:43] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:53:43] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179, 19178] [10:53:43] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:43] [CELL_UPLOAD] → not my message, setting complete [10:53:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:53:44] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:53:44] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:53:44] [SEARCH] Calling showSearchBar [10:53:44] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:53:44] [SEARCH] ✅ Setting isSearchBarVisible = true [10:53:44] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:53:44] [SEARCH] isSearchBarShowAnimating = true [10:53:44] [SEARCH] Adjusting table contentInset.top by +56.0 [10:53:45] [SEARCH] Focusing search field [10:53:45] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:53:45] [SEARCH] Keyboard settled - dragStartContentOffsetY=5181.0, isSearchBarShowAnimating=false [10:53:48] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:53:48] [SEARCH] ✅ Setting isSearchBarVisible = false [10:53:48] [SEARCH] Adjusting table contentInset.top by -56.0 [10:53:48] [CELL_TAP] didSelectRowAt row=49, timeSinceDismiss=0.03325009346008301 [10:53:48] [CELL_TAP] Ignoring tap - search bar just dismissed [10:53:48] [CELL_TAP] didSelectRowAt row=49, timeSinceDismiss=0.3513690233230591 [10:55:25] [CRASH] Previous session did not exit cleanly - crash detected [10:55:25] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:55:25] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:55:25] [GIPHY] SDK not available - using REST API fallback [10:55:25] [BACKGROUND] Background fetch enabled [10:55:25] [CLEANUP] No old timer messages to delete [10:55:25] [AUTH] Starting PIN authentication [10:55:25] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:55:25] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:55:25] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:55:25] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:55:25] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:55:25] [USER] ✅ User registered successfully [10:55:25] [PUSH] User registration after token update: success [10:55:25] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:55:25] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:55:25] [CLIENT_SIG] WebSocket opened [10:55:25] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:55:25] [CLIENT_SIG] Connected! clientId=ihOHupQanonW6BJv [10:55:25] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:55:25] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:55:25] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:55:25] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=19187)... [10:55:25] [PRELOAD] Fetched 1 messages [10:55:25] [PRELOAD] ✅ Saved 1 messages to local DB [10:55:25] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=1, sessionId=ILUIWU [10:55:25] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19199] [10:55:25] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:55:25] [PRELOAD] ⚡ Cached 1 messages for instant display (preserved 0 from push) [10:55:25] [PRELOAD] Downloaded thumbnail: t_7c4435e18ae25c9d.jpg [10:55:26] [PUSH] Silent push received [10:55:26] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:55:26 +0000, appState=0, message_id=nil [10:55:26] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[19199] [10:55:26] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:26 +0000 [10:55:26] [PUSH_EMBED] No embedded message_data in notification [10:55:26] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:55:26] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[19199], handled=false [10:55:26] [PUSH] No embedded data, pre-loading messages from server [10:55:26] [PUSH_PRELOAD] Fetching messages for instant display cache [10:55:26] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:55:26] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:55:26] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:26] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19199] [10:55:26] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:55:26] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:26] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:55:26] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:55:26] [PIN_AUTH] Correct PIN [10:55:26] [SECURITY] Restored real session: ILUIWU [10:55:26] [SECURITY] Restored real session: ILUIWU [10:55:27] [SECURITY] Saved real session: ILUIWU [10:55:27] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:55:27] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:55:27] Documents Directory: /var/mobile/Containers/Data/Application/F97EFC73-6621-480E-B419-518372B4A059/Documents [10:55:27] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:55:27] [THEME] Applying current theme [10:55:27] [CHAT] Applied day theme (mode: day) [10:55:27] [SECURITY] Saved real session: ILUIWU [10:55:27] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:55:27] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:55:27] [NETWORK] Network monitor started [10:55:27] [NETWORK] Status changed: connected [10:55:27] Did transition [10:55:27] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:55:27] [VIEWER] Screen lock enabled - normal idle behavior [10:55:27] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:55:27] [VCC] ========== VideoConnectionClass INIT ========== [10:55:27] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:55:27] [DATA AUDIO] ========== setupWebRTC() START ========== [10:55:27] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:55:27] [DATA AUDIO] Creating encoder/decoder factories... [10:55:27] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:55:27] [CODEC] Viewer selected encoder: AV1 (best quality) [10:55:27] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:55:27] [DATA AUDIO] ✅ Factory created [10:55:27] [DATA AUDIO] RTCAudioSession locked [10:55:27] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:55:27] [DATA AUDIO] RTCAudioSession unlocked [10:55:27] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:55:27] [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"] [10:55:27] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:55:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:55:27] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:55:27] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:55:27] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:55:27] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:55:27] Did transition [10:55:27] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:55:27] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:55:27] [CHUNK] Merged 980 reactions synchronously [10:55:27] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:55:27] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:55:27] [MIGRATION] No messages need sender_name backfill [10:55:27] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:55:27] [GALLERY_DB] Raw datesent for msg 19199: '2026-01-26 09:55:22' [10:55:27] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:55:27] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:55:27] [USER] ✅ User registered successfully [10:55:27] [USER] User registration successful [10:55:27] [GALLERY_DB] ✅ Loaded 504 media messages [10:55:27] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19199, maxMemoryId=19199 [10:55:27] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19199 [10:55:27] [INCREMENTAL_SYNC] ✅ No new messages [10:55:27] [GALLERY] Filtered 504 -> 463 (only with local thumbnails) [10:55:27] [GALLERY] First 5 after sort (newest first): [10:55:27] [GALLERY] 0: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:55:27] [GALLERY] 1: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:55:27] [GALLERY] 2: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:55:27] [GALLERY] 3: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:55:27] [GALLERY] 4: id=19146, date=2026-01-25 11:23:09, file=a6c858d97a01507d.jpeg [10:55:27] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:55:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19199, 19187, 19186, 19185, 19184] [10:55:27] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:55:27] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:27] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:55:27] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:27] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:55:27] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:27] [CELL_UPLOAD] → not my message, setting complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:55:27] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:27] [CELL_UPLOAD] → not my message, setting complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:27] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19187 → 19199 [10:55:27] [SERVER] Starting reconnect polling (5s interval) [10:55:27] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:55:27] [ICONS] Offset applied: -14.6 [10:55:27] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:55:27] [ICONS] Chat center: (31.2, 87.0) [10:55:27] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:55:27] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:55:27] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:55:27] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:55:27] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:55:27] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:55:27] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:55:27] [ICONS] Screen width: 440.0 [10:55:27] DOWNLOADIIING t_7c4435e18ae25c9d.jpg [10:55:27] DOWNLOADIIING 7c4435e18ae25c9d.jpg [10:55:27] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:55:27] [UNSENT_RETRY] Checking for unsent messages... [10:55:27] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:55:27] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:55:27] [UPLOAD_RECOVERY] Session: ILUIWU [10:55:27] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:55:27] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:55:27] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:55:27] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:55:27] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:55:27] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:55:27] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:55:27] [PENDING_UPLOAD] Total pending upload messages: 0 [10:55:27] [UNSENT_RETRY] No unsent messages found [10:55:27] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:55:27] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:55:27] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:55:27] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:55:27] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:55:27] [MEDIA_DOWNLOAD] ✅ t_7c4435e18ae25c9d.jpg complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:27] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 7c4435e18ae25c9d.jpg from downloaded: t_7c4435e18ae25c9d.jpg [10:55:27] new_session POST ok: token len=157 [10:55:27] HELLO → sent (fetched token, role=query) [10:55:27] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:27] [CELL_UPLOAD] → not my message, setting complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:27] [SIG] hello_ok received for query connection - ready to query agents [10:55:27] [SIG] get_agents request sent for sessionId=ILUIWU [10:55:27] [SIG] get_agents request sent for sessionId=iosILUIWU [10:55:27] [SERVER] Stopped reconnect polling [10:55:27] [SIG] agents_list received: [] [10:55:27] [SIG] agents_list received: [] [10:55:27] [MEDIA_DOWNLOAD] ✅ 7c4435e18ae25c9d.jpg complete [10:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:27] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 7c4435e18ae25c9d.jpg from downloaded: 7c4435e18ae25c9d.jpg [10:55:27] [COMBINED_FETCH] Loaded 7950 read receipts, 975 messages with reactions [10:55:27] [READBY_ENRICH] Enriched 50 messages with readBy data [10:55:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19199, 19187, 19186, 19185, 19184] [10:55:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:55:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:28] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:28] [CELL_UPLOAD] → not my message, setting complete [10:55:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:55:28] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:28] [CELL_UPLOAD] → not my message, setting complete [10:55:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:28] [PUSH] Silent push received [10:55:28] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:55:28 +0000, appState=0, message_id=nil [10:55:28] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:55:28] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:28 +0000 [10:55:28] [PUSH_EMBED] No embedded message_data in notification [10:55:28] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:55:28] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:55:28] [PUSH] No embedded data, pre-loading messages from server [10:55:28] [PUSH_PRELOAD] Fetching messages for instant display cache [10:55:28] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:55:28] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:55:28] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:28] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:55:28] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:55:28] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:55:28] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:28] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19199, AnyHashable("operation_type"): 3] [10:55:28] [PUSH] Parsed message_id: 19199 [10:55:28] [PUSH] Parsed operation_type: 3 [10:55:28] [PUSH] Taking direct action: opType=3, messageId=19199 [10:55:28] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19199 [10:55:29] [CLIENT_SIG] Event received: type=3 messageId=19199 [10:55:29] [WS_EVENT] Received event: type=3, messageId=19199 [10:55:29] [WS_EVENT] Read receipt for message 19199 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:55:30] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:55:30] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:55:30] [SEARCH] Calling showSearchBar [10:55:30] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:55:30] [SEARCH] ✅ Setting isSearchBarVisible = true [10:55:30] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:55:30] [SEARCH] isSearchBarShowAnimating = true [10:55:30] [SEARCH] Adjusting table contentInset.top by +56.0 [10:55:30] [SEARCH] Focusing search field [10:55:30] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:55:31] [SEARCH] Keyboard settled - dragStartContentOffsetY=5464.0, isSearchBarShowAnimating=false [10:55:32] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:55:32] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:55:32] [SEARCH] ✅ Setting isSearchBarVisible = false [10:55:32] [SEARCH] Adjusting table contentInset.top by -56.0 [10:55:33] [CLIENT_SIG] Event received: type=0 messageId=19200 [10:55:33] [WS_EVENT] Received event: type=0, messageId=19200 [10:55:33] [WS_EVENT] 📨 New message notification (msgId=19200) - triggering incremental refresh, currentMsgCount=50 [10:55:33] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:55:33] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19199, maxMemoryId=19199 [10:55:33] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19199 [10:55:33] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:55:33] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19200] [10:55:33] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:33] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=19200 [10:55:33] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 51, first 10 IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:55:33] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:55:33] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-26 09:55:33 +0000 - type: unknown, operation_type: 0, message_id: 19200, session_id: ILUIWU, state: 0 [10:55:33] [PUSH_DEBUG] Full userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:55:32"; "file_name" = ""; message = "Back home\Ud83e\Udd72"; "message_id" = 19200; "message_type" = 0; "prev_session_message_id" = 19199; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19200, AnyHashable("operation_type"): 0] [10:55:33] [PUSH] App active - suppressing notification UI, posting internal event [10:55:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:33 +0000 [10:55:33] [PUSH_TRACE] ⬇️ Processing embedded message_id=19200 [10:55:33] [PUSH_EMBED] 📩 Received embedded message: id=19200, type=0, sender=Esra [10:55:33] [PUSH_TRACE] ⬇️ Message details: text="Back home🥲...", datesent=2026-01-26 09:55:32 [10:55:33] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:55:33] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_EMBED] ✅ Saved message 19200 to local DB (sync) [10:55:33] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19200 [10:55:33] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19200 [10:55:33] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180, 19179] [10:55:33] [PUSH_EMBED] Inserted message 19200 into existing cache (now 51 messages) [10:55:33] [PUSH_TRACE] 📦 ✅ Inserted message 19200, cache now has IDs: [19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [PUSH_TRACE] 📦 EXITING cache update queue for message 19200 [10:55:33] [PUSH_EMBED] Fetching evolution data for message 19200 in background [10:55:33] [PUSH_EMBED] ✅ Fully processed message 19200 [10:55:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19200 [10:55:33] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:55:32"; "file_name" = ""; message = "Back home\Ud83e\Udd72"; "message_id" = 19200; "message_type" = 0; "prev_session_message_id" = 19199; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19200, AnyHashable("operation_type"): 0] [10:55:33] [PUSH_EMBED_VC] Message 19200 already in memory - skipping [10:55:33] [PUSH] ⚡ Embedded message handled directly in ViewController [10:55:33] [PUSH] Parsed message_id: 19200 [10:55:33] [PUSH] Parsed operation_type: 0 [10:55:33] [PUSH] Taking direct action: opType=0, messageId=19200 [10:55:33] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19200 [10:55:33] [PUSH] ⚡ Message 19200 already in memory - skipping duplicate notification entirely [10:55:33] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:55:33] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:55:33] [PUSH_TRACE] 👁️ Received message id=19200, text="Back home🥲..." [10:55:33] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:55:33] [PUSH_UI] Message 19200 already in memory - skipping insert [10:55:33] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:55:33] [PUSH] Silent push received [10:55:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:55:33 +0000, appState=0, message_id=19200 [10:55:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:33 +0000 [10:55:33] [PUSH_TRACE] ⬇️ Processing embedded message_id=19200 [10:55:33] [PUSH_EMBED] 📩 Received embedded message: id=19200, type=0, sender=Esra [10:55:33] [PUSH_TRACE] ⬇️ Message details: text="Back home🥲...", datesent=2026-01-26 09:55:32 [10:55:33] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:55:33] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_EMBED] ✅ Saved message 19200 to local DB (sync) [10:55:33] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19200 [10:55:33] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19200 [10:55:33] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19200 [10:55:33] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [PUSH_TRACE] 📦 ⚠️ Message 19200 already in cache, skipping insert [10:55:33] [PUSH_TRACE] 📦 EXITING cache update queue for message 19200 [10:55:33] [PUSH_EMBED] Fetching evolution data for message 19200 in background [10:55:33] [PUSH_EMBED] ✅ Fully processed message 19200 [10:55:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19200 [10:55:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180], handled=true [10:55:33] [PUSH] Embedded message handled instantly from silent push [10:55:33] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:55:33] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19200 [10:55:33] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:55:33] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:55:33] [PUSH_TRACE] 👁️ Received message id=19200, text="Back home🥲..." [10:55:33] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:55:33] [PUSH_UI] Message 19200 already in memory - skipping insert [10:55:33] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:55:33] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-26 09:55:32"; "file_name" = ""; message = "Back home\Ud83e\Udd72"; "message_id" = 19200; "message_type" = 0; "prev_session_message_id" = 19199; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19200, AnyHashable("operation_type"): 0] [10:55:33] [PUSH_EMBED_VC] Message 19200 already in memory - skipping [10:55:33] [PUSH] ⚡ Embedded message handled directly in ViewController [10:55:33] [PUSH] Parsed message_id: 19200 [10:55:33] [PUSH] Parsed operation_type: 0 [10:55:33] [PUSH] Taking direct action: opType=0, messageId=19200 [10:55:33] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19200 [10:55:33] [PUSH] ⚡ Message 19200 already in memory - skipping duplicate notification entirely [10:55:33] [PUSH_EMBED] Got evolution data for message 19200, saving to local DB [10:55:33] [PUSH_EMBED] Saved evolution data for message 19200 [10:55:33] [PUSH_EMBED] Got evolution data for message 19200, saving to local DB [10:55:33] [PUSH_EMBED] Saved evolution data for message 19200 [10:55:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19200, 19199, 19187, 19186, 19185] [10:55:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:55:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:33] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:33] [CELL_UPLOAD] → not my message, setting complete [10:55:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:55:33] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:33] [CELL_UPLOAD] → not my message, setting complete [10:55:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:33] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19199 → 19200 [10:55:34] [MENU] dismissAnyExistingMenu called [10:55:34] [MENU] dismissAnyExistingMenu completed [10:55:34] [PUSH] Silent push received [10:55:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:55:34 +0000, appState=0, message_id=nil [10:55:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:34 +0000 [10:55:34] [PUSH_EMBED] No embedded message_data in notification [10:55:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:55:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180], handled=false [10:55:34] [PUSH] No embedded data, pre-loading messages from server [10:55:34] [PUSH_PRELOAD] Fetching messages for instant display cache [10:55:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:55:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:55:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:34] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19139] [10:55:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19139] [10:55:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:34] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:55:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:55:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 19200] [10:55:34] [PUSH] Parsed message_id: 19200 [10:55:34] [PUSH] Parsed operation_type: 3 [10:55:34] [PUSH] Taking direct action: opType=3, messageId=19200 [10:55:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19200 [10:55:35] [CLIENT_SIG] Event received: type=3 messageId=19200 [10:55:35] [WS_EVENT] Received event: type=3, messageId=19200 [10:55:35] [WS_EVENT] Read receipt for message 19200 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:55:35] [TAB] Tab 3 tapped - calling handleSearchButtonTapped [10:55:35] [SEARCH] handleSearchButtonTapped - isSearchBarVisible=false, currentTabIndex=0 [10:55:35] [SEARCH] Calling showSearchBar [10:55:35] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false [10:55:35] [SEARCH] ✅ Setting isSearchBarVisible = true [10:55:35] [SEARCH] chatSearchBar.frame = (0.0, 112.0, 440.0, 56.0) [10:55:35] [SEARCH] isSearchBarShowAnimating = true [10:55:35] [SEARCH] Adjusting table contentInset.top by +56.0 [10:55:35] [SEARCH] Focusing search field [10:55:35] [SCROLL_BTN] Showing button - 451pt from bottom > half 223pt [10:55:36] [SEARCH] Keyboard settled - dragStartContentOffsetY=5516.0, isSearchBarShowAnimating=false [10:55:36] [MENU] dismissAnyExistingMenu called [10:55:36] [MENU] dismissAnyExistingMenu completed [10:55:36] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:36] [CELL_UPLOAD] → not my message, setting complete [10:55:36] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:55:37] [SCROLL_BTN] Showing button - 226pt from bottom > half 223pt [10:55:37] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true [10:55:37] [SEARCH] ✅ Setting isSearchBarVisible = false [10:55:37] [SEARCH] Adjusting table contentInset.top by -56.0 [10:55:40] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19186 [10:55:40] [TAP_REPLAY] 📦 Found message: text.count=15, evolutionData.isEmpty=true [10:55:40] [TAP_REPLAY] 📡 No local evolution data - fetching from server [10:55:40] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [10:55:40] [TAP_REPLAY] ✅ Successfully fetched 17 events from server - calling playEvolutionInline [10:55:40] [EVOLUTION] 🎬 playEvolutionInline called for message 19186 with 17 events [10:55:40] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:40] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:40] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:40] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='Mmmm. My love 🥰' [10:55:40] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [10:55:40] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:40] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:40] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:40] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='M', text='Mmmm. My love 🥰' [10:55:40] [UPDATE_CELL] ✅ Updating ChatCell label to: 'M' [10:55:40] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:40] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:40] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:40] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mm', text='Mmmm. My love 🥰' [10:55:40] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mm' [10:55:40] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:40] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:40] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:40] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmm', text='Mmmm. My love 🥰' [10:55:40] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmm' [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmmm', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm' [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmmm ', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm ' [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmmm', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm' [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmmm.', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm.' [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Mmmm. ', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm. ' [10:55:41] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=19186 [10:55:41] [TAP_REPLAY] ⏹️ Animation already playing - stopping and showing final text [10:55:41] [UPDATE_CELL] 🔍 updateMessageCell called for message 19186 [10:55:41] [UPDATE_CELL] Initial targetRowIndex=49 [10:55:41] [UPDATE_CELL] Rebuilt chatRows, count=53 [10:55:41] [UPDATE_CELL] After rebuild targetRowIndex=49 [10:55:41] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='Mmmm. My love 🥰', text='Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Mmmm. My love 🥰' [10:55:41] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [10:55:42] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:55:43] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:55:43] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:55:44] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:55:44] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [10:55:44] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=52 [10:55:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-1, 19200, 19199, 19187, 19186] [10:55:44] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:55:44] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:44] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:44] [CELL_UPLOAD] → not my message, setting complete [10:55:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:44] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:55:44] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:55:45] [CLIENT_SIG] Event received: type=0 messageId=19201 [10:55:45] [WS_EVENT] Received event: type=0, messageId=19201 [10:55:45] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19201,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 09:55:44"} [10:55:45] [WS_EVENT] 📨 New message notification (msgId=19201) - triggering incremental refresh, currentMsgCount=52 [10:55:45] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:55:45] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "message_id": 19201, "file_name": , "ok": 1, "datesent_utc": 2026-01-26 09:55:44, "message_type": 0] [10:55:45] [DB_UPGRADE] Upgrading message ID: -1 → 19201, preserveOriginalDate=false [10:55:45] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19200, maxMemoryId=19200 [10:55:45] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19200 [10:55:45] [DB_UPGRADE] ✅ Upgraded -1 → 19201 with send_status=0, 1 row(s) affected [10:55:45] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 19201 [10:55:45] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 19201 [10:55:45] ReloadData 9 [10:55:45] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:55:45] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19201] [10:55:45] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:45] [CELL_UPLOAD] → not my message, setting complete [10:55:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:45] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:45] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:45] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:55:45] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [10:55:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[19201, 19200, 19199, 19187, 19186] [10:55:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:55:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:45] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:45] [CELL_UPLOAD] → not my message, setting complete [10:55:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:47] [PUSH] Silent push received [10:55:47] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:55:47 +0000, appState=0, message_id=nil [10:55:47] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:55:47 +0000 [10:55:47] [PUSH_EMBED] No embedded message_data in notification [10:55:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:55:47] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180], handled=false [10:55:47] [PUSH] No embedded data, pre-loading messages from server [10:55:47] [PUSH_PRELOAD] Fetching messages for instant display cache [10:55:47] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:55:47] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:55:47] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:47] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181, 19180] [10:55:47] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [19140, 19139] [10:55:47] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[19140, 19139] [10:55:47] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:47] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [10:55:47] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:55:47] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182, 19181] [10:55:47] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 19201] [10:55:47] [PUSH] Parsed message_id: 19201 [10:55:47] [PUSH] Parsed operation_type: 3 [10:55:47] [PUSH] Taking direct action: opType=3, messageId=19201 [10:55:47] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19201 [10:55:47] [CLIENT_SIG] Event received: type=3 messageId=19201 [10:55:47] [WS_EVENT] Received event: type=3, messageId=19201 [10:55:47] [WS_EVENT] Read receipt for message 19201 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:55:49] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:55:49] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [10:55:49] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=53 [10:55:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-2, 19201, 19200, 19199, 19187] [10:55:49] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:55:49] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182] [10:55:49] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:49] [CELL_UPLOAD] → not my message, setting complete [10:55:49] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:49] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:55:49] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:55:50] [CLIENT_SIG] Event received: type=0 messageId=19202 [10:55:50] [WS_EVENT] Received event: type=0, messageId=19202 [10:55:50] [WS_EVENT] 📨 New message notification (msgId=19202) - triggering incremental refresh, currentMsgCount=53 [10:55:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [10:55:50] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19201, maxMemoryId=19201 [10:55:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19201 [10:55:50] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19202,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 09:55:49"} [10:55:50] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-26 09:55:49, "file_name": , "message_id": 19202, "message_type": 0, "ok": 1, "session_id": ILUIWU] [10:55:50] [DB_UPGRADE] Upgrading message ID: -2 → 19202, preserveOriginalDate=false [10:55:50] [DB_UPGRADE] ✅ Upgraded -2 → 19202 with send_status=0, 1 row(s) affected [10:55:50] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 19202 [10:55:50] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 19202 [10:55:50] ReloadData 9 [10:55:50] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:55:50] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19202] [10:55:50] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:50] [CELL_UPLOAD] → not my message, setting complete [10:55:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:50] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182] [10:55:50] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182] [10:55:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:55:50] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [10:55:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[19202, 19201, 19200, 19199, 19187] [10:55:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:55:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183, 19182] [10:55:50] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:50] [CELL_UPLOAD] → not my message, setting complete [10:55:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:55] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:55:55] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [10:55:55] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=54 [10:55:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-3, 19202, 19201, 19200, 19199] [10:55:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:55:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-3, 19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183] [10:55:55] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:55] [CELL_UPLOAD] → not my message, setting complete [10:55:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:55] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:55:55] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:55:57] [CLIENT_SIG] Event received: type=0 messageId=19203 [10:55:57] [WS_EVENT] Received event: type=0, messageId=19203 [10:55:57] [WS_EVENT] 📨 New message notification (msgId=19203) - triggering incremental refresh, currentMsgCount=54 [10:55:57] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:55:57] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19202, maxMemoryId=19202 [10:55:57] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19202 [10:55:57] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":19203,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-26 09:55:56"} [10:55:57] [CHAT] receive_message.php JSON: ["message_id": 19203, "datesent_utc": 2026-01-26 09:55:56, "message_type": 0, "ok": 1, "file_name": , "session_id": ILUIWU] [10:55:57] [DB_UPGRADE] Upgrading message ID: -3 → 19203, preserveOriginalDate=false [10:55:57] [DB_UPGRADE] ✅ Upgraded -3 → 19203 with send_status=0, 1 row(s) affected [10:55:57] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 19203 [10:55:57] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 19203 [10:55:57] ReloadData 9 [10:55:57] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:55:57] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19203] [10:55:57] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:57] [CELL_UPLOAD] → not my message, setting complete [10:55:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:55:57] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183] [10:55:57] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183] [10:55:57] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:55:57] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [10:55:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[19203, 19202, 19201, 19200, 19199] [10:55:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:55:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185, 19184, 19183] [10:55:57] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:55:57] [CELL_UPLOAD] → not my message, setting complete [10:55:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:57:01] [CRASH] Previous session did not exit cleanly - crash detected [10:57:01] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:57:01] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:57:01] [GIPHY] SDK not available - using REST API fallback [10:57:01] [BACKGROUND] Background fetch enabled [10:57:01] [CLEANUP] No old timer messages to delete [10:57:01] [AUTH] Starting PIN authentication [10:57:01] [PUSH] Notification tapped - session_id: ILUIWU [10:57:01] [PUSH] Max message_id before tap: 19203 [10:57:01] [PUSH] Stored pending session: ILUIWU [10:57:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:01 +0000 [10:57:01] [PUSH_TRACE] ⬇️ Processing embedded message_id=19205 [10:57:01] [PUSH_EMBED] 📩 Received embedded message: id=19205, type=0, sender=Esra [10:57:01] [PUSH_TRACE] ⬇️ Message details: text="I didnt know in English had to use translate 🤣🤣🤣...", datesent=2026-01-26 09:56:53 [10:57:01] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:57:01] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19205 [10:57:01] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19205 [10:57:01] [PUSH_EMBED] ✅ Saved message 19205 to local DB (sync) [10:57:01] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19205 [10:57:01] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19205 [10:57:01] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19205 [10:57:01] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [10:57:01] [PUSH_EMBED] Created new cache with embedded message 19205 [10:57:01] [PUSH_TRACE] 📦 ✅ Created new cache with message 19205 [10:57:01] [PUSH_TRACE] 📦 EXITING cache update queue for message 19205 [10:57:01] [PUSH_EMBED] Fetching evolution data for message 19205 in background [10:57:01] [PUSH_EMBED] ✅ Fully processed message 19205 [10:57:01] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19205 [10:57:01] [PUSH] Embedded message handled instantly on tap [10:57:01] [PUSH] Fetching server messages since_id=19203 to catch coalesced notifications on tap [10:57:01] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:57:01] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:57:01] [PUSH_PRELOAD] Fetching up to 50 messages since_id=19203 to catch coalesced notifications [10:57:01] [PUSH_PRELOAD] Fetching messages for instant display cache [10:57:01] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [10:57:02] [PUSH_EMBED] Got evolution data for message 19205, saving to local DB [10:57:02] [PUSH_EMBED] Saved evolution data for message 19205 [10:57:02] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:57:02] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:57:02] [PUSH_PRELOAD] Fetched 2 messages - caching for instant display [10:57:02] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=2, sessionId=ILUIWU [10:57:02] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19205, 19204] [10:57:02] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[19205] [10:57:02] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:57:02] [PUSH_TRACE] 🔀 mergeMessages: merged.count=2, first 10 IDs=[19205, 19204] [10:57:02] [PUSH_PRELOAD] ⚡ Pre-cached 2 messages for instant display (preserved 0 from push) [10:57:02] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:57:02] [PUSH] Server fetch on tap completed (success=true) [10:57:02] [USER] ✅ User registered successfully [10:57:02] [PUSH] User registration after token update: success [10:57:02] [CLIENT_SIG] WebSocket opened [10:57:02] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:57:02] [CLIENT_SIG] Connected! clientId=4KZHV2UH4K9q1EBu [10:57:02] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:57:02] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:57:02] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:57:02] [PRELOAD] Cache already valid (2 messages), skipping pre-load [10:57:02] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:57:02] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:57:03] [PIN_AUTH] Correct PIN [10:57:04] [SECURITY] Restored real session: ILUIWU [10:57:04] [SECURITY] Restored real session: ILUIWU [10:57:04] [PUSH] Silent push received [10:57:04] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:57:04 +0000, appState=0, message_id=19205 [10:57:04] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=2, IDs=[19205, 19204] [10:57:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:04 +0000 [10:57:04] [PUSH_TRACE] ⬇️ Processing embedded message_id=19205 [10:57:04] [PUSH_EMBED] 📩 Received embedded message: id=19205, type=0, sender=Esra [10:57:04] [PUSH_TRACE] ⬇️ Message details: text="I didnt know in English had to use translate 🤣🤣🤣...", datesent=2026-01-26 09:56:53 [10:57:04] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:57:04] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19205 [10:57:04] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19205 [10:57:04] [PUSH_EMBED] ✅ Saved message 19205 to local DB (sync) [10:57:04] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19205 [10:57:04] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19205 [10:57:04] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19205 [10:57:04] [PUSH_TRACE] 📦 Cache state: valid=true, count=2, IDs=[19205, 19204] [10:57:04] [PUSH_TRACE] 📦 ⚠️ Message 19205 already in cache, skipping insert [10:57:04] [PUSH_TRACE] 📦 EXITING cache update queue for message 19205 [10:57:04] [PUSH_EMBED] Fetching evolution data for message 19205 in background [10:57:04] [PUSH_EMBED] ✅ Fully processed message 19205 [10:57:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19205 [10:57:04] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=2, IDs=[19205, 19204], handled=true [10:57:04] [PUSH] Embedded message handled instantly from silent push [10:57:04] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:57:04] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19205 [10:57:04] [PUSH_EMBED] Got evolution data for message 19205, saving to local DB [10:57:04] [PUSH_EMBED] Saved evolution data for message 19205 [10:57:04] [SECURITY] Saved real session: ILUIWU [10:57:04] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:57:04] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:57:04] Documents Directory: /var/mobile/Containers/Data/Application/F97EFC73-6621-480E-B419-518372B4A059/Documents [10:57:04] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:57:04] [THEME] Applying current theme [10:57:04] [CHAT] Applied day theme (mode: day) [10:57:04] [SECURITY] Saved real session: ILUIWU [10:57:04] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:57:04] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:57:04] [NETWORK] Network monitor started [10:57:04] [NETWORK] Status changed: connected [10:57:04] Did transition [10:57:04] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:57:04] [VIEWER] Screen lock enabled - normal idle behavior [10:57:04] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [10:57:04] [VCC] ========== VideoConnectionClass INIT ========== [10:57:04] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:57:04] [DATA AUDIO] ========== setupWebRTC() START ========== [10:57:04] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:57:04] [DATA AUDIO] Creating encoder/decoder factories... [10:57:04] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:57:04] [CODEC] Viewer selected encoder: AV1 (best quality) [10:57:04] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:57:04] [DATA AUDIO] ✅ Factory created [10:57:04] [DATA AUDIO] RTCAudioSession locked [10:57:04] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:57:04] [DATA AUDIO] RTCAudioSession unlocked [10:57:04] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:57:04] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [10:57:04] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:57:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:57:04] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:57:04] [VIEWER_INIT] Already have 2 messages - just filtering for tab [10:57:04] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:57:04] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:57:04] Did transition [10:57:04] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:57:04] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:57:04] [CHUNK] Merged 980 reactions synchronously [10:57:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:57:04] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:57:04] [MIGRATION] No messages need sender_name backfill [10:57:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=2 [10:57:04] [GALLERY_DB] Raw datesent for msg 19199: '2026-01-26 09:55:22' [10:57:04] [GALLERY_DB] Raw datesent for msg 19185: '2026-01-26 07:56:38' [10:57:04] [GALLERY_DB] Raw datesent for msg 19178: '2026-01-26 06:37:12' [10:57:04] [USER] ✅ User registered successfully [10:57:04] [USER] User registration successful [10:57:04] [GALLERY_DB] ✅ Loaded 504 media messages [10:57:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19205, maxMemoryId=19205 [10:57:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19205 [10:57:04] [INCREMENTAL_SYNC] ✅ No new messages [10:57:04] [GALLERY] Filtered 504 -> 464 (only with local thumbnails) [10:57:04] [GALLERY] First 5 after sort (newest first): [10:57:04] [GALLERY] 0: id=19199, date=2026-01-26 09:55:22, file=7c4435e18ae25c9d.jpg [10:57:04] [GALLERY] 1: id=19185, date=2026-01-26 07:56:38, file=05fe08044942bf44.jpg [10:57:04] [GALLERY] 2: id=19178, date=2026-01-26 06:37:12, file=5728ffa32c3fe2c6.jpg [10:57:04] [GALLERY] 3: id=19175, date=2026-01-26 01:00:43, file=6bc3a9f1a52e9ae0.png [10:57:04] [GALLERY] 4: id=19149, date=2026-01-25 11:35:26, file=6490cf96bed7f640.jpeg [10:57:04] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [10:57:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=2, first5Ids=[19205, 19204] [10:57:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 2 messages [10:57:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19205, 19204] [10:57:04] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:57:04] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19203 → 19204 [10:57:04] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19204 → 19205 [10:57:04] [SERVER] Starting reconnect polling (5s interval) [10:57:04] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:57:04] [ICONS] Offset applied: -14.6 [10:57:04] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:57:04] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:57:04] [UNSENT_RETRY] Checking for unsent messages... [10:57:04] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:57:04] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:57:04] [UPLOAD_RECOVERY] Session: ILUIWU [10:57:04] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:57:04] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:57:04] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19178, file=5728ffa32c3fe2c6.jpg, upload_status=complete [10:57:04] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19145, file=01fe690830ee5ba7.jpg, upload_status=complete [10:57:04] [UPLOAD_RECOVERY] 📋 Recent media: msgId=19014, file=af34e8f2aaf5b05e.jpg, upload_status=complete [10:57:04] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18981, file=2852c0089aed517a.jpg, upload_status=complete [10:57:04] [UPLOAD_RECOVERY] Verifying 4 media files exist on server... [10:57:04] [PENDING_UPLOAD] Total pending upload messages: 0 [10:57:04] [UNSENT_RETRY] No unsent messages found [10:57:04] [ICONS] Chat center: (31.2, 87.0) [10:57:04] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:57:04] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:57:04] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:57:04] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:57:04] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:57:04] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:57:04] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:57:04] [ICONS] Screen width: 440.0 [10:57:04] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:57:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:57:04] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:57:04] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:57:04] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:57:04] new_session POST ok: token len=157 [10:57:04] HELLO → sent (fetched token, role=query) [10:57:04] [SIG] hello_ok received for query connection - ready to query agents [10:57:04] [SIG] get_agents request sent for sessionId=ILUIWU [10:57:04] [SIG] get_agents request sent for sessionId=iosILUIWU [10:57:04] [SERVER] Stopped reconnect polling [10:57:04] [SIG] agents_list received: [] [10:57:04] [SIG] agents_list received: [] [10:57:04] [COMBINED_FETCH] Loaded 7956 read receipts, 975 messages with reactions [10:57:04] [READBY_ENRICH] Enriched 2 messages with readBy data [10:57:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=2, first5Ids=[19205, 19204] [10:57:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 2 messages [10:57:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19205, 19204] [10:57:06] [PUSH] Silent push received [10:57:06] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:57:06 +0000, appState=0, message_id=nil [10:57:06] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:57:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:06 +0000 [10:57:06] [PUSH_EMBED] No embedded message_data in notification [10:57:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:57:06] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:57:06] [PUSH] No embedded data, pre-loading messages from server [10:57:06] [PUSH_PRELOAD] Fetching messages for instant display cache [10:57:06] [PUSH] Silent push received [10:57:06] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:57:06 +0000, appState=0, message_id=nil [10:57:06] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:57:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:06 +0000 [10:57:06] [PUSH_EMBED] No embedded message_data in notification [10:57:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:57:06] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:57:06] [PUSH] No embedded data, pre-loading messages from server [10:57:06] [PUSH_PRELOAD] Fetching messages for instant display cache [10:57:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:57:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:57:06] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:57:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:57:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:57:06] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:06] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:57:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:57:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 2 msgs, IDs=[19205, 19204] [10:57:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19205, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [10:57:06] [PUSH] Parsed message_id: 19205 [10:57:06] [PUSH] Parsed operation_type: 3 [10:57:06] [PUSH] Taking direct action: opType=3, messageId=19205 [10:57:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19205 [10:57:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:57:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 2 msgs, IDs=[19205, 19204] [10:57:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19204, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [10:57:06] [PUSH] Parsed message_id: 19204 [10:57:06] [PUSH] Parsed operation_type: 3 [10:57:06] [PUSH] Taking direct action: opType=3, messageId=19204 [10:57:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19204 [10:57:06] [CLIENT_SIG] Event received: type=3 messageId=19205 [10:57:06] [WS_EVENT] Received event: type=3, messageId=19205 [10:57:06] [WS_EVENT] Read receipt for message 19205 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:57:06] [CLIENT_SIG] Event received: type=3 messageId=19204 [10:57:06] [WS_EVENT] Received event: type=3, messageId=19204 [10:57:06] [WS_EVENT] Read receipt for message 19204 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:57:09] [MENU] dismissAnyExistingMenu called [10:57:09] [MENU] dismissAnyExistingMenu completed [10:57:09] [CHAT] top pull-to-refresh triggered on tab 0 [10:57:09] [REFRESH_ALL] 🔄 refreshAllFromServer called from: pullToRefresh, currentMsgCount=2 [10:57:09] [REFRESH_ALL] 📸 Captured 2 message IDs before request [10:57:09] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [10:57:09] [REFRESH_ALL] 🔄 refreshAllFromServer called from: editMessage, currentMsgCount=2 [10:57:09] [REFRESH_ALL] ⚠️ Already reloading - skipping request from: editMessage [10:57:10] [PENDING_UPLOAD] Total pending upload messages: 0 [10:57:10] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [10:57:10] [TIMER] Preserving 4 played timer IDs before DB refresh [10:57:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=2, first5Ids=[19205, 19204] [10:57:10] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 2 messages [10:57:10] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19205, 19204] [10:57:10] [TIMER] Restored 4 played timer flags after DB refresh [10:57:10] DOWNLOADIIING t_A838C8A7-6ACB-4EC0-8A9C-B457DDC4006E.jpg [10:57:10] DOWNLOADIIING t_203DADEC-DEED-4A33-908B-8F8E344461B1.jpg [10:57:11] DOWNLOADIIING t_1b1a78050ebe099b.jpg [10:57:11] DOWNLOADIIING t_bae538c2a3076c11.jpg [10:57:11] DOWNLOADIIING t_ee42d57ffd8ab767.jpg [10:57:11] DOWNLOADIIING t_5cfd84d52271d308.jpg [10:57:11] DOWNLOADIIING t_919f4df51be24b2c.jpg [10:57:11] DOWNLOADIIING t_0f2dda66cccdeadf.jpg [10:57:11] DOWNLOADIIING t_32675c319a37fee7.jpg [10:57:11] DOWNLOADIIING t_a45f085b5a2c50aa.jpg [10:57:11] DOWNLOADIIING t_7cd3ce3d7797eb3c.jpg [10:57:11] DOWNLOADIIING t_abb65f630e55dc61.jpg [10:57:11] DOWNLOADIIING t_2a4c7380908d6595.jpg [10:57:11] DOWNLOADIIING t_1ee77a72ee5013e0.jpg [10:57:11] DOWNLOADIIING t_02f48c94671cc64e.jpg [10:57:11] DOWNLOADIIING t_d0fd8cabebf807d5.jpg [10:57:11] DOWNLOADIIING t_364b0669ed2f3378.jpg [10:57:11] DOWNLOADIIING t_7f3c34ff05eb7c95.jpg [10:57:11] DOWNLOADIIING t_66e5f4c7c82fef18.jpg [10:57:11] DOWNLOADIIING t_f4d9bbe2fc21d5ae.jpg [10:57:11] DOWNLOADIIING t_e1d06c52c18e20ce.jpg [10:57:11] DOWNLOADIIING t_722d39e0d91dd954.jpg [10:57:11] DOWNLOADIIING t_97828ef5de49a612.jpg [10:57:11] DOWNLOADIIING t_98986cbb2cd2ae48.jpg [10:57:11] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=7956 [10:57:11] [REFRESH_ALL] 📊 Server returned 7956 messages [10:57:11] [REFRESH_ALL] 📊 Final merge: server=7956, preserved=0, total=7956 [10:57:11] [REFRESH_ALL] 📊 Displaying 50 of 7956 messages, hasMore=true [10:57:11] [IMAGE] refreshAllFromServer: set hasMoreMessages=true, offset=50 [10:57:11] [PULL_REFRESH] Loaded 50 messages (first page), displaying 50 for tab 0, hasMore: true [10:57:11] ReloadData 15 (pull-to-refresh completed) [10:57:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19205, 19204, 19203, 19202, 19201] [10:57:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:57:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:11] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:57:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:57:11] [CELL_UPLOAD] configure: msgId=19146, file=a6c858d97a01507d.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:11] [CELL_UPLOAD] → not my message, setting complete [10:57:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=a6c858d97a01507d.jpeg, overlayExists=true [10:57:11] [SCROLL_BTN] Showing button - 5163pt from bottom > half 379pt [10:57:11] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:57:11] [COMBINED_FETCH] Loaded 7956 read receipts, 975 messages with reactions [10:57:11] [PAGINATION] 📜 Loading 50 older messages, firstVisibleRow=0, oldOffset=0.0 [10:57:11] [PAGINATION] 📜 Total now: 100 [10:57:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=100, first5Ids=[19094, 19095, 19096, 19097, 19098] [10:57:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 100 messages [10:57:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103] [10:57:11] [PAGINATION] 📜 newHeight=10312.0, heightDiff=4419.0, newOffset=4419.0 [10:57:11] [PAGINATION] 📜 After setContentOffset, actual offset=4419.0 [10:57:11] [CELL_UPLOAD] configure: msgId=19145, file=01fe690830ee5ba7.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:57:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=01fe690830ee5ba7.jpg, overlayExists=true [10:57:11] [CELL_UPLOAD] configure: msgId=19146, file=a6c858d97a01507d.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:11] [CELL_UPLOAD] → not my message, setting complete [10:57:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=a6c858d97a01507d.jpeg, overlayExists=true [10:57:11] [PAGINATION] 📜 After main queue, offset=4419.0 [10:57:12] [SEARCH] 🔄 Returning to newest messages (had 100 messages loaded) [10:57:12] [CELL_UPLOAD] configure: msgId=19149, file=6490cf96bed7f640.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:12] [CELL_UPLOAD] → not my message, setting complete [10:57:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6490cf96bed7f640.jpeg, overlayExists=true [10:57:13] [CELL_UPLOAD] configure: msgId=19175, file=6bc3a9f1a52e9ae0.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → not my message, setting complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=6bc3a9f1a52e9ae0.png, overlayExists=true [10:57:13] [CELL_UPLOAD] configure: msgId=19178, file=5728ffa32c3fe2c6.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5728ffa32c3fe2c6.jpg, overlayExists=true [10:57:13] [CELL_UPLOAD] configure: msgId=19185, file=05fe08044942bf44.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → not my message, setting complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=05fe08044942bf44.jpg, overlayExists=true [10:57:13] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → not my message, setting complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:57:13] [CLIENT_SIG] Event received: type=0 messageId=19206 [10:57:13] [WS_EVENT] Received event: type=0, messageId=19206 [10:57:13] [WS_EVENT] 📨 New message notification (msgId=19206) - triggering incremental refresh, currentMsgCount=100 [10:57:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=100 [10:57:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=19205, maxMemoryId=19205 [10:57:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 19205 [10:57:13] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-26 09:57:13 +0000 - type: unknown, operation_type: 0, message_id: 19206, session_id: ILUIWU, state: 0 [10:57:13] [PUSH_DEBUG] Full userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 09:57:11"; "file_name" = ""; message = "I have to use this 4hrs per day \Ud83e\Udd72"; "message_id" = 19206; "message_type" = 0; "prev_session_message_id" = 19205; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19206] [10:57:13] [PUSH] App active - suppressing notification UI, posting internal event [10:57:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:13 +0000 [10:57:13] [PUSH_TRACE] ⬇️ Processing embedded message_id=19206 [10:57:13] [PUSH_EMBED] 📩 Received embedded message: id=19206, type=0, sender=Esra [10:57:13] [PUSH_TRACE] ⬇️ Message details: text="I have to use this 4hrs per day 🥲...", datesent=2026-01-26 09:57:11 [10:57:13] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:57:13] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_EMBED] ✅ Saved message 19206 to local DB (sync) [10:57:13] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19206 [10:57:13] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19206 [10:57:13] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186, 19185] [10:57:13] [PUSH_EMBED] Inserted message 19206 into existing cache (now 51 messages) [10:57:13] [PUSH_TRACE] 📦 ✅ Inserted message 19206, cache now has IDs: [19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:13] [PUSH_TRACE] 📦 EXITING cache update queue for message 19206 [10:57:13] [PUSH_EMBED] Fetching evolution data for message 19206 in background [10:57:13] [PUSH_EMBED] ✅ Fully processed message 19206 [10:57:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19206 [10:57:13] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 100 msgs, IDs=[19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103] [10:57:13] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 09:57:11"; "file_name" = ""; message = "I have to use this 4hrs per day \Ud83e\Udd72"; "message_id" = 19206; "message_type" = 0; "prev_session_message_id" = 19205; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 19206] [10:57:13] [PUSH_EMBED_VC] Processing embedded message: id=19206, type=0, sender=Esra, prevId=19205 [10:57:13] [PUSH_EMBED_VC] Inserted message 19206 into allMessagesWithReadBy (now 101 messages) [10:57:13] [PUSH_EMBED_VC] ✅ Previous message 19205 exists in memory [10:57:13] [PUSH] ⚡ Embedded message handled directly in ViewController [10:57:13] [PUSH] Parsed message_id: 19206 [10:57:13] [PUSH] Parsed operation_type: 0 [10:57:13] [PUSH] Taking direct action: opType=0, messageId=19206 [10:57:13] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19206 [10:57:13] [PUSH] ⚡ Message 19206 already in memory - skipping duplicate notification entirely [10:57:13] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:57:13] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:57:13] [PUSH_TRACE] 👁️ Received message id=19206, text="I have to use this 4hrs per da..." [10:57:13] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:57:13] [PUSH_UI] Message 19206 already in memory - skipping insert [10:57:13] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:57:13] [PUSH_EMBED_VC] Saved message 19206 to local DB [10:57:13] [PUSH] Silent push received [10:57:13] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:57:13 +0000, appState=0, message_id=19206 [10:57:13] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:13 +0000 [10:57:13] [PUSH_TRACE] ⬇️ Processing embedded message_id=19206 [10:57:13] [PUSH_EMBED] 📩 Received embedded message: id=19206, type=0, sender=Esra [10:57:13] [PUSH_TRACE] ⬇️ Message details: text="I have to use this 4hrs per day 🥲...", datesent=2026-01-26 09:57:11 [10:57:13] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:57:13] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_EMBED] ✅ Saved message 19206 to local DB (sync) [10:57:13] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 19206 [10:57:13] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 19206 [10:57:13] [PUSH_TRACE] 📦 INSIDE cache update queue for message 19206 [10:57:13] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:13] [PUSH_TRACE] 📦 ⚠️ Message 19206 already in cache, skipping insert [10:57:13] [PUSH_TRACE] 📦 EXITING cache update queue for message 19206 [10:57:13] [PUSH_EMBED] Fetching evolution data for message 19206 in background [10:57:13] [PUSH_EMBED] ✅ Fully processed message 19206 [10:57:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 19206 [10:57:13] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186], handled=true [10:57:13] [PUSH] Embedded message handled instantly from silent push [10:57:13] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:57:13] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=19206 [10:57:13] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:57:13] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:57:13] [PUSH_TRACE] 👁️ Received message id=19206, text="I have to use this 4hrs per da..." [10:57:13] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:57:13] [PUSH_UI] Message 19206 already in memory - skipping insert [10:57:13] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:57:13] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 101 msgs, IDs=[19206, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102] [10:57:13] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-26 09:57:11"; "file_name" = ""; message = "I have to use this 4hrs per day \Ud83e\Udd72"; "message_id" = 19206; "message_type" = 0; "prev_session_message_id" = 19205; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 19206, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [10:57:13] [PUSH_EMBED_VC] Message 19206 already in memory - skipping [10:57:13] [PUSH] ⚡ Embedded message handled directly in ViewController [10:57:13] [PUSH] Parsed message_id: 19206 [10:57:13] [PUSH] Parsed operation_type: 0 [10:57:13] [PUSH] Taking direct action: opType=0, messageId=19206 [10:57:13] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=19206 [10:57:13] [PUSH] ⚡ Message 19206 already in memory - skipping duplicate notification entirely [10:57:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=101, first5Ids=[19206, 19094, 19095, 19096, 19097] [10:57:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 101 messages [10:57:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19206, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102] [10:57:13] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → not my message, setting complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:57:13] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 19205 → 19206 [10:57:13] [COMBINED_FETCH] Loaded 7957 read receipts, 975 messages with reactions [10:57:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[19145, 19146, 19147, 19148, 19149] [10:57:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:57:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19145, 19146, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154] [10:57:13] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:13] [CELL_UPLOAD] → not my message, setting complete [10:57:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:57:13] [SEARCH] ✅ Reloaded 50 newest messages [10:57:14] ReloadData 14 (all 42 media thumbnails loaded) - applying tab 0 filtering [10:57:14] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:57:14] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[19206] [10:57:14] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[19145, 19146, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154] [10:57:14] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=19206 [10:57:14] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 51, first 10 IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:14] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:57:14] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:57:14] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:57:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[19206, 19205, 19204, 19203, 19202] [10:57:14] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:57:14] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [CELL_UPLOAD] configure: msgId=19199, file=7c4435e18ae25c9d.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:57:15] [CELL_UPLOAD] → not my message, setting complete [10:57:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7c4435e18ae25c9d.jpg, overlayExists=true [10:57:15] [PUSH] Silent push received [10:57:15] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-01-26 09:57:15 +0000, appState=0, message_id=nil [10:57:15] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-01-26 09:57:15 +0000 [10:57:15] [PUSH_EMBED] No embedded message_data in notification [10:57:15] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:57:15] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186], handled=false [10:57:15] [PUSH] No embedded data, pre-loading messages from server [10:57:15] [PUSH_PRELOAD] Fetching messages for instant display cache [10:57:15] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:57:15] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:57:15] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [19145] [10:57:15] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[19145] [10:57:15] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:57:15] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:57:15] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[19206, 19205, 19204, 19203, 19202, 19201, 19200, 19199, 19187, 19186] [10:57:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 19206, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [10:57:15] [PUSH] Parsed message_id: 19206 [10:57:15] [PUSH] Parsed operation_type: 3 [10:57:15] [PUSH] Taking direct action: opType=3, messageId=19206 [10:57:15] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=19206 [10:57:15] [CLIENT_SIG] Event received: type=3 messageId=19206 [10:57:15] [WS_EVENT] Received event: type=3, messageId=19206 [10:57:15] [WS_EVENT] Read receipt for message 19206 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:57:15] [PUSH_EMBED] Got evolution data for message 19206, saving to local DB [10:57:15] [PUSH_EMBED] Saved evolution data for message 19206 [10:57:15] [PUSH_EMBED] Got evolution data for message 19206, saving to local DB [10:57:15] [PUSH_EMBED] Saved evolution data for message 19206 [10:57:16] [LOG] Long press on chat icon detected! Triggering log upload... [10:57:17] [SCROLL_BTN] Showing button - 308pt from bottom > half 223pt