diff options
Diffstat (limited to 'src/server/api/stream')
| -rw-r--r-- | src/server/api/stream/games/reversi-game.ts (renamed from src/server/api/stream/reversi-game.ts) | 8 | ||||
| -rw-r--r-- | src/server/api/stream/games/reversi.ts (renamed from src/server/api/stream/reversi.ts) | 4 | ||||
| -rw-r--r-- | src/server/api/stream/hybrid-timeline.ts | 47 | ||||
| -rw-r--r-- | src/server/api/stream/local-timeline.ts | 2 |
4 files changed, 54 insertions, 7 deletions
diff --git a/src/server/api/stream/reversi-game.ts b/src/server/api/stream/games/reversi-game.ts index ea8a9741d2..bcbfad0a7b 100644 --- a/src/server/api/stream/reversi-game.ts +++ b/src/server/api/stream/games/reversi-game.ts @@ -1,10 +1,10 @@ import * as websocket from 'websocket'; import * as redis from 'redis'; import * as CRC32 from 'crc-32'; -import ReversiGame, { pack } from '../../../models/reversi-game'; -import { publishReversiGameStream } from '../../../publishers/stream'; -import Reversi from '../../../reversi/core'; -import * as maps from '../../../reversi/maps'; +import ReversiGame, { pack } from '../../../../models/games/reversi/game'; +import { publishReversiGameStream } from '../../../../stream'; +import Reversi from '../../../../games/reversi/core'; +import * as maps from '../../../../games/reversi/maps'; import { ParsedUrlQuery } from 'querystring'; export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user?: any): void { diff --git a/src/server/api/stream/reversi.ts b/src/server/api/stream/games/reversi.ts index 35c6167364..3f23466520 100644 --- a/src/server/api/stream/reversi.ts +++ b/src/server/api/stream/games/reversi.ts @@ -1,8 +1,8 @@ import * as mongo from 'mongodb'; import * as websocket from 'websocket'; import * as redis from 'redis'; -import Matching, { pack } from '../../../models/reversi-matching'; -import publishUserStream from '../../../publishers/stream'; +import Matching, { pack } from '../../../../models/games/reversi/matching'; +import publishUserStream from '../../../../stream'; export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void { // Subscribe reversi stream diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts new file mode 100644 index 0000000000..513af9c1d4 --- /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', `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 + })); + }); +} diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts index 8f6a445be0..32718810dc 100644 --- a/src/server/api/stream/local-timeline.ts +++ b/src/server/api/stream/local-timeline.ts @@ -12,7 +12,7 @@ export default async function( user: IUser ) { // Subscribe stream - subscriber.subscribe(`misskey:local-timeline`); + subscriber.subscribe('misskey:local-timeline'); const mute = await Mute.find({ muterId: user._id }); const mutedUserIds = mute.map(m => m.muteeId.toString()); |