Skip to content

Commit 9026478

Browse files
committed
added grouping gap
1 parent 4eef5d8 commit 9026478

File tree

6 files changed

+25
-2
lines changed

6 files changed

+25
-2
lines changed

src/chat/src/message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ pub trait Message: Clone {
55
fn get_content(&self) -> impl Element;
66
fn get_identifier(&self) -> String;
77
fn get_nonce(&self) -> Option<&String>;
8+
fn should_group(&self, previous: &Self) -> bool;
89
}
910

1011
pub trait MessageAuthor: PartialEq + Eq {

src/discord/src/channel/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::sync::Arc;
22

33
use scope_chat::channel::Channel;
4+
use serenity::all::Timestamp;
45
use tokio::sync::broadcast;
56

67
use crate::{
@@ -51,6 +52,7 @@ impl Channel for DiscordChannel {
5152
author: self.client.user().clone(),
5253
id: Snowflake { content: 0 },
5354
nonce: Some(nonce),
55+
creation_time: Timestamp::now(),
5456
}
5557
}
5658
}

src/discord/src/client.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ impl EventHandler for DiscordClient {
114114
Nonce::Number(n) => n.to_string(),
115115
Nonce::String(s) => s,
116116
}),
117+
creation_time: msg.timestamp,
117118
});
118119
}
119120
}

src/discord/src/message/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::time::Instant;
2+
13
use author::DiscordMessageAuthor;
24
use content::DiscordMessageContent;
35
use gpui::{Element, IntoElement};
@@ -14,6 +16,7 @@ pub struct DiscordMessage {
1416
pub author: DiscordMessageAuthor,
1517
pub id: Snowflake,
1618
pub nonce: Option<String>,
19+
pub creation_time: serenity::model::Timestamp,
1720
}
1821

1922
impl Message for DiscordMessage {
@@ -32,4 +35,10 @@ impl Message for DiscordMessage {
3235
fn get_nonce(&self) -> Option<&String> {
3336
self.nonce.as_ref()
3437
}
38+
39+
fn should_group(&self, previous: &Self) -> bool {
40+
const MAX_DISCORD_MESSAGE_GAP_SECS_FOR_GROUP: i64 = 5 * 60;
41+
42+
self.creation_time.signed_duration_since(&*previous.creation_time).num_seconds() <= MAX_DISCORD_MESSAGE_GAP_SECS_FOR_GROUP
43+
}
3544
}

src/ui/src/channel/message.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ impl<M: Message> MessageGroup<M> {
4949

5050
self.contents.remove(index);
5151
}
52+
53+
pub fn last(&self) -> &M {
54+
self.contents.last().unwrap()
55+
}
5256
}
5357

5458
pub fn message<M: Message>(message: MessageGroup<M>) -> impl IntoElement {

src/ui/src/channel/message_list.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ impl<M: Message> MessageList<M> {
3737

3838
let last = self.messages.last_mut();
3939

40-
if last.is_some() && last.as_ref().unwrap().get_author().get_id() == message.get_author().get_id() {
40+
if last.is_some()
41+
&& last.as_ref().unwrap().get_author().get_id() == message.get_author().get_id()
42+
&& message.should_group(last.as_ref().unwrap().last())
43+
{
4144
last.unwrap().add(message);
4245
} else {
4346
self.messages.push(MessageGroup::new(message));
@@ -47,7 +50,10 @@ impl<M: Message> MessageList<M> {
4750
pub fn add_pending_message(&mut self, pending_message: M) {
4851
let last = self.messages.last_mut();
4952

50-
if last.is_some() && last.as_ref().unwrap().get_author().get_id() == pending_message.get_author().get_id() {
53+
if last.is_some()
54+
&& last.as_ref().unwrap().get_author().get_id() == pending_message.get_author().get_id()
55+
&& pending_message.should_group(last.as_ref().unwrap().last())
56+
{
5157
last.unwrap().add(pending_message);
5258
} else {
5359
self.messages.push(MessageGroup::new(pending_message));

0 commit comments

Comments
 (0)