summary refs log tree commit diff
path: root/src/timeline/InputBar.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-09-02 03:15:07 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2021-09-02 03:15:39 +0200
commit3528fe4e5dee1684f43e14fc9c6a50b4c1e25faf (patch)
treede846207ac1332fd8ae97662c3c8fbe4540b4dbf /src/timeline/InputBar.cpp
parentTranslated using Weblate (Estonian) (diff)
downloadnheko-3528fe4e5dee1684f43e14fc9c6a50b4c1e25faf.tar.xz
Warn the user before they ping the whole room
Diffstat (limited to 'src/timeline/InputBar.cpp')
-rw-r--r--src/timeline/InputBar.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp

index c82099f0..ece9db62 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp
@@ -11,6 +11,7 @@ #include <QMimeData> #include <QMimeDatabase> #include <QStandardPaths> +#include <QTextBoundaryFinder> #include <QUrl> #include <QRegularExpression> @@ -130,6 +131,34 @@ InputBar::insertMimeData(const QMimeData *md) } void +InputBar::updateAtRoom(const QString &t) +{ + bool roomMention = false; + + if (t.size() > 4) { + QTextBoundaryFinder finder(QTextBoundaryFinder::BoundaryType::Word, t); + + finder.toStart(); + do { + auto start = finder.position(); + finder.toNextBoundary(); + auto end = finder.position(); + if (start > 0 && end - start >= 4 && + t.midRef(start, end - start) == "room" && + t.at(start - 1) == QChar('@')) { + roomMention = true; + break; + } + } while (finder.position() < t.size()); + } + + if (roomMention != this->containsAtRoom_) { + this->containsAtRoom_ = roomMention; + emit containsAtRoomChanged(); + } +} + +void InputBar::setText(QString newText) { if (history_.empty()) @@ -157,6 +186,8 @@ InputBar::updateState(int selectionStart_, int selectionEnd_, int cursorPosition else history_.front() = text_; history_index_ = 0; + + updateAtRoom(text_); } selectionStart = selectionStart_; @@ -182,6 +213,7 @@ InputBar::previousText() else if (text().isEmpty()) history_index_--; + updateAtRoom(text()); return text(); } @@ -192,6 +224,7 @@ InputBar::nextText() if (history_index_ >= INPUT_HISTORY_SIZE) history_index_ = 0; + updateAtRoom(text()); return text(); }