From 0ce4b26eec5c1e4c9ca361237953bf088ed00454 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sat, 17 Feb 2024 14:44:50 +0100 Subject: [PATCH] add dup check, would work for ngc if we saved tox group msg id yet --- external/solanaceae_message3 | 2 +- external/solanaceae_tox | 2 +- src/fragment_store/message_fragment_store.cpp | 28 ++++++++++++++++--- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/external/solanaceae_message3 b/external/solanaceae_message3 index 5727c748..b8893b1c 160000 --- a/external/solanaceae_message3 +++ b/external/solanaceae_message3 @@ -1 +1 @@ -Subproject commit 5727c7482fa363b069c4f3d667d231d7d55070fb +Subproject commit b8893b1c5ca49178f6ab96db18bf72a50f6b6653 diff --git a/external/solanaceae_tox b/external/solanaceae_tox index b2a3cb70..2059577f 160000 --- a/external/solanaceae_tox +++ b/external/solanaceae_tox @@ -1 +1 @@ -Subproject commit b2a3cb7052041bea2d4793b8446fb2a00411773a +Subproject commit 2059577fc2213075c0300e7390591db2c637ba4b diff --git a/src/fragment_store/message_fragment_store.cpp b/src/fragment_store/message_fragment_store.cpp index c1050a99..c886c218 100644 --- a/src/fragment_store/message_fragment_store.cpp +++ b/src/fragment_store/message_fragment_store.cpp @@ -4,6 +4,7 @@ #include #include +#include #include @@ -205,6 +206,8 @@ void MessageFragmentStore::handleMessage(const Message3Handle& m) { // on new and update: mark as fragment dirty } +// assumes new frag +// need update from frag void MessageFragmentStore::loadFragment(Message3Registry& reg, FragmentHandle fh) { std::cout << "MFS: loadFragment\n"; const auto j = _fs.loadFromStorageNJ(fh); @@ -236,11 +239,28 @@ void MessageFragmentStore::loadFragment(Message3Registry& reg, FragmentHandle fh new_real_msg.emplace_or_replace(fh.get()); - // TODO: dup checking - const bool is_dup {false}; - // dup check (hacky, specific to protocols) - if (is_dup) { + Message3 dup_msg {entt::null}; + { + // get comparator from contact + if (reg.ctx().contains()) { + const auto c = reg.ctx().get(); + if (_cr.all_of(c)) { + auto& comp = _cr.get(c).comp; + // walking EVERY existing message OOF + // this needs optimizing + for (const Message3 other_msg : reg.view()) { + if (comp({reg, other_msg}, new_real_msg)) { + // dup + dup_msg = other_msg; + break; + } + } + } + } + } + + if (reg.valid(dup_msg)) { // -> merge with preexisting // -> throw update reg.destroy(new_real_msg);