From bc22451524f00e38b96027dfa0ae9768bf431208 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 3 Mar 2024 12:50:39 +0100 Subject: [PATCH] dirty frag on message updates (if still open) --- src/fragment_store/message_fragment_store.cpp | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/fragment_store/message_fragment_store.cpp b/src/fragment_store/message_fragment_store.cpp index 1af217d..7fd73b6 100644 --- a/src/fragment_store/message_fragment_store.cpp +++ b/src/fragment_store/message_fragment_store.cpp @@ -231,16 +231,33 @@ void MessageFragmentStore::handleMessage(const Message3Handle& m) { return; } - m.emplace(fragment_id); + m.emplace_or_replace(fragment_id); // in this case we know the fragment needs an update _fuid_save_queue.push({Message::getTimeMS(), fragment_id, m.registry()}); return; // done } - //m.get(); + const auto msg_fh = _fs.fragmentHandle(m.get().fid); + if (!static_cast(msg_fh)) { + std::cerr << "MFS error: fid in message is invalid\n"; + return; // TODO: properly handle this case + } - // TODO: save updates, and not only new messages (read state etc) + if (!m.registry()->ctx().contains()) { + m.registry()->ctx().emplace(); + } + + auto& fid_open = m.registry()->ctx().get().fid_open; + + if (fid_open.contains(msg_fh)) { + // TODO: dedup events + // TODO: cooldown per fragsave + _fuid_save_queue.push({Message::getTimeMS(), msg_fh, m.registry()}); + return; + } + + // TODO: save updates to old fragments, but writing them to a new fragment that would overwrite on merge // new fragment?, since we dont write to others fragments?