From b07f7afe9221f671535400e8a20c6795dd432fd9 Mon Sep 17 00:00:00 2001 From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Thu, 27 Aug 2020 16:46:22 -0400 Subject: [PATCH] mainview: fix crash when deleting account Fix the deletion crash issue and remove redundant account changed signals. Gitlab: #17 Change-Id: I1858fa051fd5171e1261dbc35d361631dc3ea01d --- src/accountadapter.cpp | 4 ++-- src/conversationsadapter.cpp | 12 +++++++++++- src/lrcinstance.h | 3 ++- src/mainview/MainView.qml | 14 -------------- src/mainview/components/AccountComboBox.qml | 5 ----- .../components/ConversationSmartListView.qml | 8 -------- src/mainview/components/SidePanel.qml | 6 ------ src/messagesadapter.cpp | 8 -------- src/messagesadapter.h | 1 - .../CurrentAccountSettingsScrollPage.qml | 1 - .../CurrentSIPAccountSettingScrollPage.qml | 1 - src/smartlistmodel.cpp | 2 -- 12 files changed, 15 insertions(+), 50 deletions(-) diff --git a/src/accountadapter.cpp b/src/accountadapter.cpp index 9038999e8..2358ece9a 100644 --- a/src/accountadapter.cpp +++ b/src/accountadapter.cpp @@ -335,10 +335,10 @@ AccountAdapter::setSelectedAccount(const QString &accountId) { LRCInstance::setSelectedAccountId(accountId); - backToWelcomePage(); - connectAccount(accountId); emit accountSignalsReconnect(accountId); + + backToWelcomePage(); } void diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index e077108d3..8d7bb3de7 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -44,6 +44,13 @@ ConversationsAdapter::initQmlObject() [this](const QString &accountId, lrc::api::conversation::Info convInfo) { emit showChatView(accountId, convInfo.uid); }); + + connect(&LRCInstance::instance(), &LRCInstance::currentAccountChanged, + [this]() { + accountChangedSetUp(LRCInstance::getCurrAccId()); + }); + + connectConversationModel(); } void @@ -124,9 +131,12 @@ void ConversationsAdapter::accountChangedSetUp(const QString &accountId) { // Should be called when current account is changed. - auto &accountInfo = LRCInstance::accountModel().getAccountInfo(accountId); + conversationSmartListModel_->setAccount(accountId); + + auto& accountInfo = LRCInstance::accountModel().getAccountInfo(accountId); currentTypeFilter_ = accountInfo.profileInfo.type; LRCInstance::getCurrentConversationModel()->setFilter(accountInfo.profileInfo.type); + updateConversationsFilterWidget(); connectConversationModel(); } diff --git a/src/lrcinstance.h b/src/lrcinstance.h index cc28bad83..eafa7324d 100644 --- a/src/lrcinstance.h +++ b/src/lrcinstance.h @@ -270,12 +270,13 @@ public: setSelectedAccountId(const QString &accountId = {}) { instance().selectedAccountId_ = accountId; - emit instance().currentAccountChanged(); QSettings settings("jami.net", "Jami"); settings.setValue(SettingsKey::selectedAccount, accountId); // Last selected account should be set as preferred. accountModel().setTopAccount(accountId); + + emit instance().currentAccountChanged(); }; static const QString & diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index a271fab10..5f50ed262 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -299,12 +299,6 @@ Window { Connections { target: ClientWrapper.accountAdaptor - function onAccountSignalsReconnect(accountId) { - CallAdapter.connectCallModel(accountId) - mainViewWindowSidePanel.accountSignalsReconnect(accountId) - ConversationsAdapter.accountChangedSetUp(accountId) - } - function onUpdateConversationForAddedContact() { mainViewWindowSidePanel.needToUpdateConversationForAddedContact() } @@ -334,10 +328,6 @@ Window { } } - onNeedToUpdateSmartList: { - mainViewWindowSidePanel.updateSmartList(accountId) - } - onNeedToBackToWelcomePage: { if (!inSettingsView) mainViewWindowSidePanel.accountComboBoxNeedToShowWelcomePage() @@ -525,10 +515,6 @@ Window { qrDialog.updateQrDialog() } - onAccountSignalsReconnect: { - MessagesAdapter.accountChangedSetUp(accountId) - } - onNeedToUpdateConversationForAddedContact: { MessagesAdapter.updateConversationForAddedContact() mainViewWindowSidePanel.clearContactSearchBar() diff --git a/src/mainview/components/AccountComboBox.qml b/src/mainview/components/AccountComboBox.qml index dce72c8ca..6037d436f 100644 --- a/src/mainview/components/AccountComboBox.qml +++ b/src/mainview/components/AccountComboBox.qml @@ -28,7 +28,6 @@ ComboBox { signal accountChanged(int index) signal needToBackToWelcomePage() - signal needToUpdateSmartList(string accountId) signal newAccountButtonClicked signal settingBtnClicked @@ -38,10 +37,6 @@ ComboBox { needToBackToWelcomePage() } - function updateSmartList(accountId) { - needToUpdateSmartList(accountId) - } - // Refresh every item in accountListModel. function updateAccountListModel() { accountListModel.dataChanged(accountListModel.index(0, 0), diff --git a/src/mainview/components/ConversationSmartListView.qml b/src/mainview/components/ConversationSmartListView.qml index d16b96d81..eb7cd0d30 100644 --- a/src/mainview/components/ConversationSmartListView.qml +++ b/src/mainview/components/ConversationSmartListView.qml @@ -74,14 +74,6 @@ ListView { conversationSmartListView.needToBackToWelcomePage() } - - /* - * Update smartlist to accountId. - */ - function updateSmartList(accountId) { - conversationSmartListView.model.setAccount(accountId) - } - ConversationSmartListContextMenu { id: smartListContextMenu } diff --git a/src/mainview/components/SidePanel.qml b/src/mainview/components/SidePanel.qml index 736fecb7e..c861e980b 100644 --- a/src/mainview/components/SidePanel.qml +++ b/src/mainview/components/SidePanel.qml @@ -34,7 +34,6 @@ Rectangle { signal conversationSmartListNeedToAccessMessageWebView(string currentUserDisplayName, string currentUserAlias, string currentUID, bool callStackViewShouldShow, bool isAudioOnly, string callStateStr) signal accountComboBoxNeedToShowWelcomePage() signal conversationSmartListViewNeedToShowWelcomePage - signal accountSignalsReconnect(string accountId) signal needToUpdateConversationForAddedContact signal needToAddNewAccount @@ -115,11 +114,6 @@ Rectangle { conversationSmartListView.updateConversationSmartListView() } - function updateSmartList(accountId) { - conversationSmartListView.currentIndex = -1 - conversationSmartListView.updateSmartList(accountId) - } - /* * Intended -> since strange behavior will happen without this for stackview. */ diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index 37b477f9e..1220aeb45 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -146,14 +146,6 @@ MessagesAdapter::sendContactRequest() } } -void -MessagesAdapter::accountChangedSetUp(const QString &accountId) -{ - Q_UNUSED(accountId) - - connectConversationModel(); -} - void MessagesAdapter::updateConversationForAddedContact() { diff --git a/src/messagesadapter.h b/src/messagesadapter.h index aaf11da72..7a0c2f9e4 100644 --- a/src/messagesadapter.h +++ b/src/messagesadapter.h @@ -35,7 +35,6 @@ public: Q_INVOKABLE void setupChatView(const QString &uid); Q_INVOKABLE void connectConversationModel(); Q_INVOKABLE void sendContactRequest(); - Q_INVOKABLE void accountChangedSetUp(const QString &accountId); Q_INVOKABLE void updateConversationForAddedContact(); /* diff --git a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml b/src/settingsview/components/CurrentAccountSettingsScrollPage.qml index f4fc28500..3a08cbf36 100644 --- a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml +++ b/src/settingsview/components/CurrentAccountSettingsScrollPage.qml @@ -333,7 +333,6 @@ Rectangle { y: (parent.height - height) / 2 onAccepted: { - ClientWrapper.accountAdaptor.setSelectedAccountId() ClientWrapper.accountAdaptor.setSelectedConvId() if(ClientWrapper.utilsAdaptor.getAccountListSize() > 0){ diff --git a/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml b/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml index a4b67ec41..f7f07c35d 100644 --- a/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml +++ b/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml @@ -82,7 +82,6 @@ Rectangle { y: (parent.height - height) / 2 onAccepted: { - ClientWrapper.accountAdaptor.setSelectedAccountId() ClientWrapper.accountAdaptor.setSelectedConvId() if(ClientWrapper.utilsAdaptor.getAccountListSize() > 0){ diff --git a/src/smartlistmodel.cpp b/src/smartlistmodel.cpp index d7783984a..c3957cbb1 100644 --- a/src/smartlistmodel.cpp +++ b/src/smartlistmodel.cpp @@ -410,7 +410,5 @@ SmartListModel::flags(const QModelIndex &index) const void SmartListModel::setAccount(const QString &accountId) { - beginResetModel(); accountId_ = accountId; - endResetModel(); } -- GitLab