[fractal] chore: update dependencies



commit d4f3a7005b8c37b8ed870e4fa8206174d5adbedf
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Mon Sep 12 12:08:40 2022 +0200

    chore: update dependencies
    
    Part-of: <https://gitlab.gnome.org/GNOME/fractal/-/merge_requests/1152>

 Cargo.lock                                         | 608 +++++++++++----------
 Cargo.toml                                         |   3 +-
 src/contrib/qr_code_scanner/qr_code_detector.rs    |  48 +-
 .../account_settings/devices_page/device.rs        |   2 +-
 src/session/account_settings/user_page/mod.rs      |  14 +-
 src/session/avatar.rs                              |   7 +-
 src/session/content/room_history/item_row.rs       |   4 +-
 .../content/room_history/message_row/audio.rs      |   2 +-
 .../content/room_history/message_row/media.rs      |   6 +-
 src/session/mod.rs                                 |  72 ++-
 src/session/room/event/mod.rs                      |  22 +-
 src/session/room/event/supported_event.rs          |  58 +-
 src/session/room/event/unsupported_event.rs        |   8 +-
 src/session/room/member.rs                         |   2 +-
 src/session/room/member_list.rs                    |   2 +-
 src/session/room/mod.rs                            |  82 ++-
 src/session/room/timeline/mod.rs                   |   6 +-
 src/session/room_creation/mod.rs                   |  10 +-
 src/session/room_list.rs                           |   7 +-
 src/session/user.rs                                |   2 +-
 src/session/verification/verification_list.rs      |   8 +-
 21 files changed, 529 insertions(+), 444 deletions(-)
---
diff --git a/Cargo.lock b/Cargo.lock
index dabd2ab31..40a965786 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -48,18 +48,18 @@ dependencies = [
 
 [[package]]
 name = "aho-corasick"
-version = "0.7.18"
+version = "0.7.19"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "ammonia"
-version = "3.2.0"
+version = "3.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d5ed2509ee88cc023cccee37a6fab35826830fe8b748b3869790e7720c2c4a74"
+checksum = "4b477377562f3086b7778d241786e9406b883ccfaa03557c0fe0924b9349f13a"
 dependencies = [
  "html5ever 0.26.0",
  "maplit",
@@ -68,6 +68,15 @@ dependencies = [
  "url",
 ]
 
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "ansi_term"
 version = "0.12.1"
@@ -79,9 +88,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.59"
+version = "1.0.64"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c91f1f46651137be86f3a2b9a8359f9ab421d04d941c62b5982e1ca21113adf9"
+checksum = "b9a8f622bcf6ff3df478e9deba3e03e4e04b300f8e6a139e192c05fa3490afc7"
 
 [[package]]
 name = "anymap2"
@@ -143,9 +152,9 @@ dependencies = [
 
 [[package]]
 name = "async-channel"
-version = "1.6.1"
+version = "1.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28"
 dependencies = [
  "concurrent-queue",
  "event-listener",
@@ -168,10 +177,11 @@ dependencies = [
 
 [[package]]
 name = "async-io"
-version = "1.7.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07"
+checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7"
 dependencies = [
+ "autocfg",
  "concurrent-queue",
  "futures-lite",
  "libc",
@@ -206,9 +216,9 @@ version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -227,9 +237,9 @@ version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -244,9 +254,9 @@ version = "0.1.57"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -297,9 +307,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
 
 [[package]]
 name = "base64ct"
-version = "1.5.1"
+version = "1.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3bdca834647821e0b13d9539a8634eb62d3501b6b6c2cec1722786ee6671b851"
+checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474"
 
 [[package]]
 name = "bindgen"
@@ -316,8 +326,8 @@ dependencies = [
  "lazycell",
  "log",
  "peeking_take_while",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "regex",
  "rustc-hash",
  "shlex",
@@ -361,9 +371,9 @@ dependencies = [
 
 [[package]]
 name = "block-buffer"
-version = "0.10.2"
+version = "0.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
 dependencies = [
  "generic-array",
 ]
@@ -379,15 +389,15 @@ dependencies = [
 
 [[package]]
 name = "bumpalo"
-version = "3.10.0"
+version = "3.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
 
 [[package]]
 name = "bytemuck"
-version = "1.11.0"
+version = "1.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835"
+checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da"
 
 [[package]]
 name = "byteorder"
@@ -509,11 +519,11 @@ checksum = "17cc5e6b5ab06331c33589842070416baa137e8b0eb912b008cfd4a78ada7919"
 
 [[package]]
 name = "chrono"
-version = "0.4.19"
+version = "0.4.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
 dependencies = [
- "libc",
+ "iana-time-zone",
  "num-integer",
  "num-traits",
  "winapi",
@@ -615,9 +625,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.2"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
 dependencies = [
  "libc",
 ]
@@ -727,10 +737,10 @@ checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f"
 dependencies = [
  "fnv",
  "ident_case",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "strsim 0.10.0",
- "syn 1.0.98",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -740,19 +750,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5"
 dependencies = [
  "darling_core",
- "quote 1.0.20",
- "syn 1.0.98",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
 name = "dashmap"
-version = "5.3.4"
+version = "5.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f"
+checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
 dependencies = [
  "cfg-if 1.0.0",
  "hashbrown 0.12.3",
  "lock_api",
+ "once_cell",
  "parking_lot_core 0.9.3",
 ]
 
@@ -781,9 +792,9 @@ version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -802,9 +813,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4"
 dependencies = [
  "darling",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -814,7 +825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68"
 dependencies = [
  "derive_builder_core",
- "syn 1.0.98",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -832,7 +843,7 @@ version = "0.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
 dependencies = [
- "block-buffer 0.10.2",
+ "block-buffer 0.10.3",
  "crypto-common",
  "subtle",
 ]
@@ -857,15 +868,21 @@ dependencies = [
  "winapi",
 ]
 
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
 [[package]]
 name = "displaydoc"
 version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -895,9 +912,9 @@ dependencies = [
 
 [[package]]
 name = "either"
-version = "1.7.0"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
 
 [[package]]
 name = "encoding_rs"
@@ -924,9 +941,9 @@ version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -1011,11 +1028,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.0.1"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
 dependencies = [
- "matches",
  "percent-encoding",
 ]
 
@@ -1049,6 +1065,7 @@ dependencies = [
  "qrcode",
  "rand 0.8.5",
  "regex",
+ "rqrr",
  "ruma",
  "serde",
  "serde_json",
@@ -1093,9 +1110,9 @@ dependencies = [
 
 [[package]]
 name = "futures"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
+checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -1108,9 +1125,9 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -1118,15 +1135,15 @@ dependencies = [
 
 [[package]]
 name = "futures-core"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
+checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -1135,9 +1152,9 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
 
 [[package]]
 name = "futures-lite"
@@ -1156,32 +1173,45 @@ dependencies = [
 
 [[package]]
 name = "futures-macro"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
+]
+
+[[package]]
+name = "futures-signals"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "a3acc659ba666cff13fdf65242d16428f2f11935b688f82e4024ad39667a5132"
+dependencies = [
+ "discard",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "pin-project",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
 
 [[package]]
 name = "futures-task"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
 
 [[package]]
 name = "futures-util"
-version = "0.3.21"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -1342,9 +1372,9 @@ dependencies = [
 
 [[package]]
 name = "generic-array"
-version = "0.14.5"
+version = "0.14.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
 dependencies = [
  "typenum",
  "version_check",
@@ -1466,9 +1496,9 @@ dependencies = [
  "heck",
  "proc-macro-crate",
  "proc-macro-error",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -1738,10 +1768,10 @@ dependencies = [
  "anyhow",
  "proc-macro-crate",
  "proc-macro-error",
- "proc-macro2 1.0.42",
+ "proc-macro2 1.0.43",
  "quick-xml",
- "quote 1.0.20",
- "syn 1.0.98",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -1765,9 +1795,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
 dependencies = [
  "bytes",
  "fnv",
@@ -1778,7 +1808,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.3",
+ "tokio-util 0.7.4",
  "tracing",
 ]
 
@@ -1802,9 +1832,9 @@ dependencies = [
 
 [[package]]
 name = "headers"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
 dependencies = [
  "base64",
  "bitflags",
@@ -1813,7 +1843,7 @@ dependencies = [
  "http",
  "httpdate",
  "mime",
- "sha-1",
+ "sha1 0.10.4",
 ]
 
 [[package]]
@@ -1889,9 +1919,9 @@ dependencies = [
  "log",
  "mac",
  "markup5ever 0.10.1",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -1903,9 +1933,9 @@ dependencies = [
  "log",
  "mac",
  "markup5ever 0.11.0",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -1932,9 +1962,9 @@ dependencies = [
 
 [[package]]
 name = "httparse"
-version = "1.7.1"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
 
 [[package]]
 name = "httpdate"
@@ -1985,6 +2015,20 @@ dependencies = [
  "tokio-native-tls",
 ]
 
+[[package]]
+name = "iana-time-zone"
+version = "0.1.47"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "js-sys",
+ "once_cell",
+ "wasm-bindgen",
+ "winapi",
+]
+
 [[package]]
 name = "ident_case"
 version = "1.0.1"
@@ -1993,11 +2037,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "idna"
-version = "0.2.3"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
 dependencies = [
- "matches",
  "unicode-bidi",
  "unicode-normalization",
 ]
@@ -2024,8 +2067,7 @@ dependencies = [
 [[package]]
 name = "indexed_db_futures"
 version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d26ac735f676c52305becf53264b91cea9866a8de61ccbf464405b377b9cbca9"
+source = 
"git+https://github.com/Hywan/rust-indexed-db?branch=feat-factory-nodejs#5dab67890cea0ab88b967031adc09179a537d77c";
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -2085,9 +2127,9 @@ dependencies = [
 
 [[package]]
 name = "itoa"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
 
 [[package]]
 name = "jpeg-decoder"
@@ -2100,9 +2142,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.59"
+version = "0.3.60"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -2172,9 +2214,9 @@ dependencies = [
 
 [[package]]
 name = "libc"
-version = "0.2.126"
+version = "0.2.132"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
 
 [[package]]
 name = "libloading"
@@ -2294,9 +2336,9 @@ dependencies = [
 
 [[package]]
 name = "lock_api"
-version = "0.4.7"
+version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -2390,16 +2432,10 @@ dependencies = [
  "xml5ever",
 ]
 
-[[package]]
-name = "matches"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-
 [[package]]
 name = "matrix-sdk"
 version = "0.5.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "anymap2",
  "async-once-cell",
@@ -2409,7 +2445,9 @@ dependencies = [
  "bytes",
  "dashmap",
  "event-listener",
+ "futures-channel",
  "futures-core",
+ "futures-signals",
  "futures-util",
  "http",
  "matrix-sdk-base",
@@ -2435,13 +2473,14 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-base"
 version = "0.5.1"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "async-stream",
  "async-trait",
  "dashmap",
  "futures-channel",
  "futures-core",
+ "futures-signals",
  "futures-util",
  "lru 0.7.8",
  "matrix-sdk-common",
@@ -2458,7 +2497,7 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-common"
 version = "0.5.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "async-lock",
  "futures-core",
@@ -2474,7 +2513,7 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-crypto"
 version = "0.5.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "aes",
  "async-trait",
@@ -2493,7 +2532,7 @@ dependencies = [
  "ruma",
  "serde",
  "serde_json",
- "sha2 0.10.2",
+ "sha2 0.10.5",
  "thiserror",
  "tokio",
  "tracing",
@@ -2504,7 +2543,7 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-indexeddb"
 version = "0.1.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "anyhow",
  "async-trait",
@@ -2530,13 +2569,11 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-qrcode"
 version = "0.3.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "base64",
  "byteorder",
- "image",
  "qrcode",
- "rqrr",
  "ruma-common",
  "thiserror",
  "vodozemac",
@@ -2545,7 +2582,7 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-sled"
 version = "0.1.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "async-stream",
  "async-trait",
@@ -2570,7 +2607,7 @@ dependencies = [
 [[package]]
 name = "matrix-sdk-store-encryption"
 version = "0.1.0"
-source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#165973121c7aba84c124ece2878b251921586603";
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#97995b7bf6ac5d5810016458510ae02eb87de86b";
 dependencies = [
  "blake3",
  "chacha20poly1305",
@@ -2580,7 +2617,7 @@ dependencies = [
  "rand 0.8.5",
  "serde",
  "serde_json",
- "sha2 0.10.2",
+ "sha2 0.10.5",
  "thiserror",
  "zeroize",
 ]
@@ -2797,9 +2834,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
 dependencies = [
  "proc-macro-crate",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -2833,9 +2870,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.13.0"
+version = "1.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
 
 [[package]]
 name = "opaque-debug"
@@ -2864,9 +2901,9 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -2999,9 +3036,9 @@ dependencies = [
 
 [[package]]
 name = "paste"
-version = "1.0.7"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
+checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
 
 [[package]]
 name = "pbkdf2"
@@ -3012,7 +3049,7 @@ dependencies = [
  "digest 0.10.3",
  "hmac",
  "password-hash",
- "sha2 0.10.2",
+ "sha2 0.10.5",
 ]
 
 [[package]]
@@ -3023,15 +3060,15 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
 
 [[package]]
 name = "percent-encoding"
-version = "2.1.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
 
 [[package]]
 name = "pest"
-version = "2.2.1"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "69486e2b8c2d2aeb9762db7b4e00b0331156393555cff467f4163ff06821eef8"
+checksum = "cb779fcf4bb850fbbb0edc96ff6cf34fd90c4b1a112ce042653280d9a7364048"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -3115,22 +3152,22 @@ dependencies = [
 
 [[package]]
 name = "pin-project"
-version = "1.0.11"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.0.11"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -3204,10 +3241,11 @@ dependencies = [
 
 [[package]]
 name = "polling"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011"
 dependencies = [
+ "autocfg",
  "cfg-if 1.0.0",
  "libc",
  "log",
@@ -3246,10 +3284,11 @@ checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5"
 
 [[package]]
 name = "proc-macro-crate"
-version = "1.1.3"
+version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
 dependencies = [
+ "once_cell",
  "thiserror",
  "toml",
 ]
@@ -3261,9 +3300,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
 dependencies = [
  "proc-macro-error-attr",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
  "version_check",
 ]
 
@@ -3273,8 +3312,8 @@ version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "version_check",
 ]
 
@@ -3289,9 +3328,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.42"
+version = "1.0.43"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
 dependencies = [
  "unicode-ident",
 ]
@@ -3314,9 +3353,9 @@ checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
 dependencies = [
  "anyhow",
  "itertools",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -3360,11 +3399,11 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.20"
+version = "1.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
 dependencies = [
- "proc-macro2 1.0.42",
+ "proc-macro2 1.0.43",
 ]
 
 [[package]]
@@ -3570,10 +3609,11 @@ dependencies = [
 [[package]]
 name = "ruma"
 version = "0.6.3"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "assign",
  "js_int",
+ "js_option",
  "ruma-client-api",
  "ruma-common",
  "ruma-federation-api",
@@ -3583,7 +3623,7 @@ dependencies = [
 [[package]]
 name = "ruma-client-api"
 version = "0.14.1"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "assign",
  "bytes",
@@ -3599,7 +3639,7 @@ dependencies = [
 [[package]]
 name = "ruma-common"
 version = "0.9.2"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "base64",
  "bytes",
@@ -3629,7 +3669,7 @@ dependencies = [
 [[package]]
 name = "ruma-federation-api"
 version = "0.5.0"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3640,7 +3680,7 @@ dependencies = [
 [[package]]
 name = "ruma-identifiers-validation"
 version = "0.8.1"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "js_int",
  "thiserror",
@@ -3649,22 +3689,22 @@ dependencies = [
 [[package]]
 name = "ruma-macros"
 version = "0.9.2"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "once_cell",
  "proc-macro-crate",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "ruma-identifiers-validation",
  "serde",
- "syn 1.0.98",
+ "syn 1.0.99",
  "toml",
 ]
 
 [[package]]
 name = "ruma-push-gateway-api"
 version = "0.5.0"
-source = 
"git+https://github.com/ruma/ruma?rev=ca8c66c885241a7ba3805399604eda4a38979f6b#ca8c66c885241a7ba3805399604eda4a38979f6b";
+source = 
"git+https://github.com/ruma/ruma?rev=c745d3baf720b38a254e640a526717864e87a065#c745d3baf720b38a254e640a526717864e87a065";
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3689,9 +3729,9 @@ dependencies = [
 
 [[package]]
 name = "ryu"
-version = "1.0.10"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
 
 [[package]]
 name = "schannel"
@@ -3723,9 +3763,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 [[package]]
 name = "security-framework"
-version = "2.6.1"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
 dependencies = [
  "bitflags",
  "core-foundation",
@@ -3764,38 +3804,38 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.141"
+version = "1.0.144"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7af873f2c95b99fcb0bd0fe622a43e29514658873c8ceba88c4cb88833a22500"
+checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_bytes"
-version = "0.11.6"
+version = "0.11.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54"
+checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.141"
+version = "1.0.144"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "75743a150d003dd863b51dc809bcad0d73f2102c53632f1e954e738192a3413f"
+checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.82"
+version = "1.0.85"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
 dependencies = [
  "itoa",
  "ryu",
@@ -3804,13 +3844,13 @@ dependencies = [
 
 [[package]]
 name = "serde_repr"
-version = "0.1.8"
+version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed"
+checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -3826,23 +3866,23 @@ dependencies = [
 ]
 
 [[package]]
-name = "sha-1"
-version = "0.10.0"
+name = "sha1"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
 dependencies = [
- "cfg-if 1.0.0",
- "cpufeatures",
- "digest 0.10.3",
+ "sha1_smol",
 ]
 
 [[package]]
 name = "sha1"
-version = "0.6.1"
+version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+checksum = "006769ba83e921b3085caa8334186b00cf92b4cb1a6cf4632fbccc8eff5c7549"
 dependencies = [
- "sha1_smol",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.3",
 ]
 
 [[package]]
@@ -3866,9 +3906,9 @@ dependencies = [
 
 [[package]]
 name = "sha2"
-version = "0.10.2"
+version = "0.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+checksum = "cf9db03534dff993187064c4e0c05a5708d2a9728ace9a8959b77bedf415dac5"
 dependencies = [
  "cfg-if 1.0.0",
  "cpufeatures",
@@ -3902,9 +3942,9 @@ dependencies = [
 
 [[package]]
 name = "signature"
-version = "1.5.0"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4"
+checksum = "f0ea32af43239f0d353a7dd75a22d94c329c8cdaafdcb4c1c1335aa10c298a4a"
 
 [[package]]
 name = "siphasher"
@@ -3945,9 +3985,9 @@ checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
 
 [[package]]
 name = "socket2"
-version = "0.4.4"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
 dependencies = [
  "libc",
  "winapi",
@@ -4026,8 +4066,8 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
 dependencies = [
  "phf_generator 0.10.0",
  "phf_shared 0.10.0",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
 ]
 
 [[package]]
@@ -4061,12 +4101,12 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "1.0.98"
+version = "1.0.99"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "unicode-ident",
 ]
 
@@ -4076,9 +4116,9 @@ version = "0.12.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
  "unicode-xid 0.2.3",
 ]
 
@@ -4146,22 +4186,22 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.31"
+version = "1.0.34"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+checksum = "8c1b05ca9d106ba7d2e31a9dab4a64e7be2cce415321966ea3132c49a656e252"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.31"
+version = "1.0.34"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+checksum = "e8f2591983642de85c921015f3f070c665a197ed69e417af436115e3a1407487"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -4212,9 +4252,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
 
 [[package]]
 name = "tokio"
-version = "1.20.1"
+version = "1.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581"
+checksum = "89797afd69d206ccd11fb0ea560a44bbb87731d020670e79416d442919257d42"
 dependencies = [
  "autocfg",
  "bytes",
@@ -4277,9 +4317,9 @@ dependencies = [
 
 [[package]]
 name = "tokio-util"
-version = "0.7.3"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
 dependencies = [
  "bytes",
  "futures-core",
@@ -4323,9 +4363,9 @@ version = "0.1.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -4377,9 +4417,9 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
 
 [[package]]
 name = "ucd-trie"
-version = "0.1.4"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
 
 [[package]]
 name = "uds_windows"
@@ -4408,9 +4448,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
+checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
 
 [[package]]
 name = "unicode-normalization"
@@ -4451,13 +4491,12 @@ dependencies = [
 
 [[package]]
 name = "url"
-version = "2.2.2"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
 dependencies = [
  "form_urlencoded",
  "idna",
- "matches",
  "percent-encoding",
 ]
 
@@ -4518,7 +4557,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 [[package]]
 name = "vodozemac"
 version = "0.2.0"
-source = 
"git+https://github.com/matrix-org/vodozemac/?rev=18bcbc3359298894415931547ea41abb75af2d4a#18bcbc3359298894415931547ea41abb75af2d4a";
+source = 
"git+https://github.com/matrix-org/vodozemac/?rev=ad1f098aff2a0b69aa5822c4e0679089a9fa4a86#ad1f098aff2a0b69aa5822c4e0679089a9fa4a86";
 dependencies = [
  "aes",
  "arrayvec",
@@ -4532,7 +4571,8 @@ dependencies = [
  "rand 0.7.3",
  "serde",
  "serde_json",
- "sha2 0.10.2",
+ "sha2 0.10.5",
+ "subtle",
  "thiserror",
  "x25519-dalek",
  "zeroize",
@@ -4608,9 +4648,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
 dependencies = [
  "cfg-if 1.0.0",
  "serde",
@@ -4620,24 +4660,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.32"
+version = "0.4.33"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -4647,32 +4687,32 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
 dependencies = [
- "quote 1.0.20",
+ "quote 1.0.21",
  "wasm-bindgen-macro-support",
 ]
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
 
 [[package]]
 name = "wasm-timer"
@@ -4691,9 +4731,9 @@ dependencies = [
 
 [[package]]
 name = "web-sys"
-version = "0.3.59"
+version = "0.3.60"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -4716,13 +4756,13 @@ dependencies = [
 
 [[package]]
 name = "which"
-version = "4.2.5"
+version = "4.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae"
+checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
 dependencies = [
  "either",
- "lazy_static",
  "libc",
+ "once_cell",
 ]
 
 [[package]]
@@ -4868,7 +4908,7 @@ dependencies = [
  "rand 0.8.5",
  "serde",
  "serde_repr",
- "sha1",
+ "sha1 0.6.1",
  "static_assertions",
  "tracing",
  "uds_windows",
@@ -4885,10 +4925,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6"
 dependencies = [
  "proc-macro-crate",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
  "regex",
- "syn 1.0.98",
+ "syn 1.0.99",
 ]
 
 [[package]]
@@ -4917,9 +4957,9 @@ version = "1.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17"
 dependencies = [
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
  "synstructure",
 ]
 
@@ -4944,7 +4984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430"
 dependencies = [
  "proc-macro-crate",
- "proc-macro2 1.0.42",
- "quote 1.0.20",
- "syn 1.0.98",
+ "proc-macro2 1.0.43",
+ "quote 1.0.21",
+ "syn 1.0.99",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index 0be2a9ded..d053f37ea 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -49,6 +49,7 @@ regex = "1.5.4"
 mime_guess = "2.0.3"
 num_enum = "0.5.6"
 thiserror = "1.0.25"
+rqrr = "0.4.0"
 
 [dependencies.sourceview]
 package = "sourceview5"
@@ -74,5 +75,5 @@ features = ["socks", "sso-login", "markdown", "qrcode", "experimental-timeline"]
 
 [dependencies.ruma]
 git = "https://github.com/ruma/ruma";
-rev = "ca8c66c885241a7ba3805399604eda4a38979f6b"
+rev = "c745d3baf720b38a254e640a526717864e87a065"
 features = ["unstable-pre-spec", "client-api-c"]
diff --git a/src/contrib/qr_code_scanner/qr_code_detector.rs b/src/contrib/qr_code_scanner/qr_code_detector.rs
index c16005f5d..a92f546cf 100644
--- a/src/contrib/qr_code_scanner/qr_code_detector.rs
+++ b/src/contrib/qr_code_scanner/qr_code_detector.rs
@@ -2,12 +2,16 @@ use std::convert::AsRef;
 
 use glib::Sender;
 use gst_video::{video_frame::VideoFrameRef, VideoInfo};
+use image::{GenericImage, GenericImageView, Luma};
 use log::debug;
-use matrix_sdk::encryption::verification::QrVerificationData;
+use matrix_sdk::encryption::verification::{DecodingError, QrVerificationData};
+use thiserror::Error;
 
 use super::*;
 use crate::contrib::qr_code_scanner::camera_paintable::Action;
 
+const HEADER: &[u8] = b"MATRIX";
+
 mod imp {
     use std::sync::Mutex;
 
@@ -104,7 +108,7 @@ mod imp {
 
                 let image = samples.as_view_mut::<image::Luma<u8>>().unwrap();
 
-                if let Ok(code) = QrVerificationData::from_luma(image) {
+                if let Ok(code) = decode_qr(image) {
                     let mut previous_code = self.code.lock().unwrap();
                     if previous_code.as_ref() != Some(&code) {
                         previous_code.replace(code.clone());
@@ -138,3 +142,43 @@ impl QrCodeDetector {
         sink
     }
 }
+
+// From 
https://github.com/matrix-org/matrix-rust-sdk/blob/79d13148fbba58db0ff5f62b27e7856cbbbe13c2/crates/matrix-sdk-qrcode/src/utils.rs#L81-L104
+pub(crate) fn decode_qr<I>(image: I) -> Result<QrVerificationData, QrDecodingError>
+where
+    I: GenericImage<Pixel = Luma<u8>> + GenericImageView<Pixel = Luma<u8>>,
+{
+    let mut image = rqrr::PreparedImage::prepare(image);
+    let grids = image.detect_grids();
+
+    let mut error = None;
+
+    for grid in grids {
+        let mut decoded = Vec::new();
+
+        match grid.decode_to(&mut decoded) {
+            Ok(_) => {
+                if decoded.starts_with(HEADER) {
+                    return QrVerificationData::from_bytes(decoded).map_err(Into::into);
+                }
+            }
+            Err(e) => error = Some(e),
+        }
+    }
+
+    Err(error
+        .map(|e| e.into())
+        .unwrap_or_else(|| DecodingError::Header.into()))
+}
+
+/// All possible errors when decoding a QR Code.
+#[derive(Debug, Error)]
+pub enum QrDecodingError {
+    /// An error occurred when decoding the QR data.
+    #[error(transparent)]
+    Matrix(#[from] DecodingError),
+
+    /// An error occurred when decoding the QR image.
+    #[error(transparent)]
+    Rqrr(#[from] rqrr::DeQRError),
+}
diff --git a/src/session/account_settings/devices_page/device.rs 
b/src/session/account_settings/devices_page/device.rs
index 2930a64ac..f426c8165 100644
--- a/src/session/account_settings/devices_page/device.rs
+++ b/src/session/account_settings/devices_page/device.rs
@@ -208,6 +208,6 @@ impl Device {
         self.imp()
             .crypto_device
             .get()
-            .map_or(false, |device| device.verified())
+            .map_or(false, |device| device.is_verified())
     }
 }
diff --git a/src/session/account_settings/user_page/mod.rs b/src/session/account_settings/user_page/mod.rs
index 44f291979..b796d63e6 100644
--- a/src/session/account_settings/user_page/mod.rs
+++ b/src/session/account_settings/user_page/mod.rs
@@ -1,4 +1,4 @@
-use std::{fs::File, time::Duration};
+use std::time::Duration;
 
 use adw::{prelude::*, subclass::prelude::*};
 use gettextrs::gettext;
@@ -267,13 +267,15 @@ impl UserPage {
             .and_then(|info| info.content_type())
             .and_then(|content_type| gio::content_type_get_mime_type(&content_type))
             .unwrap();
-        let mut file = File::open(file.path().unwrap()).unwrap();
+        let (data, _) = file.load_contents_future().await.unwrap();
 
         let client_clone = client.clone();
-        let handle =
-            spawn_tokio!(
-                async move { client_clone.upload(&mime.parse().unwrap(), &mut file).await }
-            );
+        let handle = spawn_tokio!(async move {
+            client_clone
+                .media()
+                .upload(&mime.parse().unwrap(), &data)
+                .await
+        });
 
         let uri = match handle.await.unwrap() {
             Ok(res) => res.content_uri,
diff --git a/src/session/avatar.rs b/src/session/avatar.rs
index 0efadb6b0..8df52fbc2 100644
--- a/src/session/avatar.rs
+++ b/src/session/avatar.rs
@@ -170,7 +170,7 @@ impl Avatar {
                 }),
             };
             let handle =
-                spawn_tokio!(async move { client.get_media_content(&request, true).await });
+                spawn_tokio!(async move { client.media().get_media_content(&request, true).await });
 
             spawn!(
                 glib::PRIORITY_LOW,
@@ -267,7 +267,7 @@ where
     };
     content.url = uri.clone();
 
-    joined_room.send_state_event(content, "").await?;
+    joined_room.send_state_event(content).await?;
     Ok(uri)
 }
 
@@ -285,7 +285,8 @@ where
     info!("Uploading avatar from file {:?}", filename);
     // TODO: Use blurhash
     let response = matrix_client
-        .upload(&content_type.parse()?, &mut image.as_slice())
+        .media()
+        .upload(&content_type.parse()?, &image)
         .await?;
     Ok(response.content_uri)
 }
diff --git a/src/session/content/room_history/item_row.rs b/src/session/content/room_history/item_row.rs
index ca7d95133..a57c270f1 100644
--- a/src/session/content/room_history/item_row.rs
+++ b/src/session/content/room_history/item_row.rs
@@ -1,7 +1,7 @@
 use adw::{prelude::*, subclass::prelude::*};
 use gettextrs::gettext;
 use gtk::{gio, glib, glib::clone};
-use matrix_sdk::ruma::events::AnySyncRoomEvent;
+use matrix_sdk::ruma::events::AnySyncTimelineEvent;
 
 use crate::{
     components::{ContextMenuBin, ContextMenuBinExt, ContextMenuBinImpl, ReactionChooser},
@@ -287,7 +287,7 @@ impl ItemRow {
 
     fn set_event_widget(&self, event: &SupportedEvent) {
         match event.matrix_event() {
-            AnySyncRoomEvent::State(state) => {
+            AnySyncTimelineEvent::State(state) => {
                 let child = if let Some(Ok(child)) = self.child().map(|w| w.downcast::<StateRow>())
                 {
                     child
diff --git a/src/session/content/room_history/message_row/audio.rs 
b/src/session/content/room_history/message_row/audio.rs
index c3dc5d0aa..9069765fd 100644
--- a/src/session/content/room_history/message_row/audio.rs
+++ b/src/session/content/room_history/message_row/audio.rs
@@ -219,7 +219,7 @@ impl MessageAudio {
         }
 
         let client = session.client();
-        let handle = spawn_tokio!(async move { client.get_file(audio, true).await });
+        let handle = spawn_tokio!(async move { client.media().get_file(audio, true).await });
 
         spawn!(
             glib::PRIORITY_LOW,
diff --git a/src/session/content/room_history/message_row/media.rs 
b/src/session/content/room_history/message_row/media.rs
index d2f907fc7..cc7abf286 100644
--- a/src/session/content/room_history/message_row/media.rs
+++ b/src/session/content/room_history/message_row/media.rs
@@ -379,11 +379,11 @@ impl MessageMedia {
     {
         self.set_state(MediaState::Loading);
 
-        let client = session.client();
+        let media = session.client().media();
         let handle = spawn_tokio!(async move {
             let thumbnail =
                 if media_type != MediaType::Video && content.thumbnail_source().is_some() {
-                    client
+                    media
                         .get_thumbnail(
                             content.clone(),
                             MediaThumbnailSize {
@@ -405,7 +405,7 @@ impl MessageMedia {
                 Ok((Some(data), id))
             } else {
                 let id = media_type_uid(content.source());
-                client.get_file(content, true).await.map(|data| (data, id))
+                media.get_file(content, true).await.map(|data| (data, id))
             }
         });
 
diff --git a/src/session/mod.rs b/src/session/mod.rs
index d26c049b7..f59b08bbd 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -45,7 +45,7 @@ use matrix_sdk::{
         },
         RoomId,
     },
-    store::{MigrationConflictStrategy, OpenStoreError, StateStore},
+    store::{MigrationConflictStrategy, OpenStoreError, SledStateStore},
     Client, ClientBuildError, Error, HttpError, RumaApiError, StoreError,
 };
 use rand::{distributions::Alphanumeric, thread_rng, Rng};
@@ -462,6 +462,7 @@ impl Session {
                     user_id: session.user_id.clone(),
                     device_id: session.device_id.clone(),
                     access_token: session.secret.access_token.clone(),
+                    refresh_token: None,
                 })
                 .await
                 .map(|_| (client, session))
@@ -923,30 +924,29 @@ impl Session {
             glib::PRIORITY_DEFAULT_IDLE,
             clone!(@weak self as obj => async move {
                 let obj_weak = glib::SendWeakRef::from(obj.downgrade());
-                    obj.client().add_event_handler(
-                        move |event: GlobalAccountDataEvent<DirectEventContent>| {
-                            let obj_weak = obj_weak.clone();
-                            async move {
-                                let ctx = glib::MainContext::default();
-                                ctx.spawn(async move {
-                                    spawn!(async move {
-                                        if let Some(session) = obj_weak.upgrade() {
-                                            let room_ids = event.content.iter().fold(HashSet::new(), |mut 
acc, (_, rooms)| {
-                                                acc.extend(rooms);
-                                                acc
-                                            });
-                                            for room_id in room_ids {
-                                                if let Some(room) = session.room_list().get(room_id) {
-                                                    room.load_category();
-                                                }
+                obj.client().add_event_handler(
+                    move |event: GlobalAccountDataEvent<DirectEventContent>| {
+                        let obj_weak = obj_weak.clone();
+                        async move {
+                            let ctx = glib::MainContext::default();
+                            ctx.spawn(async move {
+                                spawn!(async move {
+                                    if let Some(session) = obj_weak.upgrade() {
+                                        let room_ids = event.content.iter().fold(HashSet::new(), |mut acc, 
(_, rooms)| {
+                                            acc.extend(rooms);
+                                            acc
+                                        });
+                                        for room_id in room_ids {
+                                            if let Some(room) = session.room_list().get(room_id) {
+                                                room.load_category();
                                             }
                                         }
-                                    });
+                                    }
                                 });
-                            }
-                        },
-                    )
-                    .await;
+                            });
+                        }
+                    },
+                );
             })
         );
     }
@@ -955,21 +955,19 @@ impl Session {
         let session_weak = glib::SendWeakRef::from(self.downgrade());
         let client = self.client();
         spawn_tokio!(async move {
-            client
-                .add_event_handler(move |_: SyncRoomEncryptionEvent, matrix_room: MatrixRoom| {
-                    let session_weak = session_weak.clone();
-                    async move {
-                        let ctx = glib::MainContext::default();
-                        ctx.spawn(async move {
-                            if let Some(session) = session_weak.upgrade() {
-                                if let Some(room) = session.room_list().get(matrix_room.room_id()) {
-                                    room.set_is_encrypted(true);
-                                }
+            client.add_event_handler(move |_: SyncRoomEncryptionEvent, matrix_room: MatrixRoom| {
+                let session_weak = session_weak.clone();
+                async move {
+                    let ctx = glib::MainContext::default();
+                    ctx.spawn(async move {
+                        if let Some(session) = session_weak.upgrade() {
+                            if let Some(room) = session.room_list().get(matrix_room.room_id()) {
+                                room.set_is_encrypted(true);
                             }
-                        });
-                    }
-                })
-                .await;
+                        }
+                    });
+                }
+            });
         });
     }
 }
@@ -986,7 +984,7 @@ async fn create_client(
     passphrase: String,
     use_discovery: bool,
 ) -> Result<Client, ClientSetupError> {
-    let state_store = StateStore::builder()
+    let state_store = SledStateStore::builder()
         .path(path)
         .passphrase(passphrase)
         .migration_conflict_strategy(MigrationConflictStrategy::Drop)
diff --git a/src/session/room/event/mod.rs b/src/session/room/event/mod.rs
index 4da549fe5..e199baf66 100644
--- a/src/session/room/event/mod.rs
+++ b/src/session/room/event/mod.rs
@@ -1,7 +1,7 @@
 use gtk::{glib, prelude::*, subclass::prelude::*};
 use log::warn;
 use matrix_sdk::{
-    deserialized_responses::SyncRoomEvent,
+    deserialized_responses::SyncTimelineEvent,
     ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId},
 };
 
@@ -17,8 +17,8 @@ pub use supported_event::SupportedEvent;
 pub use unsupported_event::UnsupportedEvent;
 
 #[derive(Clone, Debug, glib::Boxed)]
-#[boxed_type(name = "BoxedSyncRoomEvent")]
-pub struct BoxedSyncRoomEvent(SyncRoomEvent);
+#[boxed_type(name = "BoxedSyncTimelineEvent")]
+pub struct BoxedSyncTimelineEvent(SyncTimelineEvent);
 
 mod imp {
     use std::cell::RefCell;
@@ -67,7 +67,7 @@ mod imp {
     pub struct Event {
         /// The SDK event containing encryption information and the serialized
         /// event as `Raw`.
-        pub pure_event: RefCell<Option<SyncRoomEvent>>,
+        pub pure_event: RefCell<Option<SyncTimelineEvent>>,
 
         /// The room containing this `Event`.
         pub room: OnceCell<WeakRef<Room>>,
@@ -90,7 +90,7 @@ mod imp {
                         "pure-event",
                         "Pure Event",
                         "The pure Matrix event of this Event",
-                        BoxedSyncRoomEvent::static_type(),
+                        BoxedSyncTimelineEvent::static_type(),
                         glib::ParamFlags::WRITABLE,
                     ),
                     glib::ParamSpecString::new(
@@ -129,7 +129,7 @@ mod imp {
         ) {
             match pspec.name() {
                 "pure-event" => {
-                    let event = value.get::<BoxedSyncRoomEvent>().unwrap();
+                    let event = value.get::<BoxedSyncTimelineEvent>().unwrap();
                     obj.set_pure_event(event.0);
                 }
                 "room" => {
@@ -171,7 +171,7 @@ impl Event {
     /// Create an `Event` with the given pure SDK event and room.
     ///
     /// Constructs the proper subtype according to the event.
-    pub fn new(pure_event: SyncRoomEvent, room: &Room) -> Self {
+    pub fn new(pure_event: SyncTimelineEvent, room: &Room) -> Self {
         SupportedEvent::try_from_event(pure_event.clone(), room)
             .map(|event| event.upcast())
             .unwrap_or_else(|error| {
@@ -191,10 +191,10 @@ pub trait EventExt: 'static {
     fn room(&self) -> Room;
 
     /// The pure SDK event of this `Event`.
-    fn pure_event(&self) -> SyncRoomEvent;
+    fn pure_event(&self) -> SyncTimelineEvent;
 
     /// Set the pure SDK event of this `Event`.
-    fn set_pure_event(&self, pure_event: SyncRoomEvent);
+    fn set_pure_event(&self, pure_event: SyncTimelineEvent);
 
     /// The source JSON of this `Event`.
     fn original_source(&self) -> String;
@@ -257,11 +257,11 @@ impl<O: IsA<Event>> EventExt for O {
             .unwrap()
     }
 
-    fn pure_event(&self) -> SyncRoomEvent {
+    fn pure_event(&self) -> SyncTimelineEvent {
         self.upcast_ref().imp().pure_event.borrow().clone().unwrap()
     }
 
-    fn set_pure_event(&self, pure_event: SyncRoomEvent) {
+    fn set_pure_event(&self, pure_event: SyncTimelineEvent) {
         let priv_ = self.upcast_ref().imp();
         priv_.pure_event.replace(Some(pure_event));
 
diff --git a/src/session/room/event/supported_event.rs b/src/session/room/event/supported_event.rs
index 160061fef..b3549b4ff 100644
--- a/src/session/room/event/supported_event.rs
+++ b/src/session/room/event/supported_event.rs
@@ -1,7 +1,7 @@
 use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*};
 use log::debug;
 use matrix_sdk::{
-    deserialized_responses::SyncRoomEvent,
+    deserialized_responses::SyncTimelineEvent,
     media::MediaEventContent,
     ruma::{
         events::{
@@ -10,8 +10,8 @@ use matrix_sdk::{
                 message::{MessageType, Relation},
                 redaction::SyncRoomRedactionEvent,
             },
-            AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncRoomEvent,
-            AnySyncStateEvent, SyncMessageLikeEvent, SyncStateEvent,
+            AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncStateEvent,
+            AnySyncTimelineEvent, SyncMessageLikeEvent, SyncStateEvent,
         },
         serde::Raw,
         MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedTransactionId, OwnedUserId,
@@ -20,7 +20,7 @@ use matrix_sdk::{
 };
 use serde_json::Error as JsonError;
 
-use super::{BoxedSyncRoomEvent, Event, EventImpl};
+use super::{BoxedSyncTimelineEvent, Event, EventImpl};
 use crate::{
     prelude::*,
     session::room::{
@@ -32,8 +32,8 @@ use crate::{
 };
 
 #[derive(Clone, Debug, glib::Boxed)]
-#[boxed_type(name = "BoxedAnySyncRoomEvent")]
-pub struct BoxedAnySyncRoomEvent(AnySyncRoomEvent);
+#[boxed_type(name = "BoxedAnySyncTimelineEvent")]
+pub struct BoxedAnySyncTimelineEvent(AnySyncTimelineEvent);
 
 mod imp {
     use std::cell::RefCell;
@@ -46,7 +46,7 @@ mod imp {
     #[derive(Debug, Default)]
     pub struct SupportedEvent {
         /// The deserialized Matrix event.
-        pub matrix_event: RefCell<Option<AnySyncRoomEvent>>,
+        pub matrix_event: RefCell<Option<AnySyncTimelineEvent>>,
         /// Events that replace this one, in the order they arrive.
         pub replacing_events: RefCell<Vec<super::SupportedEvent>>,
         pub reactions: ReactionList,
@@ -69,7 +69,7 @@ mod imp {
                         "matrix-event",
                         "Matrix Event",
                         "The deserialized Matrix event of this Event",
-                        BoxedAnySyncRoomEvent::static_type(),
+                        BoxedAnySyncTimelineEvent::static_type(),
                         glib::ParamFlags::WRITABLE,
                     ),
                     glib::ParamSpecObject::new(
@@ -94,7 +94,7 @@ mod imp {
         ) {
             match pspec.name() {
                 "matrix-event" => {
-                    let matrix_event = value.get::<BoxedAnySyncRoomEvent>().unwrap();
+                    let matrix_event = value.get::<BoxedAnySyncTimelineEvent>().unwrap();
                     obj.set_matrix_event(matrix_event.0);
                 }
                 _ => unimplemented!(),
@@ -179,9 +179,9 @@ impl SupportedEvent {
     /// room.
     ///
     /// Returns an error if the pure event fails to deserialize.
-    pub fn try_from_event(pure_event: SyncRoomEvent, room: &Room) -> Result<Self, JsonError> {
-        let matrix_event = BoxedAnySyncRoomEvent(pure_event.event.deserialize()?);
-        let pure_event = BoxedSyncRoomEvent(pure_event);
+    pub fn try_from_event(pure_event: SyncTimelineEvent, room: &Room) -> Result<Self, JsonError> {
+        let matrix_event = BoxedAnySyncTimelineEvent(pure_event.event.deserialize()?);
+        let pure_event = BoxedSyncTimelineEvent(pure_event);
         Ok(glib::Object::new(&[
             ("pure-event", &pure_event),
             ("matrix-event", &matrix_event),
@@ -191,8 +191,8 @@ impl SupportedEvent {
     }
 
     /// Set the deserialized Matrix event of this `SupportedEvent`.
-    fn set_matrix_event(&self, matrix_event: AnySyncRoomEvent) {
-        if let AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomEncrypted(
+    fn set_matrix_event(&self, matrix_event: AnySyncTimelineEvent) {
+        if let AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomEncrypted(
             SyncMessageLikeEvent::Original(_),
         )) = matrix_event
         {
@@ -206,7 +206,7 @@ impl SupportedEvent {
     }
 
     /// The deserialized Matrix event of this `SupportedEvent`.
-    pub fn matrix_event(&self) -> AnySyncRoomEvent {
+    pub fn matrix_event(&self) -> AnySyncTimelineEvent {
         self.imp().matrix_event.borrow().clone().unwrap()
     }
 
@@ -226,7 +226,7 @@ impl SupportedEvent {
                 if let Some(keys_handle) = priv_.keys_handle.take() {
                     self.room().disconnect(keys_handle);
                 }
-                let pure_event = SyncRoomEvent::from(decrypted);
+                let pure_event = SyncTimelineEvent::from(decrypted);
                 let matrix_event = pure_event.event.deserialize().unwrap();
                 self.set_pure_event(pure_event);
                 self.set_matrix_event(matrix_event);
@@ -295,7 +295,7 @@ impl SupportedEvent {
     /// The ID of the event this `SupportedEvent` relates to, if any.
     pub fn related_event_id(&self) -> Option<OwnedEventId> {
         match self.imp().matrix_event.borrow().as_ref()? {
-            AnySyncRoomEvent::MessageLike(ref message) => match message {
+            AnySyncTimelineEvent::MessageLike(ref message) => match message {
                 AnySyncMessageLikeEvent::RoomRedaction(SyncRoomRedactionEvent::Original(event)) => {
                     Some(event.redacts.clone())
                 }
@@ -329,12 +329,12 @@ impl SupportedEvent {
     /// - `RoomMessage` with `Relation::Replacement`
     pub fn is_replacing_event(&self) -> bool {
         match self.imp().matrix_event.borrow().as_ref().unwrap() {
-            AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(
+            AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(
                 SyncMessageLikeEvent::Original(message),
             )) => {
                 matches!(message.content.relates_to, Some(Relation::Replacement(_)))
             }
-            AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomRedaction(_)) => true,
+            AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomRedaction(_)) => true,
             _ => false,
         }
     }
@@ -404,7 +404,7 @@ impl SupportedEvent {
             .filter(|event| {
                 matches!(
                     event.matrix_event(),
-                    AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomRedaction(_))
+                    AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomRedaction(_))
                 )
             })
             .is_some()
@@ -433,7 +433,7 @@ impl SupportedEvent {
     /// The content of this `SupportedEvent`, if this is a message-like event.
     pub fn original_content(&self) -> Option<AnyMessageLikeEventContent> {
         match self.matrix_event() {
-            AnySyncRoomEvent::MessageLike(message) => message.original_content(),
+            AnySyncTimelineEvent::MessageLike(message) => message.original_content(),
             _ => None,
         }
     }
@@ -465,7 +465,7 @@ impl SupportedEvent {
     /// an incompatible event.
     pub async fn get_media_content(&self) -> Result<(String, String, Vec<u8>), matrix_sdk::Error> {
         if let AnyMessageLikeEventContent::RoomMessage(content) = self.original_content().unwrap() {
-            let client = self.room().session().client();
+            let media = self.room().session().client().media();
             match content.msgtype {
                 MessageType::File(content) => {
                     let uid = media_type_uid(content.source());
@@ -485,7 +485,7 @@ impl SupportedEvent {
                                 None,
                             )
                         });
-                    let handle = spawn_tokio!(async move { client.get_file(content, true).await });
+                    let handle = spawn_tokio!(async move { media.get_file(content, true).await });
                     let data = handle.await.unwrap()?.unwrap();
                     return Ok((uid, filename, data));
                 }
@@ -502,7 +502,7 @@ impl SupportedEvent {
                     } else {
                         content.body.clone()
                     };
-                    let handle = spawn_tokio!(async move { client.get_file(content, true).await });
+                    let handle = spawn_tokio!(async move { media.get_file(content, true).await });
                     let data = handle.await.unwrap()?.unwrap();
                     return Ok((uid, filename, data));
                 }
@@ -519,7 +519,7 @@ impl SupportedEvent {
                     } else {
                         content.body.clone()
                     };
-                    let handle = spawn_tokio!(async move { client.get_file(content, true).await });
+                    let handle = spawn_tokio!(async move { media.get_file(content, true).await });
                     let data = handle.await.unwrap()?.unwrap();
                     return Ok((uid, filename, data));
                 }
@@ -536,7 +536,7 @@ impl SupportedEvent {
                     } else {
                         content.body.clone()
                     };
-                    let handle = spawn_tokio!(async move { client.get_file(content, true).await });
+                    let handle = spawn_tokio!(async move { media.get_file(content, true).await });
                     let data = handle.await.unwrap()?.unwrap();
                     return Ok((uid, filename, data));
                 }
@@ -590,7 +590,7 @@ impl SupportedEvent {
         let priv_ = self.imp();
 
         if self.related_event_id().is_some() {
-            if let Some(AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(
+            if let Some(AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(
                 SyncMessageLikeEvent::Original(message),
             ))) = priv_.matrix_event.borrow().as_ref()
             {
@@ -603,13 +603,13 @@ impl SupportedEvent {
 
         // List of all events to be shown.
         match priv_.matrix_event.borrow().as_ref() {
-            Some(AnySyncRoomEvent::MessageLike(message)) => !matches!(
+            Some(AnySyncTimelineEvent::MessageLike(message)) => !matches!(
                 message,
                 AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(_))
                     | AnySyncMessageLikeEvent::RoomEncrypted(SyncMessageLikeEvent::Original(_))
                     | AnySyncMessageLikeEvent::Sticker(SyncMessageLikeEvent::Original(_))
             ),
-            Some(AnySyncRoomEvent::State(state)) => !matches!(
+            Some(AnySyncTimelineEvent::State(state)) => !matches!(
                 state,
                 AnySyncStateEvent::RoomCreate(SyncStateEvent::Original(_))
                     | AnySyncStateEvent::RoomMember(SyncStateEvent::Original(_))
diff --git a/src/session/room/event/unsupported_event.rs b/src/session/room/event/unsupported_event.rs
index 1a6a616e3..90a12596b 100644
--- a/src/session/room/event/unsupported_event.rs
+++ b/src/session/room/event/unsupported_event.rs
@@ -1,7 +1,7 @@
 use gtk::{glib, prelude::*, subclass::prelude::*};
-use matrix_sdk::{deserialized_responses::SyncRoomEvent, ruma::events::RoomEventType};
+use matrix_sdk::{deserialized_responses::SyncTimelineEvent, ruma::events::RoomEventType};
 
-use super::{BoxedSyncRoomEvent, Event, EventImpl};
+use super::{BoxedSyncTimelineEvent, Event, EventImpl};
 use crate::session::room::{
     timeline::{TimelineItem, TimelineItemImpl},
     Room,
@@ -34,8 +34,8 @@ glib::wrapper! {
 
 impl UnsupportedEvent {
     /// Construct an `UnsupportedEvent` from the given pure event and room.
-    pub fn new(pure_event: SyncRoomEvent, room: &Room) -> Self {
-        let pure_event = BoxedSyncRoomEvent(pure_event);
+    pub fn new(pure_event: SyncTimelineEvent, room: &Room) -> Self {
+        let pure_event = BoxedSyncTimelineEvent(pure_event);
         glib::Object::new(&[("pure-event", &pure_event), ("room", room)])
             .expect("Failed to create UnsupportedEvent")
     }
diff --git a/src/session/room/member.rs b/src/session/room/member.rs
index cfabd09d8..8040ae54c 100644
--- a/src/session/room/member.rs
+++ b/src/session/room/member.rs
@@ -1,5 +1,6 @@
 use gtk::{glib, prelude::*, subclass::prelude::*};
 use matrix_sdk::{
+    room::RoomMember,
     ruma::{
         events::{
             room::member::{MembershipState, RoomMemberEventContent},
@@ -7,7 +8,6 @@ use matrix_sdk::{
         },
         OwnedMxcUri, UserId,
     },
-    RoomMember,
 };
 
 use crate::{
diff --git a/src/session/room/member_list.rs b/src/session/room/member_list.rs
index 52d2b20f2..060e72011 100644
--- a/src/session/room/member_list.rs
+++ b/src/session/room/member_list.rs
@@ -105,7 +105,7 @@ impl MemberList {
     ///
     /// If some of the values do not correspond to existing members, new members
     /// are created.
-    pub fn update_from_room_members(&self, new_members: &[matrix_sdk::RoomMember]) {
+    pub fn update_from_room_members(&self, new_members: &[matrix_sdk::room::RoomMember]) {
         let mut members = self.imp().members.borrow_mut();
         let prev_len = members.len();
         for member in new_members {
diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs
index 1bd7e9e51..eb424c679 100644
--- a/src/session/room/mod.rs
+++ b/src/session/room/mod.rs
@@ -17,7 +17,7 @@ use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*};
 use log::{debug, error, info, warn};
 use matrix_sdk::{
     attachment::AttachmentConfig,
-    deserialized_responses::{JoinedRoom, LeftRoom, SyncRoomEvent},
+    deserialized_responses::{JoinedRoom, LeftRoom, SyncTimelineEvent},
     room::Room as MatrixRoom,
     ruma::{
         api::client::sync::sync_events::v3::InvitedRoom,
@@ -34,14 +34,14 @@ use matrix_sdk::{
             room_key::ToDeviceRoomKeyEventContent,
             tag::{TagInfo, TagName},
             AnyRoomAccountDataEvent, AnyStrippedStateEvent, AnySyncMessageLikeEvent,
-            AnySyncRoomEvent, AnySyncStateEvent, EventContent, MessageLikeEventType,
+            AnySyncStateEvent, AnySyncTimelineEvent, EventContent, MessageLikeEventType,
             MessageLikeUnsigned, OriginalSyncMessageLikeEvent, StateEventType,
             SyncMessageLikeEvent, SyncStateEvent, ToDeviceEvent,
         },
         serde::Raw,
         EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId, RoomId,
     },
-    DisplayName, Result as MatrixResult, RoomMember,
+    DisplayName, Result as MatrixResult,
 };
 use ruma::events::SyncEphemeralRoomEvent;
 
@@ -559,7 +559,9 @@ impl Room {
                         }
                         room.accept_invitation().await?;
                     }
-                    RoomType::Left => room.reject_invitation().await?,
+                    RoomType::Left => {
+                        room.reject_invitation().await?;
+                    }
                     RoomType::Outdated => unimplemented!(),
                     RoomType::Space => unimplemented!(),
                     RoomType::Direct => {
@@ -607,7 +609,9 @@ impl Room {
                             room.remove_tag(TagName::Favorite).await?;
                         }
                     }
-                    RoomType::Left => room.leave().await?,
+                    RoomType::Left => {
+                        room.leave().await?;
+                    }
                     RoomType::Outdated => unimplemented!(),
                     RoomType::Space => unimplemented!(),
                     RoomType::Direct => {
@@ -782,8 +786,7 @@ impl Room {
 
                 // Listen to changes in the read receipts.
                 let room_weak = glib::SendWeakRef::from(obj.downgrade());
-                obj.session().client().add_room_event_handler(
-                    obj.room_id(),
+                obj.matrix_room().add_event_handler(
                     move |event: SyncEphemeralRoomEvent<ReceiptEventContent>| {
                         let room_weak = room_weak.clone();
                         async move {
@@ -797,8 +800,7 @@ impl Room {
                             });
                         }
                     },
-                )
-                .await;
+                );
             })
         );
     }
@@ -1057,8 +1059,7 @@ impl Room {
 
         let name_content = RoomNameEventContent::new(Some(room_name));
 
-        let handle =
-            spawn_tokio!(async move { joined_room.send_state_event(name_content, "").await });
+        let handle = spawn_tokio!(async move { joined_room.send_state_event(name_content).await });
 
         spawn!(
             glib::PRIORITY_DEFAULT_IDLE,
@@ -1097,7 +1098,7 @@ impl Room {
 
         let handle = spawn_tokio!(async move {
             joined_room
-                .send_state_event(RoomTopicEventContent::new(topic), "")
+                .send_state_event(RoomTopicEventContent::new(topic))
                 .await
         });
 
@@ -1157,7 +1158,7 @@ impl Room {
 
     /// Update the room state based on the new sync response
     /// FIXME: We should use the sdk's event handler to get updates
-    pub fn update_for_events(&self, batch: Vec<SyncRoomEvent>) {
+    pub fn update_for_events(&self, batch: Vec<SyncTimelineEvent>) {
         // FIXME: notify only when the count has changed
         self.notify_notification_count();
 
@@ -1167,7 +1168,7 @@ impl Room {
             .collect();
 
         for event in events.iter() {
-            if let AnySyncRoomEvent::State(state_event) = event {
+            if let AnySyncTimelineEvent::State(state_event) = event {
                 match state_event {
                     AnySyncStateEvent::RoomMember(SyncStateEvent::Original(event)) => {
                         self.members().update_member_for_member_event(event)
@@ -1237,7 +1238,7 @@ impl Room {
                 match handle.await.unwrap() {
                     Ok(members) => {
                         // Add all members needed to display room events.
-                        let members: Vec<RoomMember> = members.into_iter().filter(|member| {
+                        let members: Vec<_> = members.into_iter().filter(|member| {
                             &MembershipState::Leave != member.membership()
                         }).collect();
                         obj.members().update_from_room_members(&members);
@@ -1301,7 +1302,7 @@ impl Room {
                 unsigned: MessageLikeUnsigned::default(),
             };
 
-            let raw_event: Raw<AnySyncRoomEvent> = Raw::new(&matrix_event).unwrap().cast();
+            let raw_event: Raw<AnySyncTimelineEvent> = Raw::new(&matrix_event).unwrap().cast();
             let event = SupportedEvent::try_from_event(raw_event.into(), self).unwrap();
             self.imp()
                 .timeline
@@ -1352,7 +1353,7 @@ impl Room {
         };
 
         if let MatrixRoom::Joined(matrix_room) = self.matrix_room() {
-            let raw_event: Raw<AnySyncRoomEvent> = Raw::new(&event).unwrap().cast();
+            let raw_event: Raw<AnySyncTimelineEvent> = Raw::new(&event).unwrap().cast();
             let event = SupportedEvent::try_from_event(raw_event.into(), self).unwrap();
             self.imp()
                 .timeline
@@ -1416,7 +1417,7 @@ impl Room {
         if let MatrixRoom::Invited(matrix_room) = matrix_room {
             let handle = spawn_tokio!(async move { matrix_room.accept_invitation().await });
             match handle.await.unwrap() {
-                Ok(result) => Ok(result),
+                Ok(_) => Ok(()),
                 Err(error) => {
                     error!("Accepting invitation failed: {}", error);
 
@@ -1445,7 +1446,7 @@ impl Room {
         if let MatrixRoom::Invited(matrix_room) = matrix_room {
             let handle = spawn_tokio!(async move { matrix_room.reject_invitation().await });
             match handle.await.unwrap() {
-                Ok(result) => Ok(result),
+                Ok(_) => Ok(()),
                 Err(error) => {
                     error!("Rejecting invitation failed: {}", error);
 
@@ -1571,11 +1572,10 @@ impl Room {
             let body = body.to_string();
             spawn_tokio!(async move {
                 let config = AttachmentConfig::default();
-                let mut cursor = std::io::Cursor::new(&bytes);
                 matrix_room
                     // TODO This should be added to pending messages instead of
                     // sending it directly.
-                    .send_attachment(&body, &mime, &mut cursor, config)
+                    .send_attachment(&body, &mime, &bytes, config)
                     .await
                     .unwrap();
             });
@@ -1660,7 +1660,7 @@ impl Room {
     /// events.
     ///
     /// The events must be in reverse chronological order.
-    pub fn update_latest_unread<'a>(&self, events: impl Iterator<Item = &'a AnySyncRoomEvent>) {
+    pub fn update_latest_unread<'a>(&self, events: impl Iterator<Item = &'a AnySyncTimelineEvent>) {
         let mut latest_unread = self.latest_unread();
 
         for event in events {
@@ -1709,21 +1709,19 @@ impl Room {
             glib::PRIORITY_DEFAULT_IDLE,
             clone!(@weak self as obj => async move {
                 let obj_weak = glib::SendWeakRef::from(obj.downgrade());
-                    obj.session().client().add_room_event_handler(
-                        obj.room_id(),
-                        move |_: ToDeviceEvent<ToDeviceRoomKeyEventContent>| {
-                            let obj_weak = obj_weak.clone();
-                            async move {
-                                let ctx = glib::MainContext::default();
-                                ctx.spawn(async move {
-                                    if let Some(room) = obj_weak.upgrade() {
-                                        room.emit_by_name::<()>("new-encryption-keys", &[]);
-                                    }
-                                });
-                            }
-                        },
-                    )
-                    .await;
+                obj.matrix_room().add_event_handler(
+                    move |_: ToDeviceEvent<ToDeviceRoomKeyEventContent>| {
+                        let obj_weak = obj_weak.clone();
+                        async move {
+                            let ctx = glib::MainContext::default();
+                            ctx.spawn(async move {
+                                if let Some(room) = obj_weak.upgrade() {
+                                    room.emit_by_name::<()>("new-encryption-keys", &[]);
+                                }
+                            });
+                        }
+                    },
+                );
             })
         );
     }
@@ -1753,9 +1751,9 @@ impl Room {
 /// show in the timeline.
 ///
 /// [MSC2654]: https://github.com/matrix-org/matrix-spec-proposals/pull/2654
-fn count_as_unread(event: &AnySyncRoomEvent) -> bool {
+fn count_as_unread(event: &AnySyncTimelineEvent) -> bool {
     match event {
-        AnySyncRoomEvent::MessageLike(message_event) => match message_event {
+        AnySyncTimelineEvent::MessageLike(message_event) => match message_event {
             AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(message)) => {
                 if matches!(message.content.msgtype, MessageType::Notice(_)) {
                     return false;
@@ -1770,9 +1768,9 @@ fn count_as_unread(event: &AnySyncRoomEvent) -> bool {
             AnySyncMessageLikeEvent::Sticker(SyncMessageLikeEvent::Original(_)) => true,
             _ => false,
         },
-        AnySyncRoomEvent::State(AnySyncStateEvent::RoomTombstone(SyncStateEvent::Original(_))) => {
-            true
-        }
+        AnySyncTimelineEvent::State(AnySyncStateEvent::RoomTombstone(
+            SyncStateEvent::Original(_),
+        )) => true,
         _ => false,
     }
 }
diff --git a/src/session/room/timeline/mod.rs b/src/session/room/timeline/mod.rs
index 32018a1f0..ee3e69412 100644
--- a/src/session/room/timeline/mod.rs
+++ b/src/session/room/timeline/mod.rs
@@ -13,7 +13,7 @@ use futures::{lock::Mutex, pin_mut, Stream, StreamExt};
 use gtk::{gio, glib, prelude::*, subclass::prelude::*};
 use log::{error, warn};
 use matrix_sdk::{
-    deserialized_responses::SyncRoomEvent,
+    deserialized_responses::SyncTimelineEvent,
     ruma::{EventId, OwnedEventId, OwnedTransactionId, TransactionId},
     Error as MatrixError,
 };
@@ -45,7 +45,7 @@ impl Default for TimelineState {
 
 const MAX_BATCH_SIZE: usize = 20;
 type BackwardStream =
-    Pin<Box<dyn Stream<Item = Vec<matrix_sdk::Result<SyncRoomEvent>>> + 'static + Send>>;
+    Pin<Box<dyn Stream<Item = Vec<matrix_sdk::Result<SyncTimelineEvent>>> + 'static + Send>>;
 
 mod imp {
     use std::cell::{Cell, RefCell};
@@ -851,7 +851,7 @@ impl Timeline {
 
 async fn handle_forward_stream(
     timeline: glib::SendWeakRef<Timeline>,
-    stream: impl Stream<Item = SyncRoomEvent>,
+    stream: impl Stream<Item = SyncTimelineEvent>,
 ) {
     let stream = stream.ready_chunks(MAX_BATCH_SIZE);
     pin_mut!(stream);
diff --git a/src/session/room_creation/mod.rs b/src/session/room_creation/mod.rs
index e7fb83d73..dc6e768a1 100644
--- a/src/session/room_creation/mod.rs
+++ b/src/session/room_creation/mod.rs
@@ -13,7 +13,7 @@ use matrix_sdk::{
         },
         assign,
     },
-    HttpError, RumaApiError,
+    Error, HttpError, RumaApiError,
 };
 
 use crate::{
@@ -230,7 +230,7 @@ impl RoomCreation {
                 match handle.await.unwrap() {
                         Ok(response) => {
                             if let Some(session) = obj.session() {
-                                let room = session.room_list().get_wait(response.room_id).await;
+                                let room = session.room_list().get_wait(response.room_id()).await;
                                 session.select_room(room);
                             }
                             obj.close();
@@ -247,7 +247,7 @@ impl RoomCreation {
     }
 
     /// Display the error that occurred during creation
-    fn handle_error(&self, error: HttpError) {
+    fn handle_error(&self, error: Error) {
         let priv_ = self.imp();
 
         priv_.create_button.set_loading(false);
@@ -255,9 +255,9 @@ impl RoomCreation {
         priv_.cancel_button.set_sensitive(true);
 
         // Treat the room address already taken error special
-        if let HttpError::Api(FromHttpResponseError::Server(ServerError::Known(
+        if let Error::Http(HttpError::Api(FromHttpResponseError::Server(ServerError::Known(
             RumaApiError::ClientApi(ref client_error),
-        ))) = error
+        )))) = error
         {
             if client_error.kind == RumaClientErrorKind::RoomInUse {
                 priv_.room_address.add_css_class("error");
diff --git a/src/session/room_list.rs b/src/session/room_list.rs
index 8bb3341b1..b6cc065c2 100644
--- a/src/session/room_list.rs
+++ b/src/session/room_list.rs
@@ -155,12 +155,13 @@ impl RoomList {
     }
 
     /// Waits till the Room becomes available
-    pub async fn get_wait(&self, room_id: OwnedRoomId) -> Option<Room> {
-        if let Some(room) = self.get(&room_id) {
+    pub async fn get_wait(&self, room_id: &RoomId) -> Option<Room> {
+        if let Some(room) = self.get(room_id) {
             Some(room)
         } else {
             let (sender, receiver) = futures::channel::oneshot::channel();
 
+            let room_id = room_id.to_owned();
             let sender = Cell::new(Some(sender));
             // FIXME: add a timeout
             let handler_id = self.connect_items_changed(move |obj, _, _, _| {
@@ -316,7 +317,7 @@ impl RoomList {
             glib::PRIORITY_DEFAULT_IDLE,
             clone!(@weak self as obj => async move {
                 match handle.await.unwrap() {
-                    Ok(response) => obj.pending_rooms_replace_or_remove(&identifier, 
response.room_id.as_ref()),
+                    Ok(response) => obj.pending_rooms_replace_or_remove(&identifier, response.room_id()),
                     Err(error) => {
                         obj.pending_rooms_remove(&identifier);
                         error!("Joining room {} failed: {}", identifier, error);
diff --git a/src/session/user.rs b/src/session/user.rs
index b6b419067..5c6db51f8 100644
--- a/src/session/user.rs
+++ b/src/session/user.rs
@@ -199,7 +199,7 @@ impl User {
 
     fn init_is_verified(&self) {
         spawn!(clone!(@weak self as obj => async move {
-            let is_verified = obj.crypto_identity().await.map_or(false, |i| i.verified());
+            let is_verified = obj.crypto_identity().await.map_or(false, |i| i.is_verified());
 
             if is_verified == obj.is_verified() {
                 return;
diff --git a/src/session/verification/verification_list.rs b/src/session/verification/verification_list.rs
index 542856abb..4d6018801 100644
--- a/src/session/verification/verification_list.rs
+++ b/src/session/verification/verification_list.rs
@@ -3,8 +3,8 @@ use log::{debug, warn};
 use matrix_sdk::ruma::{
     api::client::sync::sync_events::v3::ToDevice,
     events::{
-        room::message::MessageType, AnySyncMessageLikeEvent, AnySyncRoomEvent, AnyToDeviceEvent,
-        SyncMessageLikeEvent,
+        room::message::MessageType, AnySyncMessageLikeEvent, AnySyncTimelineEvent,
+        AnyToDeviceEvent, SyncMessageLikeEvent,
     },
     MilliSecondsSinceUnixEpoch, OwnedUserId, UserId,
 };
@@ -204,10 +204,10 @@ impl VerificationList {
     pub fn handle_response_room<'a>(
         &self,
         room: &Room,
-        events: impl Iterator<Item = &'a AnySyncRoomEvent>,
+        events: impl Iterator<Item = &'a AnySyncTimelineEvent>,
     ) {
         for message_event in events.filter_map(|event| {
-            if let AnySyncRoomEvent::MessageLike(message_event) = event {
+            if let AnySyncTimelineEvent::MessageLike(message_event) = event {
                 Some(message_event)
             } else {
                 None


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]