Implement #2736
This commit is contained in:
parent
195f676500
commit
d9f0e158a3
25 changed files with 239 additions and 39 deletions
47
src/services/note/unread.ts
Normal file
47
src/services/note/unread.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import NoteUnread from '../../models/note-unread';
|
||||
import User, { IUser } from '../../models/user';
|
||||
import { INote } from '../../models/note';
|
||||
import Mute from '../../models/mute';
|
||||
import { publishUserStream } from '../../stream';
|
||||
|
||||
export default async function(user: IUser, note: INote, isSpecified = false) {
|
||||
const unread = await NoteUnread.insert({
|
||||
noteId: note._id,
|
||||
userId: user._id,
|
||||
isSpecified,
|
||||
_note: {
|
||||
userId: note.userId
|
||||
}
|
||||
});
|
||||
|
||||
// 3秒経っても既読にならなかったら「未読の投稿がありますよ」イベントを発行する
|
||||
setTimeout(async () => {
|
||||
const exist = await NoteUnread.findOne({ _id: unread._id });
|
||||
if (exist == null) return;
|
||||
|
||||
//#region ただしミュートされているなら発行しない
|
||||
const mute = await Mute.find({
|
||||
muterId: user._id
|
||||
});
|
||||
const mutedUserIds = mute.map(m => m.muteeId.toString());
|
||||
if (mutedUserIds.includes(note.userId.toString())) return;
|
||||
//#endregion
|
||||
|
||||
User.update({
|
||||
_id: user._id
|
||||
}, {
|
||||
$set: isSpecified ? {
|
||||
hasUnreadSpecifiedNotes: true,
|
||||
hasUnreadMentions: true
|
||||
} : {
|
||||
hasUnreadMentions: true
|
||||
}
|
||||
});
|
||||
|
||||
publishUserStream(user._id, 'unreadMention', note._id);
|
||||
|
||||
if (isSpecified) {
|
||||
publishUserStream(user._id, 'unreadSpecifiedNote', note._id);
|
||||
}
|
||||
}, 3000);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue