summaryrefslogtreecommitdiff
path: root/src/message
diff options
context:
space:
mode:
Diffstat (limited to 'src/message')
-rw-r--r--src/message/app.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/message/app.rs b/src/message/app.rs
index 385c92e..1e50a65 100644
--- a/src/message/app.rs
+++ b/src/message/app.rs
@@ -44,6 +44,33 @@ impl<'a> Messages<'a> {
Ok(message.as_sent())
}
+ pub async fn in_channel(
+ &self,
+ channel: &channel::Id,
+ resume_point: Option<Sequence>,
+ ) -> Result<Vec<Message>, DeleteError> {
+ let mut tx = self.db.begin().await?;
+ let channel = tx
+ .channels()
+ .by_id(channel)
+ .await
+ .not_found(|| DeleteError::ChannelNotFound(channel.clone()))?;
+ let messages = tx.messages().in_channel(&channel, resume_point).await?;
+ tx.commit().await?;
+
+ let messages = messages
+ .into_iter()
+ .filter_map(|message| {
+ message
+ .events()
+ .filter(Sequence::up_to(resume_point))
+ .collect()
+ })
+ .collect();
+
+ Ok(messages)
+ }
+
pub async fn delete(&self, message: &Id, deleted_at: &DateTime) -> Result<(), DeleteError> {
let mut tx = self.db.begin().await?;
let deleted = tx.sequence().next(deleted_at).await?;