diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index 02114eb3a9bd5163d0ddbc275c67e7f3bcca9f5f..69d46f9197695cc598572c9a9f7b0de7b983e01b 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -138,6 +138,7 @@ ConversationsAdapter::accountChangedSetUp(const QString &accountId) LRCInstance::getCurrentConversationModel()->setFilter(accountInfo.profileInfo.type); updateConversationsFilterWidget(); + disconnectConversationModel(); connectConversationModel(); } @@ -178,22 +179,20 @@ ConversationsAdapter::setConversationFilter(lrc::api::profile::Type filter) LRCInstance::getCurrentConversationModel()->setFilter(currentTypeFilter_); } +void +ConversationsAdapter::refill() +{ + if (conversationSmartListModel_) + conversationSmartListModel_->fillConversationsList(); +} + + bool -ConversationsAdapter::connectConversationModel() +ConversationsAdapter::connectConversationModel(bool updateFilter) { // Signal connections auto currentConversationModel = LRCInstance::getCurrentConversationModel(); - QObject::disconnect(modelSortedConnection_); - QObject::disconnect(modelUpdatedConnection_); - QObject::disconnect(filterChangedConnection_); - QObject::disconnect(newConversationConnection_); - QObject::disconnect(conversationRemovedConnection_); - QObject::disconnect(conversationClearedConnection); - QObject::disconnect(interactionRemovedConnection_); - QObject::disconnect(searchStatusChangedConnection_); - QObject::disconnect(searchResultUpdatedConnection_); - modelSortedConnection_ = QObject::connect(currentConversationModel, &lrc::api::ConversationModel::modelSorted, [this]() { @@ -271,10 +270,23 @@ ConversationsAdapter::connectConversationModel() QMetaObject::invokeMethod(qmlObj_, "updateConversationSmartListView"); }); - currentConversationModel->setFilter(""); + if (updateFilter) currentConversationModel->setFilter(""); return true; } +void +ConversationsAdapter::disconnectConversationModel() +{ + QObject::disconnect(modelSortedConnection_); + QObject::disconnect(modelUpdatedConnection_); + QObject::disconnect(filterChangedConnection_); + QObject::disconnect(conversationRemovedConnection_); + QObject::disconnect(conversationClearedConnection); + QObject::disconnect(interactionRemovedConnection_); + QObject::disconnect(searchStatusChangedConnection_); + QObject::disconnect(searchResultUpdatedConnection_); +} + void ConversationsAdapter::updateConversationForNewContact(const QString &convUid) { diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h index 1c7178485d1616e4f9bd38265815f431befcfa5b..19cad97f438a7f3974bb4d361594c5b8c32e8a93 100644 --- a/src/conversationsadapter.h +++ b/src/conversationsadapter.h @@ -33,12 +33,14 @@ public: explicit ConversationsAdapter(QObject *parent = nullptr); ~ConversationsAdapter(); - Q_INVOKABLE bool connectConversationModel(); + Q_INVOKABLE bool connectConversationModel(bool updateFilter = true); + Q_INVOKABLE void disconnectConversationModel(); Q_INVOKABLE void selectConversation(const QString &accountId, const QString &convUid, bool preventSendingSignal = true); Q_INVOKABLE void selectConversation(const QString &uid); Q_INVOKABLE void deselectConversation(); + Q_INVOKABLE void refill(); Q_INVOKABLE void accountChangedSetUp(const QString &accountId); Q_INVOKABLE void updateConversationsFilterWidget(); Q_INVOKABLE void setConversationFilter(const QString &type); diff --git a/src/lrcinstance.h b/src/lrcinstance.h index 8e7a618e60c9c5943b66ae13dfe62a6b04f800a6..1da63c1f1d7c7e287b9acd4ff230c5b79df360b3 100644 --- a/src/lrcinstance.h +++ b/src/lrcinstance.h @@ -270,6 +270,8 @@ public: static void setSelectedAccountId(const QString &accountId = {}) { + if (accountId == instance().selectedAccountId_) + return; // No need to select current selected account instance().selectedAccountId_ = accountId; // Last selected account should be set as preferred. diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index a553fbed9c881025f2e88042affe1b382ccc2e12..1ab5a3fc06cda8b2d43f8ab102827aae32483681 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -117,9 +117,14 @@ Window { mainViewStack.push(settingsView, StackView.Immediate) sidePanelViewStack.push(leftPanelSettingsView, StackView.Immediate) } + ConversationsAdapter.disconnectConversationModel() } else { + ConversationsAdapter.connectConversationModel(false) + ConversationsAdapter.refill() // to be sure to have latest informations + mainViewWindowSidePanel.forceUpdateConversationSmartListView() + if (!sidePanelHidden) { sidePanelViewStack.pop(mainViewWindowSidePanel, StackView.Immediate) mainViewStack.pop(StackView.Immediate) diff --git a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml b/src/settingsview/components/CurrentAccountSettingsScrollPage.qml index cefcc09de78ae29154cc5d7c5f35188cd75ac1b3..f885ddc7a440d2c3fa0896a505f84256dae579c5 100644 --- a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml +++ b/src/settingsview/components/CurrentAccountSettingsScrollPage.qml @@ -128,6 +128,7 @@ Rectangle { Connections { id: accountConnections_ContactModel target: ClientWrapper.contactModel + enabled: accountViewRect.visible function onModelUpdated(uri, needsSorted) { updateAndShowBannedContactsSlot() @@ -145,6 +146,7 @@ Rectangle { Connections { id: accountConnections_DeviceModel target: ClientWrapper.deviceModel + enabled: accountViewRect.visible function onDeviceAdded(id) { updateAndShowDevicesSlot()