=== Eye Viewer Log Rotated at 2026-04-21 17:02:58 +0000 === "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28557, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28558, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-21 17:04:25"; "file_name" = ""; "is_encrypted" = 0; message = "Hope it satisfies expectations of the fantastic woman you are and who deserves it"; "message_id" = 28559; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28558; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28560, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 17:05:15"; "file_name" = ""; "is_encrypted" = 0; message = "You decide. If you tell we start now, we start now."; "message_id" = 28561; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28560; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28561] "content-available" = 1; }, AnyHashable("message_id"): 28561, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28562] "content-available" = 1; }, AnyHashable("message_id"): 28563, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 17:06:35"; "file_name" = ""; "is_encrypted" = 0; message = "Deal ! Timer has started !!!!!"; "message_id" = 28563; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28562; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28563, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-21 17:06:47"; "file_name" = ""; "is_encrypted" = 0; message = "Hope you will duly enjoy and explore baby !"; "message_id" = 28564; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28563; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28564] "content-available" = 1; }, AnyHashable("message_id"): 28565, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28566, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-21 17:08:13"; "file_name" = ""; "is_encrypted" = 0; message = "And with both our work challenges in last weeks, I miss seeing her. And won't be able to ask now !"; "message_id" = 28567; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28566; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28567] "content-available" = 1; }] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-21 17:08:43"; "file_name" = ""; "is_encrypted" = 0; message = "Ha ha. Yes. Be my guest ! And let me know each time how relieved you feel to make me jealous"; "message_id" = 28569; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28568; "replied_message" = "And thank you for 1-1 showers\Ud83d\Ude0f I\U2019ll do during each one and Im thinking to take a shower twice a day \Ud83e\Udd2a\Ud83e\Udd2a\Ud83e\Udd2a"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 28566; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28569, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28569, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28570] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28570, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28570] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 17:10:20"; "file_name" = ""; "is_encrypted" = 0; message = Wooooooow; "message_id" = 28571; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28569; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28571, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28572, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 17:10:30"; "file_name" = ""; "is_encrypted" = 0; message = "I can feel how demanding she already is !!!!"; "message_id" = 28572; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28571; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-21 17:10:39"; "file_name" = ""; "is_encrypted" = 0; message = "Thank you my love, thank you !"; "message_id" = 28573; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28572; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }] 0 Eye 0x00000001004a9cd0 Eye + 728272 1 Eye 0x00000001004aecd4 Eye + 748756 2 Eye 0x00000001004aee90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 17:11:28"; "file_name" = ""; "is_encrypted" = 0; message = "I want her so deeply, he is desperate. Really."; "message_id" = 28575; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28574; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28575, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] 0 Eye 0x00000001004a9cd0 Eye + 728272 1 Eye 0x00000001004aecd4 Eye + 748756 2 Eye 0x00000001004aee90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x00000001004a9cd0 Eye + 728272 1 Eye 0x00000001004aecd4 Eye + 748756 2 Eye 0x00000001004aee90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x00000001004a9cd0 Eye + 728272 1 Eye 0x00000001004aecd4 Eye + 748756 2 Eye 0x00000001004aee90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102d0dcd0 Eye + 728272 1 Eye 0x0000000102d12cd4 Eye + 748756 2 Eye 0x0000000102d12e90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102d0dcd0 Eye + 728272 1 Eye 0x0000000102d12cd4 Eye + 748756 2 Eye 0x0000000102d12e90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102d0dcd0 Eye + 728272 1 Eye 0x0000000102d12cd4 Eye + 748756 2 Eye 0x0000000102d12e90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102d0dcd0 Eye + 728272 1 Eye 0x0000000102d12cd4 Eye + 748756 2 Eye 0x0000000102d12e90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28582, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28583] "content-available" = 1; }, AnyHashable("message_id"): 28584, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28585, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-21 18:50:38"; "file_name" = ""; "is_encrypted" = 0; message = "True ! Tongue, feet, breast. Even nose !"; "message_id" = 28586; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28585; "replied_message" = "What if I touch you with my tongue \Ud83d\Ude0f"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 28585; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28586, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28586, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28587, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-21 18:51:09"; "file_name" = ""; "is_encrypted" = 0; message = "That's true my baby. I'm very far from a sexy boy. At least to my eyes. Different from your point of view I assume..."; "message_id" = 28587; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28586; "replied_message" = "Baby, are you kidding me \Ud83d\Ude44\Ud83d\Ude44\Ud83d\Ude44 just legs?! Come ooon!!"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 28584; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28587, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28588, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28589] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28590] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28599] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28600] "content-available" = 1; }, AnyHashable("message_id"): 28604, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28606, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 05:34:17"; "file_name" = ""; "is_encrypted" = 0; message = "Good morning my looooove, my mistress, my goddess, my addiction, my world of desires !!!"; "message_id" = 28606; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28605; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28606] "crypto_version" = 0; datesent = "2026-04-22 07:46:54"; "file_name" = ""; "is_encrypted" = 0; message = "21 minutes already today and it's not even 10am for me !"; "message_id" = 28630; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28629; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28630] "content-available" = 1; }] "content-available" = 1; }] 0 Eye 0x0000000102695cd0 Eye + 728272 1 Eye 0x000000010269acd4 Eye + 748756 2 Eye 0x000000010269ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("session_id"): iosILUIWU] "content-available" = 1; }, AnyHashable("message_id"): , AnyHashable("type"): camera_connected] 0 Eye 0x0000000102695cd0 Eye + 728272 1 Eye 0x000000010269acd4 Eye + 748756 2 Eye 0x000000010269ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102695cd0 Eye + 728272 1 Eye 0x000000010269acd4 Eye + 748756 2 Eye 0x000000010269ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) 0 Eye 0x0000000102695cd0 Eye + 728272 1 Eye 0x000000010269acd4 Eye + 748756 2 Eye 0x000000010269ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102695cd0 Eye + 728272 1 Eye 0x000000010269acd4 Eye + 748756 2 Eye 0x000000010269ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "LocalDataTask <35C330CA-A429-4EA3-BCCB-2B688547D9BA>.<89>" ), 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=EDAD55A1-003F-415D-AA60-672B34B504FE, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=EDAD55A1-003F-415D-AA60-672B34B504FE, _kCFStreamErrorDomainKey=4} - keeping existing messages "LocalDataTask <2810860D-255B-4AFB-B080-CD501BA82CA5>.<92>" ), 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=EDAD55A1-003F-415D-AA60-672B34B504FE, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=EDAD55A1-003F-415D-AA60-672B34B504FE, _kCFStreamErrorDomainKey=4} - keeping existing messages "content-available" = 1; }, AnyHashable("message_id"): 28632, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:51:58"; "file_name" = ""; "is_encrypted" = 0; message = "Do you see my camera baby ?"; "message_id" = 28632; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28631; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28633] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28635, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28637, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28638, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:53:33"; "file_name" = ""; "is_encrypted" = 0; message = "I just got your 6 messages in one go"; "message_id" = 28639; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28638; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28639] "content-available" = 1; }] "crypto_version" = 1; datesent = "2026-04-22 07:53:45"; "file_name" = "f2317109ac17cc77.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28640; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 783184; "prev_session_message_id" = 28639; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = "t_f2317109ac17cc77.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28640] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28640, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:53:51"; "file_name" = ""; "is_encrypted" = 0; message = "Was it the right sequence ?"; "message_id" = 28641; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28640; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28641] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28641, AnyHashable("session_id"): ILUIWU] 0 Eye 0x0000000105005cd0 Eye + 728272 1 Eye 0x000000010500acd4 Eye + 748756 2 Eye 0x000000010500ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28642, AnyHashable("session_id"): ILUIWU] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28643, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 07:54:48"; "file_name" = ""; "is_encrypted" = 0; message = "The one after \"Look where I am end of month\" ?"; "message_id" = 28644; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28643; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28645, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:55:01"; "file_name" = ""; "is_encrypted" = 0; message = "Oh nice !"; "message_id" = 28645; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28644; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28645] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28646, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:55:07"; "file_name" = ""; "is_encrypted" = 0; message = "With Emrah again ?"; "message_id" = 28646; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28645; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 07:55:57"; "file_name" = ""; "is_encrypted" = 0; message = "Cool ! And your husband also ?"; "message_id" = 28650; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28649; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28650] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 07:56:16"; "file_name" = ""; "is_encrypted" = 0; message = "End May right ?"; "message_id" = 28652; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28651; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28652] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28654, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28655, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28627, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28656, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:56:37"; "file_name" = ""; "is_encrypted" = 0; message = "I may be in Portugal at these dates for a workshop."; "message_id" = 28656; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28655; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28657, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:56:44"; "file_name" = ""; "is_encrypted" = 0; message = "A full week is long !"; "message_id" = 28657; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28656; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28657, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 07:57:22"; "file_name" = ""; "is_encrypted" = 0; message = "And mountains also"; "message_id" = 28660; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28659; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28660] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28661, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 07:57:49"; "file_name" = ""; "is_encrypted" = 0; message = "For Portugal or for a long full week ?"; "message_id" = 28661; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28660; "replied_message" = "Oh\Ud83d\Ude25"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 28658; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28659] "content-available" = 1; }, AnyHashable("message_id"): 28660] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28661, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("type"): camera_connected, AnyHashable("session_id"): iosILUIWU] "content-available" = 1; }, AnyHashable("type"): camera_connected, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28664, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28662, AnyHashable("session_id"): ILUIWU] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28665] "content-available" = 1; }, AnyHashable("message_id"): 28665] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-22 08:00:40"; "file_name" = ""; "is_encrypted" = 0; message = "Ah that may be a good root cause base. Thanks baby, will check when back home"; "message_id" = 28667; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28666; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28667, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28666] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28667, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28668, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28669, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28671, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28672, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28673, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:04:18"; "file_name" = ""; "is_encrypted" = 0; message = "Nice ! And you had to be in office absolutely?"; "message_id" = 28673; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28672; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-22 08:04:34"; "file_name" = ""; "is_encrypted" = 0; message = "Yeah \Ud83c\Udf89"; "message_id" = 28675; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28674; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28675, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28675] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:04:58"; "file_name" = ""; "is_encrypted" = 0; message = "Tomorrow I'll try to be home"; "message_id" = 28676; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28675; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28676, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 08:05:12"; "file_name" = ""; "is_encrypted" = 0; message = "Ah nice !"; "message_id" = 28678; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28677; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28678, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28678, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:05:21"; "file_name" = ""; "is_encrypted" = 0; message = "Happy bday to my baby's friend"; "message_id" = 28680; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28679; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:05:27"; "file_name" = ""; "is_encrypted" = 0; message = "Yes I saw this morning !"; "message_id" = 28682; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28681; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28682, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28682, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 08:05:47"; "file_name" = ""; "is_encrypted" = 0; message = "Hence not alone next 4 days \Ud83d\Ude22"; "message_id" = 28683; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28682; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28683, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28683, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask <20FA9C02-CE77-4D44-AE4B-B9B31687A07B>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <20FA9C02-CE77-4D44-AE4B-B9B31687A07B>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:06:39"; "file_name" = ""; "is_encrypted" = 0; message = "Anyway, we always found ways and we will always find ways"; "message_id" = 28685; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28684; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "crypto_version" = 0; datesent = "2026-04-22 08:06:56"; "file_name" = ""; "is_encrypted" = 0; message = "And one of your orders is anyway recurrent day on day"; "message_id" = 28686; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28685; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28686, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask <643A5127-AD67-4710-9CAB-5D0809B24326>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <643A5127-AD67-4710-9CAB-5D0809B24326>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28693, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28691] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28690] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28689, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28692] "content-available" = 1; }, AnyHashable("message_id"): 28694, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28696, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28697, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:19:25"; "file_name" = ""; "is_encrypted" = 0; message = "I have baby"; "message_id" = 28698; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28697; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28698, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }] "crypto_version" = 1; datesent = "2026-04-22 08:19:42"; "file_name" = "2f5ae78d2850faab.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28699; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 2469098; "prev_session_message_id" = 28698; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = "t_2f5ae78d2850faab.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28699, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28699] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28699, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28699, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28700, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28702] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28702] 0 Eye 0x0000000103071cd0 Eye + 728272 1 Eye 0x0000000103076cd4 Eye + 748756 2 Eye 0x0000000103076e90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-22 08:57:42"; "file_name" = ""; "is_encrypted" = 0; message = "The attraction you have on me is really amazing, can really feel it physically."; "message_id" = 28706; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28705; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28705, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28706, AnyHashable("operation_type"): 3] 0 Eye 0x0000000104e89cd0 Eye + 728272 1 Eye 0x0000000104e8ecd4 Eye + 748756 2 Eye 0x0000000104e8ee90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28709, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 10:07:58"; "file_name" = ""; "is_encrypted" = 0; message = "Yes my love"; "message_id" = 28709; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28708; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28709, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 10:08:04"; "file_name" = ""; "is_encrypted" = 0; message = "\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d\Ud83d\Ude0d"; "message_id" = 28710; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28709; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28710, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28712, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28713] "content-available" = 1; }] 0 Eye 0x0000000102d15cd0 Eye + 728272 1 Eye 0x0000000102d1acd4 Eye + 748756 2 Eye 0x0000000102d1ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 0 Eye 0x0000000102d15cd0 Eye + 728272 1 Eye 0x0000000102d1acd4 Eye + 748756 2 Eye 0x0000000102d1ae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28717] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28719] "content-available" = 1; }, AnyHashable("message_id"): 28720] 0 Eye 0x00000001047a5cd0 Eye + 728272 1 Eye 0x00000001047aacd4 Eye + 748756 2 Eye 0x00000001047aae90 Eye + 749200 3 UIKitCore 0x0000000189ff1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x0000000189ff1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x0000000189ff11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000189b35a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x0000000189afa310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000018f6eb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000018f729c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "crypto_version" = 0; datesent = "2026-04-22 14:41:47"; "file_name" = ""; "is_encrypted" = 0; message = "Great !"; "message_id" = 28721; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28720; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28721, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28721, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28723, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28725, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:13:51"; "file_name" = ""; "is_encrypted" = 0; message = "Hence now \Ud83d\Ude0a"; "message_id" = 28727; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28726; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28727] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28726] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:13:57"; "file_name" = ""; "is_encrypted" = 0; message = Oh; "message_id" = 28728; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28727; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:13:59"; "file_name" = ""; "is_encrypted" = 0; message = "Sorry babyyy"; "message_id" = 28729; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28728; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "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; }] "content-available" = 1; }, AnyHashable("message_id"): 28731, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:12"; "file_name" = ""; "is_encrypted" = 0; message = "You'll okay a bit later today or not at all ?"; "message_id" = 28731; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28730; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28731, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:41"; "file_name" = ""; "is_encrypted" = 0; message = "Just finished my last call. Now working on messages issues on \Ud83d\Udc41\Ufe0f."; "message_id" = 28733; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28732; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "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] "content-available" = 1; }, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 16:14:53"; "file_name" = ""; "is_encrypted" = 0; message = "Hello my loooove"; "message_id" = 28736; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28735; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28736] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28737] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28738, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:14"; "file_name" = ""; "is_encrypted" = 0; message = "I need these legs"; "message_id" = 28738; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28737; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:17"; "file_name" = ""; "is_encrypted" = 0; message = Hardly; "message_id" = 28739; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28738; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:28"; "file_name" = ""; "is_encrypted" = 0; message = "My babyyy"; "message_id" = 28742; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28741; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28743] "content-available" = 1; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:49"; "file_name" = ""; "is_encrypted" = 0; message = "They won't anymore after tonight's shower \Ud83d\Ude09"; "message_id" = 28744; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28743; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28744] "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; }] "crypto_version" = 0; datesent = "2026-04-22 16:16:27"; "file_name" = ""; "is_encrypted" = 0; message = "Aren't you slightly less willing after coming like it is the case for men ?"; "message_id" = 28748; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28747; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28748, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28752, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28798] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28804, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "You have received a new message"; title = Eye; }; badge = 2; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 05:29:00"; "file_name" = ""; "is_encrypted" = 0; message = "Does it mean... he was playful ?"; "message_id" = 28810; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28809; "replied_message" = "\Ud83e\Udd2d"; "replied_sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "replied_sender_name" = Esra; "reply_to_id" = 28808; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("replied_sender_name"): Esra, AnyHashable("sender_name"): Laurent, AnyHashable("datesent"): 2026-04-23 05:29:00, AnyHashable("replied_sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("replied_message"): 🤭, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28810, AnyHashable("thumb_file_name"): , AnyHashable("message"): Does it mean... he was playful ?, AnyHashable("reply_to_id"): 28808, AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("message_type"): 0] [08:38:36] [BACKGROUND] Background fetch triggered [08:38:36] [BACKGROUND] Fetching recent messages for pre-cache [08:38:36] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:38:36] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:38:36] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:38:36] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:38:36] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:38:36] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:38:36] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28723, 28722] [08:38:36] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28723, 28722] [08:38:36] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:38:36] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [08:38:36] [BACKGROUND] Pre-downloaded 0 thumbnails [08:38:36] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [08:46:26] [BACKGROUND] Background fetch triggered [08:46:26] [BACKGROUND] Fetching recent messages for pre-cache [08:46:27] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:46:27] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:46:27] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:46:27] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:46:27] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:46:27] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:46:27] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28723, 28722] [08:46:27] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28723, 28722] [08:46:27] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:46:27] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [08:46:27] [BACKGROUND] Pre-downloaded 0 thumbnails [08:46:27] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [08:54:18] [BACKGROUND] Background fetch triggered [08:54:18] [BACKGROUND] Fetching recent messages for pre-cache [08:54:19] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:54:19] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:54:19] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:54:19] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:54:19] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:54:19] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:54:19] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28723, 28722] [08:54:19] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28723, 28722] [08:54:19] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:54:19] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [08:54:19] [BACKGROUND] Pre-downloaded 0 thumbnails [08:54:19] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:02:14] [BACKGROUND] Background fetch triggered [09:02:14] [BACKGROUND] Fetching recent messages for pre-cache [09:02:15] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:02:15] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:02:15] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:02:15] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:02:15] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:02:15] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:02:15] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28723, 28722] [09:02:15] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28723, 28722] [09:02:15] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:02:15] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [09:02:15] [BACKGROUND] Pre-downloaded 0 thumbnails [09:02:15] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:10:25] [BACKGROUND] Background fetch triggered [09:10:25] [BACKGROUND] Fetching recent messages for pre-cache [09:10:25] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:10:26] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:26] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:26] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:26] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:10:26] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:10:26] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28723, 28722] [09:10:26] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28723, 28722] [09:10:26] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:10:26] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [09:10:26] [BACKGROUND] Pre-downloaded 0 thumbnails [09:10:26] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:16:59] [PUSH] Silent push received [09:16:59] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 06:16:59 +0000, appState=2, message_id=28815, type=nil [09:16:59] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:16:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 06:16:59 +0000 [09:16:59] [PUSH_TRACE] ⬇️ Processing embedded message_id=28815 [09:16:59] [PUSH_EMBED] 📩 Received embedded message: id=28815, type=0, sender=Laurent [09:16:59] [PUSH_TRACE] ⬇️ Message details: text="Any plans for today baby ?...", datesent=2026-04-23 06:16:56 [09:16:59] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:16:59] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28815 [09:16:59] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28815 [09:16:59] [PUSH_EMBED] ✅ Saved message 28815 to local DB (sync) [09:16:59] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28815 [09:16:59] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28815 [09:16:59] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28815 [09:16:59] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [09:16:59] [PUSH_EMBED] Inserted message 28815 into existing cache (now 53 messages) [09:16:59] [PUSH_TRACE] 📦 ✅ Inserted message 28815, cache now has IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:16:59] [PUSH_TRACE] 📦 EXITING cache update queue for message 28815 [09:16:59] [PUSH_EMBED] Fetching evolution data for message 28815 in background [09:16:59] [PUSH_EMBED] ✅ Fully processed message 28815 [09:16:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28815 [09:16:59] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=true [09:16:59] [PUSH] Embedded message handled instantly from silent push [09:16:59] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:16:59] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28815 [09:16:59] [PUSH_EMBED] Got evolution data for message 28815, saving to local DB [09:16:59] [PUSH_EMBED] Saved evolution data for message 28815 [09:18:25] [BACKGROUND] Background fetch triggered [09:18:25] [BACKGROUND] Fetching recent messages for pre-cache [09:18:26] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:18:26] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:18:26] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:18:26] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:18:26] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:18:26] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:18:26] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:18:26] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:18:26] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:18:26] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:18:26] [BACKGROUND] Pre-downloaded 0 thumbnails [09:18:26] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:26:25] [BACKGROUND] Background fetch triggered [09:26:25] [BACKGROUND] Fetching recent messages for pre-cache [09:26:25] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:26:26] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:26:26] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:26:26] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:26:26] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:26:26] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:26:26] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:26:26] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:26:26] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:26:26] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:26:26] [BACKGROUND] Pre-downloaded 0 thumbnails [09:26:26] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:33:50] [BACKGROUND] Background fetch triggered [09:33:50] [BACKGROUND] Fetching recent messages for pre-cache [09:33:51] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:33:51] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:33:51] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:33:51] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:33:51] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:33:51] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:33:51] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:33:51] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:33:51] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:33:51] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:33:51] [BACKGROUND] Pre-downloaded 0 thumbnails [09:33:51] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:41:23] [BACKGROUND] Background fetch triggered [09:41:23] [BACKGROUND] Fetching recent messages for pre-cache [09:41:24] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:41:24] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:41:24] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:41:24] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:41:24] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:41:24] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:41:24] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:41:24] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:41:24] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:41:24] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:41:24] [BACKGROUND] Pre-downloaded 0 thumbnails [09:41:24] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:49:45] [BACKGROUND] Background fetch triggered [09:49:45] [BACKGROUND] Fetching recent messages for pre-cache [09:49:46] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:49:46] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:49:46] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:49:46] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:49:46] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:49:46] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:49:46] [BACKGROUND] Pre-downloaded 0 thumbnails [09:49:46] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:57:35] [BACKGROUND] Background fetch triggered [09:57:35] [BACKGROUND] Fetching recent messages for pre-cache [09:57:36] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:57:36] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:57:36] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:57:36] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:57:36] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:57:36] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:57:36] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [09:57:36] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [09:57:36] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:57:36] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [09:57:36] [BACKGROUND] Pre-downloaded 0 thumbnails [09:57:36] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [10:05:49] [BACKGROUND] Background fetch triggered [10:05:49] [BACKGROUND] Fetching recent messages for pre-cache [10:05:49] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [10:05:49] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:05:49] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:05:49] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:05:49] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:05:49] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:05:49] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28724, 28723, 28722] [10:05:49] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28724, 28723, 28722] [10:05:49] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:05:49] [BACKGROUND] Pre-cached 53 ChatMessage objects for instant display (preserved 3 from push) [10:05:49] [BACKGROUND] Pre-downloaded 0 thumbnails [10:05:49] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [10:10:34] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:10:34] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:10:35] [CLIENT_SIG] WebSocket opened [10:10:35] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:10:35] [CLIENT_SIG] Connected! clientId=iW8qLtABWJ-E5Fjx [10:10:35] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:10:35] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)[10:10:37] [LOG] Pruned 26 entries older than 3 hours [10:10:37] [SECURITY] Restored real session: ILUIWU [10:10:37] [SECURITY] Restored real session: ILUIWU [10:10:37] [SECURITY] Saved real session: ILUIWU [10:10:37] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:10:37] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:10:37] [UPLOAD_QUEUE] ✅ Database integrity check passed [10:10:37] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [10:10:37] Documents Directory: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents [10:10:37] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:10:37] [CAPTURE_HOST] live-feed moved hosted view to plain container [10:10:37] [THEME] Applying current theme [10:10:37] [CHAT] Applied day theme (mode: day) [10:10:37] [SECURITY] Saved real session: ILUIWU [10:10:37] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:10:37] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:10:37] [NETWORK] Network monitor started [10:10:37] [NETWORK] Status changed: connected [10:10:37] Did transition [10:10:37] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:10:37] [VIEWER] Screen lock enabled - normal idle behavior [10:10:37] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [10:10:37] [VCC] ========== VideoConnectionClass INIT ========== [10:10:37] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:10:37] [DATA AUDIO] ========== setupWebRTC() START ========== [10:10:37] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:10:37] [DATA AUDIO] Creating encoder/decoder factories... [10:10:37] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:10:37] [CODEC] Viewer selected encoder: AV1 (best quality) [10:10:37] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:10:37] [DATA AUDIO] ✅ Factory created [10:10:37] [DATA AUDIO] RTCAudioSession locked [10:10:37] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:10:37] [DATA AUDIO] RTCAudioSession unlocked [10:10:37] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:10:37] [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:10:37] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:10:37] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:10:37] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:10:37] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:10:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:10:37] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:10:37] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:10:37] Did transition [10:10:37] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:10:37] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:10:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:10:37] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:10:37] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [10:10:37] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:10:37] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:10:37] [READBY_OPT] No message IDs to fetch - skipping server call [10:10:37] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [10:10:37] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [10:10:37] [GALLERY_DB] Raw datesent for msg 28718: '2026-04-22 12:02:50' [10:10:37] [GALLERY_DB] ✅ Loaded 1255 media messages [10:10:37] [MIGRATION] No messages need sender_name backfill [10:10:37] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:10:37] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [10:10:37] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [10:10:37] [USER] ✅ User registered successfully [10:10:37] [USER] User registration successful [10:10:37] [INCREMENTAL_SYNC] ✅ No new messages [10:10:37] [GALLERY] Filtered 1255 -> 1232 (only with local thumbnails) [10:10:37] [GALLERY] First 5 after sort (newest first): [10:10:37] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:10:37] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:10:37] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:10:37] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:10:37] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [10:10:38] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [10:10:38] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [10:10:38] [SERVER] Starting reconnect polling (5s interval) [10:10:38] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:10:38] [ICONS] Offset applied: -14.6 [10:10:38] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:10:38] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [10:10:38] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:10:38] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:10:38] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:10:38] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:10:38] [ICONS] Chat center: (31.2, 87.0) [10:10:38] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:10:38] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:10:38] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:10:38] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:10:38] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:10:38] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:10:38] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:10:38] [ICONS] Screen width: 440.0 [10:10:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:10:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28815, 28814, 28813, 28812, 28811] [10:10:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:10:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:38] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:10:38] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [10:10:38] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:10:38] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:10:38] [CELL_UPLOAD] configure: msgId=28734, file=653beabd4db198ba.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:10:38] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:10:38] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=653beabd4db198ba.jpg, overlayExists=true [10:10:38] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:10:38] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28811 → 28812 [10:10:38] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28812 → 28813 [10:10:38] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28813 → 28814 [10:10:38] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28814 → 28815 [10:10:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:10:38] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:10:38] [UNSENT_RETRY] Checking for unsent messages... [10:10:38] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:10:38] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [10:10:38] [UPLOAD_RECOVERY] Session: ILUIWU [10:10:38] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:10:38] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [10:10:38] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28362, file=99bb302f2e76748c.jpg, upload_status=complete [10:10:38] new_session POST ok: token len=157 [10:10:38] HELLO → sent (fetched token, role=query) [10:10:38] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [10:10:38] [PENDING_UPLOAD] Total pending upload messages: 0 [10:10:38] [UNSENT_RETRY] No unsent messages found [10:10:38] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3725, currentOffset=3725 [10:10:38] [SCROLL] Scrolling to 3725, animated=false [10:10:38] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=false [10:10:38] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:10:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:38] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28815 [10:10:38] [PUSH] handlePollEventsNotification userInfo: [:] [10:10:38] [PUSH] No message_id in userInfo [10:10:38] [PUSH] No operation_type in userInfo [10:10:38] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:10:38] [PUSH_TRACE] 📬 POLL: cache state: valid=false, count=0, IDs=[] [10:10:38] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:38] [FAST_REFRESH] Already have 50 messages in memory [10:10:38] [FAST_REFRESH] maxMemoryId=28815, maxLocalId=28815 [10:10:38] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:10:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:10:38] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:10:38] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:10:38] [READBY_OPT] No message IDs to fetch - skipping server call [10:10:38] [GAP_FIX] Incremental sync will use since_id=28815 (background max=0, current DB max=28815) [10:10:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:10:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [10:10:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [10:10:38] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:10:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:10:38] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:10:38] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [10:10:38] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [10:10:38] [SIG] hello_ok received for query connection - ready to query agents [10:10:38] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [10:10:38] [SIG] get_agents request sent for sessionId=ILUIWU [10:10:38] [SIG] get_agents request sent for sessionId=iosILUIWU [10:10:38] [SERVER] Stopped reconnect polling [10:10:38] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:10:38] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [10:10:38] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [10:10:38] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:10:38] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [10:10:38] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [10:10:38] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [10:10:38] [SERVER] Starting reconnect polling (5s interval) [10:10:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=73 [10:10:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28815, 28814, 28813, 28812, 28811] [10:10:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:10:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:38] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:10:38] [SCROLL] wasNearBottom=true, threshold=758, offset=3725, contentH=4483, boundsH=758, forceScroll=true [10:10:38] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:10:38] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [10:10:38] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3725, currentOffset=3725 [10:10:38] [SCROLL] Scrolling to 3725, animated=false [10:10:38] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:10:38] [INCREMENTAL_SYNC] ✅ No new messages [10:10:38] [FAST_REFRESH] Incremental sync complete - 50 messages [10:10:40] [PUSH] Silent push received [10:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=0, message_id=nil, type=nil [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [10:10:40] [PUSH_EMBED] No embedded message_data in notification [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:10:40] [PUSH] No embedded data, pre-loading messages from server [10:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [10:10:40] [CLIENT_SIG] Event received: type=3 messageId=28812 [10:10:40] [WS_EVENT] Received event: type=3, messageId=28812 [10:10:40] [WS_EVENT] Read receipt for message 28812 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:10:40] [PUSH] Silent push received [10:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=0, message_id=nil, type=nil [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [10:10:40] [PUSH_EMBED] No embedded message_data in notification [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:10:40] [PUSH] No embedded data, pre-loading messages from server [10:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [10:10:40] [CLIENT_SIG] Event received: type=3 messageId=28813 [10:10:40] [WS_EVENT] Received event: type=3, messageId=28813 [10:10:40] [WS_EVENT] Read receipt for message 28813 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:10:40] [CLIENT_SIG] Event received: type=3 messageId=28815 [10:10:40] [WS_EVENT] Received event: type=3, messageId=28815 [10:10:40] [WS_EVENT] Read receipt for message 28815 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:10:40] [CLIENT_SIG] Event received: type=3 messageId=28814 [10:10:40] [WS_EVENT] Received event: type=3, messageId=28814 [10:10:40] [WS_EVENT] Read receipt for message 28814 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:10:40] [PUSH] Silent push received [10:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=0, message_id=nil, type=nil [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [10:10:40] [PUSH_EMBED] No embedded message_data in notification [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:10:40] [PUSH] No embedded data, pre-loading messages from server [10:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [10:10:40] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:10:40] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:40] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:10:40] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:10:40] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:10:40] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:40] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28815 [10:10:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28812, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [10:10:40] [PUSH] Parsed message_id: 28812 [10:10:40] [PUSH] Parsed operation_type: 3 [10:10:40] [PUSH] Taking direct action: opType=3, messageId=28812 [10:10:40] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28812 [10:10:40] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:10:40] [PUSH] Silent push received [10:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=0, message_id=nil, type=nil [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [10:10:40] [PUSH_EMBED] No embedded message_data in notification [10:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [10:10:40] [PUSH] No embedded data, pre-loading messages from server [10:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [10:10:40] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:10:40] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:40] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:10:40] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:10:40] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:40] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28815 [10:10:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28813, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [10:10:40] [PUSH] Parsed message_id: 28813 [10:10:40] [PUSH] Parsed operation_type: 3 [10:10:40] [PUSH] Taking direct action: opType=3, messageId=28813 [10:10:40] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28813 [10:10:40] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:10:40] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:40] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:10:40] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:10:40] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:10:40] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:40] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:40] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28815 [10:10:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28814, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [10:10:40] [PUSH] Parsed message_id: 28814 [10:10:40] [PUSH] Parsed operation_type: 3 [10:10:40] [PUSH] Taking direct action: opType=3, messageId=28814 [10:10:40] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28814 [10:10:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:10:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:10:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:10:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:10:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:41] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:41] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28815 [10:10:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28815, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [10:10:41] [PUSH] Parsed message_id: 28815 [10:10:41] [PUSH] Parsed operation_type: 3 [10:10:41] [PUSH] Taking direct action: opType=3, messageId=28815 [10:10:41] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28815 [10:10:42] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:10:42] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:10:43] [SERVER] Polling - attempting to reconnect... [10:10:43] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:10:43] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:10:45] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:10:45] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [10:10:45] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [10:10:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [10:10:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28815, 28814, 28813, 28812] [10:10:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:10:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:45] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:10:45] [SCROLL] wasNearBottom=true, threshold=447, offset=4036, contentH=4483, boundsH=447, forceScroll=false [10:10:45] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:10:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:10:45] [SCROLL] 💓 alive, visible=45...52, rows=53, estHeight=0.0, heightCalls=115 [10:10:45] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:10:45] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:10:45] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4113, currentOffset=4113 [10:10:45] [SCROLL] Scrolling to 4113, animated=true [10:10:45] [CLIENT_SIG] Event received: type=0 messageId=28816 [10:10:45] [WS_EVENT] Received event: type=0, messageId=28816 [10:10:45] [WS_EVENT] 📨 New message notification (msgId=28816) - triggering incremental refresh, currentMsgCount=51 [10:10:45] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:10:45] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [10:10:45] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [10:10:45] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28816,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:10:45"} [10:10:45] [CHAT] receive_message.php JSON: ["file_name": , "message_id": 28816, "datesent_utc": 2026-04-23 07:10:45, "ok": 1, "message_type": 0, "session_id": ILUIWU] [10:10:45] [DB_UPGRADE] Upgrading message ID: -1 → 28816, preserveOriginalDate=false [10:10:45] [DB_UPGRADE] ✅ Upgraded -1 → 28816 with send_status=0, 1 row(s) affected [10:10:45] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28816 [10:10:45] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28816 [10:10:45] ReloadData 9 [10:10:46] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:10:46] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28816] [10:10:46] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:46] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:46] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:10:46] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:10:46] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:10:46] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:10:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [10:10:46] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:10:46] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:46] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:10:46] [SCROLL] wasNearBottom=true, threshold=447, offset=4113, contentH=4560, boundsH=447, forceScroll=true [10:10:46] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:10:46] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:10:46] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4113, currentOffset=4113 [10:10:46] [SCROLL] Scrolling to 4113, animated=false [10:10:48] [SERVER] Polling - attempting to reconnect... [10:10:48] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:10:48] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:10:48] [MENU] dismissAnyExistingMenu called [10:10:48] [MENU] dismissAnyExistingMenu completed [10:10:48] [EMOJI_PICKER] Starting emoji picker for message 28814 [10:10:48] [MENU] Created button 'Reply' at index 0 [10:10:48] [MENU] Created button 'Copy' at index 1 [10:10:48] [MENU] Created button 'Delete' at index 2 [10:10:48] [MENU] Menu added at y=504.5 [10:10:48] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 223pt [10:10:49] [SCROLL_END_DECEL] messagesTable offsetY=4186, insetTop=0, pendingVelocityY=0.0 [10:10:50] [PUSH] Silent push received [10:10:50] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:50 +0000, appState=0, message_id=nil, type=nil [10:10:50] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:50] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:50 +0000 [10:10:50] [PUSH_EMBED] No embedded message_data in notification [10:10:50] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:10:50] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [10:10:50] [PUSH] No embedded data, pre-loading messages from server [10:10:50] [PUSH_PRELOAD] Fetching messages for instant display cache [10:10:50] [CLIENT_SIG] Event received: type=3 messageId=28816 [10:10:50] [WS_EVENT] Received event: type=3, messageId=28816 [10:10:50] [WS_EVENT] Read receipt for message 28816 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:10:50] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:10:50] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:50] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:50] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:50] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:50] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [10:10:50] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28725] [10:10:50] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28725] [10:10:50] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:50] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:10:50] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:10:50] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:10:50] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:10:50] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28816 [10:10:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28816] [10:10:50] [PUSH] Parsed message_id: 28816 [10:10:50] [PUSH] Parsed operation_type: 3 [10:10:50] [PUSH] Taking direct action: opType=3, messageId=28816 [10:10:50] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28816 [10:10:53] [SERVER] Polling - attempting to reconnect... [10:10:53] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:10:53] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:10:58] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [10:10:58] [SERVER] Polling - attempting to reconnect... [10:10:58] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:10:58] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:10:58] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=179ms [10:11:02] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:11:03] [SERVER] Polling - attempting to reconnect... [10:11:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:08] [SERVER] Polling - attempting to reconnect... [10:11:08] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:08] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:09] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:11:09] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:11:09] [SCROLL] 💓 alive, visible=47...52, rows=53, estHeight=0.0, heightCalls=10 [10:11:10] [SCROLL_END_DECEL] messagesTable offsetY=4240, insetTop=0, pendingVelocityY=0.0 [10:11:11] [SCROLL] 💓 alive, visible=47...52, rows=53, estHeight=0.0, heightCalls=0 [10:11:13] [SERVER] Polling - attempting to reconnect... [10:11:13] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:13] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:16] [REPLY_DEBUG] 📤 didTapSend - Sending message WITH reply to message 28814 [10:11:16] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [10:11:16] [REPLY_DEBUG] 🔗 sendMessage START - Captured reply to message 28814 [10:11:16] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=52 [10:11:16] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [10:11:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-2, 28816, 28815, 28814, 28813] [10:11:16] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:11:16] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [10:11:16] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:11:16] [SCROLL] wasNearBottom=true, threshold=447, offset=4186, contentH=4560, boundsH=447, forceScroll=false [10:11:16] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:11:16] [SCROLL] 💓 alive, visible=46...53, rows=54, estHeight=0.0, heightCalls=61 [10:11:16] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=0 [10:11:16] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:11:16] [REPLY_DEBUG] 🔗 sendMessage HTTP BODY - Added reply_to_id=28814 to request body [10:11:16] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4209, currentOffset=4209 [10:11:16] [SCROLL] Scrolling to 4209, animated=true [10:11:16] [SCROLL_END_DECEL] messagesTable offsetY=4209, insetTop=0, pendingVelocityY=0.0 [10:11:16] [CLIENT_SIG] Event received: type=0 messageId=28817 [10:11:16] [WS_EVENT] Received event: type=0, messageId=28817 [10:11:16] [WS_EVENT] 📨 New message notification (msgId=28817) - triggering incremental refresh, currentMsgCount=52 [10:11:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:11:16] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28816 [10:11:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [10:11:16] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28817,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:11:16"} [10:11:16] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "message_id": 28817, "file_name": , "datesent_utc": 2026-04-23 07:11:16, "ok": 1, "message_type": 0] [10:11:16] [DB_UPGRADE] Upgrading message ID: -2 → 28817, preserveOriginalDate=false [10:11:16] [DB_UPGRADE] ✅ Upgraded -2 → 28817 with send_status=0, 1 row(s) affected [10:11:16] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28817 [10:11:16] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28817 [10:11:16] ReloadData 9 [10:11:16] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:11:16] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28817] [10:11:17] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:11:17] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [10:11:17] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [10:11:17] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:11:17] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:11:17] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [10:11:17] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=118 [10:11:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28817, 28816, 28815, 28814, 28813] [10:11:17] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:11:17] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [10:11:17] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:11:17] [SCROLL] wasNearBottom=true, threshold=447, offset=4209, contentH=4656, boundsH=447, forceScroll=true [10:11:17] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:11:17] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:11:17] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4209, currentOffset=4209 [10:11:17] [SCROLL] Scrolling to 4209, animated=false [10:11:18] [CAM_CONN] 💓 PING #2 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [10:11:18] [SERVER] Polling - attempting to reconnect... [10:11:18] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:18] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:18] [MENU] dismissAnyExistingMenu called [10:11:18] [MENU] dismissAnyExistingMenu completed [10:11:18] [EMOJI_PICKER] Starting emoji picker for message 28815 [10:11:18] [MENU] Created button 'Reply' at index 0 [10:11:18] [MENU] Created button 'Copy' at index 1 [10:11:18] [MENU] Created button 'Delete' at index 2 [10:11:18] [MENU] Menu added at y=494.0 [10:11:19] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 223pt [10:11:19] [SCROLL_END_DECEL] messagesTable offsetY=3904, insetTop=0, pendingVelocityY=0.0 [10:11:19] [SCROLL_END_DECEL] messagesTable offsetY=4282, insetTop=0, pendingVelocityY=0.0 [10:11:23] [SERVER] Polling - attempting to reconnect... [10:11:23] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:23] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:27] [SCROLL] 💓 alive, visible=48...53, rows=54, estHeight=0.0, heightCalls=9 [10:11:27] [SCROLL_END_DECEL] messagesTable offsetY=4336, insetTop=0, pendingVelocityY=0.0 [10:11:28] [SERVER] Polling - attempting to reconnect... [10:11:28] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:28] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:29] [SCROLL] 💓 alive, visible=48...53, rows=54, estHeight=0.0, heightCalls=0 [10:11:33] [SERVER] Polling - attempting to reconnect... [10:11:33] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:33] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:36] [SCROLL] 💓 alive, visible=48...53, rows=54, estHeight=0.0, heightCalls=2 [10:11:36] [SCROLL_END_DECEL] messagesTable offsetY=4299, insetTop=0, pendingVelocityY=0.0 [10:11:38] [CAM_CONN] 💓 PING #3 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [10:11:38] [SERVER] Polling - attempting to reconnect... [10:11:38] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:38] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:38] [SCROLL] 💓 alive, visible=49...53, rows=54, estHeight=0.0, heightCalls=0 [10:11:38] [SCROLL_END_DECEL] messagesTable offsetY=4353, insetTop=0, pendingVelocityY=0.0 [10:11:39] [REPLY_DEBUG] 📤 didTapSend - Sending message WITH reply to message 28815 [10:11:39] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [10:11:39] [REPLY_DEBUG] 🔗 sendMessage START - Captured reply to message 28815 [10:11:39] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=53 [10:11:39] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:11:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-3, 28817, 28816, 28815, 28814] [10:11:39] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:11:39] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-3, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809] [10:11:39] [RELOAD_TAB] 📊 Building chatRows from 53 messages [10:11:39] [SCROLL] wasNearBottom=true, threshold=375, offset=4353, contentH=4656, boundsH=375, forceScroll=false [10:11:39] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [10:11:39] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:11:39] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:11:39] [REPLY_DEBUG] 🔗 sendMessage HTTP BODY - Added reply_to_id=28815 to request body [10:11:39] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4359, currentOffset=4359 [10:11:39] [SCROLL] Scrolling to 4359, animated=true [10:11:39] [SCROLL_END_DECEL] messagesTable offsetY=4359, insetTop=0, pendingVelocityY=0.0 [10:11:39] [CLIENT_SIG] Event received: type=0 messageId=28818 [10:11:39] [WS_EVENT] Received event: type=0, messageId=28818 [10:11:39] [WS_EVENT] 📨 New message notification (msgId=28818) - triggering incremental refresh, currentMsgCount=53 [10:11:39] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [10:11:39] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28817, maxMemoryId=28817 [10:11:39] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28817 [10:11:39] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28818,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:11:39"} [10:11:39] [CHAT] receive_message.php JSON: ["file_name": , "message_type": 0, "ok": 1, "datesent_utc": 2026-04-23 07:11:39, "session_id": ILUIWU, "message_id": 28818] [10:11:39] [DB_UPGRADE] Upgrading message ID: -3 → 28818, preserveOriginalDate=false [10:11:39] [DB_UPGRADE] ✅ Upgraded -3 → 28818 with send_status=0, 1 row(s) affected [10:11:39] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 28818 [10:11:39] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 28818 [10:11:39] ReloadData 9 [10:11:39] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:11:39] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28818] [10:11:39] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:11:39] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809] [10:11:39] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809] [10:11:39] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:11:39] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [10:11:39] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [10:11:39] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=179 [10:11:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28818, 28817, 28816, 28815, 28814] [10:11:39] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:11:39] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809] [10:11:39] [RELOAD_TAB] 📊 Building chatRows from 53 messages [10:11:39] [SCROLL] wasNearBottom=true, threshold=393, offset=4359, contentH=4752, boundsH=393, forceScroll=true [10:11:39] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [10:11:40] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:11:40] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4359, currentOffset=4359 [10:11:40] [SCROLL] Scrolling to 4359, animated=false [10:11:40] [SCROLL] 💓 alive, visible=49...54, rows=55, estHeight=0.0, heightCalls=60 [10:11:43] [SERVER] Polling - attempting to reconnect... [10:11:43] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:43] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:48] [SERVER] Polling - attempting to reconnect... [10:11:48] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:48] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:52] [SCROLL] 💓 alive, visible=49...54, rows=55, estHeight=0.0, heightCalls=2 [10:11:53] [SCROLL_END_DECEL] messagesTable offsetY=4359, insetTop=0, pendingVelocityY=0.0 [10:11:53] [SERVER] Polling - attempting to reconnect... [10:11:53] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:53] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:55] [SCROLL] 💓 alive, visible=49...54, rows=55, estHeight=0.0, heightCalls=0 [10:11:56] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:11:56] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [10:11:56] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=54 [10:11:56] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [10:11:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-4, 28818, 28817, 28816, 28815] [10:11:56] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:11:56] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-4, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:11:56] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:11:56] [SCROLL] wasNearBottom=true, threshold=447, offset=4305, contentH=4752, boundsH=447, forceScroll=false [10:11:56] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:11:56] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:11:56] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:11:56] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:11:56] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4357, currentOffset=4357 [10:11:56] [SCROLL] Scrolling to 4357, animated=true [10:11:56] [CLIENT_SIG] Event received: type=0 messageId=28819 [10:11:56] [WS_EVENT] Received event: type=0, messageId=28819 [10:11:56] [WS_EVENT] 📨 New message notification (msgId=28819) - triggering incremental refresh, currentMsgCount=54 [10:11:56] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:11:56] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28818, maxMemoryId=28818 [10:11:56] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28818 [10:11:56] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28819,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:11:56"} [10:11:56] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "datesent_utc": 2026-04-23 07:11:56, "file_name": , "message_type": 0, "ok": 1, "message_id": 28819] [10:11:56] [DB_UPGRADE] Upgrading message ID: -4 → 28819, preserveOriginalDate=false [10:11:56] [DB_UPGRADE] ✅ Upgraded -4 → 28819 with send_status=0, 1 row(s) affected [10:11:56] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 28819 [10:11:56] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 28819 [10:11:56] ReloadData 9 [10:11:56] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:11:56] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28819] [10:11:56] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:11:56] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:11:56] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:11:56] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:11:56] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [10:11:56] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=182 [10:11:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28819, 28818, 28817, 28816, 28815] [10:11:56] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:11:56] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:11:56] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:11:56] [SCROLL] wasNearBottom=true, threshold=447, offset=4357, contentH=4804, boundsH=447, forceScroll=true [10:11:56] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:11:56] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [10:11:56] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4357, currentOffset=4357 [10:11:56] [SCROLL] Scrolling to 4357, animated=false [10:11:58] [CAM_CONN] 💓 PING #4 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [10:11:58] [SERVER] Polling - attempting to reconnect... [10:11:58] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:11:58] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:11:59] [MENU] dismissAnyExistingMenu called [10:11:59] [MENU] dismissAnyExistingMenu completed [10:11:59] [SCROLL_BEGIN_DRAG] messagesTable offsetY=4357, insetTop=0, topDistance=4357, rows=56, prefetchedCount=0 [10:11:59] [SCROLL] 💓 alive, visible=49...55, rows=56, estHeight=0.0, heightCalls=63 [10:12:00] [SCROLL_WILL_END] velocity=(0.000, -0.858), currentY=4046, targetY=3622, movingTowardTop=true, decelNow=false, dragging=true [10:12:00] [SCROLL_WILL_END] captured upward momentum velocityY=-0.8579313678566641 [10:12:00] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=4046, topInset=0, pendingVelocityY=-0.8579313678566641, targetNearTop=4046 [10:12:00] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 379pt [10:12:01] [MENU] dismissAnyExistingMenu called [10:12:01] [MENU] dismissAnyExistingMenu completed [10:12:01] [SCROLL_BEGIN_DRAG] messagesTable offsetY=3661, insetTop=0, topDistance=3661, rows=56, prefetchedCount=0 [10:12:01] [SCROLL_WILL_END] velocity=(0.000, 0.000), currentY=3661, targetY=3661, movingTowardTop=false, decelNow=true, dragging=false [10:12:01] [SCROLL_WILL_END] cleared upward momentum capture [10:12:01] [SCROLL_END_DRAG] messagesTable decelerate=false, offsetY=3661, topInset=0, pendingVelocityY=0.0, targetNearTop=3661 [10:12:01] [SCROLL_END_DECEL] messagesTable offsetY=3661, insetTop=0, pendingVelocityY=0.0 [10:12:02] [MENU] dismissAnyExistingMenu called [10:12:02] [MENU] dismissAnyExistingMenu completed [10:12:02] [SCROLL_BEGIN_DRAG] messagesTable offsetY=3661, insetTop=0, topDistance=3661, rows=56, prefetchedCount=0 [10:12:02] [SCROLL] 💓 alive, visible=41...50, rows=56, estHeight=0.0, heightCalls=4 [10:12:03] [SCROLL_WILL_END] velocity=(0.000, 0.000), currentY=3632, targetY=3632, movingTowardTop=false, decelNow=false, dragging=false [10:12:03] [SCROLL_WILL_END] cleared upward momentum capture [10:12:03] [SCROLL_END_DRAG] messagesTable decelerate=false, offsetY=3632, topInset=0, pendingVelocityY=0.0, targetNearTop=3632 [10:12:03] [SERVER] Polling - attempting to reconnect... [10:12:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:12:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:12:03] [MENU] dismissAnyExistingMenu called [10:12:03] [MENU] dismissAnyExistingMenu completed [10:12:03] [SCROLL_BEGIN_DRAG] messagesTable offsetY=3632, insetTop=0, topDistance=3632, rows=56, prefetchedCount=0 [10:12:03] [SCROLL_WILL_END] velocity=(0.000, -1.414), currentY=3585, targetY=2884, movingTowardTop=true, decelNow=false, dragging=true [10:12:03] [SCROLL_WILL_END] captured upward momentum velocityY=-1.4136897784319138 [10:12:03] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=3585, topInset=0, pendingVelocityY=-1.4136897784319138, targetNearTop=3585 [10:12:03] [MENU] dismissAnyExistingMenu called [10:12:03] [MENU] dismissAnyExistingMenu completed [10:12:03] [SCROLL_BEGIN_DRAG] messagesTable offsetY=3411, insetTop=0, topDistance=3411, rows=56, prefetchedCount=0 [10:12:03] [SCROLL] 💓 alive, visible=37...46, rows=56, estHeight=0.0, heightCalls=10 [10:12:03] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:12:03] [SCROLL_WILL_END] velocity=(0.000, 3.696), currentY=3534, targetY=4046, movingTowardTop=false, decelNow=true, dragging=true [10:12:03] [SCROLL_WILL_END] cleared upward momentum capture [10:12:03] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=3534, topInset=0, pendingVelocityY=0.0, targetNearTop=3534 [10:12:04] [SCROLL_BTN] Showing button - 298pt from bottom > half 223pt [10:12:04] [SCROLL_END_DECEL] messagesTable offsetY=4058, insetTop=0, pendingVelocityY=0.0 [10:12:04] [SCROLL] 💓 alive, visible=48...54, rows=56, estHeight=0.0, heightCalls=21 [10:12:04] [SCROLL_END_DECEL] messagesTable offsetY=4357, insetTop=0, pendingVelocityY=0.0 [10:12:05] [PUSH] Silent push received [10:12:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:05 +0000, appState=0, message_id=nil, type=nil [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:05 +0000 [10:12:05] [PUSH_EMBED] No embedded message_data in notification [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807], handled=false [10:12:05] [PUSH] No embedded data, pre-loading messages from server [10:12:05] [PUSH_PRELOAD] Fetching messages for instant display cache [10:12:05] [CLIENT_SIG] Event received: type=3 messageId=28819 [10:12:05] [WS_EVENT] Received event: type=3, messageId=28819 [10:12:05] [WS_EVENT] Read receipt for message 28819 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:12:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:12:05] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:12:05] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:12:05] [PUSH] Silent push received [10:12:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:05 +0000, appState=0, message_id=nil, type=nil [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:05 +0000 [10:12:05] [PUSH_EMBED] No embedded message_data in notification [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807], handled=false [10:12:05] [PUSH] No embedded data, pre-loading messages from server [10:12:05] [PUSH_PRELOAD] Fetching messages for instant display cache [10:12:05] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:12:05] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:12:05] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:12:05] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:05] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [10:12:05] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [28728, 28727, 28726, 28725] [10:12:05] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=4, IDs=[28728, 28727, 28726, 28725] [10:12:05] [PUSH_TRACE] 🔀 mergeMessages: merged.count=54, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:05] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [10:12:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:12:05] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:05] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=4 secsSinceLastPong=7 vccs=0 [10:12:05] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28819 [10:12:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28819, AnyHashable("session_id"): ILUIWU] [10:12:05] [PUSH] Parsed message_id: 28819 [10:12:05] [PUSH] Parsed operation_type: 3 [10:12:05] [PUSH] Taking direct action: opType=3, messageId=28819 [10:12:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28819 [10:12:05] [PUSH] Silent push received [10:12:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:05 +0000, appState=0, message_id=nil, type=nil [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:05 +0000 [10:12:05] [PUSH_EMBED] No embedded message_data in notification [10:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:12:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810], handled=false [10:12:05] [PUSH] No embedded data, pre-loading messages from server [10:12:05] [PUSH_PRELOAD] Fetching messages for instant display cache [10:12:05] [CLIENT_SIG] Event received: type=3 messageId=28817 [10:12:05] [WS_EVENT] Received event: type=3, messageId=28817 [10:12:05] [WS_EVENT] Read receipt for message 28817 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:12:05] [CLIENT_SIG] Event received: type=3 messageId=28818 [10:12:05] [WS_EVENT] Received event: type=3, messageId=28818 [10:12:05] [WS_EVENT] Read receipt for message 28818 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:12:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:12:06] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:12:06] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:12:06] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:12:06] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [28728, 28727, 28726, 28725] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=4, IDs=[28728, 28727, 28726, 28725] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: merged.count=54, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [10:12:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:12:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=4 secsSinceLastPong=7 vccs=0 [10:12:06] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28819 [10:12:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28817, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [10:12:06] [PUSH] Parsed message_id: 28817 [10:12:06] [PUSH] Parsed operation_type: 3 [10:12:06] [PUSH] Taking direct action: opType=3, messageId=28817 [10:12:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28817 [10:12:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:12:06] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:12:06] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:12:06] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:12:06] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [28728, 28727, 28726, 28725] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=4, IDs=[28728, 28727, 28726, 28725] [10:12:06] [PUSH_TRACE] 🔀 mergeMessages: merged.count=54, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [10:12:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:12:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=4 secsSinceLastPong=8 vccs=0 [10:12:06] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28819 [10:12:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28818, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [10:12:06] [PUSH] Parsed message_id: 28818 [10:12:06] [PUSH] Parsed operation_type: 3 [10:12:06] [PUSH] Taking direct action: opType=3, messageId=28818 [10:12:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28818 [10:12:08] [SERVER] Polling - attempting to reconnect... [10:12:08] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:12:08] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:12:11] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:12:11] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=54, isReloading=false [10:12:11] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=55 [10:12:11] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [10:12:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[-5, 28819, 28818, 28817, 28816] [10:12:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [10:12:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-5, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:11] [RELOAD_TAB] 📊 Building chatRows from 55 messages [10:12:11] [SCROLL] wasNearBottom=true, threshold=447, offset=4357, contentH=4804, boundsH=447, forceScroll=false [10:12:11] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [10:12:11] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [10:12:11] [SCROLL] 💓 alive, visible=50...56, rows=57, estHeight=0.0, heightCalls=122 [10:12:11] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:12:11] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:12:11] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4409, currentOffset=4409 [10:12:11] [SCROLL] Scrolling to 4409, animated=true [10:12:11] [CLIENT_SIG] Event received: type=0 messageId=28820 [10:12:11] [WS_EVENT] Received event: type=0, messageId=28820 [10:12:11] [WS_EVENT] 📨 New message notification (msgId=28820) - triggering incremental refresh, currentMsgCount=55 [10:12:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=55 [10:12:11] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28819, maxMemoryId=28819 [10:12:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28819 [10:12:11] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28820,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:12:11"} [10:12:11] [CHAT] receive_message.php JSON: ["ok": 1, "session_id": ILUIWU, "file_name": , "datesent_utc": 2026-04-23 07:12:11, "message_type": 0, "message_id": 28820] [10:12:11] [DB_UPGRADE] Upgrading message ID: -5 → 28820, preserveOriginalDate=false [10:12:11] [DB_UPGRADE] ✅ Upgraded -5 → 28820 with send_status=0, 1 row(s) affected [10:12:11] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 28820 [10:12:11] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 28820 [10:12:11] ReloadData 9 [10:12:11] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:12:11] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28820] [10:12:11] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 55 msgs, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:11] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 55, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:11] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:12:11] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=55 [10:12:11] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [10:12:12] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [10:12:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[28820, 28819, 28818, 28817, 28816] [10:12:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [10:12:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:12] [RELOAD_TAB] 📊 Building chatRows from 55 messages [10:12:12] [SCROLL] wasNearBottom=true, threshold=447, offset=4409, contentH=4856, boundsH=447, forceScroll=true [10:12:12] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [10:12:12] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [10:12:12] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4409, currentOffset=4409 [10:12:12] [SCROLL] Scrolling to 4409, animated=false [10:12:13] [SERVER] Polling - attempting to reconnect... [10:12:13] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:12:13] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:12:13] [PUSH] Silent push received [10:12:13] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:13 +0000, appState=0, message_id=nil, type=nil [10:12:13] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:13 +0000 [10:12:13] [PUSH_EMBED] No embedded message_data in notification [10:12:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:12:13] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810], handled=false [10:12:13] [PUSH] No embedded data, pre-loading messages from server [10:12:13] [PUSH_PRELOAD] Fetching messages for instant display cache [10:12:13] [CLIENT_SIG] Event received: type=3 messageId=28820 [10:12:13] [WS_EVENT] Received event: type=3, messageId=28820 [10:12:13] [WS_EVENT] Read receipt for message 28820 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:12:13] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:12:13] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:12:13] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:12:13] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:12:13] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:12:13] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:12:13] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:12:13] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:12:13] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:13] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=54, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [10:12:13] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [28729, 28728, 28727, 28726, 28725] [10:12:13] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=5, IDs=[28729, 28728, 28727, 28726, 28725] [10:12:13] [PUSH_TRACE] 🔀 mergeMessages: merged.count=55, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:13] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [10:12:13] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:12:13] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 55 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:13] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=4 secsSinceLastPong=15 vccs=0 [10:12:13] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28820 [10:12:13] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28820, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [10:12:13] [PUSH] Parsed message_id: 28820 [10:12:13] [PUSH] Parsed operation_type: 3 [10:12:13] [PUSH] Taking direct action: opType=3, messageId=28820 [10:12:13] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28820 [10:12:18] [LIFECYCLE] App resigning active - cleared crash flag [10:12:18] [CAM_CONN] 💓 PING #5 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [10:12:18] [SERVER] Polling - attempting to reconnect... [10:12:18] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:12:18] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:12:18] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [10:12:18] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:12:18] [SECURITY] Saved background timestamp [10:12:18] [LIFECYCLE] App entering background - cleared crash flag [10:12:18] [CLIENT_SIG] Disconnecting [10:12:18] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:12:18] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:12:18] [PUSH_TRACE] 💤 BACKGROUND: memory has 55 messages, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:12:18] [LIFECYCLE] Background snapshot: count=55, maxId=28820 [10:12:18] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:12:18] [WS] Canceling WebSocket for query connection to iosILUIWU [10:12:18] In cleanupPeer [10:12:18] In cleanupPeer [10:12:18] [LIFECYCLE] WebRTC audio disabled [10:12:18] [LIFECYCLE] AVAudioSession deactivated [10:12:18] [LIFECYCLE] All connections stopped [10:12:18] [CLIENT_SIG] WebSocket closed with code 1001 [10:12:18] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:12: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/} [10:12:18] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:12:18] [SERVER] Stopped reconnect polling [10:12:18] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:12:18] [WS] Query connection error - cleaning up all agent connections and views [10:12:18] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:12:18] [WS] Query connection failed - cleaning up all agent connections and views [10:12:18] Will request stop of video 0 [10:12:18] Will request stop of video 0 [10:12:18] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [10:12:18] [APP_TERMINATE] ✅ No pending uploads in DB queue [10:12:18] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=false, returning=false, textView= 0.0s) [10:15:42] [AUTH] Starting PIN authentication [10:15:42] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:15:42] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:15:42] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [10:15:42] [CLEANUP] No old timer messages to delete [10:15:42] [CLIENT_SIG] WebSocket opened [10:15:42] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:15:42] [CLIENT_SIG] Connected! clientId=CWGNX8sFGubcreGN [10:15:42] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=28820)... [10:15:42] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:15:42] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:15:42] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [10:15:42] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:15:42] [USER] ✅ User registered successfully [10:15:42] [PUSH] User registration after token update: success [10:15:42] [PRELOAD] No messages or parse error [10:15:43] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:15:43] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:15:44] [PIN_AUTH] Correct PIN [10:15:44] [SECURITY] Restored real session: ILUIWU [10:15:44] [SECURITY] Restored real session: ILUIWU [10:15:44] [SECURITY] Saved real session: ILUIWU [10:15:44] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:15:44] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:15:44] [UPLOAD_QUEUE] ✅ Database integrity check passed [10:15:44] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [10:15:44] Documents Directory: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents [10:15:44] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:15:44] [CAPTURE_HOST] live-feed moved hosted view to plain container [10:15:44] [THEME] Applying current theme [10:15:44] [CHAT] Applied day theme (mode: day) [10:15:44] [SECURITY] Saved real session: ILUIWU [10:15:44] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:15:44] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:15:44] [NETWORK] Network monitor started [10:15:44] [NETWORK] Status changed: connected [10:15:44] Did transition [10:15:44] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:15:44] [VIEWER] Screen lock enabled - normal idle behavior [10:15:44] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [10:15:44] [VCC] ========== VideoConnectionClass INIT ========== [10:15:44] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:15:44] [DATA AUDIO] ========== setupWebRTC() START ========== [10:15:44] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:15:44] [DATA AUDIO] Creating encoder/decoder factories... [10:15:44] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:15:44] [CODEC] Viewer selected encoder: AV1 (best quality) [10:15:44] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:15:44] [DATA AUDIO] ✅ Factory created [10:15:44] [DATA AUDIO] RTCAudioSession locked [10:15:44] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:15:44] [DATA AUDIO] RTCAudioSession unlocked [10:15:44] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:15: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:15:44] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:15:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:15:44] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:15:44] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:15:44] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:15:44] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:15:44] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:15:44] Did transition [10:15:44] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:15:44] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:15:44] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:15:44] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:15:44] [READBY_OPT] Fetching readBy for 14 unsettled messages (targeted) [10:15:44] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [10:15:44] [MIGRATION] No messages need sender_name backfill [10:15:44] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:15:44] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:15:44] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:15:44] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28820 [10:15:44] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [10:15:44] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [10:15:44] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [10:15:44] [GALLERY_DB] Raw datesent for msg 28718: '2026-04-22 12:02:50' [10:15:44] [USER] ✅ User registered successfully [10:15:44] [USER] User registration successful [10:15:44] [GALLERY_DB] ✅ Loaded 1255 media messages [10:15:44] [INCREMENTAL_SYNC] ✅ No new messages [10:15:45] [GALLERY] Filtered 1255 -> 1232 (only with local thumbnails) [10:15:45] [GALLERY] First 5 after sort (newest first): [10:15:45] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:15:45] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:15:45] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:15:45] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:15:45] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [10:15:45] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [10:15:45] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [10:15:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:15:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28820, 28819, 28818, 28817, 28816] [10:15:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:15:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:15:45] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:15:45] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [10:15:45] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:15:45] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:15:45] [CELL_UPLOAD] configure: msgId=28734, file=653beabd4db198ba.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:15:45] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:15:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=653beabd4db198ba.jpg, overlayExists=true [10:15:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:15:45] [SERVER] Starting reconnect polling (5s interval) [10:15:45] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:15:45] [ICONS] Offset applied: -14.6 [10:15:45] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:15:45] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:15:45] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:15:45] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:15:45] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:15:45] [ICONS] Chat center: (31.2, 87.0) [10:15:45] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:15:45] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:15:45] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:15:45] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:15:45] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:15:45] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:15:45] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:15:45] [ICONS] Screen width: 440.0 [10:15:45] [COMBINED_FETCH] Loaded 14 read receipts, 3 messages with reactions [10:15:45] [READBY_ENRICH] Enriched 14/14 unsettled messages with readBy data [10:15:45] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3848, currentOffset=3848 [10:15:45] [SCROLL] Scrolling to 3848, animated=false [10:15:45] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:15:45] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:15:45] [UNSENT_RETRY] Checking for unsent messages... [10:15:45] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:15:45] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [10:15:45] [UPLOAD_RECOVERY] Session: ILUIWU [10:15:45] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:15:45] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28362, file=99bb302f2e76748c.jpg, upload_status=complete [10:15:45] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [10:15:45] [PENDING_UPLOAD] Total pending upload messages: 0 [10:15:45] [UNSENT_RETRY] No unsent messages found [10:15:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=70 [10:15:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28820, 28819, 28818, 28817, 28816] [10:15:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:15:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [10:15:45] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:15:45] [SCROLL] wasNearBottom=true, threshold=758, offset=3848, contentH=4606, boundsH=758, forceScroll=true [10:15:45] new_session POST ok: token len=157 [10:15:45] HELLO → sent (fetched token, role=query) [10:15:45] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:15:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:15:45] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3908, currentOffset=3908 [10:15:45] [SCROLL] Scrolling to 3908, animated=false [10:15:45] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [10:15:45] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [10:15:45] [SIG] hello_ok received for query connection - ready to query agents [10:15:45] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [10:15:45] [SIG] get_agents request sent for sessionId=ILUIWU [10:15:45] [SIG] get_agents request sent for sessionId=iosILUIWU [10:15:45] [SERVER] Stopped reconnect polling [10:15:45] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:15:45] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [10:15:45] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [10:15:45] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:15:45] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [10:15:45] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [10:15:45] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [10:15:45] [SERVER] Starting reconnect polling (5s interval) [10:15:45] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:15:46] [CAMERA] Device orientation changed: portrait → rotating icons by 0° [10:15:46] [CAMERA] Switch-over factors: [2, 10] [10:15:46] [CAMERA] updateVideoOrientation - no connection [10:15:46] [CAMERA] Virtual device max zoom: 123.75 [10:15:46] [CAMERA] 0.5x: virtual device at zoom 1.0 (ultra-wide) [10:15:46] [CAMERA] 1x: virtual device at zoom 2.0 (wide angle, macro enabled) [10:15:46] [CAMERA] 2x: virtual device at zoom 4.0 [10:15:46] [CAMERA] 4x: virtual device at zoom 8.0 (telephoto) [10:15:46] [CAMERA] 8x: virtual device at zoom 16.0 [10:15:46] [CAMERA] Discovered 5 lenses: ["0.5x=1.0", "1x=2.0", "2x=4.0", "4x=8.0", "8x=16.0"] [10:15:46] [CAMERA] Using device: Front Camera (AVCaptureDeviceTypeBuiltInWideAngleCamera) [10:15:46] [VOLUME] Starting volume button monitoring [10:15:46] [VOLUME] Audio session activated for volume KVO, initial volume: 0.25 [10:15:46] [VOLUME] Volume observation started [10:15:46] [CAMERA] updateVideoOrientation - no connection [10:15:46] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [10:15:46] [CAMERA] updateVideoOrientation - no connection [10:15:46] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [10:15:46] [CAMERA] setupPreviewLayer - previewView.bounds: (0.0, 0.0, 440.0, 796.0), previewLayer.frame: (0.0, 0.0, 440.0, 796.0) [10:15:46] [VOLUME] Hidden MPVolumeView installed on window [10:15:46] [CAMERA] Configuring focus for Front Camera [10:15:46] [CAMERA] Focus configured: mode=1, subjectAreaMonitoring=true [10:15:47] [CAMERA] Switched to continuous autofocus, lens position: 0.56078434 [10:15:50] [SERVER] Polling - attempting to reconnect... [10:15:50] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:15:50] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:15:55] [HAPTIC] triggerHapticFeedback called - mode: photo, isRecording: false [10:15:55] [HAPTIC] Triggering peek haptic for photo [10:15:55] [CAMERA] capturePhoto - set rotation angle=90.0, camera=FRONT [10:15:55] [SERVER] Polling - attempting to reconnect... [10:15:55] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:15:55] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:15:55] [VOLUME] Stopping volume button monitoring [10:15:55] [VOLUME] Audio session deactivated [10:15:55] [CROP] setting imageBounds=(0.625, 0.0, 438.75, 780.0) (imageView.bounds=(440.0, 780.0), image.size=(1080.0, 1920.0)) [10:15:55] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:55] [CROP] overlay.superview=Optional(; position=; }; backgroundColor = UIExtendedGrayColorSpace 0 1; layer = >), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:55] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:55] [CROP] overlay.superview=Optional(; position=; }; backgroundColor = UIExtendedGrayColorSpace 0 1; layer = >), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:57] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:57] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:58] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:58] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:15:59] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:15:59] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:00] [SERVER] Polling - attempting to reconnect... [10:16:00] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:16:00] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:16:00] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:16:00] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:01] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:16:01] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:01] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:16:01] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:02] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:16:02] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:02] Chosen timer = 0 [10:16:02] [CROP] viewDidLayoutSubviews: overlay.frame=(0.0, 62.0, 440.0, 780.0), overlay.bounds=(0.0, 0.0, 440.0, 780.0), imageView.frame=(0.0, 62.0, 440.0, 780.0), overlay.isUserInteractionEnabled=true, overlay.isHidden=false, overlay.alpha=1.0 [10:16:02] [CROP] overlay.superview=Optional(>), gestureRecognizers=Optional([; target= <(action=handlePan:, target=)>; must-fail-for = { ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) [10:16:02] [VOLUME] Starting volume button monitoring [10:16:02] [VOLUME] Audio session activated for volume KVO, initial volume: 0.25 [10:16:02] [VOLUME] Volume observation started [10:16:02] [VOLUME] Stopping volume button monitoring [10:16:02] [VOLUME] Audio session deactivated [10:16:02] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [10:16:02] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:16:02] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:16:02] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [10:16:02] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [10:16:02] [GALLERY_DB] Raw datesent for msg 28718: '2026-04-22 12:02:50' [10:16:02] [GALLERY_DB] ✅ Loaded 1255 media messages [10:16:03] [GALLERY] Filtered 1255 -> 1232 (only with local thumbnails) [10:16:03] [GALLERY] First 5 after sort (newest first): [10:16:03] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:16:03] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:16:03] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:16:03] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:16:03] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [10:16:03] [VOLUME] Hidden MPVolumeView installed on window [10:16:03] [MEDIA_SEND] ========== NEW UPLOAD ========== [10:16:03] [MEDIA_SEND] onSend called [10:16:03] [MEDIA_SEND] Source URL: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/E9C3A448-E3EB-4E98-B394-9C6930AE55C9.jpg [10:16:03] [MEDIA_SEND] Source file exists: true [10:16:03] [MEDIA_SEND] Original filename: E9C3A448-E3EB-4E98-B394-9C6930AE55C9.jpg [10:16:03] [MEDIA_SEND] Random filename: 2c2436d604281163.jpg [10:16:03] [MEDIA_SEND] File extension: jpg [10:16:03] [MEDIA_SEND] Local media path: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents/MediaCache/2c2436d604281163.jpg [10:16:03] [MEDIA_SEND] Local thumbnail path: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents/MediaCache/t_2c2436d604281163.jpg [10:16:03] [MEDIA_SEND] Source file size: 625641 bytes (0.60 MB) [10:16:03] [MEDIA_SEND] Copying file (<100MB) [10:16:03] [MEDIA_SEND] File copied successfully [10:16:03] [MEDIA_SEND] Destination file exists: true [10:16:03] [MEDIA_SEND] Destination file size: 625641 bytes [10:16:03] [MEDIA_SEND] Creating thumbnail... [10:16:03] [MEDIA_SEND] Thumbnail created in 0.02s [10:16:03] [MEDIA_SEND] Thumbnail dimensions: (225.0, 400.0) [10:16:03] [MEDIA_SEND] Thumbnail exists: true [10:16:03] [MEDIA_SEND] Thumbnail file size: 27853 bytes [10:16:03] [MEDIA_SEND] Prepared encrypted media and thumbnail [10:16:03] [MEDIA_SEND] Sending message to server... [10:16:03] [MEDIA_SEND] Caption: '' [10:16:03] [MEDIA_SEND] Timer: 0 [10:16:03] [MEDIA_SEND] Filename: 2c2436d604281163.jpg [10:16:03] [MEDIA_FLOW] ⚠️ Message sent BEFORE upload starts - if app dies now, file won't be uploaded! [10:16:03] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [10:16:03] [MEDIA_SEND] 📤 Creating media message: id=-1, file=2c2436d604281163.jpg, isGiphy=false, upload_status=1 (pending) [10:16:03] [MEDIA_SEND] 💾 Inserted to DB with upload_status=1 [10:16:03] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [10:16:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [10:16:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28820, 28819, 28818, 28817] [10:16:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:16:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:16:03] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:16:03] [SCROLL] wasNearBottom=true, threshold=758, offset=3908, contentH=4666, boundsH=758, forceScroll=false [10:16:03] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:16:03] [CELL_UPLOAD] configure: msgId=-1, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=1 [10:16:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=1 → pending [10:16:03] [CELL_UPLOAD] setUploadStatus(pending, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:03] [CELL_UPLOAD] → pending: overlay.isHidden=false, alpha=1.0 [10:16:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [10:16:03] [CELL_UPLOAD] configure: msgId=-1, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=1 [10:16:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=1 → pending [10:16:03] [CELL_UPLOAD] setUploadStatus(pending, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:03] [CELL_UPLOAD] → pending: overlay.isHidden=false, alpha=1.0 [10:16:03] [SCROLL] 💓 alive, visible=41...52, rows=53, estHeight=0.0, heightCalls=119 [10:16:03] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:16:03] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:16:03] [MEDIA_SEND] sendMessage API call completed [10:16:03] [MEDIA_SEND] Starting THUMBNAIL upload: t_2c2436d604281163.jpg [10:16:03] [UPLOAD_ENQUEUE] 📥 ========== ENQUEUE UPLOAD ========== [10:16:03] [UPLOAD_ENQUEUE] 📥 File: t_2c2436d604281163.jpg [10:16:03] [UPLOAD_ENQUEUE] 📥 Local path: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/9F34EC8F-90F1-413A-94D2-73FC76879294-t_2c2436d604281163.jpg [10:16:03] [UPLOAD_ENQUEUE] 📥 Session: ILUIWU [10:16:03] [UPLOAD_ENQUEUE] 📥 File exists: true, size: 0.0 MB [10:16:03] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4218, currentOffset=4218 [10:16:03] [SCROLL] Scrolling to 4218, animated=true [10:16:03] [UPLOAD_QUEUE] Enqueued upload id=1650 for t_2c2436d604281163.jpg [10:16:03] [UPLOAD_DEBUG] ========== START UPLOAD ========== [10:16:03] [UPLOAD_DEBUG] Item ID: 1650 [10:16:03] [UPLOAD_DEBUG] Local URL: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/9F34EC8F-90F1-413A-94D2-73FC76879294-t_2c2436d604281163.jpg [10:16:03] [UPLOAD_DEBUG] Random filename: t_2c2436d604281163.jpg [10:16:03] [UPLOAD_DEBUG] Session ID: ILUIWU [10:16:03] [UPLOAD_DEBUG] API Base: https://crivello.dyndns.org:443/WebRTC/chat/ [10:16:03] [UPLOAD_DEBUG] Retry count: 0 [10:16:03] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_2c2436d604281163.jpg, status=uploading (2), progress=0.0% [10:16:03] [UPLOAD_DEBUG] File exists: true [10:16:03] [UPLOAD_DEBUG] File size: 27881 bytes (0.0 MB) [10:16:03] [UPLOAD_DEBUG] Chunked threshold: 104857600 bytes (100 MB) [10:16:03] [UPLOAD_DEBUG] → Using STANDARD upload (file <= threshold) [10:16:03] [UPLOAD_DEBUG] --- startStandardUpload --- [10:16:03] [UPLOAD_DEBUG] Upload URL: https://crivello.dyndns.org:443/WebRTC/chat/upload_media.php [10:16:03] [UPLOAD_DEBUG] File extension: jpg, MIME type: image/jpeg [10:16:03] [UPLOAD_DEBUG] Temp file URL: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/59D57E52-BB4C-480E-8AEB-88A9AA4C062A.upload [10:16:03] [UPLOAD_DEBUG] File size: 27881 bytes, in-memory threshold: 10485760 bytes [10:16:03] [UPLOAD_DEBUG] Creating multipart body (in-memory mode)... [10:16:03] [UPLOAD_STATUS] 📬 Received notification: file=t_2c2436d604281163.jpg, status=2 (uploading) [10:16:03] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_2c2436d604281163.jpg [10:16:03] [UPLOAD_STATUS] 💾 Updating DB: file=t_2c2436d604281163.jpg, status=2 (uploading) [10:16:03] [UPLOAD_DEBUG] ✓ In-memory body written to temp file (28400 bytes) [10:16:03] [UPLOAD_DEBUG] Creating foreground upload task (default session)... [10:16:03] [UPLOAD_DEBUG] Task created with identifier: 1 [10:16:03] [UPLOAD_DEBUG] Added to activeUploads dictionary [10:16:03] [UPLOAD_DEBUG] Updated DB status to 'uploading' [10:16:03] [UPLOAD_LIFECYCLE] 🚀 STARTED | task=1 | file=t_2c2436d604281163.jpg | size=0.0MB | retries=0 [10:16:03] [UPLOAD_DEBUG] ✓ Task resumed - upload should be in progress now [10:16:03] [UPLOAD_DEBUG] ========== UPLOAD STARTED ========== [10:16:03] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_2c2436d604281163.jpg not found in local_messages [10:16:03] [UPLOAD_PROGRESS] t_2c2436d604281163.jpg: 100% (0.0/0.0 MB) task=1 [10:16:03] [UPLOAD_TIMING] ⏱️ All bytes sent for t_2c2436d604281163.jpg at 2026-04-23 07:16:03 +0000 [10:16:03] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_2c2436d604281163.jpg, status=uploading (2), progress=100.0% [10:16:03] [UPLOAD_STATUS] 📬 Received notification: file=t_2c2436d604281163.jpg, status=2 (uploading) [10:16:03] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_2c2436d604281163.jpg [10:16:03] [UPLOAD_STATUS] 💾 Updating DB: file=t_2c2436d604281163.jpg, status=2 (uploading) [10:16:03] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_2c2436d604281163.jpg not found in local_messages [10:16:04] [UPLOAD_RESPONSE] Started receiving response for task 1 [10:16:04] [UPLOAD_METRICS] Task 1 metrics (session: foreground): [10:16:04] [UPLOAD_METRICS] Total time: 0.44s [10:16:04] [UPLOAD_METRICS] Upload time: 0.00s [10:16:04] [UPLOAD_METRICS] Response time: 0.00s [10:16:04] [UPLOAD_METRICS] Network protocol: http/1.1 [10:16:04] [UPLOAD_METRICS] Proxy: no [10:16:04] [UPLOAD_METRICS] Reused connection: no [10:16:04] [UPLOAD_TIMING] ⏱️ didCompleteWithError ENTERED at 2026-04-23 07:16:04 +0000 [10:16:04] [UPLOAD_COMPLETE] ========== Task Completed ========== [10:16:04] [UPLOAD_COMPLETE] Task ID: 1 [10:16:04] [UPLOAD_COMPLETE] Task state: 3 (0=running, 1=suspended, 2=canceling, 3=completed) [10:16:04] [UPLOAD_COMPLETE] Filename: t_2c2436d604281163.jpg [10:16:04] [UPLOAD_COMPLETE] Local path: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/9F34EC8F-90F1-413A-94D2-73FC76879294-t_2c2436d604281163.jpg [10:16:04] [UPLOAD_COMPLETE] Retry count: 0 [10:16:04] [UPLOAD_TIMING] ⏱️ Server response delay: 0.186s (time between 100% sent → HTTP response) for t_2c2436d604281163.jpg [10:16:04] [UPLOAD_COMPLETE] HTTP Status: 200 [10:16:04] [UPLOAD_COMPLETE] Response headers: [AnyHashable("Server"): Apache/2.4.66 (Debian), AnyHashable("Keep-Alive"): timeout=5, max=100, AnyHashable("Content-Type"): application/json, AnyHashable("Content-Length"): 255, AnyHashable("Connection"): Keep-Alive, AnyHashable("Date"): Thu, 23 Apr 2026 07:16:03 GMT] [10:16:04] [UPLOAD_COMPLETE] Response body (255 bytes): {"ok":true,"file_name":"t_2c2436d604281163.jpg","orig_name":"9F34EC8F-90F1-413A-94D2-73FC76879294-t_2c2436d604281163.jpg","size":27881,"env":{"file_uploads":"1","upload_max_filesize":"5G","post_max_size":"200M","upload_tmp_dir":"","content_length":28400}} [10:16:04] [UPLOAD_COMPLETE] ✅ Server confirmed upload OK [10:16:04] [UPLOAD_COMPLETE] Server filename: t_2c2436d604281163.jpg [10:16:04] [UPLOAD_TIMING] ⏱️ didCompleteWithError processing took 0.002s before markUploadCompleted [10:16:04] [UPLOAD_COMPLETE] File < 100MB, skipping verification [10:16:04] [UPLOAD_TIMING] ⏱️ markUploadCompleted ENTERED at 2026-04-23 07:16:04 +0000 on thread: BG [10:16:04] [UPLOAD_LIFECYCLE] ✅ COMPLETED | file=t_2c2436d604281163.jpg | id=1650 | retries=0 [10:16:04] [UPLOAD_COMPLETE] ✅ ========== UPLOAD COMPLETED ========== [10:16:04] [UPLOAD_COMPLETE] ✅ File: t_2c2436d604281163.jpg [10:16:04] [UPLOAD_COMPLETE] ✅ Queue ID: 1650 [10:16:04] [UPLOAD_COMPLETE] ✅ Session: ILUIWU [10:16:04] [UPLOAD_COMPLETE] ✅ Server filename: t_2c2436d604281163.jpg [10:16:04] [UPLOAD_COMPLETE] ✅ Posting .complete status notification [10:16:04] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_2c2436d604281163.jpg, status=complete (0), progress=0.0% [10:16:04] [UPLOAD_TIMING] ⏱️ postStatusChange(.complete) dispatched in 0.001s [10:16:04] [UPLOAD_TIMING] ⏱️ main.async delay: 0.000s for t_2c2436d604281163.jpg status=complete [10:16:04] [UPLOAD_TIMING] ⏱️ markUploadCompleted returned at 2026-04-23 07:16:04 +0000 [10:16:04] [UPLOAD_STATUS] 📬 Received notification: file=t_2c2436d604281163.jpg, status=0 (complete) [10:16:04] [UPLOAD_COMPLETE] ✅ Upload queue DB updated to 'completed' for id=1650 [10:16:04] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_2c2436d604281163.jpg [10:16:04] [UPLOAD_STATUS] 💾 Updating DB: file=t_2c2436d604281163.jpg, status=0 (complete) [10:16:04] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_2c2436d604281163.jpg not found in local_messages [10:16:04] [CLIENT_SIG] Event received: type=0 messageId=28821 [10:16:04] [WS_EVENT] Received event: type=0, messageId=28821 [10:16:04] [WS_EVENT] 📨 New message notification (msgId=28821) - triggering incremental refresh, currentMsgCount=51 [10:16:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:16:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28820 [10:16:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [10:16:04] [MEDIA_SEND] Thumbnail uploaded successfully in 0.46s [10:16:04] [MEDIA_SEND] Thumbnail server filename: t_2c2436d604281163.jpg [10:16:04] [MEDIA_SEND] Starting MAIN FILE upload: 2c2436d604281163.jpg [10:16:04] [UPLOAD_ENQUEUE] 📥 ========== ENQUEUE UPLOAD ========== [10:16:04] [UPLOAD_ENQUEUE] 📥 File: 2c2436d604281163.jpg [10:16:04] [UPLOAD_ENQUEUE] 📥 Local path: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/DB29A99D-E413-4BE4-8E9B-C9D535DB1496-2c2436d604281163.jpg [10:16:04] [UPLOAD_ENQUEUE] 📥 Session: ILUIWU [10:16:04] [UPLOAD_ENQUEUE] 📥 File exists: true, size: 0.6 MB [10:16:04] [UPLOAD_QUEUE] Enqueued upload id=1651 for 2c2436d604281163.jpg [10:16:04] [UPLOAD_DEBUG] ========== START UPLOAD ========== [10:16:04] [UPLOAD_DEBUG] Item ID: 1651 [10:16:04] [UPLOAD_DEBUG] Local URL: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/DB29A99D-E413-4BE4-8E9B-C9D535DB1496-2c2436d604281163.jpg [10:16:04] [UPLOAD_DEBUG] Random filename: 2c2436d604281163.jpg [10:16:04] [UPLOAD_DEBUG] Session ID: ILUIWU [10:16:04] [UPLOAD_DEBUG] API Base: https://crivello.dyndns.org:443/WebRTC/chat/ [10:16:04] [UPLOAD_DEBUG] Retry count: 0 [10:16:04] [UPLOAD_NOTIFY] 📣 Posting notification: file=2c2436d604281163.jpg, status=uploading (2), progress=0.0% [10:16:04] [UPLOAD_DEBUG] File exists: true [10:16:04] [UPLOAD_STATUS] 📬 Received notification: file=2c2436d604281163.jpg, status=2 (uploading) [10:16:04] [UPLOAD_STATUS] 📝 Updated allMessagesWithReadBy[0]: 1 → 2 [10:16:04] [UPLOAD_STATUS] 📝 Updated chatMessages[0]: status=2 [10:16:04] [UPLOAD_STATUS] 📝 Updated chatRows[52]: status=2 [10:16:04] [UPLOAD_DEBUG] File size: 625669 bytes (0.6 MB) [10:16:04] [UPLOAD_STATUS] 💾 Updating DB: file=2c2436d604281163.jpg, status=2 (uploading) [10:16:04] [UPLOAD_DEBUG] Chunked threshold: 104857600 bytes (100 MB) [10:16:04] [UPLOAD_DEBUG] → Using STANDARD upload (file <= threshold) [10:16:04] [UPLOAD_DEBUG] --- startStandardUpload --- [10:16:04] [UPLOAD_DEBUG] Upload URL: https://crivello.dyndns.org:443/WebRTC/chat/upload_media.php [10:16:04] [UPLOAD_DEBUG] File extension: jpg, MIME type: image/jpeg [10:16:04] [UPLOAD_DEBUG] Temp file URL: /private/var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/tmp/21CEB9B8-D282-4D3C-BAD9-0FD8E703788F.upload [10:16:04] [UPLOAD_DEBUG] File size: 625669 bytes, in-memory threshold: 10485760 bytes [10:16:04] [UPLOAD_DEBUG] Creating multipart body (in-memory mode)... [10:16:04] [UPLOAD_STATUS] ✅ DB updated: 1 row(s) affected for file=2c2436d604281163.jpg [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading: circularProgress visible, overlay.isHidden=false [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading: circularProgress visible, overlay.isHidden=false [10:16:04] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28821,"session_id":"ILUIWU","message_type":1,"file_name":"2c2436d604281163.jpg","datesent_utc":"2026-04-23 07:16:04"} [10:16:04] [CHAT] receive_message.php JSON: ["message_id": 28821, "message_type": 1, "ok": 1, "datesent_utc": 2026-04-23 07:16:04, "file_name": 2c2436d604281163.jpg, "session_id": ILUIWU] [10:16:04] [DB_UPGRADE] Upgrading message ID: -1 → 28821, preserveOriginalDate=false [10:16:04] [UPLOAD_DEBUG] ✓ In-memory body written to temp file (626182 bytes) [10:16:04] [DB_UPGRADE] ✅ Upgraded -1 → 28821 with send_status=0, 1 row(s) affected [10:16:04] [UPLOAD_DEBUG] Creating foreground upload task (default session)... [10:16:04] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28821 [10:16:04] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28821 [10:16:04] [UPLOAD_DEBUG] Task created with identifier: 2 [10:16:04] [UPLOAD_DEBUG] Added to activeUploads dictionary [10:16:04] [UPLOAD_DEBUG] Updated DB status to 'uploading' [10:16:04] [UPLOAD_LIFECYCLE] 🚀 STARTED | task=2 | file=2c2436d604281163.jpg | size=0.6MB | retries=0 [10:16:04] [UPLOAD_DEBUG] ✓ Task resumed - upload should be in progress now [10:16:04] [UPLOAD_DEBUG] ========== UPLOAD STARTED ========== [10:16:04] ReloadData 9 [10:16:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=2 [10:16:04] [CELL_UPLOAD] → has active progress=0.0, setting uploading [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading: circularProgress visible, overlay.isHidden=false [10:16:04] [UPLOAD_PROGRESS] 2c2436d604281163.jpg: 100% (0.6/0.6 MB) task=2 [10:16:04] [UPLOAD_TIMING] ⏱️ All bytes sent for 2c2436d604281163.jpg at 2026-04-23 07:16:04 +0000 [10:16:04] [UPLOAD_NOTIFY] 📣 Posting notification: file=2c2436d604281163.jpg, status=uploading (2), progress=100.0% [10:16:04] [UPLOAD_STATUS] 📬 Received notification: file=2c2436d604281163.jpg, status=2 (uploading) [10:16:04] [UPLOAD_STATUS] 📝 Updated allMessagesWithReadBy[0]: 2 → 2 [10:16:04] [UPLOAD_STATUS] 📝 Updated chatMessages[0]: status=2 [10:16:04] [UPLOAD_STATUS] 📝 Updated chatRows[52]: status=2 [10:16:04] [UPLOAD_STATUS] 💾 Updating DB: file=2c2436d604281163.jpg, status=2 (uploading) [10:16:04] [UPLOAD_STATUS] ✅ DB updated: 1 row(s) affected for file=2c2436d604281163.jpg [10:16:04] [MEDIA_SEND] Main upload progress: 100% [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=1.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading 100%: hiding overlay early (server response pending) [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=1.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading 100%: hiding overlay early (server response pending) [10:16:04] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:16:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [10:16:04] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=1 rawType=Optional raw=Optional(1) [10:16:04] [USTATUS] PARSE msgId=28821 file=2c2436d604281163.jpg uploadStatus=1 [10:16:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:16:04] [USTATUS] UPDATED msgId=28821 2 → 1 [10:16:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:16:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:16:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:16:04] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:16:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:16:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28821, 28820, 28819, 28818, 28817] [10:16:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:16:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:16:04] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:16:04] [SCROLL] wasNearBottom=true, threshold=758, offset=4218, contentH=4976, boundsH=758, forceScroll=true [10:16:04] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:16:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=1 [10:16:04] [CELL_UPLOAD] → has active progress=1.0, setting uploading [10:16:04] [CELL_UPLOAD] setUploadStatus(uploading, progress=1.0) for file=2c2436d604281163.jpg, overlayExists=true [10:16:04] [CELL_UPLOAD] → uploading 100%: hiding overlay early (server response pending) [10:16:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:16:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4218, currentOffset=4218 [10:16:04] [SCROLL] Scrolling to 4218, animated=false [10:16:05] [LIFECYCLE] App resigning active - cleared crash flag [10:16:05] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [10:16:05] [SERVER] Polling - attempting to reconnect... [10:16:05] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:16:05] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:16:05] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=96ms [10:16:05] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [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] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:16:05] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:16:05] [LIFECYCLE] Background snapshot: count=51, maxId=28821 [10:16:05] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:23:04] [CRASH] No crash detected [10:23:04] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:23:04] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:23:04] [GIPHY] SDK not available - using REST API fallback [10:23:04] [BACKGROUND] Background fetch enabled [10:23:04] [SECURITY] Initial launch - timeout exceeded (419.11488795280457s > 0.0s) [10:23:04] [AUTH] Starting PIN authentication [10:23:04] [PUSH] Silent push received [10:23:04] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:23:04 +0000, appState=2, message_id=nil, type=nil [10:23:04] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:23:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:23:04 +0000 [10:23:04] [PUSH_EMBED] No embedded message_data in notification [10:23:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:23:04] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:23:04] [PUSH] No embedded data, pre-loading messages from server [10:23:04] [PUSH_PRELOAD] Fetching messages for instant display cache [10:23:04] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [10:23:04] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [10:23:04] [CLEANUP] No old timer messages to delete [10:23:05] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=28821)... [10:23:05] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [10:23:05] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:23:05] [PRELOAD] No messages or parse error [10:23:05] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [10:23:05] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:23:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:23:05] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:23:05] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:23:05] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:23:05] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:23:05] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:23:05] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:23:05] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:23:05] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:23:05] [USER] ✅ User registered successfully [10:23:05] [PUSH] User registration after token update: success [10:23:05] [USER] ✅ User registered successfully [10:23:05] [PUSH] User registration after token update: success [10:23:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:38:55] [PUSH] Silent push received [10:38:55] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:38:55 +0000, appState=2, message_id=28824, type=nil [10:38:55] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:38:55] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:38:55 +0000 [10:38:55] [PUSH_TRACE] ⬇️ Processing embedded message_id=28824 [10:38:55] [PUSH_EMBED] 📩 Received embedded message: id=28824, type=0, sender=Laurent [10:38:55] [PUSH_TRACE] ⬇️ Message details: text="The least body piece of you I see has a dramatic i...", datesent=2026-04-23 07:23:54 [10:38:55] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:38:55] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28824 [10:38:55] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28824 [10:38:55] [PUSH_EMBED] ✅ Saved message 28824 to local DB (sync) [10:38:55] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28824 [10:38:55] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28824 [10:38:55] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28824 [10:38:55] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [10:38:55] [PUSH_EMBED] Inserted message 28824 into existing cache (now 51 messages) [10:38:55] [PUSH_TRACE] 📦 ✅ Inserted message 28824, cache now has IDs: [28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [10:38:55] [PUSH_TRACE] 📦 EXITING cache update queue for message 28824 [10:38:55] [PUSH_EMBED] Fetching evolution data for message 28824 in background [10:38:55] [PUSH_EMBED] ✅ Fully processed message 28824 [10:38:55] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28824 [10:38:55] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813], handled=true [10:38:55] [PUSH] Embedded message handled instantly from silent push [10:38:55] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:38:55] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28824 [10:38:55] [PUSH_EMBED] Got evolution data for message 28824, saving to local DB [10:38:55] [PUSH_EMBED] Saved evolution data for message 28824 [10:53:17] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:53:17] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:53:17] [CLIENT_SIG] WebSocket opened [10:53:17] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:53:17] [CLIENT_SIG] Connected! clientId=xKAHgKphd0opWeDm [10:53:17] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:53:17] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:53:17] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:53:17] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow[10:53:20] [LOG] Pruned 39 entries older than 3 hours [10:53:20] [SECURITY] Restored real session: ILUIWU [10:53:20] [SECURITY] Restored real session: ILUIWU [10:53:20] [SECURITY] Saved real session: ILUIWU [10:53:20] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:53:20] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:53:20] [UPLOAD_QUEUE] ✅ Database integrity check passed [10:53:20] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [10:53:20] Documents Directory: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents [10:53:20] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:53:20] [CAPTURE_HOST] live-feed moved hosted view to plain container [10:53:20] [THEME] Applying current theme [10:53:20] [CHAT] Applied day theme (mode: day) [10:53:20] [SECURITY] Saved real session: ILUIWU [10:53:20] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:53:20] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:53:20] [NETWORK] Network monitor started [10:53:20] [NETWORK] Status changed: connected [10:53:20] Did transition [10:53:20] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:53:20] [VIEWER] Screen lock enabled - normal idle behavior [10:53:20] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [10:53:20] [VCC] ========== VideoConnectionClass INIT ========== [10:53:20] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:53:20] [DATA AUDIO] ========== setupWebRTC() START ========== [10:53:20] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:53:20] [DATA AUDIO] Creating encoder/decoder factories... [10:53:20] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:53:20] [CODEC] Viewer selected encoder: AV1 (best quality) [10:53:20] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:53:20] [DATA AUDIO] ✅ Factory created [10:53:20] [DATA AUDIO] RTCAudioSession locked [10:53:20] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:53:20] [DATA AUDIO] RTCAudioSession unlocked [10:53:20] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:53:20] [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:20] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:53:20] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:53:20] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:53:20] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:53:20] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:53:20] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:53:20] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:53:20] Did transition [10:53:20] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:53:20] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:53:20] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:53:20] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:53:20] [READBY_OPT] No message IDs to fetch - skipping server call [10:53:20] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [10:53:20] [MIGRATION] No messages need sender_name backfill [10:53:20] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:53:20] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:53:20] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:53:20] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28824, maxMemoryId=28824 [10:53:20] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28824 [10:53:20] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [10:53:20] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [10:53:20] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [10:53:20] [GALLERY_DB] ✅ Loaded 1256 media messages [10:53:20] [INCREMENTAL_SYNC] ✅ No new messages [10:53:21] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [10:53:21] [GALLERY] First 5 after sort (newest first): [10:53:21] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [10:53:21] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:53:21] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:53:21] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:53:21] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:53:21] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [10:53:21] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [10:53:21] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:53:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28824, 28821, 28820, 28819, 28818] [10:53:21] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:53:21] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [10:53:21] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:53:21] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [10:53:21] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:53:21] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:53:21] [CELL_UPLOAD] configure: msgId=28734, file=653beabd4db198ba.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:21] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:21] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=653beabd4db198ba.jpg, overlayExists=true [10:53:21] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:53:21] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:21] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:21] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:53:21] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28821 → 28824 [10:53:21] [SERVER] Starting reconnect polling (5s interval) [10:53:21] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:53:21] [ICONS] Offset applied: -14.6 [10:53:21] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:53:21] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [10:53:21] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:53:21] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:53:21] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:53:21] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:53:21] [ICONS] Chat center: (31.2, 87.0) [10:53:21] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:53:21] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:53:21] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:53:21] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:53:21] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:53:21] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:53:21] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:53:21] [ICONS] Screen width: 440.0 [10:53:21] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4042, currentOffset=4042 [10:53:21] [SCROLL] Scrolling to 4042, animated=false [10:53:21] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:53:21] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:53:21] [UNSENT_RETRY] Checking for unsent messages... [10:53:21] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:53:21] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [10:53:21] [UPLOAD_RECOVERY] Session: ILUIWU [10:53:21] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:53:21] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [10:53:21] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [10:53:21] [PENDING_UPLOAD] Total pending upload messages: 0 [10:53:21] [UNSENT_RETRY] No unsent messages found [10:53:21] new_session POST ok: token len=157 [10:53:21] HELLO → sent (fetched token, role=query) [10:53:21] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [10:53:21] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [10:53:21] [SIG] hello_ok received for query connection - ready to query agents [10:53:21] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [10:53:21] [SIG] get_agents request sent for sessionId=ILUIWU [10:53:21] [SIG] get_agents request sent for sessionId=iosILUIWU [10:53:21] [SERVER] Stopped reconnect polling [10:53:21] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=66 [10:53:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28824, 28821, 28820, 28819, 28818] [10:53:21] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:53:21] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [10:53:21] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:53:21] [SCROLL] wasNearBottom=true, threshold=758, offset=4042, contentH=4800, boundsH=758, forceScroll=true [10:53:21] [USER] ✅ User registered successfully [10:53:21] [USER] User registration successful [10:53:21] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:53:21] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:21] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:21] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:53:21] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:53:21] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4042, currentOffset=4042 [10:53:21] [SCROLL] Scrolling to 4042, animated=false [10:53:21] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:53:21] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [10:53:21] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [10:53:21] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:53:21] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [10:53:21] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [10:53:21] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [10:53:21] [SERVER] Starting reconnect polling (5s interval) [10:53:21] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:53:24] [PUSH] Silent push received [10:53:24] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:53:24 +0000, appState=0, message_id=nil, type=nil [10:53:24] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:53:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:53:24 +0000 [10:53:24] [PUSH_EMBED] No embedded message_data in notification [10:53:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:53:24] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:53:24] [PUSH] No embedded data, pre-loading messages from server [10:53:24] [PUSH_PRELOAD] Fetching messages for instant display cache [10:53:24] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:53:24] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:53:24] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:53:24] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:53:24] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:53:24] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:53:24] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:53:24] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:53:24] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:53:24] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:53:24] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [10:53:24] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:53:24] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28824 [10:53:24] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28824] [10:53:24] [PUSH] Parsed message_id: 28824 [10:53:24] [PUSH] Parsed operation_type: 3 [10:53:24] [PUSH] Taking direct action: opType=3, messageId=28824 [10:53:24] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28824 [10:53:24] [CLIENT_SIG] Event received: type=3 messageId=28824 [10:53:24] [WS_EVENT] Received event: type=3, messageId=28824 [10:53:24] [WS_EVENT] Read receipt for message 28824 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:53:26] [SERVER] Polling - attempting to reconnect... [10:53:26] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:26] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:29] [SCROLL] 💓 alive, visible=45...51, rows=52, estHeight=0.0, heightCalls=59 [10:53:30] [SCROLL_END_DECEL] messagesTable offsetY=4407, insetTop=0, pendingVelocityY=0.0 [10:53:31] [SERVER] Polling - attempting to reconnect... [10:53:31] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:31] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:31] [SCROLL] 💓 alive, visible=49...51, rows=52, estHeight=0.0, heightCalls=0 [10:53:32] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:53:32] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [10:53:32] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [10:53:32] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [10:53:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28824, 28821, 28820, 28819] [10:53:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:53:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [10:53:32] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:53:32] [SCROLL] wasNearBottom=true, threshold=447, offset=4353, contentH=4800, boundsH=447, forceScroll=false [10:53:32] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:53:32] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:32] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:53:32] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=57 [10:53:32] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:53:32] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:53:32] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4430, currentOffset=4430 [10:53:32] [SCROLL] Scrolling to 4430, animated=true [10:53:32] [CLIENT_SIG] Event received: type=0 messageId=28825 [10:53:32] [WS_EVENT] Received event: type=0, messageId=28825 [10:53:32] [WS_EVENT] 📨 New message notification (msgId=28825) - triggering incremental refresh, currentMsgCount=51 [10:53:32] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:53:32] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28824, maxMemoryId=28824 [10:53:32] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28824 [10:53:32] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28825,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:53:32"} [10:53:32] [CHAT] receive_message.php JSON: ["file_name": , "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-04-23 07:53:32, "message_id": 28825, "message_type": 0] [10:53:32] [DB_UPGRADE] Upgrading message ID: -1 → 28825, preserveOriginalDate=false [10:53:32] [DB_UPGRADE] ✅ Upgraded -1 → 28825 with send_status=0, 1 row(s) affected [10:53:32] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28825 [10:53:32] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28825 [10:53:32] ReloadData 9 [10:53:32] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:53:32] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:53:32] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:53:32] [MENU] dismissAnyExistingMenu called [10:53:32] [MENU] dismissAnyExistingMenu completed [10:53:32] [SCROLL_BEGIN_DRAG] messagesTable offsetY=4430, insetTop=0, topDistance=4430, rows=53, prefetchedCount=0 [10:53:32] [SCROLL] 💓 alive, visible=47...51, rows=53, estHeight=0.0, heightCalls=172 [10:53:32] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:53:32] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28825] [10:53:32] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [10:53:32] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [10:53:32] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:53:32] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:53:32] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:53:32] [SCROLL_WILL_END] velocity=(0.000, -1.303), currentY=4119, targetY=3473, movingTowardTop=true, decelNow=false, dragging=true [10:53:32] [SCROLL_WILL_END] captured upward momentum velocityY=-1.3029451947733877 [10:53:32] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=4119, topInset=0, pendingVelocityY=-1.3029451947733877, targetNearTop=4119 [10:53:32] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 1233 (only with local thumbnails) [10:53:34] [GALLERY] First 5 after sort (newest first): [10:53:34] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [10:53:34] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:53:34] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:53:34] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:53:34] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:53:34] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:53:34] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:53:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28825, 28824, 28821, 28820, 28819] [10:53:34] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:53:34] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [10:53:34] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:53:34] [SCROLL] wasNearBottom=true, threshold=758, offset=4119, contentH=4877, boundsH=758, forceScroll=false [10:53:35] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:53:35] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:53:35] [MUTE] Status sent to server: muted=0, response code=200 [10:53:35] [MUTE] Status sent to server: muted=0, response code=200 [10:53:36] [SERVER] Polling - attempting to reconnect... [10:53:36] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:36] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:37] [MUTE] Status sent to server: muted=1, response code=200 [10:53:37] [MUTE] Status sent to server: muted=1, response code=200 [10:53:37] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:53:39] [MENU] dismissAnyExistingMenu called [10:53:39] [MENU] dismissAnyExistingMenu completed [10:53:39] [SCROLL_BEGIN_DRAG] messagesTable offsetY=4119, insetTop=40, topDistance=4159, rows=53, prefetchedCount=0 [10:53:39] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=1 [10:53:39] [SCROLL_WILL_END] velocity=(0.000, 2.521), currentY=4140, targetY=4119, movingTowardTop=true, decelNow=false, dragging=false [10:53:39] [SCROLL_WILL_END] captured upward momentum velocityY=2.521132572846927 [10:53:39] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=4140, topInset=40, pendingVelocityY=2.521132572846927, targetNearTop=4180 [10:53:39] [SCROLL_END_DECEL] messagesTable offsetY=4151, insetTop=40, pendingVelocityY=2.521132572846927 [10:53:39] [SCROLL_BTN] Showing button - 278pt from bottom > half 223pt [10:53:39] [SCROLL_END_DECEL] messagesTable offsetY=4430, insetTop=40, pendingVelocityY=2.521132572846927 [10:53:41] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [10:53:41] [SERVER] Polling - attempting to reconnect... [10:53:41] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:41] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:41] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=126ms [10:53:43] [PUSH] Silent push received [10:53:43] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:53:43 +0000, appState=0, message_id=nil, type=nil [10:53:43] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:53:43] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:53:43 +0000 [10:53:43] [PUSH_EMBED] No embedded message_data in notification [10:53:43] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:53:43] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815], handled=false [10:53:43] [PUSH] No embedded data, pre-loading messages from server [10:53:43] [PUSH_PRELOAD] Fetching messages for instant display cache [10:53:43] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:53:43] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:53:43] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:53:43] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:53:43] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:53:43] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:53:43] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [10:53:43] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:53:43] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28734] [10:53:43] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28734] [10:53:43] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [10:53:43] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:53:43] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:53:43] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [10:53:43] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=2 vccs=0 [10:53:43] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28825 [10:53:43] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28825, AnyHashable("operation_type"): 3] [10:53:43] [PUSH] Parsed message_id: 28825 [10:53:43] [PUSH] Parsed operation_type: 3 [10:53:43] [PUSH] Taking direct action: opType=3, messageId=28825 [10:53:43] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28825 [10:53:43] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:53:43] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:53:44] [CLIENT_SIG] Event received: type=3 messageId=28825 [10:53:44] [WS_EVENT] Received event: type=3, messageId=28825 [10:53:44] [WS_EVENT] Read receipt for message 28825 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:53:46] [SERVER] Polling - attempting to reconnect... [10:53:46] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:46] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:51] [SERVER] Polling - attempting to reconnect... [10:53:51] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:51] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:53:56] [SERVER] Polling - attempting to reconnect... [10:53:56] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:53:56] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:54:01] [CAM_CONN] 💓 PING #2 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [10:54:01] [SERVER] Polling - attempting to reconnect... [10:54:01] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:54:01] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:54:03] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:54:03] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [10:54:03] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=52 [10:54:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=5 [10:54:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-2, 28825, 28824, 28821, 28820] [10:54:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:54:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:03] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:54:03] [SCROLL] wasNearBottom=true, threshold=429, offset=4430, contentH=4877, boundsH=429, forceScroll=false [10:54:03] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:54:03] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:54:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=57 [10:54:03] [SCROLL] 💓 alive, visible=50...53, rows=54, estHeight=0.0, heightCalls=111 [10:54:03] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:54:03] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:54:03] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4503, currentOffset=4503 [10:54:03] [SCROLL] Scrolling to 4503, animated=true [10:54:03] [CLIENT_SIG] Event received: type=0 messageId=28826 [10:54:03] [WS_EVENT] Received event: type=0, messageId=28826 [10:54:03] [WS_EVENT] 📨 New message notification (msgId=28826) - triggering incremental refresh, currentMsgCount=52 [10:54:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:54:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28825, maxMemoryId=28825 [10:54:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28825 [10:54:03] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28826,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:54:03"} [10:54:03] [CHAT] receive_message.php JSON: ["file_name": , "ok": 1, "message_id": 28826, "datesent_utc": 2026-04-23 07:54:03, "session_id": ILUIWU, "message_type": 0] [10:54:03] [DB_UPGRADE] Upgrading message ID: -2 → 28826, preserveOriginalDate=false [10:54:03] [DB_UPGRADE] ✅ Upgraded -2 → 28826 with send_status=0, 1 row(s) affected [10:54:03] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28826 [10:54:03] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28826 [10:54:03] ReloadData 9 [10:54:03] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:54:03] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:54:03] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28826] [10:54:03] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28826, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:03] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28826, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:03] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:54:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:54:03] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [10:54:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [10:54:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28826, 28825, 28824, 28821, 28820] [10:54:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:54:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:04] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:54:04] [SCROLL] wasNearBottom=true, threshold=447, offset=4503, contentH=4950, boundsH=447, forceScroll=true [10:54:04] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:54:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:04] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:54:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [10:54:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4503, currentOffset=4503 [10:54:04] [SCROLL] Scrolling to 4503, animated=false [10:54:04] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:54:06] [LIFECYCLE] App resigning active - cleared crash flag [10:54:06] [SERVER] Polling - attempting to reconnect... [10:54:06] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:54:06] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:54:06] [PUSH] Silent push received [10:54:06] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:06 +0000, appState=1, message_id=nil, type=nil [10:54:06] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [10:54:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:06 +0000 [10:54:06] [PUSH_EMBED] No embedded message_data in notification [10:54:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:54:06] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816], handled=false [10:54:06] [PUSH] No embedded data, pre-loading messages from server [10:54:06] [PUSH_PRELOAD] Fetching messages for instant display cache [10:54:06] [CLIENT_SIG] Event received: type=3 messageId=28826 [10:54:06] [WS_EVENT] Received event: type=3, messageId=28826 [10:54:06] [WS_EVENT] Read receipt for message 28826 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:54:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:54:06] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:54:06] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:54:06] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:54:06] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:54:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:54:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [10:54:06] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [10:54:06] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28735, 28734] [10:54:06] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28735, 28734] [10:54:06] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [10:54:06] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [10:54:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:54:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28826, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=5 vccs=0 [10:54:06] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28826 [10:54:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28826, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [10:54:06] [PUSH] Parsed message_id: 28826 [10:54:06] [PUSH] Parsed operation_type: 3 [10:54:06] [PUSH] Taking direct action: opType=3, messageId=28826 [10:54:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28826 [10:54:06] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [10:54:06] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:54:06] [SECURITY] Saved background timestamp [10:54:06] [LIFECYCLE] App entering background - cleared crash flag [10:54:06] [CLIENT_SIG] Disconnecting [10:54:06] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:54:06] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:54:06] [PUSH_TRACE] 💤 BACKGROUND: memory has 52 messages, first 10 IDs=[28826, 28825, 28824, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [10:54:06] [LIFECYCLE] Background snapshot: count=52, maxId=28826 [10:54:06] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [10:54:06] [WS] Canceling WebSocket for query connection to iosILUIWU [10:54:06] In cleanupPeer [10:54:06] In cleanupPeer [10:54:06] [LIFECYCLE] WebRTC audio disabled [10:54:06] [LIFECYCLE] AVAudioSession deactivated [10:54:06] [LIFECYCLE] All connections stopped [10:54:06] [CLIENT_SIG] WebSocket closed with code 1001 [10:54:06] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:54:06] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:54:06] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:54:06] [SERVER] Stopped reconnect polling [10:54:06] Will request stop of video 0 [10:54:06] Will request stop of video 0 [10:54:06] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [10:54:06] [WS] Query connection error - cleaning up all agent connections and views [10:54:06] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:54:06] [WS] Query connection failed - cleaning up all agent connections and views [10:54:06] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [10:54:06] [APP_TERMINATE] ✅ No pending uploads in DB queue [10:54:28] [CRASH] No crash detected [10:54:28] [FONT] Roboto fonts loaded successfully: Roboto-Regular [10:54:28] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [10:54:28] [GIPHY] SDK not available - using REST API fallback [10:54:28] [BACKGROUND] Background fetch enabled [10:54:28] [SECURITY] Initial launch - timeout exceeded (21.321380853652954s > 0.0s) [10:54:28] [AUTH] Starting PIN authentication [10:54:28] [PUSH] Silent push received [10:54:28] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:28 +0000, appState=2, message_id=28827, type=nil [10:54:28] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:54:28] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:28 +0000 [10:54:28] [PUSH_TRACE] ⬇️ Processing embedded message_id=28827 [10:54:28] [PUSH_EMBED] 📩 Received embedded message: id=28827, type=0, sender=Laurent [10:54:28] [PUSH_TRACE] ⬇️ Message details: text="Oh. Then I need to push you latest version. Hold o...", datesent=2026-04-23 07:54:27 [10:54:28] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:54:28] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28827 [10:54:28] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28827 [10:54:28] [CLEANUP] No old timer messages to delete [10:54:28] [PUSH_EMBED] ✅ Saved message 28827 to local DB (sync) [10:54:28] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28827 [10:54:28] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28827 [10:54:28] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28827 [10:54:28] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [10:54:28] [PUSH_EMBED] Created new cache with embedded message 28827 [10:54:28] [PUSH_TRACE] 📦 ✅ Created new cache with message 28827 [10:54:28] [PUSH_TRACE] 📦 EXITING cache update queue for message 28827 [10:54:28] [PUSH_EMBED] Fetching evolution data for message 28827 in background [10:54:28] [PUSH_EMBED] ✅ Fully processed message 28827 [10:54:28] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28827 [10:54:28] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28827], handled=true [10:54:28] [PUSH] Embedded message handled instantly from silent push [10:54:28] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:54:28] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28827 [10:54:28] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [10:54:28] [PUSH_EMBED] Got evolution data for message 28827, saving to local DB [10:54:28] [PUSH_EMBED] Saved evolution data for message 28827 [10:54:28] [PRELOAD] Cache already valid (1 messages), skipping pre-load [10:54:28] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [10:54:28] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:54:28] [USER] ✅ User registered successfully [10:54:28] [PUSH] User registration after token update: success [10:54:30] [PUSH] Notification tapped - session_id: ILUIWU [10:54:30] [PUSH] Max message_id before tap: 28827 [10:54:30] [PUSH] Stored pending session: ILUIWU [10:54:30] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:30 +0000 [10:54:30] [PUSH_TRACE] ⬇️ Processing embedded message_id=28827 [10:54:30] [PUSH_EMBED] 📩 Received embedded message: id=28827, type=0, sender=Laurent [10:54:30] [PUSH_TRACE] ⬇️ Message details: text="Oh. Then I need to push you latest version. Hold o...", datesent=2026-04-23 07:54:27 [10:54:30] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:54:30] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28827 [10:54:30] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28827 [10:54:30] [PUSH_EMBED] ✅ Saved message 28827 to local DB (sync) [10:54:30] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28827 [10:54:30] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28827 [10:54:30] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28827 [10:54:30] [PUSH_TRACE] 📦 Cache state: valid=true, count=1, IDs=[28827] [10:54:30] [PUSH_TRACE] 📦 ⚠️ Message 28827 already in cache, skipping insert [10:54:30] [PUSH_TRACE] 📦 EXITING cache update queue for message 28827 [10:54:30] [PUSH_EMBED] Fetching evolution data for message 28827 in background [10:54:30] [PUSH_EMBED] ✅ Fully processed message 28827 [10:54:30] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28827 [10:54:30] [PUSH] Embedded message handled instantly on tap [10:54:30] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:54:30] [PUSH] Fetching server messages since_id=28827 to catch coalesced notifications on tap [10:54:30] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:54:30] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28827 to catch coalesced notifications [10:54:30] [PUSH_PRELOAD] Fetching messages for instant display cache [10:54:30] [CLIENT_SIG] WebSocket opened [10:54:30] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:54:30] [CLIENT_SIG] Connected! clientId=F0unkbdIFps324qg [10:54:30] [PUSH_EMBED] Got evolution data for message 28827, saving to local DB [10:54:30] [PUSH_EMBED] Saved evolution data for message 28827 [10:54:31] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:54:31] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:54:31] [PUSH_PRELOAD] No messages or parse error [10:54:31] [PUSH] Server fetch on tap completed (success=false) [10:54:32] [PIN_AUTH] Correct PIN [10:54:32] [SECURITY] Restored real session: ILUIWU [10:54:32] [SECURITY] Restored real session: ILUIWU [10:54:32] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:54:32] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:54:32] [SECURITY] Saved real session: ILUIWU [10:54:32] [SCENE] Launched directly to chat view with sessionId: ILUIWU [10:54:32] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:54:32] [UPLOAD_QUEUE] ✅ Database integrity check passed [10:54:32] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [10:54:32] Documents Directory: /var/mobile/Containers/Data/Application/89FDA6A4-DFCE-4A23-BA93-E691E6ED8359/Documents [10:54:32] [UPLOAD_QUEUE] Found 0 pending uploads to resume [10:54:32] [CAPTURE_HOST] live-feed moved hosted view to plain container [10:54:32] [THEME] Applying current theme [10:54:32] [CHAT] Applied day theme (mode: day) [10:54:32] [SECURITY] Saved real session: ILUIWU [10:54:32] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [10:54:32] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:54:32] [NETWORK] Network monitor started [10:54:32] [NETWORK] Status changed: connected [10:54:32] Did transition [10:54:32] [CHUNK] Pre-cache has only 1 messages - supplementing from local DB [10:54:32] [CHUNK] After merge: 50 messages (added 49 from local DB) [10:54:32] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [10:54:32] [VIEWER] Screen lock enabled - normal idle behavior [10:54:32] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [10:54:32] [VCC] ========== VideoConnectionClass INIT ========== [10:54:32] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [10:54:32] [DATA AUDIO] ========== setupWebRTC() START ========== [10:54:32] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [10:54:32] [DATA AUDIO] Creating encoder/decoder factories... [10:54:32] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [10:54:32] [CODEC] Viewer selected encoder: AV1 (best quality) [10:54:32] [DATA AUDIO] Creating RTCPeerConnectionFactory... [10:54:32] [DATA AUDIO] ✅ Factory created [10:54:32] [DATA AUDIO] RTCAudioSession locked [10:54:32] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [10:54:32] [DATA AUDIO] RTCAudioSession unlocked [10:54:32] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [10:54: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:54:32] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [10:54:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:54:32] [QUERY] ✅ tempQueryConnection created for iosILUIWU [10:54:32] [VIEWER_INIT] Already have 50 messages - just filtering for tab [10:54:32] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:54:32] [EVENT_POLL] Event polling disabled - using WebSocket events instead [10:54:32] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [10:54:32] Did transition [10:54:32] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [10:54:32] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [10:54:32] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:54:32] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:54:32] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [10:54:32] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:54:32] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [10:54:32] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [10:54:32] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [10:54:32] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [10:54:32] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [10:54:33] [USER] ✅ User registered successfully [10:54:33] [USER] User registration successful [10:54:33] [GALLERY_DB] ✅ Loaded 1256 media messages [10:54:33] [MIGRATION] No messages need sender_name backfill [10:54:33] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [10:54:33] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [10:54:33] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [10:54:33] [INCREMENTAL_SYNC] ✅ No new messages [10:54:33] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [10:54:33] [GALLERY] First 5 after sort (newest first): [10:54:33] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [10:54:33] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [10:54:33] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [10:54:33] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [10:54:33] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [10:54:33] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [10:54:33] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [10:54:33] [SERVER] Starting reconnect polling (5s interval) [10:54:33] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [10:54:33] [ICONS] Offset applied: -14.6 [10:54:33] [ICONS] New left margin: 11.2, New right margin: 11.3 [10:54:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:54:33] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:54:33] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [10:54:33] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [10:54:33] [ICONS] Chat center: (31.2, 87.0) [10:54:33] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [10:54:33] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [10:54:33] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [10:54:33] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [10:54:33] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [10:54:33] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [10:54:33] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [10:54:33] [ICONS] Screen width: 440.0 [10:54:33] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [10:54:33] [READBY_ENRICH] Enriched 3/3 unsettled messages with readBy data [10:54:33] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:54:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [10:54:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:54:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:33] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:54:33] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [10:54:33] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:54:33] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [10:54:33] [CELL_UPLOAD] configure: msgId=28740, file=adbb72082c79fd33.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=adbb72082c79fd33.jpg, overlayExists=true [10:54:33] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [10:54:33] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:54:33] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28826 → 28827 [10:54:33] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:54:33] [PURGE] ⚠️ Media cache purge DISABLED for debugging [10:54:33] [UNSENT_RETRY] Checking for unsent messages... [10:54:33] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [10:54:33] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [10:54:33] [UPLOAD_RECOVERY] Session: ILUIWU [10:54:33] [UPLOAD_RECOVERY] ✅ No stuck uploads found [10:54:33] [UPLOAD_RECOVERY] Checking recent media messages on server... [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [10:54:33] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [10:54:33] [PENDING_UPLOAD] Total pending upload messages: 0 [10:54:33] [UNSENT_RETRY] No unsent messages found [10:54:33] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3816, currentOffset=3816 [10:54:33] [SCROLL] Scrolling to 3816, animated=false [10:54:33] new_session POST ok: token len=157 [10:54:33] HELLO → sent (fetched token, role=query) [10:54:33] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [10:54:33] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [10:54:33] [SIG] hello_ok received for query connection - ready to query agents [10:54:33] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [10:54:33] [SIG] get_agents request sent for sessionId=ILUIWU [10:54:33] [SIG] get_agents request sent for sessionId=iosILUIWU [10:54:33] [SERVER] Stopped reconnect polling [10:54:33] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=65 [10:54:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [10:54:33] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:54:33] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:33] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:54:33] [SCROLL] wasNearBottom=true, threshold=758, offset=3816, contentH=4574, boundsH=758, forceScroll=true [10:54:33] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:54:33] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [10:54:33] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [10:54:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:54:33] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:54:33] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3816, currentOffset=3816 [10:54:33] [SCROLL] Scrolling to 3816, animated=false [10:54:33] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:54:33] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [10:54:33] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [10:54:33] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:54:33] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [10:54:33] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [10:54:33] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [10:54:33] [SERVER] Starting reconnect polling (5s interval) [10:54:33] [UPLOAD_RECOVERY] ✅ All media files verified on server [10:54:34] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:54:34] [PUSH] Silent push received [10:54:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:34 +0000, appState=0, message_id=nil, type=nil [10:54:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:34 +0000 [10:54:34] [PUSH_EMBED] No embedded message_data in notification [10:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:54:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:54:34] [PUSH] No embedded data, pre-loading messages from server [10:54:34] [PUSH_PRELOAD] Fetching messages for instant display cache [10:54:34] [PUSH] Silent push received [10:54:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:34 +0000, appState=0, message_id=nil, type=nil [10:54:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:34 +0000 [10:54:34] [PUSH_EMBED] No embedded message_data in notification [10:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:54:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:54:34] [PUSH] No embedded data, pre-loading messages from server [10:54:34] [PUSH_PRELOAD] Fetching messages for instant display cache [10:54:35] [CLIENT_SIG] Event received: type=3 messageId=28822 [10:54:35] [WS_EVENT] Received event: type=3, messageId=28822 [10:54:35] [WS_EVENT] Read receipt for message 28822 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:54:35] [CLIENT_SIG] Event received: type=3 messageId=28823 [10:54:35] [WS_EVENT] Received event: type=3, messageId=28823 [10:54:35] [WS_EVENT] Read receipt for message 28823 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:54:35] [PUSH] Silent push received [10:54:35] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:35 +0000, appState=0, message_id=nil, type=nil [10:54:35] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:54:35] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:35 +0000 [10:54:35] [PUSH_EMBED] No embedded message_data in notification [10:54:35] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:54:35] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:54:35] [PUSH] No embedded data, pre-loading messages from server [10:54:35] [PUSH_PRELOAD] Fetching messages for instant display cache [10:54:35] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:54:35] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:54:35] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:54:35] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:54:35] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:54:35] [CLIENT_SIG] Event received: type=3 messageId=28827 [10:54:35] [WS_EVENT] Received event: type=3, messageId=28827 [10:54:35] [WS_EVENT] Read receipt for message 28827 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:54:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:54:35] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:54:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:54:35] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:54:35] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28827 [10:54:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28822, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [10:54:35] [PUSH] Parsed message_id: 28822 [10:54:35] [PUSH] Parsed operation_type: 3 [10:54:35] [PUSH] Taking direct action: opType=3, messageId=28822 [10:54:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28822 [10:54:35] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:54:35] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:54:35] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:54:35] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:54:35] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:54:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:54:35] [SCROLL] 💓 alive, visible=45...51, rows=52, estHeight=0.0, heightCalls=59 [10:54:35] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:54:35] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28827 [10:54:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28823] [10:54:35] [PUSH] Parsed message_id: 28823 [10:54:35] [PUSH] Parsed operation_type: 3 [10:54:35] [PUSH] Taking direct action: opType=3, messageId=28823 [10:54:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28823 [10:54:35] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:54:35] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:54:35] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:54:35] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:54:35] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [10:54:35] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:54:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:54:35] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:54:35] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [10:54:35] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28827 [10:54:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28827] [10:54:35] [PUSH] Parsed message_id: 28827 [10:54:35] [PUSH] Parsed operation_type: 3 [10:54:35] [PUSH] Taking direct action: opType=3, messageId=28827 [10:54:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28827 [10:54:35] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:54:35] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [10:54:38] [SERVER] Polling - attempting to reconnect... [10:54:38] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [10:54:38] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:54:42] [MENU] dismissAnyExistingMenu called [10:54:42] [MENU] dismissAnyExistingMenu completed [10:54:43] [EMOJI_PICKER] Starting emoji picker for message 28827 [10:54:43] [MENU] Created button 'Reply' at index 0 [10:54:43] [MENU] Created button 'Copy' at index 1 [10:54:43] [MENU] Created button 'Delete' at index 2 [10:54:43] [MENU] Menu added at y=517.0 [10:54:43] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView=.<30>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <5F3D28DC-1B54-48E4-B97C-43D44F026759>.<30>" ), 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=EDAD55A1-003F-415D-AA60-672B34B504FE, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=EDAD55A1-003F-415D-AA60-672B34B504FE, _kCFStreamErrorDomainKey=4} - keeping existing messages [11:03:02] [BACKGROUND] Background fetch triggered [11:03:02] [BACKGROUND] Fetching recent messages for pre-cache [11:03:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:03:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:03:02] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:03:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:03:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:03:03] [CLIENT_SIG] WebSocket opened [11:03:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:03:03] HELLO → sent (cached token, role=query) [11:03:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:03:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [11:03:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:03:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:03:03] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:03:03] [SCROLL] wasNearBottom=true, threshold=758, offset=3836, contentH=4594, boundsH=758, forceScroll=false [11:03:03] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:03:03] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:03:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:03:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:03:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:03:03] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:03:03] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:03:03] [SIG] hello_ok received for query connection - ready to query agents [11:03:03] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:03:03] [SIG] get_agents request sent for sessionId=ILUIWU [11:03:03] [SIG] get_agents request sent for sessionId=iosILUIWU [11:03:03] [CLIENT_SIG] Connected! clientId=gbOE3Yf08WROezwY [11:03:03] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=3836, currentOffset=3836 [11:03:03] [SERVER] Stopped reconnect polling [11:03:03] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:03:03] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:03:03] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:03:03] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:03:03] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:03:03] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:03:03] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:03:03] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:03:03] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:03:03] [SERVER] Skipping reconnect polling - app is in background [11:03:03] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [11:03:03] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:03:03] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:03:03] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:03:03] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:03:03] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:03:03] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:03:03] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:03:03] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:03:03] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:03:03] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [11:03:03] [BACKGROUND] Pre-downloaded 0 thumbnails [11:03:03] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [11:11:54] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [11:11:54] [BACKGROUND] Background fetch triggered [11:11:54] [BACKGROUND] Fetching recent messages for pre-cache [11:11:54] [NETWORK] Status changed: connected [11:11:54] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [11:11:54] [WS] Query connection failed - cleaning up all agent connections and views [11:11:54] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [11:11:54] [WS] Query connection error - cleaning up all agent connections and views [11:11:54] [CLEANUP] ======================================== [11:11:54] [CLEANUP] Cleaning up all agent connections and views [11:11:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:11:54] [CLEANUP] Stopped and removed 0 video connections [11:11:54] [CLEANUP] Removed 0 video views [11:11:54] [CLEANUP] Removed 0 feed scroll views [11:11:54] [CLEANUP] Removed 0 status labels [11:11:54] [CLEANUP] Reset agent query state [11:11:54] [CLEANUP] Updated page indicator [11:11:54] [CLEANUP] Rebuilt video layout [11:11:54] [CLEANUP] ✅ All agent connections and views cleaned up [11:11:54] [CLEANUP] ======================================== [11:11:54] [SERVER] Skipping reconnect polling - app is in background [11:11:54] [CLEANUP] ======================================== [11:11:54] [CLEANUP] Cleaning up all agent connections and views [11:11:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:11:54] [CLEANUP] Stopped and removed 0 video connections [11:11:54] [CLEANUP] Removed 0 video views [11:11:54] [CLEANUP] Removed 0 feed scroll views [11:11:54] [CLEANUP] Removed 0 status labels [11:11:54] [CLEANUP] Reset agent query state [11:11:54] [CLEANUP] Updated page indicator [11:11:54] [CLEANUP] Rebuilt video layout [11:11:54] [CLEANUP] ✅ All agent connections and views cleaned up [11:11:54] [CLEANUP] ======================================== [11:11:54] [SERVER] Skipping reconnect polling - app is in background [11:11:54] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [11:11:54] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:11:54] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <5E19CD21-85A7-48B4-89FF-8B73F7A8EAB4>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5E19CD21-85A7-48B4-89FF-8B73F7A8EAB4>.<1>} [11:11:54] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:11:54] [CLIENT_SIG] Send error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [11:11:55] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [11:11:55] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:11:55] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:11:55] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:11:55] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:11:55] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:11:55] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:11:55] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:11:55] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:11:55] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:11:55] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [11:11:55] [BACKGROUND] Pre-downloaded 0 thumbnails [11:11:55] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [11:11:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:11:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:11:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:11:56] HELLO → sent (cached token, role=query) [11:11:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:11:56] [WS] Query connection failed - cleaning up all agent connections and views [11:11:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:11:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:11:56] [CLEANUP] ======================================== [11:11:56] [CLEANUP] Cleaning up all agent connections and views [11:11:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:11:56] [CLEANUP] Stopped and removed 0 video connections [11:11:56] [CLEANUP] Removed 0 video views [11:11:56] [CLEANUP] Removed 0 feed scroll views [11:11:56] [CLEANUP] Removed 0 status labels [11:11:56] [CLEANUP] Reset agent query state [11:11:56] [CLEANUP] Updated page indicator [11:11:56] [CLEANUP] Rebuilt video layout [11:11:56] [CLEANUP] ✅ All agent connections and views cleaned up [11:11:56] [CLEANUP] ======================================== [11:11:56] [SERVER] Skipping reconnect polling - app is in background [11:11:56] [CLEANUP] ======================================== [11:11:56] [CLEANUP] Cleaning up all agent connections and views [11:11:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:11:56] [CLEANUP] Stopped and removed 0 video connections [11:11:56] [CLEANUP] Removed 0 video views [11:11:56] [CLEANUP] Removed 0 feed scroll views [11:11:56] [CLEANUP] Removed 0 status labels [11:11:56] [CLEANUP] Reset agent query state [11:11:56] [CLEANUP] Updated page indicator [11:11:56] [CLEANUP] Rebuilt video layout [11:11:56] [CLEANUP] ✅ All agent connections and views cleaned up [11:11:56] [CLEANUP] ======================================== [11:11:56] [SERVER] Skipping reconnect polling - app is in background [11:20:29] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [11:20:29] [BACKGROUND] Background fetch triggered [11:20:29] [BACKGROUND] Fetching recent messages for pre-cache [11:20:29] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:20:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:20:29] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:20:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:20:29] HELLO → sent (cached token, role=query) [11:20:29] [CLIENT_SIG] WebSocket opened [11:20:29] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:20:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:20:29] [WS] Query connection failed - cleaning up all agent connections and views [11:20:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:20:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:20:29] [CLEANUP] ======================================== [11:20:29] [CLEANUP] Cleaning up all agent connections and views [11:20:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:20:29] [CLEANUP] Stopped and removed 0 video connections [11:20:29] [CLEANUP] Removed 0 video views [11:20:29] [CLEANUP] Removed 0 feed scroll views [11:20:29] [CLEANUP] Removed 0 status labels [11:20:29] [CLEANUP] Reset agent query state [11:20:29] [CLEANUP] Updated page indicator [11:20:29] [CLEANUP] Rebuilt video layout [11:20:29] [CLEANUP] ✅ All agent connections and views cleaned up [11:20:29] [CLEANUP] ======================================== [11:20:29] [SERVER] Skipping reconnect polling - app is in background [11:20:29] [CLEANUP] ======================================== [11:20:29] [CLEANUP] Cleaning up all agent connections and views [11:20:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:20:29] [CLEANUP] Stopped and removed 0 video connections [11:20:29] [CLEANUP] Removed 0 video views [11:20:29] [CLEANUP] Removed 0 feed scroll views [11:20:29] [CLEANUP] Removed 0 status labels [11:20:29] [CLEANUP] Reset agent query state [11:20:29] [CLEANUP] Updated page indicator [11:20:29] [CLEANUP] Rebuilt video layout [11:20:29] [CLEANUP] ✅ All agent connections and views cleaned up [11:20:29] [CLEANUP] ======================================== [11:20:29] [SERVER] Skipping reconnect polling - app is in background [11:20:29] [CLIENT_SIG] Connected! clientId=-WDh5nE5gNcDFLhq [11:20:29] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:20:29] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:20:30] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [11:20:30] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:20:30] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:20:30] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:20:30] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:20:30] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:20:30] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:20:30] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:20:30] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:20:30] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:20:30] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [11:20:30] [BACKGROUND] Pre-downloaded 0 thumbnails [11:20:30] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [11:28:02] [NETWORK] Status changed: connected [11:28:02] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [11:28:02] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [11:28:02] [AUTH] ✅ All guards passed, showing privacy cover [11:28:02] [LIFECYCLE] App entering foreground - restoring connections [11:28:02] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [11:28:02] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:28:02] [PUSH_TRACE] 🔄 FOREGROUND: memory has 50 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:02] [PUSH_TRACE] 🔄 FOREGROUND: cache has 50 msgs, valid=true, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:02] [LIFECYCLE] Away > 2 minutes (1991s) - will scroll to bottom [11:28:02] [UPLOAD_RETRY] No pending uploads to retry [11:28:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:02] [READBY_OPT] No message IDs to fetch - skipping server call [11:28:02] [LIFECYCLE] WebRTC audio re-enabled [11:28:02] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:28:02] [CLIENT_SIG] Skipping connect - app in background (state=2) [11:28:02] [VIEWER] Reconnecting after background - querying agents [11:28:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [11:28:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:28:02] [UNSENT_RETRY] Checking for unsent messages... [11:28:02] [PENDING_UPLOAD] Total pending upload messages: 0 [11:28:02] [UNSENT_RETRY] No unsent messages found [11:28:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:02] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [11:28:02] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:28:02] [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>} [11:28:02] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:28:02] [CLIENT_SIG] Send error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [11:28:02] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [11:28:02] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=50>50=false, maxId=28827>28827=false, shouldScroll=true [11:28:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:28:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:28:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [11:28:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:28:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:02] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:28:02] [SCROLL] wasNearBottom=true, threshold=758, offset=3836, contentH=4594, boundsH=758, forceScroll=true [11:28:02] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:28:02] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:02] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:28:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:02] HELLO → sent (cached token, role=query) [11:28:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3836, currentOffset=3836 [11:28:02] [SCROLL] Scrolling to 3836, animated=false [11:28:02] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:02] [WS] Query connection failed - cleaning up all agent connections and views [11:28:02] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:02] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:02] [CLEANUP] ======================================== [11:28:02] [CLEANUP] Cleaning up all agent connections and views [11:28:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:02] [CLEANUP] Stopped and removed 0 video connections [11:28:02] [CLEANUP] Removed 0 video views [11:28:02] [CLEANUP] Removed 0 feed scroll views [11:28:02] [CLEANUP] Removed 0 status labels [11:28:02] [CLEANUP] Reset agent query state [11:28:02] [CLEANUP] Updated page indicator [11:28:02] [CLEANUP] Rebuilt video layout [11:28:02] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:02] [CLEANUP] ======================================== [11:28:02] [SERVER] Starting reconnect polling (5s interval) [11:28:02] [CLEANUP] ======================================== [11:28:02] [CLEANUP] Cleaning up all agent connections and views [11:28:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:02] [CLEANUP] Stopped and removed 0 video connections [11:28:02] [CLEANUP] Removed 0 video views [11:28:02] [CLEANUP] Removed 0 feed scroll views [11:28:02] [CLEANUP] Removed 0 status labels [11:28:02] [CLEANUP] Reset agent query state [11:28:02] [CLEANUP] Updated page indicator [11:28:02] [CLEANUP] Rebuilt video layout [11:28:02] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:02] [CLEANUP] ======================================== [11:28:02] [SERVER] Starting reconnect polling (5s interval) [11:28:02] [NETWORK] Status changed: connected [11:28:03] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [11:28:03] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:28:03] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [11:28:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=-1 vccs=0 [11:28:03] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28827 [11:28:03] [PUSH] handlePollEventsNotification userInfo: [:] [11:28:03] [PUSH] No message_id in userInfo [11:28:03] [PUSH] No operation_type in userInfo [11:28:03] [FAST_REFRESH] Evolution disabled - performing incremental sync [11:28:03] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:03] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:03] [FAST_REFRESH] Already have 50 messages in memory [11:28:03] [FAST_REFRESH] maxMemoryId=28827, maxLocalId=28827 [11:28:03] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [11:28:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:03] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [11:28:03] [READBY_OPT] No message IDs to fetch - skipping server call [11:28:03] [GAP_FIX] Incremental sync will use since_id=28827 (background max=28827, current DB max=28827) [11:28:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:28:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [11:28:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [11:28:03] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [11:28:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:28:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:28:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [11:28:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:28:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:04] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:28:04] [SCROLL] wasNearBottom=true, threshold=758, offset=3836, contentH=4594, boundsH=758, forceScroll=true [11:28:04] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:28:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:04] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:28:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3836, currentOffset=3836 [11:28:04] [SCROLL] Scrolling to 3836, animated=false [11:28:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:04] HELLO → sent (cached token, role=query) [11:28:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:04] [WS] Query connection failed - cleaning up all agent connections and views [11:28:04] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:04] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:04] [CLEANUP] ======================================== [11:28:04] [CLEANUP] Cleaning up all agent connections and views [11:28:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:04] [CLEANUP] Stopped and removed 0 video connections [11:28:04] [CLEANUP] Removed 0 video views [11:28:04] [CLEANUP] Removed 0 feed scroll views [11:28:04] [CLEANUP] Removed 0 status labels [11:28:04] [CLEANUP] Reset agent query state [11:28:04] [CLEANUP] Updated page indicator [11:28:04] [CLEANUP] Rebuilt video layout [11:28:04] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:04] [CLEANUP] ======================================== [11:28:04] [SERVER] Starting reconnect polling (5s interval) [11:28:04] [CLEANUP] ======================================== [11:28:04] [CLEANUP] Cleaning up all agent connections and views [11:28:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:04] [CLEANUP] Stopped and removed 0 video connections [11:28:04] [CLEANUP] Removed 0 video views [11:28:04] [CLEANUP] Removed 0 feed scroll views [11:28:04] [CLEANUP] Removed 0 status labels [11:28:04] [CLEANUP] Reset agent query state [11:28:04] [CLEANUP] Updated page indicator [11:28:04] [CLEANUP] Rebuilt video layout [11:28:04] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:04] [CLEANUP] ======================================== [11:28:04] [SERVER] Starting reconnect polling (5s interval) [11:28:04] [INCREMENTAL_SYNC] ✅ No new messages [11:28:04] [FAST_REFRESH] Incremental sync complete - 50 messages [11:28:05] [PIN_AUTH] Incorrect PIN [11:28:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:05] HELLO → sent (cached token, role=query) [11:28:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:05] [WS] Query connection failed - cleaning up all agent connections and views [11:28:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:05] [CLEANUP] ======================================== [11:28:05] [CLEANUP] Cleaning up all agent connections and views [11:28:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:05] [CLEANUP] Stopped and removed 0 video connections [11:28:05] [CLEANUP] Removed 0 video views [11:28:05] [CLEANUP] Removed 0 feed scroll views [11:28:05] [CLEANUP] Removed 0 status labels [11:28:05] [CLEANUP] Reset agent query state [11:28:05] [CLEANUP] Updated page indicator [11:28:05] [CLEANUP] Rebuilt video layout [11:28:05] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:05] [CLEANUP] ======================================== [11:28:05] [SERVER] Starting reconnect polling (5s interval) [11:28:05] [CLEANUP] ======================================== [11:28:05] [CLEANUP] Cleaning up all agent connections and views [11:28:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:05] [CLEANUP] Stopped and removed 0 video connections [11:28:05] [CLEANUP] Removed 0 video views [11:28:05] [CLEANUP] Removed 0 feed scroll views [11:28:05] [CLEANUP] Removed 0 status labels [11:28:05] [CLEANUP] Reset agent query state [11:28:05] [CLEANUP] Updated page indicator [11:28:05] [CLEANUP] Rebuilt video layout [11:28:05] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:05] [CLEANUP] ======================================== [11:28:05] [SERVER] Starting reconnect polling (5s interval) [11:28:06] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:28:06] [CLIENT_SIG] WebSocket opened [11:28:06] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:28:06] [CLIENT_SIG] Connected! clientId=78baOiX3SXT3Bg2D [11:28:06] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:28:06] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:28:06] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:28:07] [CLIENT_SIG] Typing stop from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:28:07] [CLIENT_SIG] Event received: type=0 messageId=28828 [11:28:07] [WS_EVENT] Received event: type=0, messageId=28828 [11:28:07] [WS_EVENT] 📨 New message notification (msgId=28828) - triggering incremental refresh, currentMsgCount=50 [11:28:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [11:28:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [11:28:07] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28828] [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28828 [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:28:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:28:07] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:28:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:07] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:28:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:28:07] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:28:07] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:28:07] [SCROLL] wasNearBottom=true, threshold=758, offset=3836, contentH=4594, boundsH=758, forceScroll=false [11:28:07] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:28:07] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:07] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:07] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28827 → 28828 [11:28:07] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [11:28:07] [SCROLL] 💓 alive, visible=45...52, rows=53, estHeight=0.0, heightCalls=115 [11:28:07] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3909, currentOffset=3909 [11:28:07] [SCROLL] Scrolling to 3909, animated=true [11:28:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:07] HELLO → sent (cached token, role=query) [11:28:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:07] [WS] Query connection failed - cleaning up all agent connections and views [11:28:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:07] [CLEANUP] ======================================== [11:28:07] [CLEANUP] Cleaning up all agent connections and views [11:28:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:07] [CLEANUP] Stopped and removed 0 video connections [11:28:07] [CLEANUP] Removed 0 video views [11:28:07] [CLEANUP] Removed 0 feed scroll views [11:28:07] [CLEANUP] Removed 0 status labels [11:28:07] [CLEANUP] Reset agent query state [11:28:07] [CLEANUP] Updated page indicator [11:28:07] [CLEANUP] Rebuilt video layout [11:28:07] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:07] [CLEANUP] ======================================== [11:28:07] [SERVER] Starting reconnect polling (5s interval) [11:28:07] [CLEANUP] ======================================== [11:28:07] [CLEANUP] Cleaning up all agent connections and views [11:28:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:07] [CLEANUP] Stopped and removed 0 video connections [11:28:07] [CLEANUP] Removed 0 video views [11:28:07] [CLEANUP] Removed 0 feed scroll views [11:28:07] [CLEANUP] Removed 0 status labels [11:28:07] [CLEANUP] Reset agent query state [11:28:07] [CLEANUP] Updated page indicator [11:28:07] [CLEANUP] Rebuilt video layout [11:28:07] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:07] [CLEANUP] ======================================== [11:28:07] [SERVER] Starting reconnect polling (5s interval) [11:28:07] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:28:07 +0000 - type: unknown, operation_type: 0, message_id: 28828, session_id: ILUIWU, state: 0 [11:28:07] [PUSH_DEBUG] Full userInfo: [AnyHashable("sender_name"): Laurent, AnyHashable("file_name"): , AnyHashable("message"): Install latest version. It's available. Not 100% perfect but almost there., AnyHashable("datesent"): 2026-04-23 08:28:07, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:28:07"; "file_name" = ""; "is_encrypted" = 0; message = "Install latest version. It's available. Not 100% perfect but almost there."; "message_id" = 28828; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28827; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_type"): 0, AnyHashable("message_id"): 28828, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): ] [11:28:07] [PUSH] App active - suppressing notification UI, posting internal event [11:28:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:28:07 +0000 [11:28:07] [PUSH_TRACE] ⬇️ Processing embedded message_id=28828 [11:28:07] [PUSH_EMBED] 📩 Received embedded message: id=28828, type=0, sender=Laurent [11:28:07] [PUSH_TRACE] ⬇️ Message details: text="Install latest version. It's available. Not 100% p...", datesent=2026-04-23 08:28:07 [11:28:07] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:28:07] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_EMBED] ✅ Saved message 28828 to local DB (sync) [11:28:07] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28828 [11:28:07] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28828 [11:28:07] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [11:28:07] [PUSH_EMBED] Inserted message 28828 into existing cache (now 51 messages) [11:28:07] [PUSH_TRACE] 📦 ✅ Inserted message 28828, cache now has IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [PUSH_TRACE] 📦 EXITING cache update queue for message 28828 [11:28:07] [PUSH_EMBED] Fetching evolution data for message 28828 in background [11:28:07] [PUSH_EMBED] ✅ Fully processed message 28828 [11:28:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28828 [11:28:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=-1 vccs=0 [11:28:07] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28828 [11:28:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("sender_name"): Laurent, AnyHashable("file_name"): , AnyHashable("message"): Install latest version. It's available. Not 100% perfect but almost there., AnyHashable("datesent"): 2026-04-23 08:28:07, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:28:07"; "file_name" = ""; "is_encrypted" = 0; message = "Install latest version. It's available. Not 100% perfect but almost there."; "message_id" = 28828; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28827; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_type"): 0, AnyHashable("message_id"): 28828, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): ] [11:28:07] [PUSH_EMBED_VC] Message 28828 already in memory - skipping [11:28:07] [PUSH] ⚡ Embedded message handled directly in ViewController [11:28:07] [PUSH] Parsed message_id: 28828 [11:28:07] [PUSH] Parsed operation_type: 0 [11:28:07] [PUSH] Taking direct action: opType=0, messageId=28828 [11:28:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28828 [11:28:07] [PUSH] ⚡ Message 28828 already in memory - skipping duplicate notification entirely [11:28:07] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [11:28:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:28:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28828 [11:28:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [11:28:07] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:28:07] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:28:07] [PUSH_TRACE] 👁️ Received message id=28828, text="Install latest version. It's a..." [11:28:07] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:28:07] [PUSH_UI] Message 28828 already in memory - skipping insert [11:28:07] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:28:07] [PUSH] Silent push received [11:28:07] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:28:07 +0000, appState=0, message_id=28828, type=nil [11:28:07] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:28:07 +0000 [11:28:07] [PUSH_TRACE] ⬇️ Processing embedded message_id=28828 [11:28:07] [PUSH_EMBED] 📩 Received embedded message: id=28828, type=0, sender=Laurent [11:28:07] [PUSH_TRACE] ⬇️ Message details: text="Install latest version. It's available. Not 100% p...", datesent=2026-04-23 08:28:07 [11:28:07] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:28:07] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_EMBED] ✅ Saved message 28828 to local DB (sync) [11:28:07] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28828 [11:28:07] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28828 [11:28:07] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28828 [11:28:07] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [PUSH_TRACE] 📦 ⚠️ Message 28828 already in cache, skipping insert [11:28:07] [PUSH_TRACE] 📦 EXITING cache update queue for message 28828 [11:28:07] [PUSH_EMBED] Fetching evolution data for message 28828 in background [11:28:07] [PUSH_EMBED] ✅ Fully processed message 28828 [11:28:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28828 [11:28:07] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819], handled=true [11:28:07] [PUSH] Embedded message handled instantly from silent push [11:28:07] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:28:07] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28828 [11:28:07] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:28:07] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:28:07] [PUSH_TRACE] 👁️ Received message id=28828, text="Install latest version. It's a..." [11:28:07] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:28:07] [PUSH_UI] Message 28828 already in memory - skipping insert [11:28:07] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:28:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=-1 vccs=0 [11:28:07] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28828 [11:28:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("sender_name"): Laurent, AnyHashable("file_name"): , AnyHashable("message"): Install latest version. It's available. Not 100% perfect but almost there., AnyHashable("datesent"): 2026-04-23 08:28:07, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:28:07"; "file_name" = ""; "is_encrypted" = 0; message = "Install latest version. It's available. Not 100% perfect but almost there."; "message_id" = 28828; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28827; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_type"): 0, AnyHashable("message_id"): 28828, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): ] [11:28:07] [PUSH_EMBED_VC] Message 28828 already in memory - skipping [11:28:07] [PUSH] ⚡ Embedded message handled directly in ViewController [11:28:07] [PUSH] Parsed message_id: 28828 [11:28:07] [PUSH] Parsed operation_type: 0 [11:28:07] [PUSH] Taking direct action: opType=0, messageId=28828 [11:28:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28828 [11:28:07] [PUSH] ⚡ Message 28828 already in memory - skipping duplicate notification entirely [11:28:07] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [11:28:07] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [11:28:08] [NETWORK] Status changed: connected [11:28:08] [PUSH_EMBED] Got evolution data for message 28828, saving to local DB [11:28:08] [PUSH_EMBED] Saved evolution data for message 28828 [11:28:08] [PUSH_EMBED] Got evolution data for message 28828, saving to local DB [11:28:08] [PUSH_EMBED] Saved evolution data for message 28828 [11:28:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:28:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28828] [11:28:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:28:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:28:08] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [11:28:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:28:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28828 [11:28:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [11:28:08] [INCREMENTAL_SYNC] ✅ No new messages [11:28:08] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:28:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:28:08] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:28:08] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:08] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:28:08] [SCROLL] wasNearBottom=true, threshold=758, offset=3909, contentH=4667, boundsH=758, forceScroll=true [11:28:08] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:28:08] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:08] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [11:28:08] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3909, currentOffset=3909 [11:28:08] [SCROLL] Scrolling to 3909, animated=false [11:28:09] [PUSH] Silent push received [11:28:09] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:28:09 +0000, appState=0, message_id=nil, type=nil [11:28:09] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:28:09 +0000 [11:28:09] [PUSH_EMBED] No embedded message_data in notification [11:28:09] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:28:09] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819], handled=false [11:28:09] [PUSH] No embedded data, pre-loading messages from server [11:28:09] [PUSH_PRELOAD] Fetching messages for instant display cache [11:28:09] [NETWORK] Status changed: connected [11:28:09] [CLIENT_SIG] Event received: type=3 messageId=28828 [11:28:09] [WS_EVENT] Received event: type=3, messageId=28828 [11:28:09] [WS_EVENT] Read receipt for message 28828 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:28:09] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:09] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:09] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:28:09] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:28:09] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:28:09] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:28:09] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:28:09] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:28:09] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28737] [11:28:09] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28737] [11:28:09] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [11:28:09] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:28:09] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=-1 vccs=0 [11:28:09] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28828 [11:28:09] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28828, AnyHashable("session_id"): ILUIWU] [11:28:09] [PUSH] Parsed message_id: 28828 [11:28:09] [PUSH] Parsed operation_type: 3 [11:28:09] [PUSH] Taking direct action: opType=3, messageId=28828 [11:28:09] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28828 [11:28:09] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [11:28:09] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:28:09] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28828 [11:28:09] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [11:28:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:09] HELLO → sent (cached token, role=query) [11:28:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:09] [WS] Query connection failed - cleaning up all agent connections and views [11:28:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:09] [CLEANUP] ======================================== [11:28:09] [CLEANUP] Cleaning up all agent connections and views [11:28:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:09] [CLEANUP] Stopped and removed 0 video connections [11:28:09] [CLEANUP] Removed 0 video views [11:28:09] [CLEANUP] Removed 0 feed scroll views [11:28:09] [CLEANUP] Removed 0 status labels [11:28:09] [CLEANUP] Reset agent query state [11:28:09] [CLEANUP] Updated page indicator [11:28:09] [CLEANUP] Rebuilt video layout [11:28:09] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:09] [CLEANUP] ======================================== [11:28:09] [SERVER] Starting reconnect polling (5s interval) [11:28:09] [CLEANUP] ======================================== [11:28:09] [CLEANUP] Cleaning up all agent connections and views [11:28:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:09] [CLEANUP] Stopped and removed 0 video connections [11:28:09] [CLEANUP] Removed 0 video views [11:28:09] [CLEANUP] Removed 0 feed scroll views [11:28:09] [CLEANUP] Removed 0 status labels [11:28:09] [CLEANUP] Reset agent query state [11:28:09] [CLEANUP] Updated page indicator [11:28:09] [CLEANUP] Rebuilt video layout [11:28:09] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:09] [CLEANUP] ======================================== [11:28:09] [SERVER] Starting reconnect polling (5s interval) [11:28:09] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:28:09] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28828] [11:28:09] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:28:09] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:28:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [11:28:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:28:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:28:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:09] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:28:09] [SCROLL] wasNearBottom=true, threshold=758, offset=3909, contentH=4667, boundsH=758, forceScroll=false [11:28:09] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:28:09] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:09] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:09] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [11:28:09] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=3909, currentOffset=3909[11:28:10] [LOG] Pruned 651 entries older than 3 hours [11:28:10] [SECURITY] Restored real session: ILUIWU [11:28:10] [SECURITY] Restored real session: ILUIWU [11:28:10] [FAKE_AI] cancel() called, wasRunning=false [11:28:10] [FAKE MODE] Exiting fake mode, restoring real session [11:28:10] [SECURITY] Restored real session: ILUIWU [11:28:10] [SECURITY] Saved real session: ILUIWU [11:28:10] [FAKE MODE] ✅ Restored real session: ILUIWU [11:28:10] [FAKE MODE] Loaded 50 messages (limited to page size) [11:28:10] [READBY_OPT] No message IDs to fetch - skipping server call [11:28:10] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [11:28:10] [AUTH] Cache had 51 messages, maxExistingId=28828, inserted 0 truly new [11:28:10] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>50=false, maxId=28828>28827=true, shouldScroll=true [11:28:10] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:10] [AUTH] UI update complete [11:28:10] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:28:10] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:28:10] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [11:28:10] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:28:10] [FAKE MODE] Enriched 0/0 unsettled messages with readBy data [11:28:10] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:28:10] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:28:10] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:10] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:10] [SCROLL] 💓 alive, visible=44...51, rows=52, estHeight=0.0, heightCalls=121 [11:28:10] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:28:10] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:28:10] [USER] ✅ User registered successfully [11:28:10] [PUSH] User registration after token update: success [11:28:10] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:28:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:28:10] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:28:10] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:10] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:28:10] [SCROLL] wasNearBottom=true, threshold=758, offset=3811, contentH=4569, boundsH=758, forceScroll=true [11:28:10] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:28:10] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:28:10] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:28:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:28:10] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:28:10] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3811, currentOffset=3811 [11:28:10] [SCROLL] Scrolling to 3811, animated=false [11:28:11] [NETWORK] Status changed: connected [11:28:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:11] HELLO → sent (cached token, role=query) [11:28:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:11] [WS] Query connection failed - cleaning up all agent connections and views [11:28:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:11] [CLEANUP] ======================================== [11:28:11] [CLEANUP] Cleaning up all agent connections and views [11:28:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:11] [CLEANUP] Stopped and removed 0 video connections [11:28:11] [CLEANUP] Removed 0 video views [11:28:11] [CLEANUP] Removed 0 feed scroll views [11:28:11] [CLEANUP] Removed 0 status labels [11:28:11] [CLEANUP] Reset agent query state [11:28:11] [CLEANUP] Updated page indicator [11:28:11] [CLEANUP] Rebuilt video layout [11:28:11] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:11] [CLEANUP] ======================================== [11:28:11] [SERVER] Starting reconnect polling (5s interval) [11:28:11] [CLEANUP] ======================================== [11:28:11] [CLEANUP] Cleaning up all agent connections and views [11:28:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:11] [CLEANUP] Stopped and removed 0 video connections [11:28:11] [CLEANUP] Removed 0 video views [11:28:11] [CLEANUP] Removed 0 feed scroll views [11:28:11] [CLEANUP] Removed 0 status labels [11:28:11] [CLEANUP] Reset agent query state [11:28:11] [CLEANUP] Updated page indicator [11:28:11] [CLEANUP] Rebuilt video layout [11:28:11] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:11] [CLEANUP] ======================================== [11:28:11] [SERVER] Starting reconnect polling (5s interval) [11:28:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:13] HELLO → sent (cached token, role=query) [11:28:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:13] [WS] Query connection failed - cleaning up all agent connections and views [11:28:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:13] [CLEANUP] ======================================== [11:28:13] [CLEANUP] Cleaning up all agent connections and views [11:28:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:13] [CLEANUP] Stopped and removed 0 video connections [11:28:13] [CLEANUP] Removed 0 video views [11:28:13] [CLEANUP] Removed 0 feed scroll views [11:28:13] [CLEANUP] Removed 0 status labels [11:28:13] [CLEANUP] Reset agent query state [11:28:13] [CLEANUP] Updated page indicator [11:28:13] [CLEANUP] Rebuilt video layout [11:28:13] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:13] [CLEANUP] ======================================== [11:28:13] [SERVER] Starting reconnect polling (5s interval) [11:28:13] [CLEANUP] ======================================== [11:28:13] [CLEANUP] Cleaning up all agent connections and views [11:28:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:13] [CLEANUP] Stopped and removed 0 video connections [11:28:13] [CLEANUP] Removed 0 video views [11:28:13] [CLEANUP] Removed 0 feed scroll views [11:28:13] [CLEANUP] Removed 0 status labels [11:28:13] [CLEANUP] Reset agent query state [11:28:13] [CLEANUP] Updated page indicator [11:28:13] [CLEANUP] Rebuilt video layout [11:28:13] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:13] [CLEANUP] ======================================== [11:28:13] [SERVER] Starting reconnect polling (5s interval) [11:28:14] [MENU] dismissAnyExistingMenu called [11:28:14] [MENU] dismissAnyExistingMenu completed [11:28:14] [EMOJI_PICKER] Starting emoji picker for message 28828 [11:28:14] [MENU] Created button 'Reply' at index 0 [11:28:14] [MENU] Created button 'Copy' at index 1 [11:28:14] [MENU] Created button 'Delete' at index 2 [11:28:14] [MENU] Menu added at y=504.5 [11:28:15] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [11:28:15] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [11:28:15] [EMOJI_PICKER] ✅ Picker shown at y=371.5 [11:28:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:15] HELLO → sent (cached token, role=query) [11:28:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:15] [WS] Query connection failed - cleaning up all agent connections and views [11:28:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:15] [CLEANUP] ======================================== [11:28:15] [CLEANUP] Cleaning up all agent connections and views [11:28:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:15] [CLEANUP] Stopped and removed 0 video connections [11:28:15] [CLEANUP] Removed 0 video views [11:28:15] [CLEANUP] Removed 0 feed scroll views [11:28:15] [CLEANUP] Removed 0 status labels [11:28:15] [CLEANUP] Reset agent query state [11:28:15] [CLEANUP] Updated page indicator [11:28:15] [CLEANUP] Rebuilt video layout [11:28:15] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:15] [CLEANUP] ======================================== [11:28:15] [SERVER] Starting reconnect polling (5s interval) [11:28:15] [CLEANUP] ======================================== [11:28:15] [CLEANUP] Cleaning up all agent connections and views [11:28:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:15] [CLEANUP] Stopped and removed 0 video connections [11:28:15] [CLEANUP] Removed 0 video views [11:28:15] [CLEANUP] Removed 0 feed scroll views [11:28:15] [CLEANUP] Removed 0 status labels [11:28:15] [CLEANUP] Reset agent query state [11:28:15] [CLEANUP] Updated page indicator [11:28:15] [CLEANUP] Rebuilt video layout [11:28:15] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:15] [CLEANUP] ======================================== [11:28:15] [SERVER] Starting reconnect polling (5s interval) [11:28:15] [REACTION] add ❤️ to message 28828 (alreadyReacted: false) [11:28:15] [MENU] dismissAnyExistingMenu called [11:28:15] [MENU] Found menu with tag 9999, removing [11:28:15] [MENU] Removing blur effect [11:28:15] [MENU] Removing floating message snapshot [11:28:15] [MENU] Dismissing emoji picker [11:28:15] [MENU] Recorded dismissal time for debounce [11:28:15] [MENU] dismissAnyExistingMenu completed [11:28:16] [REACTION] Added ❤️ reaction to message 28828 [11:28:16] [REACTION_SCROLL] =====ENTER path=picker action=add msgId=28828 emoji=❤️ [11:28:16] [REACTION_SCROLL] state offsetY=3811 bounds=758 adjTop=0 adjBot=0 contentH=4569 estH=0 [11:28:16] [REACTION_SCROLL] rows oldCount=52 newCount=52 reactedRow=51 reactedVisible=true [11:28:16] [REACTION_SCROLL] reacted rectMinY=4484 rectH=73 cellFrameMinY=4484 cellFrameH=73 [11:28:16] [REACTION_SCROLL] anchor row=44 minY=3683 VPY=-128 visibleCount=8 visibleRows=[44, 45, 46, 47, 48, 49, 50, 51] [11:28:16] [REACTION_SCROLL] scrollState dragging=false decel=false tracking=false [11:28:16] [REACTION_SCROLL] after reloadRows offsetΔ=0 contentHΔ=20 [11:28:16] [REACTION_SCROLL] after layoutIfNeeded offsetΔFromSave=0 contentHDelta=20 [11:28:16] [REACTION_SCROLL] reactedAfter rectMinY=4484 rectH=93 rectMinYΔ=0 rectHΔ=20 [11:28:16] [REACTION_SCROLL] reactedCellFrameAfter minY=4484 h=93 [11:28:16] [REACTION_SCROLL] anchor rectMinYAfter=3683 drift=0 [11:28:16] [REACTION_SCROLL] math rawTarget=3811 maxOffsetY=3831 clamped=3811 clampedAgainstRaw=0 [11:28:16] [REACTION_SCROLL] no offset change (within 0.5pt, current=3811) [11:28:16] [REACTION_SCROLL] finalOffset=3811 totalΔFromSave=0 [11:28:16] [REACTION_SCROLL] =====EXIT [11:28:17] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [11:28:17] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:28:17] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:28:17] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:28:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:28:17] HELLO → sent (cached token, role=query) [11:28:17] [LIFECYCLE] App resigning active - cleared crash flag [11:28:17] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:28:17] [WS] Query connection failed - cleaning up all agent connections and views [11:28:17] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [11:28:17] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:28:17] [CLEANUP] ======================================== [11:28:17] [CLEANUP] Cleaning up all agent connections and views [11:28:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:17] [CLEANUP] Stopped and removed 0 video connections [11:28:17] [CLEANUP] Removed 0 video views [11:28:17] [CLEANUP] Removed 0 feed scroll views [11:28:17] [CLEANUP] Removed 0 status labels [11:28:17] [CLEANUP] Reset agent query state [11:28:17] [CLEANUP] Updated page indicator [11:28:17] [CLEANUP] Rebuilt video layout [11:28:17] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:17] [CLEANUP] ======================================== [11:28:17] [SERVER] Starting reconnect polling (5s interval) [11:28:17] [CLEANUP] ======================================== [11:28:17] [CLEANUP] Cleaning up all agent connections and views [11:28:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [11:28:17] [CLEANUP] Stopped and removed 0 video connections [11:28:17] [CLEANUP] Removed 0 video views [11:28:17] [CLEANUP] Removed 0 feed scroll views [11:28:17] [CLEANUP] Removed 0 status labels [11:28:17] [CLEANUP] Reset agent query state [11:28:17] [CLEANUP] Updated page indicator [11:28:17] [CLEANUP] Rebuilt video layout [11:28:17] [CLEANUP] ✅ All agent connections and views cleaned up [11:28:17] [CLEANUP] ======================================== [11:28:17] [SERVER] Starting reconnect polling (5s interval) [11:28:18] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [11:28:18] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [11:28:18] [SECURITY] Saved background timestamp [11:28:18] [LIFECYCLE] App entering background - cleared crash flag [11:28:18] [CLIENT_SIG] Disconnecting [11:28:18] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [11:28:18] [DB] ✅ Chat database flushed (WAL checkpoint) before background [11:28:18] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:28:18] [LIFECYCLE] Background snapshot: count=50, maxId=28828 [11:28:18] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [11:28:18] [WS] Canceling WebSocket for query connection to iosILUIWU [11:28:18] In cleanupPeer [11:28:18] In cleanupPeer [11:28:18] [LIFECYCLE] WebRTC audio disabled [11:28:18] [LIFECYCLE] AVAudioSession deactivated [11:28:18] [LIFECYCLE] All connections stopped [11:28:18] [CLIENT_SIG] WebSocket closed with code 1001 [11:28:18] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:28: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/} [11:28:18] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:28:18] [SERVER] Stopped reconnect polling [11:28:18] [WS] URLSession invalidated successfully [11:28:18] Will request stop of video 0 [11:28:18] Will request stop of video 0 [11:28:18] [PIP] Removing 0 tracks from PiP for connection 0 [11:28:18] [PIP] ✅ All tracks removed for connection 0 [11:28:18] [PIP] Removing 0 tracks from PiP for connection 0 [11:28:18] [PIP] ✅ All tracks removed for connection 0 [11:29:38] [MIGRATION] Copied DB to shared container[11:29:39] [MIGRATION] Copied 2701 media files to shared cache [11:29:39] [MIGRATION] ✅ App Group migration complete — NSE unblocked [11:29:39] [CRASH] No crash detected [11:29:39] [LOG] Pruned 64 entries older than 3 hours [11:29:39] [FONT] Roboto fonts loaded successfully: Roboto-Regular [11:29:39] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [11:29:39] [GIPHY] SDK not available - using REST API fallback [11:29:39] [BACKGROUND] Background fetch enabled [11:29:39] [SECURITY] Initial launch - timeout exceeded (81.30250072479248s > 0.0s) [11:29:39] [AUTH] Starting PIN authentication [11:29:39] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:29:39] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:29:39] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:29:39] [CLEANUP] No old timer messages to delete [11:29:39] [CLIENT_SIG] WebSocket opened [11:29:39] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:29:39] [CLIENT_SIG] Connected! clientId=lhrKTovF5654qkbT [11:29:39] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:29:39] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [11:29:39] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=28828)... [11:29:39] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:29:39] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:29:39] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:29:39] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:29:39] [USER] ✅ User registered successfully [11:29:39] [PUSH] User registration after token update: success [11:29:39] [PRELOAD] No messages or parse error [11:29:40] [PIN_AUTH] Correct PIN [11:29:40] [SECURITY] Restored real session: ILUIWU [11:29:40] [SECURITY] Restored real session: ILUIWU [11:29:41] [SECURITY] Saved real session: ILUIWU [11:29:41] [SCENE] Launched directly to chat view with sessionId: ILUIWU [11:29:41] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:29:41] [UPLOAD_QUEUE] ✅ Database integrity check passed [11:29:41] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [11:29:41] Documents Directory: /var/mobile/Containers/Data/Application/C54170A7-4208-45E1-972B-D75BEF83B039/Documents [11:29:41] [UPLOAD_QUEUE] Found 0 pending uploads to resume [11:29:41] [CAPTURE_HOST] live-feed moved hosted view to plain container [11:29:41] [THEME] Applying current theme [11:29:41] [CHAT] Applied day theme (mode: day) [11:29:41] [SECURITY] Saved real session: ILUIWU [11:29:41] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [11:29:41] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:29:41] [NETWORK] Network monitor started [11:29:41] [NETWORK] Status changed: connected [11:29:41] Did transition [11:29:41] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [11:29:41] [VIEWER] Screen lock enabled - normal idle behavior [11:29:41] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [11:29:41] [VCC] ========== VideoConnectionClass INIT ========== [11:29:41] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [11:29:41] [DATA AUDIO] ========== setupWebRTC() START ========== [11:29:41] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [11:29:41] [DATA AUDIO] Creating encoder/decoder factories... [11:29:41] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [11:29:41] [CODEC] Viewer selected encoder: AV1 (best quality) [11:29:41] [DATA AUDIO] Creating RTCPeerConnectionFactory... [11:29:41] [DATA AUDIO] ✅ Factory created [11:29:41] [DATA AUDIO] RTCAudioSession locked [11:29:41] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [11:29:41] [DATA AUDIO] RTCAudioSession unlocked [11:29:41] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [11:29:41] [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"] [11:29:41] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [11:29:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:29:41] [QUERY] ✅ tempQueryConnection created for iosILUIWU [11:29:41] [VIEWER_INIT] Already have 50 messages - just filtering for tab [11:29:41] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:29:41] [EVENT_POLL] Event polling disabled - using WebSocket events instead [11:29:41] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [11:29:41] Did transition [11:29:41] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [11:29:41] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:29:41] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:29:41] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:29:41] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [11:29:41] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:29:41] [READBY_OPT] No message IDs to fetch - skipping server call [11:29:41] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [11:29:41] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [11:29:41] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [11:29:41] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [11:29:41] [USER] ✅ User registered successfully [11:29:41] [USER] User registration successful [11:29:41] [GALLERY_DB] ✅ Loaded 1256 media messages [11:29:41] [MIGRATION] No messages need sender_name backfill [11:29:41] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:29:41] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28828 [11:29:41] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [11:29:42] [INCREMENTAL_SYNC] ✅ No new messages [11:29:42] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [11:29:42] [GALLERY] First 5 after sort (newest first): [11:29:42] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [11:29:42] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [11:29:42] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [11:29:42] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [11:29:42] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [11:29:42] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [11:29:42] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [11:29:42] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:29:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:29:42] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:29:42] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:29:42] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:29:42] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [11:29:42] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:29:42] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [11:29:42] [CELL_UPLOAD] configure: msgId=28740, file=adbb72082c79fd33.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:29:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:29:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=adbb72082c79fd33.jpg, overlayExists=true [11:29:42] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:29:42] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:29:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:29:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:29:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:29:42] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:29:42] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:29:42] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [11:29:42] [SERVER] Starting reconnect polling (5s interval) [11:29:42] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [11:29:42] [ICONS] Offset applied: -14.6 [11:29:42] [ICONS] New left margin: 11.2, New right margin: 11.3 [11:29:42] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [11:29:42] [ICONS] Chat center: (31.2, 87.0) [11:29:42] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [11:29:42] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [11:29:42] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [11:29:42] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [11:29:42] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [11:29:42] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [11:29:42] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [11:29:42] [ICONS] Screen width: 440.0 [11:29:42] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3831, currentOffset=3831 [11:29:42] [SCROLL] Scrolling to 3831, animated=false [11:29:42] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:29:42] [PURGE] ⚠️ Media cache purge DISABLED for debugging [11:29:42] [UNSENT_RETRY] Checking for unsent messages... [11:29:42] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [11:29:42] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [11:29:42] [UPLOAD_RECOVERY] Session: ILUIWU [11:29:42] [UPLOAD_RECOVERY] ✅ No stuck uploads found [11:29:42] [UPLOAD_RECOVERY] Checking recent media messages on server... [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [11:29:42] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [11:29:42] [PENDING_UPLOAD] Total pending upload messages: 0 [11:29:42] [UNSENT_RETRY] No unsent messages found [11:29:42] new_session POST ok: token len=157 [11:29:42] HELLO → sent (fetched token, role=query) [11:29:42] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:29:42] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:29:42] [SIG] hello_ok received for query connection - ready to query agents [11:29:42] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:29:42] [SIG] get_agents request sent for sessionId=ILUIWU [11:29:42] [SIG] get_agents request sent for sessionId=iosILUIWU [11:29:42] [SERVER] Stopped reconnect polling [11:29:42] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=67 [11:29:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28828, 28827, 28826, 28825, 28824] [11:29:42] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:29:42] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [11:29:42] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:29:42] [SCROLL] wasNearBottom=true, threshold=758, offset=3831, contentH=4589, boundsH=758, forceScroll=true [11:29:42] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:29:42] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:29:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:29:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:29:42] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:29:42] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3831, currentOffset=3831 [11:29:42] [SCROLL] Scrolling to 3831, animated=false [11:29:42] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:29:42] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:29:42] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:29:42] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:29:42] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:29:42] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:29:42] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:29:42] [SERVER] Starting reconnect polling (5s interval) [11:29:42] [UPLOAD_RECOVERY] ✅ All media files verified on server [11:29:43] [SCROLL] 💓 alive, visible=44...51, rows=52, estHeight=0.0, heightCalls=60 [11:29:47] [SERVER] Polling - attempting to reconnect... [11:29:47] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:29:47] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:29:52] [SERVER] Polling - attempting to reconnect... [11:29:52] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:29:52] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:29:55] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:29:55] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [11:29:55] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [11:29:55] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:29:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28828, 28827, 28826, 28825] [11:29:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:29:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:29:55] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:29:55] [SCROLL] wasNearBottom=true, threshold=447, offset=4142, contentH=4589, boundsH=447, forceScroll=false [11:29:55] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:29:55] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:29:55] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=114 [11:29:55] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:29:55] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:29:55] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4219, currentOffset=4219 [11:29:55] [SCROLL] Scrolling to 4219, animated=true [11:29:56] [CLIENT_SIG] Event received: type=0 messageId=28829 [11:29:56] [WS_EVENT] Received event: type=0, messageId=28829 [11:29:56] [WS_EVENT] 📨 New message notification (msgId=28829) - triggering incremental refresh, currentMsgCount=51 [11:29:56] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:29:56] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28828 [11:29:56] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [11:29:56] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28829,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:29:56"} [11:29:56] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 08:29:56, "session_id": ILUIWU, "message_id": 28829, "file_name": , "message_type": 0, "ok": 1] [11:29:56] [DB_UPGRADE] Upgrading message ID: -1 → 28829, preserveOriginalDate=false [11:29:56] [DB_UPGRADE] ✅ Upgraded -1 → 28829 with send_status=0, 1 row(s) affected [11:29:56] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28829 [11:29:56] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28829 [11:29:56] ReloadData 9 [11:29:56] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:29:56] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28829] [11:29:56] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:29:56] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:29:56] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:29:56] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:29:56] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:29:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=58 [11:29:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28829, 28828, 28827, 28826, 28825] [11:29:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:29:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:29:57] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:29:57] [SCROLL] wasNearBottom=true, threshold=447, offset=4219, contentH=4666, boundsH=447, forceScroll=false [11:29:57] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:29:57] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [11:29:57] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4219, currentOffset=4219 [11:29:57] [SERVER] Polling - attempting to reconnect... [11:29:57] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:29:57] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:00] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:02] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [11:30:02] [SERVER] Polling - attempting to reconnect... [11:30:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:02] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:02] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=71ms [11:30:02] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:03] [PUSH] Silent push received [11:30:03] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:30:03 +0000, appState=0, message_id=nil, type=nil [11:30:03] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:30:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:03 +0000 [11:30:03] [PUSH_EMBED] No embedded message_data in notification [11:30:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:30:03] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:30:03] [PUSH] No embedded data, pre-loading messages from server [11:30:03] [PUSH_PRELOAD] Fetching messages for instant display cache [11:30:03] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:30:03] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:30:03] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:30:03] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:30:03] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:30:03] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:30:03] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:30:03] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:30:03] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:30:03] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:30:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:30:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=1 vccs=0 [11:30:03] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28829 [11:30:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28829, AnyHashable("session_id"): ILUIWU] [11:30:03] [PUSH] Parsed message_id: 28829 [11:30:03] [PUSH] Parsed operation_type: 3 [11:30:03] [PUSH] Taking direct action: opType=3, messageId=28829 [11:30:03] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28829 [11:30:03] [CLIENT_SIG] Event received: type=3 messageId=28829 [11:30:03] [WS_EVENT] Received event: type=3, messageId=28829 [11:30:03] [WS_EVENT] Read receipt for message 28829 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:30:03] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:06] [CLIENT_SIG] Typing start from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:30:07] [MENU] dismissAnyExistingMenu called [11:30:07] [MENU] dismissAnyExistingMenu completed [11:30:07] [SCROLL_BEGIN_DRAG] messagesTable offsetY=4219, insetTop=0, topDistance=4219, rows=53, prefetchedCount=0 [11:30:07] [SCROLL] 💓 alive, visible=48...52, rows=53, estHeight=0.0, heightCalls=59 [11:30:07] [SCROLL_WILL_END] velocity=(0.000, 0.789), currentY=4237, targetY=4219, movingTowardTop=true, decelNow=false, dragging=false [11:30:07] [SCROLL_WILL_END] captured upward momentum velocityY=0.7892459697185715 [11:30:07] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=4237, topInset=0, pendingVelocityY=0.7892459697185715, targetNearTop=4237 [11:30:08] [SCROLL_END_DECEL] messagesTable offsetY=4219, insetTop=0, pendingVelocityY=0.7892459697185715 [11:30:08] [SERVER] Polling - attempting to reconnect... [11:30:08] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:08] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:08] [LIFECYCLE] App resigning active - cleared crash flag [11:30:10] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [11:30:10] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [11:30:10] [SECURITY] Saved background timestamp [11:30:10] [LIFECYCLE] App entering background - cleared crash flag [11:30:10] [CLIENT_SIG] Disconnecting [11:30:10] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [11:30:10] [DB] ✅ Chat database flushed (WAL checkpoint) before background [11:30:10] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [11:30:10] [LIFECYCLE] Background snapshot: count=51, maxId=28829 [11:30:10] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [11:30:10] [WS] Canceling WebSocket for query connection to iosILUIWU [11:30:10] In cleanupPeer [11:30:10] In cleanupPeer [11:30:10] [LIFECYCLE] WebRTC audio disabled [11:30:10] [LIFECYCLE] AVAudioSession deactivated [11:30:10] [LIFECYCLE] All connections stopped [11:30:10] [CLIENT_SIG] WebSocket closed with code 1001 [11:30:10] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:30:10] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [11:30:10] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:30:10] [SERVER] Stopped reconnect polling [11:30:10] Will request stop of video 0 [11:30:10] Will request stop of video 0 [11:30:10] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [11:30:10] [WS] Query connection error - cleaning up all agent connections and views [11:30:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:30:10] [WS] Query connection failed - cleaning up all agent connections and views [11:30:10] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [11:30:15] [CRASH] No crash detected [11:30:15] [FONT] Roboto fonts loaded successfully: Roboto-Regular [11:30:15] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [11:30:15] [GIPHY] SDK not available - using REST API fallback [11:30:15] [BACKGROUND] Background fetch enabled [11:30:15] [SECURITY] Initial launch - timeout exceeded (4.767084121704102s > 0.0s) [11:30:15] [AUTH] Starting PIN authentication [11:30:15] [PUSH] Silent push received [11:30:15] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:30:15 +0000, appState=2, message_id=28830, type=nil [11:30:15] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:30:15] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:15 +0000 [11:30:15] [PUSH_TRACE] ⬇️ Processing embedded message_id=28830 [11:30:15] [PUSH_EMBED] 📩 Received embedded message: id=28830, type=0, sender=Laurent [11:30:15] [PUSH_TRACE] ⬇️ Message details: text="Let me know if it works indeed better....", datesent=2026-04-23 08:30:13 [11:30:15] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:30:15] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28830 [11:30:15] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28830 [11:30:15] [CLEANUP] No old timer messages to delete [11:30:15] [PUSH_EMBED] ✅ Saved message 28830 to local DB (sync) [11:30:15] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28830 [11:30:15] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28830 [11:30:15] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28830 [11:30:15] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [11:30:15] [PUSH_EMBED] Created new cache with embedded message 28830 [11:30:15] [PUSH_TRACE] 📦 ✅ Created new cache with message 28830 [11:30:15] [PUSH_TRACE] 📦 EXITING cache update queue for message 28830 [11:30:15] [PUSH_EMBED] Fetching evolution data for message 28830 in background [11:30:15] [PUSH_EMBED] ✅ Fully processed message 28830 [11:30:15] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28830 [11:30:15] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28830], handled=true [11:30:15] [PUSH] Embedded message handled instantly from silent push [11:30:15] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:30:15] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28830 [11:30:15] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:30:15] [PRELOAD] Cache already valid (1 messages), skipping pre-load [11:30:15] [PUSH_EMBED] Got evolution data for message 28830, saving to local DB [11:30:15] [PUSH_EMBED] Saved evolution data for message 28830 [11:30:15] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:30:15] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:30:15] [USER] ✅ User registered successfully [11:30:15] [PUSH] User registration after token update: success [11:30:21] [PUSH] Notification tapped - session_id: ILUIWU [11:30:21] [PUSH] Max message_id before tap: 28830 [11:30:21] [PUSH] Stored pending session: ILUIWU [11:30:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:21 +0000 [11:30:21] [PUSH_TRACE] ⬇️ Processing embedded message_id=28830 [11:30:21] [PUSH_EMBED] 📩 Received embedded message: id=28830, type=0, sender=Laurent [11:30:21] [PUSH_TRACE] ⬇️ Message details: text="Let me know if it works indeed better....", datesent=2026-04-23 08:30:13 [11:30:21] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:30:21] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28830 [11:30:21] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28830 [11:30:21] [PUSH_EMBED] ✅ Saved message 28830 to local DB (sync) [11:30:21] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28830 [11:30:21] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28830 [11:30:21] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28830 [11:30:21] [PUSH_TRACE] 📦 Cache state: valid=true, count=1, IDs=[28830] [11:30:21] [PUSH_TRACE] 📦 ⚠️ Message 28830 already in cache, skipping insert [11:30:21] [PUSH_TRACE] 📦 EXITING cache update queue for message 28830 [11:30:21] [PUSH_EMBED] Fetching evolution data for message 28830 in background [11:30:21] [PUSH_EMBED] ✅ Fully processed message 28830 [11:30:21] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28830 [11:30:21] [PUSH] Embedded message handled instantly on tap [11:30:21] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:30:21] [PUSH] Fetching server messages since_id=28830 to catch coalesced notifications on tap [11:30:21] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28830 to catch coalesced notifications [11:30:21] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:30:21] [PUSH_PRELOAD] Fetching messages for instant display cache [11:30:22] [CLIENT_SIG] WebSocket opened [11:30:22] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:30:22] [CLIENT_SIG] Connected! clientId=ZZ_SZOVmZ_zxYpk2 [11:30:22] [PUSH_EMBED] Got evolution data for message 28830, saving to local DB [11:30:22] [PUSH_EMBED] Saved evolution data for message 28830 [11:30:22] [PUSH_PRELOAD] No messages or parse error [11:30:22] [PUSH] Server fetch on tap completed (success=false) [11:30:22] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:30:22] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:30:26] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:30:26] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow[11:30:27] [LOG] Pruned 74 entries older than 3 hours [11:30:27] [SECURITY] Restored real session: ILUIWU [11:30:27] [SECURITY] Restored real session: ILUIWU [11:30:27] [SECURITY] Saved real session: ILUIWU [11:30:27] [SCENE] Launched directly to chat view with sessionId: ILUIWU [11:30:27] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:30:27] [UPLOAD_QUEUE] ✅ Database integrity check passed [11:30:27] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [11:30:27] Documents Directory: /var/mobile/Containers/Data/Application/C54170A7-4208-45E1-972B-D75BEF83B039/Documents [11:30:27] [UPLOAD_QUEUE] Found 0 pending uploads to resume [11:30:27] [CAPTURE_HOST] live-feed moved hosted view to plain container [11:30:27] [THEME] Applying current theme [11:30:27] [CHAT] Applied day theme (mode: day) [11:30:27] [SECURITY] Saved real session: ILUIWU [11:30:27] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [11:30:27] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:30:27] [NETWORK] Network monitor started [11:30:27] [NETWORK] Status changed: connected [11:30:27] Did transition [11:30:27] [CHUNK] Pre-cache has only 1 messages - supplementing from local DB [11:30:27] [CHUNK] After merge: 50 messages (added 49 from local DB) [11:30:27] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [11:30:27] [VIEWER] Screen lock enabled - normal idle behavior [11:30:27] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [11:30:27] [VCC] ========== VideoConnectionClass INIT ========== [11:30:27] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [11:30:27] [DATA AUDIO] ========== setupWebRTC() START ========== [11:30:27] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [11:30:27] [DATA AUDIO] Creating encoder/decoder factories... [11:30:27] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [11:30:27] [CODEC] Viewer selected encoder: AV1 (best quality) [11:30:27] [DATA AUDIO] Creating RTCPeerConnectionFactory... [11:30:27] [DATA AUDIO] ✅ Factory created [11:30:27] [DATA AUDIO] RTCAudioSession locked [11:30:27] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [11:30:27] [DATA AUDIO] RTCAudioSession unlocked [11:30:27] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [11:30: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"] [11:30:27] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [11:30:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:30:27] [QUERY] ✅ tempQueryConnection created for iosILUIWU [11:30:27] [VIEWER_INIT] Already have 50 messages - just filtering for tab [11:30:27] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:30:27] [EVENT_POLL] Event polling disabled - using WebSocket events instead [11:30:27] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [11:30:27] Did transition [11:30:27] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [11:30:27] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:30:27] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:30:27] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:30:27] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [11:30:27] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:30:27] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [11:30:27] [READBY_OPT] Fetching readBy for 1 unsettled messages (targeted) [11:30:27] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [11:30:27] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [11:30:27] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [11:30:27] [USER] ✅ User registered successfully [11:30:27] [USER] User registration successful [11:30:27] [GALLERY_DB] ✅ Loaded 1256 media messages [11:30:27] [MIGRATION] No messages need sender_name backfill [11:30:27] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:30:27] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28830 [11:30:27] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [11:30:27] [INCREMENTAL_SYNC] ✅ No new messages [11:30:27] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [11:30:27] [GALLERY] First 5 after sort (newest first): [11:30:27] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [11:30:27] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [11:30:27] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [11:30:27] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [11:30:27] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [11:30:27] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [11:30:27] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [11:30:28] [SERVER] Starting reconnect polling (5s interval) [11:30:28] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [11:30:28] [ICONS] Offset applied: -14.6 [11:30:28] [ICONS] New left margin: 11.2, New right margin: 11.3 [11:30:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:30:28] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:30:28] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:30:28] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [11:30:28] [ICONS] Chat center: (31.2, 87.0) [11:30:28] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [11:30:28] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [11:30:28] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [11:30:28] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [11:30:28] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [11:30:28] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [11:30:28] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [11:30:28] [ICONS] Screen width: 440.0 [11:30:28] [COMBINED_FETCH] Loaded 1 read receipts, 0 messages with reactions [11:30:28] [READBY_ENRICH] Enriched 1/1 unsettled messages with readBy data [11:30:28] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:30:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28830, 28829, 28828, 28827, 28826] [11:30:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:30:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [11:30:28] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:30:28] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [11:30:28] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:30:28] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [11:30:28] [CELL_UPLOAD] configure: msgId=28740, file=adbb72082c79fd33.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:30:28] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:30:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=adbb72082c79fd33.jpg, overlayExists=true [11:30:28] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [11:30:28] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:30:28] [PURGE] ⚠️ Media cache purge DISABLED for debugging [11:30:28] [UNSENT_RETRY] Checking for unsent messages... [11:30:28] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [11:30:28] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [11:30:28] [UPLOAD_RECOVERY] Session: ILUIWU [11:30:28] [UPLOAD_RECOVERY] ✅ No stuck uploads found [11:30:28] [UPLOAD_RECOVERY] Checking recent media messages on server... [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [11:30:28] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [11:30:28] [PENDING_UPLOAD] Total pending upload messages: 0 [11:30:28] [UNSENT_RETRY] No unsent messages found [11:30:28] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:30:28] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:30:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:30:28] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28829 → 28830 [11:30:28] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3856, currentOffset=3856 [11:30:28] [SCROLL] Scrolling to 3856, animated=false [11:30:28] new_session POST ok: token len=157 [11:30:28] HELLO → sent (fetched token, role=query) [11:30:28] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:30:28] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:30:28] [SIG] hello_ok received for query connection - ready to query agents [11:30:28] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:30:28] [SIG] get_agents request sent for sessionId=ILUIWU [11:30:28] [SIG] get_agents request sent for sessionId=iosILUIWU [11:30:28] [SERVER] Stopped reconnect polling [11:30:28] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=68 [11:30:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28830, 28829, 28828, 28827, 28826] [11:30:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:30:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [11:30:28] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:30:28] [SCROLL] wasNearBottom=true, threshold=758, offset=3856, contentH=4614, boundsH=758, forceScroll=true [11:30:28] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:30:28] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [11:30:28] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [11:30:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [11:30:28] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [11:30:28] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3856, currentOffset=3856 [11:30:28] [SCROLL] Scrolling to 3856, animated=false [11:30:28] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:30:28] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:30:28] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:30:28] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:30:28] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:30:28] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:30:28] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:30:28] [SERVER] Starting reconnect polling (5s interval) [11:30:28] [UPLOAD_RECOVERY] ✅ All media files verified on server [11:30:31] [PUSH] Silent push received [11:30:31] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:30:31 +0000, appState=0, message_id=nil, type=nil [11:30:31] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:30:31] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:31 +0000 [11:30:31] [PUSH_EMBED] No embedded message_data in notification [11:30:31] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:30:31] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:30:31] [PUSH] No embedded data, pre-loading messages from server [11:30:31] [PUSH_PRELOAD] Fetching messages for instant display cache [11:30:31] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:31] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:30:31] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:30:31] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:30:31] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:30:31] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:30:31] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:30:31] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [11:30:31] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:30:31] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:30:31] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:30:31] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [11:30:31] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:30:31] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28830 [11:30:31] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28830, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [11:30:31] [PUSH] Parsed message_id: 28830 [11:30:31] [PUSH] Parsed operation_type: 3 [11:30:31] [PUSH] Taking direct action: opType=3, messageId=28830 [11:30:31] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28830 [11:30:31] [CLIENT_SIG] Event received: type=3 messageId=28830 [11:30:31] [WS_EVENT] Received event: type=3, messageId=28830 [11:30:31] [WS_EVENT] Read receipt for message 28830 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:30:32] [MUTE] Status sent to server: muted=0, response code=200 [11:30:32] [MUTE] Status sent to server: muted=0, response code=200 [11:30:33] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:33] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:30:33] [SERVER] Polling - attempting to reconnect... [11:30:33] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:33] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:33] [NETWORK] Status changed: connected [11:30:33] [MUTE] Status sent to server: muted=1, response code=200 [11:30:33] [MUTE] Status sent to server: muted=1, response code=200 [11:30:34] [NETWORK] Status changed: connected [11:30:35] [SCROLL] 💓 alive, visible=42...48, rows=52, estHeight=0.0, heightCalls=63 [11:30:35] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [11:30:35] [SCROLL_END_DECEL] messagesTable offsetY=4167, insetTop=0, pendingVelocityY=0.0 [11:30:38] [SERVER] Polling - attempting to reconnect... [11:30:38] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:38] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:43] [SERVER] Polling - attempting to reconnect... [11:30:43] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:43] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:48] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [11:30:48] [SERVER] Polling - attempting to reconnect... [11:30:48] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:48] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:48] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=114ms [11:30:53] [SERVER] Polling - attempting to reconnect... [11:30:53] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:53] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:30:58] [SERVER] Polling - attempting to reconnect... [11:30:58] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:30:58] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:31:03] [SERVER] Polling - attempting to reconnect... [11:31:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:31:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:31:08] [CAM_CONN] 💓 PING #2 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [11:31:08] [SERVER] Polling - attempting to reconnect... [11:31:08] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:31:08] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:31:10] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:31:10] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [11:31:10] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [11:31:10] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=5 [11:31:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28830, 28829, 28828, 28827] [11:31:10] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:31:10] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:10] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:31:10] [SCROLL] wasNearBottom=true, threshold=429, offset=4167, contentH=4614, boundsH=429, forceScroll=false [11:31:10] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:31:10] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [11:31:10] [SCROLL] 💓 alive, visible=47...52, rows=53, estHeight=0.0, heightCalls=111 [11:31:10] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:31:10] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:31:10] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4265, currentOffset=4265 [11:31:10] [SCROLL] Scrolling to 4265, animated=true [11:31:11] [CLIENT_SIG] Event received: type=0 messageId=28831 [11:31:11] [WS_EVENT] Received event: type=0, messageId=28831 [11:31:11] [WS_EVENT] 📨 New message notification (msgId=28831) - triggering incremental refresh, currentMsgCount=51 [11:31:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:31:11] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28830 [11:31:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [11:31:11] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28831,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:31:11"} [11:31:11] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 08:31:11, "message_id": 28831, "file_name": , "message_type": 0, "session_id": ILUIWU, "ok": 1] [11:31:11] [DB_UPGRADE] Upgrading message ID: -1 → 28831, preserveOriginalDate=false [11:31:11] [DB_UPGRADE] ✅ Upgraded -1 → 28831 with send_status=0, 1 row(s) affected [11:31:11] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28831 [11:31:11] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28831 [11:31:11] ReloadData 9 [11:31:11] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:31:11] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28831] [11:31:11] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:11] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:11] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:31:11] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:31:11] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:31:11] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:31:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28831, 28830, 28829, 28828, 28827] [11:31:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:31:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:11] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:31:11] [SCROLL] wasNearBottom=true, threshold=447, offset=4265, contentH=4712, boundsH=447, forceScroll=true [11:31:11] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:31:11] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [11:31:11] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4265, currentOffset=4265 [11:31:11] [SCROLL] Scrolling to 4265, animated=false [11:31:12] [LIFECYCLE] App resigning active - cleared crash flag [11:31:13] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [11:31:13] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [11:31:13] [SECURITY] Saved background timestamp [11:31:13] [LIFECYCLE] App entering background - cleared crash flag [11:31:13] [CLIENT_SIG] Disconnecting [11:31:13] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [11:31:13] [DB] ✅ Chat database flushed (WAL checkpoint) before background [11:31:13] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:13] [LIFECYCLE] Background snapshot: count=51, maxId=28831 [11:31:13] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [11:31:13] [WS] Canceling WebSocket for query connection to iosILUIWU [11:31:13] In cleanupPeer [11:31:13] In cleanupPeer [11:31:13] [LIFECYCLE] WebRTC audio disabled [11:31:13] [LIFECYCLE] AVAudioSession deactivated [11:31:13] [LIFECYCLE] All connections stopped [11:31:13] [CLIENT_SIG] WebSocket closed with code 1001 [11:31:13] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:31:13] [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/} [11:31:13] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:31:13] [SERVER] Stopped reconnect polling [11:31:13] Will request stop of video 0 [11:31:13] Will request stop of video 0 [11:31:13] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [11:31:13] [WS] Query connection error - cleaning up all agent connections and views [11:31:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:31:13] [WS] Query connection failed - cleaning up all agent connections and views [11:31:13] [APP_DISCONNECT] Scene disconnecting - logging pending uploads...[11:31:16] [LOG] Pruned 324 entries older than 3 hours [11:31:16] [FONT] Roboto fonts loaded successfully: Roboto-Regular [11:31:16] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [11:31:16] [GIPHY] SDK not available - using REST API fallback [11:31:16] [BACKGROUND] Background fetch enabled [11:31:16] [SECURITY] Initial launch - timeout exceeded (3.172506093978882s > 0.0s) [11:31:16] [AUTH] Starting PIN authentication [11:31:16] [PUSH] Silent push received [11:31:16] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:16 +0000, appState=2, message_id=nil, type=nil [11:31:16] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:31:16] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:16 +0000 [11:31:16] [PUSH_EMBED] No embedded message_data in notification [11:31:16] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:31:16] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:31:16] [PUSH] No embedded data, pre-loading messages from server [11:31:16] [PUSH_PRELOAD] Fetching messages for instant display cache [11:31:16] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:31:16] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:31:16] [CLEANUP] No old timer messages to delete [11:31:16] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=28828)... [11:31:16] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:31:16] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:31:16] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:31:16] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:31:16] [PRELOAD] Fetched 3 messages [11:31:16] [PRELOAD] ✅ Saved 3 messages to local DB [11:31:16] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=3, sessionId=ILUIWU [11:31:16] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28831, 28830, 28829] [11:31:16] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:31:16] [PRELOAD] ⚡ Cached 3 messages for instant display (preserved 0 from push) [11:31:17] [USER] ✅ User registered successfully [11:31:17] [PUSH] User registration after token update: success [11:31:17] [USER] ✅ User registered successfully [11:31:17] [PUSH] User registration after token update: success [11:31:17] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:31:17] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:31:17] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:31:17] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:31:17] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:31:17] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:31:17] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:17] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=3, IDs=[28831, 28830, 28829] [11:31:17] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:31:17] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:17] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:31:17] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:31:33] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:31:33] [PUSH] Silent push received [11:31:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:33 +0000, appState=2, message_id=28832, type=nil [11:31:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:33 +0000 [11:31:33] [PUSH_TRACE] ⬇️ Processing embedded message_id=28832 [11:31:33] [PUSH_EMBED] 📩 Received embedded message: id=28832, type=0, sender=Laurent [11:31:33] [PUSH_TRACE] ⬇️ Message details: text="Helloooooooo...", datesent=2026-04-23 08:31:31 [11:31:33] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:31:33] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28832 [11:31:33] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28832 [11:31:33] [PUSH_EMBED] ✅ Saved message 28832 to local DB (sync) [11:31:33] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28832 [11:31:33] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28832 [11:31:33] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28832 [11:31:33] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [11:31:33] [PUSH_EMBED] Inserted message 28832 into existing cache (now 51 messages) [11:31:33] [PUSH_TRACE] 📦 ✅ Inserted message 28832, cache now has IDs: [28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [11:31:33] [PUSH_TRACE] 📦 EXITING cache update queue for message 28832 [11:31:33] [PUSH_EMBED] Fetching evolution data for message 28832 in background [11:31:33] [PUSH_EMBED] ✅ Fully processed message 28832 [11:31:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28832 [11:31:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823], handled=true [11:31:33] [PUSH] Embedded message handled instantly from silent push [11:31:33] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:31:33] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28832 [11:31:33] [PUSH_EMBED] Got evolution data for message 28832, saving to local DB [11:31:33] [PUSH_EMBED] Saved evolution data for message 28832 [11:31:41] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:31:41] [PUSH] Silent push received [11:31:41] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:41 +0000, appState=2, message_id=28833, type=nil [11:31:41] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [11:31:41] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:41 +0000 [11:31:41] [PUSH_TRACE] ⬇️ Processing embedded message_id=28833 [11:31:41] [PUSH_EMBED] 📩 Received embedded message: id=28833, type=0, sender=Laurent [11:31:41] [PUSH_TRACE] ⬇️ Message details: text="Notified or not ?...", datesent=2026-04-23 08:31:39 [11:31:41] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:31:41] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28833 [11:31:41] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28833 [11:31:41] [PUSH_EMBED] ✅ Saved message 28833 to local DB (sync) [11:31:41] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28833 [11:31:41] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28833 [11:31:41] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28833 [11:31:41] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [11:31:41] [PUSH_EMBED] Inserted message 28833 into existing cache (now 52 messages) [11:31:41] [PUSH_TRACE] 📦 ✅ Inserted message 28833, cache now has IDs: [28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [11:31:41] [PUSH_TRACE] 📦 EXITING cache update queue for message 28833 [11:31:41] [PUSH_EMBED] Fetching evolution data for message 28833 in background [11:31:41] [PUSH_EMBED] ✅ Fully processed message 28833 [11:31:41] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28833 [11:31:41] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824], handled=true [11:31:41] [PUSH] Embedded message handled instantly from silent push [11:31:41] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:31:41] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28833 [11:31:41] [PUSH_EMBED] Got evolution data for message 28833, saving to local DB [11:31:41] [PUSH_EMBED] Saved evolution data for message 28833 [11:31:43] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:31:43] [PUSH] Silent push received [11:31:43] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:43 +0000, appState=2, message_id=28834, type=nil [11:31:43] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [11:31:43] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:43 +0000 [11:31:43] [PUSH_TRACE] ⬇️ Processing embedded message_id=28834 [11:31:43] [PUSH_EMBED] 📩 Received embedded message: id=28834, type=0, sender=Laurent [11:31:43] [PUSH_TRACE] ⬇️ Message details: text="I hope not !...", datesent=2026-04-23 08:31:42 [11:31:43] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:31:43] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28834 [11:31:43] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28834 [11:31:43] [PUSH_EMBED] ✅ Saved message 28834 to local DB (sync) [11:31:43] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28834 [11:31:43] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28834 [11:31:43] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28834 [11:31:43] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [11:31:43] [PUSH_EMBED] Inserted message 28834 into existing cache (now 53 messages) [11:31:43] [PUSH_TRACE] 📦 ✅ Inserted message 28834, cache now has IDs: [28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [11:31:43] [PUSH_TRACE] 📦 EXITING cache update queue for message 28834 [11:31:43] [PUSH_EMBED] Fetching evolution data for message 28834 in background [11:31:43] [PUSH_EMBED] ✅ Fully processed message 28834 [11:31:43] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28834 [11:31:43] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825], handled=true [11:31:43] [PUSH] Embedded message handled instantly from silent push [11:31:43] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:31:43] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28834 [11:31:43] [PUSH_EMBED] Got evolution data for message 28834, saving to local DB [11:31:43] [PUSH_EMBED] Saved evolution data for message 28834 [11:31:49] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:31:49] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:49] [CLIENT_SIG] Receive error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSLocalizedDescription=The network connection was lost., NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [11:31:49] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:31:49] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [11:31:49] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:31:49] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:31:49] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow[11:31:50] [LOG] Pruned 28 entries older than 3 hours [11:31:50] [SECURITY] Restored real session: ILUIWU [11:31:50] [SECURITY] Restored real session: ILUIWU [11:31:50] [SECURITY] Saved real session: ILUIWU [11:31:50] [SCENE] Launched directly to chat view with sessionId: ILUIWU [11:31:50] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:31:50] [UPLOAD_QUEUE] ✅ Database integrity check passed [11:31:50] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [11:31:50] Documents Directory: /var/mobile/Containers/Data/Application/C54170A7-4208-45E1-972B-D75BEF83B039/Documents [11:31:50] [UPLOAD_QUEUE] Found 0 pending uploads to resume [11:31:50] [CAPTURE_HOST] live-feed moved hosted view to plain container [11:31:50] [THEME] Applying current theme [11:31:50] [CHAT] Applied day theme (mode: day) [11:31:50] [SECURITY] Saved real session: ILUIWU [11:31:50] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [11:31:50] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:50] [NETWORK] Network monitor started [11:31:50] [NETWORK] Status changed: connected [11:31:50] Did transition [11:31:50] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [11:31:50] [VIEWER] Screen lock enabled - normal idle behavior [11:31:50] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [11:31:50] [VCC] ========== VideoConnectionClass INIT ========== [11:31:50] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [11:31:50] [DATA AUDIO] ========== setupWebRTC() START ========== [11:31:50] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [11:31:50] [DATA AUDIO] Creating encoder/decoder factories... [11:31:50] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [11:31:50] [CODEC] Viewer selected encoder: AV1 (best quality) [11:31:50] [DATA AUDIO] Creating RTCPeerConnectionFactory... [11:31:50] [DATA AUDIO] ✅ Factory created [11:31:50] [DATA AUDIO] RTCAudioSession locked [11:31:50] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [11:31:50] [DATA AUDIO] RTCAudioSession unlocked [11:31:50] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [11:31: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"] [11:31:50] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [11:31:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:31:50] [QUERY] ✅ tempQueryConnection created for iosILUIWU [11:31:50] [VIEWER_INIT] Already have 50 messages - just filtering for tab [11:31:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:31:50] [EVENT_POLL] Event polling disabled - using WebSocket events instead [11:31:50] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [11:31:50] Did transition [11:31:50] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [11:31:50] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:31:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:31:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:31:50] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [11:31:50] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:31:50] [READBY_OPT] No message IDs to fetch - skipping server call [11:31:50] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [11:31:50] [MIGRATION] No messages need sender_name backfill [11:31:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:31:50] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [11:31:50] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [11:31:50] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [11:31:51] [GALLERY_DB] ✅ Loaded 1256 media messages [11:31:51] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28834, maxMemoryId=28834 [11:31:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28834 [11:31:51] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [11:31:51] [GALLERY] First 5 after sort (newest first): [11:31:51] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [11:31:51] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [11:31:51] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [11:31:51] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [11:31:51] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [11:31:51] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [11:31:51] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [11:31:51] [SERVER] Starting reconnect polling (5s interval) [11:31:51] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [11:31:51] [ICONS] Offset applied: -14.6 [11:31:51] [ICONS] New left margin: 11.2, New right margin: 11.3 [11:31:51] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [11:31:51] [ICONS] Chat center: (31.2, 87.0) [11:31:51] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [11:31:51] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [11:31:51] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [11:31:51] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [11:31:51] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [11:31:51] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [11:31:51] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [11:31:51] [ICONS] Screen width: 440.0 [11:31:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:31:51] [CLIENT_SIG] WebSocket opened [11:31:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:31:51] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:31:51] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [11:31:51] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:31:51] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:31:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28834, 28833, 28832, 28831, 28830] [11:31:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:31:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [11:31:51] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:31:51] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [11:31:51] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:31:51] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [11:31:51] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:31:51] [INCREMENTAL_SYNC] ✅ No new messages [11:31:51] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28831 → 28832 [11:31:51] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28832 → 28833 [11:31:51] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28833 → 28834 [11:31:51] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:31:51] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3386, currentOffset=3386 [11:31:51] [SCROLL] Scrolling to 3386, animated=false [11:31:51] [PURGE] ⚠️ Media cache purge DISABLED for debugging [11:31:51] [UNSENT_RETRY] Checking for unsent messages... [11:31:51] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [11:31:51] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [11:31:51] [UPLOAD_RECOVERY] Session: ILUIWU [11:31:51] [UPLOAD_RECOVERY] ✅ No stuck uploads found [11:31:51] [UPLOAD_RECOVERY] Checking recent media messages on server... [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [11:31:51] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [11:31:51] [PENDING_UPLOAD] Total pending upload messages: 0 [11:31:51] [UNSENT_RETRY] No unsent messages found [11:31:51] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=73 [11:31:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28834, 28833, 28832, 28831, 28830] [11:31:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:31:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [11:31:51] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:31:51] [SCROLL] wasNearBottom=true, threshold=758, offset=3386, contentH=4144, boundsH=758, forceScroll=true [11:31:51] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:31:51] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [11:31:51] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3386, currentOffset=3386 [11:31:51] [SCROLL] Scrolling to 3386, animated=false [11:31:51] [CLIENT_SIG] Connected! clientId=zz_xVAWqRQ1a9AUX [11:31:51] [USER] ✅ User registered successfully [11:31:51] [USER] User registration successful [11:31:51] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:31:51] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:31:51] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:51] new_session POST ok: token len=157 [11:31:51] HELLO → sent (fetched token, role=query) [11:31:51] [UPLOAD_RECOVERY] ✅ All media files verified on server [11:31:51] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:31:51] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:31:51] [SIG] hello_ok received for query connection - ready to query agents [11:31:51] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:31:51] [SIG] get_agents request sent for sessionId=ILUIWU [11:31:51] [SIG] get_agents request sent for sessionId=iosILUIWU [11:31:52] [SERVER] Stopped reconnect polling [11:31:52] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:31:52] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:31:52] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:31:52] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:31:52] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:31:52] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:31:52] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:31:52] [SERVER] Starting reconnect polling (5s interval) [11:31:52] [CLIENT_SIG] Typing stop from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:31:52] [CLIENT_SIG] Event received: type=0 messageId=28835 [11:31:52] [WS_EVENT] Received event: type=0, messageId=28835 [11:31:52] [WS_EVENT] 📨 New message notification (msgId=28835) - triggering incremental refresh, currentMsgCount=50 [11:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28834, maxMemoryId=28834 [11:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28834 [11:31:52] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28835] [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28835 [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 51, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:52] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:31:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:31:52] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:31:52] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [11:31:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28835, 28834, 28833, 28832, 28831] [11:31:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:31:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:52] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:31:52] [SCROLL] wasNearBottom=true, threshold=447, offset=3697, contentH=4144, boundsH=447, forceScroll=true [11:31:52] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:31:52] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28834 → 28835 [11:31:52] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [11:31:52] [SCROLL] 💓 alive, visible=45...52, rows=53, estHeight=0.0, heightCalls=115 [11:31:52] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=true, nearBottom=true), maxY=3770, currentOffset=3770 [11:31:52] [SCROLL] Scrolling to 3770, animated=false [11:31:52] [PUSH] Silent push received [11:31:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:52 +0000, appState=0, message_id=nil, type=nil [11:31:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:52 +0000 [11:31:52] [PUSH_EMBED] No embedded message_data in notification [11:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:31:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:31:52] [PUSH] No embedded data, pre-loading messages from server [11:31:52] [PUSH_PRELOAD] Fetching messages for instant display cache [11:31:52] [CLIENT_SIG] Event received: type=3 messageId=28832 [11:31:52] [WS_EVENT] Received event: type=3, messageId=28832 [11:31:52] [WS_EVENT] Read receipt for message 28832 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:52] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:31:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:52] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:52] [PUSH] handlePollEventsNotification userInfo: [:] [11:31:52] [PUSH] No message_id in userInfo [11:31:52] [PUSH] No operation_type in userInfo [11:31:52] [FAST_REFRESH] Evolution disabled - performing incremental sync [11:31:52] [PUSH_TRACE] 📬 POLL: cache state: valid=false, count=0, IDs=[] [11:31:52] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:52] [FAST_REFRESH] Already have 51 messages in memory [11:31:52] [FAST_REFRESH] maxMemoryId=28835, maxLocalId=28835 [11:31:52] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [11:31:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:31:52] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [11:31:52] [READBY_OPT] No message IDs to fetch - skipping server call [11:31:52] [GAP_FIX] Incremental sync will use since_id=28835 (background max=0, current DB max=28835) [11:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28835 [11:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [11:31:52] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [11:31:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:31:52] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:31:53] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:31:53 +0000 - type: unknown, operation_type: 0, message_id: 28835, session_id: ILUIWU, state: 0 [11:31:53] [PUSH_DEBUG] Full userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:31:52, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:31:52"; "file_name" = ""; "is_encrypted" = 0; message = "As you are not coming back to app, seems it works !"; "message_id" = 28835; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28834; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("message_id"): 28835, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): As you are not coming back to app, seems it works !, AnyHashable("sender_name"): Laurent] [11:31:53] [PUSH] App active - suppressing notification UI, posting internal event [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:53 +0000 [11:31:53] [PUSH_TRACE] ⬇️ Processing embedded message_id=28835 [11:31:53] [PUSH_EMBED] 📩 Received embedded message: id=28835, type=0, sender=Laurent [11:31:53] [PUSH_TRACE] ⬇️ Message details: text="As you are not coming back to app, seems it works ...", datesent=2026-04-23 08:31:52 [11:31:53] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:31:53] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_EMBED] ✅ Saved message 28835 to local DB (sync) [11:31:53] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28835 [11:31:53] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28835 [11:31:53] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [11:31:53] [PUSH_EMBED] Created new cache with embedded message 28835 [11:31:53] [PUSH_TRACE] 📦 ✅ Created new cache with message 28835 [11:31:53] [PUSH_TRACE] 📦 EXITING cache update queue for message 28835 [11:31:53] [PUSH_EMBED] Fetching evolution data for message 28835 in background [11:31:53] [PUSH_EMBED] ✅ Fully processed message 28835 [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28835 [11:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:53] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:31:52, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:31:52"; "file_name" = ""; "is_encrypted" = 0; message = "As you are not coming back to app, seems it works !"; "message_id" = 28835; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28834; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("message_id"): 28835, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): As you are not coming back to app, seems it works !, AnyHashable("sender_name"): Laurent] [11:31:53] [PUSH_EMBED_VC] Message 28835 already in memory - skipping [11:31:53] [PUSH] ⚡ Embedded message handled directly in ViewController [11:31:53] [PUSH] Parsed message_id: 28835 [11:31:53] [PUSH] Parsed operation_type: 0 [11:31:53] [PUSH] Taking direct action: opType=0, messageId=28835 [11:31:53] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28835 [11:31:53] [PUSH] ⚡ Message 28835 already in memory - skipping duplicate notification entirely [11:31:53] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:31:53] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:31:53] [PUSH_TRACE] 👁️ Received message id=28835, text="As you are not coming back to ..." [11:31:53] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:31:53] [PUSH_UI] Message 28835 already in memory - skipping insert [11:31:53] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:31:53] [PUSH] Silent push received [11:31:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:53 +0000, appState=0, message_id=28835, type=nil [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[28835] [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:53 +0000 [11:31:53] [PUSH_TRACE] ⬇️ Processing embedded message_id=28835 [11:31:53] [PUSH_EMBED] 📩 Received embedded message: id=28835, type=0, sender=Laurent [11:31:53] [PUSH_TRACE] ⬇️ Message details: text="As you are not coming back to app, seems it works ...", datesent=2026-04-23 08:31:52 [11:31:53] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:31:53] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_EMBED] ✅ Saved message 28835 to local DB (sync) [11:31:53] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28835 [11:31:53] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28835 [11:31:53] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28835 [11:31:53] [PUSH_TRACE] 📦 Cache state: valid=true, count=1, IDs=[28835] [11:31:53] [PUSH_TRACE] 📦 ⚠️ Message 28835 already in cache, skipping insert [11:31:53] [PUSH_TRACE] 📦 EXITING cache update queue for message 28835 [11:31:53] [PUSH_EMBED] Fetching evolution data for message 28835 in background [11:31:53] [PUSH_EMBED] ✅ Fully processed message 28835 [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28835 [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28835], handled=true [11:31:53] [PUSH] Embedded message handled instantly from silent push [11:31:53] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:31:53] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28835 [11:31:53] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:31:53] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:31:53] [PUSH_TRACE] 👁️ Received message id=28835, text="As you are not coming back to ..." [11:31:53] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:31:53] [PUSH_UI] Message 28835 already in memory - skipping insert [11:31:53] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:53] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:31:52"; "file_name" = ""; "is_encrypted" = 0; message = "As you are not coming back to app, seems it works !"; "message_id" = 28835; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28834; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:31:52, AnyHashable("message_id"): 28835, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): As you are not coming back to app, seems it works !, AnyHashable("sender_name"): Laurent] [11:31:53] [PUSH_EMBED_VC] Message 28835 already in memory - skipping [11:31:53] [PUSH] ⚡ Embedded message handled directly in ViewController [11:31:53] [PUSH] Parsed message_id: 28835 [11:31:53] [PUSH] Parsed operation_type: 0 [11:31:53] [PUSH] Taking direct action: opType=0, messageId=28835 [11:31:53] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28835 [11:31:53] [PUSH] ⚡ Message 28835 already in memory - skipping duplicate notification entirely [11:31:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:31:53] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:31:53] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:31:53] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:31:53] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[28835] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:31:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:53] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28832, AnyHashable("aps"): { "content-available" = 1; }] [11:31:53] [PUSH] Parsed message_id: 28832 [11:31:53] [PUSH] Parsed operation_type: 3 [11:31:53] [PUSH] Taking direct action: opType=3, messageId=28832 [11:31:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28832 [11:31:53] [INCREMENTAL_SYNC] ✅ No new messages [11:31:53] [FAST_REFRESH] Incremental sync complete - 51 messages [11:31:53] [PUSH_EMBED] Got evolution data for message 28835, saving to local DB [11:31:53] [PUSH_EMBED] Saved evolution data for message 28835 [11:31:53] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:31:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28835, 28834, 28833, 28832, 28831] [11:31:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:31:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:31:53] [SCROLL] wasNearBottom=true, threshold=447, offset=3770, contentH=4217, boundsH=447, forceScroll=true [11:31:53] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:31:53] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:31:53] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3770, currentOffset=3770 [11:31:53] [SCROLL] Scrolling to 3770, animated=false [11:31:53] [PUSH] Silent push received [11:31:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:53 +0000, appState=0, message_id=nil, type=nil [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:53 +0000 [11:31:53] [PUSH_EMBED] No embedded message_data in notification [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826], handled=false [11:31:53] [PUSH] No embedded data, pre-loading messages from server [11:31:53] [PUSH_PRELOAD] Fetching messages for instant display cache [11:31:53] [PUSH_EMBED] Got evolution data for message 28835, saving to local DB [11:31:53] [PUSH_EMBED] Saved evolution data for message 28835 [11:31:53] [CLIENT_SIG] Event received: type=3 messageId=28833 [11:31:53] [WS_EVENT] Received event: type=3, messageId=28833 [11:31:53] [WS_EVENT] Read receipt for message 28833 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:53] [CLIENT_SIG] Event received: type=3 messageId=28834 [11:31:53] [WS_EVENT] Received event: type=3, messageId=28834 [11:31:53] [WS_EVENT] Read receipt for message 28834 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:53] [PUSH] Silent push received [11:31:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:53 +0000, appState=0, message_id=nil, type=nil [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:53 +0000 [11:31:53] [PUSH_EMBED] No embedded message_data in notification [11:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:31:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826], handled=false [11:31:53] [PUSH] No embedded data, pre-loading messages from server [11:31:53] [PUSH_PRELOAD] Fetching messages for instant display cache [11:31:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:31:53] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:31:53] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:31:53] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:31:53] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:31:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:53] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28833, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [11:31:53] [PUSH] Parsed message_id: 28833 [11:31:53] [PUSH] Parsed operation_type: 3 [11:31:53] [PUSH] Taking direct action: opType=3, messageId=28833 [11:31:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28833 [11:31:53] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:31:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:31:53] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:31:53] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:31:53] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:31:53] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:31:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:31:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:53] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28834, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [11:31:53] [PUSH] Parsed message_id: 28834 [11:31:53] [PUSH] Parsed operation_type: 3 [11:31:53] [PUSH] Taking direct action: opType=3, messageId=28834 [11:31:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28834 [11:31:54] [PUSH] Silent push received [11:31:54] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:54 +0000, appState=0, message_id=nil, type=nil [11:31:54] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:54 +0000 [11:31:54] [PUSH_EMBED] No embedded message_data in notification [11:31:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:31:54] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826], handled=false [11:31:54] [PUSH] No embedded data, pre-loading messages from server [11:31:54] [PUSH_PRELOAD] Fetching messages for instant display cache [11:31:54] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:31:54] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:31:54] [CLIENT_SIG] Event received: type=3 messageId=28835 [11:31:54] [WS_EVENT] Received event: type=3, messageId=28835 [11:31:54] [WS_EVENT] Read receipt for message 28835 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:31:54] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:31:54] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:31:54] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:31:54] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:31:54] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:31:54] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:31:54] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:54] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:54] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:31:54] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:54] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:31:54] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:31:54] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:31:54] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:31:54] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28835 [11:31:54] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28835, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [11:31:54] [PUSH] Parsed message_id: 28835 [11:31:54] [PUSH] Parsed operation_type: 3 [11:31:54] [PUSH] Taking direct action: opType=3, messageId=28835 [11:31:54] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28835 [11:31:56] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=61 [11:31:56] [SCROLL_END_DECEL] messagesTable offsetY=3824, insetTop=0, pendingVelocityY=0.0 [11:31:57] [SERVER] Polling - attempting to reconnect... [11:31:57] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:31:57] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:31:58] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=0 [11:32:01] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:32:01] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [11:32:01] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=52 [11:32:01] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [11:32:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-1, 28835, 28834, 28833, 28832] [11:32:01] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [11:32:01] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:01] [RELOAD_TAB] 📊 Building chatRows from 52 messages [11:32:01] [SCROLL] wasNearBottom=true, threshold=447, offset=3770, contentH=4217, boundsH=447, forceScroll=false [11:32:01] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [11:32:01] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [11:32:01] [SCROLL] 💓 alive, visible=46...53, rows=54, estHeight=0.0, heightCalls=117 [11:32:01] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:32:01] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:32:01] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3847, currentOffset=3847 [11:32:01] [SCROLL] Scrolling to 3847, animated=true [11:32:02] [SERVER] Polling - attempting to reconnect... [11:32:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:02] [CLIENT_SIG] Event received: type=0 messageId=28836 [11:32:02] [WS_EVENT] Received event: type=0, messageId=28836 [11:32:02] [WS_EVENT] 📨 New message notification (msgId=28836) - triggering incremental refresh, currentMsgCount=52 [11:32:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [11:32:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28835 [11:32:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [11:32:02] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28836,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:02"} [11:32:02] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "message_id": 28836, "datesent_utc": 2026-04-23 08:32:02, "file_name": , "ok": 1, "message_type": 0] [11:32:02] [DB_UPGRADE] Upgrading message ID: -1 → 28836, preserveOriginalDate=false [11:32:02] [DB_UPGRADE] ✅ Upgraded -1 → 28836 with send_status=0, 1 row(s) affected [11:32:02] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28836 [11:32:02] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28836 [11:32:02] ReloadData 9 [11:32:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:32:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28836] [11:32:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:32:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [11:32:02] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [11:32:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [11:32:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28836, 28835, 28834, 28833, 28832] [11:32:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [11:32:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:02] [RELOAD_TAB] 📊 Building chatRows from 52 messages [11:32:02] [SCROLL] wasNearBottom=true, threshold=447, offset=3847, contentH=4294, boundsH=447, forceScroll=true [11:32:02] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [11:32:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [11:32:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3847, currentOffset=3847 [11:32:02] [SCROLL] Scrolling to 3847, animated=false [11:32:03] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:32:05] [PUSH] Silent push received [11:32:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:05 +0000, appState=0, message_id=nil, type=nil [11:32:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:32:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:05 +0000 [11:32:05] [PUSH_EMBED] No embedded message_data in notification [11:32:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:32:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826], handled=false [11:32:05] [PUSH] No embedded data, pre-loading messages from server [11:32:05] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:05] [CLIENT_SIG] Event received: type=3 messageId=28836 [11:32:05] [WS_EVENT] Received event: type=3, messageId=28836 [11:32:05] [WS_EVENT] Read receipt for message 28836 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:32:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:32:05] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:32:05] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:32:05] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:32:05] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:32:05] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:32:05] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:05] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [11:32:05] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28745] [11:32:05] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28745] [11:32:05] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:05] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [11:32:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:32:05] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:05] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:32:05] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28836 [11:32:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28836] [11:32:05] [PUSH] Parsed message_id: 28836 [11:32:05] [PUSH] Parsed operation_type: 3 [11:32:05] [PUSH] Taking direct action: opType=3, messageId=28836 [11:32:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28836 [11:32:07] [SERVER] Polling - attempting to reconnect... [11:32:07] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:07] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:07] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:32:07] [CLIENT_SIG] Client disconnected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:32:10] [CLIENT_SIG] Event received: type=0 messageId=28837 [11:32:10] [WS_EVENT] Received event: type=0, messageId=28837 [11:32:10] [WS_EVENT] 📨 New message notification (msgId=28837) - triggering incremental refresh, currentMsgCount=52 [11:32:10] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [11:32:10] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28836, maxMemoryId=28836 [11:32:10] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28836 [11:32:10] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:32:10] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28837] [11:32:10] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:10] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28837 [11:32:10] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 53, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:10] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:32:10] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [11:32:10] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [11:32:11] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [11:32:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28837, 28836, 28835, 28834, 28833] [11:32:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [11:32:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [RELOAD_TAB] 📊 Building chatRows from 53 messages [11:32:11] [SCROLL] wasNearBottom=true, threshold=447, offset=3847, contentH=4294, boundsH=447, forceScroll=false [11:32:11] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [11:32:11] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28836 → 28837 [11:32:11] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:32:11] [SCROLL] 💓 alive, visible=47...54, rows=55, estHeight=0.0, heightCalls=119 [11:32:11] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3924, currentOffset=3924 [11:32:11] [SCROLL] Scrolling to 3924, animated=true [11:32:11] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:32:11] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:32:11] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28837 [11:32:11] [PUSH] handlePollEventsNotification userInfo: [:] [11:32:11] [PUSH] No message_id in userInfo [11:32:11] [PUSH] No operation_type in userInfo [11:32:11] [FAST_REFRESH] Evolution disabled - performing incremental sync [11:32:11] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:11] [PUSH_TRACE] 📬 POLL: memory state: count=53, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [FAST_REFRESH] Already have 53 messages in memory [11:32:11] [FAST_REFRESH] maxMemoryId=28837, maxLocalId=28837 [11:32:11] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [11:32:11] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [11:32:11] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [11:32:11] [READBY_OPT] No message IDs to fetch - skipping server call [11:32:11] [GAP_FIX] Incremental sync will use since_id=28837 (background max=0, current DB max=28837) [11:32:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [11:32:11] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28837, maxMemoryId=28837 [11:32:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28837 [11:32:11] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [11:32:11] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [11:32:11] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:32:11] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:32:11 +0000 - type: unknown, operation_type: 0, message_id: 28837, session_id: ILUIWU, state: 0 [11:32:11] [PUSH_DEBUG] Full userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:10, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:10"; "file_name" = ""; "is_encrypted" = 0; message = Noooo; "message_id" = 28837; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28836; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("message_id"): 28837, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Noooo, AnyHashable("sender_name"): Laurent] [11:32:11] [PUSH] App active - suppressing notification UI, posting internal event [11:32:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:11 +0000 [11:32:11] [PUSH_TRACE] ⬇️ Processing embedded message_id=28837 [11:32:11] [PUSH_EMBED] 📩 Received embedded message: id=28837, type=0, sender=Laurent [11:32:11] [PUSH_TRACE] ⬇️ Message details: text="Noooo...", datesent=2026-04-23 08:32:10 [11:32:11] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:11] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_EMBED] ✅ Saved message 28837 to local DB (sync) [11:32:11] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28837 [11:32:11] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28837 [11:32:11] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [11:32:11] [PUSH_EMBED] Inserted message 28837 into existing cache (now 52 messages) [11:32:11] [PUSH_TRACE] 📦 ✅ Inserted message 28837, cache now has IDs: [28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [PUSH_TRACE] 📦 EXITING cache update queue for message 28837 [11:32:11] [PUSH_EMBED] Fetching evolution data for message 28837 in background [11:32:11] [PUSH_EMBED] ✅ Fully processed message 28837 [11:32:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28837 [11:32:11] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:32:11] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28837 [11:32:11] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:10, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:10"; "file_name" = ""; "is_encrypted" = 0; message = Noooo; "message_id" = 28837; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28836; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("message_id"): 28837, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Noooo, AnyHashable("sender_name"): Laurent] [11:32:11] [PUSH_EMBED_VC] Message 28837 already in memory - skipping [11:32:11] [PUSH] ⚡ Embedded message handled directly in ViewController [11:32:11] [PUSH] Parsed message_id: 28837 [11:32:11] [PUSH] Parsed operation_type: 0 [11:32:11] [PUSH] Taking direct action: opType=0, messageId=28837 [11:32:11] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28837 [11:32:11] [PUSH] ⚡ Message 28837 already in memory - skipping duplicate notification entirely [11:32:11] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:32:11] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:32:11] [PUSH_TRACE] 👁️ Received message id=28837, text="Noooo..." [11:32:11] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:32:11] [PUSH_UI] Message 28837 already in memory - skipping insert [11:32:11] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:32:11] [PUSH] Silent push received [11:32:11] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:11 +0000, appState=0, message_id=28837, type=nil [11:32:11] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:11 +0000 [11:32:11] [PUSH_TRACE] ⬇️ Processing embedded message_id=28837 [11:32:11] [PUSH_EMBED] 📩 Received embedded message: id=28837, type=0, sender=Laurent [11:32:11] [PUSH_TRACE] ⬇️ Message details: text="Noooo...", datesent=2026-04-23 08:32:10 [11:32:11] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:11] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_EMBED] ✅ Saved message 28837 to local DB (sync) [11:32:11] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28837 [11:32:11] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28837 [11:32:11] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28837 [11:32:11] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [PUSH_TRACE] 📦 ⚠️ Message 28837 already in cache, skipping insert [11:32:11] [PUSH_TRACE] 📦 EXITING cache update queue for message 28837 [11:32:11] [PUSH_EMBED] Fetching evolution data for message 28837 in background [11:32:11] [PUSH_EMBED] ✅ Fully processed message 28837 [11:32:11] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28837 [11:32:11] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828], handled=true [11:32:11] [PUSH] Embedded message handled instantly from silent push [11:32:11] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:32:11] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28837 [11:32:11] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:32:11] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:32:11] [PUSH_TRACE] 👁️ Received message id=28837, text="Noooo..." [11:32:11] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:32:11] [PUSH_UI] Message 28837 already in memory - skipping insert [11:32:11] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:32:11] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:32:11] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28837 [11:32:11] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:10"; "file_name" = ""; "is_encrypted" = 0; message = Noooo; "message_id" = 28837; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28836; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:32:10, AnyHashable("message_id"): 28837, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Noooo, AnyHashable("sender_name"): Laurent] [11:32:11] [PUSH_EMBED_VC] Message 28837 already in memory - skipping [11:32:11] [PUSH] ⚡ Embedded message handled directly in ViewController [11:32:11] [PUSH] Parsed message_id: 28837 [11:32:11] [PUSH] Parsed operation_type: 0 [11:32:11] [PUSH] Taking direct action: opType=0, messageId=28837 [11:32:11] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28837 [11:32:11] [PUSH] ⚡ Message 28837 already in memory - skipping duplicate notification entirely [11:32:11] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:32:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28837, 28836, 28835, 28834, 28833] [11:32:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [11:32:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:11] [RELOAD_TAB] 📊 Building chatRows from 53 messages [11:32:11] [SCROLL] wasNearBottom=true, threshold=447, offset=3924, contentH=4371, boundsH=447, forceScroll=false [11:32:11] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [11:32:11] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:32:11] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3924, currentOffset=3924 [11:32:11] [SCROLL] Scrolling to 3924, animated=true [11:32:11] [PUSH_EMBED] Got evolution data for message 28837, saving to local DB [11:32:11] [PUSH_EMBED] Saved evolution data for message 28837 [11:32:11] [INCREMENTAL_SYNC] ✅ No new messages [11:32:11] [FAST_REFRESH] Incremental sync complete - 53 messages [11:32:11] [PUSH_EMBED] Got evolution data for message 28837, saving to local DB [11:32:11] [PUSH_EMBED] Saved evolution data for message 28837 [11:32:11] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [11:32:12] [CLIENT_SIG] Client connected: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) on session 'ILUIWU' (my session: 'ILUIWU') [11:32:12] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=137ms [11:32:12] [SERVER] Polling - attempting to reconnect... [11:32:12] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:12] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:12] [PUSH] Silent push received [11:32:12] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:12 +0000, appState=0, message_id=nil, type=nil [11:32:12] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:12 +0000 [11:32:12] [PUSH_EMBED] No embedded message_data in notification [11:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:32:12] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828], handled=false [11:32:12] [PUSH] No embedded data, pre-loading messages from server [11:32:12] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:32:12] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:32:12] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:32:12] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:32:12] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:32:12] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:32:12] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:12] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:12] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28746, 28745] [11:32:12] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28746, 28745] [11:32:12] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:12] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [11:32:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:32:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=0 vccs=0 [11:32:12] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28837 [11:32:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28837, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [11:32:12] [PUSH] Parsed message_id: 28837 [11:32:12] [PUSH] Parsed operation_type: 3 [11:32:12] [PUSH] Taking direct action: opType=3, messageId=28837 [11:32:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28837 [11:32:13] [CLIENT_SIG] Event received: type=3 messageId=28837 [11:32:13] [WS_EVENT] Received event: type=3, messageId=28837 [11:32:13] [WS_EVENT] Read receipt for message 28837 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:32:17] [SERVER] Polling - attempting to reconnect... [11:32:17] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:17] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:21] [CLIENT_SIG] Typing stop from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:32:21] [CLIENT_SIG] Event received: type=0 messageId=28838 [11:32:21] [WS_EVENT] Received event: type=0, messageId=28838 [11:32:21] [WS_EVENT] 📨 New message notification (msgId=28838) - triggering incremental refresh, currentMsgCount=53 [11:32:21] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [11:32:21] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28837, maxMemoryId=28837 [11:32:21] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28837 [11:32:21] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:32:21] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28838] [11:32:21] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:21] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28838 [11:32:21] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 54, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:21] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:32:21] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [11:32:21] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [11:32:22] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=119 [11:32:22] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28838, 28837, 28836, 28835, 28834] [11:32:22] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [11:32:22] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [RELOAD_TAB] 📊 Building chatRows from 54 messages [11:32:22] [SCROLL] wasNearBottom=true, threshold=447, offset=3924, contentH=4371, boundsH=447, forceScroll=false [11:32:22] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [11:32:22] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28837 → 28838 [11:32:22] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [11:32:22] [SCROLL] 💓 alive, visible=48...55, rows=56, estHeight=0.0, heightCalls=121 [11:32:22] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3997, currentOffset=3997 [11:32:22] [SCROLL] Scrolling to 3997, animated=true [11:32:22] [SERVER] Polling - attempting to reconnect... [11:32:22] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:22] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:22] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:32:22] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [11:32:22] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28838 [11:32:22] [PUSH] handlePollEventsNotification userInfo: [:] [11:32:22] [PUSH] No message_id in userInfo [11:32:22] [PUSH] No operation_type in userInfo [11:32:22] [FAST_REFRESH] Evolution disabled - performing incremental sync [11:32:22] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:22] [PUSH_TRACE] 📬 POLL: memory state: count=54, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [FAST_REFRESH] Already have 54 messages in memory [11:32:22] [FAST_REFRESH] maxMemoryId=28838, maxLocalId=28838 [11:32:22] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [11:32:22] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [11:32:22] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [11:32:22] [READBY_OPT] No message IDs to fetch - skipping server call [11:32:22] [GAP_FIX] Incremental sync will use since_id=28838 (background max=0, current DB max=28838) [11:32:22] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [11:32:22] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28838, maxMemoryId=28838 [11:32:22] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28838 [11:32:22] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [11:32:22] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [11:32:22] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:32:22] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:32:22 +0000 - type: unknown, operation_type: 0, message_id: 28838, session_id: ILUIWU, state: 0 [11:32:22] [PUSH_DEBUG] Full userInfo: [AnyHashable("message"): Activate and disable notification please in app, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("sender_name"): Laurent, AnyHashable("datesent"): 2026-04-23 08:32:21, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:21"; "file_name" = ""; "is_encrypted" = 0; message = "Activate and disable notification please in app"; "message_id" = 28838; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28837; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28838] [11:32:22] [PUSH] App active - suppressing notification UI, posting internal event [11:32:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:22 +0000 [11:32:22] [PUSH_TRACE] ⬇️ Processing embedded message_id=28838 [11:32:22] [PUSH_EMBED] 📩 Received embedded message: id=28838, type=0, sender=Laurent [11:32:22] [PUSH_TRACE] ⬇️ Message details: text="Activate and disable notification please in app...", datesent=2026-04-23 08:32:21 [11:32:22] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:22] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_EMBED] ✅ Saved message 28838 to local DB (sync) [11:32:22] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28838 [11:32:22] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28838 [11:32:22] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [11:32:22] [PUSH_EMBED] Inserted message 28838 into existing cache (now 53 messages) [11:32:22] [PUSH_TRACE] 📦 ✅ Inserted message 28838, cache now has IDs: [28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [PUSH_TRACE] 📦 EXITING cache update queue for message 28838 [11:32:22] [PUSH_EMBED] Fetching evolution data for message 28838 in background [11:32:22] [PUSH_EMBED] ✅ Fully processed message 28838 [11:32:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28838 [11:32:22] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [11:32:22] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28838 [11:32:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message"): Activate and disable notification please in app, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("sender_name"): Laurent, AnyHashable("datesent"): 2026-04-23 08:32:21, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:21"; "file_name" = ""; "is_encrypted" = 0; message = "Activate and disable notification please in app"; "message_id" = 28838; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28837; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28838] [11:32:22] [PUSH_EMBED_VC] Message 28838 already in memory - skipping [11:32:22] [PUSH] ⚡ Embedded message handled directly in ViewController [11:32:22] [PUSH] Parsed message_id: 28838 [11:32:22] [PUSH] Parsed operation_type: 0 [11:32:22] [PUSH] Taking direct action: opType=0, messageId=28838 [11:32:22] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28838 [11:32:22] [PUSH] ⚡ Message 28838 already in memory - skipping duplicate notification entirely [11:32:22] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:32:22] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:32:22] [PUSH_TRACE] 👁️ Received message id=28838, text="Activate and disable notificat..." [11:32:22] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:32:22] [PUSH_UI] Message 28838 already in memory - skipping insert [11:32:22] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:32:22] [PUSH] Silent push received [11:32:22] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:22 +0000, appState=0, message_id=28838, type=nil [11:32:22] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:22 +0000 [11:32:22] [PUSH_TRACE] ⬇️ Processing embedded message_id=28838 [11:32:22] [PUSH_EMBED] 📩 Received embedded message: id=28838, type=0, sender=Laurent [11:32:22] [PUSH_TRACE] ⬇️ Message details: text="Activate and disable notification please in app...", datesent=2026-04-23 08:32:21 [11:32:22] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:22] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_EMBED] ✅ Saved message 28838 to local DB (sync) [11:32:22] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28838 [11:32:22] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28838 [11:32:22] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28838 [11:32:22] [PUSH_TRACE] 📦 Cache state: valid=true, count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [PUSH_TRACE] 📦 ⚠️ Message 28838 already in cache, skipping insert [11:32:22] [PUSH_TRACE] 📦 EXITING cache update queue for message 28838 [11:32:22] [PUSH_EMBED] Fetching evolution data for message 28838 in background [11:32:22] [PUSH_EMBED] ✅ Fully processed message 28838 [11:32:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28838 [11:32:22] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829], handled=true [11:32:22] [PUSH] Embedded message handled instantly from silent push [11:32:22] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:32:22] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28838 [11:32:22] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [11:32:22] [PUSH_TRACE] 👁️ handlePushMessageReceived START [11:32:22] [PUSH_TRACE] 👁️ Received message id=28838, text="Activate and disable notificat..." [11:32:22] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, type=0 [11:32:22] [PUSH_UI] Message 28838 already in memory - skipping insert [11:32:22] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [11:32:22] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [11:32:22] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28838 [11:32:22] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message"): Activate and disable notification please in app, AnyHashable("sender_id"): 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("sender_name"): Laurent, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:21, AnyHashable("timer"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:21"; "file_name" = ""; "is_encrypted" = 0; message = "Activate and disable notification please in app"; "message_id" = 28838; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28837; "sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "sender_name" = Laurent; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28838] [11:32:22] [PUSH_EMBED_VC] Message 28838 already in memory - skipping [11:32:22] [PUSH] ⚡ Embedded message handled directly in ViewController [11:32:22] [PUSH] Parsed message_id: 28838 [11:32:22] [PUSH] Parsed operation_type: 0 [11:32:22] [PUSH] Taking direct action: opType=0, messageId=28838 [11:32:22] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28838 [11:32:22] [PUSH] ⚡ Message 28838 already in memory - skipping duplicate notification entirely [11:32:22] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:32:22] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28838, 28837, 28836, 28835, 28834] [11:32:22] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [11:32:22] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:22] [RELOAD_TAB] 📊 Building chatRows from 54 messages [11:32:22] [SCROLL] wasNearBottom=true, threshold=447, offset=3997, contentH=4444, boundsH=447, forceScroll=true [11:32:22] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [11:32:22] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:32:22] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3997, currentOffset=3997 [11:32:22] [SCROLL] Scrolling to 3997, animated=false [11:32:23] [PUSH_EMBED] Got evolution data for message 28838, saving to local DB [11:32:23] [PUSH_EMBED] Saved evolution data for message 28838 [11:32:23] [INCREMENTAL_SYNC] ✅ No new messages [11:32:23] [FAST_REFRESH] Incremental sync complete - 54 messages [11:32:23] [PUSH_EMBED] Got evolution data for message 28838, saving to local DB [11:32:23] [PUSH_EMBED] Saved evolution data for message 28838 [11:32:24] [PUSH] Silent push received [11:32:24] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:24 +0000, appState=0, message_id=nil, type=nil [11:32:24] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:24 +0000 [11:32:24] [PUSH_EMBED] No embedded message_data in notification [11:32:24] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:32:24] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829], handled=false [11:32:24] [PUSH] No embedded data, pre-loading messages from server [11:32:24] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:24] [CLIENT_SIG] Event received: type=3 messageId=28838 [11:32:24] [WS_EVENT] Received event: type=3, messageId=28838 [11:32:24] [WS_EVENT] Read receipt for message 28838 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:32:24] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:32:24] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:32:24] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:32:24] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:32:24] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:32:24] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:32:24] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:24] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:24] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28747, 28746, 28745] [11:32:24] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28747, 28746, 28745] [11:32:24] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:24] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [11:32:24] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:32:24] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [11:32:24] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=12 vccs=0 [11:32:24] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28838 [11:32:24] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28838, AnyHashable("operation_type"): 3] [11:32:24] [PUSH] Parsed message_id: 28838 [11:32:24] [PUSH] Parsed operation_type: 3 [11:32:24] [PUSH] Taking direct action: opType=3, messageId=28838 [11:32:24] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28838 [11:32:27] [SERVER] Polling - attempting to reconnect... [11:32:27] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:27] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:31] [CAM_CONN] 💓 PING #2 sent — conn=iosILUIWU query=true secsSinceLastPong=19 [11:32:32] [SERVER] Polling - attempting to reconnect... [11:32:32] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:32] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:34] [CLIENT_SIG] Typing start from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:32:36] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:32:36] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=54, isReloading=false [11:32:36] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=55 [11:32:36] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [11:32:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[-2, 28838, 28837, 28836, 28835] [11:32:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [11:32:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [11:32:36] [RELOAD_TAB] 📊 Building chatRows from 55 messages [11:32:36] [SCROLL] wasNearBottom=true, threshold=447, offset=3997, contentH=4444, boundsH=447, forceScroll=false [11:32:36] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [11:32:36] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [11:32:36] [SCROLL] 💓 alive, visible=49...56, rows=57, estHeight=0.0, heightCalls=123 [11:32:36] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:32:36] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:32:36] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4074, currentOffset=4074 [11:32:36] [SCROLL] Scrolling to 4074, animated=true [11:32:36] [CLIENT_SIG] Event received: type=0 messageId=28839 [11:32:36] [WS_EVENT] Received event: type=0, messageId=28839 [11:32:36] [WS_EVENT] 📨 New message notification (msgId=28839) - triggering incremental refresh, currentMsgCount=55 [11:32:36] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=55 [11:32:36] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28838, maxMemoryId=28838 [11:32:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28838 [11:32:36] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28839,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:36"} [11:32:36] [CHAT] receive_message.php JSON: ["message_id": 28839, "session_id": ILUIWU, "message_type": 0, "ok": 1, "file_name": , "datesent_utc": 2026-04-23 08:32:36] [11:32:36] [DB_UPGRADE] Upgrading message ID: -2 → 28839, preserveOriginalDate=false [11:32:36] [DB_UPGRADE] ✅ Upgraded -2 → 28839 with send_status=0, 1 row(s) affected [11:32:36] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28839 [11:32:36] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28839 [11:32:36] ReloadData 9 [11:32:37] [SERVER] Polling - attempting to reconnect... [11:32:37] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:37] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:37] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:32:37] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28839] [11:32:37] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 55 msgs, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [11:32:37] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 55, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [11:32:37] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:32:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=55 [11:32:37] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [11:32:37] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [11:32:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[28839, 28838, 28837, 28836, 28835] [11:32:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [11:32:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [11:32:37] [RELOAD_TAB] 📊 Building chatRows from 55 messages [11:32:37] [SCROLL] wasNearBottom=true, threshold=447, offset=4074, contentH=4521, boundsH=447, forceScroll=true [11:32:37] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [11:32:37] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [11:32:37] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4074, currentOffset=4074 [11:32:37] [SCROLL] Scrolling to 4074, animated=false [11:32:38] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 0.0s) [11:32:46] [AUTH] Starting PIN authentication [11:32:46] [PUSH] Silent push received [11:32:46] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:46 +0000, appState=2, message_id=28840, type=nil [11:32:46] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:32:46] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:46 +0000 [11:32:46] [PUSH_TRACE] ⬇️ Processing embedded message_id=28840 [11:32:46] [PUSH_EMBED] 📩 Received embedded message: id=28840, type=0, sender=Laurent [11:32:46] [PUSH_TRACE] ⬇️ Message details: text="And kill and restart app also...", datesent=2026-04-23 08:32:45 [11:32:46] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:46] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28840 [11:32:46] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28840 [11:32:46] [CLEANUP] No old timer messages to delete [11:32:46] [PUSH_EMBED] ✅ Saved message 28840 to local DB (sync) [11:32:46] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28840 [11:32:46] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28840 [11:32:46] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28840 [11:32:46] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [11:32:46] [PUSH_EMBED] Created new cache with embedded message 28840 [11:32:46] [PUSH_TRACE] 📦 ✅ Created new cache with message 28840 [11:32:46] [PUSH_TRACE] 📦 EXITING cache update queue for message 28840 [11:32:46] [PUSH_EMBED] Fetching evolution data for message 28840 in background [11:32:46] [PUSH_EMBED] ✅ Fully processed message 28840 [11:32:46] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28840 [11:32:46] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28840], handled=true [11:32:46] [PUSH] Embedded message handled instantly from silent push [11:32:46] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:32:46] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28840 [11:32:46] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:32:46] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:32:47] [PRELOAD] Cache already valid (1 messages), skipping pre-load [11:32:47] [PUSH_EMBED] Got evolution data for message 28840, saving to local DB [11:32:47] [PUSH_EMBED] Saved evolution data for message 28840 [11:32:47] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":0,"removed_from_other_channels":0} [11:32:47] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:32:47] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":0,"removed_from_other_channels":0} [11:32:47] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:32:47] [USER] ✅ User registered successfully [11:32:47] [PUSH] User registration after token update: success [11:32:47] [USER] ✅ User registered successfully [11:32:47] [PUSH] User registration after token update: success [11:32:48] [PUSH] Notification tapped - session_id: ILUIWU [11:32:48] [PUSH] Max message_id before tap: 28840 [11:32:48] [PUSH] Stored pending session: ILUIWU [11:32:48] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:48 +0000 [11:32:48] [PUSH_TRACE] ⬇️ Processing embedded message_id=28840 [11:32:48] [PUSH_EMBED] 📩 Received embedded message: id=28840, type=0, sender=Laurent [11:32:48] [PUSH_TRACE] ⬇️ Message details: text="And kill and restart app also...", datesent=2026-04-23 08:32:45 [11:32:48] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:32:48] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28840 [11:32:48] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28840 [11:32:48] [PUSH_EMBED] ✅ Saved message 28840 to local DB (sync) [11:32:48] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28840 [11:32:48] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28840 [11:32:48] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28840 [11:32:48] [PUSH_TRACE] 📦 Cache state: valid=true, count=1, IDs=[28840] [11:32:48] [PUSH_TRACE] 📦 ⚠️ Message 28840 already in cache, skipping insert [11:32:48] [PUSH_TRACE] 📦 EXITING cache update queue for message 28840 [11:32:48] [PUSH_EMBED] Fetching evolution data for message 28840 in background [11:32:48] [PUSH_EMBED] ✅ Fully processed message 28840 [11:32:48] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28840 [11:32:48] [PUSH] Embedded message handled instantly on tap [11:32:48] [PUSH] Fetching server messages since_id=28840 to catch coalesced notifications on tap [11:32:48] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28840 to catch coalesced notifications [11:32:48] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:32:48] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:48] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:32:48] [PUSH_EMBED] Got evolution data for message 28840, saving to local DB [11:32:48] [PUSH_EMBED] Saved evolution data for message 28840 [11:32:48] [PUSH_PRELOAD] No messages or parse error [11:32:48] [PUSH] Server fetch on tap completed (success=false) [11:32:48] [CLIENT_SIG] WebSocket opened [11:32:48] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:32:48] [CLIENT_SIG] Connected! clientId=e3J9UVUXIcM-gu4b [11:32:48] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:32:48] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:32:48] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:32:49] [PIN_AUTH] Correct PIN [11:32:49] [SECURITY] Restored real session: ILUIWU [11:32:49] [SECURITY] Restored real session: ILUIWU [11:32:49] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:32:49] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [11:32:49] [SECURITY] Saved real session: ILUIWU [11:32:49] [SCENE] Launched directly to chat view with sessionId: ILUIWU [11:32:49] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:32:49] [UPLOAD_QUEUE] ✅ Database integrity check passed [11:32:49] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [11:32:49] Documents Directory: /var/mobile/Containers/Data/Application/C54170A7-4208-45E1-972B-D75BEF83B039/Documents [11:32:49] [UPLOAD_QUEUE] Found 0 pending uploads to resume [11:32:49] [CAPTURE_HOST] live-feed moved hosted view to plain container [11:32:50] [THEME] Applying current theme [11:32:50] [CHAT] Applied day theme (mode: day) [11:32:50] [SECURITY] Saved real session: ILUIWU [11:32:50] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [11:32:50] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:32:50] [NETWORK] Network monitor started [11:32:50] [NETWORK] Status changed: connected [11:32:50] Did transition [11:32:50] [CHUNK] Pre-cache has only 1 messages - supplementing from local DB [11:32:50] [CHUNK] After merge: 50 messages (added 49 from local DB) [11:32:50] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [11:32:50] [VIEWER] Screen lock enabled - normal idle behavior [11:32:50] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [11:32:50] [VCC] ========== VideoConnectionClass INIT ========== [11:32:50] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [11:32:50] [DATA AUDIO] ========== setupWebRTC() START ========== [11:32:50] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [11:32:50] [DATA AUDIO] Creating encoder/decoder factories... [11:32:50] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [11:32:50] [CODEC] Viewer selected encoder: AV1 (best quality) [11:32:50] [DATA AUDIO] Creating RTCPeerConnectionFactory... [11:32:50] [DATA AUDIO] ✅ Factory created [11:32:50] [DATA AUDIO] RTCAudioSession locked [11:32:50] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [11:32:50] [DATA AUDIO] RTCAudioSession unlocked [11:32:50] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [11:32: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"] [11:32:50] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [11:32:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:32:50] [QUERY] ✅ tempQueryConnection created for iosILUIWU [11:32:50] [VIEWER_INIT] Already have 50 messages - just filtering for tab [11:32:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:32:50] [EVENT_POLL] Event polling disabled - using WebSocket events instead [11:32:50] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [11:32:50] Did transition [11:32:50] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [11:32:50] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:32:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:32:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:32:50] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [11:32:50] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:32:50] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [11:32:50] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [11:32:50] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [11:32:50] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [11:32:50] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [11:32:50] [USER] ✅ User registered successfully [11:32:50] [USER] User registration successful [11:32:50] [GALLERY_DB] ✅ Loaded 1256 media messages [11:32:50] [MIGRATION] No messages need sender_name backfill [11:32:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:32:50] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28840, maxMemoryId=28840 [11:32:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28840 [11:32:50] [INCREMENTAL_SYNC] ✅ No new messages [11:32:50] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [11:32:50] [GALLERY] First 5 after sort (newest first): [11:32:50] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [11:32:50] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [11:32:50] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [11:32:50] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [11:32:50] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [11:32:50] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [11:32:50] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [11:32:50] [SERVER] Starting reconnect polling (5s interval) [11:32:50] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [11:32:50] [ICONS] Offset applied: -14.6 [11:32:50] [ICONS] New left margin: 11.2, New right margin: 11.3 [11:32:50] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [11:32:50] [READBY_ENRICH] Enriched 3/3 unsettled messages with readBy data [11:32:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:32:50] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:32:50] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:32:50] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [11:32:50] [ICONS] Chat center: (31.2, 87.0) [11:32:50] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [11:32:50] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [11:32:50] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [11:32:50] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [11:32:50] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [11:32:50] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [11:32:50] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [11:32:50] [ICONS] Screen width: 440.0 [11:32:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:32:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28840, 28839, 28838, 28837, 28836] [11:32:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:32:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [11:32:50] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:32:50] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [11:32:50] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:32:50] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [11:32:50] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [11:32:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:32:50] [PURGE] ⚠️ Media cache purge DISABLED for debugging [11:32:50] [UNSENT_RETRY] Checking for unsent messages... [11:32:50] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [11:32:50] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [11:32:50] [UPLOAD_RECOVERY] Session: ILUIWU [11:32:50] [UPLOAD_RECOVERY] ✅ No stuck uploads found [11:32:50] [UPLOAD_RECOVERY] Checking recent media messages on server... [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [11:32:50] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [11:32:50] [PENDING_UPLOAD] Total pending upload messages: 0 [11:32:50] [UNSENT_RETRY] No unsent messages found [11:32:50] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28839 → 28840 [11:32:50] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3491, currentOffset=3491 [11:32:50] [SCROLL] Scrolling to 3491, animated=false [11:32:50] new_session POST ok: token len=157 [11:32:50] HELLO → sent (fetched token, role=query) [11:32:50] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:32:50] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:32:50] [SIG] hello_ok received for query connection - ready to query agents [11:32:50] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:32:50] [SIG] get_agents request sent for sessionId=ILUIWU [11:32:50] [SIG] get_agents request sent for sessionId=iosILUIWU [11:32:50] [SERVER] Stopped reconnect polling [11:32:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=73 [11:32:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28840, 28839, 28838, 28837, 28836] [11:32:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:32:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [11:32:50] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:32:50] [SCROLL] wasNearBottom=true, threshold=758, offset=3491, contentH=4249, boundsH=758, forceScroll=true [11:32:50] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:32:50] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:32:50] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3491, currentOffset=3491 [11:32:50] [SCROLL] Scrolling to 3491, animated=false [11:32:50] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:32:50] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:32:50] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:32:50] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:32:50] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:32:50] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:32:50] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:32:50] [SERVER] Starting reconnect polling (5s interval) [11:32:50] [UPLOAD_RECOVERY] ✅ All media files verified on server [11:32:52] [MUTE] Status sent to server: muted=1, response code=200 [11:32:52] [MUTE] Status sent to server: muted=1, response code=200 [11:32:52] [PUSH] Silent push received [11:32:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:52 +0000, appState=0, message_id=nil, type=nil [11:32:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:32:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:52 +0000 [11:32:52] [PUSH_EMBED] No embedded message_data in notification [11:32:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:32:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:32:52] [PUSH] No embedded data, pre-loading messages from server [11:32:52] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:52] [CLIENT_SIG] Event received: type=3 messageId=28840 [11:32:52] [WS_EVENT] Received event: type=3, messageId=28840 [11:32:52] [WS_EVENT] Read receipt for message 28840 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:32:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:32:52] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:32:52] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:32:52] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:32:52] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:32:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:32:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [11:32:52] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:32:52] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:32:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:32:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [11:32:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:32:52] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28840 [11:32:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28840, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [11:32:52] [PUSH] Parsed message_id: 28840 [11:32:52] [PUSH] Parsed operation_type: 3 [11:32:52] [PUSH] Taking direct action: opType=3, messageId=28840 [11:32:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28840 [11:32:53] [SCROLL] 💓 alive, visible=41...48, rows=52, estHeight=0.0, heightCalls=64 [11:32:53] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [11:32:53] [SCROLL_END_DECEL] messagesTable offsetY=3802, insetTop=0, pendingVelocityY=0.0 [11:32:55] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:32:55] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [11:32:55] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [11:32:55] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=5 [11:32:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28840, 28839, 28838, 28837] [11:32:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:32:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:55] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:32:55] [SCROLL] wasNearBottom=true, threshold=447, offset=3802, contentH=4249, boundsH=447, forceScroll=false [11:32:55] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:32:55] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:32:55] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=114 [11:32:55] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:32:55] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:32:55] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3879, currentOffset=3879 [11:32:55] [SCROLL] Scrolling to 3879, animated=true [11:32:55] [CLIENT_SIG] Event received: type=0 messageId=28841 [11:32:55] [WS_EVENT] Received event: type=0, messageId=28841 [11:32:55] [WS_EVENT] 📨 New message notification (msgId=28841) - triggering incremental refresh, currentMsgCount=51 [11:32:55] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:32:55] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28840, maxMemoryId=28840 [11:32:55] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28840 [11:32:55] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28841,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:55"} [11:32:55] [CHAT] receive_message.php JSON: ["ok": 1, "session_id": ILUIWU, "message_type": 0, "message_id": 28841, "datesent_utc": 2026-04-23 08:32:55, "file_name": ] [11:32:55] [DB_UPGRADE] Upgrading message ID: -1 → 28841, preserveOriginalDate=false [11:32:55] [DB_UPGRADE] ✅ Upgraded -1 → 28841 with send_status=0, 1 row(s) affected [11:32:55] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28841 [11:32:55] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28841 [11:32:55] ReloadData 9 [11:32:55] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:32:55] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28841] [11:32:55] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:55] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:55] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:32:55] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:32:55] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:32:55] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:32:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28841, 28840, 28839, 28838, 28837] [11:32:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:32:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:55] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:32:55] [SCROLL] wasNearBottom=true, threshold=447, offset=3879, contentH=4326, boundsH=447, forceScroll=true [11:32:55] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:32:55] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:32:55] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3879, currentOffset=3879 [11:32:55] [SCROLL] Scrolling to 3879, animated=false [11:32:55] [SERVER] Polling - attempting to reconnect... [11:32:55] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:32:55] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:32:56] [LIFECYCLE] App resigning active - cleared crash flag [11:32:56] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [11:32:56] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [11:32:56] [SECURITY] Saved background timestamp [11:32:56] [LIFECYCLE] App entering background - cleared crash flag [11:32:56] [CLIENT_SIG] Disconnecting [11:32:56] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [11:32:56] [DB] ✅ Chat database flushed (WAL checkpoint) before background [11:32:56] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:56] [LIFECYCLE] Background snapshot: count=51, maxId=28841 [11:32:56] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [11:32:56] [WS] Canceling WebSocket for query connection to iosILUIWU [11:32:56] In cleanupPeer [11:32:56] In cleanupPeer [11:32:56] [LIFECYCLE] WebRTC audio disabled [11:32:56] [LIFECYCLE] AVAudioSession deactivated [11:32:56] [LIFECYCLE] All connections stopped [11:32:56] [CLIENT_SIG] WebSocket closed with code 1001 [11:32:56] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:32: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/} [11:32:56] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:32:56] [SERVER] Stopped reconnect polling [11:32:56] Will request stop of video 0 [11:32:56] Will request stop of video 0 [11:32:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [11:32:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [11:32:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [11:32:56] [WS] Query connection failed - cleaning up all agent connections and views [11:32:56] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [11:32:56] [APP_TERMINATE] ✅ No pending uploads in DB queue [11:32:56] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=false, returning=false, textView= 0.0s) [11:32:58] [AUTH] Starting PIN authentication [11:32:58] [PUSH] Silent push received [11:32:58] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:58 +0000, appState=2, message_id=nil, type=nil [11:32:58] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:32:58] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:58 +0000 [11:32:58] [PUSH_EMBED] No embedded message_data in notification [11:32:58] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:32:58] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:32:58] [PUSH] No embedded data, pre-loading messages from server [11:32:58] [PUSH_PRELOAD] Fetching messages for instant display cache [11:32:58] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:32:58] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f [11:32:58] [CLEANUP] No old timer messages to delete [11:32:58] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=28828)... [11:32:59] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:32:59] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:32:59] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":1,"removed_from_other_channels":0} [11:32:59] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:32:59] [USER] ✅ User registered successfully [11:32:59] [PUSH] User registration after token update: success [11:32:59] [PRELOAD] Fetched 13 messages [11:32:59] [PRELOAD] ✅ Saved 13 messages to local DB [11:32:59] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=13, sessionId=ILUIWU [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:32:59] [PRELOAD] ⚡ Cached 13 messages for instant display (preserved 0 from push) [11:32:59] [USER] ✅ User registered successfully [11:32:59] [PUSH] User registration after token update: success [11:32:59] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:32:59] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:32:59] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:32:59] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:32:59] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [11:32:59] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=13, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:32:59] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:32:59] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:32:59] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:33:13] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:33:13] [PUSH] Silent push received [11:33:13] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:13 +0000, appState=2, message_id=28842, type=nil [11:33:13] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:33:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:13 +0000 [11:33:13] [PUSH_TRACE] ⬇️ Processing embedded message_id=28842 [11:33:13] [PUSH_EMBED] 📩 Received embedded message: id=28842, type=0, sender=Laurent [11:33:13] [PUSH_TRACE] ⬇️ Message details: text="Hello babyyyy...", datesent=2026-04-23 08:33:13 [11:33:13] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:33:13] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28842 [11:33:13] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28842 [11:33:13] [PUSH_EMBED] ✅ Saved message 28842 to local DB (sync) [11:33:13] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28842 [11:33:13] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28842 [11:33:13] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28842 [11:33:13] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [11:33:13] [PUSH_EMBED] Inserted message 28842 into existing cache (now 51 messages) [11:33:13] [PUSH_TRACE] 📦 ✅ Inserted message 28842, cache now has IDs: [28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [11:33:13] [PUSH_TRACE] 📦 EXITING cache update queue for message 28842 [11:33:13] [PUSH_EMBED] Fetching evolution data for message 28842 in background [11:33:13] [PUSH_EMBED] ✅ Fully processed message 28842 [11:33:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28842 [11:33:13] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833], handled=true [11:33:13] [PUSH] Embedded message handled instantly from silent push [11:33:13] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:33:13] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28842 [11:33:14] [PUSH_EMBED] Got evolution data for message 28842, saving to local DB [11:33:14] [PUSH_EMBED] Saved evolution data for message 28842 [11:33:18] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [11:33:18] [PUSH] Silent push received [11:33:18] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:18 +0000, appState=2, message_id=28843, type=nil [11:33:18] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [11:33:18] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:18 +0000 [11:33:18] [PUSH_TRACE] ⬇️ Processing embedded message_id=28843 [11:33:18] [PUSH_EMBED] 📩 Received embedded message: id=28843, type=0, sender=Laurent [11:33:18] [PUSH_TRACE] ⬇️ Message details: text="Notification received ?...", datesent=2026-04-23 08:33:17 [11:33:18] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:33:18] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28843 [11:33:18] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28843 [11:33:18] [PUSH_EMBED] ✅ Saved message 28843 to local DB (sync) [11:33:18] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28843 [11:33:18] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28843 [11:33:18] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28843 [11:33:18] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [11:33:18] [PUSH_EMBED] Inserted message 28843 into existing cache (now 52 messages) [11:33:18] [PUSH_TRACE] 📦 ✅ Inserted message 28843, cache now has IDs: [28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:18] [PUSH_TRACE] 📦 EXITING cache update queue for message 28843 [11:33:18] [PUSH_EMBED] Fetching evolution data for message 28843 in background [11:33:18] [PUSH_EMBED] ✅ Fully processed message 28843 [11:33:18] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28843 [11:33:18] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=52, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834], handled=true [11:33:18] [PUSH] Embedded message handled instantly from silent push [11:33:18] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [11:33:18] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28843 [11:33:19] [PUSH_EMBED] Got evolution data for message 28843, saving to local DB [11:33:19] [PUSH_EMBED] Saved evolution data for message 28843 [11:33:22] [PUSH] Notification tapped - session_id: ILUIWU [11:33:22] [PUSH] Max message_id before tap: 28843 [11:33:22] [PUSH] Stored pending session: ILUIWU [11:33:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:22 +0000 [11:33:22] [PUSH_TRACE] ⬇️ Processing embedded message_id=28843 [11:33:22] [PUSH_EMBED] 📩 Received embedded message: id=28843, type=0, sender=Laurent [11:33:22] [PUSH_TRACE] ⬇️ Message details: text="Notification received ?...", datesent=2026-04-23 08:33:17 [11:33:22] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [11:33:22] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28843 [11:33:22] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28843 [11:33:22] [PUSH_EMBED] ✅ Saved message 28843 to local DB (sync) [11:33:22] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28843 [11:33:22] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28843 [11:33:22] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28843 [11:33:22] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:22] [PUSH_TRACE] 📦 ⚠️ Message 28843 already in cache, skipping insert [11:33:22] [PUSH_TRACE] 📦 EXITING cache update queue for message 28843 [11:33:22] [PUSH_EMBED] Fetching evolution data for message 28843 in background [11:33:22] [PUSH_EMBED] ✅ Fully processed message 28843 [11:33:22] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28843 [11:33:22] [PUSH] Embedded message handled instantly on tap [11:33:22] [PUSH] Fetching server messages since_id=28843 to catch coalesced notifications on tap [11:33:22] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:33:22] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28843 to catch coalesced notifications [11:33:22] [PUSH_PRELOAD] Fetching messages for instant display cache [11:33:22] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:22] [CLIENT_SIG] WebSocket opened [11:33:22] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:33:22] [CLIENT_SIG] Connected! clientId=PwzxlrugHLuRr-9f [11:33:22] [PUSH_EMBED] Got evolution data for message 28843, saving to local DB [11:33:22] [PUSH_EMBED] Saved evolution data for message 28843 [11:33:22] [PUSH_PRELOAD] No messages or parse error [11:33:22] [PUSH] Server fetch on tap completed (success=false) [11:33:22] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:33:22] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:33:22] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:24] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:33:24] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [11:33:24] [LIFECYCLE] App resigning active - cleared crash flag [11:33:25] [UPLOAD_QUEUE] ✅ Database integrity check passed [11:33:25] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [11:33:25] [UPLOAD_QUEUE] Found 0 pending uploads to resume [11:33:25] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [11:33:25] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [11:33:25] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [11:33:25] [LIFECYCLE] App entering background - cleared crash flag [11:33:25] [CLIENT_SIG] Disconnecting [11:33:25] [CLIENT_SIG] WebSocket closed with code 1001 [11:33:25] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [11:33: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/} [11:33:25] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [11:33:29] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [11:33:29] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:29] [CLIENT_SIG] WebSocket opened [11:33:29] [CLIENT_SIG] HELLO sent as client for session ILUIWU [11:33:29] [CLIENT_SIG] Connected! clientId=6HJqw6CbcEWJakxf [11:33:29] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [11:33:29] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:33:29] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:29] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:33:30] [PIN_AUTH] Correct PIN [11:33:30] [SECURITY] Restored real session: ILUIWU [11:33:30] [SECURITY] Restored real session: ILUIWU [11:33:31] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [11:33:31] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [11:33:31] [SECURITY] Saved real session: ILUIWU [11:33:31] [SCENE] Launched directly to chat view with sessionId: ILUIWU [11:33:31] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [11:33:31] Documents Directory: /var/mobile/Containers/Data/Application/C54170A7-4208-45E1-972B-D75BEF83B039/Documents [11:33:31] [CAPTURE_HOST] live-feed moved hosted view to plain container [11:33:31] [THEME] Applying current theme [11:33:31] [CHAT] Applied day theme (mode: day) [11:33:31] [SECURITY] Saved real session: ILUIWU [11:33:31] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [11:33:31] [CLIENT_SIG] Already connected/connecting to session ILUIWU [11:33:31] [NETWORK] Network monitor started [11:33:31] [NETWORK] Status changed: connected [11:33:31] Did transition [11:33:31] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [11:33:31] [VIEWER] Screen lock enabled - normal idle behavior [11:33:31] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [11:33:31] [VCC] ========== VideoConnectionClass INIT ========== [11:33:31] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [11:33:31] [DATA AUDIO] ========== setupWebRTC() START ========== [11:33:31] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [11:33:31] [DATA AUDIO] Creating encoder/decoder factories... [11:33:31] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [11:33:31] [CODEC] Viewer selected encoder: AV1 (best quality) [11:33:31] [DATA AUDIO] Creating RTCPeerConnectionFactory... [11:33:31] [DATA AUDIO] ✅ Factory created [11:33:31] [DATA AUDIO] RTCAudioSession locked [11:33:31] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [11:33:31] [DATA AUDIO] RTCAudioSession unlocked [11:33:31] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [11:33:31] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [11:33:31] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [11:33:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [11:33:31] [QUERY] ✅ tempQueryConnection created for iosILUIWU [11:33:31] [VIEWER_INIT] Already have 50 messages - just filtering for tab [11:33:31] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:33:31] [EVENT_POLL] Event polling disabled - using WebSocket events instead [11:33:31] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [11:33:31] Did transition [11:33:31] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [11:33:31] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra [11:33:31] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:33:31] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [11:33:31] [READBY_OPT] No message IDs to fetch - skipping server call [11:33:31] [MIGRATION] No messages need sender_name backfill [11:33:31] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [11:33:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [11:33:31] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [11:33:31] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [11:33:31] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28843, maxMemoryId=28843 [11:33:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28843 [11:33:31] [GALLERY_DB] Raw datesent for msg 28821: '2026-04-23 07:16:04' [11:33:31] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [11:33:31] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [11:33:31] [GALLERY_DB] ✅ Loaded 1256 media messages [11:33:31] [USER] ✅ User registered successfully [11:33:31] [USER] User registration successful [11:33:31] [INCREMENTAL_SYNC] ✅ No new messages [11:33:31] [GALLERY] Filtered 1256 -> 1233 (only with local thumbnails) [11:33:31] [GALLERY] First 5 after sort (newest first): [11:33:31] [GALLERY] 0: id=28821, date=2026-04-23 07:16:04, file=2c2436d604281163.jpg [11:33:31] [GALLERY] 1: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [11:33:31] [GALLERY] 2: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [11:33:31] [GALLERY] 3: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [11:33:31] [GALLERY] 4: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [11:33:31] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [11:33:31] [SCROLL_BTN] Showing button - 29pt from bottom > half 22pt [11:33:31] [SERVER] Starting reconnect polling (5s interval) [11:33:31] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [11:33:31] [ICONS] Offset applied: -14.6 [11:33:31] [ICONS] New left margin: 11.2, New right margin: 11.3 [11:33:31] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [11:33:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [11:33:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:33:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [11:33:31] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [11:33:31] [ICONS] Chat center: (31.2, 87.0) [11:33:31] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [11:33:31] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [11:33:31] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [11:33:31] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [11:33:31] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [11:33:31] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [11:33:31] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [11:33:31] [ICONS] Screen width: 440.0 [11:33:31] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:33:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28843, 28842, 28841, 28840, 28839] [11:33:31] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:33:31] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:31] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:33:31] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=61, boundsH=758, forceScroll=true [11:33:31] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:33:31] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [11:33:31] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [11:33:31] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28841 → 28842 [11:33:31] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28842 → 28843 [11:33:31] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [11:33:31] [PURGE] ⚠️ Media cache purge DISABLED for debugging [11:33:31] [UNSENT_RETRY] Checking for unsent messages... [11:33:31] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [11:33:31] [UPLOAD_RECOVERY] User ID: EDAD55A1-003F-415D-AA60-672B34B504FE [11:33:31] [UPLOAD_RECOVERY] Session: ILUIWU [11:33:31] [UPLOAD_RECOVERY] ✅ No stuck uploads found [11:33:31] [UPLOAD_RECOVERY] Checking recent media messages on server... [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28821, file=2c2436d604281163.jpg, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28740, file=adbb72082c79fd33.jpg, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28734, file=653beabd4db198ba.jpg, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28665, file=ecb18b0d57be7e6f.png, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28643, file=6203759b347d3ad8.png, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28502, file=3e5f8d3301a13b0c.jpg, upload_status=complete [11:33:31] [UPLOAD_RECOVERY] Verifying 6 media files exist on server... [11:33:31] [PENDING_UPLOAD] Total pending upload messages: 0 [11:33:31] [UNSENT_RETRY] No unsent messages found [11:33:31] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3367, currentOffset=3367 [11:33:31] [SCROLL] Scrolling to 3367, animated=false [11:33:31] new_session POST ok: token len=157 [11:33:31] HELLO → sent (fetched token, role=query) [11:33:31] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [11:33:31] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [11:33:31] [SIG] hello_ok received for query connection - ready to query agents [11:33:31] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [11:33:31] [SIG] get_agents request sent for sessionId=ILUIWU [11:33:31] [SIG] get_agents request sent for sessionId=iosILUIWU [11:33:31] [SERVER] Stopped reconnect polling [11:33:32] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [11:33:32] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28843, 28842, 28841, 28840, 28839] [11:33:32] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [11:33:32] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:32] [RELOAD_TAB] 📊 Building chatRows from 50 messages [11:33:32] [SCROLL] wasNearBottom=true, threshold=758, offset=3367, contentH=4125, boundsH=758, forceScroll=true [11:33:32] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [11:33:32] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [11:33:32] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:33:32] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [11:33:32] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3367, currentOffset=3367 [11:33:32] [SCROLL] Scrolling to 3367, animated=false [11:33:32] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [11:33:32] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [11:33:32] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [11:33:32] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [11:33:32] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [11:33:32] [SERVER] Starting reconnect polling (5s interval) [11:33:32] [UPLOAD_RECOVERY] ✅ All media files verified on server [11:33:33] [PUSH] Silent push received [11:33:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:33 +0000, appState=0, message_id=nil, type=nil [11:33:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:33 +0000 [11:33:33] [PUSH_EMBED] No embedded message_data in notification [11:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:33:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:33:33] [PUSH] No embedded data, pre-loading messages from server [11:33:33] [PUSH_PRELOAD] Fetching messages for instant display cache [11:33:33] [PUSH] Silent push received [11:33:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:33 +0000, appState=0, message_id=nil, type=nil [11:33:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [11:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:33 +0000 [11:33:33] [PUSH_EMBED] No embedded message_data in notification [11:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:33:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [11:33:33] [PUSH] No embedded data, pre-loading messages from server [11:33:33] [PUSH_PRELOAD] Fetching messages for instant display cache [11:33:33] [CLIENT_SIG] Event received: type=3 messageId=28842 [11:33:33] [WS_EVENT] Received event: type=3, messageId=28842 [11:33:33] [WS_EVENT] Read receipt for message 28842 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:33:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:33:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:33:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [11:33:34] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:33:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:33:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:33:34] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28843 [11:33:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28842, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [11:33:34] [PUSH] Parsed message_id: 28842 [11:33:34] [PUSH] Parsed operation_type: 3 [11:33:34] [PUSH] Taking direct action: opType=3, messageId=28842 [11:33:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28842 [11:33:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:33:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:33:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:33:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [11:33:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [11:33:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:33:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:33:34] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28843 [11:33:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28843, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [11:33:34] [PUSH] Parsed message_id: 28843 [11:33:34] [PUSH] Parsed operation_type: 3 [11:33:34] [PUSH] Taking direct action: opType=3, messageId=28843 [11:33:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28843 [11:33:34] [CLIENT_SIG] Event received: type=3 messageId=28843 [11:33:34] [WS_EVENT] Received event: type=3, messageId=28843 [11:33:34] [WS_EVENT] Read receipt for message 28843 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [11:33:35] [SCROLL] 💓 alive, visible=45...51, rows=52, estHeight=0.0, heightCalls=63 [11:33:35] [SCROLL_END_DECEL] messagesTable offsetY=3732, insetTop=0, pendingVelocityY=0.0 [11:33:36] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [11:33:36] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [11:33:36] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [11:33:36] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [11:33:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 28843, 28842, 28841, 28840] [11:33:36] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:33:36] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:36] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:33:36] [SCROLL] wasNearBottom=true, threshold=393, offset=3732, contentH=4125, boundsH=393, forceScroll=false [11:33:36] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:33:36] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [11:33:36] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=114 [11:33:36] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [11:33:36] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [11:33:36] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=3809, currentOffset=3809 [11:33:36] [SCROLL] Scrolling to 3809, animated=true [11:33:37] [CLIENT_SIG] Event received: type=0 messageId=28844 [11:33:37] [WS_EVENT] Received event: type=0, messageId=28844 [11:33:37] [WS_EVENT] 📨 New message notification (msgId=28844) - triggering incremental refresh, currentMsgCount=51 [11:33:37] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [11:33:37] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28843, maxMemoryId=28843 [11:33:37] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28843 [11:33:37] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28844,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:33:36"} [11:33:37] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "datesent_utc": 2026-04-23 08:33:36, "message_type": 0, "file_name": , "message_id": 28844, "ok": 1] [11:33:37] [DB_UPGRADE] Upgrading message ID: -1 → 28844, preserveOriginalDate=false [11:33:37] [DB_UPGRADE] ✅ Upgraded -1 → 28844 with send_status=0, 1 row(s) affected [11:33:37] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28844 [11:33:37] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28844 [11:33:37] ReloadData 9 [11:33:37] [SERVER] Polling - attempting to reconnect... [11:33:37] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:33:37] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:33:37] [INCREMENTAL_SYNC] ✅ Found 1 new messages [11:33:37] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28844] [11:33:37] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:37] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:37] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [11:33:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [11:33:37] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [11:33:37] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [11:33:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28844, 28843, 28842, 28841, 28840] [11:33:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [11:33:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:37] [RELOAD_TAB] 📊 Building chatRows from 51 messages [11:33:37] [SCROLL] wasNearBottom=true, threshold=393, offset=3809, contentH=4202, boundsH=393, forceScroll=true [11:33:37] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [11:33:37] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [11:33:37] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3809, currentOffset=3809 [11:33:37] [SCROLL] Scrolling to 3809, animated=false [11:33:38] [SCROLL] 💓 alive, visible=47...52, rows=53, estHeight=0.0, heightCalls=59 [11:33:39] [PUSH] Silent push received [11:33:39] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:39 +0000, appState=0, message_id=nil, type=nil [11:33:39] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:39] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:39 +0000 [11:33:39] [PUSH_EMBED] No embedded message_data in notification [11:33:39] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [11:33:39] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834], handled=false [11:33:39] [PUSH] No embedded data, pre-loading messages from server [11:33:39] [PUSH_PRELOAD] Fetching messages for instant display cache [11:33:39] [CLIENT_SIG] Event received: type=3 messageId=28844 [11:33:39] [WS_EVENT] Received event: type=3, messageId=28844 [11:33:39] [WS_EVENT] Read receipt for message 28844 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [11:33:39] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [11:33:39] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [11:33:39] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [11:33:39] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [11:33:39] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [11:33:39] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:39] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [11:33:39] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28756] [11:33:39] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28756] [11:33:39] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:39] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [11:33:39] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [11:33:39] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [11:33:39] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [11:33:39] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28844 [11:33:39] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28844, AnyHashable("session_id"): ILUIWU] [11:33:39] [PUSH] Parsed message_id: 28844 [11:33:39] [PUSH] Parsed operation_type: 3 [11:33:39] [PUSH] Taking direct action: opType=3, messageId=28844 [11:33:39] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28844 [11:33:42] [SERVER] Polling - attempting to reconnect... [11:33:42] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:33:42] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:33:45] [SCROLL] 💓 alive, visible=47...52, rows=53, estHeight=0.0, heightCalls=1 [11:33:45] [SCROLL_END_DECEL] messagesTable offsetY=3809, insetTop=0, pendingVelocityY=0.0 [11:33:47] [SERVER] Polling - attempting to reconnect... [11:33:47] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:33:47] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:33:51] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [11:33:52] [SERVER] Polling - attempting to reconnect... [11:33:52] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:33:52] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:33:52] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=92ms [11:33:57] [SERVER] Polling - attempting to reconnect... [11:33:57] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:33:57] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:34:02] [SERVER] Polling - attempting to reconnect... [11:34:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:34:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:34:07] [SERVER] Polling - attempting to reconnect... [11:34:07] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [11:34:07] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [11:34:07] [CLIENT_SIG] Typing start from: Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)