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"