diff --git a/src/accountadapter.cpp b/src/accountadapter.cpp index 4f23825de3668c6fb90d509305fff0cfd2b721f3..b031e567b95845cfb5bf4fc55288335949eeea48 100644 --- a/src/accountadapter.cpp +++ b/src/accountadapter.cpp @@ -350,7 +350,6 @@ AccountAdapter::connectAccount(const QString& accountId) QObject::disconnect(accountStatusChangedConnection_); QObject::disconnect(accountProfileUpdatedConnection_); - QObject::disconnect(contactAddedConnection_); QObject::disconnect(addedToConferenceConnection_); QObject::disconnect(bannedStatusChangedConnection_); @@ -368,23 +367,6 @@ AccountAdapter::connectAccount(const QString& accountId) Q_EMIT accountStatusChanged(accountId); }); - contactAddedConnection_ = QObject::connect( - accInfo.contactModel.get(), - &lrc::api::ContactModel::contactAdded, - [this, accountId](const QString& contactUri) { - const auto& convInfo = lrcInstance_->getConversationFromConvUid( - lrcInstance_->get_selectedConvUid()); - if (convInfo.uid.isEmpty()) { - return; - } - auto& accInfo = lrcInstance_->accountModel().getAccountInfo(accountId); - auto selectedContactUri - = accInfo.contactModel->getContact(convInfo.participants.at(0)).profileInfo.uri; - if (contactUri == selectedContactUri) { - Q_EMIT selectedContactAdded(convInfo.uid); - } - }); - addedToConferenceConnection_ = QObject::connect(accInfo.callModel.get(), &NewCallModel::callAddedToConference, diff --git a/src/accountadapter.h b/src/accountadapter.h index 1ea64d5faaafaeea5ce87f66455c5dac7eb9e7f9..bd3ee9f905049da1290aafb4e6a5f36396769bf1 100644 --- a/src/accountadapter.h +++ b/src/accountadapter.h @@ -96,7 +96,6 @@ public: Q_SIGNALS: // Trigger other components to reconnect account related signals. void accountStatusChanged(QString accountId); - void selectedContactAdded(QString convId); // Send report failure to QML to make it show the right UI state . void reportFailure(); @@ -115,7 +114,6 @@ private: QMetaObject::Connection accountStatusChangedConnection_; QMetaObject::Connection accountProfileUpdatedConnection_; - QMetaObject::Connection contactAddedConnection_; QMetaObject::Connection addedToConferenceConnection_; QMetaObject::Connection bannedStatusChangedConnection_; QMetaObject::Connection registeredNameSavedConnection_; diff --git a/src/calladapter.cpp b/src/calladapter.cpp index 454421292e623ae199d8a8e8e86d3aec2e649efa..036e06c36b5ac280787824bfcfbc33e4921f7c10 100644 --- a/src/calladapter.cpp +++ b/src/calladapter.cpp @@ -332,22 +332,14 @@ void CallAdapter::acceptACall(const QString& accountId, const QString& convUid) { const auto& convInfo = lrcInstance_->getConversationFromConvUid(convUid, accountId); - if (!convInfo.uid.isEmpty()) { - lrcInstance_->getAccountInfo(accountId).callModel->accept(convInfo.callId); - auto& accInfo = lrcInstance_->getAccountInfo(convInfo.accountId); - accInfo.callModel->setCurrentCall(convInfo.callId); + if (convInfo.uid.isEmpty()) + return; - auto contactUri = convInfo.participants.front(); - if (contactUri.isEmpty()) { - return; - } - try { - auto& contact = accInfo.contactModel->getContact(contactUri); - if (contact.profileInfo.type == lrc::api::profile::Type::PENDING) { - lrcInstance_->getCurrentConversationModel()->makePermanent(convInfo.uid); - } - } catch (...) { - } + lrcInstance_->getAccountInfo(accountId).callModel->accept(convInfo.callId); + auto& accInfo = lrcInstance_->getAccountInfo(convInfo.accountId); + accInfo.callModel->setCurrentCall(convInfo.callId); + if (convInfo.isRequest) { + lrcInstance_->makeConversationPermanent(convInfo.uid, accountId); } } diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index de175becf57ba233a8da8d4b9365d60018778427..c559d1b69c0b1e26d77260a234253f86d38cbc75 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -116,8 +116,7 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray, auto& convInfo = lrcInstance_->getConversationFromPeerUri(peerUri, accountId); if (convInfo.uid.isEmpty()) return; - lrcInstance_->getAccountInfo(accountId).conversationModel->makePermanent( - convInfo.uid); + lrcInstance_->makeConversationPermanent(convInfo.uid, accountId); }); connect(systemTray_, &SystemTray::refusePendingActivated, @@ -301,12 +300,6 @@ ConversationsAdapter::onFilterChanged() Q_EMIT indexRepositionRequested(); } -void -ConversationsAdapter::onNewConversation(const QString& convUid) -{ - updateConversationForNewContact(convUid); -} - void ConversationsAdapter::onConversationCleared(const QString& convUid) { @@ -330,6 +323,17 @@ ConversationsAdapter::onSearchResultUpdated() searchSrcModel_->onSearchResultsUpdated(); } +void +ConversationsAdapter::onConversationReady(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); +} + void ConversationsAdapter::updateConversationFilterData() { @@ -438,12 +442,6 @@ ConversationsAdapter::connectConversationModel() &ConversationsAdapter::onFilterChanged, Qt::UniqueConnection); - QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::newConversation, - this, - &ConversationsAdapter::onNewConversation, - Qt::UniqueConnection); - QObject::connect(currentConversationModel, &lrc::api::ConversationModel::conversationCleared, this, @@ -462,6 +460,12 @@ ConversationsAdapter::connectConversationModel() &ConversationsAdapter::onSearchResultUpdated, Qt::UniqueConnection); + QObject::connect(currentConversationModel, + &lrc::api::ConversationModel::conversationReady, + this, + &ConversationsAdapter::onConversationReady, + Qt::UniqueConnection); + convSrcModel_.reset(new ConversationListModel(lrcInstance_)); convModel_->bindSourceModel(convSrcModel_.get()); searchSrcModel_.reset(new SearchResultsListModel(lrcInstance_)); @@ -471,26 +475,3 @@ ConversationsAdapter::connectConversationModel() return true; } - -void -ConversationsAdapter::updateConversationForNewContact(const QString& convUid) -{ - auto* convModel = lrcInstance_->getCurrentConversationModel(); - if (convModel == nullptr) { - return; - } - const auto& convInfo = lrcInstance_->getConversationFromConvUid(convUid); - - if (!convInfo.uid.isEmpty() && !convInfo.participants.isEmpty()) { - try { - const auto contact = convModel->owner.contactModel->getContact(convInfo.participants[0]); - if (!contact.profileInfo.uri.isEmpty() - && contact.profileInfo.uri == lrcInstance_->get_selectedConvUid()) { - lrcInstance_->selectConversation(convUid, convInfo.accountId); - convModel_->selectSourceRow(lrcInstance_->indexOf(convUid)); - } - } catch (...) { - return; - } - } -} diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h index eac72404dea42b0c378f761880b1acbf6f1de5e1..7b49a346c440a8238f1793c8fbecf9ab8682390a 100644 --- a/src/conversationsadapter.h +++ b/src/conversationsadapter.h @@ -58,6 +58,7 @@ Q_SIGNALS: void navigateToWelcomePageRequested(); void indexRepositionRequested(); + void conversationReady(const QString& convId); private Q_SLOTS: void onCurrentAccountIdChanged(); @@ -78,10 +79,10 @@ private Q_SLOTS: void onProfileUpdated(const QString&); void onConversationUpdated(const QString&); void onFilterChanged(); - void onNewConversation(const QString&); void onConversationCleared(const QString&); void onSearchStatusChanged(const QString&); void onSearchResultUpdated(); + void onConversationReady(const QString&); void updateConversationFilterData(); diff --git a/src/lrcinstance.cpp b/src/lrcinstance.cpp index a96a5e93538f02a6d5ba49d46344d0e1d5edff2d..f1f07473daba31f95c816ea5af1ceba632d0eeb0 100644 --- a/src/lrcinstance.cpp +++ b/src/lrcinstance.cpp @@ -433,6 +433,19 @@ LRCInstance::deselectConversation() set_selectedConvUid(); } +void +LRCInstance::makeConversationPermanent(const QString& convId, const QString& accountId) +{ + auto aId = accountId.isEmpty() ? currentAccountId_ : accountId; + const auto& accInfo = accountModel().getAccountInfo(aId); + auto cId = convId.isEmpty() ? selectedConvUid_ : convId; + if (cId.isEmpty()) { + qWarning() << Q_FUNC_INFO << "no Id provided"; + return; + } + accInfo.conversationModel.get()->makePermanent(cId); +} + void LRCInstance::finish() { diff --git a/src/lrcinstance.h b/src/lrcinstance.h index b308b4db3294576dbea0c9a87818c9912b6a44f7..c167e49da504b2c5bee72732002988d7b5c819fe 100644 --- a/src/lrcinstance.h +++ b/src/lrcinstance.h @@ -102,6 +102,8 @@ public: Q_INVOKABLE void selectConversation(const QString& convId, const QString& accountId = {}); Q_INVOKABLE void deselectConversation(); + Q_INVOKABLE void makeConversationPermanent(const QString& convId = {}, + const QString& accountId = {}); const QString& getCurrentAccountId(); void setCurrentAccountId(const QString& accountId = {}); diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index 48c7e11473d99e34f8a3f24870eb57cc109f3ae6..f8f7a5540a4e9b7b4bd91748aa88a488d3622f42 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -416,14 +416,6 @@ Rectangle { visible: false - Connections { - target: MessagesAdapter - - function onInvitationAccepted() { - mainViewSidePanel.selectTab(SidePanelTabBar.Conversations) - } - } - Component.onCompleted: { recordBox.x = Qt.binding(function() { var i = ((mainViewStack.visible && mainViewStack.width > 1000) ? @@ -586,7 +578,7 @@ Rectangle { sequence: "Ctrl+Shift+A" context: Qt.ApplicationShortcut onActivated: { - UtilsAdapter.makePermanentCurrentConv() + LRCInstance.makeConversationPermanent() communicationPageMessageWebView.setSendContactRequestButtonVisible(false) } } diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml index 0dda8d6655337c025ffe0f4ff457246b4ae596dc..50fddca9b111454222686e30907288255b934000 100644 --- a/src/mainview/components/MessageWebView.qml +++ b/src/mainview/components/MessageWebView.qml @@ -115,14 +115,6 @@ Rectangle { } } - Connections { - target: AccountAdapter - - function onSelectedContactAdded(convId) { - MessagesAdapter.updateConversationForAddedContact() - } - } - JamiFileDialog { id: jamiFileDialog diff --git a/src/mainview/components/MessageWebViewHeader.qml b/src/mainview/components/MessageWebViewHeader.qml index 44b1abf0c3cf515375d36d378080984e5217e340..161474d261a3fb6b4557494786b716901af857d6 100644 --- a/src/mainview/components/MessageWebViewHeader.qml +++ b/src/mainview/components/MessageWebViewHeader.qml @@ -154,7 +154,7 @@ Rectangle { imageColor: JamiTheme.chatviewButtonColor onClicked: { - MessagesAdapter.sendContactRequest() + MessagesAdapter.sendConversationRequest() CallAdapter.placeAudioOnlyCall() communicationPageMessageWebView.setSendContactRequestButtonVisible(false) } @@ -177,7 +177,7 @@ Rectangle { imageColor: JamiTheme.chatviewButtonColor onClicked: { - MessagesAdapter.sendContactRequest() + MessagesAdapter.sendConversationRequest() CallAdapter.placeCall() communicationPageMessageWebView.setSendContactRequestButtonVisible(false) } @@ -217,7 +217,7 @@ Rectangle { imageColor: JamiTheme.chatviewButtonColor onClicked: { - MessagesAdapter.sendContactRequest() + MessagesAdapter.sendConversationRequest() visible = false } } diff --git a/src/mainview/components/SidePanel.qml b/src/mainview/components/SidePanel.qml index 6e7bdf1e23af9c53af068404014c01148dc257fc..8cc214e177e116d02f052a20d5c2c38290cc1816 100644 --- a/src/mainview/components/SidePanel.qml +++ b/src/mainview/components/SidePanel.qml @@ -36,18 +36,18 @@ Rectangle { anchors.fill: parent Connections { - target: AccountAdapter + target: LRCInstance - function onSelectedContactAdded(convId) { + function onCurrentAccountIdChanged() { clearContactSearchBar() - LRCInstance.selectConversation(convId) } } Connections { - target: LRCInstance + target: ConversationsAdapter - function onCurrentAccountIdChanged() { + function onConversationReady() { + selectTab(SidePanelTabBar.Conversations) clearContactSearchBar() } } diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index c33d7288f783aa25c525913b2a238df5b87d9996..067ddce22934b723d8ef70b3801ca4f909713b12 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -200,24 +200,9 @@ MessagesAdapter::connectConversationModel() } void -MessagesAdapter::sendContactRequest() +MessagesAdapter::sendConversationRequest() { - const auto convUid = lrcInstance_->get_selectedConvUid(); - if (!convUid.isEmpty()) { - lrcInstance_->getCurrentConversationModel()->makePermanent(convUid); - } -} - -void -MessagesAdapter::updateConversationForAddedContact() -{ - auto convModel = lrcInstance_->getCurrentConversationModel(); - const auto& convInfo = lrcInstance_->getConversationFromConvUid( - lrcInstance_->get_selectedConvUid()); - - clear(); - setConversationProfileData(convInfo); - // printHistory(*convModel, convInfo.interactions); + lrcInstance_->makeConversationPermanent(); } void @@ -231,7 +216,7 @@ MessagesAdapter::slotSendMessageContentSaved(const QString& content) Utils::oneShotConnect(qmlObj_, SIGNAL(messagesCleared()), this, SLOT(slotMessagesCleared())); setInvitation(false); - clear(); + clearChatView(); auto restoredContent = lrcInstance_->getContentDraft(lrcInstance_->get_selectedConvUid(), lrcInstance_->getCurrentAccountId()); setSendMessageContent(restoredContent); @@ -586,7 +571,7 @@ MessagesAdapter::setIsSwarm(bool isSwarm) } void -MessagesAdapter::clear() +MessagesAdapter::clearChatView() { QString s = QString::fromLatin1("clearMessages();"); QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); @@ -733,11 +718,9 @@ MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUr void MessagesAdapter::acceptInvitation(const QString& convUid) { - const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid; - lrcInstance_->getCurrentConversationModel()->makePermanent(currentConvUid); + lrcInstance_->makeConversationPermanent(convUid); if (convUid == currentConvUid_) currentConvUid_.clear(); - Q_EMIT invitationAccepted(); } void diff --git a/src/messagesadapter.h b/src/messagesadapter.h index 43d767657980212a1bdf7850329ea574c68e1c71..bc80e7409b3c0c6ef8a30282bec36e2ee71f5bef 100644 --- a/src/messagesadapter.h +++ b/src/messagesadapter.h @@ -43,8 +43,7 @@ protected: Q_INVOKABLE void setupChatView(const QString& convUid); Q_INVOKABLE void connectConversationModel(); - Q_INVOKABLE void sendContactRequest(); - Q_INVOKABLE void updateConversationForAddedContact(); + Q_INVOKABLE void sendConversationRequest(); Q_INVOKABLE void removeConversation(const QString& accountId, const QString& convUid, bool banContact = false); @@ -81,7 +80,7 @@ protected: bool isSwarm = false, bool needsSyncing = false); void setIsSwarm(bool isSwarm); - void clear(); + void clearChatView(); void printHistory(ConversationModel& conversationModel, MessagesList interactions); void updateHistory(ConversationModel& conversationModel, MessagesList interactions, @@ -101,7 +100,6 @@ protected: Q_SIGNALS: void contactBanned(); - void invitationAccepted(); void newInteraction(int type); public Q_SLOTS: diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp index d126b24f984f883546a9b0335d0c63b4326a0380..dce5462859b99455b131c7c01ec2f20ca1c90e53 100644 --- a/src/utilsadapter.cpp +++ b/src/utilsadapter.cpp @@ -156,12 +156,6 @@ UtilsAdapter::getCurrConvId() return lrcInstance_->get_selectedConvUid(); } -void -UtilsAdapter::makePermanentCurrentConv() -{ - lrcInstance_->getCurrentConversationModel()->makePermanent(lrcInstance_->get_selectedConvUid()); -} - const QStringList UtilsAdapter::getCurrAccList() { diff --git a/src/utilsadapter.h b/src/utilsadapter.h index 7df967637b78455a4f636eaec1dccc53f5ae5227..11a53f7c630030bdbd98c21682ee5c501c26ba10 100644 --- a/src/utilsadapter.h +++ b/src/utilsadapter.h @@ -54,7 +54,6 @@ public: Q_INVOKABLE QString getBestId(const QString& accountId); Q_INVOKABLE const QString getBestId(const QString& accountId, const QString& uid); Q_INVOKABLE const QString getCurrConvId(); - Q_INVOKABLE void makePermanentCurrentConv(); Q_INVOKABLE const QStringList getCurrAccList(); Q_INVOKABLE int getAccountListSize(); Q_INVOKABLE bool hasCall(const QString& accountId);