Allow enabling/disabling caps via GenericCap::SetActive()

This commit is contained in:
Attila Molnar 2015-02-11 16:52:39 +01:00
parent 8c2135aad0
commit 971788e42f
2 changed files with 20 additions and 18 deletions

View File

@ -40,11 +40,14 @@ class CapEvent : public Event
class GenericCap
{
bool active;
public:
LocalIntExt ext;
const std::string cap;
GenericCap(Module* parent, const std::string& Cap)
: ext("cap_" + Cap, ExtensionItem::EXT_USER, parent)
: active(true)
, ext("cap_" + Cap, ExtensionItem::EXT_USER, parent)
, cap(Cap)
{
}
@ -54,6 +57,9 @@ class GenericCap
if (ev.id != "cap_request")
return;
if (!active)
return;
CapEvent *data = static_cast<CapEvent*>(&ev);
if (data->type == CapEvent::CAPEVENT_REQ)
{
@ -87,4 +93,7 @@ class GenericCap
ext.set(data->user, 0);
}
}
void SetActive(bool newstate) { active = newstate; }
bool IsActive() const { return active; }
};

View File

@ -45,9 +45,6 @@ class ModuleIRCv3 : public Module, public AccountEventListener
GenericCap cap_accountnotify;
GenericCap cap_awaynotify;
GenericCap cap_extendedjoin;
bool accountnotify;
bool awaynotify;
bool extendedjoin;
CUList last_excepts;
@ -63,20 +60,16 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* conf = ServerInstance->Config->ConfValue("ircv3");
accountnotify = conf->getBool("accountnotify", true);
awaynotify = conf->getBool("awaynotify", true);
extendedjoin = conf->getBool("extendedjoin", true);
cap_accountnotify.SetActive(conf->getBool("accountnotify", true));
cap_awaynotify.SetActive(conf->getBool("awaynotify", true));
cap_extendedjoin.SetActive(conf->getBool("extendedjoin", true));
}
void OnEvent(Event& ev) CXX11_OVERRIDE
{
if (awaynotify)
cap_awaynotify.HandleEvent(ev);
if (extendedjoin)
cap_extendedjoin.HandleEvent(ev);
if (accountnotify)
cap_accountnotify.HandleEvent(ev);
cap_awaynotify.HandleEvent(ev);
cap_extendedjoin.HandleEvent(ev);
cap_accountnotify.HandleEvent(ev);
}
void OnAccountChange(User* user, const std::string& newaccount) CXX11_OVERRIDE
@ -96,10 +89,10 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) CXX11_OVERRIDE
{
// Remember who is not going to see the JOIN because of other modules
if ((awaynotify) && (memb->user->IsAway()))
if ((cap_awaynotify.IsActive()) && (memb->user->IsAway()))
last_excepts = excepts;
if (!extendedjoin)
if (!cap_extendedjoin.IsActive())
return;
/*
@ -168,7 +161,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
ModResult OnSetAway(User* user, const std::string &awaymsg) CXX11_OVERRIDE
{
if (awaynotify)
if (cap_awaynotify.IsActive())
{
// Going away: n!u@h AWAY :reason
// Back from away: n!u@h AWAY
@ -183,7 +176,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void OnPostJoin(Membership *memb) CXX11_OVERRIDE
{
if ((!awaynotify) || (!memb->user->IsAway()))
if ((!cap_awaynotify.IsActive()) || (!memb->user->IsAway()))
return;
std::string line = ":" + memb->user->GetFullHost() + " AWAY :" + memb->user->awaymsg;