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:
parent
c549fdd274
commit
094dd5fdb5
8 changed files with 198 additions and 40 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue