File indexing completed on 2024-05-12 16:27:15
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 "searchmessagewidget.h" 0008 #include "misc/lineeditcatchreturnkey.h" 0009 #include "model/commonmessagefilterproxymodel.h" 0010 #include "rocketchataccount.h" 0011 #include "room/messagelistview.h" 0012 #include "searchmessagewithdelaylineedit.h" 0013 #include <KLocalizedString> 0014 #include <QLabel> 0015 #include <QLineEdit> 0016 #include <QVBoxLayout> 0017 0018 #include "config-ruqola.h" 0019 0020 #if HAVE_TEXT_TO_SPEECH 0021 #include <TextEditTextToSpeech/TextToSpeechContainerWidget> 0022 #endif 0023 0024 SearchMessageWidget::SearchMessageWidget(RocketChatAccount *account, QWidget *parent) 0025 : QWidget(parent) 0026 , mSearchLabel(new QLabel(this)) 0027 , mSearchLineEdit(new SearchMessageWithDelayLineEdit(account, this)) 0028 , mResultListWidget(new MessageListView(account, MessageListView::Mode::Viewing, this)) 0029 , mCurrentRocketChatAccount(account) 0030 #if HAVE_TEXT_TO_SPEECH 0031 , mTextToSpeechWidget(new TextEditTextToSpeech::TextToSpeechContainerWidget(this)) 0032 #endif 0033 { 0034 auto mainLayout = new QVBoxLayout(this); 0035 mainLayout->setObjectName(QStringLiteral("mainLayout")); 0036 mainLayout->setContentsMargins({}); 0037 0038 mSearchLineEdit->setObjectName(QStringLiteral("mSearchLineEdit")); 0039 mSearchLineEdit->setPlaceholderText(i18n("Search messages")); 0040 new LineEditCatchReturnKey(mSearchLineEdit, this); 0041 mainLayout->addWidget(mSearchLineEdit); 0042 connect(mSearchLineEdit, &SearchWithDelayLineEdit::searchRequested, this, &SearchMessageWidget::slotSearchMessages); 0043 connect(mSearchLineEdit, &SearchWithDelayLineEdit::searchCleared, this, &SearchMessageWidget::slotClearedMessages); 0044 0045 mSearchLabel->setObjectName(QStringLiteral("mSearchLabel")); 0046 QFont labFont = mSearchLabel->font(); 0047 labFont.setBold(true); 0048 mSearchLabel->setFont(labFont); 0049 mainLayout->addWidget(mSearchLabel); 0050 0051 #if HAVE_TEXT_TO_SPEECH 0052 mTextToSpeechWidget->setObjectName(QStringLiteral("mTextToSpeechWidget")); 0053 mainLayout->addWidget(mTextToSpeechWidget); 0054 connect(mResultListWidget, &MessageListView::textToSpeech, mTextToSpeechWidget, &TextEditTextToSpeech::TextToSpeechContainerWidget::say); 0055 #endif 0056 0057 mResultListWidget->setObjectName(QStringLiteral("mResultListWidget")); 0058 mainLayout->addWidget(mResultListWidget); 0059 connect(mSearchLineEdit, &QLineEdit::returnPressed, this, &SearchMessageWidget::slotSearchLineMessagesEnterPressed); 0060 connect(mResultListWidget, &MessageListView::goToMessageRequested, this, &SearchMessageWidget::goToMessageRequested); 0061 } 0062 0063 SearchMessageWidget::~SearchMessageWidget() 0064 { 0065 if (mCurrentRocketChatAccount) { 0066 mCurrentRocketChatAccount->clearSearchModel(); 0067 } 0068 } 0069 0070 void SearchMessageWidget::slotClearedMessages() 0071 { 0072 mModel->clearModel(); 0073 updateLabel(); 0074 } 0075 0076 void SearchMessageWidget::slotSearchMessages(const QString &str) 0077 { 0078 mModel->setSearchText(str); 0079 mSearchLineEdit->addCompletionItem(str); 0080 mCurrentRocketChatAccount->messageSearch(str, mRoomId, true); 0081 } 0082 0083 void SearchMessageWidget::slotSearchLineMessagesEnterPressed() 0084 { 0085 slotSearchMessages(mSearchLineEdit->text()); 0086 } 0087 0088 QString SearchMessageWidget::roomId() const 0089 { 0090 return mRoomId; 0091 } 0092 0093 void SearchMessageWidget::setRoomId(const QString &roomId) 0094 { 0095 mRoomId = roomId; 0096 } 0097 0098 void SearchMessageWidget::updateLabel() 0099 { 0100 if (mModel->loadCommonMessagesInProgress()) { 0101 mSearchLabel->setText(i18n("Loading...")); 0102 } else if (mSearchLineEdit->text().isEmpty() && mModel->rowCount() == 0) { 0103 mSearchLabel->clear(); 0104 } else { 0105 mSearchLabel->setText(mModel->rowCount() == 0 ? i18n("No Message found") : displayShowSearch()); 0106 } 0107 } 0108 0109 QString SearchMessageWidget::displayShowSearch() const 0110 { 0111 const QString displayMessageStr = i18np("%1 Message in room", "%1 Messages in room", mModel->rowCount()); 0112 return displayMessageStr; 0113 } 0114 0115 RocketChatAccount *SearchMessageWidget::currentRocketChatAccount() const 0116 { 0117 return mCurrentRocketChatAccount; 0118 } 0119 0120 void SearchMessageWidget::setModel(CommonMessageFilterProxyModel *model) 0121 { 0122 mResultListWidget->setModel(model); 0123 mModel = model; 0124 connect(mModel, &CommonMessageFilterProxyModel::stringNotFoundChanged, this, &SearchMessageWidget::updateLabel); 0125 connect(mModel, &CommonMessageFilterProxyModel::loadingInProgressChanged, this, &SearchMessageWidget::updateLabel); 0126 updateLabel(); 0127 } 0128 0129 void SearchMessageWidget::setRoom(Room *room) 0130 { 0131 mResultListWidget->setRoom(room); 0132 } 0133 0134 #include "moc_searchmessagewidget.cpp"