summaryrefslogtreecommitdiff
path: root/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-07-11 14:06:07 +0900
committerGitHub <noreply@github.com>2018-07-11 14:06:07 +0900
commit58fdeb50f34ff9f66cf201583924911c2ac65205 (patch)
treed462b3a20d79c6ed7e15e7961aacfe54cb4265a9 /src/server/api/stream
parentoops (diff)
parentwip (diff)
downloadmisskey-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.ts47
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
+ }));
+ });
+}