From eb4af8576544a54bb113006921439bb26045fc23 Mon Sep 17 00:00:00 2001
From: timokoesters <timo@koesters.xyz>
Date: Tue, 19 May 2020 22:56:28 +0200
Subject: [PATCH] fix: riot sometimes freaks out when refreshing

---
 src/database/account_data.rs | 13 +++++++++----
 src/ruma_wrapper.rs          |  7 ++++---
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/database/account_data.rs b/src/database/account_data.rs
index e09ef2cd..d1114ecc 100644
--- a/src/database/account_data.rs
+++ b/src/database/account_data.rs
@@ -22,13 +22,16 @@ impl AccountData {
         }
         json.insert("type".to_owned(), kind.to_string().into());
 
+        let user_id_string = user_id.to_string();
+        let kind_string = kind.to_string();
+
         let mut prefix = room_id
             .map(|r| r.to_string())
             .unwrap_or_default()
             .as_bytes()
             .to_vec();
         prefix.push(0xff);
-        prefix.extend_from_slice(&user_id.to_string().as_bytes());
+        prefix.extend_from_slice(&user_id_string.as_bytes());
         prefix.push(0xff);
 
         // Remove old entry
@@ -40,10 +43,12 @@ impl AccountData {
             .filter_map(|r| r.ok())
             .take_while(|key| key.starts_with(&prefix))
             .find(|key| {
-                key.split(|&b| b == 0xff)
-                    .nth(1)
-                    .filter(|&user| user == user_id.to_string().as_bytes())
+                let user = key.split(|&b| b == 0xff).nth(1);
+                let k = key.rsplit(|&b| b == 0xff).next();
+
+                user.filter(|&user| user == user_id_string.as_bytes())
                     .is_some()
+                    && k.filter(|&k| k == kind_string.as_bytes()).is_some()
             })
         {
             // This is the old room_latest
diff --git a/src/ruma_wrapper.rs b/src/ruma_wrapper.rs
index d6f6cfe8..28e6fbbe 100644
--- a/src/ruma_wrapper.rs
+++ b/src/ruma_wrapper.rs
@@ -135,9 +135,6 @@ where
         match http_response {
             Ok(http_response) => {
                 let mut response = rocket::response::Response::build();
-                response
-                    .sized_body(Cursor::new(http_response.body().clone()))
-                    .await;
 
                 let status = http_response.status();
                 response.raw_status(status.into(), "");
@@ -147,6 +144,10 @@ where
                         .raw_header(header.0.to_string(), header.1.to_str().unwrap().to_owned());
                 }
 
+                response
+                    .sized_body(Cursor::new(http_response.into_body()))
+                    .await;
+
                 response.raw_header("Access-Control-Allow-Origin", "*");
                 response.raw_header(
                     "Access-Control-Allow-Methods",