diff --git a/Cargo.lock b/Cargo.lock index 2027e8e..3841e64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -406,6 +406,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] + [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -889,6 +905,15 @@ dependencies = [ "ahash", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.1" @@ -1053,7 +1078,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.1", "libc", "windows-sys 0.48.0", ] @@ -1385,6 +1410,26 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -1441,6 +1486,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parking_lot" version = "0.11.2" @@ -2143,6 +2194,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + [[package]] name = "signal-hook" version = "0.3.15" @@ -2308,6 +2368,16 @@ dependencies = [ "syn 2.0.18", ] +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2333,11 +2403,24 @@ dependencies = [ "bytes", "libc", "mio", + "num_cpus", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2 1.0.60", + "quote 1.0.28", + "syn 2.0.18", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -2424,14 +2507,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] name = "trinitrix" version = "0.1.0" dependencies = [ - "crossterm", + "anyhow", + "crossterm 0.26.1", "matrix-sdk", + "serde", + "tokio", + "tracing-subscriber", "tui", ] @@ -2449,7 +2562,7 @@ checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" dependencies = [ "bitflags", "cassowary", - "crossterm", + "crossterm 0.25.0", "unicode-segmentation", "unicode-width", ] @@ -2548,6 +2661,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index d142cf6..6ee1b62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,9 @@ edition = "2021" [dependencies] tui = "0.19" -crossterm = "0.25" -matrix-sdk = "0.6" \ No newline at end of file +crossterm = "0.26" +matrix-sdk = "0.6" +anyhow = "1.0" +tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] } +tracing-subscriber = "0.3" +serde = "1.0" \ No newline at end of file diff --git a/src/accounts/mod.rs b/src/accounts/mod.rs new file mode 100644 index 0000000..400cdbf --- /dev/null +++ b/src/accounts/mod.rs @@ -0,0 +1,47 @@ +use matrix_sdk::{Client, config::SyncSettings, ruma::{user_id, events::room::message::SyncRoomMessageEvent}, Session}; +use anyhow::{Error, Result}; +use matrix_sdk::ruma::exports::serde_json; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Account { + homeserver: String, + + session: Session, + sync_token: Option, +} + +pub async fn account_add(homeserver:&str, username:&str, password:&str) -> anyhow::Result { + let client = Client::builder() + .homeserver_url(homeserver) + .build() + .await?; + + client + .login_username(username, password) + .initial_device_display_name("Trinitrix") + .send() + .await?; + + let session = match client.session() { + None => return Err(Error::msg("session is None")), + Some(s) => s, + }; + + println!("logged in as {username} device ID: {}", session.device_id.as_str()); + + let account = Account { + homeserver: homeserver.to_string(), + session, + sync_token: None + }; + + let serialized_account = serde_json::to_string(&account)?; + println!("serialized account: {}", serialized_account); + + Ok(account) +} + +pub async fn account_login(account: Account) -> anyhow::Result<()> { + Ok(()) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 64a393b..99bfd77 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,13 @@ mod ui; +mod accounts; -use std::io; -use ui::ui_create; +use tokio::time::{sleep, Duration}; -fn main() -> Result<(), io::Error> { - ui_create(); +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt::init(); + + accounts::account_add("https://nerdcult.net", "test", "abcd1234").await?; Ok(()) }