diff --git a/crates/api/src/post/mark_read.rs b/crates/api/src/post/mark_read.rs index a377b3c6..a46e949f 100644 --- a/crates/api/src/post/mark_read.rs +++ b/crates/api/src/post/mark_read.rs @@ -11,14 +11,21 @@ pub async fn mark_post_as_read( context: Data, local_user_view: LocalUserView, ) -> Result, LemmyError> { - let mut post_ids = data.post_ids.iter().cloned().collect::>(); - post_ids.insert(data.post_id); - let person_id = local_user_view.person.id; + let mut post_ids = HashSet::new(); + if let Some(post_ids_) = &data.post_ids { + post_ids.extend(post_ids_.iter().cloned()); + } + + if let Some(post_id) = data.post_id { + post_ids.insert(post_id); + } if post_ids.len() > MAX_API_PARAM_ELEMENTS { Err(LemmyErrorType::TooManyItems)?; } + let person_id = local_user_view.person.id; + // Mark the post as read / unread if data.read { PostRead::mark_as_read(&mut context.pool(), post_ids, person_id) diff --git a/crates/api_common/src/post.rs b/crates/api_common/src/post.rs index fbb6f1d3..b93742be 100644 --- a/crates/api_common/src/post.rs +++ b/crates/api_common/src/post.rs @@ -135,14 +135,15 @@ pub struct RemovePost { pub reason: Option, } +#[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Mark a post as read. pub struct MarkPostAsRead { /// TODO: deprecated, send `post_ids` instead - pub post_id: PostId, - pub post_ids: Vec, + pub post_id: Option, + pub post_ids: Option>, pub read: bool, }