From 8f06d0258a436ae98de5727e061b5285008eeaf8 Mon Sep 17 00:00:00 2001
From: Guillem Nieto <gnieto.talo@gmail.com>
Date: Fri, 19 Jun 2020 12:19:07 +0200
Subject: [PATCH] Remove `is_direct` flag from Join event

When I was investigating the DM issue, I found that join event contained
the `is_direct` flag. According to the spec, this flag should only be
set on "invite" events, but not on join.

Other homeservers do not have this flag on join.
---
 src/client_server.rs | 35 +++++++----------------------------
 1 file changed, 7 insertions(+), 28 deletions(-)

diff --git a/src/client_server.rs b/src/client_server.rs
index fac0286b..6a9ac772 100644
--- a/src/client_server.rs
+++ b/src/client_server.rs
@@ -1390,34 +1390,13 @@ pub fn join_room_by_id_route(
 
     // TODO: Ask a remote server if we don't have this room
 
-    let event = db
-        .rooms
-        .room_state_get(&body.room_id, &EventType::RoomMember, &user_id.to_string())?
-        .map_or_else(
-            || {
-                // There was no existing membership event
-                Ok::<_, Error>(member::MemberEventContent {
-                    membership: member::MembershipState::Join,
-                    displayname: db.users.displayname(&user_id)?,
-                    avatar_url: db.users.avatar_url(&user_id)?,
-                    is_direct: None,
-                    third_party_invite: None,
-                })
-            },
-            |pdu| {
-                // We change the existing membership event
-                let mut event = serde_json::from_value::<EventJson<member::MemberEventContent>>(
-                    pdu.content.clone(),
-                )
-                .map_err(|_| Error::bad_database("Invalid member event in db."))?
-                .deserialize()
-                .map_err(|_| Error::bad_database("Invalid member event in db."))?;
-                event.membership = member::MembershipState::Join;
-                event.displayname = db.users.displayname(&user_id)?;
-                event.avatar_url = db.users.avatar_url(&user_id)?;
-                Ok(event)
-            },
-        )?;
+    let event = member::MemberEventContent {
+        membership: member::MembershipState::Join,
+        displayname: db.users.displayname(&user_id)?,
+        avatar_url: db.users.avatar_url(&user_id)?,
+        is_direct: None,
+        third_party_invite: None,
+    };
 
     db.rooms.append_pdu(
         body.room_id.clone(),