From e3d34d9917bb2c341de3c7206e3021e916d3f706 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Mon, 21 Mar 2016 09:58:15 +0100 Subject: Revert "Lua callback" --- src/Bindings/WebPlugin.cpp | 152 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/Bindings/WebPlugin.cpp (limited to 'src/Bindings/WebPlugin.cpp') diff --git a/src/Bindings/WebPlugin.cpp b/src/Bindings/WebPlugin.cpp new file mode 100644 index 000000000..1eca7de93 --- /dev/null +++ b/src/Bindings/WebPlugin.cpp @@ -0,0 +1,152 @@ + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "WebPlugin.h" +#include "../WebAdmin.h" +#include "../Root.h" + + + + + +cWebPlugin::cWebPlugin() +{ + cWebAdmin * WebAdmin = cRoot::Get()->GetWebAdmin(); + if (WebAdmin != nullptr) + { + WebAdmin->AddPlugin(this); + } +} + + + + + +cWebPlugin::~cWebPlugin() +{ + ASSERT(m_Tabs.empty()); // Has ClearTabs() been called? + + // Remove from WebAdmin: + cWebAdmin * WebAdmin = cRoot::Get()->GetWebAdmin(); + if (WebAdmin != nullptr) + { + WebAdmin->RemovePlugin(this); + } +} + + + + + +cWebPlugin::cTabNames cWebPlugin::GetTabNames(void) const +{ + std::list< std::pair> NameList; + for (auto itr = m_Tabs.cbegin(), end = m_Tabs.cend(); itr != end; ++itr) + { + NameList.push_back(std::make_pair((*itr)->m_Title, (*itr)->m_SafeTitle)); + } + return NameList; +} + + + + + +cWebPlugin::cTabPtr cWebPlugin::GetTabBySafeTitle(const AString & a_SafeTitle) const +{ + cCSLock Lock(m_CSTabs); + for (auto itr = m_Tabs.cbegin(), end = m_Tabs.cend(); itr != end; ++itr) + { + if ((*itr)->m_SafeTitle == a_SafeTitle) + { + return *itr; + } + } + return nullptr; +} + + + + + +std::pair cWebPlugin::GetTabNameForRequest(const HTTPRequest & a_Request) +{ + AStringVector Split = StringSplit(a_Request.Path, "/"); + if (Split.empty()) + { + return std::make_pair(AString(), AString()); + } + + cCSLock Lock(m_CSTabs); + cTabPtr Tab; + if (Split.size() > 2) // If we got the tab name, show that page + { + for (auto itr = m_Tabs.cbegin(), end = m_Tabs.cend(); itr != end; ++itr) + { + if ((*itr)->m_SafeTitle.compare(Split[2]) == 0) // This is the one! + { + return std::make_pair((*itr)->m_Title, (*itr)->m_SafeTitle); + } + } + // Tab name not found, display an "empty" page: + return std::make_pair(AString(), AString()); + } + + // Show the first tab: + if (!m_Tabs.empty()) + { + return std::make_pair(m_Tabs.front()->m_SafeTitle, m_Tabs.front()->m_SafeTitle); + } + + // No tabs at all: + return std::make_pair(AString(), AString()); +} + + + + +AString cWebPlugin::SafeString(const AString & a_String) +{ + AString RetVal; + auto len = a_String.size(); + RetVal.reserve(len); + for (size_t i = 0; i < len; ++i) + { + char c = a_String[i]; + if (c == ' ') + { + c = '_'; + } + RetVal.push_back(c); + } + return RetVal; +} + + + + + +void cWebPlugin::AddNewWebTab(const AString & a_Title, int a_UserData) +{ + auto Tab = std::make_shared(a_Title, a_UserData); + cCSLock Lock(m_CSTabs); + m_Tabs.push_back(Tab); +} + + + + + +void cWebPlugin::ClearTabs(void) +{ + // Remove the webadmin tabs: + cTabPtrs Tabs; + { + cCSLock Lock(m_CSTabs); + std::swap(Tabs, m_Tabs); + } +} + + + + -- cgit v1.2.3