File indexing completed on 2024-05-19 05:04:02
0001 /* 0002 SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "channelsearchnamelineedit.h" 0007 #include "common/completionlistview.h" 0008 #include "common/userandchannelcompletiondelegate.h" 0009 #include "connection.h" 0010 #include "model/channelcompleterfilterproxymodel.h" 0011 #include "model/inputcompletermodel.h" 0012 #include "rocketchataccount.h" 0013 #include "rooms/roomsautocompletechannelandprivatejob.h" 0014 #include "ruqolawidgets_debug.h" 0015 #include <KLineEditEventHandler> 0016 #include <QJsonObject> 0017 0018 ChannelSearchNameLineEdit::ChannelSearchNameLineEdit(RocketChatAccount *account, QWidget *parent) 0019 : CompletionLineEdit(parent) 0020 , mChannelCompleterFilterProxyModel(new ChannelCompleterFilterProxyModel(this)) 0021 , mChannelCompleterModel(new InputCompleterModel(account, this)) 0022 , mRocketChatAccount(account) 0023 { 0024 KLineEditEventHandler::catchReturnKey(this); 0025 mChannelCompleterFilterProxyModel->setSourceModel(mChannelCompleterModel); 0026 connect(this, &QLineEdit::textChanged, this, &ChannelSearchNameLineEdit::slotTextChanged); 0027 setCompletionModel(mChannelCompleterFilterProxyModel); 0028 connect(this, &ChannelSearchNameLineEdit::complete, this, &ChannelSearchNameLineEdit::slotComplete); 0029 0030 auto userAndChannelCompletionDelegate = new UserAndChannelCompletionDelegate(mCompletionListView); 0031 userAndChannelCompletionDelegate->setRocketChatAccount(account); 0032 mCompletionListView->setItemDelegate(userAndChannelCompletionDelegate); 0033 0034 mCompletionListView->setTextWidget(this); 0035 } 0036 0037 ChannelSearchNameLineEdit::~ChannelSearchNameLineEdit() = default; 0038 0039 void ChannelSearchNameLineEdit::slotTextChanged(const QString &text) 0040 { 0041 if (!text.trimmed().isEmpty()) { 0042 auto job = new RocketChatRestApi::RoomsAutocompleteChannelAndPrivateJob(this); 0043 RocketChatRestApi::RoomsAutocompleteChannelAndPrivateJob::RoomsAutocompleteChannelAndPrivateInfo info; 0044 info.name = text; 0045 job->setRoomsCompleterInfo(info); 0046 mRocketChatAccount->restApi()->initializeRestApiJob(job); 0047 connect(job, 0048 &RocketChatRestApi::RoomsAutocompleteChannelAndPrivateJob::roomsAutoCompleteChannelAndPrivateDone, 0049 this, 0050 &ChannelSearchNameLineEdit::slotSearchDone); 0051 if (!job->start()) { 0052 qCDebug(RUQOLAWIDGETS_LOG) << "Impossible to start RoomsAutocompleteChannelAndPrivateJob"; 0053 } 0054 } else { 0055 mChannelCompleterModel->clear(); 0056 mCompletionListView->hide(); 0057 } 0058 } 0059 0060 void ChannelSearchNameLineEdit::slotSearchDone(const QJsonObject &obj) 0061 { 0062 mChannelCompleterModel->parseSearchChannels(obj); 0063 } 0064 0065 void ChannelSearchNameLineEdit::slotComplete(const QModelIndex &index) 0066 { 0067 const QString completerName = index.data(InputCompleterModel::CompleterName).toString(); 0068 const QString roomId = index.data(InputCompleterModel::Identifier).toString(); 0069 ChannelCompletionInfo info; 0070 info.channelName = completerName; 0071 info.channelId = roomId; 0072 mCompletionListView->hide(); 0073 disconnect(this, &QLineEdit::textChanged, this, &ChannelSearchNameLineEdit::slotTextChanged); 0074 Q_EMIT newRoomName(info); 0075 clear(); 0076 connect(this, &QLineEdit::textChanged, this, &ChannelSearchNameLineEdit::slotTextChanged); 0077 } 0078 0079 #include "moc_channelsearchnamelineedit.cpp"