From 8cf4f590cb7c9065ce7c4c98dce54e1bef11e4eb Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Sun, 12 Dec 2021 20:31:54 +0100 Subject: [PATCH] Get all events from joined rooms --- src/main.rs | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index 50e11ad..31dba72 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,15 +4,23 @@ mod config; use crate::config::Config; use matrix_sdk::{ + deserialized_responses::EncryptionInfo, + room::Room, ruma::{ - events::{room::message::MessageEventContent, SyncMessageEvent}, + events::{ + macros::EventContent, push_rules::PushRulesEvent, room::message::MessageEventContent, + room::topic::TopicEventContent, AnyRoomEvent, AnySyncRoomEvent, StateEvent, + SyncMessageEvent, + }, UserId, }, Client, Result, SyncSettings, }; -use std::path::Path; +use matrix_sdk::ruma::{events::SyncStateEvent, Int, MilliSecondsSinceUnixEpoch}; + use std::convert::TryFrom; +use std::path::Path; use std::{env, process::exit}; #[tokio::main] @@ -51,12 +59,13 @@ async fn main() -> Result<()> { } let config_file = env::args().last().unwrap(); - + println!("Using config file: {}", config_file); return match config::from_file(&config_file) { Ok(config) => { let alice = UserId::try_from(config.user_name)?; let client = Client::new(config.homeserver_url)?; + // Login client .login( alice.localpart(), @@ -65,14 +74,32 @@ async fn main() -> Result<()> { Some(config.display_name.as_str()), ) .await?; + println!("Logged as: {}", alice); + // Don't respond to old messages + // client.sync_once(SyncSettings::default()).await?; + + // https://docs.rs/ruma/0.4.0/ruma/events/enum.AnySyncMessageEvent.html + client + .register_event_handler( + |ev: SyncMessageEvent<MessageEventContent>, + room: Room, + encryption_info: Option<EncryptionInfo>| async move { + println!("---\nROOM: {:?}\nENC: {:?}\nSME: {:?}", room, encryption_info, ev); + }, + ) + .await; client - .register_event_handler(|ev: SyncMessageEvent<MessageEventContent>| async move { - println!("Received a message {:?}", ev); + .register_event_handler(|ev: SyncStateEvent<TopicEventContent>| async move { + // You can omit any or all arguments after the first. }) .await; - client.sync(SyncSettings::default()).await; // Should never return + // Because we sync once already we must pass the previous sync token + // let settings = SyncSettings::default().token(client.sync_token().await.unwrap()); + println!("Entering sync loop"); + // client.sync(settings).await; + client.sync(SyncSettings::default()).await; Ok(()) } Err(e) => panic!( -- GitLab