Prevent duplicated posts in 'all' timeline
This commit is contained in:
parent
dd932e1f15
commit
4c2cd92f0d
@ -223,6 +223,9 @@ impl Timeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_post(&self, conn: &Connection, post: &Post) -> Result<()> {
|
pub fn add_post(&self, conn: &Connection, post: &Post) -> Result<()> {
|
||||||
|
if self.includes_post(conn, post)? {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
diesel::insert_into(timeline::table)
|
diesel::insert_into(timeline::table)
|
||||||
.values(TimelineEntry {
|
.values(TimelineEntry {
|
||||||
post_id: post.id,
|
post_id: post.id,
|
||||||
@ -236,6 +239,16 @@ impl Timeline {
|
|||||||
let query = TimelineQuery::parse(&self.query)?;
|
let query = TimelineQuery::parse(&self.query)?;
|
||||||
query.matches(conn, self, post, kind)
|
query.matches(conn, self, post, kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn includes_post(&self, conn: &Connection, post: &Post) -> Result<bool> {
|
||||||
|
diesel::dsl::select(diesel::dsl::exists(
|
||||||
|
timeline::table
|
||||||
|
.filter(timeline::timeline_id.eq(self.id))
|
||||||
|
.filter(timeline::post_id.eq(post.id)),
|
||||||
|
))
|
||||||
|
.get_result(conn)
|
||||||
|
.map_err(Error::from)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user