summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJedi18 <targetakhil@gmail.com>2021-03-07 00:18:24 +0530
committerJedi18 <targetakhil@gmail.com>2021-03-07 00:18:24 +0530
commit8870455f9dd6463f9b8ef04516d69efef3c6287d (patch)
tree475f1eef9c90c1149e8dd8cf6bdf594be606c949 /src
parentchanged bottomToTop to true and renamed textWidth to textHeight (diff)
downloadnheko-8870455f9dd6463f9b8ef04516d69efef3c6287d.tar.xz
change allowed mistakes, fix minor style issues, remove old completer function from inputbar
Diffstat (limited to 'src')
-rw-r--r--src/CompletionProxyModel.cpp7
-rw-r--r--src/CompletionProxyModel.h42
-rw-r--r--src/timeline/InputBar.cpp22
-rw-r--r--src/timeline/InputBar.h2
-rw-r--r--src/timeline/TimelineViewManager.cpp2
5 files changed, 31 insertions, 44 deletions
diff --git a/src/CompletionProxyModel.cpp b/src/CompletionProxyModel.cpp

index fa5b3c2d..35b8d0a9 100644 --- a/src/CompletionProxyModel.cpp +++ b/src/CompletionProxyModel.cpp
@@ -6,8 +6,11 @@ #include "Logging.h" #include "Utils.h" -CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, QObject *parent) +CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, + int max_mistakes, + QObject *parent) : QAbstractProxyModel(parent) + , maxMistakes_(max_mistakes) { setSourceModel(model); QRegularExpression splitPoints("\\s+|-"); @@ -59,7 +62,7 @@ CompletionProxyModel::invalidate() { auto key = searchString.toUcs4(); beginResetModel(); - mapping = trie_.search(key, 7); + mapping = trie_.search(key, 7, maxMistakes_); endResetModel(); std::string temp; diff --git a/src/CompletionProxyModel.h b/src/CompletionProxyModel.h
index 1517505f..fc419702 100644 --- a/src/CompletionProxyModel.h +++ b/src/CompletionProxyModel.h
@@ -54,19 +54,19 @@ struct trie } std::vector<Value> search(const QVector<Key> &keys, //< TODO(Nico): replace this with a span - size_t limit, - size_t max_distance = 2) const + size_t result_count_limit, + size_t max_edit_distance = 2) const { std::vector<Value> ret; - if (!limit) + if (!result_count_limit) return ret; if (keys.isEmpty()) - return valuesAndSubvalues(limit); + return valuesAndSubvalues(result_count_limit); - auto append = [&ret, limit](std::vector<Value> &&in) { + auto append = [&ret, result_count_limit](std::vector<Value> &&in) { for (auto &&v : in) { - if (ret.size() >= limit) + if (ret.size() >= result_count_limit) return; if (std::find(ret.begin(), ret.end(), v) == ret.end()) { @@ -76,11 +76,12 @@ struct trie }; if (auto e = this->next.find(keys[0]); e != this->next.end()) { - append(e->second.search(keys.mid(1), limit, max_distance)); + append( + e->second.search(keys.mid(1), result_count_limit, max_edit_distance)); } - if (max_distance && ret.size() < limit) { - max_distance -= 1; + if (max_edit_distance && ret.size() < result_count_limit) { + max_edit_distance -= 1; // swap chars case if (keys.size() >= 2) { @@ -95,27 +96,31 @@ struct trie } if (t) { - append(t->search( - keys.mid(2), (limit - ret.size()) * 2, max_distance)); + append(t->search(keys.mid(2), + (result_count_limit - ret.size()) * 2, + max_edit_distance)); } } // delete character case - append(this->search(keys.mid(1), (limit - ret.size()) * 2, max_distance)); + append(this->search( + keys.mid(1), (result_count_limit - ret.size()) * 2, max_edit_distance)); // substitute and insert cases for (const auto &[k, t] : this->next) { - if (k == keys[0] || ret.size() >= limit) + if (k == keys[0] || ret.size() >= result_count_limit) break; // substitute - append(t.search(keys.mid(1), limit - ret.size(), max_distance)); + append(t.search( + keys.mid(1), result_count_limit - ret.size(), max_edit_distance)); - if (ret.size() >= limit) + if (ret.size() >= result_count_limit) break; // insert - append(t.search(keys, limit - ret.size(), max_distance)); + append(t.search( + keys, result_count_limit - ret.size(), max_edit_distance)); } } @@ -128,7 +133,9 @@ class CompletionProxyModel : public QAbstractProxyModel Q_OBJECT public: - CompletionProxyModel(QAbstractItemModel *model, QObject *parent = nullptr); + CompletionProxyModel(QAbstractItemModel *model, + int max_mistakes = 2, + QObject *parent = nullptr); void invalidate(); @@ -156,4 +163,5 @@ private: QString searchString; trie<uint, int> trie_; std::vector<int> mapping; + int maxMistakes_; }; diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 5ef38ac7..ab0fc3d7 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp
@@ -174,28 +174,6 @@ InputBar::nextText() return text(); } -QObject * -InputBar::completerFor(QString completerName) -{ - if (completerName == "user") { - auto userModel = new UsersModel(room->roomId().toStdString()); - auto proxy = new CompletionProxyModel(userModel); - userModel->setParent(proxy); - return proxy; - } else if (completerName == "emoji") { - auto emojiModel = new emoji::EmojiModel(); - auto proxy = new CompletionProxyModel(emojiModel); - emojiModel->setParent(proxy); - return proxy; - } else if (completerName == "room") { - auto roomModel = new RoomsModel(true); - auto proxy = new CompletionProxyModel(roomModel); - roomModel->setParent(proxy); - return proxy; - } - return nullptr; -} - void InputBar::send() { diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h
index 696a0dd9..678d953d 100644 --- a/src/timeline/InputBar.h +++ b/src/timeline/InputBar.h
@@ -51,8 +51,6 @@ public slots: bool uploading() const { return uploading_; } void message(QString body, MarkdownOverride useMarkdown = MarkdownOverride::NOT_SPECIFIED); - QObject *completerFor(QString completerName); - private slots: void startTyping(); void stopTyping(); diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 7d74496d..04af7060 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp
@@ -577,7 +577,7 @@ TimelineViewManager::completerFor(QString completerName, QString roomId) return proxy; } else if (completerName == "room") { auto roomModel = new RoomsModel(false); - auto proxy = new CompletionProxyModel(roomModel); + auto proxy = new CompletionProxyModel(roomModel, 4); roomModel->setParent(proxy); return proxy; } else if (completerName == "roomAliases") {