getDataTypeFromProps,
getPageFromProps,
getSortTypeFromProps,
+ isPostBlocked,
notifyPost,
+ nsfwCheck,
postToCommentSortType,
relTags,
restoreScrollPosition,
this.setState(this.state);
} else if (op == UserOperation.CreatePost) {
let data = wsJsonToRes<PostResponse>(msg, PostResponse);
- this.state.posts.unshift(data.post_view);
+
+ let showPostNotifs = UserService.Instance.myUserInfo
+ .map(m => m.local_user_view.local_user.show_new_post_notifs)
+ .unwrapOr(false);
+
+ // Only push these if you're on the first page, you pass the nsfw check, and it isn't blocked
+ //
if (
- UserService.Instance.myUserInfo
- .map(m => m.local_user_view.local_user.show_new_post_notifs)
- .unwrapOr(false)
+ this.state.page == 1 &&
+ nsfwCheck(data.post_view) &&
+ !isPostBlocked(data.post_view)
) {
- notifyPost(data.post_view, this.context.router);
+ this.state.posts.unshift(data.post_view);
+ if (showPostNotifs) {
+ notifyPost(data.post_view, this.context.router);
+ }
+ this.setState(this.state);
}
- this.setState(this.state);
} else if (op == UserOperation.CreatePostLike) {
let data = wsJsonToRes<PostResponse>(msg, PostResponse);
createPostLikeFindRes(data.post_view, this.state.posts);
getPageFromProps,
getSortTypeFromProps,
isBrowser,
+ isPostBlocked,
notifyPost,
+ nsfwCheck,
postToCommentSortType,
relTags,
restoreScrollPosition,
setupTippy();
} else if (op == UserOperation.CreatePost) {
let data = wsJsonToRes<PostResponse>(msg, PostResponse);
- // NSFW check
- let nsfw = data.post_view.post.nsfw || data.post_view.community.nsfw;
- let nsfwCheck =
- !nsfw ||
- (nsfw &&
- UserService.Instance.myUserInfo
- .map(m => m.local_user_view.local_user.show_nsfw)
- .unwrapOr(false));
let showPostNotifs = UserService.Instance.myUserInfo
.map(m => m.local_user_view.local_user.show_new_post_notifs)
.unwrapOr(false);
- // Only push these if you're on the first page, and you pass the nsfw check
- if (this.state.page == 1 && nsfwCheck) {
+ // Only push these if you're on the first page, you pass the nsfw check, and it isn't blocked
+ if (
+ this.state.page == 1 &&
+ nsfwCheck(data.post_view) &&
+ !isPostBlocked(data.post_view)
+ ) {
// If you're on subscribed, only push it if you're subscribed.
if (this.state.listingType == ListingType.Subscribed) {
if (
.unwrapOr(false);
return !adminOnly || amAdmin(Some(siteRes.admins));
}
+
+export function isPostBlocked(
+ pv: PostView,
+ myUserInfo = UserService.Instance.myUserInfo
+): boolean {
+ return myUserInfo
+ .map(
+ mui =>
+ mui.community_blocks
+ .map(c => c.community.id)
+ .includes(pv.community.id) ||
+ mui.person_blocks.map(p => p.target.id).includes(pv.creator.id)
+ )
+ .unwrapOr(false);
+}
+
+/// Checks to make sure you can view NSFW posts. Returns true if you can.
+export function nsfwCheck(
+ pv: PostView,
+ myUserInfo = UserService.Instance.myUserInfo
+): boolean {
+ let nsfw = pv.post.nsfw || pv.community.nsfw;
+ return (
+ !nsfw ||
+ (nsfw &&
+ myUserInfo
+ .map(m => m.local_user_view.local_user.show_nsfw)
+ .unwrapOr(false))
+ );
+}