From 3401eee364d9a41f7f28f2702a4b416a11fb19bc Mon Sep 17 00:00:00 2001
From: Kitsune Ral <Kitsune-Ral@users.sf.net>
Date: Fri, 29 Mar 2019 13:30:03 +0900
Subject: Connection: make sure to mark rooms supposed to be direct chats as
 such

Closes #305. Relies on correct tracking of Invite membership from the previous commit.
---
 lib/connection.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

(limited to 'lib')

diff --git a/lib/connection.cpp b/lib/connection.cpp
index 07c24c92..c09de979 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -609,8 +609,17 @@ CreateRoomJob* Connection::createRoom(RoomVisibility visibility,
                                       : QStringLiteral("private"),
             alias, name, topic, invites, invite3pids, roomVersion,
             creationContent, initialState, presetName, isDirect);
-    connect(job, &BaseJob::success, this, [this,job] {
-        emit createdRoom(provideRoom(job->roomId(), JoinState::Join));
+    connect(job, &BaseJob::success, this, [this,job,invites,isDirect] {
+        auto* room = provideRoom(job->roomId(), JoinState::Join);
+        if (!room)
+        {
+            Q_ASSERT_X(room, "Connection::createRoom", "Failed to create a room");
+            return;
+        }
+        emit createdRoom(room);
+        if (isDirect)
+            for (const auto& i: invites)
+                addToDirectChats(room, user(i));
     });
     return job;
 }
@@ -1161,6 +1170,9 @@ Room* Connection::provideRoom(const QString& id, Omittable<JoinState> joinState)
             emit leftRoom(room, prevInvite);
         if (prevInvite)
         {
+            const auto dcUsers = prevInvite->directChatUsers();
+            for (auto* u: dcUsers)
+                addToDirectChats(room, u);
             qCDebug(MAIN) << "Deleting Invite state for room" << prevInvite->id();
             emit prevInvite->beforeDestruction(prevInvite);
             prevInvite->deleteLater();
-- 
cgit v1.2.3