diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index 9db145d0013895d25b5995ecc9b3e3fe6b45bbd0..8a1877f87b860d69fdbdeae6d1f3f8986f9ed67d 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -331,14 +331,14 @@ ConversationsAdapter::onSearchResultUpdated() } void -ConversationsAdapter::onConversationReady(const QString& convId) +ConversationsAdapter::updateConversation(const QString& convId) { // a conversation request has been accepted or a contact has // been added, so select the conversation and notify the UI to: // - switch tabs to the conversation filter tab // - clear search bar - lrcInstance_->selectConversation(convId); Q_EMIT conversationReady(convId); + lrcInstance_->selectConversation(convId); } void @@ -426,51 +426,57 @@ ConversationsAdapter::connectConversationModel() auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::modelChanged, + &ConversationModel::modelChanged, this, &ConversationsAdapter::onModelChanged, Qt::UniqueConnection); QObject::connect(lrcInstance_->getCurrentAccountInfo().contactModel.get(), - &lrc::api::ContactModel::profileUpdated, + &ContactModel::profileUpdated, this, &ConversationsAdapter::onProfileUpdated, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::conversationUpdated, + &ConversationModel::conversationUpdated, this, &ConversationsAdapter::onConversationUpdated, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::filterChanged, + &ConversationModel::filterChanged, this, &ConversationsAdapter::onFilterChanged, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::conversationCleared, + &ConversationModel::conversationCleared, this, &ConversationsAdapter::onConversationCleared, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::searchStatusChanged, + &ConversationModel::searchStatusChanged, this, &ConversationsAdapter::onSearchStatusChanged, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::searchResultUpdated, + &ConversationModel::searchResultUpdated, this, &ConversationsAdapter::onSearchResultUpdated, Qt::UniqueConnection); QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::conversationReady, + &ConversationModel::conversationReady, + this, + &ConversationsAdapter::updateConversation, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::needsSyncingSet, this, - &ConversationsAdapter::onConversationReady, + &ConversationsAdapter::updateConversation, Qt::UniqueConnection); convSrcModel_.reset(new ConversationListModel(lrcInstance_)); diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h index 7b49a346c440a8238f1793c8fbecf9ab8682390a..052a19129d1883a6d8f599132615e1370dbdc793 100644 --- a/src/conversationsadapter.h +++ b/src/conversationsadapter.h @@ -82,7 +82,7 @@ private Q_SLOTS: void onConversationCleared(const QString&); void onSearchStatusChanged(const QString&); void onSearchResultUpdated(); - void onConversationReady(const QString&); + void updateConversation(const QString&); void updateConversationFilterData(); diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index ee1f15d0e3dc83520440946f7d39a28d61eb4fce..618384d533af2aa47a67022f854737a00ae58115 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -119,85 +119,111 @@ MessagesAdapter::setupChatView(const QString& convUid) } void -MessagesAdapter::connectConversationModel() +MessagesAdapter::onNewInteraction(const QString& convUid, + const QString& interactionId, + const lrc::api::interaction::Info& interaction) +{ + auto accountId = lrcInstance_->getCurrentAccountId(); + newInteraction(accountId, convUid, interactionId, interaction); +} + +void +MessagesAdapter::onInteractionStatusUpdated(const QString& convUid, + const QString& interactionId, + const lrc::api::interaction::Info& interaction) { auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); + currentConversationModel->clearUnreadInteractions(convUid); + updateInteraction(*currentConversationModel, interactionId, interaction); +} + +void +MessagesAdapter::onInteractionRemoved(const QString& convUid, const QString& interactionId) +{ + Q_UNUSED(convUid); + removeInteraction(interactionId); +} - QObject::disconnect(newInteractionConnection_); - QObject::disconnect(interactionRemovedConnection_); - QObject::disconnect(interactionStatusUpdatedConnection_); - QObject::disconnect(conversationUpdatedConnection_); - QObject::disconnect(composingConnection_); +void +MessagesAdapter::onNewMessagesAvailable(const QString& accountId, const QString& conversationId) +{ + auto* convModel = lrcInstance_->accountModel().getAccountInfo(accountId).conversationModel.get(); + auto optConv = convModel->getConversationForUid(conversationId); + if (!optConv) + return; + updateHistory(*convModel, optConv->get().interactions, optConv->get().allMessagesLoaded); + Utils::oneShotConnect(qmlObj_, SIGNAL(messagesLoaded()), this, SLOT(slotMessagesLoaded())); +} - newInteractionConnection_ - = QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::newInteraction, - [this](const QString& convUid, - const QString& interactionId, - const lrc::api::interaction::Info& interaction) { - auto accountId = lrcInstance_->getCurrentAccountId(); - newInteraction(accountId, convUid, interactionId, interaction); - }); - - interactionStatusUpdatedConnection_ = QObject::connect( - currentConversationModel, - &lrc::api::ConversationModel::interactionStatusUpdated, - [this](const QString& convUid, - const QString& interactionId, - const lrc::api::interaction::Info& interaction) { - auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); - currentConversationModel->clearUnreadInteractions(convUid); - updateInteraction(*currentConversationModel, interactionId, interaction); - }); - - interactionRemovedConnection_ - = QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::interactionRemoved, - [this](const QString& convUid, const QString& interactionId) { - Q_UNUSED(convUid); - removeInteraction(interactionId); - }); - - newMessagesAvailableConnection_ - = QObject::connect(currentConversationModel, - &ConversationModel::newMessagesAvailable, - [this](const QString& accountId, const QString& conversationId) { - auto* convModel = lrcInstance_->accountModel() - .getAccountInfo(accountId) - .conversationModel.get(); - auto optConv = convModel->getConversationForUid(conversationId); - if (!optConv) - return; - updateHistory(*convModel, - optConv->get().interactions, - optConv->get().allMessagesLoaded); - Utils::oneShotConnect(qmlObj_, - SIGNAL(messagesLoaded()), - this, - SLOT(slotMessagesLoaded())); - }); - - conversationUpdatedConnection_ - = QObject::connect(currentConversationModel, - &ConversationModel::conversationReady, - [this](const QString& conversationId) { - if (conversationId != lrcInstance_->get_selectedConvUid()) - return; - auto* convModel = lrcInstance_->getCurrentConversationModel(); - if (auto optConv = convModel->getConversationForUid(conversationId)) - setConversationProfileData(optConv->get()); - }); - composingConnection_ - = connect(currentConversationModel, - &ConversationModel::composingStatusChanged, - [this](const QString& convUid, const QString& contactUri, bool isComposing) { - if (convUid != lrcInstance_->get_selectedConvUid()) - return; - if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) { - return; - } - contactIsComposing(contactUri, isComposing); - }); +void +MessagesAdapter::updateConversation(const QString& conversationId) +{ + if (conversationId != lrcInstance_->get_selectedConvUid()) + return; + auto* convModel = lrcInstance_->getCurrentConversationModel(); + if (auto optConv = convModel->getConversationForUid(conversationId)) + setConversationProfileData(optConv->get()); +} + +void +MessagesAdapter::onComposingStatusChanged(const QString& convId, + const QString& contactUri, + bool isComposing) +{ + if (convId != lrcInstance_->get_selectedConvUid()) + return; + if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) { + return; + } + contactIsComposing(contactUri, isComposing); +} + +void +MessagesAdapter::connectConversationModel() +{ + auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); + + QObject::connect(currentConversationModel, + &ConversationModel::newInteraction, + this, + &MessagesAdapter::onNewInteraction, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::interactionStatusUpdated, + this, + &MessagesAdapter::onInteractionStatusUpdated, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::interactionRemoved, + this, + &MessagesAdapter::onInteractionRemoved, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::newMessagesAvailable, + this, + &MessagesAdapter::onNewMessagesAvailable, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::conversationReady, + this, + &MessagesAdapter::updateConversation, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::needsSyncingSet, + this, + &MessagesAdapter::updateConversation, + Qt::UniqueConnection); + + QObject::connect(currentConversationModel, + &ConversationModel::composingStatusChanged, + this, + &MessagesAdapter::onComposingStatusChanged, + Qt::UniqueConnection); } void @@ -581,8 +607,9 @@ MessagesAdapter::clearChatView() void MessagesAdapter::setDisplayLinks() { - QString s = QString::fromLatin1("setDisplayLinks(%1);") - .arg(settingsManager_->getValue(Settings::Key::DisplayHyperlinkPreviews).toBool()); + QString s + = QString::fromLatin1("setDisplayLinks(%1);") + .arg(settingsManager_->getValue(Settings::Key::DisplayHyperlinkPreviews).toBool()); QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); } diff --git a/src/messagesadapter.h b/src/messagesadapter.h index ffb0c4e2191b0cde7298c16aa7b482361831bcdf..62ea73a6e8a2ba611f042d9732581236eceef12e 100644 --- a/src/messagesadapter.h +++ b/src/messagesadapter.h @@ -50,7 +50,7 @@ protected: Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& convUid); // JS Q_INVOKABLE. - Q_INVOKABLE void acceptInvitation(const QString& convUid = ""); + Q_INVOKABLE void acceptInvitation(const QString& convId = {}); Q_INVOKABLE void refuseInvitation(const QString& convUid = ""); Q_INVOKABLE void blockConversation(const QString& convUid = ""); Q_INVOKABLE void setNewMessagesContent(const QString& path); @@ -102,11 +102,21 @@ Q_SIGNALS: void contactBanned(); void newInteraction(int type); -public Q_SLOTS: +private Q_SLOTS: void slotSendMessageContentSaved(const QString& content); void slotUpdateDraft(const QString& content); void slotMessagesCleared(); void slotMessagesLoaded(); + void onNewInteraction(const QString& convUid, + const QString& interactionId, + const interaction::Info& interaction); + void onInteractionStatusUpdated(const QString& convUid, + const QString& interactionId, + const interaction::Info& interaction); + void onInteractionRemoved(const QString& convUid, const QString& interactionId); + void onNewMessagesAvailable(const QString& accountId, const QString& conversationId); + void updateConversation(const QString& conversationId); + void onComposingStatusChanged(const QString& uid, const QString& contactUri, bool isComposing); private: void setConversationProfileData(const lrc::api::conversation::Info& convInfo); @@ -120,13 +130,5 @@ private: const QVariantMap chatviewTranslatedStrings_ {lrc::api::chatview::getTranslatedStrings()}; - // Interaction connections. - QMetaObject::Connection newInteractionConnection_; - QMetaObject::Connection interactionStatusUpdatedConnection_; - QMetaObject::Connection interactionRemovedConnection_; - QMetaObject::Connection newMessagesAvailableConnection_; - QMetaObject::Connection conversationUpdatedConnection_; - QMetaObject::Connection composingConnection_; - AppSettingsManager* settingsManager_; };