Compare commits
3 Commits
e5ecc80630
...
6c2f601300
Author | SHA1 | Date |
---|---|---|
Jez Cope | 6c2f601300 | |
Jez Cope | b2df4ff0ef | |
Jez Cope | 94b5c82353 |
|
@ -413,6 +413,26 @@ dependencies = [
|
|||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "directories"
|
||||
version = "3.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7"
|
||||
dependencies = [
|
||||
"dirs-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "discard"
|
||||
version = "1.0.4"
|
||||
|
@ -1199,6 +1219,8 @@ name = "mxadm"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"directories",
|
||||
"lazy_static",
|
||||
"matrix-sdk",
|
||||
"rpassword",
|
||||
"serde",
|
||||
|
@ -1670,6 +1692,16 @@ dependencies = [
|
|||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_users"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
|
||||
dependencies = [
|
||||
"getrandom 0.2.3",
|
||||
"redox_syscall",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "remove_dir_all"
|
||||
version = "0.5.3"
|
||||
|
|
|
@ -13,3 +13,5 @@ matrix-sdk = { git = "https://github.com/matrix-org/matrix-rust-sdk" }
|
|||
tokio = { version = "*", features = ["full"] }
|
||||
serde = "1.0"
|
||||
serde-lexpr = "0.1.0"
|
||||
directories = "3.0"
|
||||
lazy_static = "1.4.0"
|
||||
|
|
|
@ -6,7 +6,7 @@ use rpassword::prompt_password_stderr;
|
|||
use std::convert::TryFrom;
|
||||
use std::io::{self, Write};
|
||||
|
||||
use crate::util::{build_client_config, restore_session, save_session};
|
||||
use crate::session::{build_client_config, restore_session, save_session};
|
||||
|
||||
type CommandResult = Result<(), Box<dyn std::error::Error>>;
|
||||
|
||||
|
@ -74,10 +74,15 @@ pub async fn status() -> CommandResult {
|
|||
|
||||
pub async fn list_rooms() -> CommandResult {
|
||||
let client = restore_session().await?;
|
||||
let mut sync_settings = SyncSettings::new();
|
||||
if let Some(token) = client.sync_token().await {
|
||||
sync_settings = sync_settings.token(token);
|
||||
}
|
||||
|
||||
println!("Syncing...");
|
||||
client.sync_once(SyncSettings::default()).await?;
|
||||
println!(" ...done");
|
||||
print!("Syncing...");
|
||||
io::stderr().flush().unwrap();
|
||||
client.sync_once(sync_settings).await?;
|
||||
println!(" done");
|
||||
|
||||
println!("Joined rooms:");
|
||||
println!(room_fmt!(), "Name", "Main alias", "Room ID");
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#[macro_use]
|
||||
extern crate clap;
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
|
||||
mod commands;
|
||||
mod util;
|
||||
mod session;
|
||||
|
||||
use clap::{App, SubCommand};
|
||||
|
||||
|
|
|
@ -1,21 +1,30 @@
|
|||
use directories::ProjectDirs;
|
||||
use matrix_sdk::{Client, ClientConfig, Session};
|
||||
use serde_lexpr;
|
||||
use std::fs::File;
|
||||
use std::fs::{create_dir_all, File};
|
||||
|
||||
lazy_static! {
|
||||
static ref PROJECT_DIRS: ProjectDirs = ProjectDirs::from("me", "petrichor", "mxadm")
|
||||
.expect("Project directories should be available on all platforms");
|
||||
}
|
||||
static SESSION_FILE: &str = "session_info";
|
||||
|
||||
pub fn build_client_config() -> ClientConfig {
|
||||
ClientConfig::new().store_path("./store")
|
||||
ClientConfig::new().store_path(PROJECT_DIRS.cache_dir().join("store"))
|
||||
}
|
||||
|
||||
pub fn save_session(session: Session) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut session_file = File::create(SESSION_FILE)?;
|
||||
let cache_dir = PROJECT_DIRS.cache_dir();
|
||||
if !cache_dir.exists() {
|
||||
create_dir_all(cache_dir)?;
|
||||
}
|
||||
let mut session_file = File::create(cache_dir.join(SESSION_FILE))?;
|
||||
serde_lexpr::to_writer(&mut session_file, &session)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn restore_session() -> Result<Client, Box<dyn std::error::Error>> {
|
||||
let session_file = File::open(SESSION_FILE)?;
|
||||
let session_file = File::open(PROJECT_DIRS.cache_dir().join(SESSION_FILE))?;
|
||||
let session_info: Session = serde_lexpr::from_reader(session_file)?;
|
||||
|
||||
let client =
|
Loading…
Reference in New Issue