From 3f56b837875af78aaecc747a4b6191bef9fbc5d5 Mon Sep 17 00:00:00 2001 From: hyrious Date: Mon, 15 Jan 2024 15:07:19 +0800 Subject: [PATCH 1/5] refactor(flat-stores): make admin message never dismiss --- packages/flat-stores/src/classroom-store/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flat-stores/src/classroom-store/index.ts b/packages/flat-stores/src/classroom-store/index.ts index 81d2bfc234d..3e5e98c2107 100644 --- a/packages/flat-stores/src/classroom-store/index.ts +++ b/packages/flat-stores/src/classroom-store/index.ts @@ -218,7 +218,7 @@ export class ClassroomStore { this.sideEffect.addDisposer( this.rtm.events.on("admin-message", ({ text }) => { - void message.info(text); + void message.info(text, 0); }), ); From e127d4e00b6e2d6af6ed6f7286ae05bcc22ae32a Mon Sep 17 00:00:00 2001 From: hyrious Date: Tue, 16 Jan 2024 10:50:37 +0800 Subject: [PATCH 2/5] refactor(flat-stores): handle json format admin message --- packages/flat-i18n/locales/en.json | 1 + packages/flat-i18n/locales/zh-CN.json | 1 + packages/flat-server-api/src/room.ts | 5 +++ .../flat-stores/src/classroom-store/index.ts | 37 ++++++++++++++++++- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/flat-i18n/locales/en.json b/packages/flat-i18n/locales/en.json index 2ab40274f10..c084e7c99fd 100644 --- a/packages/flat-i18n/locales/en.json +++ b/packages/flat-i18n/locales/en.json @@ -71,6 +71,7 @@ "student-left-temporarily": "Student has left", "user-left-temporarily": "has left", "the-room-has-ended-and-is-about-to-exit": "The room has ended and is about to exit...", + "the-room-is-about-to-end": "The room is about to reach {{roomType}} duration limit and will end at {{expireAt}} ({{minutes}} minutes left)", "you-have-entered-the-room-at-another-device": "You have entered the room at another device", "class-picker-text": { "BigClass": "Large number of students", diff --git a/packages/flat-i18n/locales/zh-CN.json b/packages/flat-i18n/locales/zh-CN.json index 5b964d2de38..698ebf1bd63 100644 --- a/packages/flat-i18n/locales/zh-CN.json +++ b/packages/flat-i18n/locales/zh-CN.json @@ -49,6 +49,7 @@ "current-status": "当前状态:", "current-mode": "当前模式:", "the-room-has-ended-and-is-about-to-exit": "房间已结束,即将退出...", + "the-room-is-about-to-end": "房间即将到达{{roomType}}时长上限,将于 {{expireAt}} ({{minutes}} 分钟后) 结束", "you-have-entered-the-room-at-another-device": "你已在另外一台设备进入房间", "teacher-left-temporarily": "老师暂时离开", "student-left-temporarily": "学生暂时离开", diff --git a/packages/flat-server-api/src/room.ts b/packages/flat-server-api/src/room.ts index 9d525001eb8..ca223d2d88b 100644 --- a/packages/flat-server-api/src/room.ts +++ b/packages/flat-server-api/src/room.ts @@ -103,6 +103,11 @@ export interface JoinRoomResult { rtmToken: string; showGuide: boolean; region: Region; + billing?: { + ExpireAt: string; + MaxUser: number; + VIPLevel: number; // 0 = normal, 1 = pro + }; } export function joinRoom(uuid: string): Promise { diff --git a/packages/flat-stores/src/classroom-store/index.ts b/packages/flat-stores/src/classroom-store/index.ts index 3e5e98c2107..cca8a641ae2 100644 --- a/packages/flat-stores/src/classroom-store/index.ts +++ b/packages/flat-stores/src/classroom-store/index.ts @@ -30,6 +30,7 @@ import { } from "@netless/flat-services"; import { preferencesStore } from "../preferences-store"; import { sampleSize } from "lodash-es"; +import { format } from "date-fns"; export * from "./constants"; export * from "./chat-store"; @@ -218,7 +219,7 @@ export class ClassroomStore { this.sideEffect.addDisposer( this.rtm.events.on("admin-message", ({ text }) => { - void message.info(text, 0); + this.handleAdminMessage(text); }), ); @@ -1470,4 +1471,38 @@ export class ClassroomStore { }); } } + + private handleAdminMessage(text: string): void { + if (text && text[0] === "{") { + try { + const data = JSON.parse(text); + if (data && typeof data === "object") { + const msg = data as { + roomLevel: 0 | 1; + expireAt: string; + leftMinutes: number; + message: string; + }; + // TODO: roomType = derive from msg.roomLevel + const roomType = FlatI18n.getInstance().language === "zh-CN" ? "" : "its"; + const expireAt = format(new Date(msg.expireAt), "HH:mm"); + const minutes = msg.leftMinutes; + const info = FlatI18n.t("the-room-is-about-to-end", { + roomType, + expireAt, + minutes, + }); + void message.info(info, 0); + return; + } + } catch (error) { + console.warn(error); + // fallback to normal message + } + } + + if (text) { + void message.info(text, 0); + } + } } From a41f7ea0b1e1ef78578edc341e5c32fe9bb09940 Mon Sep 17 00:00:00 2001 From: hyrious Date: Tue, 16 Jan 2024 10:54:46 +0800 Subject: [PATCH 3/5] refactor(flat-stores): make admin message be singleton --- packages/flat-stores/src/classroom-store/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/flat-stores/src/classroom-store/index.ts b/packages/flat-stores/src/classroom-store/index.ts index cca8a641ae2..a6da4825b0d 100644 --- a/packages/flat-stores/src/classroom-store/index.ts +++ b/packages/flat-stores/src/classroom-store/index.ts @@ -29,7 +29,7 @@ import { IServiceWhiteboard, } from "@netless/flat-services"; import { preferencesStore } from "../preferences-store"; -import { sampleSize } from "lodash-es"; +import { noop, sampleSize } from "lodash-es"; import { format } from "date-fns"; export * from "./constants"; @@ -1472,7 +1472,11 @@ export class ClassroomStore { } } + private hideLastAdminMessage: () => void = noop; + private handleAdminMessage(text: string): void { + this.hideLastAdminMessage(); + if (text && text[0] === "{") { try { const data = JSON.parse(text); @@ -1492,7 +1496,7 @@ export class ClassroomStore { expireAt, minutes, }); - void message.info(info, 0); + this.hideLastAdminMessage = message.info(info, 0); return; } } catch (error) { @@ -1502,7 +1506,7 @@ export class ClassroomStore { } if (text) { - void message.info(text, 0); + this.hideLastAdminMessage = message.info(text, 0); } } } From fb7f2d797d336a48fa9046c23648f28374f131bc Mon Sep 17 00:00:00 2001 From: hyrious Date: Tue, 16 Jan 2024 11:01:05 +0800 Subject: [PATCH 4/5] fix: hide admin message on leave room --- packages/flat-stores/src/classroom-store/index.ts | 4 ++++ packages/flat-stores/src/global-store.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/flat-stores/src/classroom-store/index.ts b/packages/flat-stores/src/classroom-store/index.ts index a6da4825b0d..a1ba879e7d6 100644 --- a/packages/flat-stores/src/classroom-store/index.ts +++ b/packages/flat-stores/src/classroom-store/index.ts @@ -223,6 +223,10 @@ export class ClassroomStore { }), ); + this.sideEffect.addDisposer(() => { + this.hideLastAdminMessage(); + }); + if (!this.isCreator) { this.sideEffect.addDisposer( this.rtm.events.on("update-room-status", event => { diff --git a/packages/flat-stores/src/global-store.ts b/packages/flat-stores/src/global-store.ts index 74a45095a3d..83321871d9b 100644 --- a/packages/flat-stores/src/global-store.ts +++ b/packages/flat-stores/src/global-store.ts @@ -93,7 +93,7 @@ export class GlobalStore { } public get pmiRoomUUID(): string { - return (this.pmiRoomList && this.pmiRoomList[0]?.roomUUID) || ""; + return (this.pmiRoomExist && this.pmiRoomList![0]?.roomUUID) || ""; } public get userUUID(): string | undefined { From a3433af276e0af3d171e9bef18d75332476753c0 Mon Sep 17 00:00:00 2001 From: hyrious Date: Tue, 16 Jan 2024 14:00:13 +0800 Subject: [PATCH 5/5] refactor: wording --- packages/flat-server-api/src/room.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/flat-server-api/src/room.ts b/packages/flat-server-api/src/room.ts index ca223d2d88b..d3589cbc6f3 100644 --- a/packages/flat-server-api/src/room.ts +++ b/packages/flat-server-api/src/room.ts @@ -104,9 +104,9 @@ export interface JoinRoomResult { showGuide: boolean; region: Region; billing?: { - ExpireAt: string; - MaxUser: number; - VIPLevel: number; // 0 = normal, 1 = pro + expireAt: string; + maxUser: number; + vipLevel: number; // 0 = normal, 1 = pro }; }