diff --git a/solanaceae/tox_messages/tox_message_manager.cpp b/solanaceae/tox_messages/tox_message_manager.cpp index 96cad6e..e6b81bd 100644 --- a/solanaceae/tox_messages/tox_message_manager.cpp +++ b/solanaceae/tox_messages/tox_message_manager.cpp @@ -95,7 +95,7 @@ bool ToxMessageManager::sendText(const Contact3 c, std::string_view message, boo // if sent? reg.emplace(new_msg_e, ts); - reg.emplace(new_msg_e).ts[c_self] = ts; + reg.emplace(new_msg_e).ts[c_self] = ts; if (_cr.any_of(c)) { const uint32_t friend_number = _cr.get(c).friend_number; @@ -226,7 +226,7 @@ bool ToxMessageManager::onToxEvent(const Tox_Event_Friend_Message* e) { //reg.emplace(new_msg_e, 0); reg.emplace(new_msg_e, ts); // reactive? { - auto& rtr = reg.emplace(new_msg_e).ts; + auto& rtr = reg.emplace(new_msg_e).ts; rtr.try_emplace(self_c, ts); rtr.try_emplace(c, ts); } @@ -261,7 +261,7 @@ bool ToxMessageManager::onToxEvent(const Tox_Event_Friend_Read_Receipt* e) { for (const auto& [m, msg_id_comp] : reg.view().each()) { if (msg_id_comp.id == msg_id) { // found it - auto& rtr = reg.get_or_emplace(m); + auto& rtr = reg.get_or_emplace(m); // insert but dont overwrite rtr.ts.try_emplace(c, ts); break; @@ -322,7 +322,7 @@ bool ToxMessageManager::onToxEvent(const Tox_Event_Group_Message* e) { } { - auto& rtr = reg.emplace(new_msg_e).ts; + auto& rtr = reg.emplace(new_msg_e).ts; rtr.try_emplace(self_c, ts); rtr.try_emplace(c, ts); } @@ -375,7 +375,7 @@ bool ToxMessageManager::onToxEvent(const Tox_Event_Group_Private_Message* e) { // private does not track synced by // but receive state { - auto& rtr = reg.emplace(new_msg_e).ts; + auto& rtr = reg.emplace(new_msg_e).ts; rtr.try_emplace(self_c, ts); rtr.try_emplace(c, ts); } @@ -383,3 +383,4 @@ bool ToxMessageManager::onToxEvent(const Tox_Event_Group_Private_Message* e) { _rmm.throwEventConstruct(reg, new_msg_e); return false; } + diff --git a/solanaceae/tox_messages/tox_transfer_manager.cpp b/solanaceae/tox_messages/tox_transfer_manager.cpp index c3e6019..9f0fc2b 100644 --- a/solanaceae/tox_messages/tox_transfer_manager.cpp +++ b/solanaceae/tox_messages/tox_transfer_manager.cpp @@ -126,6 +126,7 @@ Message3Handle ToxTransferManager::toxSendFilePath(const Contact3 c, uint32_t fi reg_ptr->emplace(e, c_self); reg_ptr->emplace(e, ts); // reactive? reg_ptr->emplace(e, ts); + reg_ptr->emplace(e).ts.try_emplace(c_self, ts); reg_ptr->emplace(e); reg_ptr->emplace(e); @@ -472,6 +473,12 @@ bool ToxTransferManager::onToxEvent(const Tox_Event_File_Recv* e) { transfer.emplace(ts); // reactive? transfer.emplace(); + { + auto& rb = transfer.emplace().ts; + //rb.try_emplace(self_c, ts); // only on completion + rb.try_emplace(c, ts); + } + transfer.emplace(); transfer.emplace(); transfer.emplace(friend_number, file_number); @@ -551,6 +558,8 @@ bool ToxTransferManager::onToxEvent(const Tox_Event_File_Recv_Chunk* e) { } if (data_size == 0) { + uint64_t ts = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + std::cout << "TTM finished friend " << friend_number << " transfer " << file_number << ", closing\n"; // update lookup table @@ -564,6 +573,13 @@ bool ToxTransferManager::onToxEvent(const Tox_Event_File_Recv_Chunk* e) { Message::Components::Read >(); + auto c = _tcm.getContactFriend(friend_number); + if (static_cast(c)) { + auto self_c = _cr.get(c).self; + auto& rb = transfer.get_or_emplace().ts; + rb.try_emplace(self_c, ts); // on completion + } + transfer.emplace(); // re-unread a finished transfer