From 60c9a816da67cb2551f5322baddbcc8ce59199d8 Mon Sep 17 00:00:00 2001 From: Stefan Tatschner Date: Wed, 29 Mar 2023 15:23:18 +0200 Subject: [PATCH] feat: Implement dbus interface --- Cargo.lock | 623 ++++++++++++++++++++++++++---------------- Cargo.toml | 11 +- src/client/mod.rs | 1 + src/client/session.rs | 58 +++- src/dbus.rs | 46 ++++ src/main.rs | 58 +++- 6 files changed, 537 insertions(+), 260 deletions(-) create mode 100644 src/dbus.rs diff --git a/Cargo.lock b/Cargo.lock index bcfc266..1106b6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -59,11 +59,51 @@ dependencies = [ "memchr", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" dependencies = [ "backtrace", ] @@ -76,9 +116,9 @@ checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -91,13 +131,14 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.2", "predicates-core", "predicates-tree", "wait-timeout", @@ -145,35 +186,38 @@ dependencies = [ ] [[package]] -name = "async-fs" -version = "1.6.0" +name = "async-global-executor" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ + "async-channel", + "async-executor", + "async-io", "async-lock", - "autocfg", "blocking", "futures-lite", + "once_cell", ] [[package]] name = "async-io" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock", "autocfg", + "cfg-if 1.0.0", "concurrent-queue", "futures-lite", - "libc", "log", "parking", "polling", + "rustix", "slab", "socket2", "waker-fn", - "windows-sys 0.42.0", ] [[package]] @@ -186,20 +230,59 @@ dependencies = [ ] [[package]] -name = "async-once-cell" -version = "0.4.4" +name = "async-process" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b49bd4c5b769125ea6323601c39815848972880efd33ffb2d01f9f909adc699" +checksum = "6381ead98388605d0d9ff86371043b5aa922a3905824244de40dc263a14fcba4" +dependencies = [ + "async-io", + "async-lock", + "autocfg", + "blocking", + "cfg-if 1.0.0", + "event-listener", + "futures-lite", + "libc", + "signal-hook 0.3.15", + "windows-sys 0.42.0", +] [[package]] name = "async-recursion" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-channel", + "async-global-executor", + "async-io", + "async-lock", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", ] [[package]] @@ -221,24 +304,24 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-task" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" +checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] @@ -317,12 +400,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitmaps" -version = "2.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" -dependencies = [ - "typenum", -] +checksum = "703642b98a00b3b90513279a8ede3fcfa479c126c5fb46e78f3051522f021403" [[package]] name = "blake3" @@ -397,9 +477,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -510,17 +590,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", - "clap_lex", - "is-terminal", "once_cell", - "strsim", - "termcolor", ] [[package]] @@ -533,27 +609,37 @@ dependencies = [ "log", ] +[[package]] +name = "clap_builder" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", + "once_cell", + "strsim", +] + [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "cloudabi" @@ -570,6 +656,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys 0.45.0", +] + [[package]] name = "concurrent-queue" version = "2.1.0" @@ -609,9 +710,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -660,7 +761,7 @@ dependencies = [ "libc", "mio 0.6.23", "parking_lot 0.10.2", - "signal-hook", + "signal-hook 0.1.17", "winapi 0.3.9", ] @@ -683,6 +784,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ctr" version = "0.9.2" @@ -736,7 +847,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -793,7 +904,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -860,18 +971,18 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" dependencies = [ "errno-dragonfly", "libc", - "winapi 0.3.9", + "windows-sys 0.45.0", ] [[package]] @@ -892,9 +1003,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "eyeball" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7be1d67275032c662cadf525a79aef6909469579c5d81c69c148f7257257af" +checksum = "b8ec13e5a70ea34fb31abd14e5f384ce89d7cac84f39cb4f0c1b13bb20c4a09b" dependencies = [ "futures-core", "readlock", @@ -902,12 +1013,12 @@ dependencies = [ [[package]] name = "eyeball-im" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5240948c0d831a678fcfc10439d3f202088723e38e14bccbdbb6a3b61c54d1ab" +checksum = "29e6dff0ac9894dcc183064377dfeb4137bcffa9f9ec3dbc10f8e7fba34c0ac7" dependencies = [ "futures-core", - "im", + "imbl", "tokio", "tokio-stream", ] @@ -1073,7 +1184,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1123,9 +1234,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1159,9 +1270,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.11.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" dependencies = [ "color_quant", "weezl", @@ -1362,26 +1473,11 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "im" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" -dependencies = [ - "bitmaps", - "rand_core 0.6.4", - "rand_xoshiro", - "serde", - "sized-chunks", - "typenum", - "version_check", -] - [[package]] name = "image" -version = "0.24.5" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" dependencies = [ "bytemuck", "byteorder", @@ -1391,10 +1487,32 @@ dependencies = [ "num-rational", "num-traits", "png", - "scoped_threadpool", "tiff", ] +[[package]] +name = "imbl" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2806b69cd9f4664844027b64465eacb444c67c1db9c778e341adff0c25cdb0d" +dependencies = [ + "bitmaps", + "imbl-sized-chunks", + "rand_core 0.6.4", + "rand_xoshiro", + "serde", + "version_check", +] + +[[package]] +name = "imbl-sized-chunks" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6957ea0b2541c5ca561d3ef4538044af79f8a05a1eb3a3b148936aaceaa1076" +dependencies = [ + "bitmaps", +] + [[package]] name = "indexed_db_futures" version = "0.3.0" @@ -1411,9 +1529,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -1444,10 +1562,11 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -1463,15 +1582,15 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -1573,6 +1692,15 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "984e109462d46ad18314f10e392c286c3d47bce203088a09012de1015b45b737" +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -1597,9 +1725,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" [[package]] name = "lock_api" @@ -1627,6 +1755,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", + "value-bag", ] [[package]] @@ -1655,17 +1784,16 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "matrix-sdk" version = "0.6.2" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "anyhow", "anymap2", - "async-once-cell", "async-stream", "async-trait", "backoff", @@ -1679,20 +1807,22 @@ dependencies = [ "futures-util", "gloo-timers", "http", - "im", "image", + "imbl", "indexmap", "matrix-sdk-base", "matrix-sdk-common", "matrix-sdk-indexeddb", "matrix-sdk-sled", "mime", + "mime_guess", "pin-project-lite", "reqwest", "ruma", "serde", "serde_html_form", "serde_json", + "tempfile", "thiserror", "tokio", "tracing", @@ -1703,7 +1833,7 @@ dependencies = [ [[package]] name = "matrix-sdk-base" version = "0.6.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "async-stream", "async-trait", @@ -1719,6 +1849,7 @@ dependencies = [ "serde", "serde_json", "thiserror", + "tokio", "tracing", "zeroize", ] @@ -1726,9 +1857,8 @@ dependencies = [ [[package]] name = "matrix-sdk-common" version = "0.6.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ - "async-lock", "futures-core", "futures-util", "gloo-timers", @@ -1743,9 +1873,10 @@ dependencies = [ [[package]] name = "matrix-sdk-crypto" version = "0.6.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "aes 0.8.2", + "async-std", "async-trait", "atomic", "base64 0.21.0", @@ -1762,6 +1893,7 @@ dependencies = [ "matrix-sdk-common", "pbkdf2", "rand 0.8.5", + "rmp-serde", "ruma", "serde", "serde_json", @@ -1776,7 +1908,7 @@ dependencies = [ [[package]] name = "matrix-sdk-indexeddb" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "anyhow", "async-trait", @@ -1793,6 +1925,7 @@ dependencies = [ "serde", "serde_json", "thiserror", + "tokio", "tracing", "wasm-bindgen", "web-sys", @@ -1801,7 +1934,7 @@ dependencies = [ [[package]] name = "matrix-sdk-sled" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "async-stream", "async-trait", @@ -1825,7 +1958,7 @@ dependencies = [ [[package]] name = "matrix-sdk-store-encryption" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#0f7d839c492fb7823e8a0107dc3a12316b7b4209" +source = "git+https://github.com/matrix-org/matrix-rust-sdk?branch=main#6b5f0b8ec30470d61b0e656097acd57e1b4c6662" dependencies = [ "blake3", "chacha20poly1305", @@ -1868,9 +2001,19 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] [[package]] name = "miniz_oxide" @@ -1939,7 +2082,7 @@ dependencies = [ "log", "matrix-sdk", "mime", - "predicates", + "predicates 2.1.5", "prompts", "rpassword", "serde", @@ -1948,6 +2091,7 @@ dependencies = [ "tracing", "tracing-subscriber", "xdg", + "zbus", ] [[package]] @@ -2139,7 +2283,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2171,12 +2315,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "os_str_bytes" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" - [[package]] name = "overload" version = "0.1.1" @@ -2373,17 +2511,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c575290b64d24745b6c57a12a31465f0a66f3a4799686a6921526a33b0797965" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -2408,7 +2558,6 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", "version_check", ] @@ -2425,9 +2574,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" dependencies = [ "unicode-ident", ] @@ -2464,7 +2613,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2569,9 +2718,9 @@ dependencies = [ [[package]] name = "readlock" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c8a22130504d1f661d1bc373b424f2d45910fa5319132d903a4074e1527b2e" +checksum = "ed5b7f359207e69e1395440120fa3b07c59bb92c4ec077804cd10d7ebbe4c01a" [[package]] name = "redox_syscall" @@ -2588,6 +2737,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -2601,9 +2759,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -2618,15 +2776,15 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "reqwest" -version = "0.11.14" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" dependencies = [ "base64 0.21.0", "bytes", @@ -2726,7 +2884,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.8.2" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "assign", "js_int", @@ -2739,7 +2897,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.16.2" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "assign", "bytes", @@ -2756,7 +2914,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.11.3" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "base64 0.21.0", "bytes", @@ -2787,7 +2945,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.7.1" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "js_int", "ruma-common", @@ -2798,7 +2956,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.9.1" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "js_int", "thiserror", @@ -2807,7 +2965,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.11.3" -source = "git+https://github.com/ruma/ruma?rev=a399a4017a9f0b249ce848a652f2e4fe65435eaf#a399a4017a9f0b249ce848a652f2e4fe65435eaf" +source = "git+https://github.com/ruma/ruma?rev=8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5#8eea3e05490fa9a318f9ed66c3a75272e6ef0ee5" dependencies = [ "once_cell", "proc-macro-crate", @@ -2815,21 +2973,21 @@ dependencies = [ "quote", "ruma-identifiers-validation", "serde", - "syn", + "syn 1.0.109", "toml", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustix" -version = "0.36.9" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "c348b5dc624ecee40108aa2922fed8bad89d7fcc2b9f8cb18f632898ac4a37f9" dependencies = [ "bitflags", "errno", @@ -2875,12 +3033,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - [[package]] name = "scopeguard" version = "1.1.0" @@ -2941,9 +3093,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.155" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] @@ -2959,13 +3111,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.155" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] @@ -2983,9 +3135,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -2994,13 +3146,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] @@ -3079,6 +3231,16 @@ dependencies = [ "signal-hook-registry", ] +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -3094,16 +3256,6 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -[[package]] -name = "sized-chunks" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" -dependencies = [ - "bitmaps", - "typenum", -] - [[package]] name = "slab" version = "0.4.8" @@ -3190,63 +3342,53 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "syn" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" dependencies = [ "proc-macro2", "quote", - "syn", - "unicode-xid", + "unicode-ident", ] [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if 1.0.0", "fastrand", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "rustix", - "windows-sys 0.42.0", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", + "windows-sys 0.45.0", ] [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] @@ -3287,31 +3429,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio 0.8.6", "num_cpus", "pin-project-lite", "socket2", "tokio-macros", + "tracing", "windows-sys 0.45.0", ] [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.11", ] [[package]] @@ -3396,9 +3538,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.6" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08de71aa0d6e348f070457f85af8bd566e2bc452156a423ddf22861b3a953fae" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", "serde", @@ -3433,7 +3575,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3504,9 +3646,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -3523,12 +3665,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "universal-hash" version = "0.4.1" @@ -3556,6 +3692,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "1.3.0" @@ -3572,6 +3714,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "value-bag" +version = "1.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" +dependencies = [ + "ctor", + "version_check", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -3667,7 +3819,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -3701,7 +3853,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3781,15 +3933,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -3879,9 +4022,9 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winnow" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] @@ -3928,17 +4071,12 @@ dependencies = [ [[package]] name = "zbus" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20aae5dd5b051971cd2f49f9f3b860e57b2b495ba5ba254eaec42d34ede57e97" +checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848" dependencies = [ "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", "async-recursion", - "async-task", "async-trait", "byteorder", "derivative", @@ -3949,6 +4087,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", + "lazy_static", "nix", "once_cell", "ordered-stream", @@ -3957,6 +4096,7 @@ dependencies = [ "serde_repr", "sha1", "static_assertions", + "tokio", "tracing", "uds_windows", "winapi 0.3.9", @@ -3967,15 +4107,15 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9264b3a1bcf5503d4e0348b6e7efe1da58d4f92a913c15ed9e63b52de85faaa1" +checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4001,14 +4141,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" dependencies = [ "proc-macro2", "quote", - "syn", - "synstructure", + "syn 2.0.11", ] [[package]] @@ -4034,7 +4173,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4046,5 +4185,5 @@ checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] diff --git a/Cargo.toml b/Cargo.toml index b0ab85c..aef117d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,6 @@ clap = { version = "4.1.6", features = ["derive", "cargo"] } clap-verbosity-flag = "2.0.0" futures = "0.3.26" is-terminal = "0.4.4" -keyring = "2.0.1" log = "0.4.17" mime = "0.3.16" prompts = "0.1.0" @@ -33,6 +32,16 @@ git = "https://github.com/matrix-org/matrix-rust-sdk" branch = "main" default-features = false features = ["e2e-encryption", "sled", "markdown", "socks", "anyhow", "image-proc"] + +[dependencies.keyring] +version = "2" +default-features = false +features = ["linux-secret-service-rt-tokio-crypto-rust"] + +[dependencies.zbus] +version = "3" +default-features = false +features = ["tokio"] [dev-dependencies] assert_cmd = "2.0.8" diff --git a/src/client/mod.rs b/src/client/mod.rs index d16f940..39449e8 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -38,6 +38,7 @@ impl Client { self.inner.restore_session(session).await?; } + // TODO: Is this actually an error? Ok(()) } diff --git a/src/client/session.rs b/src/client/session.rs index eb317a6..047496e 100644 --- a/src/client/session.rs +++ b/src/client/session.rs @@ -3,8 +3,9 @@ use std::fs; use std::io; use std::os::unix::fs::PermissionsExt; use std::path::{Path, PathBuf}; +use std::thread; -use anyhow::bail; +use anyhow::{anyhow, bail}; use matrix_sdk::ruma::{OwnedUserId, UserId}; use matrix_sdk::Session; use serde::{Deserialize, Serialize}; @@ -12,6 +13,25 @@ use tracing::error; use super::CRATE_NAME; +// The keyring crate uses zbus internally, which prevents it from being used in +// the main context of mnotify (it panics, because a second runtime is created). +// This problem is solved by moving the calls to the keyring crate into an own +// thread. + +// TODO: Find out how to wrap a function call properly in rust. :) + +macro_rules! error_in_thread { + ($e:expr, $res:ident) => { + match $e { + Ok(e) => e, + Err(e) => { + $res = Err(anyhow!("{}", e)); + return; + } + } + }; +} + pub(crate) fn session_json_path(user_id: impl AsRef) -> anyhow::Result { let user_id = user_id.as_ref(); let xdg_dirs = xdg::BaseDirectories::with_prefix(CRATE_NAME)?; @@ -33,9 +53,21 @@ fn load_session_json(path: impl AsRef) -> anyhow::Result> } fn load_session_keyring(user_id: impl AsRef) -> anyhow::Result> { - let entry = keyring::Entry::new(CRATE_NAME, user_id.as_ref().as_str())?; - // TODO: Handle None case. - let raw = entry.get_password()?; + let mut raw: String = "".into(); + let mut res = Ok(()); + let user_id = user_id.as_ref().to_string(); + + thread::scope(|s| { + let t = s.spawn(|| { + let entry = error_in_thread!(keyring::Entry::new(CRATE_NAME, user_id.as_str()), res); + + // TODO: Handle None case. + raw = error_in_thread!(entry.get_password(), res); + }); + + t.join().unwrap(); + }); + Ok(Some(serde_json::from_str(&raw)?)) } @@ -66,9 +98,21 @@ fn persist_session_json(path: impl AsRef, session: &Session) -> anyhow::Re } fn persist_session_keyring(user_id: impl AsRef, session: &Session) -> anyhow::Result<()> { - let entry = keyring::Entry::new(CRATE_NAME, user_id.as_ref().as_str())?; - entry.set_password(&serde_json::to_string(session)?)?; - Ok(()) + let mut res = Ok(()); + let user_id = user_id.as_ref().to_string(); + + thread::scope(|s| { + let t = s.spawn(|| { + let entry = error_in_thread!(keyring::Entry::new(CRATE_NAME, user_id.as_str()), res); + + let data = error_in_thread!(serde_json::to_string(session), res); + error_in_thread!(entry.set_password(&data), res); + }); + + t.join().unwrap(); + }); + + res } pub(crate) fn persist_session( diff --git a/src/dbus.rs b/src/dbus.rs new file mode 100644 index 0000000..be61d49 --- /dev/null +++ b/src/dbus.rs @@ -0,0 +1,46 @@ +use std::sync::Arc; + +use matrix_sdk::ruma::OwnedRoomId; +use zbus::fdo::{Error, Result}; +use zbus::{dbus_interface, dbus_proxy, Connection, ConnectionBuilder}; + +use crate::client::Client; + +pub(crate) struct DBusServer { + client: Arc, +} + +#[dbus_interface(name = "org.rumpelsepp.mnotify1")] +impl DBusServer { + async fn send(&self, room_id: &str, body: &str, markdown: bool) -> Result<()> { + let room_id: OwnedRoomId = room_id + .try_into() + .map_err(|e| Error::InvalidArgs(format!("{:?}", e)))?; + + self.client + .send_message(room_id, body, markdown) + .await + .map_err(|e| Error::Failed(format!("{:?}", e)))?; + Ok(()) + } +} + +pub(crate) async fn connect(client: Arc) -> anyhow::Result { + let iface = DBusServer { client }; + let connection = ConnectionBuilder::session()? + .name("org.rumpelsepp.mnotify")? + .serve_at("/org/rumpelsepp/mnotify", iface)? + .build() + .await?; + + Ok(connection) +} + +#[dbus_proxy( + interface = "org.rumpelsepp.mnotify1", + default_service = "org.rumpelsepp.mnotify", + default_path = "/org/rumpelsepp/mnotify" +)] +trait DBusClient { + fn send(&self, room_id: &str, body: &str, markdown: bool) -> Result<()>; +} diff --git a/src/main.rs b/src/main.rs index 35b79ac..f0e909b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ use std::env; use std::path::PathBuf; +use std::sync::Arc; use anyhow::bail; use clap::{Parser, Subcommand}; @@ -18,16 +19,18 @@ use serde_json::value::RawValue; mod base64; mod client; +mod dbus; mod mime; mod outputs; mod terminal; mod util; use crate::client::{session, Client}; +use crate::dbus::DBusClientProxy; const CRATE_NAME: &str = clap::crate_name!(); -#[derive(Parser, Debug)] +#[derive(Parser, Debug, Clone)] #[command(author, version, about, long_about = None)] struct Cli { #[command(flatten)] @@ -45,7 +48,7 @@ struct Cli { command: Command, } -#[derive(Debug, Subcommand)] +#[derive(Clone, Debug, Subcommand)] enum Command { /// Delete session store and secrets (dangerous!) Clean { user_id: OwnedUserId }, @@ -135,6 +138,10 @@ enum Command { #[arg(long, conflicts_with_all = ["notice", "emote", "attachment"])] reply_to: Option, + /// Send message via another mnotify instance via ipc + #[arg(short, long)] + ipc: bool, + /// String to send; read from stdin if omitted message: Option, }, @@ -197,8 +204,8 @@ async fn on_room_message( Ok(()) } -async fn create_client(cmd: &Command) -> anyhow::Result { - match cmd { +async fn create_client(cmd: &Command, sync_settings: SyncSettings) -> anyhow::Result> { + let client = match cmd { Command::Login { ref user_id, ref device_name, @@ -212,7 +219,13 @@ async fn create_client(cmd: &Command) -> anyhow::Result { } Command::Clean { user_id } => Client::builder().user_id(user_id.to_owned()).build().await, _ => Client::builder().load_meta()?.build().await?.ensure_login(), + }?; + + if cmd.can_sync() { + client.sync_once(sync_settings).await?; } + + Ok(Arc::new(client)) } #[tokio::main] @@ -226,20 +239,18 @@ async fn main() -> anyhow::Result<()> { .with_max_level(util::convert_filter(args.verbose.log_level_filter())) .init(); - let client = create_client(&args.command).await?; - - if args.command.can_sync() { - client.sync_once(sync_settings.clone()).await?; - } + let cmd = args.command.clone(); match args.command { Command::Clean { .. } => { + let client = create_client(&cmd, sync_settings.clone()).await?; client.clean()?; } Command::Homeserver { force, include_token, } => { + let client = create_client(&cmd, sync_settings.clone()).await?; let home_server = client.homeserver().await.to_string(); let user_id = client.user_id().unwrap().to_string(); @@ -278,6 +289,8 @@ async fn main() -> anyhow::Result<()> { device_name, password, } => { + let client = create_client(&cmd, sync_settings.clone()).await?; + if client.logged_in() { bail!("already logged in"); } @@ -302,9 +315,11 @@ async fn main() -> anyhow::Result<()> { .dump()?; } Command::Logout {} => { + let client = create_client(&cmd, sync_settings.clone()).await?; client.logout().await?; } Command::Messages { room_id, limit } => { + let client = create_client(&cmd, sync_settings.clone()).await?; let msgs = client.messages(room_id, limit).await?; let events: Vec> = msgs .chunk @@ -320,6 +335,7 @@ async fn main() -> anyhow::Result<()> { query_members, query_avatars, } => { + let client = create_client(&cmd, sync_settings.clone()).await?; let out = match room_id { Some(room_id) => { let Some(room) = client.get_room(&room_id) else { @@ -350,11 +366,13 @@ async fn main() -> anyhow::Result<()> { event_id, reason, } => { + let client = create_client(&cmd, sync_settings.clone()).await?; let room = client.get_joined_room(room_id)?; room.redact(&event_id, reason.as_ref().map(String::as_ref), None) .await?; } Command::Verify {} => { + let client = create_client(&cmd, sync_settings.clone()).await?; client.set_sas_handlers().await?; client.sync(sync_settings.clone()).await?; } @@ -365,8 +383,21 @@ async fn main() -> anyhow::Result<()> { notice, emote, attachment, + ipc, message, } => { + if ipc { + let connection = zbus::Connection::session().await?; + let ipc_client = DBusClientProxy::new(&connection).await?; + let body = match message { + Some(message) => message, + None => terminal::read_stdin_to_string()?, + }; + ipc_client.send(room_id.as_str(), &body, markdown).await?; + return Ok(()); + } + + let client = create_client(&cmd, sync_settings.clone()).await?; if let Some(path) = attachment { return client.send_attachment(room_id, path).await; } @@ -395,6 +426,7 @@ async fn main() -> anyhow::Result<()> { receipt, raw, } => { + let client = create_client(&cmd, sync_settings.clone()).await?; if raw { let mut sync_stream = Box::pin(client.sync_stream(sync_settings.clone()).await); while let Some(Ok(response)) = sync_stream.next().await { @@ -412,14 +444,20 @@ async fn main() -> anyhow::Result<()> { }); } - client.sync(sync_settings.clone()).await?; + { + let dbus_server = crate::dbus::connect(client.clone()).await?; + tracing::debug!("created dbus server: {:?}", dbus_server); + client.sync(sync_settings.clone()).await?; + } } } Command::Typing { room_id, disable } => { + let client = create_client(&cmd, sync_settings.clone()).await?; let room = client.get_joined_room(room_id)?; room.typing_notice(!disable).await?; } Command::Whoami => { + let client = create_client(&cmd, sync_settings.clone()).await?; let resp = client.whoami().await?; println!("{}", serde_json::to_string(&resp)?); }