summary refs log tree commit diff
path: root/src/TextInputWidget.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/TextInputWidget.cc')
-rw-r--r--src/TextInputWidget.cc49
1 files changed, 8 insertions, 41 deletions
diff --git a/src/TextInputWidget.cc b/src/TextInputWidget.cc

index 4c6c8704..1535f563 100644 --- a/src/TextInputWidget.cc +++ b/src/TextInputWidget.cc
@@ -31,8 +31,9 @@ #include <variant.hpp> +#include "Cache.h" +#include "ChatPage.h" #include "Config.h" -#include "RoomState.h" #include "TextInputWidget.h" #include "Utils.h" @@ -40,7 +41,6 @@ static constexpr size_t INPUT_HISTORY_SIZE = 127; static constexpr int MAX_TEXTINPUT_HEIGHT = 120; static constexpr int InputHeight = 26; static constexpr int ButtonHeight = 24; -static constexpr int MaxPopupItems = 5; FilteredTextEdit::FilteredTextEdit(QWidget *parent) : QTextEdit{parent} @@ -454,49 +454,16 @@ TextInputWidget::TextInputWidget(QWidget *parent) input_->setFixedHeight(textInputHeight); }); connect(input_, &FilteredTextEdit::showSuggestions, this, [this](const QString &q) { - if (q.isEmpty() || currState_.isNull()) + if (q.isEmpty() || cache_.isNull()) return; QtConcurrent::run([this, q = q.toLower().toStdString()]() { - std::multimap<int, std::pair<std::string, std::string>> items; - - auto get_name = [](auto membership) { - auto name = membership.second.content.display_name; - auto key = membership.first; - - // Remove the leading '@' character. - if (name.empty()) { - key.erase(0, 1); - name = key; - } - - return std::make_pair(key, name); - }; - - for (const auto &m : currState_->memberships) { - const auto user = get_name(m); - const int score = utils::levenshtein_distance(q, user.second); - - items.emplace(score, user); + try { + emit input_->resultsRetrieved(cache_->getAutocompleteMatches( + ChatPage::instance()->currentRoom().toStdString(), q)); + } catch (const lmdb::error &e) { + std::cout << e.what() << '\n'; } - - QVector<SearchResult> results; - auto end = items.begin(); - - if (items.size() >= MaxPopupItems) - std::advance(end, MaxPopupItems); - else if (items.size() > 0) - std::advance(end, items.size()); - - for (auto it = items.begin(); it != end; it++) { - const auto user = it->second; - - results.push_back( - SearchResult{QString::fromStdString(user.first), - QString::fromStdString(user.second)}); - } - - emit input_->resultsRetrieved(results); }); });