Skip to content

Instantly share code, notes, and snippets.

@rschulman
Created January 23, 2018 14:19
Show Gist options
  • Save rschulman/cbbf109c8d6537f868e4daeb9cbeb2cb to your computer and use it in GitHub Desktop.
Save rschulman/cbbf109c8d6537f868e4daeb9cbeb2cb to your computer and use it in GitHub Desktop.
impl Northship {
fn matrix_loop(
&self,
tokio_handle: &TokioHandle,
homeserver_url: Url,
username: String,
password: String,
) -> impl Future<Item = (), Error = ruma_client::Error> + 'static {
let client = ruma_client::Client::https(tokio_handle, homeserver_url, None).unwrap();
client
.log_in(username, password)
.and_then(clone!(client => move |_| {
client.sync(None, None, true).skip(1).for_each(|res| {
for (room_id, room) in res.rooms.join {
for event in room.timeline.events {
if let RoomEvent::RoomMessage(MessageEvent {
content: MessageEventContent::Text(
TextMessageEventContent {
body: msg_body,
..
}
),
user_id,
..
}) = event {
println!("{:?} in {:?}: {}", user_id, room_id, msg_body);
let input_parsed = parsers::command(&msg_body);
match input_parsed {
Some(result) => {
match result {
parsers::Command::Todo(todo) => {
match self.new_todo(todo.body,
todo.deadline,
todo.scheduled,
None,
room_id.to_string()) {
Ok(()) => {
let _ = r0::send::send_message_event::call(client.clone(),
r0::send::send_message_event::Request {
room_id: room_id,
event_type: EventType::RoomMessage,
txn_id: "1".to_owned(), // TODO Probably problematic
data:
MessageEventContent::Text(TextMessageEventContent {
body: "New TODO added".to_owned(),
msgtype: MessageType::Text,
}),
});
},
Err(_) => {
let _ = r0::send::send_message_event::call(client.clone(),
r0::send::send_message_event::Request {
room_id: room_id,
event_type: EventType::RoomMessage,
txn_id: "1".to_owned(), // TODO Probably problematic
data:
MessageEventContent::Text(TextMessageEventContent {
body: "Error adding TODO to datbaase.".to_owned(),
msgtype: MessageType::Text,
}),
});
},
}
},
parsers::Command::Agenda => {
let _ = r0::send::send_message_event::call(client.clone(),
r0::send::send_message_event::Request {
room_id: room_id,
event_type: EventType::RoomMessage,
txn_id: "1".to_owned(), // TODO Probably problematic
data:
MessageEventContent::Text(TextMessageEventContent {
body: self.format_todos().unwrap().to_owned(),
msgtype: MessageType::Text,
}),
});
},
}
},
None => {
let _ = r0::send::send_message_event::call(client.clone(),
r0::send::send_message_event::Request {
room_id: room_id,
event_type: EventType::RoomMessage,
txn_id: "1".to_owned(), // TODO Probably problematic
data:
MessageEventContent::Text(TextMessageEventContent {
body: "Sorry, I didn't catch that. Try again?".to_owned(),
msgtype: MessageType::Text,
}),
});
},
}
}
}
}
Ok(())
})
}))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment