diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-07-11 14:06:07 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-11 14:06:07 +0900 |
| commit | 58fdeb50f34ff9f66cf201583924911c2ac65205 (patch) | |
| tree | d462b3a20d79c6ed7e15e7961aacfe54cb4265a9 /src/server/api/stream | |
| parent | oops (diff) | |
| parent | wip (diff) | |
| download | misskey-58fdeb50f34ff9f66cf201583924911c2ac65205.tar.gz misskey-58fdeb50f34ff9f66cf201583924911c2ac65205.tar.bz2 misskey-58fdeb50f34ff9f66cf201583924911c2ac65205.zip | |
Merge pull request #1879 from syuilo/hybrid-tl
Hybrid tl
Diffstat (limited to 'src/server/api/stream')
| -rw-r--r-- | src/server/api/stream/hybrid-timeline.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts new file mode 100644 index 0000000000..55f9fbb788 --- /dev/null +++ b/src/server/api/stream/hybrid-timeline.ts @@ -0,0 +1,47 @@ +import * as websocket from 'websocket'; +import * as redis from 'redis'; + +import { IUser } from '../../../models/user'; +import Mute from '../../../models/mute'; +import { pack } from '../../../models/note'; + +export default async function( + request: websocket.request, + connection: websocket.connection, + subscriber: redis.RedisClient, + user: IUser +) { + // Subscribe stream + subscriber.subscribe(`misskey:hybrid-timeline:${user._id}`); + + const mute = await Mute.find({ muterId: user._id }); + const mutedUserIds = mute.map(m => m.muteeId.toString()); + + subscriber.on('message', async (_, data) => { + const note = JSON.parse(data); + + //#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (mutedUserIds.indexOf(note.userId) != -1) { + return; + } + if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { + return; + } + if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { + return; + } + //#endregion + + // Renoteなら再pack + if (note.renoteId != null) { + note.renote = await pack(note.renoteId, user, { + detail: true + }); + } + + connection.send(JSON.stringify({ + type: 'note', + body: note + })); + }); +} |