Browse Source

chore: Update matrix-sdk and switch to SQLite store

merge-requests/1327/merge
Kévin Commaille 3 years ago committed by Kévin Commaille
parent
commit
92f551d6da
  1. 287
      Cargo.lock
  2. 11
      Cargo.toml
  3. 24
      src/login/mod.rs
  4. 84
      src/session/room/event/mod.rs
  5. 61
      src/session/room/mod.rs
  6. 7
      src/session/sidebar/room_row.rs
  7. 9
      src/user_facing_error.rs

287
Cargo.lock generated

@ -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",

11
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]

24
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<PathBuf>,
passphrase: Option<String>,
) -> Result<CreatedClient, ClientSetupError> {
) -> Result<CreatedClient, ClientBuildError> {
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

84
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<Raw<AnySyncTimelineEvent>> {
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<String> {
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<TimelineDetails<Box<RepliedToEvent>>> {
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,
}
}

61
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) => {

7
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();
}
}

9
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."),
}
}

Loading…
Cancel
Save