File indexing completed on 2024-05-12 16:27:11
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "adduserscompletionlineedit.h" 0008 #include "common/completionlistview.h" 0009 #include "common/usercompletiondelegate.h" 0010 #include "model/usercompleterfilterproxymodel.h" 0011 #include "model/usercompletermodel.h" 0012 #include "rocketchataccount.h" 0013 0014 #include <QTimer> 0015 #include <chrono> 0016 0017 using namespace std::chrono_literals; 0018 0019 AddUsersCompletionLineEdit::AddUsersCompletionLineEdit(RocketChatAccount *account, QWidget *parent) 0020 : CompletionLineEdit(parent) 0021 , mRocketChatAccount(account) 0022 , mSearchTimer(new QTimer(this)) 0023 { 0024 if (mRocketChatAccount) { 0025 setCompletionModel(mRocketChatAccount->userCompleterFilterProxyModel()); 0026 } 0027 auto delegate = new UserCompletionDelegate(mCompletionListView); 0028 delegate->setRocketChatAccount(mRocketChatAccount); 0029 mCompletionListView->setItemDelegate(delegate); 0030 0031 connect(mSearchTimer, &QTimer::timeout, this, &AddUsersCompletionLineEdit::slotSearchTimerFired); 0032 connect(this, &AddUsersCompletionLineEdit::textChanged, this, &AddUsersCompletionLineEdit::slotSearchTextEdited); 0033 0034 connect(this, &AddUsersCompletionLineEdit::complete, this, &AddUsersCompletionLineEdit::slotComplete); 0035 } 0036 0037 AddUsersCompletionLineEdit::~AddUsersCompletionLineEdit() = default; 0038 0039 void AddUsersCompletionLineEdit::slotSearchTextEdited() 0040 { 0041 if (mSearchTimer->isActive()) { 0042 mSearchTimer->stop(); // eventually 0043 } 0044 0045 mSearchTimer->setSingleShot(true); 0046 mSearchTimer->start(1s); 0047 } 0048 0049 void AddUsersCompletionLineEdit::slotSearchTimerFired() 0050 { 0051 mSearchTimer->stop(); 0052 if (!text().trimmed().isEmpty()) { 0053 slotTextChanged(text()); 0054 } else { 0055 clear(); 0056 } 0057 } 0058 0059 void AddUsersCompletionLineEdit::slotTextChanged(const QString &text) 0060 { 0061 // TODO add exception! 0062 // Add current user + list of users already added. 0063 mRocketChatAccount->userAutocomplete(text, QString()); 0064 } 0065 0066 void AddUsersCompletionLineEdit::slotComplete(const QModelIndex &index) 0067 { 0068 const QString completerName = index.data(UserCompleterModel::UserName).toString(); 0069 const QString userId = index.data(UserCompleterModel::UserId).toString(); 0070 UserCompletionInfo info; 0071 info.username = completerName; 0072 info.userId = userId; 0073 mCompletionListView->hide(); 0074 disconnect(this, &AddUsersCompletionLineEdit::textChanged, this, &AddUsersCompletionLineEdit::slotSearchTextEdited); 0075 Q_EMIT newUserName(info); 0076 clear(); 0077 connect(this, &AddUsersCompletionLineEdit::textChanged, this, &AddUsersCompletionLineEdit::slotSearchTextEdited); 0078 } 0079 0080 #include "moc_adduserscompletionlineedit.cpp"