mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 02:01:40 -05:00
fixed duplicates in mentions list with inline bots, fixed bot command autocompletes that start with a digit
This commit is contained in:
parent
c2f1e95f3f
commit
c8f2f6bc2b
2 changed files with 17 additions and 1 deletions
|
@ -4353,6 +4353,18 @@ bool MentionsDropdown::clearFilteredBotCommands() {
|
|||
return true;
|
||||
}
|
||||
|
||||
namespace {
|
||||
template <typename T, typename U>
|
||||
inline int indexOfInFirstN(const T &v, const U &elem, int last) {
|
||||
for (auto b = v.cbegin(), i = b, e = b + qMax(v.size(), last); i != e; ++i) {
|
||||
if (*i == elem) {
|
||||
return (i - b);
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void MentionsDropdown::updateFiltered(bool resetScroll) {
|
||||
int32 now = unixtime(), recentInlineBots = 0;
|
||||
MentionRows mrows;
|
||||
|
@ -4413,6 +4425,7 @@ void MentionsDropdown::updateFiltered(bool resetScroll) {
|
|||
UserData *user = i.key();
|
||||
if (user->username.isEmpty()) continue;
|
||||
if (_filter.size() > 1 && (!user->username.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || user->username.size() + 1 == _filter.size())) continue;
|
||||
if (indexOfInFirstN(mrows, user, recentInlineBots) >= 0) continue;
|
||||
ordered.insertMulti(App::onlineForSort(user, now), user);
|
||||
}
|
||||
}
|
||||
|
@ -4420,6 +4433,7 @@ void MentionsDropdown::updateFiltered(bool resetScroll) {
|
|||
UserData *user = *i;
|
||||
if (user->username.isEmpty()) continue;
|
||||
if (_filter.size() > 1 && (!user->username.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || user->username.size() + 1 == _filter.size())) continue;
|
||||
if (indexOfInFirstN(mrows, user, recentInlineBots) >= 0) continue;
|
||||
mrows.push_back(user);
|
||||
if (!ordered.isEmpty()) {
|
||||
ordered.remove(App::onlineForSort(user, now), user);
|
||||
|
@ -4441,6 +4455,7 @@ void MentionsDropdown::updateFiltered(bool resetScroll) {
|
|||
UserData *user = *i;
|
||||
if (user->username.isEmpty()) continue;
|
||||
if (_filter.size() > 1 && (!user->username.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || user->username.size() + 1 == _filter.size())) continue;
|
||||
if (indexOfInFirstN(mrows, user, recentInlineBots) >= 0) continue;
|
||||
mrows.push_back(user);
|
||||
}
|
||||
}
|
||||
|
@ -4546,6 +4561,7 @@ void MentionsDropdown::rowsUpdated(const MentionRows &mrows, const HashtagRows &
|
|||
_scroll.show();
|
||||
}
|
||||
recount(resetScroll);
|
||||
update();
|
||||
if (hidden) {
|
||||
hide();
|
||||
showStart();
|
||||
|
|
|
@ -392,7 +392,7 @@ void FlatTextarea::onMentionHashtagOrBotCommandInsert(QString str) {
|
|||
QString t(fr.text());
|
||||
for (int i = pos - p; i > 0; --i) {
|
||||
if (t.at(i - 1) == '@' || t.at(i - 1) == '#' || t.at(i - 1) == '/') {
|
||||
if ((i == pos - p || t.at(i).isLetter() || t.at(i - 1) == '#') && (i < 2 || !(t.at(i - 2).isLetterOrNumber() || t.at(i - 2) == '_'))) {
|
||||
if ((i == pos - p || (t.at(i - 1) == '/' ? t.at(i).isLetterOrNumber() : t.at(i).isLetter()) || t.at(i - 1) == '#') && (i < 2 || !(t.at(i - 2).isLetterOrNumber() || t.at(i - 2) == '_'))) {
|
||||
c.setPosition(p + i - 1, QTextCursor::MoveAnchor);
|
||||
int till = p + i;
|
||||
for (; (till < e) && (till - p - i + 1 < str.size()); ++till) {
|
||||
|
|
Loading…
Add table
Reference in a new issue