From 92f551d6da4e470d400d48a0771c5c3633830de7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Fri, 21 Apr 2023 18:26:07 +0200 Subject: [PATCH] chore: Update matrix-sdk and switch to SQLite store --- Cargo.lock | 287 +++++++++++++++++++------------- Cargo.toml | 11 +- src/login/mod.rs | 24 +-- src/session/room/event/mod.rs | 84 +++++----- src/session/room/mod.rs | 61 ++++--- src/session/sidebar/room_row.rs | 7 +- src/user_facing_error.rs | 9 +- 7 files changed, 259 insertions(+), 224 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 79f7ba8c..e29d2252 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,6 +30,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.9", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.3" @@ -368,7 +379,7 @@ version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -394,6 +405,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3" + [[package]] name = "bitmaps" version = "3.2.0" @@ -498,7 +515,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8af54f5d48af1226928adc1f57edd22f5df1349e7da1fc96ae15cf43db0e871" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-sys-rs", "glib", "libc", @@ -892,7 +909,49 @@ dependencies = [ "hashbrown 0.12.3", "lock_api", "once_cell", - "parking_lot_core 0.9.7", + "parking_lot_core", +] + +[[package]] +name = "deadpool" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e" +dependencies = [ + "async-trait", + "deadpool-runtime", + "num_cpus", + "retain_mut", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1" +dependencies = [ + "tokio", +] + +[[package]] +name = "deadpool-sqlite" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e026821eaacbce25ff0d54405e4421d71656fcae3e4a9323461280fcda6dbc7d" +dependencies = [ + "deadpool", + "deadpool-sync", + "rusqlite", +] + +[[package]] +name = "deadpool-sync" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1bea344b64b32537fde6e0f0179b1ede34d435636719dd40fe6a0f28218a61c" +dependencies = [ + "deadpool", ] [[package]] @@ -1109,9 +1168,9 @@ dependencies = [ [[package]] name = "eyeball" -version = "0.4.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec13e5a70ea34fb31abd14e5f384ce89d7cac84f39cb4f0c1b13bb20c4a09b" +checksum = "1015c5225a75e0ab3d325e934456d92fdd57f440e8c81d09018878d4f651cd46" dependencies = [ "futures-core", "readlock", @@ -1129,6 +1188,18 @@ dependencies = [ "tokio-stream", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "fastrand" version = "1.9.0" @@ -1236,7 +1307,6 @@ dependencies = [ "libshumate", "log", "matrix-sdk", - "matrix-sdk-sled", "mime", "mime_guess", "once_cell", @@ -1257,16 +1327,6 @@ dependencies = [ "url", ] -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "fs_extra" version = "1.3.0" @@ -1387,15 +1447,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "g2gen" version = "1.0.1" @@ -1430,7 +1481,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b023fbe0c6b407bd3d9805d107d9800da3829dc5a676653210f1d5f16d7f59bf" dependencies = [ - "bitflags", + "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", "glib", @@ -1457,7 +1508,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3abf96408a26e3eddf881a7f893a1e111767137136e347745e8ea6ed12731ff" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk4-sys", @@ -1624,7 +1675,7 @@ version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d14522e56c6bcb6f7a3aebc25cbcfb06776af4c0c25232b601b4383252d7cb92" dependencies = [ - "bitflags", + "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", @@ -1657,7 +1708,7 @@ version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7f1de7cbde31ea4f0a919453a2dcece5d54d5b70e08f8ad254dc4840f5f09b6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "futures-channel", "futures-core", "futures-executor", @@ -1770,7 +1821,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f01ef44fa7cac15e2da9978529383e6bee03e570ba5bf7036b4c10a15cc3a3c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "gdk4", "glib", @@ -1826,7 +1877,7 @@ version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4530401c89be6dc10d77ae1587b811cf455c97dce7abf594cb9164527c7da7fc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "futures-channel", "futures-core", @@ -1851,7 +1902,7 @@ version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06b5a8658e575f6469053026ac663a348d5a562c9fce20ab2ca0c349e05d079e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "glib", "gstreamer", @@ -1882,7 +1933,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b8ff5dfbf7bcaf1466a385b836bad0d8da25759f121458727fdda1f771c69b3" dependencies = [ "atomic_refcell", - "bitflags", + "bitflags 1.3.2", "cfg-if", "glib", "gstreamer", @@ -1909,7 +1960,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b82b83d18ad1c4d890694b4bedde170c748462a11f51a68428671bc1bf93e71e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "glib", "gstreamer", "gstreamer-base", @@ -1940,7 +1991,7 @@ version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5221a2807dea97b318dfd6f53433fe372c7ceb8ad196e348312a7878b89be73" dependencies = [ - "bitflags", + "bitflags 1.3.2", "glib", "gstreamer", "gstreamer-audio", @@ -1971,7 +2022,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f752a53171e330c7f56db24ca91d99b7958dc86395ebe91b117226d339b29306" dependencies = [ - "bitflags", + "bitflags 1.3.2", "glib", "gstreamer", "gstreamer-play-sys", @@ -2012,7 +2063,7 @@ version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce97769effde2d779dc4f7037b37106457b74e53f2a711bddc90b30ffeb7e06" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "futures-channel", "glib", @@ -2043,7 +2094,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b28a32a04cd75cef14a0983f8b0c669e0fe152a0a7725accdeb594e2c764c88b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", @@ -2126,6 +2177,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] [[package]] name = "hashbrown" @@ -2133,7 +2187,16 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.8.3", +] + +[[package]] +name = "hashlink" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" +dependencies = [ + "hashbrown 0.12.3", ] [[package]] @@ -2560,7 +2623,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1c4efd2020a4fcedbad2c4a97de97bf6045e5dc49d61d5a5d0cfd753db60700" dependencies = [ - "bitflags", + "bitflags 1.3.2", "futures-channel", "gdk-pixbuf", "gdk4", @@ -2639,7 +2702,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "667dfbb50c3d1f7ee1d33afdc04d1255923ece7642db3303046e7d63d997d77d" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cc", "cookie-factory", "errno", @@ -2660,6 +2723,16 @@ dependencies = [ "system-deps", ] +[[package]] +name = "libsqlite3-sys" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +dependencies = [ + "pkg-config", + "vcpkg", +] + [[package]] name = "link-cplusplus" version = "1.0.8" @@ -2799,7 +2872,7 @@ dependencies = [ [[package]] name = "matrix-sdk" version = "0.6.2" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "anymap2", "async-stream", @@ -2823,9 +2896,10 @@ dependencies = [ "matrix-sdk-base", "matrix-sdk-common", "matrix-sdk-indexeddb", - "matrix-sdk-sled", + "matrix-sdk-sqlite", "mime", "mime_guess", + "once_cell", "pin-project-lite", "rand 0.8.5", "reqwest", @@ -2845,10 +2919,11 @@ dependencies = [ [[package]] name = "matrix-sdk-base" version = "0.6.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "async-stream", "async-trait", + "bitflags 2.1.0", "dashmap", "eyeball", "futures-core", @@ -2869,7 +2944,7 @@ dependencies = [ [[package]] name = "matrix-sdk-common" version = "0.6.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "futures-core", "futures-util", @@ -2885,7 +2960,7 @@ dependencies = [ [[package]] name = "matrix-sdk-crypto" version = "0.6.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "aes", "async-std", @@ -2922,7 +2997,7 @@ dependencies = [ [[package]] name = "matrix-sdk-indexeddb" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "anyhow", "async-trait", @@ -2948,7 +3023,7 @@ dependencies = [ [[package]] name = "matrix-sdk-qrcode" version = "0.4.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "base64 0.21.0", "byteorder", @@ -2959,13 +3034,14 @@ dependencies = [ ] [[package]] -name = "matrix-sdk-sled" -version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +name = "matrix-sdk-sqlite" +version = "0.1.0" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "async-stream", "async-trait", "dashmap", + "deadpool-sqlite", "fs_extra", "futures-core", "futures-util", @@ -2973,19 +3049,21 @@ dependencies = [ "matrix-sdk-common", "matrix-sdk-crypto", "matrix-sdk-store-encryption", + "rmp-serde", "ruma", + "rusqlite", "serde", "serde_json", - "sled", "thiserror", "tokio", "tracing", + "vodozemac", ] [[package]] name = "matrix-sdk-store-encryption" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=48b67759eded88e26db71a85b4ea8b7e3a153fcd#48b67759eded88e26db71a85b4ea8b7e3a153fcd" +source = "git+https://github.com/zecakeh/matrix-rust-sdk.git?rev=4002c7fad13bf058962976d9b08e0e03b70b49b2#4002c7fad13bf058962976d9b08e0e03b70b49b2" dependencies = [ "blake3", "chacha20poly1305", @@ -3124,7 +3202,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -3342,7 +3420,7 @@ version = "0.10.52" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "foreign-types", "libc", @@ -3411,7 +3489,7 @@ version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52c280b82a881e4208afb3359a8e7fde27a1b272280981f1f34610bed5770d37" dependencies = [ - "bitflags", + "bitflags 1.3.2", "gio", "glib", "libc", @@ -3437,17 +3515,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -3455,21 +3522,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -3655,7 +3708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc2180a4a84b855be86e6cd72fa6fd4318278871d2b1082e7cd05fe64b135ccb" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "errno", "libc", "libspa", @@ -3699,7 +3752,7 @@ version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", @@ -3713,7 +3766,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -3823,7 +3876,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" dependencies = [ - "bitflags", + "bitflags 1.3.2", "getopts", "memchr", "unicase", @@ -3971,7 +4024,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -3980,7 +4033,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -4049,6 +4102,12 @@ dependencies = [ "winreg", ] +[[package]] +name = "retain_mut" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" + [[package]] name = "rmp" version = "0.8.11" @@ -4085,7 +4144,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.8.2" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "assign", "js_int", @@ -4099,7 +4158,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.16.2" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "assign", "bytes", @@ -4116,7 +4175,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.11.3" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "base64 0.21.0", "bytes", @@ -4149,7 +4208,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.7.1" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "js_int", "ruma-common", @@ -4160,7 +4219,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.9.1" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "js_int", "thiserror", @@ -4169,7 +4228,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.11.3" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "once_cell", "proc-macro-crate", @@ -4184,7 +4243,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.7.1" -source = "git+https://github.com/ruma/ruma.git?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +source = "git+https://github.com/ruma/ruma.git?rev=0143bd9b9f5dcfcaa835afb76f342c12f014f945#0143bd9b9f5dcfcaa835afb76f342c12f014f945" dependencies = [ "js_int", "ruma-common", @@ -4192,6 +4251,20 @@ dependencies = [ "serde_json", ] +[[package]] +name = "rusqlite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +dependencies = [ + "bitflags 1.3.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + [[package]] name = "rustc-hash" version = "1.1.0" @@ -4213,7 +4286,7 @@ version = "0.37.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -4263,7 +4336,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4467,22 +4540,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "sled" -version = "0.34.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" -dependencies = [ - "crc32fast", - "crossbeam-epoch", - "crossbeam-utils", - "fs2", - "fxhash", - "libc", - "log", - "parking_lot 0.11.2", -] - [[package]] name = "smallvec" version = "1.10.0" @@ -4505,7 +4562,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee960607b1f7fda934dce68e76e925989ebe186ac04d6ab5ea9ce93e13835c03" dependencies = [ - "bitflags", + "bitflags 1.3.2", "futures-channel", "futures-core", "gdk-pixbuf", @@ -4573,7 +4630,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "phf_shared 0.10.0", "precomputed-hash", "serde", diff --git a/Cargo.toml b/Cargo.toml index d86fcfae..79e83fea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,8 +75,8 @@ version = "0.6" features = ["v4_10"] [dependencies.matrix-sdk] -git = "https://github.com/matrix-org/matrix-rust-sdk.git" -rev = "48b67759eded88e26db71a85b4ea8b7e3a153fcd" +git = "https://github.com/zecakeh/matrix-rust-sdk.git" +rev = "4002c7fad13bf058962976d9b08e0e03b70b49b2" features = [ "socks", "sso-login", @@ -86,15 +86,10 @@ features = [ "image-rayon", ] -[dependencies.matrix-sdk-sled] -git = "https://github.com/matrix-org/matrix-rust-sdk.git" -rev = "48b67759eded88e26db71a85b4ea8b7e3a153fcd" -features = ["crypto-store"] - [dependencies.ruma] # version = "0.8.2" git = "https://github.com/ruma/ruma.git" -rev = "8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" +rev = "0143bd9b9f5dcfcaa835afb76f342c12f014f945" features = ["unstable-unspecified", "client-api-c", "unstable-sanitize"] [dependencies.shumate] diff --git a/src/login/mod.rs b/src/login/mod.rs index a27bff5a..a17dd20f 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -5,11 +5,9 @@ use gettextrs::gettext; use gtk::{self, gio, glib, glib::clone, subclass::prelude::*, CompositeTemplate}; use log::{error, warn}; use matrix_sdk::{ - config::{RequestConfig, StoreConfig}, - ruma::api::client::session::get_login_types::v3::LoginType, - Client, ClientBuildError, StoreError, + config::RequestConfig, ruma::api::client::session::get_login_types::v3::LoginType, Client, + ClientBuildError, }; -use matrix_sdk_sled::{MigrationConflictStrategy, OpenStoreError, SledStateStore}; use rand::{distributions::Alphanumeric, thread_rng, Rng}; use ruma::OwnedServerName; use thiserror::Error; @@ -714,8 +712,6 @@ pub enum HomeserverOrServerName { /// All errors that can occur when setting up the Matrix client. #[derive(Error, Debug)] pub enum ClientSetupError { - #[error(transparent)] - Store(#[from] OpenStoreError), #[error(transparent)] Client(#[from] ClientBuildError), #[error(transparent)] @@ -725,7 +721,6 @@ pub enum ClientSetupError { impl UserFacingError for ClientSetupError { fn to_user_facing(self) -> String { match self { - ClientSetupError::Store(err) => err.to_user_facing(), ClientSetupError::Client(err) => err.to_user_facing(), ClientSetupError::Sdk(err) => err.to_user_facing(), } @@ -754,7 +749,7 @@ impl CreatedClient { use_discovery: bool, path: Option, passphrase: Option, - ) -> Result { + ) -> Result { let path = path.unwrap_or_else(|| { let mut path = glib::user_data_dir(); path.push(glib::uuid_string_random().as_str()); @@ -769,17 +764,6 @@ impl CreatedClient { .collect() }); - let state_store = SledStateStore::builder() - .path(path.clone()) - .passphrase(passphrase.clone()) - .migration_conflict_strategy(MigrationConflictStrategy::Drop) - .build() - .map_err(|err| OpenStoreError::from(StoreError::backend(err)))?; - let crypto_store = state_store.open_crypto_store().await?; - let store_config = StoreConfig::new() - .state_store(state_store) - .crypto_store(crypto_store); - let builder = match homeserver { HomeserverOrServerName::Homeserver(url) => Client::builder().homeserver_url(url), HomeserverOrServerName::ServerName(server_name) => { @@ -788,7 +772,7 @@ impl CreatedClient { }; let client = builder - .store_config(store_config) + .sqlite_store(&path, Some(&passphrase)) // force_auth option to solve an issue with some servers configuration to require // auth for profiles: // https://gitlab.gnome.org/GNOME/fractal/-/issues/934 diff --git a/src/session/room/event/mod.rs b/src/session/room/event/mod.rs index eb9a1a99..3947b0b6 100644 --- a/src/session/room/event/mod.rs +++ b/src/session/room/event/mod.rs @@ -227,21 +227,20 @@ impl Event { /// /// Returns `true` if the update succeeded. pub fn try_update_with(&self, item: &EventTimelineItem) -> bool { - match self.key() { - EventKey::TransactionId(txn_id) => match item { - EventTimelineItem::Local(local_event) if local_event.transaction_id() == txn_id => { - self.set_item(item.clone()); - return true; - } - _ => {} - }, - EventKey::EventId(event_id) => match item { - EventTimelineItem::Remote(remote_event) if remote_event.event_id() == event_id => { - self.set_item(item.clone()); - return true; - } - _ => {} - }, + match &self.key() { + EventKey::TransactionId(txn_id) + if item.is_local_echo() && item.transaction_id() == Some(txn_id) => + { + self.set_item(item.clone()); + return true; + } + EventKey::EventId(event_id) + if !item.is_local_echo() && item.event_id() == Some(event_id) => + { + self.set_item(item.clone()); + return true; + } + _ => {} } false @@ -272,16 +271,8 @@ impl Event { let was_highlighted = self.is_highlighted(); let imp = self.imp(); - imp.reactions.update( - item.as_remote() - .map(|i| i.reactions().clone()) - .unwrap_or_default(), - ); - imp.read_receipts.update( - item.as_remote() - .map(|i| i.read_receipts().clone()) - .unwrap_or_default(), - ); + imp.reactions.update(item.reactions().clone()); + imp.read_receipts.update(item.read_receipts().clone()); imp.item.replace(Some(item)); self.notify("source"); @@ -296,28 +287,41 @@ impl Event { /// The raw JSON source for this `Event`, if it has been echoed back /// by the server. pub fn raw(&self) -> Option> { - self.imp().item.borrow().as_ref().unwrap().raw().cloned() + self.imp() + .item + .borrow() + .as_ref() + .unwrap() + .original_json() + .cloned() } /// The pretty-formatted JSON source for this `Event`, if it has /// been echoed back by the server. pub fn source(&self) -> Option { - self.imp().item.borrow().as_ref().unwrap().raw().map(|raw| { - // We have to convert it to a Value, because a RawValue cannot be - // pretty-printed. - let json = serde_json::to_value(raw).unwrap(); + self.imp() + .item + .borrow() + .as_ref() + .unwrap() + .original_json() + .map(|raw| { + // We have to convert it to a Value, because a RawValue cannot be + // pretty-printed. + let json = serde_json::to_value(raw).unwrap(); - serde_json::to_string_pretty(&json).unwrap() - }) + serde_json::to_string_pretty(&json).unwrap() + }) } /// The unique of this `Event` in the timeline. pub fn key(&self) -> EventKey { - match self.imp().item.borrow().as_ref().unwrap() { - EventTimelineItem::Local(event) => { - EventKey::TransactionId(event.transaction_id().to_owned()) - } - EventTimelineItem::Remote(event) => EventKey::EventId(event.event_id().to_owned()), + let item_ref = self.imp().item.borrow(); + let item = item_ref.as_ref().unwrap(); + if item.is_local_echo() { + EventKey::TransactionId(item.transaction_id().unwrap().to_owned()) + } else { + EventKey::EventId(item.event_id().unwrap().to_owned()) } } @@ -416,7 +420,7 @@ impl Event { /// Whether this `Event` should be highlighted. pub fn is_highlighted(&self) -> bool { let item_ref = self.imp().item.borrow(); - let Some(item) = item_ref.as_ref().and_then(|i| i.as_remote()) else { + let Some(item) = item_ref.as_ref() else { return false; }; @@ -453,9 +457,7 @@ impl Event { /// Returns `None(_)` if this event is not a reply. pub fn reply_to_event_content(&self) -> Option>> { match self.imp().item.borrow().as_ref().unwrap().content() { - TimelineItemContent::Message(message) => { - message.in_reply_to().map(|d| d.details.clone()) - } + TimelineItemContent::Message(message) => message.in_reply_to().map(|d| d.event.clone()), _ => None, } } diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs index 63f0aa55..caf765c4 100644 --- a/src/session/room/mod.rs +++ b/src/session/room/mod.rs @@ -31,7 +31,7 @@ use matrix_sdk::{ OwnedEventId, OwnedRoomId, OwnedUserId, RoomId, }, sync::{JoinedRoom, LeftRoom}, - DisplayName, Result as MatrixResult, + DisplayName, Result as MatrixResult, RoomMemberships, }; use ruma::events::{ receipt::ReceiptThread, typing::TypingEventContent, AnyMessageLikeEventContent, @@ -285,14 +285,18 @@ impl Room { self.imp().room_id.get().unwrap() } - /// Whether this room is a DM - pub fn is_direct(&self) -> bool { - self.imp() - .matrix_room - .borrow() - .as_ref() - .unwrap() - .is_direct() + /// Set the proper category for this joined room. + pub fn set_joined(&self) { + let matrix_room = self.matrix_room(); + + let handle = spawn_tokio!(async move { matrix_room.is_direct().await.unwrap_or_default() }); + spawn!(clone!(@weak self as obj => async move { + if handle.await.unwrap() { + obj.set_category(RoomType::Direct); + } else { + obj.set_category(RoomType::Normal); + } + })); } pub fn matrix_room(&self) -> MatrixRoom { @@ -450,7 +454,7 @@ impl Room { } } - if room.is_direct() { + if room.is_direct().await.unwrap_or_default() { room.set_is_direct(false).await?; } @@ -473,7 +477,7 @@ impl Room { RoomType::Outdated => unimplemented!(), RoomType::Space => unimplemented!(), RoomType::Direct => { - if !room.is_direct() { + if !room.is_direct().await.unwrap_or_default() { room.set_is_direct(true).await?; } @@ -498,7 +502,7 @@ impl Room { } } RoomType::Normal => { - if room.is_direct() { + if room.is_direct().await.unwrap_or_default() { room.set_is_direct(false).await?; } match previous_category { @@ -523,7 +527,7 @@ impl Room { RoomType::Outdated => unimplemented!(), RoomType::Space => unimplemented!(), RoomType::Direct => { - if !room.is_direct() { + if !room.is_direct().await.unwrap_or_default() { room.set_is_direct(true).await?; } @@ -576,7 +580,7 @@ impl Room { RoomType::Outdated => unimplemented!(), RoomType::Space => unimplemented!(), RoomType::Direct => { - if !room.is_direct() { + if !room.is_direct().await.unwrap_or_default() { room.set_is_direct(true).await?; } @@ -639,19 +643,22 @@ impl Room { if matrix_room.is_space() { self.set_category_internal(RoomType::Space); } else { - let is_direct = matrix_room.is_direct(); - let handle = spawn_tokio!(async move { matrix_room.tags().await }); + let matrix_room_clone = matrix_room.clone(); + let is_direct = spawn_tokio!(async move { + matrix_room_clone.is_direct().await.unwrap_or_default() + }); + let tags = spawn_tokio!(async move { matrix_room.tags().await }); spawn!( glib::PRIORITY_DEFAULT_IDLE, clone!(@weak self as obj => async move { - let mut category = if is_direct { - RoomType::Direct - } else { - RoomType::Normal - }; + let mut category = if is_direct.await.unwrap() { + RoomType::Direct + } else { + RoomType::Normal + }; - if let Ok(Some(tags)) = handle.await.unwrap() { + if let Ok(Some(tags)) = tags.await.unwrap() { if tags.get(&TagName::Favorite).is_some() { category = RoomType::Favorite; } else if tags.get(&TagName::LowPriority).is_some() { @@ -1131,7 +1138,12 @@ impl Room { imp.members_loaded.set(true); let matrix_room = self.matrix_room(); - let handle = spawn_tokio!(async move { matrix_room.members().await }); + let handle = spawn_tokio!(async move { + let mut memberships = RoomMemberships::all(); + memberships.remove(RoomMemberships::LEAVE); + + matrix_room.members(memberships).await + }); spawn!( glib::PRIORITY_LOW, clone!(@weak self as obj => async move { @@ -1140,9 +1152,6 @@ impl Room { match handle.await.unwrap() { Ok(members) => { // Add all members needed to display room events. - let members: Vec<_> = members.into_iter().filter(|member| { - &MembershipState::Leave != member.membership() - }).collect(); obj.members().update_from_room_members(&members); }, Err(error) => { diff --git a/src/session/sidebar/room_row.rs b/src/session/sidebar/room_row.rs index 71eefe10..9daf9191 100644 --- a/src/session/sidebar/room_row.rs +++ b/src/session/sidebar/room_row.rs @@ -351,11 +351,6 @@ impl RoomRow { } fn set_room_as_normal_or_direct(&self) { - let room = self.room().unwrap(); - if room.is_direct() { - room.set_category(RoomType::Direct); - } else { - room.set_category(RoomType::Normal); - } + self.room().unwrap().set_joined(); } } diff --git a/src/user_facing_error.rs b/src/user_facing_error.rs index fb69ec0b..cda60c80 100644 --- a/src/user_facing_error.rs +++ b/src/user_facing_error.rs @@ -9,7 +9,6 @@ use matrix_sdk::{ }, ClientBuildError, Error, HttpError, RumaApiError, }; -use matrix_sdk_sled::OpenStoreError; use crate::ngettext_f; @@ -74,12 +73,6 @@ impl UserFacingError for Error { } } -impl UserFacingError for OpenStoreError { - fn to_user_facing(self) -> String { - gettext("Could not open the store.") - } -} - impl UserFacingError for ClientBuildError { fn to_user_facing(self) -> String { match self { @@ -88,7 +81,7 @@ impl UserFacingError for ClientBuildError { gettext("Homeserver auto-discovery failed. Try entering the full URL manually.") } ClientBuildError::Http(err) => err.to_user_facing(), - ClientBuildError::SledStore(err) => err.to_user_facing(), + ClientBuildError::SqliteStore(_) => gettext("Could not open the store."), _ => gettext("An unknown error occurred."), } }