diff --git a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp index d4c0074..e3bfe3c 100644 --- a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp +++ b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp @@ -212,6 +212,7 @@ SHA1_NGCFT1::SHA1_NGCFT1( _rmm.subscribe(this, RegistryMessageModel_Event::send_file_path); + _tep.subscribe(this, Tox_Event_Type::TOX_EVENT_GROUP_PEER_JOIN); _tep.subscribe(this, Tox_Event_Type::TOX_EVENT_GROUP_PEER_EXIT); _neep.subscribe(this, NGCEXT_Event::FT1_HAVE); @@ -1427,6 +1428,23 @@ bool SHA1_NGCFT1::sendFilePath(const Contact3 c, std::string_view file_name, std return true; } +bool SHA1_NGCFT1::onToxEvent(const Tox_Event_Group_Peer_Join* e) { + const auto group_number = tox_event_group_peer_join_get_group_number(e); + const auto peer_number = tox_event_group_peer_join_get_peer_id(e); + + auto c_peer = _tcm.getContactGroupPeer(group_number, peer_number); + auto c_group = _tcm.getContactGroup(group_number); + + // search for group and/or peer in announce targets + _os.registry().view().each([this, c_peer, c_group](const auto ov, const Components::AnnounceTargets& at, Components::ReAnnounceTimer& rat) { + if (at.targets.contains(c_group) || at.targets.contains(c_peer)) { + rat.lower(); + } + }); + + return false; +} + bool SHA1_NGCFT1::onToxEvent(const Tox_Event_Group_Peer_Exit* e) { const auto group_number = tox_event_group_peer_exit_get_group_number(e); const auto peer_number = tox_event_group_peer_exit_get_peer_id(e); diff --git a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.hpp b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.hpp index 4876bf9..b00b30c 100644 --- a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.hpp +++ b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.hpp @@ -115,6 +115,7 @@ class SHA1_NGCFT1 : public ToxEventI, public RegistryMessageModelEventI, public bool sendFilePath(const Contact3 c, std::string_view file_name, std::string_view file_path) override; + bool onToxEvent(const Tox_Event_Group_Peer_Join* e) override; bool onToxEvent(const Tox_Event_Group_Peer_Exit* e) override; bool onEvent(const Events::NGCEXT_ft1_have&) override;