From f6154dc0af1a0d65819e87240f4385f9573095cb Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 30 Jan 2020 04:37:25 +0900 Subject: v12 (#5712) Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com> Co-authored-by: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com> --- src/server/api/stream/channels/antenna.ts | 41 +++++++++++++++++++++++ src/server/api/stream/channels/ap-log.ts | 25 -------------- src/server/api/stream/channels/hybrid-timeline.ts | 2 +- src/server/api/stream/channels/index.ts | 6 ++-- src/server/api/stream/channels/notes-stats.ts | 38 --------------------- src/server/api/stream/index.ts | 15 +++++++-- 6 files changed, 56 insertions(+), 71 deletions(-) create mode 100644 src/server/api/stream/channels/antenna.ts delete mode 100644 src/server/api/stream/channels/ap-log.ts delete mode 100644 src/server/api/stream/channels/notes-stats.ts (limited to 'src/server/api/stream') diff --git a/src/server/api/stream/channels/antenna.ts b/src/server/api/stream/channels/antenna.ts new file mode 100644 index 0000000000..714edb502d --- /dev/null +++ b/src/server/api/stream/channels/antenna.ts @@ -0,0 +1,41 @@ +import autobind from 'autobind-decorator'; +import Channel from '../channel'; +import { Notes } from '../../../../models'; +import shouldMuteThisNote from '../../../../misc/should-mute-this-note'; + +export default class extends Channel { + public readonly chName = 'antenna'; + public static shouldShare = false; + public static requireCredential = false; + private antennaId: string; + + @autobind + public async init(params: any) { + this.antennaId = params.antennaId as string; + + // Subscribe stream + this.subscriber.on(`antennaStream:${this.antennaId}`, this.onEvent); + } + + @autobind + private async onEvent(data: any) { + const { type, body } = data; + + if (type === 'note') { + const note = await Notes.pack(body.id, this.user, { detail: true }); + + // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (shouldMuteThisNote(note, this.muting)) return; + + this.send('note', note); + } else { + this.send(type, body); + } + } + + @autobind + public dispose() { + // Unsubscribe events + this.subscriber.off(`antennaStream:${this.antennaId}`, this.onEvent); + } +} diff --git a/src/server/api/stream/channels/ap-log.ts b/src/server/api/stream/channels/ap-log.ts deleted file mode 100644 index 867fd3670b..0000000000 --- a/src/server/api/stream/channels/ap-log.ts +++ /dev/null @@ -1,25 +0,0 @@ -import autobind from 'autobind-decorator'; -import Channel from '../channel'; - -export default class extends Channel { - public readonly chName = 'apLog'; - public static shouldShare = true; - public static requireCredential = false; - - @autobind - public async init(params: any) { - // Subscribe events - this.subscriber.on('apLog', this.onLog); - } - - @autobind - private async onLog(log: any) { - this.send('log', log); - } - - @autobind - public dispose() { - // Unsubscribe events - this.subscriber.off('apLog', this.onLog); - } -} diff --git a/src/server/api/stream/channels/hybrid-timeline.ts b/src/server/api/stream/channels/hybrid-timeline.ts index b9feb70258..e32f4111c2 100644 --- a/src/server/api/stream/channels/hybrid-timeline.ts +++ b/src/server/api/stream/channels/hybrid-timeline.ts @@ -50,7 +50,7 @@ export default class extends Channel { detail: true }); } - } + } // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する if (shouldMuteThisNote(note, this.muting)) return; diff --git a/src/server/api/stream/channels/index.ts b/src/server/api/stream/channels/index.ts index 4527fb1e46..6efad078c6 100644 --- a/src/server/api/stream/channels/index.ts +++ b/src/server/api/stream/channels/index.ts @@ -3,15 +3,14 @@ import homeTimeline from './home-timeline'; import localTimeline from './local-timeline'; import hybridTimeline from './hybrid-timeline'; import globalTimeline from './global-timeline'; -import notesStats from './notes-stats'; import serverStats from './server-stats'; import queueStats from './queue-stats'; import userList from './user-list'; +import antenna from './antenna'; import messaging from './messaging'; import messagingIndex from './messaging-index'; import drive from './drive'; import hashtag from './hashtag'; -import apLog from './ap-log'; import admin from './admin'; import gamesReversi from './games/reversi'; import gamesReversiGame from './games/reversi-game'; @@ -22,15 +21,14 @@ export default { localTimeline, hybridTimeline, globalTimeline, - notesStats, serverStats, queueStats, userList, + antenna, messaging, messagingIndex, drive, hashtag, - apLog, admin, gamesReversi, gamesReversiGame diff --git a/src/server/api/stream/channels/notes-stats.ts b/src/server/api/stream/channels/notes-stats.ts deleted file mode 100644 index 0c6b84d6cf..0000000000 --- a/src/server/api/stream/channels/notes-stats.ts +++ /dev/null @@ -1,38 +0,0 @@ -import autobind from 'autobind-decorator'; -import Xev from 'xev'; -import Channel from '../channel'; - -const ev = new Xev(); - -export default class extends Channel { - public readonly chName = 'notesStats'; - public static shouldShare = true; - public static requireCredential = false; - - @autobind - public async init(params: any) { - ev.addListener('notesStats', this.onStats); - } - - @autobind - private onStats(stats: any) { - this.send('stats', stats); - } - - @autobind - public onMessage(type: string, body: any) { - switch (type) { - case 'requestLog': - ev.once(`notesStatsLog:${body.id}`, statsLog => { - this.send('statsLog', statsLog); - }); - ev.emit('requestNotesStatsLog', body.id); - break; - } - } - - @autobind - public dispose() { - ev.removeListener('notesStats', this.onStats); - } -} diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts index f73f3229d5..6ec644a024 100644 --- a/src/server/api/stream/index.ts +++ b/src/server/api/stream/index.ts @@ -9,6 +9,7 @@ import { EventEmitter } from 'events'; import { User } from '../../../models/entities/user'; import { App } from '../../../models/entities/app'; import { Users, Followings, Mutings } from '../../../models'; +import { ApiError } from '../error'; /** * Main stream connection @@ -83,8 +84,16 @@ export default class Connection { // 呼び出し call(endpoint, user, this.app, payload.data).then(res => { this.sendMessageToWs(`api:${payload.id}`, { res }); - }).catch(e => { - this.sendMessageToWs(`api:${payload.id}`, { e }); + }).catch((e: ApiError) => { + this.sendMessageToWs(`api:${payload.id}`, { + error: { + message: e.message, + code: e.code, + id: e.id, + kind: e.kind, + ...(e.info ? { info: e.info } : {}) + } + }); }); } @@ -111,7 +120,7 @@ export default class Connection { this.subscriber.on(`noteStream:${payload.id}`, this.onNoteStreamMessage); } - if (payload.read && this.user) { + if (this.user) { readNote(this.user.id, payload.id); } } -- cgit v1.2.3-freya