From 158860e1b0f68ac95809280d9608998ce4eb2f6c Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 14 Jan 2024 17:24:40 +0100 Subject: [PATCH] allow specifying vgroup --- src/bridge.cpp | 62 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/src/bridge.cpp b/src/bridge.cpp index d124259..33a3740 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -95,35 +95,53 @@ void Bridge::registerCommands(void) { const auto contact_from = m.get().c; const auto contact_to = m.get().c; - // TODO: if no vgroup name supplied - Contact3Handle group_contact; - if (/*is public ?*/ _c_to_vg.count({_cr, contact_to})) { - // message was sent public in group - group_contact = {_cr, contact_to}; - } else if (_cr.all_of(contact_from)) { - // use parent of sender - group_contact = {_cr, _cr.get(contact_from).parent}; - } else if (false /* parent of contact_to ? */) { + const VirtualGroups* vg = nullptr; + + if (!params.empty()) { // vgroup_name supplied + for (const auto& vg_it : _vgroups) { + if (vg_it.vg_name == params) { + vg = &vg_it; + break; + } + } + if (vg == nullptr) { + _rmm.sendText( + contact_from, + "The supplied vgroup name does not exist!" + ); + return true; + } + } else { + if (/*is public ?*/ _c_to_vg.count({_cr, contact_to})) { + // message was sent public in group + group_contact = {_cr, contact_to}; + } else if (_cr.all_of(contact_from)) { + // use parent of sender + group_contact = {_cr, _cr.get(contact_from).parent}; + } else if (false /* parent of contact_to ? */) { + } + + if (!_c_to_vg.count(group_contact)) { + // nope + _rmm.sendText( + contact_from, + "It appears you are not bridged or forgot to supply the vgroup name!" + ); + return true; + } + + assert(static_cast(group_contact)); + vg = &_vgroups.at(_c_to_vg.at(group_contact)); } - if (!_c_to_vg.count(group_contact)) { - // nope - _rmm.sendText( - contact_from, - "It appears you are not bridged or forgot to supply the vgroup name!" - ); - return true; - } - - assert(static_cast(group_contact)); - const auto& vg = _vgroups.at(_c_to_vg.at(group_contact)); + assert(vg != nullptr); _rmm.sendText( contact_from, - "Contacts online in other bridged group(s) in vgroup '" + vg.vg_name + "'" + "Contacts online in other bridged group(s) in vgroup '" + vg->vg_name + "'" ); - for (const auto& vgc : vg.contacts) { + for (const auto& vgc : vg->contacts) { if (vgc.c == group_contact) { // skip self continue;