From 17f1653f87ca6bea3a7f669b34b2e03d16427463 Mon Sep 17 00:00:00 2001 From: Alex Emmet <111742636+Alex-Emmet@users.noreply.github.com> Date: Sun, 5 Apr 2026 23:41:57 +0200 Subject: [PATCH] [Add] New Client identification Logic --- Cargo.lock | 4 +- omikron-connector/src/omikron_connection.rs | 62 +++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5d2a1ae..197184f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4010,7 +4010,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttp-core" version = "0.1.0" -source = "git+https://git.methanium.net/Tensamin/TTP.git#82b71c1be1fa73aeb0f228c4af364206fda8d712" +source = "git+https://git.methanium.net/Tensamin/TTP.git#bacbcb0e38791cf1a38cf5851beb20d5645002ba" dependencies = [ "base64", "byteorder", @@ -4022,7 +4022,7 @@ dependencies = [ [[package]] name = "ttp-native" version = "0.1.0" -source = "git+https://git.methanium.net/Tensamin/TTP.git#82b71c1be1fa73aeb0f228c4af364206fda8d712" +source = "git+https://git.methanium.net/Tensamin/TTP.git#bacbcb0e38791cf1a38cf5851beb20d5645002ba" dependencies = [ "quinn", "rustls", diff --git a/omikron-connector/src/omikron_connection.rs b/omikron-connector/src/omikron_connection.rs index 48da9fb..88d51c7 100755 --- a/omikron-connector/src/omikron_connection.rs +++ b/omikron-connector/src/omikron_connection.rs @@ -424,6 +424,68 @@ impl OmikronConnection { return; } + if cv.is_type(CommunicationType::client_connected) { + let user_id = cv.get_data(DataTypes::user_id).as_number().unwrap_or(0) as i64; + let session_id = cv.get_data(DataTypes::session_id).as_number().unwrap_or(0) as i64; + + let mut contacts = chats_util::get_users(user_id); + let mut contacts_array = Vec::new(); + + for (i, contact) in contacts.iter().enumerate() { + let mut contact_container = Vec::new(); + contact_container.push((DataTypes::user_id, DataValue::Number(contact.user_id))); + contact_container.push(( + DataTypes::last_message_at, + DataValue::Number(contact.last_message_at.unwrap_or(0)), + )); + + if let Some(ref name) = contact.user_name { + contact_container.push((DataTypes::username, DataValue::Str(name.clone()))); + } + + let amount = if i < 10 { 20 } else { 1 }; + let messages = chat_files::get_messages(user_id, contact.user_id, 0, amount); + + let mut msg_array = Vec::new(); + for m in messages.members() { + let message_time = m["message_time"].as_i64().unwrap_or(0); + let content = m["content"].as_str().unwrap_or("").to_string(); + let sent_by_self = m["sent_by_self"].as_bool().unwrap_or(false); + let height = m["height"].as_i64().unwrap_or(0); + let message_state = m["message_state"].as_str().unwrap_or("").to_string(); + + let mut msg_container = Vec::new(); + msg_container.push((DataTypes::send_time, DataValue::Number(message_time))); + msg_container.push((DataTypes::content, DataValue::Str(content.clone()))); + msg_container.push((DataTypes::message_state, DataValue::Str(message_state))); + msg_container.push((DataTypes::height, DataValue::Number(height))); + msg_container.push((DataTypes::sent_by_self, DataValue::Bool(sent_by_self))); + msg_array.push(DataValue::Container(msg_container)); + + if msg_array.len() == 1 { + let sender_id = if sent_by_self { + user_id + } else { + contact.user_id + }; + let mut last_msg = Vec::new(); + last_msg.push((DataTypes::content, DataValue::Str(content))); + last_msg.push((DataTypes::sender_id, DataValue::Number(sender_id))); + contact_container + .push((DataTypes::last_message, DataValue::Container(last_msg))); + } + } + contact_container.push((DataTypes::messages, DataValue::Array(msg_array))); + contacts_array.push(DataValue::Container(contact_container)); + } + + let resp = CommunicationValue::new(CommunicationType::client_connected) + .with_id(cv.get_id()) + .add_data(DataTypes::contacts, DataValue::Array(contacts_array)); + self.send_message(&resp).await; + return; + } + if cv.is_type(CommunicationType::identification_response) { if let Some(_accepted) = cv.get_data(DataTypes::accepted).as_bool() { let mut state = self.state.write().await;