This commit is contained in:
syuilo 2021-03-23 15:12:47 +09:00
parent 7e4a800352
commit cd4680b422
2 changed files with 19 additions and 6 deletions

View file

@ -83,7 +83,7 @@ export default define(meta, async (ps, user) => {
const mentions = await query.take(ps.limit!).getMany(); const mentions = await query.take(ps.limit!).getMany();
read(user.id, mentions.map(note => note.id)); read(user.id, mentions);
return await Notes.packMany(mentions, user); return await Notes.packMany(mentions, user);
}); });

View file

@ -1,7 +1,7 @@
import { publishMainStream } from '../stream'; import { publishMainStream } from '../stream';
import { Note } from '../../models/entities/note'; import { Note } from '../../models/entities/note';
import { User } from '../../models/entities/user'; import { User } from '../../models/entities/user';
import { NoteUnreads, AntennaNotes, Users } from '../../models'; import { NoteUnreads, AntennaNotes, Users, Followings, ChannelFollowings } from '../../models';
import { Not, IsNull, In } from 'typeorm'; import { Not, IsNull, In } from 'typeorm';
import { Channel } from '../../models/entities/channel'; import { Channel } from '../../models/entities/channel';
import { checkHitAntenna } from '../../misc/check-hit-antenna'; import { checkHitAntenna } from '../../misc/check-hit-antenna';
@ -14,11 +14,24 @@ import { PackedNote } from '../../models/repositories/note';
export default async function( export default async function(
userId: User['id'], userId: User['id'],
notes: (Note | PackedNote)[], notes: (Note | PackedNote)[],
info: { info?: {
following: Set<Channel['id']>; following: Set<User['id']>;
followingChannels: Set<Channel['id']>; followingChannels: Set<Channel['id']>;
} }
) { ) {
const following = info?.following ? info.following : new Set<string>((await Followings.find({
where: {
followerId: userId
},
select: ['followeeId']
})).map(x => x.followeeId));
const followingChannels = info?.followingChannels ? info.followingChannels : new Set<string>((await ChannelFollowings.find({
where: {
followerId: userId
},
select: ['followeeId']
})).map(x => x.followeeId));
const myAntennas = (await getAntennas()).filter(a => a.userId === userId); const myAntennas = (await getAntennas()).filter(a => a.userId === userId);
const readMentions: (Note | PackedNote)[] = []; const readMentions: (Note | PackedNote)[] = [];
const readSpecifiedNotes: (Note | PackedNote)[] = []; const readSpecifiedNotes: (Note | PackedNote)[] = [];
@ -32,13 +45,13 @@ export default async function(
readSpecifiedNotes.push(note); readSpecifiedNotes.push(note);
} }
if (note.channelId && info.followingChannels.has(note.channelId)) { if (note.channelId && followingChannels.has(note.channelId)) {
readChannelNotes.push(note); readChannelNotes.push(note);
} }
if (note.user != null) { // たぶんnullになることは無いはずだけど一応 if (note.user != null) { // たぶんnullになることは無いはずだけど一応
for (const antenna of myAntennas) { for (const antenna of myAntennas) {
if (checkHitAntenna(antenna, note, note.user as any, undefined, Array.from(info.following))) { if (checkHitAntenna(antenna, note, note.user as any, undefined, Array.from(following))) {
readAntennaNotes.push(note); readAntennaNotes.push(note);
} }
} }