summaryrefslogtreecommitdiff
path: root/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2020-01-30 04:37:25 +0900
committerGitHub <noreply@github.com>2020-01-30 04:37:25 +0900
commitf6154dc0af1a0d65819e87240f4385f9573095cb (patch)
tree699a5ca07d6727b7f8497d4769f25d6d62f94b5a /src/server/api/stream
parentAdd Event activity-type support (#5785) (diff)
downloadsharkey-f6154dc0af1a0d65819e87240f4385f9573095cb.tar.gz
sharkey-f6154dc0af1a0d65819e87240f4385f9573095cb.tar.bz2
sharkey-f6154dc0af1a0d65819e87240f4385f9573095cb.zip
v12 (#5712)
Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com> Co-authored-by: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com>
Diffstat (limited to 'src/server/api/stream')
-rw-r--r--src/server/api/stream/channels/antenna.ts41
-rw-r--r--src/server/api/stream/channels/ap-log.ts25
-rw-r--r--src/server/api/stream/channels/hybrid-timeline.ts2
-rw-r--r--src/server/api/stream/channels/index.ts6
-rw-r--r--src/server/api/stream/channels/notes-stats.ts38
-rw-r--r--src/server/api/stream/index.ts15
6 files changed, 56 insertions, 71 deletions
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);
}
}