@tencentcloud/roomkit-electron-vue3 2.6.2 → 2.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/es/components/RoomContent/StreamRegion/LocalScreenView/index.vue.mjs +1 -1
  2. package/es/components/RoomContent/StreamRegion/LocalScreenView/index.vue2.mjs +11 -4
  3. package/es/components/RoomFooter/WhiteboardControl.vue.mjs +5 -5
  4. package/es/components/common/AudioSettingTab.vue.mjs +1 -1
  5. package/es/components/common/AudioSettingTab.vue2.mjs +3 -1
  6. package/es/conference.mjs +10 -0
  7. package/es/index.mjs +24 -24
  8. package/es/services/function/aiTask.mjs +7 -4
  9. package/es/services/index.d.ts +1 -0
  10. package/es/services/manager/dataReportManager.d.ts +15 -2
  11. package/es/services/manager/dataReportManager.mjs +42 -13
  12. package/es/services/roomService.d.ts +2 -0
  13. package/es/services/roomService.mjs +2 -0
  14. package/es/services/types.d.ts +2 -0
  15. package/lib/components/RoomContent/StreamRegion/LocalScreenView/index.vue.js +1 -1
  16. package/lib/components/RoomContent/StreamRegion/LocalScreenView/index.vue2.js +10 -3
  17. package/lib/components/RoomFooter/WhiteboardControl.vue.js +5 -5
  18. package/lib/components/common/AudioSettingTab.vue.js +1 -1
  19. package/lib/components/common/AudioSettingTab.vue2.js +3 -1
  20. package/lib/conference.js +10 -0
  21. package/lib/index.js +24 -24
  22. package/lib/services/function/aiTask.js +6 -3
  23. package/lib/services/index.d.ts +1 -0
  24. package/lib/services/manager/dataReportManager.d.ts +15 -2
  25. package/lib/services/manager/dataReportManager.js +42 -13
  26. package/lib/services/roomService.d.ts +2 -0
  27. package/lib/services/roomService.js +2 -0
  28. package/lib/services/types.d.ts +2 -0
  29. package/lib/utils/constants.js +1 -1
  30. package/package.json +3 -3
  31. package/src/TUIRoom/components/RoomContent/StreamRegion/LocalScreenView/index.vue +5 -7
  32. package/src/TUIRoom/components/RoomFooter/WhiteboardControl.vue +5 -8
  33. package/src/TUIRoom/components/common/AudioSettingTab.vue +3 -1
  34. package/src/TUIRoom/conference.ts +10 -0
  35. package/src/TUIRoom/services/function/aiTask.ts +10 -2
  36. package/src/TUIRoom/services/index.ts +1 -0
  37. package/src/TUIRoom/services/manager/dataReportManager.ts +48 -13
  38. package/src/TUIRoom/services/roomService.ts +2 -0
  39. package/src/TUIRoom/services/types.ts +2 -0
  40. package/es/package.json.mjs +0 -93
  41. package/lib/package.json.js +0 -93
package/lib/index.js CHANGED
@@ -979,30 +979,30 @@
979
979
  }.select[data-v-86b2cd04] {
980
980
  width: 100%;
981
981
  font-size: 14px;
982
- }.audio-setting-tab[data-v-4cbcecda] {
982
+ }.audio-setting-tab[data-v-4e811209] {
983
983
  width: 100%;
984
984
  font-size: 14px;
985
985
  border-radius: 4px;
986
986
  }
987
- .audio-setting-tab .item-setting[data-v-4cbcecda] {
987
+ .audio-setting-tab .item-setting[data-v-4e811209] {
988
988
  width: 100%;
989
989
  }
990
- .audio-setting-tab .item-setting[data-v-4cbcecda]:not(:last-child) {
990
+ .audio-setting-tab .item-setting[data-v-4e811209]:not(:last-child) {
991
991
  margin-bottom: 20px;
992
992
  }
993
- .audio-setting-tab .flex[data-v-4cbcecda] {
993
+ .audio-setting-tab .flex[data-v-4e811209] {
994
994
  display: flex;
995
995
  width: 100%;
996
996
  }
997
- .audio-setting-tab .select[data-v-4cbcecda] {
997
+ .audio-setting-tab .select[data-v-4e811209] {
998
998
  flex: 1;
999
999
  }
1000
- .audio-setting-tab .button[data-v-4cbcecda] {
1000
+ .audio-setting-tab .button[data-v-4e811209] {
1001
1001
  width: 74px;
1002
1002
  padding: 5px 23px;
1003
1003
  margin-left: 10px;
1004
1004
  }
1005
- .audio-setting-tab .title[data-v-4cbcecda] {
1005
+ .audio-setting-tab .title[data-v-4e811209] {
1006
1006
  display: inline-block;
1007
1007
  width: 100%;
1008
1008
  margin-bottom: 8px;
@@ -1011,24 +1011,24 @@
1011
1011
  line-height: 22px;
1012
1012
  color: #4f586b;
1013
1013
  }
1014
- .audio-setting-tab .mic-bar-container[data-v-4cbcecda] {
1014
+ .audio-setting-tab .mic-bar-container[data-v-4e811209] {
1015
1015
  display: flex;
1016
1016
  justify-content: space-between;
1017
1017
  }
1018
- .audio-setting-tab .mic-bar-container .mic-bar[data-v-4cbcecda] {
1018
+ .audio-setting-tab .mic-bar-container .mic-bar[data-v-4e811209] {
1019
1019
  width: 3px;
1020
1020
  height: 6px;
1021
1021
  background-color: var(--background-color-4);
1022
1022
  }
1023
- .audio-setting-tab .mic-bar-container .mic-bar.active[data-v-4cbcecda] {
1023
+ .audio-setting-tab .mic-bar-container .mic-bar.active[data-v-4e811209] {
1024
1024
  background-color: var(--green-color);
1025
1025
  }
1026
- .audio-setting-tab .audio-level-container[data-v-4cbcecda] {
1026
+ .audio-setting-tab .audio-level-container[data-v-4e811209] {
1027
1027
  display: flex;
1028
1028
  width: 100%;
1029
1029
  height: 20px;
1030
1030
  }
1031
- .audio-setting-tab .audio-level-container .slider[data-v-4cbcecda] {
1031
+ .audio-setting-tab .audio-level-container .slider[data-v-4e811209] {
1032
1032
  height: 20px;
1033
1033
  margin-left: 10px;
1034
1034
  }.audio-icon-container[data-v-6e9fcb9f] {
@@ -3156,7 +3156,7 @@ input[data-v-e79d67af]:disabled {
3156
3156
  @keyframes breath-44d9a08c {
3157
3157
  50% {
3158
3158
  /* stylelint-disable-next-line scss/no-global-function-names */
3159
- background-color: lightgray;
3159
+ background-color: rgb(210.5, 210.5, 210.5);
3160
3160
  }
3161
3161
  }.overlay-container[data-v-567d271d] {
3162
3162
  position: fixed;
@@ -7923,7 +7923,7 @@ input[data-v-1927e971]:focus, input[data-v-1927e971]:active, textarea[data-v-192
7923
7923
  --screen-font-color: #b2bbd1;
7924
7924
  --user-has-no-camera-bg-color: rgba(34, 38, 46, 0.5);
7925
7925
  --user-info-container-bg-color: rgba(34, 38, 46, 0.8);
7926
- }.local-screen-container[data-v-5c425af9] {
7926
+ }.local-screen-container[data-v-222da582] {
7927
7927
  display: flex;
7928
7928
  align-items: center;
7929
7929
  justify-content: center;
@@ -7931,13 +7931,13 @@ input[data-v-1927e971]:focus, input[data-v-1927e971]:active, textarea[data-v-192
7931
7931
  height: 100%;
7932
7932
  background-color: var(--background-color-1);
7933
7933
  }
7934
- .local-screen-container[data-v-5c425af9]::before {
7934
+ .local-screen-container[data-v-222da582]::before {
7935
7935
  width: 100%;
7936
7936
  height: 100%;
7937
7937
  content: "";
7938
7938
  background-color: var(--local-screen-stream-bg-color);
7939
7939
  }
7940
- .local-screen-container .local-screen-control-container[data-v-5c425af9] {
7940
+ .local-screen-container .local-screen-control-container[data-v-222da582] {
7941
7941
  position: absolute;
7942
7942
  top: 50%;
7943
7943
  left: 50%;
@@ -7947,38 +7947,38 @@ input[data-v-1927e971]:focus, input[data-v-1927e971]:active, textarea[data-v-192
7947
7947
  color: var(--screen-font-color);
7948
7948
  transform: translate(-50%, -50%);
7949
7949
  }
7950
- .local-screen-container .local-screen-control-container.mini[data-v-5c425af9] {
7950
+ .local-screen-container .local-screen-control-container.mini[data-v-222da582] {
7951
7951
  transform: translate(-50%, -50%) scale(0.7);
7952
7952
  }
7953
- .local-screen-container .local-screen-control-container .local-screen-info[data-v-5c425af9] {
7953
+ .local-screen-container .local-screen-control-container .local-screen-info[data-v-222da582] {
7954
7954
  display: flex;
7955
7955
  flex-direction: column;
7956
7956
  align-items: center;
7957
7957
  }
7958
- .local-screen-container .local-screen-control-container .local-screen-info .text[data-v-5c425af9] {
7958
+ .local-screen-container .local-screen-control-container .local-screen-info .text[data-v-222da582] {
7959
7959
  font-size: 16px;
7960
7960
  font-style: normal;
7961
7961
  font-weight: 400;
7962
7962
  line-height: 24px;
7963
7963
  white-space: nowrap;
7964
7964
  }
7965
- .local-screen-container .local-screen-control-container .stop-button[data-v-5c425af9] {
7965
+ .local-screen-container .local-screen-control-container .stop-button[data-v-222da582] {
7966
7966
  margin-top: 30px;
7967
7967
  background-color: var(--red-color-3);
7968
7968
  border: 1.5px solid var(--red-color-3);
7969
7969
  }
7970
- .local-screen-container .local-screen-control-container .toggle-annotating-button[data-v-5c425af9] {
7970
+ .local-screen-container .local-screen-control-container .toggle-annotating-button[data-v-222da582] {
7971
7971
  margin-top: 30px;
7972
7972
  background-color: var(--red-color-3);
7973
7973
  border: 1.5px solid var(--red-color-3);
7974
7974
  }
7975
- .tui-theme-white .local-screen-container[data-v-5c425af9] {
7975
+ .tui-theme-white .local-screen-container[data-v-222da582] {
7976
7976
  --local-screen-stream-bg-color: rgba(228, 232, 238, 0.4);
7977
7977
  }
7978
- .tui-theme-black .local-screen-container[data-v-5c425af9] {
7978
+ .tui-theme-black .local-screen-container[data-v-222da582] {
7979
7979
  --local-screen-stream-bg-color: rgba(34, 38, 46, 0.5);
7980
7980
  }
7981
- .dialog-button[data-v-5c425af9] {
7981
+ .dialog-button[data-v-222da582] {
7982
7982
  margin-right: 12px;
7983
7983
  }.stream-region-container[data-v-5ad6ef67] {
7984
7984
  display: flex;
@@ -18,7 +18,7 @@ class AITask {
18
18
  __publicField(this, "subtitleText", { value: "" });
19
19
  __publicField(this, "transcriptionText", { value: "" });
20
20
  this.service = service;
21
- if (environment.isElectron) return;
21
+ if (environment.isElectron || environment.isMobile) return;
22
22
  this.bindCtx();
23
23
  this.bindEvent();
24
24
  }
@@ -41,8 +41,11 @@ class AITask {
41
41
  this.service.lifeCycleManager.off("unmount", this.handleUnmount);
42
42
  }
43
43
  handleMount() {
44
- var _a;
45
- const trtc = (_a = this.service.roomEngine.instance) == null ? void 0 : _a.getTRTCCloud()._trtc;
44
+ var _a, _b, _c, _d;
45
+ if (typeof ((_a = this.service.roomEngine.instance) == null ? void 0 : _a.getTRTCCloud) === "undefined" || typeof ((_c = (_b = this.service.roomEngine.instance) == null ? void 0 : _b.getTRTCCloud()) == null ? void 0 : _c._trtc) === "undefined") {
46
+ return;
47
+ }
48
+ const trtc = (_d = this.service.roomEngine.instance) == null ? void 0 : _d.getTRTCCloud()._trtc;
46
49
  this.trtc = trtc;
47
50
  trtc.on("custom-message", this.handleAIMessage);
48
51
  }
@@ -8,4 +8,5 @@ export * from './manager/lifeCycleManager';
8
8
  export * from './manager/roomActionManager';
9
9
  export * from './manager/scheduleConferenceManager';
10
10
  export * from './manager/chatManager';
11
+ export * from './manager/dataReportManager';
11
12
  export * from './function/aiTask';
@@ -3,8 +3,21 @@ export declare enum MetricsKey {
3
3
  stopSharingWhiteboard = 106001,
4
4
  startAnnotating = 106002,
5
5
  stopAnnotating = 106003,
6
- saveWhiteboard = 106004
6
+ saveWhiteboard = 106004,
7
+ setLanguage = 106050,
8
+ setTheme = 106051,
9
+ disableTextMessaging = 106052,
10
+ disableScreenSharing = 106053,
11
+ enableWatermark = 106054,
12
+ enableVirtualBackground = 106055,
13
+ hideFeatureButton = 106056
7
14
  }
8
15
  export declare class DataReportManager {
9
- static reportCount(key: MetricsKey): void;
16
+ private taskQueue;
17
+ private isReady;
18
+ constructor();
19
+ reportCount(key: MetricsKey): void;
20
+ private bindEvent;
21
+ private executePendingTasks;
22
+ private createReportCountTask;
10
23
  }
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2
5
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
6
  const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-electron");
4
- const _package = require("../../package.json.js");
5
- const appVersion = _package.default.version;
6
7
  const KEY_METRICS_API = "KeyMetricsStats";
7
8
  var MetricsKey = /* @__PURE__ */ ((MetricsKey2) => {
8
9
  MetricsKey2[MetricsKey2["startSharingWhiteboard"] = 106e3] = "startSharingWhiteboard";
@@ -10,20 +11,48 @@ var MetricsKey = /* @__PURE__ */ ((MetricsKey2) => {
10
11
  MetricsKey2[MetricsKey2["startAnnotating"] = 106002] = "startAnnotating";
11
12
  MetricsKey2[MetricsKey2["stopAnnotating"] = 106003] = "stopAnnotating";
12
13
  MetricsKey2[MetricsKey2["saveWhiteboard"] = 106004] = "saveWhiteboard";
14
+ MetricsKey2[MetricsKey2["setLanguage"] = 106050] = "setLanguage";
15
+ MetricsKey2[MetricsKey2["setTheme"] = 106051] = "setTheme";
16
+ MetricsKey2[MetricsKey2["disableTextMessaging"] = 106052] = "disableTextMessaging";
17
+ MetricsKey2[MetricsKey2["disableScreenSharing"] = 106053] = "disableScreenSharing";
18
+ MetricsKey2[MetricsKey2["enableWatermark"] = 106054] = "enableWatermark";
19
+ MetricsKey2[MetricsKey2["enableVirtualBackground"] = 106055] = "enableVirtualBackground";
20
+ MetricsKey2[MetricsKey2["hideFeatureButton"] = 106056] = "hideFeatureButton";
13
21
  return MetricsKey2;
14
22
  })(MetricsKey || {});
15
23
  class DataReportManager {
16
- static reportCount(key) {
17
- TUIRoomEngine.callExperimentalAPI(
18
- JSON.stringify({
19
- api: KEY_METRICS_API,
20
- params: {
21
- opt: "count",
22
- key,
23
- version: appVersion
24
- }
25
- })
26
- );
24
+ constructor() {
25
+ __publicField(this, "taskQueue", []);
26
+ __publicField(this, "isReady", false);
27
+ this.bindEvent();
28
+ }
29
+ reportCount(key) {
30
+ const task = this.createReportCountTask(key);
31
+ if (!this.isReady) {
32
+ this.taskQueue.push(task);
33
+ } else {
34
+ task();
35
+ }
36
+ }
37
+ bindEvent() {
38
+ TUIRoomEngine.once("ready", () => {
39
+ this.isReady = true;
40
+ this.executePendingTasks();
41
+ });
42
+ }
43
+ executePendingTasks() {
44
+ this.taskQueue.forEach((task) => task());
45
+ this.taskQueue = [];
46
+ }
47
+ createReportCountTask(key) {
48
+ return () => {
49
+ TUIRoomEngine.callExperimentalAPI(
50
+ JSON.stringify({
51
+ api: KEY_METRICS_API,
52
+ params: { key }
53
+ })
54
+ );
55
+ };
27
56
  }
28
57
  }
29
58
  exports.DataReportManager = DataReportManager;
@@ -12,6 +12,7 @@ import { VirtualBackground } from './function/virtualBackground';
12
12
  import { BasicBeauty } from './function/basicBeauty';
13
13
  import { ScheduleConferenceManager } from './manager/scheduleConferenceManager';
14
14
  import { ConferenceInvitationManager } from './manager/conferenceInvitationManager';
15
+ import { DataReportManager } from './manager/dataReportManager';
15
16
  import { ErrorHandler } from './function/errorHandler';
16
17
  import { ChatManager } from './manager/chatManager';
17
18
  import { AITask } from './function/aiTask';
@@ -31,6 +32,7 @@ export declare class RoomService implements IRoomService {
31
32
  basicBeauty: BasicBeauty;
32
33
  scheduleConferenceManager: ScheduleConferenceManager;
33
34
  conferenceInvitationManager: ConferenceInvitationManager;
35
+ dataReportManager: DataReportManager;
34
36
  errorHandler: ErrorHandler;
35
37
  chatManager: ChatManager;
36
38
  aiTask: AITask;
@@ -26,6 +26,7 @@ const virtualBackground = require("./function/virtualBackground.js");
26
26
  const basicBeauty = require("./function/basicBeauty.js");
27
27
  const scheduleConferenceManager = require("./manager/scheduleConferenceManager.js");
28
28
  const conferenceInvitationManager = require("./manager/conferenceInvitationManager.js");
29
+ const dataReportManager = require("./manager/dataReportManager.js");
29
30
  const errorHandler = require("./function/errorHandler.js");
30
31
  const chatManager = require("./manager/chatManager.js");
31
32
  const TUICore = require("@tencentcloud/tui-core");
@@ -47,6 +48,7 @@ const _RoomService = class _RoomService {
47
48
  __publicField(this, "basicBeauty", new basicBeauty.BasicBeauty(this));
48
49
  __publicField(this, "scheduleConferenceManager", new scheduleConferenceManager.ScheduleConferenceManager(this));
49
50
  __publicField(this, "conferenceInvitationManager", new conferenceInvitationManager.ConferenceInvitationManager(this));
51
+ __publicField(this, "dataReportManager", new dataReportManager.DataReportManager());
50
52
  __publicField(this, "errorHandler", new errorHandler.ErrorHandler(this));
51
53
  __publicField(this, "chatManager", new chatManager.ChatManager(this));
52
54
  __publicField(this, "aiTask", new aiTask.AITask(this));
@@ -8,6 +8,7 @@ import { RoomActionManager } from './manager/roomActionManager';
8
8
  import { ErrorHandler } from './function/errorHandler';
9
9
  import { AITask } from './function/aiTask';
10
10
  import { ConferenceInvitationManager } from './manager/conferenceInvitationManager';
11
+ import { DataReportManager } from './manager/dataReportManager';
11
12
 
12
13
  export interface IRoomService {
13
14
  t: any;
@@ -19,6 +20,7 @@ export interface IRoomService {
19
20
  roomActionManager?: RoomActionManager;
20
21
  scheduleConferenceManager: ScheduleConferenceManager;
21
22
  conferenceInvitationManager: ConferenceInvitationManager;
23
+ dataReportManager: DataReportManager;
22
24
  errorHandler: ErrorHandler;
23
25
  aiTask: AITask;
24
26
  on: (eventType: EventType, callback: (data?: any) => any) => void;
@@ -22,7 +22,7 @@ const Vue__namespace = /* @__PURE__ */ _interopNamespaceDefault(Vue);
22
22
  const __vite_import_meta_env__ = { "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SSR": false };
23
23
  const isVue27 = /^2\.7\.*/.test(Vue__namespace.version);
24
24
  const isVue3 = /^3\.*/.test(Vue__namespace.version);
25
- const isInnerScene = { url: typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.src || new URL("utils/constants.js", document.baseURI).href } && __vite_import_meta_env__ && false;
25
+ const isInnerScene = { url: typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("utils/constants.js", document.baseURI).href } && __vite_import_meta_env__ && false;
26
26
  exports.isInnerScene = isInnerScene;
27
27
  exports.isVue27 = isVue27;
28
28
  exports.isVue3 = isVue3;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tencentcloud/roomkit-electron-vue3",
3
- "version": "2.6.2",
3
+ "version": "2.6.7",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.mjs",
6
6
  "types": "./es/index.d.ts",
@@ -18,10 +18,9 @@
18
18
  "javascript"
19
19
  ],
20
20
  "dependencies": {
21
- "@originjs/vite-plugin-commonjs": "^1.0.3",
22
21
  "@tencentcloud/chat": "latest",
23
22
  "@tencentcloud/tui-core": "latest",
24
- "@tencentcloud/tuiroom-engine-electron": "^2.6.2",
23
+ "@tencentcloud/tuiroom-engine-electron": "^2.6.7",
25
24
  "@tencentcloud/chat-uikit-engine": "2.2.7",
26
25
  "@tencentcloud/chat-uikit-vue": "2.2.7",
27
26
  "@tencentcloud/universal-api": "^2.0.9",
@@ -46,6 +45,7 @@
46
45
  "electron": ">=4.0.0"
47
46
  },
48
47
  "devDependencies": {
48
+ "@originjs/vite-plugin-commonjs": "^1.0.3",
49
49
  "@vitejs/plugin-vue": "^5.0.4",
50
50
  "sass": "^1.72.0",
51
51
  "typescript": "^5.2.2",
@@ -69,10 +69,8 @@ import Dialog from '../../../common/base/Dialog/index.vue';
69
69
  import eventBus from '../../../../hooks/useMitt';
70
70
  import { useI18n } from '../../../../locales';
71
71
  import { useRoomStore } from '../../../../stores/room';
72
- import {
73
- DataReportManager,
74
- MetricsKey,
75
- } from '../../../../services/manager/dataReportManager';
72
+ import { MetricsKey } from '../../../../services/manager/dataReportManager';
73
+ import { roomService } from '../../../../services';
76
74
 
77
75
  const roomStore = useRoomStore();
78
76
  const { t } = useI18n();
@@ -108,17 +106,17 @@ function toggleAnnotationWindow() {
108
106
  if (isAnnotationVisiable.value) {
109
107
  ipcRenderer?.send('annotation:stop-annotating');
110
108
  isAnnotationVisiable.value = false;
111
- DataReportManager.reportCount(MetricsKey.stopAnnotating);
109
+ roomService.dataReportManager.reportCount(MetricsKey.stopAnnotating);
112
110
  } else {
113
111
  ipcRenderer?.send('annotation:start-annotating');
114
112
  isAnnotationVisiable.value = true;
115
- DataReportManager.reportCount(MetricsKey.startAnnotating);
113
+ roomService.dataReportManager.reportCount(MetricsKey.startAnnotating);
116
114
  }
117
115
  }
118
116
 
119
117
  ipcRenderer?.on('annotation:stop-from-annotation-window', () => {
120
118
  isAnnotationVisiable.value = false;
121
- DataReportManager.reportCount(MetricsKey.stopAnnotating);
119
+ roomService.dataReportManager.reportCount(MetricsKey.stopAnnotating);
122
120
  });
123
121
  </script>
124
122
 
@@ -30,10 +30,7 @@ import eventBus from '../../hooks/useMitt';
30
30
  import { EventType, roomEngine } from '../../services';
31
31
  import { MESSAGE_DURATION } from '../../constants/message';
32
32
  import { roomService } from '../../services/index';
33
- import {
34
- DataReportManager,
35
- MetricsKey,
36
- } from '../../services/manager/dataReportManager';
33
+ import { MetricsKey } from '../../services/manager/dataReportManager';
37
34
 
38
35
  const { t } = useI18n();
39
36
  const roomStore = useRoomStore();
@@ -109,10 +106,10 @@ async function startShareWhiteboard() {
109
106
  function stopShareWhiteboard() {
110
107
  roomEngine.instance?.stopScreenSharing();
111
108
  if (isWhiteboardVisiable.value) {
112
- DataReportManager.reportCount(MetricsKey.stopSharingWhiteboard);
109
+ roomService.dataReportManager.reportCount(MetricsKey.stopSharingWhiteboard);
113
110
  }
114
111
  if (isAnnotationVisiable.value) {
115
- DataReportManager.reportCount(MetricsKey.stopAnnotating);
112
+ roomService.dataReportManager.reportCount(MetricsKey.stopAnnotating);
116
113
  }
117
114
  isWhiteboardVisiable.value = false;
118
115
  isAnnotationVisiable.value = false;
@@ -127,7 +124,7 @@ function hideAllWhiteboardWindow() {
127
124
  function showWhiteboardWindow() {
128
125
  isWhiteboardVisiable.value = true;
129
126
  ipcRenderer.send('whiteboard:show-window');
130
- DataReportManager.reportCount(MetricsKey.startSharingWhiteboard);
127
+ roomService.dataReportManager.reportCount(MetricsKey.startSharingWhiteboard);
131
128
  }
132
129
 
133
130
  ipcRenderer.on('whiteboard:window-closed', () => {
@@ -139,7 +136,7 @@ ipcRenderer.on('whiteboard:stop-from-whiteboard-window', () => {
139
136
  });
140
137
 
141
138
  ipcRenderer.on('whiteboard:save-from-whiteboard-window', () => {
142
- DataReportManager.reportCount(MetricsKey.saveWhiteboard);
139
+ roomService.dataReportManager.reportCount(MetricsKey.saveWhiteboard);
143
140
  });
144
141
 
145
142
  onMounted(() => {
@@ -110,7 +110,9 @@ function handleMicrophoneTest() {
110
110
 
111
111
  const isTestingSpeaker = ref(false);
112
112
  const audioPlayer = document?.createElement('audio');
113
- audioPlayer.loop = true;
113
+ if (audioPlayer && typeof audioPlayer.loop !== 'undefined') {
114
+ audioPlayer.loop = true;
115
+ }
114
116
  const { t } = useI18n();
115
117
 
116
118
  /**
@@ -6,6 +6,7 @@ import {
6
6
  LanguageOption,
7
7
  Theme,
8
8
  EventType,
9
+ MetricsKey,
9
10
  } from './services';
10
11
  import { TUIRoomEngine } from './index';
11
12
  import logger from './utils/common/logger';
@@ -144,26 +145,34 @@ class Conference implements IConference {
144
145
  }
145
146
 
146
147
  public setLanguage(language: LanguageOption) {
148
+ roomService.dataReportManager.reportCount(MetricsKey.setLanguage);
147
149
  return roomService.setLanguage(language);
148
150
  }
149
151
 
150
152
  public setTheme(theme: ThemeOption) {
153
+ roomService.dataReportManager.reportCount(MetricsKey.setTheme);
151
154
  return roomService.setTheme(toTargetTheme(theme) as Theme);
152
155
  }
153
156
 
154
157
  public disableTextMessaging() {
158
+ roomService.dataReportManager.reportCount(MetricsKey.disableTextMessaging);
155
159
  roomService.setComponentConfig({ ChatControl: { visible: false } });
156
160
  }
157
161
 
158
162
  public disableScreenSharing() {
163
+ roomService.dataReportManager.reportCount(MetricsKey.disableScreenSharing);
159
164
  roomService.setComponentConfig({ ScreenShare: { visible: false } });
160
165
  }
161
166
 
162
167
  public enableWatermark() {
168
+ roomService.dataReportManager.reportCount(MetricsKey.enableWatermark);
163
169
  roomService.waterMark.toggleWatermark(true);
164
170
  }
165
171
 
166
172
  public enableVirtualBackground() {
173
+ roomService.dataReportManager.reportCount(
174
+ MetricsKey.enableVirtualBackground
175
+ );
167
176
  roomService.setComponentConfig({ VirtualBackground: { visible: true } });
168
177
  }
169
178
 
@@ -172,6 +181,7 @@ class Conference implements IConference {
172
181
  }
173
182
 
174
183
  public hideFeatureButton(name: FeatureButton) {
184
+ roomService.dataReportManager.reportCount(MetricsKey.hideFeatureButton);
175
185
  roomService.setComponentConfig({ [name]: { visible: false } });
176
186
  }
177
187
 
@@ -1,6 +1,6 @@
1
1
  import { IRoomService } from '../';
2
2
  import mitt from 'mitt';
3
- import { isElectron } from '../../utils/environment';
3
+ import { isElectron, isMobile } from '../../utils/environment';
4
4
 
5
5
  interface SubtitleMessage {
6
6
  userid: string;
@@ -53,7 +53,7 @@ export class AITask {
53
53
 
54
54
  constructor(service: IRoomService) {
55
55
  this.service = service;
56
- if (isElectron) return;
56
+ if (isElectron || isMobile) return;
57
57
  this.bindCtx();
58
58
  this.bindEvent();
59
59
  }
@@ -88,6 +88,14 @@ export class AITask {
88
88
  }
89
89
 
90
90
  private handleMount() {
91
+ // todo trtccloud adds custom-message event
92
+ if (
93
+ typeof this.service.roomEngine.instance?.getTRTCCloud === 'undefined' ||
94
+ typeof this.service.roomEngine.instance?.getTRTCCloud()?._trtc ===
95
+ 'undefined'
96
+ ) {
97
+ return;
98
+ }
91
99
  const trtc = this.service.roomEngine.instance?.getTRTCCloud()._trtc;
92
100
  this.trtc = trtc;
93
101
  trtc.on('custom-message', this.handleAIMessage);
@@ -9,4 +9,5 @@ export * from './manager/lifeCycleManager';
9
9
  export * from './manager/roomActionManager';
10
10
  export * from './manager/scheduleConferenceManager';
11
11
  export * from './manager/chatManager';
12
+ export * from './manager/dataReportManager';
12
13
  export * from './function/aiTask';
@@ -1,6 +1,5 @@
1
1
  import TUIRoomEngine from '@tencentcloud/tuiroom-engine-electron';
2
- import packageConfig from '../../../../package.json';
3
- const appVersion = packageConfig.version;
2
+
4
3
  const KEY_METRICS_API = 'KeyMetricsStats';
5
4
 
6
5
  export enum MetricsKey {
@@ -9,19 +8,55 @@ export enum MetricsKey {
9
8
  startAnnotating = 106002,
10
9
  stopAnnotating = 106003,
11
10
  saveWhiteboard = 106004,
11
+
12
+ setLanguage = 106050,
13
+ setTheme = 106051,
14
+ disableTextMessaging = 106052,
15
+ disableScreenSharing = 106053,
16
+ enableWatermark = 106054,
17
+ enableVirtualBackground = 106055,
18
+ hideFeatureButton = 106056,
12
19
  }
13
20
 
21
+ type Task = () => void;
22
+
14
23
  export class DataReportManager {
15
- static reportCount(key: MetricsKey) {
16
- TUIRoomEngine.callExperimentalAPI(
17
- JSON.stringify({
18
- api: KEY_METRICS_API,
19
- params: {
20
- opt: 'count',
21
- key,
22
- version: appVersion,
23
- },
24
- })
25
- );
24
+ private taskQueue: Task[] = [];
25
+ private isReady = false;
26
+
27
+ constructor() {
28
+ this.bindEvent();
29
+ }
30
+
31
+ public reportCount(key: MetricsKey) {
32
+ const task = this.createReportCountTask(key);
33
+ if (!this.isReady) {
34
+ this.taskQueue.push(task);
35
+ } else {
36
+ task();
37
+ }
38
+ }
39
+
40
+ private bindEvent() {
41
+ TUIRoomEngine.once('ready', () => {
42
+ this.isReady = true;
43
+ this.executePendingTasks();
44
+ });
45
+ }
46
+
47
+ private executePendingTasks() {
48
+ this.taskQueue.forEach(task => task());
49
+ this.taskQueue = [];
50
+ }
51
+
52
+ private createReportCountTask(key: MetricsKey): Task {
53
+ return () => {
54
+ TUIRoomEngine.callExperimentalAPI(
55
+ JSON.stringify({
56
+ api: KEY_METRICS_API,
57
+ params: { key },
58
+ })
59
+ );
60
+ };
26
61
  }
27
62
  }
@@ -37,6 +37,7 @@ import { VirtualBackground } from './function/virtualBackground';
37
37
  import { BasicBeauty } from './function/basicBeauty';
38
38
  import { ScheduleConferenceManager } from './manager/scheduleConferenceManager';
39
39
  import { ConferenceInvitationManager } from './manager/conferenceInvitationManager';
40
+ import { DataReportManager } from './manager/dataReportManager';
40
41
  import { ErrorHandler } from './function/errorHandler';
41
42
  import { ChatManager } from './manager/chatManager';
42
43
  import { TUILogin } from '@tencentcloud/tui-core';
@@ -63,6 +64,7 @@ export class RoomService implements IRoomService {
63
64
  new ScheduleConferenceManager(this);
64
65
  public conferenceInvitationManager: ConferenceInvitationManager =
65
66
  new ConferenceInvitationManager(this);
67
+ public dataReportManager: DataReportManager = new DataReportManager();
66
68
  public errorHandler: ErrorHandler = new ErrorHandler(this);
67
69
  public chatManager: ChatManager = new ChatManager(this);
68
70
  public aiTask: AITask = new AITask(this);
@@ -8,6 +8,7 @@ import { RoomActionManager } from './manager/roomActionManager';
8
8
  import { ErrorHandler } from './function/errorHandler';
9
9
  import { AITask } from './function/aiTask';
10
10
  import { ConferenceInvitationManager } from './manager/conferenceInvitationManager';
11
+ import { DataReportManager } from './manager/dataReportManager';
11
12
  export interface IRoomService {
12
13
  t: any;
13
14
  roomEngine: Record<string, any>;
@@ -18,6 +19,7 @@ export interface IRoomService {
18
19
  roomActionManager?: RoomActionManager;
19
20
  scheduleConferenceManager: ScheduleConferenceManager;
20
21
  conferenceInvitationManager: ConferenceInvitationManager;
22
+ dataReportManager: DataReportManager;
21
23
  errorHandler: ErrorHandler;
22
24
  aiTask: AITask;
23
25
  on: (eventType: EventType, callback: (data?: any) => any) => void;