*/
#include "chat.h"
-#include "debug.h"
-#include "config.h"
-#include "util/strfnd.h"
+
+#include <algorithm>
#include <cctype>
#include <sstream>
+
+#include "config.h"
+#include "debug.h"
+#include "util/strfnd.h"
#include "util/string.h"
#include "util/numeric.h"
return formatted_count - rows;
}
+void ChatBuffer::resize(u32 scrollback)
+{
+ m_scrollback = scrollback;
+ if (m_unformatted.size() > m_scrollback)
+ deleteOldest(m_unformatted.size() - m_scrollback);
+}
ChatPrompt::ChatPrompt(const std::wstring &prompt, u32 history_limit):
void ChatPrompt::addToHistory(std::wstring line)
{
- if (!line.empty())
+ if (!line.empty() &&
+ (m_history.size() == 0 || m_history.back() != line)) {
+ // Remove all duplicates
+ m_history.erase(std::remove(m_history.begin(), m_history.end(),
+ line), m_history.end());
+ // Push unique line
m_history.push_back(line);
+ }
if (m_history.size() > m_history_limit)
m_history.erase(m_history.begin());
m_history_index = m_history.size();
return m_recent_buffer;
}
-EnrichedString ChatBackend::getRecentChat()
+EnrichedString ChatBackend::getRecentChat() const
{
EnrichedString result;
- for (u32 i = 0; i < m_recent_buffer.getLineCount(); ++i)
- {
+ for (u32 i = 0; i < m_recent_buffer.getLineCount(); ++i) {
const ChatLine& line = m_recent_buffer.getLine(i);
if (i != 0)
result += L"\n";
m_recent_buffer.clear();
}
+
+void ChatBackend::applySettings()
+{
+ u32 recent_lines = g_settings->getU32("recent_chat_messages");
+ recent_lines = rangelim(recent_lines, 2, 20);
+ m_recent_buffer.resize(recent_lines);
+}
+
void ChatBackend::step(float dtime)
{
m_recent_buffer.step(dtime);