From 04e1e48f1746533609372311becdd6800b005f50 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Tue, 8 Jan 2019 21:02:00 +0900 Subject: [PATCH] Hide invisible notes from timeline (#3852) --- .../api/endpoints/notes/hybrid-timeline.ts | 21 +++++++++++++++++-- .../api/endpoints/notes/search_by_tag.ts | 15 ++++++++++++- src/server/api/endpoints/notes/timeline.ts | 21 +++++++++++++++++-- .../api/endpoints/notes/user-list-timeline.ts | 21 +++++++++++++++++-- src/server/api/endpoints/users/notes.ts | 15 ++++++++++++- 5 files changed, 85 insertions(+), 8 deletions(-) diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts index 4af182cb5..7cf05cb9a 100644 --- a/src/server/api/endpoints/notes/hybrid-timeline.ts +++ b/src/server/api/endpoints/notes/hybrid-timeline.ts @@ -135,13 +135,30 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }] }); + const visibleQuery = user == null ? [{ + visibility: { $in: [ 'public', 'home' ] } + }] : [{ + visibility: { $in: [ 'public', 'home' ] } + }, { + // myself (for specified/private) + userId: user._id + }, { + // to me (for specified) + visibleUserIds: { $in: [ user._id ] } + }]; + const query = { $and: [{ deletedAt: null, $or: [{ - // フォローしている人の投稿 - $or: followQuery + $and: [{ + // フォローしている人の投稿 + $or: followQuery + }, { + // visible for me + $or: visibleQuery + }] }, { // public only visibility: 'public', diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts index fcc33d14f..db2f71649 100644 --- a/src/server/api/endpoints/notes/search_by_tag.ts +++ b/src/server/api/endpoints/notes/search_by_tag.ts @@ -103,6 +103,18 @@ export const meta = { }; export default define(meta, (ps, me) => new Promise(async (res, rej) => { + const visibleQuery = me == null ? [{ + visibility: { $in: [ 'public', 'home' ] } + }] : [{ + visibility: { $in: [ 'public', 'home' ] } + }, { + // myself (for specified/private) + userId: me._id + }, { + // to me (for specified) + visibleUserIds: { $in: [ me._id ] } + }]; + const q: any = { $and: [ps.tag ? { tagsLower: ps.tag.toLowerCase() @@ -113,7 +125,8 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { })) })) }], - deletedAt: { $exists: false } + deletedAt: { $exists: false }, + $or: visibleQuery }; const push = (x: any) => q.$and.push(x); diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts index 3c970c03a..5604cf291 100644 --- a/src/server/api/endpoints/notes/timeline.ts +++ b/src/server/api/endpoints/notes/timeline.ts @@ -139,12 +139,29 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }] }); + const visibleQuery = user == null ? [{ + visibility: { $in: [ 'public', 'home' ] } + }] : [{ + visibility: { $in: [ 'public', 'home' ] } + }, { + // myself (for specified/private) + userId: user._id + }, { + // to me (for specified) + visibleUserIds: { $in: [ user._id ] } + }]; + const query = { $and: [{ deletedAt: null, - // フォローしている人の投稿 - $or: followQuery, + $and: [{ + // フォローしている人の投稿 + $or: followQuery + }, { + // visible for me + $or: visibleQuery + }], // mute userId: { diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts index 156ffbbc3..eab3b9788 100644 --- a/src/server/api/endpoints/notes/user-list-timeline.ts +++ b/src/server/api/endpoints/notes/user-list-timeline.ts @@ -146,12 +146,29 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }] })); + const visibleQuery = user == null ? [{ + visibility: { $in: [ 'public', 'home' ] } + }] : [{ + visibility: { $in: [ 'public', 'home' ] } + }, { + // myself (for specified/private) + userId: user._id + }, { + // to me (for specified) + visibleUserIds: { $in: [ user._id ] } + }]; + const query = { $and: [{ deletedAt: null, - // リストに入っている人のタイムラインへの投稿 - $or: listQuery, + $and: [{ + // リストに入っている人のタイムラインへの投稿 + $or: listQuery + }, { + // visible for me + $or: visibleQuery + }], // mute userId: { diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts index ec2dab129..6c336683a 100644 --- a/src/server/api/endpoints/users/notes.ts +++ b/src/server/api/endpoints/users/notes.ts @@ -155,10 +155,23 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { //#region Construct query const sort = { } as any; + const visibleQuery = me == null ? [{ + visibility: { $in: [ 'public', 'home' ] } + }] : [{ + visibility: { $in: [ 'public', 'home' ] } + }, { + // myself (for specified/private) + userId: me._id + }, { + // to me (for specified) + visibleUserIds: { $in: [ me._id ] } + }]; + const query = { $and: [ {} ], deletedAt: null, - userId: user._id + userId: user._id, + $or: visibleQuery } as any; if (ps.sinceId) {