From 236755444bc5eef16589d2b1effa2a6870846d3a Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Tue, 9 Jan 2024 02:02:42 +0000 Subject: [PATCH] in theory support non-network modules too --- test/integration/tests/core.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/test/integration/tests/core.cpp b/test/integration/tests/core.cpp index 97259abf..078fc3fb 100644 --- a/test/integration/tests/core.cpp +++ b/test/integration/tests/core.cpp @@ -541,6 +541,7 @@ TEST_F(ZNCTest, ServerDependentCapInModule) { InstallModule("testmod.cpp", R"( #include #include + #include #include #include class TestModule : public CModule { @@ -607,6 +608,7 @@ TEST_F(ZNCTest, ServerDependentCapInModule) { }); } void OnClientAttached() override { + if (!GetNetwork()) return; if (GetNetwork()->IsServerCapAccepted("testcap")) { GetClient()->NotifyServerDependentCap("testcap", true, GetNetwork()->GetIRCSock()->GetCapLsValue("testcap"), nullptr); } @@ -615,10 +617,28 @@ TEST_F(ZNCTest, ServerDependentCapInModule) { GetClient()->NotifyServerDependentCap("testcap", false, "", [](CClient*, bool) {}); } ~TestModule() override { - // TODO user module - GetNetwork()->NotifyClientsAboutServerDependentCap("testcap", false, [=](CClient* pClient, bool bState) { - PutModule("~ " + CString(bState)); - }); + switch (GetType()) { + case CModInfo::NetworkModule: + GetNetwork()->NotifyClientsAboutServerDependentCap("testcap", false, [=](CClient* pClient, bool bState) { + PutModule("~ " + CString(bState)); + }); + break; + case CModInfo::UserModule: + for (CIRCNetwork* pNetwork : GetUser()->GetNetworks()) { + pNetwork->NotifyClientsAboutServerDependentCap("testcap", false, [=](CClient* pClient, bool bState) { + PutModule("~ " + CString(bState)); + }); + } + break; + case CModInfo::GlobalModule: + for (auto& [_, pUser] : CZNC::Get().GetUserMap()) { + for (CIRCNetwork* pNetwork : pUser->GetNetworks()) { + pNetwork->NotifyClientsAboutServerDependentCap("testcap", false, [=](CClient* pClient, bool bState) { + PutModule("~ " + CString(bState)); + }); + } + } + } } }; MODULEDEFS(TestModule, "Test")