diff --git a/crates/app/src/public/html/body.lisp b/crates/app/src/public/html/body.lisp index 3b51c42..6991899 100644 --- a/crates/app/src/public/html/body.lisp +++ b/crates/app/src/public/html/body.lisp @@ -53,6 +53,10 @@ console.log(\"socket disconnect\"); } } + + if (window.location.pathname.startsWith(\"/reference\")) { + window.location.reload(); + } }); {%- endif %}") diff --git a/crates/app/src/public/html/components.lisp b/crates/app/src/public/html/components.lisp index 284ee21..154621c 100644 --- a/crates/app/src/public/html/components.lisp +++ b/crates/app/src/public/html/components.lisp @@ -330,7 +330,7 @@ ("class" "title") (text "{{ text \"general:label.share\" }}")) (button - ("onclick" "trigger('me::repost', ['{{ post.id }}', '', '{{ config.town_square }}'])") + ("onclick" "trigger('me::repost', ['{{ post.id }}', '', '{{ config.town_square }}', true])") (text "{{ icon \"repeat-2\" }}") (span (text "{{ text \"communities:label.repost\" }}"))) diff --git a/crates/core/src/database/posts.rs b/crates/core/src/database/posts.rs index 0e76fa1..a02d2d4 100644 --- a/crates/core/src/database/posts.rs +++ b/crates/core/src/database/posts.rs @@ -158,26 +158,26 @@ impl DataManager { post: &Post, ignore_users: &[usize], user: &Option, - ) -> Option<(User, Post)> { + ) -> (bool, Option<(User, Post)>) { if let Some(ref repost) = post.context.repost { if let Some(reposting) = repost.reposting { let mut x = match self.get_post_by_id(reposting).await { Ok(p) => p, - Err(_) => return None, + Err(_) => return (true, None), }; if x.is_deleted { - return None; + return (!post.content.is_empty(), None); } if ignore_users.contains(&x.owner) { - return None; + return (!post.content.is_empty(), None); } // check private profile settings let owner = match self.get_user_by_id(x.owner).await { Ok(ua) => ua, - Err(_) => return None, + Err(_) => return (true, None), }; // TODO: maybe check community membership to see if we can MANAGE_POSTS in community @@ -191,29 +191,32 @@ impl DataManager { .is_err() { // owner isn't following us, we aren't the owner, AND we don't have MANAGE_POSTS permission - return None; + return (!post.content.is_empty(), None); } } } else { // private profile, but we're an unauthenticated user - return None; + return (!post.content.is_empty(), None); } } // ... x.mark_as_repost(); - Some(( - match self.get_user_by_id(x.owner).await { - Ok(ua) => ua, - Err(_) => return None, - }, - x, - )) + ( + true, + Some(( + match self.get_user_by_id(x.owner).await { + Ok(ua) => ua, + Err(_) => return (true, None), + }, + x, + )), + ) } else { - None + (true, None) } } else { - None + (true, None) } } @@ -340,6 +343,7 @@ impl DataManager { let owner = post.owner; if let Some(ua) = users.get(&owner) { + // stack let (can_view, stack) = self .get_post_stack( &mut seen_stacks, @@ -352,10 +356,19 @@ impl DataManager { continue; } + // reposting + let (can_view, reposting) = + self.get_post_reposting(&post, ignore_users, user).await; + + if !can_view { + continue; + } + + // ... out.push(( post.clone(), ua.clone(), - self.get_post_reposting(&post, ignore_users, user).await, + reposting, self.get_post_question(&post, ignore_users).await?, self.get_post_poll(&post, user).await?, stack, @@ -406,6 +419,7 @@ impl DataManager { } } + // stack let (can_view, stack) = self .get_post_stack( &mut seen_stacks, @@ -418,12 +432,20 @@ impl DataManager { continue; } + // reposting + let (can_view, reposting) = + self.get_post_reposting(&post, ignore_users, user).await; + + if !can_view { + continue; + } + // ... users.insert(owner, ua.clone()); out.push(( post.clone(), ua, - self.get_post_reposting(&post, ignore_users, user).await, + reposting, self.get_post_question(&post, ignore_users).await?, self.get_post_poll(&post, user).await?, stack, @@ -458,6 +480,7 @@ impl DataManager { let community = post.community; if let Some((ua, community)) = seen_before.get(&(owner, community)) { + // stack let (can_view, stack) = self .get_post_stack( &mut seen_stacks, @@ -470,11 +493,20 @@ impl DataManager { continue; } + // reposting + let (can_view, reposting) = + self.get_post_reposting(&post, ignore_users, user).await; + + if !can_view { + continue; + } + + // ... out.push(( post.clone(), ua.clone(), community.to_owned(), - self.get_post_reposting(&post, ignore_users, user).await, + reposting, self.get_post_question(&post, ignore_users).await?, self.get_post_poll(&post, user).await?, stack, @@ -516,6 +548,7 @@ impl DataManager { } } + // stack let (can_view, stack) = self .get_post_stack( &mut seen_stacks, @@ -528,6 +561,14 @@ impl DataManager { continue; } + // reposting + let (can_view, reposting) = + self.get_post_reposting(&post, ignore_users, user).await; + + if !can_view { + continue; + } + // ... let community = self.get_community_by_id(community).await?; seen_before.insert((owner, community.id), (ua.clone(), community.clone())); @@ -535,7 +576,7 @@ impl DataManager { post.clone(), ua, community, - self.get_post_reposting(&post, ignore_users, user).await, + reposting, self.get_post_question(&post, ignore_users).await?, self.get_post_poll(&post, user).await?, stack,