From 4bdaa3cc22d813fbe3fe9666e75b2991dfde5a01 Mon Sep 17 00:00:00 2001 From: Vasily Fomin Date: Thu, 29 May 2014 17:14:32 +0200 Subject: [PATCH] Add "Loaded" flag to the global settings page. --- modules/data/webadmin/tmpl/settings.tmpl | 24 +++++++++++++++ modules/webadmin.cpp | 37 ++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/modules/data/webadmin/tmpl/settings.tmpl b/modules/data/webadmin/tmpl/settings.tmpl index 65bbca0f..b1f50c39 100644 --- a/modules/data/webadmin/tmpl/settings.tmpl +++ b/modules/data/webadmin/tmpl/settings.tmpl @@ -167,6 +167,8 @@ Name Arguments Description + Loaded by networks + Loaded by users @@ -186,6 +188,28 @@ title="" /> + + + + + + + + + + + + + + + + diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 11c52842..96a759d3 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -1626,6 +1626,43 @@ public: l["Wiki"] = Info.GetWikiPage(); l["HasArgs"] = CString(Info.GetHasArgs()); l["ArgsHelpText"] = Info.GetArgsHelpText(); + + // Check if the module is loaded by all or some users and collect all available networks for future processing + vector allNetworks; + unsigned int usersWithRenderedModuleCount = 0; + const map& allUsers = CZNC::Get().GetUserMap(); + allNetworks.reserve(allUsers.size()); // Reserve for at least one network per scene + for (map::const_iterator usersIt = allUsers.begin(); usersIt != allUsers.end(); ++usersIt) { + const CUser& User = *usersIt->second; + const vector& userNetworks = User.GetNetworks(); + allNetworks.insert(allNetworks.end(), userNetworks.begin(), userNetworks.end()); + const CModules& userModules = User.GetModules(); + for (unsigned int userModuleIndex = 0; userModuleIndex < userModules.size(); ++userModuleIndex) { + const CModule* pCurModule = userModules[userModuleIndex]; + if (Info.GetName() == pCurModule->GetModName()) { + usersWithRenderedModuleCount++; + } + } + } + l["LoadedByAllUsers"] = CString(usersWithRenderedModuleCount == allUsers.size()); + const bool isLoadedBySomeUsers = (usersWithRenderedModuleCount != 0) && (usersWithRenderedModuleCount < allUsers.size()); + l["LoadedBySomeUsers"] = CString(isLoadedBySomeUsers); + + // Check if module is loaded by all or some networks + unsigned int networksWithRenderedModuleCount = 0; + for (unsigned int networkIndex = 0; networkIndex < allNetworks.size(); ++networkIndex) { + const CIRCNetwork* pCurrentNetwork = allNetworks[networkIndex]; + const CModules& networkModules = pCurrentNetwork->GetModules(); + for (unsigned int networkModuleIndex = 0; networkModuleIndex < networkModules.size(); ++networkModuleIndex) { + const CModule* pCurModule = networkModules[networkModuleIndex]; + if (Info.GetName() == pCurModule->GetModName()) { + networksWithRenderedModuleCount++; + } + } + } + l["LoadedByAllNetworks"] = CString(networksWithRenderedModuleCount == allNetworks.size()); + const bool isLoadedBySomeNetworks = (networksWithRenderedModuleCount != 0) && (networksWithRenderedModuleCount < allNetworks.size()); + l["LoadedBySomeNetworks"] = CString(isLoadedBySomeNetworks); } return true;