From 63d611dbc3f25538b7c74212358a24d02728c7ff Mon Sep 17 00:00:00 2001 From: "Jibon L. Costa" Date: Tue, 6 Jun 2023 13:05:08 +0200 Subject: [PATCH] propagated metadata update by data message (#434) --- package.json | 18 +++++++++--------- protocol | 2 +- src/helpers/livekit/ConnectLivekit.ts | 5 +++-- src/helpers/livekit/HandleDataMessages.ts | 8 ++++++++ src/helpers/livekit/HandleRoomMetadata.ts | 10 +++++++++- src/helpers/proto/plugnmeet_datamessage_pb.ts | 6 ++++++ 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 12d83bbd..f2bf2325 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plugnmeet-client", - "version": "1.4.0", + "version": "1.4.1", "author": "Jibon L. Costa", "license": "MIT", "scripts": { @@ -27,7 +27,7 @@ "i18next": "22.5.0", "i18next-browser-languagedetector": "7.0.2", "i18next-http-backend": "2.2.1", - "livekit-client": "1.9.7", + "livekit-client": "1.10.0", "lodash": "4.17.21", "microsoft-cognitiveservices-speech-sdk": "^1.29.0", "mobile-detect": "1.4.5", @@ -52,18 +52,18 @@ "@bufbuild/protoc-gen-es": "1.2.1", "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", "@types/lodash": "4.14.195", - "@types/react": "18.2.7", + "@types/react": "18.2.8", "@types/react-dom": "18.2.4", "@types/sanitize-html": "2.9.0", "@types/video.js": "^7.3.52", - "@typescript-eslint/eslint-plugin": "5.59.8", - "@typescript-eslint/parser": "5.59.8", + "@typescript-eslint/eslint-plugin": "5.59.9", + "@typescript-eslint/parser": "5.59.9", "autoprefixer": "10.4.14", "clean-webpack-plugin": "4.0.0", "copy-webpack-plugin": "11.0.0", "css-loader": "6.8.1", "css-minimizer-webpack-plugin": "5.0.0", - "eslint": "8.41.0", + "eslint": "8.42.0", "eslint-config-prettier": "8.8.0", "eslint-import-resolver-typescript": "3.5.5", "eslint-plugin-import": "2.27.5", @@ -87,9 +87,9 @@ "tailwindcss": "3.3.2", "terser-webpack-plugin": "5.3.9", "ts-loader": "9.4.3", - "typescript": "5.0.4", - "webpack": "5.85.0", - "webpack-cli": "5.1.1", + "typescript": "5.1.3", + "webpack": "5.85.1", + "webpack-cli": "5.1.3", "webpack-dev-server": "4.15.0" }, "lint-staged": { diff --git a/protocol b/protocol index e28be5af..df37ac4a 160000 --- a/protocol +++ b/protocol @@ -1 +1 @@ -Subproject commit e28be5affabb1751bf5c10105e0f168fd944276d +Subproject commit df37ac4a54b73d8eab6f5ef3ce0cd677bea95670 diff --git a/src/helpers/livekit/ConnectLivekit.ts b/src/helpers/livekit/ConnectLivekit.ts index c3acddcc..13ec5d01 100644 --- a/src/helpers/livekit/ConnectLivekit.ts +++ b/src/helpers/livekit/ConnectLivekit.ts @@ -261,10 +261,11 @@ export default class ConnectLivekit this.roomConnectionStatusState('connected'), ); room.on(RoomEvent.Disconnected, this.onDisconnected); - room.on( + // at present for updating metadata, we'll do it manually + /*room.on( RoomEvent.RoomMetadataChanged, this.handleRoomMetadata.setRoomMetadata, - ); + );*/ room.on( RoomEvent.ActiveSpeakersChanged, this.handleActiveSpeakers.activeSpeakersChanged, diff --git a/src/helpers/livekit/HandleDataMessages.ts b/src/helpers/livekit/HandleDataMessages.ts index ba964983..462e494a 100644 --- a/src/helpers/livekit/HandleDataMessages.ts +++ b/src/helpers/livekit/HandleDataMessages.ts @@ -15,13 +15,17 @@ import { DataMsgType, } from '../proto/plugnmeet_datamessage_pb'; import { GenerateAzureTokenRes } from '../proto/plugnmeet_speech_services_pb'; +import HandleRoomMetadata from './HandleRoomMetadata'; export default class HandleDataMessages { private that: IConnectLivekit; private requestedParticipant: Participant | undefined; + private metadataHandler: HandleRoomMetadata; + private lastId: string | undefined = undefined; constructor(that: IConnectLivekit) { this.that = that; + this.metadataHandler = new HandleRoomMetadata(); } public dataReceived = ( @@ -37,6 +41,7 @@ export default class HandleDataMessages { console.error(error); return; } + this.lastId = data.messageId; if (kind === DataPacket_Kind.RELIABLE) { if (data.type === DataMsgType.SYSTEM) { @@ -87,6 +92,9 @@ export default class HandleDataMessages { ); } break; + case DataMsgBodyType.UPDATE_ROOM_METADATA: + this.metadataHandler.setRoomMetadata(body.msg, this.lastId); + break; } }; diff --git a/src/helpers/livekit/HandleRoomMetadata.ts b/src/helpers/livekit/HandleRoomMetadata.ts index eb43b783..297a9a59 100644 --- a/src/helpers/livekit/HandleRoomMetadata.ts +++ b/src/helpers/livekit/HandleRoomMetadata.ts @@ -11,8 +11,16 @@ import { addChatMessage } from '../../store/slices/chatMessagesSlice'; export default class HandleRoomMetadata { private metadata: IRoomMetadata | null = null; private welcomeMessage: string | undefined = undefined; + private lastMessageId: string | undefined = undefined; + + public setRoomMetadata = (metadata: string, messageId?: string) => { + if (messageId && this.lastMessageId && messageId === this.lastMessageId) { + // if message id is same then we won't do anything. + return; + } else { + this.lastMessageId = messageId; + } - public setRoomMetadata = (metadata: string) => { if (!isEmpty(metadata)) { try { this.metadata = JSON.parse(metadata); diff --git a/src/helpers/proto/plugnmeet_datamessage_pb.ts b/src/helpers/proto/plugnmeet_datamessage_pb.ts index d38585db..8617d7f0 100644 --- a/src/helpers/proto/plugnmeet_datamessage_pb.ts +++ b/src/helpers/proto/plugnmeet_datamessage_pb.ts @@ -135,6 +135,11 @@ export enum DataMsgBodyType { */ AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN = 24, + /** + * @generated from enum value: UPDATE_ROOM_METADATA = 25; + */ + UPDATE_ROOM_METADATA = 25, + /** * USER type * @@ -194,6 +199,7 @@ proto3.util.setEnumType(DataMsgBodyType, 'plugnmeet.DataMsgBodyType', [ { no: 15, name: 'JOIN_BREAKOUT_ROOM' }, { no: 23, name: 'SPEECH_SUBTITLE_TEXT' }, { no: 24, name: 'AZURE_COGNITIVE_SERVICE_SPEECH_TOKEN' }, + { no: 25, name: 'UPDATE_ROOM_METADATA' }, { no: 16, name: 'CHAT' }, { no: 17, name: 'SCENE_UPDATE' }, { no: 18, name: 'POINTER_UPDATE' },