diff --git a/CHANGELOG.md b/CHANGELOG.md index cba7a05ae228c33009e63c506a9fbd833c682ec2..7352db8fab1ca8246444bae3d93a428c7c7075ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ - Fix: ユーザã®ãƒŽãƒ¼ãƒˆä¸€è¦§ã«ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒŸãƒ¥ãƒ¼ãƒˆãŒåŠ¹ã‹ãªã„å•é¡Œ - Fix: ãƒãƒ£ãƒ³ãƒãƒ«ã®ãƒŽãƒ¼ãƒˆä¸€è¦§ã«ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒŸãƒ¥ãƒ¼ãƒˆãŒåŠ¹ã‹ãªã„å•é¡Œ - Fix: 「ã¿ã¤ã‘ã‚‹ã€ãŒå¹´è¶Šã—時ã«å£Šã‚Œã‚‹å•é¡Œã‚’ä¿®æ£ +- Fix: アカウントをブãƒãƒƒã‚¯ã—ãŸéš›ã«ã€è‡ªèº«ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒšãƒ¼ã‚¸ã§ãƒŽãƒ¼ãƒˆãŒç›¸æ‰‹ã«è¡¨ç¤ºã•ã‚Œã‚‹å•é¡Œã‚’ä¿®æ£ ## 2023.11.1 diff --git a/packages/backend/src/core/FanoutTimelineEndpointService.ts b/packages/backend/src/core/FanoutTimelineEndpointService.ts index a5bf297275a2de3cf670e8b3fd6bd7986f7acc0d..11027960f1566e0b952e4e4f8fa920df1ae141b4 100644 --- a/packages/backend/src/core/FanoutTimelineEndpointService.ts +++ b/packages/backend/src/core/FanoutTimelineEndpointService.ts @@ -28,6 +28,7 @@ type TimelineOptions = { redisTimelines: FanoutTimelineName[], noteFilter?: (note: MiNote) => boolean, alwaysIncludeMyNotes?: boolean; + ignoreAuthorFromBlock?: boolean; ignoreAuthorFromMute?: boolean; excludeNoFiles?: boolean; excludeReplies?: boolean; @@ -113,7 +114,7 @@ export class FanoutTimelineEndpointService { const parentFilter = filter; filter = (note) => { - if (isUserRelated(note, userIdsWhoBlockingMe, ps.ignoreAuthorFromMute)) return false; + if (isUserRelated(note, userIdsWhoBlockingMe, ps.ignoreAuthorFromBlock)) return false; if (isUserRelated(note, userIdsWhoMeMuting, ps.ignoreAuthorFromMute)) return false; if (isPureRenote(note) && isUserRelated(note, userIdsWhoMeMutingRenotes, ps.ignoreAuthorFromMute)) return false; if (isInstanceMuted(note, userMutedInstances)) return false; diff --git a/packages/backend/src/server/api/endpoints/users/featured-notes.ts b/packages/backend/src/server/api/endpoints/users/featured-notes.ts index dec0b7a122e854e2dfc02f426adeec3114e298ba..f84148d727884639792233a0e6cea81124469b90 100644 --- a/packages/backend/src/server/api/endpoints/users/featured-notes.ts +++ b/packages/backend/src/server/api/endpoints/users/featured-notes.ts @@ -9,6 +9,8 @@ import { Endpoint } from '@/server/api/endpoint-base.js'; import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; import { DI } from '@/di-symbols.js'; import { FeaturedService } from '@/core/FeaturedService.js'; +import { CacheService } from '@/core/CacheService.js'; +import { isUserRelated } from '@/misc/is-user-related.js'; export const meta = { tags: ['notes'], @@ -46,6 +48,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- private noteEntityService: NoteEntityService, private featuredService: FeaturedService, + private cacheService: CacheService, ) { super(meta, paramDef, async (ps, me) => { let noteIds = await this.featuredService.getPerUserNotesRanking(ps.userId, 50); @@ -60,6 +63,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- return []; } + const [ + userIdsWhoMeMuting, + userIdsWhoBlockingMe, + ] = me ? await Promise.all([ + this.cacheService.userMutingsCache.fetch(me.id), + this.cacheService.userBlockedCache.fetch(me.id), + ]) : [new Set<string>(), new Set<string>()]; + const query = this.notesRepository.createQueryBuilder('note') .where('note.id IN (:...noteIds)', { noteIds: noteIds }) .innerJoinAndSelect('note.user', 'user') @@ -69,10 +80,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser') .leftJoinAndSelect('note.channel', 'channel'); - const notes = await query.getMany(); - notes.sort((a, b) => a.id > b.id ? -1 : 1); + const notes = (await query.getMany()).filter(note => { + if (me && isUserRelated(note, userIdsWhoBlockingMe, false)) return false; + if (me && isUserRelated(note, userIdsWhoMeMuting, true)) return false; - // TODO: ミュートç‰è€ƒæ…® + return true; + }); + + notes.sort((a, b) => a.id > b.id ? -1 : 1); return await this.noteEntityService.packMany(notes, me); });