add: user socket streams

add: group messages by author in ui
TODO: group messages by author in ui as they come in from socket
TODO: notifications stream connection
This commit is contained in:
trisua 2025-05-01 16:43:58 -04:00
parent c549fdd274
commit 094dd5fdb5
8 changed files with 198 additions and 40 deletions

View file

@ -46,15 +46,23 @@ impl DataManager {
auto_method!(get_message_by_id(usize as i64)@get_message_from_row -> "SELECT * FROM messages WHERE id = $1" --name="message" --returns=Message --cache-key-tmpl="atto.message:{}");
/// Complete a vector of just messages with their owner as well.
///
/// # Returns
/// `(message, owner, group with previous messages in ui)`
pub async fn fill_messages(
&self,
messages: Vec<Message>,
ignore_users: &[usize],
) -> Result<Vec<(Message, User)>> {
let mut out: Vec<(Message, User)> = Vec::new();
) -> Result<Vec<(Message, User, bool)>> {
let mut out: Vec<(Message, User, bool)> = Vec::new();
let mut users: HashMap<usize, User> = HashMap::new();
for message in messages {
for (i, message) in messages.iter().enumerate() {
let next_owner: usize = match messages.get(i + 1) {
Some(ref m) => m.owner,
None => 0,
};
let owner = message.owner;
if ignore_users.contains(&owner) {
@ -62,11 +70,11 @@ impl DataManager {
}
if let Some(user) = users.get(&owner) {
out.push((message, user.clone()));
out.push((message.to_owned(), user.clone(), next_owner == owner));
} else {
let user = self.get_user_by_id(owner).await?;
users.insert(owner, user.clone());
out.push((message, user));
out.push((message.to_owned(), user, next_owner == owner));
}
}