Browse Source

Implemented send plain text message

environments/review-jsparber-h-cxnwl8/deployments/1
Daniel García Moreno 9 years ago
parent
commit
ec641d2cb2
  1. 34
      src/app.rs
  2. 35
      src/backend.rs

34
src/app.rs

@ -451,6 +451,10 @@ impl AppOp {
pub fn member_clicked(&self, uid: String) {
println!("member clicked: {}, {:?}", uid, self.members.get(&uid));
}
pub fn send_message(&self, msg: String) {
self.backend.send_msg(self.active_room.clone(), msg).unwrap();
}
}
/// State for the main thread.
@ -527,8 +531,8 @@ impl App {
}
theop.lock().unwrap().get_room_messages();
},
Ok(backend::BKResponse::RoomMemberAvatar(_, _)) => {
},
Ok(backend::BKResponse::RoomMemberAvatar(_, _)) => { },
Ok(backend::BKResponse::SendMsg) => { },
// errors
Ok(err) => {
println!("Query error: {:?}", err);
@ -573,6 +577,32 @@ impl App {
self.connect_room_treeview();
self.connect_member_treeview();
self.connect_send();
}
fn connect_send(&self) {
let send_button: gtk::ToolButton = self.gtk_builder.get_object("send_button")
.expect("Couldn't find send_button in ui file.");
let msg_entry: gtk::Entry = self.gtk_builder.get_object("msg_entry")
.expect("Couldn't find msg_entry in ui file.");
let entry = msg_entry.clone();
let mut op = self.op.clone();
send_button.connect_clicked(move |btn| {
if let Some(text) = entry.get_text() {
op.lock().unwrap().send_message(text);
entry.set_text("");
}
});
op = self.op.clone();
msg_entry.connect_activate(move |entry| {
if let Some(text) = entry.get_text() {
op.lock().unwrap().send_message(text);
entry.set_text("");
}
});
}
fn connect_user_button(&self) {

35
src/backend.rs

@ -112,6 +112,7 @@ pub struct BackendData {
access_token: String,
server_url: String,
since: String,
msgid: i32,
}
pub struct Backend {
@ -131,6 +132,7 @@ pub enum BKResponse {
RoomMessages(Vec<Message>),
RoomMembers(Vec<Member>),
RoomMemberAvatar(String, String),
SendMsg,
//errors
UserNameError(Error),
@ -143,6 +145,7 @@ pub enum BKResponse {
RoomMessagesError(Error),
RoomMembersError(Error),
RoomMemberAvatarError(Error),
SendMsgError(Error),
}
#[derive(Debug)]
@ -177,6 +180,7 @@ impl Backend {
access_token: String::from(""),
server_url: String::from("https://matrix.org"),
since: String::from(""),
msgid: 1,
};
Backend { tx: tx, data: Arc::new(Mutex::new(data)) }
}
@ -489,6 +493,37 @@ impl Backend {
Ok(())
}
pub fn send_msg(&self, roomid: String, msg: String) -> Result<(), Error> {
let baseu = self.get_base_url()?;
let tk = self.data.lock().unwrap().access_token.clone();
let msgid;
{
let mut data = self.data.lock().unwrap();
data.msgid = data.msgid + 1;
msgid = data.msgid;
}
let mut url = baseu.join("/_matrix/client/r0/rooms/")?;
url = url.join(&(roomid + "/"))?.join("send/m.room.message/")?;
url = url.join(&format!("{}", msgid))?;
url = url.join(&format!("?access_token={}", tk))?;
let mut attrs: HashMap<String, String> = HashMap::new();
attrs.insert(String::from("body"), msg);
attrs.insert(String::from("msgtype"), String::from("m.text"));
let tx = self.tx.clone();
query!("put", &url, &attrs,
move |r: JsonValue| {
tx.send(BKResponse::SendMsg).unwrap();
},
|err| { tx.send(BKResponse::SendMsgError(err)).unwrap(); }
);
Ok(())
}
}
fn get_rooms_from_json(r: JsonValue, userid: &str) -> Result<HashMap<String, String>, Error> {

Loading…
Cancel
Save