diff --git a/Cargo.lock b/Cargo.lock index cea2fc0..ed306fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -605,9 +605,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -3876,7 +3876,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttp-core" version = "0.1.0" -source = "git+https://github.com/Tensamin/TTP.git#c127d196082401f37b51ca5417b341ecbdb74318" +source = "git+https://github.com/Tensamin/TTP.git#9c0ed7a5b6c8735e4b674d4503bd7b936ee3656b" dependencies = [ "base64", "byteorder", @@ -3888,7 +3888,7 @@ dependencies = [ [[package]] name = "ttp-native" version = "0.1.0" -source = "git+https://github.com/Tensamin/TTP.git#c127d196082401f37b51ca5417b341ecbdb74318" +source = "git+https://github.com/Tensamin/TTP.git#9c0ed7a5b6c8735e4b674d4503bd7b936ee3656b" dependencies = [ "quinn", "rustls", @@ -3942,9 +3942,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-truncate" diff --git a/src/omikron/omikron_connection.rs b/src/omikron/omikron_connection.rs index 1340ca3..83b9dcf 100755 --- a/src/omikron/omikron_connection.rs +++ b/src/omikron/omikron_connection.rs @@ -589,21 +589,43 @@ impl OmikronConnection { if cv.is_type(CommunicationType::get_chats) { let user_id = cv.get_sender(); let users = chats_util::get_users(user_id as i64); + let mut user_array = Vec::new(); + for user in users { + let mut container = Vec::new(); + container.push((DataTypes::user_id, DataValue::Number(user.user_id))); + if let Some(name) = user.user_name { + container.push((DataTypes::username, DataValue::Str(name))); + } + if let Some(ts) = user.last_message_at { + container.push((DataTypes::last_message_at, DataValue::Number(ts))); + } + user_array.push(DataValue::Container(container)); + } let resp = CommunicationValue::new(CommunicationType::get_chats) .with_id(cv.get_id()) .with_receiver(user_id) - .add_data(DataTypes::user_ids, DataValue::Str(users.dump())); + .add_data(DataTypes::user_ids, DataValue::Array(user_array)); self.send_message(&resp).await; return; } if cv.is_type(CommunicationType::add_conversation) { let user_id = cv.get_sender(); - let other_id = cv - .get_data(DataTypes::chat_partner_id) - .as_number() - .unwrap_or(0); + let other_id = match cv.get_data(DataTypes::chat_partner_id).as_number() { + Some(n) => n as i64, + None => cv + .get_data(DataTypes::chat_partner_id) + .as_str() + .unwrap_or("0") + .parse() + .unwrap_or(0), + }; let mut contact = get_user(user_id as i64, other_id).unwrap_or(Contact::new(other_id)); + + if let Some(name) = cv.get_data(DataTypes::chat_partner_name).as_str() { + contact.user_name = Some(name.to_string()); + } + contact.set_last_message_at( SystemTime::now() .duration_since(UNIX_EPOCH) diff --git a/src/util/chats_util.rs b/src/util/chats_util.rs index 00d1858..19598ef 100644 --- a/src/util/chats_util.rs +++ b/src/util/chats_util.rs @@ -1,6 +1,5 @@ use crate::users::contact::Contact; use crate::util::file_util::get_directory; -use json::{JsonValue, array}; use rusqlite::{Connection, params}; fn db_path() -> String { @@ -87,8 +86,8 @@ pub fn get_user(storage_owner: i64, user_id: i64) -> Option { } } -pub fn get_users(storage_owner: i64) -> JsonValue { - let mut contacts_out = array![]; +pub fn get_users(storage_owner: i64) -> Vec { + let mut contacts_out = Vec::new(); let conn = match open_db() { Ok(c) => c, @@ -126,7 +125,7 @@ pub fn get_users(storage_owner: i64) -> JsonValue { for row in rows { if let Ok(contact) = row { - let _ = contacts_out.push(contact.to_json()); + contacts_out.push(contact); } }