summaryrefslogtreecommitdiff
path: root/src/server/api/stream/index.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2021-02-21 12:26:49 +0900
committersyuilo <syuilotan@yahoo.co.jp>2021-02-21 12:26:49 +0900
commit78a963fe334caae564424c6458a8565da957c8be (patch)
tree2751939ed79ccb39213b94a102dc90253b1b4ac6 /src/server/api/stream/index.ts
parentタイムラインを特定の日付にジャンプする機能 (diff)
downloadsharkey-78a963fe334caae564424c6458a8565da957c8be.tar.gz
sharkey-78a963fe334caae564424c6458a8565da957c8be.tar.bz2
sharkey-78a963fe334caae564424c6458a8565da957c8be.zip
Messagingの入力中インジケータを実装
Diffstat (limited to 'src/server/api/stream/index.ts')
-rw-r--r--src/server/api/stream/index.ts19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index b04bed0c06..c56a0a157b 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -12,7 +12,8 @@ import { Users, Followings, Mutings, UserProfiles, ChannelFollowings } from '../
import { ApiError } from '../error';
import { AccessToken } from '../../../models/entities/access-token';
import { UserProfile } from '../../../models/entities/user-profile';
-import { publishChannelStream } from '../../../services/stream';
+import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '../../../services/stream';
+import { UserGroup } from '../../../models/entities/user-group';
/**
* Main stream connection
@@ -94,7 +95,12 @@ export default class Connection {
case 'disconnect': this.onChannelDisconnectRequested(body); break;
case 'channel': this.onChannelMessageRequested(body); break;
case 'ch': this.onChannelMessageRequested(body); break; // alias
+
+ // 個々のチャンネルではなくルートレベルでこれらのメッセージを受け取る理由は、
+ // クライアントの事情を考慮したとき、入力フォームはノートチャンネルやメッセージのメインコンポーネントとは別
+ // なこともあるため、それらのコンポーネントがそれぞれ各チャンネルに接続するようにするのは面倒なため。
case 'typingOnChannel': this.typingOnChannel(body.channel); break;
+ case 'typingOnMessaging': this.typingOnMessaging(body); break;
}
}
@@ -268,6 +274,17 @@ export default class Connection {
}
@autobind
+ private typingOnMessaging(param: { partner?: User['id']; group?: UserGroup['id']; }) {
+ if (this.user) {
+ if (param.partner) {
+ publishMessagingStream(param.partner, this.user.id, 'typing', this.user.id);
+ } else if (param.group) {
+ publishGroupMessagingStream(param.group, 'typing', this.user.id);
+ }
+ }
+ }
+
+ @autobind
private async updateFollowing() {
const followings = await Followings.find({
where: {