From 89d58e5243bee00a40f3f66277fb9e673ff39a03 Mon Sep 17 00:00:00 2001
From: ababi <albert.babi@savoirfairelinux.com>
Date: Fri, 26 Feb 2021 09:42:33 +0100
Subject: [PATCH] misc: check "default moderators" list when removing contact

Avoid having a removed contact on the "default moderators" list.

Gitlab: #309

Change-Id: I710fe3e096be830e3cd9cfc93f2f46fb60eb20f0
---
 src/messagesadapter.cpp | 23 +++++++++++++++++------
 src/messagesadapter.h   |  6 +++---
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index e6f3ee7c7..95f08a566 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -693,17 +693,28 @@ MessagesAdapter::blockConversation(const QString& convUid)
 }
 
 void
-MessagesAdapter::clearConversationHistory(const QString& accountId, const QString& uid)
+MessagesAdapter::clearConversationHistory(const QString& accountId, const QString& convUid)
 {
-    lrcInstance_->getAccountInfo(accountId).conversationModel->clearHistory(uid);
-    if (uid == currentConvUid_)
+    lrcInstance_->getAccountInfo(accountId).conversationModel->clearHistory(convUid);
+    if (convUid == currentConvUid_)
         currentConvUid_.clear();
 }
 
 void
-MessagesAdapter::removeConversation(const QString& accountId, const QString& uid, bool banContact)
+MessagesAdapter::removeConversation(const QString& accountId,
+                                    const QString& convUid,
+                                    bool banContact)
 {
-    lrcInstance_->getAccountInfo(accountId).conversationModel->removeConversation(uid, banContact);
-    if (uid == currentConvUid_)
+    QStringList list = lrcInstance_->accountModel().getDefaultModerators(accountId);
+    const auto& convInfo = lrcInstance_->getConversationFromConvUid(convUid, accountId);
+    const auto contactURI = convInfo.participants.front();
+
+    if (!contactURI.isEmpty() && list.contains(contactURI)) {
+        lrcInstance_->accountModel().setDefaultModerator(accountId, contactURI, false);
+    }
+
+    lrcInstance_->getAccountInfo(accountId).conversationModel->removeConversation(convUid,
+                                                                                 banContact);
+    if (convUid == currentConvUid_)
         currentConvUid_.clear();
 }
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index 1d5773a5d..13d0398c2 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -37,14 +37,14 @@ public:
 protected:
     void safeInit() override;
 
-    Q_INVOKABLE void setupChatView(const QString& uid);
+    Q_INVOKABLE void setupChatView(const QString& convUid);
     Q_INVOKABLE void connectConversationModel();
     Q_INVOKABLE void sendContactRequest();
     Q_INVOKABLE void updateConversationForAddedContact();
     Q_INVOKABLE void removeConversation(const QString& accountId,
-                                        const QString& uid,
+                                        const QString& convUid,
                                         bool banContact = false);
-    Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& uid);
+    Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& convUid);
 
     // JS Q_INVOKABLE.
     Q_INVOKABLE void acceptInvitation(const QString& convUid = "");
-- 
GitLab