From eb6a0f8af34d0f8de808d474381c232716a7534d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 6 Sep 2013 00:20:01 +0300 Subject: add globals filter. It can move some global messages into debug window. This mean it prevent from spam in chat message and spam sounds. By default filter configured to ignore globals from Sagatha. --- src/defaults.cpp | 1 + src/gui/chatwindow.cpp | 25 +++++++++++++++++++++++++ src/gui/chatwindow.h | 5 +++++ src/gui/setup_chat.cpp | 4 ++++ src/net/ea/chathandler.cpp | 3 ++- 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/defaults.cpp b/src/defaults.cpp index 06e67d6ed..4c8183f39 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -299,6 +299,7 @@ DefaultsData* getConfigDefaults() #endif AddDEF("logInput", false); AddDEF("highlightWords", ""); + AddDEF("globalsFilter", "Sagatha"); AddDEF("selfMouseHeal", true); AddDEF("serverslistupdate", ""); AddDEF("fadeoutmusic", true); diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp index 1065501b7..f5618a279 100644 --- a/src/gui/chatwindow.cpp +++ b/src/gui/chatwindow.cpp @@ -215,6 +215,7 @@ ChatWindow::ChatWindow(): mChatHistoryIndex(0), mAwayLog(), mHighlights(), + mGlobalsFilter(), mGMLoaded(false), mHaveMouse(false), mAutoHide(config.getBoolValue("autohideChat")), @@ -291,9 +292,11 @@ ChatWindow::ChatWindow(): initTradeFilter(); loadCustomList(); parseHighlights(); + parseGlobalsFilter(); config.addListener("autohideChat", this); config.addListener("showBattleEvents", this); + config.addListener("globalsFilter", this); enableVisibleSound(true); } @@ -1683,6 +1686,18 @@ void ChatWindow::parseHighlights() mHighlights.push_back(player_node->getName()); } +void ChatWindow::parseGlobalsFilter() +{ + mGlobalsFilter.clear(); + if (!player_node) + return; + + splitToStringVector(mGlobalsFilter, config.getStringValue( + "globalsFilter"), ','); + + mHighlights.push_back(player_node->getName()); +} + bool ChatWindow::findHighlight(const std::string &str) { return findI(str, mHighlights) != std::string::npos; @@ -1708,6 +1723,8 @@ void ChatWindow::optionChanged(const std::string &name) mAutoHide = config.getBoolValue("autohideChat"); else if (name == "showBattleEvents") mShowBattleEvents = config.getBoolValue("showBattleEvents"); + else if (name == "globalsFilter") + parseGlobalsFilter(); } void ChatWindow::mouseMoved(gcn::MouseEvent &event) @@ -1768,3 +1785,11 @@ void ChatWindow::logicChildren() BLOCK_END("ChatWindow::logicChildren") } #endif + +void ChatWindow::addGlobalMessage(const std::string &line) +{ + if (debugChatTab && findI(line, mGlobalsFilter) != std::string::npos) + debugChatTab->chatLog(line, BY_OTHER); + else + localChatTab->chatLog(line, BY_GM); +} diff --git a/src/gui/chatwindow.h b/src/gui/chatwindow.h index 67f87be1a..80b59b8d7 100644 --- a/src/gui/chatwindow.h +++ b/src/gui/chatwindow.h @@ -273,6 +273,8 @@ class ChatWindow final : public Window, void parseHighlights(); + void parseGlobalsFilter(); + bool findHighlight(const std::string &str) A_WARN_UNUSED; void copyToClipboard(const int x, const int y) const; @@ -293,6 +295,8 @@ class ChatWindow final : public Window, void widgetResized(const gcn::Event &event) override; + void addGlobalMessage(const std::string &line); + #ifdef USE_PROFILER void logicChildren(); #endif @@ -367,6 +371,7 @@ class ChatWindow final : public Window, unsigned int mChatHistoryIndex; std::list mAwayLog; StringVect mHighlights; + StringVect mGlobalsFilter; bool mGMLoaded; bool mHaveMouse; bool mAutoHide; diff --git a/src/gui/setup_chat.cpp b/src/gui/setup_chat.cpp index 91a9dd859..3a81119ba 100644 --- a/src/gui/setup_chat.cpp +++ b/src/gui/setup_chat.cpp @@ -185,6 +185,10 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : new SetupItemTextField(_("Highlight words (separated by comma)"), "", "highlightWords", this, "highlightWordsEvent"); + // TRANSLATORS: settings option + new SetupItemTextField(_("Globals ignore names (separated by comma)"), "", + "globalsFilter", this, "globalsFilterEvent"); + // TRANSLATORS: settings option new SetupItemCheckBox(_("Show MVP messages"), "", "showMVP", this, "showMVPEvent"); diff --git a/src/net/ea/chathandler.cpp b/src/net/ea/chathandler.cpp index c8259bc91..a7879f6fc 100644 --- a/src/net/ea/chathandler.cpp +++ b/src/net/ea/chathandler.cpp @@ -356,7 +356,8 @@ void ChatHandler::processChat(Net::MessageIn &msg, const bool normalChat, } else if (localChatTab) { - localChatTab->chatLog(chatMsg, BY_GM); + if (chatWindow) + chatWindow->addGlobalMessage(chatMsg); } BLOCK_END("ChatHandler::processChat") } -- cgit v1.2.3-60-g2f50