Fetch older messages when scrolling up in the chat message list

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Max Brunsfeld
2021-08-27 14:58:28 -07:00
co-authored by Nathan Sobo
parent 5262dcd3cb
commit bc63fca8d7
8 changed files with 281 additions and 68 deletions
+21 -3
View File
@@ -380,6 +380,7 @@ impl Db {
&self,
channel_id: ChannelId,
count: usize,
before_id: Option<MessageId>,
) -> Result<Vec<ChannelMessage>> {
test_support!(self, {
let query = r#"
@@ -389,14 +390,16 @@ impl Db {
FROM
channel_messages
WHERE
channel_id = $1
channel_id = $1 AND
id < $2
ORDER BY id DESC
LIMIT $2
LIMIT $3
) as recent_messages
ORDER BY id ASC
"#;
sqlx::query_as(query)
.bind(channel_id.0)
.bind(before_id.unwrap_or(MessageId::MAX))
.bind(count as i64)
.fetch_all(&self.pool)
.await
@@ -412,6 +415,9 @@ macro_rules! id_type {
pub struct $name(pub i32);
impl $name {
#[allow(unused)]
pub const MAX: Self = Self(i32::MAX);
#[allow(unused)]
pub fn from_proto(value: u64) -> Self {
Self(value as i32)
@@ -512,10 +518,22 @@ pub mod tests {
.unwrap();
}
let messages = db.get_recent_channel_messages(channel, 5).await.unwrap();
let messages = db
.get_recent_channel_messages(channel, 5, None)
.await
.unwrap();
assert_eq!(
messages.iter().map(|m| &m.body).collect::<Vec<_>>(),
["5", "6", "7", "8", "9"]
);
let prev_messages = db
.get_recent_channel_messages(channel, 4, Some(messages[0].id))
.await
.unwrap();
assert_eq!(
prev_messages.iter().map(|m| &m.body).collect::<Vec<_>>(),
["1", "2", "3", "4"]
);
}
}