tuikit-atomicx-vue3 3.4.1 → 4.3.0
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.
- package/.eslintrc.cjs +1 -0
- package/dist/baseComp/Modal/Modal.js +431 -23
- package/dist/chat/index.d.ts +18 -18
- package/dist/components/AudioSetting/AudioMediaControl.js +39 -41
- package/dist/components/AudioSetting/AudioSettingTab.js +10 -10
- package/dist/components/AudioSetting/MicrophoneSelect.js +8 -8
- package/dist/components/AudioSetting/SpeakerSelect.js +9 -9
- package/dist/components/AudioSettingPanel/i18n/en-US/index.d.ts +1 -0
- package/dist/components/AudioSettingPanel/i18n/en-US/index.js +2 -1
- package/dist/components/AudioSettingPanel/i18n/zh-CN/index.d.ts +1 -0
- package/dist/components/AudioSettingPanel/i18n/zh-CN/index.js +2 -1
- package/dist/components/AudioSettingPanel/index.js +81 -73
- package/dist/components/BarrageInput/BarrageInputH5.js +9 -9
- package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +3 -3
- package/dist/components/BarrageInput/MessageInputState.d.ts +28 -0
- package/dist/components/BarrageInput/MessageInputState.js +82 -0
- package/dist/components/BarrageInput/TextEditor/CharacterCountExtension.js +1 -1
- package/dist/components/BarrageInput/TextEditor/EditorCore.js +2 -2
- package/dist/components/BarrageInput/TextEditor/index.js +7 -7
- package/dist/components/BarrageInput/type.d.ts +17 -0
- package/dist/components/BarrageInput/type.js +4 -0
- package/dist/components/BarrageInput/utils.d.ts +30 -0
- package/dist/components/BarrageInput/utils.js +41 -0
- package/dist/components/BarrageList/BarrageList.js +80 -110
- package/dist/components/BarrageList/BarrageList.vue.d.ts +0 -29
- package/dist/components/BarrageList/BarrageListH5.js +95 -122
- package/dist/components/BarrageList/BarrageListH5.vue.d.ts +0 -29
- package/dist/components/BarrageList/BarrageListState.d.ts +58 -0
- package/dist/components/BarrageList/BarrageListState.js +106 -0
- package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.js +16 -24
- package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue.d.ts +5 -5
- package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.js +48 -73
- package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.vue.d.ts +5 -7
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +70 -76
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.vue.d.ts +6 -6
- package/dist/components/BarrageList/Message/TextMessage/emoji.d.ts +5 -0
- package/dist/components/BarrageList/Message/TextMessage/emoji.js +134 -0
- package/dist/components/BarrageList/index.d.ts +0 -36
- package/dist/components/CameraButton/index.js +18 -19
- package/dist/components/CoGuestPanel/CoGuestPanel.js +60 -60
- package/dist/components/CoHostPanel/BattlePanel.js +25 -25
- package/dist/components/CoHostPanel/CoHostPanel.js +60 -55
- package/dist/components/CoHostPanel/ConfigSettingPanel.js +49 -55
- package/dist/components/CoHostPanel/ConnectionPanel.js +129 -120
- package/dist/components/CoHostPanel/RecommendHostList.js +39 -36
- package/dist/components/CoHostPanel/constants.d.ts +3 -0
- package/dist/components/CoHostPanel/constants.js +6 -0
- package/dist/components/CoHostPanel/i18n/en-US/index.d.ts +1 -0
- package/dist/components/CoHostPanel/i18n/en-US/index.js +2 -1
- package/dist/components/CoHostPanel/i18n/zh-CN/index.d.ts +1 -0
- package/dist/components/CoHostPanel/i18n/zh-CN/index.js +3 -2
- package/dist/components/LiveAudienceList/LiveAudienceList.js +44 -45
- package/dist/components/LiveAudienceList/LiveAudienceListH5.js +7 -7
- package/dist/components/LiveAudienceList/UserActionMenu.js +57 -64
- package/dist/components/LiveList/LiveList.js +23 -23
- package/dist/components/LiveList/LiveListH5.js +38 -38
- package/dist/components/LiveScenePanel/CameraSettingDialog.js +10 -10
- package/dist/components/LiveScenePanel/MaterialItem.js +15 -15
- package/dist/components/LiveScenePanel/index.js +4 -4
- package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.js +58 -58
- package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.js +56 -49
- package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.js +6 -6
- package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.js +1 -1
- package/dist/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.js +46 -43
- package/dist/components/{LiveCoreView → LiveView}/PlayerControl/AudioControl.js +23 -23
- package/dist/components/LiveView/PlayerControl/MultiResolution.js +79 -0
- package/dist/components/LiveView/PlayerControl/MultiResolution.vue.d.ts +8 -0
- package/dist/components/LiveView/PlayerControl/PlayerControl.js +172 -0
- package/dist/components/LiveView/PlayerControl/PlayerControlState.js +263 -0
- package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/domHelpers.d.ts +6 -0
- package/dist/components/LiveView/PlayerControl/utils/domHelpers.js +131 -0
- package/dist/components/{LiveCoreView/i18n/zh-CN → LiveView/i18n/en-US}/index.d.ts +3 -2
- package/dist/components/{LiveCoreView → LiveView}/i18n/en-US/index.js +4 -3
- package/dist/components/{LiveCoreView/i18n/en-US → LiveView/i18n/zh-CN}/index.d.ts +3 -2
- package/dist/components/{LiveCoreView → LiveView}/i18n/zh-CN/index.js +4 -3
- package/dist/components/LiveView/index.d.ts +79 -0
- package/dist/components/{LiveCoreView → LiveView}/index.js +44 -42
- package/dist/components/MessageInput/TextEditor/EditorCore.js +2 -2
- package/dist/components/MessageList/MessageList.vue.d.ts +2 -2
- package/dist/components/MessageList/index.d.ts +18 -18
- package/dist/components/MicButton/index.js +11 -11
- package/dist/components/StreamMixer/LocalMixer/MixerControl.js +12 -12
- package/dist/components/StreamMixer/LocalMixer/index.js +66 -63
- package/dist/components/StreamMixer/index.js +6 -6
- package/dist/components/StreamView/Layout/CustomLayout.js +8 -8
- package/dist/components/StreamView/Layout/FloatLayout.js +124 -127
- package/dist/components/StreamView/Layout/GridLayout.js +5 -5
- package/dist/components/StreamView/index.js +25 -33
- package/dist/components/StreamView/manager/mediaManager.js +54 -60
- package/dist/components/VideoSetting/CameraSelect.js +8 -8
- package/dist/components/VideoSetting/VideoMediaControl.js +10 -10
- package/dist/components/VideoSetting/VideoPreview.js +9 -9
- package/dist/components/VideoSetting/VideoProfile.js +6 -6
- package/dist/components/VideoSetting/VideoSettingTab.js +40 -39
- package/dist/components/VideoSettingPanel/CameraSelect.js +8 -8
- package/dist/components/VideoSettingPanel/VideoPreview.js +1 -1
- package/dist/components/VideoSettingPanel/VideoProfile.js +18 -18
- package/dist/hooks/useRoomEngine.js +6 -6
- package/dist/{index-D88ja_7_.js → index-BfIEeWMg.js} +1767 -1757
- package/dist/{index-D-KJvDvy.js → index-DTi1fL-x.js} +460 -457
- package/dist/index.js +177 -157
- package/dist/report/MetricsKey.d.ts +16 -0
- package/dist/report/MetricsKey.js +4 -0
- package/dist/report/dataReport.d.ts +12 -0
- package/dist/report/dataReport.js +45 -0
- package/dist/report/index.d.ts +4 -0
- package/dist/report/index.js +6 -0
- package/dist/rtc/index.d.ts +6 -81
- package/dist/rtc/index.js +53 -52
- package/dist/states/BarrageState/BarrageState.d.ts +74 -0
- package/dist/states/BarrageState/BarrageState.js +80 -0
- package/dist/states/BarrageState/index.d.ts +1 -0
- package/dist/states/BarrageState/index.js +5 -0
- package/dist/states/{BattleState.d.ts → BattleState/BattleState.d.ts} +10 -11
- package/dist/states/BattleState/BattleState.js +203 -0
- package/dist/states/BattleState/index.d.ts +1 -0
- package/dist/states/BattleState/index.js +4 -0
- package/dist/states/CoGuestState.d.ts +24 -94
- package/dist/states/CoGuestState.js +297 -189
- package/dist/states/CoHostState/CoHostState.d.ts +2 -2
- package/dist/states/CoHostState/CoHostState.js +135 -131
- package/dist/states/{DeviceState.d.ts → DeviceState/DeviceState.d.ts} +25 -13
- package/dist/states/DeviceState/DeviceState.js +314 -0
- package/dist/states/DeviceState/index.d.ts +1 -0
- package/dist/states/DeviceState/index.js +4 -0
- package/dist/states/LiveAudienceState.d.ts +3 -1
- package/dist/states/LiveAudienceState.js +106 -63
- package/dist/states/{LiveState/index.d.ts → LiveListState/LiveListState.d.ts} +13 -8
- package/dist/states/LiveListState/LiveListState.js +285 -0
- package/dist/states/LiveListState/index.d.ts +1 -0
- package/dist/states/LiveListState/index.js +4 -0
- package/dist/states/LiveMonitorState/api/http.js +147 -129
- package/dist/states/LiveMonitorState/index.js +67 -62
- package/dist/states/LiveSeatState/index.d.ts +46 -11
- package/dist/states/LiveSeatState/index.js +34 -15
- package/dist/states/LiveSeatState/seatEventManager.d.ts +2 -0
- package/dist/states/LiveSeatState/seatEventManager.js +63 -42
- package/dist/states/LiveSeatState/seatManager.d.ts +34 -5
- package/dist/states/LiveSeatState/seatManager.js +131 -29
- package/dist/states/LiveSeatState/store.d.ts +5 -5
- package/dist/states/LiveSeatState/store.js +12 -10
- package/dist/states/LiveSeatState/usePlayStream/RTCStreamManager.js +1 -1
- package/dist/states/LiveSeatState/usePlayStream/RTCStreamPlayer.js +1 -1
- package/dist/states/LiveSeatState/usePlayStream/index.js +30 -28
- package/dist/states/LoginState.js +39 -34
- package/dist/states/SeatStore.js +82 -83
- package/dist/states/{VideoMixerState.d.ts → VideoMixerState/VideoMixerState.d.ts} +1 -1
- package/dist/states/VideoMixerState/VideoMixerState.js +269 -0
- package/dist/states/VideoMixerState/index.d.ts +1 -0
- package/dist/states/VideoMixerState/index.js +4 -0
- package/dist/styles/index.css +1 -1
- package/dist/types/audience.d.ts +21 -0
- package/dist/types/audience.js +4 -1
- package/dist/types/battle.d.ts +75 -3
- package/dist/types/battle.js +5 -1
- package/dist/types/coGuest.d.ts +72 -5
- package/dist/types/coGuest.js +4 -2
- package/dist/types/device.d.ts +38 -17
- package/dist/types/device.js +10 -8
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +96 -80
- package/dist/types/live.d.ts +36 -21
- package/dist/types/live.js +6 -4
- package/dist/types/seat.d.ts +23 -4
- package/dist/types/seat.js +7 -1
- package/dist/utils/eventCenter.d.ts +88 -0
- package/dist/utils/eventCenter.js +161 -0
- package/package.json +2 -2
- package/src/components/AudioSetting/AudioMediaControl.vue +1 -3
- package/src/components/AudioSetting/AudioSettingTab.vue +1 -2
- package/src/components/AudioSetting/MicrophoneSelect.vue +1 -2
- package/src/components/AudioSetting/SpeakerSelect.vue +1 -2
- package/src/components/AudioSettingPanel/i18n/en-US/index.ts +1 -0
- package/src/components/AudioSettingPanel/i18n/zh-CN/index.ts +1 -0
- package/src/components/AudioSettingPanel/index.vue +4 -2
- package/src/components/BarrageInput/BarrageInputH5.vue +1 -1
- package/src/components/BarrageInput/EmojiPicker/EmojiPicker.vue +1 -1
- package/src/components/BarrageInput/MessageInputState.ts +160 -0
- package/src/components/BarrageInput/TextEditor/TextEditor.vue +1 -1
- package/src/components/BarrageInput/type.ts +26 -0
- package/src/components/BarrageInput/utils.ts +45 -0
- package/src/components/BarrageList/BarrageList.vue +61 -117
- package/src/components/BarrageList/BarrageListH5.vue +75 -159
- package/src/components/BarrageList/BarrageListState.ts +223 -0
- package/src/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue +8 -55
- package/src/components/BarrageList/Message/MessageLayout/MessageLayout.vue +19 -44
- package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +69 -96
- package/src/components/BarrageList/Message/TextMessage/emoji.ts +132 -0
- package/src/components/CameraButton/index.vue +0 -1
- package/src/components/CoGuestPanel/CoGuestPanel.vue +16 -91
- package/src/components/CoHostPanel/BattlePanel.vue +4 -7
- package/src/components/CoHostPanel/CoHostPanel.vue +11 -3
- package/src/components/CoHostPanel/ConfigSettingPanel.vue +2 -8
- package/src/components/CoHostPanel/ConnectionPanel.vue +41 -37
- package/src/components/CoHostPanel/RecommendHostList.vue +12 -13
- package/src/components/CoHostPanel/constants.ts +3 -0
- package/src/components/CoHostPanel/i18n/en-US/index.ts +1 -0
- package/src/components/CoHostPanel/i18n/zh-CN/index.ts +2 -1
- package/src/components/LiveAudienceList/LiveAudienceList.vue +4 -5
- package/src/components/LiveAudienceList/LiveAudienceListH5.vue +2 -2
- package/src/components/LiveAudienceList/UserActionMenu.vue +7 -48
- package/src/components/LiveList/LiveList.vue +5 -5
- package/src/components/LiveList/LiveListH5.vue +6 -6
- package/src/components/LiveScenePanel/index.vue +2 -2
- package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.vue +10 -15
- package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.vue +30 -31
- package/src/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.vue +5 -3
- package/src/components/{LiveCoreView → LiveView}/PlayerControl/AudioControl.vue +1 -1
- package/src/components/{LiveCoreView → LiveView}/PlayerControl/MultiResolution.vue +9 -3
- package/src/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.vue +10 -2
- package/src/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControlState.ts +233 -259
- package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/domHelpers.ts +64 -0
- package/src/components/{LiveCoreView → LiveView}/i18n/en-US/index.ts +3 -2
- package/src/components/{LiveCoreView → LiveView}/i18n/zh-CN/index.ts +3 -2
- package/src/components/{LiveCoreView → LiveView}/index.ts +5 -2
- package/src/components/{LiveCoreView → LiveView}/index.vue +3 -3
- package/src/components/MicButton/index.vue +3 -3
- package/src/components/StreamMixer/LocalMixer/index.vue +6 -8
- package/src/components/StreamMixer/index.vue +1 -1
- package/src/components/StreamView/Layout/CustomLayout.vue +2 -2
- package/src/components/StreamView/Layout/FloatLayout.vue +88 -83
- package/src/components/StreamView/index.vue +28 -14
- package/src/components/StreamView/manager/mediaManager.ts +38 -42
- package/src/components/VideoSetting/CameraSelect.vue +1 -2
- package/src/components/VideoSetting/VideoMediaControl.vue +1 -1
- package/src/components/VideoSetting/VideoPreview.vue +1 -2
- package/src/components/VideoSetting/VideoProfile.vue +1 -1
- package/src/components/VideoSetting/VideoSettingTab.vue +9 -5
- package/src/components/VideoSettingPanel/CameraSelect.vue +1 -2
- package/src/components/VideoSettingPanel/VideoProfile.vue +7 -7
- package/src/hooks/useRoomEngine.ts +1 -1
- package/src/report/MetricsKey.ts +16 -0
- package/src/report/dataReport.ts +55 -0
- package/src/report/index.ts +7 -0
- package/src/rtc/index.ts +8 -10
- package/src/types/audience.ts +27 -1
- package/src/types/battle.ts +87 -4
- package/src/types/coGuest.ts +87 -5
- package/src/types/device.ts +41 -16
- package/src/types/index.ts +2 -2
- package/src/types/live.ts +41 -22
- package/src/types/seat.ts +28 -4
- package/src/utils/eventCenter.ts +249 -0
- package/dist/DialogPortal-CvJcEAsn.js +0 -417
- package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.js +0 -23
- package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.vue.d.ts +0 -30
- package/dist/components/BarrageList/Message/FaceMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/FaceMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.js +0 -4
- package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue.d.ts +0 -16
- package/dist/components/BarrageList/Message/GroupTipMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/GroupTipMessage/index.js +0 -25
- package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.js +0 -71
- package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.vue.d.ts +0 -34
- package/dist/components/BarrageList/Message/ImageMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/ImageMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.js +0 -9
- package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.vue.d.ts +0 -2
- package/dist/components/BarrageList/Message/MergerMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/MergerMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.js +0 -40
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue.d.ts +0 -54
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.js +0 -26
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue.d.ts +0 -15
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.js +0 -4
- package/dist/components/BarrageList/Message/RecalledMessage/RecalledMessage.js +0 -41
- package/dist/components/BarrageList/Message/RecalledMessage/RecalledMessage.vue.d.ts +0 -35
- package/dist/components/BarrageList/Message/RecalledMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/RecalledMessage/index.js +0 -4
- package/dist/components/BarrageList/MessageForward/ForwardListItem.js +0 -45
- package/dist/components/BarrageList/MessageForward/ForwardListItem.vue.d.ts +0 -17
- package/dist/components/BarrageList/MessageForward/MessageForward.js +0 -203
- package/dist/components/BarrageList/MessageForward/MessageForward.vue.d.ts +0 -2
- package/dist/components/BarrageList/MessageForward/index.d.ts +0 -3
- package/dist/components/BarrageList/MessageForward/index.js +0 -4
- package/dist/components/LiveCoreView/PlayerControl/MultiResolution.js +0 -78
- package/dist/components/LiveCoreView/PlayerControl/MultiResolution.vue.d.ts +0 -2
- package/dist/components/LiveCoreView/PlayerControl/PlayerControl.js +0 -168
- package/dist/components/LiveCoreView/PlayerControl/PlayerControlState.js +0 -267
- package/dist/components/LiveCoreView/PlayerControl/utils/domHelpers.js +0 -99
- package/dist/components/LiveCoreView/index.d.ts +0 -4
- package/dist/components/StreamView/Layout/MixLayout.js +0 -89
- package/dist/components/StreamView/Layout/MixLayout.vue.d.ts +0 -31
- package/dist/states/BarrageListState/BarrageListState.d.ts +0 -26
- package/dist/states/BarrageListState/BarrageListState.js +0 -122
- package/dist/states/BarrageListState/index.d.ts +0 -1
- package/dist/states/BarrageListState/index.js +0 -4
- package/dist/states/BattleState.js +0 -117
- package/dist/states/DeviceState.js +0 -296
- package/dist/states/LiveState/index.js +0 -254
- package/dist/states/VideoMixerState.js +0 -260
- package/src/components/BarrageList/Message/FaceMessage/FaceMessage.vue +0 -43
- package/src/components/BarrageList/Message/FaceMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue +0 -55
- package/src/components/BarrageList/Message/GroupTipMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/ImageMessage/ImageMessage.vue +0 -181
- package/src/components/BarrageList/Message/ImageMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/MergerMessage/MergerMessage.vue +0 -6
- package/src/components/BarrageList/Message/MergerMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue +0 -70
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue +0 -40
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/index.ts +0 -3
- package/src/components/BarrageList/Message/RecalledMessage/RecalledMessage.vue +0 -82
- package/src/components/BarrageList/Message/RecalledMessage/index.ts +0 -3
- package/src/components/BarrageList/MessageForward/ForwardListItem.vue +0 -67
- package/src/components/BarrageList/MessageForward/MessageForward.vue +0 -388
- package/src/components/BarrageList/MessageForward/index.ts +0 -3
- package/src/components/StreamView/Layout/MixLayout.vue +0 -144
- /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/AudioControl.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.vue.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControlState.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/index.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/index.js +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.js +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.js +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/i18n/index.d.ts +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/i18n/index.js +0 -0
- /package/dist/components/{LiveCoreView → LiveView}/index.vue.d.ts +0 -0
- /package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.vue +0 -0
- /package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.vue +0 -0
- /package/src/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.module.scss +0 -0
- /package/src/components/{LiveCoreView → LiveView}/PlayerControl/index.ts +0 -0
- /package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.ts +0 -0
- /package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.ts +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/img/defeat.png +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/img/draw.png +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/img/victory.png +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/BattleOrdinaryBadge.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/BattleTopBadge.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/blueBkg.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/redBkg.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/s.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/assets/svg/v.svg +0 -0
- /package/src/components/{LiveCoreView → LiveView}/i18n/index.ts +0 -0
|
@@ -2,27 +2,27 @@ import type { Ref } from 'vue';
|
|
|
2
2
|
import { computed, ref, watch } from 'vue';
|
|
3
3
|
import { TRTCCloud, TUIVideoQuality } from '@tencentcloud/tuiroom-engine-js';
|
|
4
4
|
import useRoomEngine from '../../../hooks/useRoomEngine';
|
|
5
|
-
import useLiveState from '../../../states/LiveState';
|
|
6
5
|
import { useLiveSeatState } from '../../../states/LiveSeatState';
|
|
6
|
+
import { useLiveListState } from '../../../states/LiveListState';
|
|
7
7
|
// Import utility modules
|
|
8
|
-
import {
|
|
9
|
-
getDeviceType,
|
|
8
|
+
import {
|
|
9
|
+
getDeviceType,
|
|
10
10
|
getCurrentOrientation,
|
|
11
11
|
shouldRotateToLandscapeForFullscreen,
|
|
12
12
|
hadLandscapeRotationToUndo,
|
|
13
13
|
} from './utils/deviceDetection';
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
import {
|
|
15
|
+
DOMElementGetter,
|
|
16
|
+
EventListenerManager,
|
|
17
|
+
} from './utils/domHelpers';
|
|
18
|
+
import {
|
|
19
|
+
FullscreenManager,
|
|
17
20
|
FullscreenMode,
|
|
18
21
|
OrientationManager,
|
|
19
|
-
StyleManager
|
|
22
|
+
StyleManager,
|
|
20
23
|
} from './utils/fullscreenManager';
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
EventListenerManager
|
|
24
|
-
} from './utils/domHelpers';
|
|
25
|
-
import { LiveStatus } from '../../../types';
|
|
24
|
+
import type {
|
|
25
|
+
FullscreenResult } from './utils/fullscreenManager';
|
|
26
26
|
|
|
27
27
|
// Player fill mode enum
|
|
28
28
|
export enum FillMode {
|
|
@@ -48,7 +48,7 @@ export interface PlayerControlState {
|
|
|
48
48
|
isLandscapeStyleMode: Ref<boolean>;
|
|
49
49
|
isPictureInPicture: Ref<boolean>;
|
|
50
50
|
currentVolume: Ref<number>;
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
// Resolution state properties
|
|
53
53
|
resolutionList: Ref<Resolution[]>;
|
|
54
54
|
currentResolution: Ref<Resolution | undefined>;
|
|
@@ -98,7 +98,7 @@ const roomEngine = useRoomEngine();
|
|
|
98
98
|
*/
|
|
99
99
|
export function usePlayerControlState(): PlayerControlState {
|
|
100
100
|
// Dependency injection
|
|
101
|
-
const {
|
|
101
|
+
const { currentLive } = useLiveListState();
|
|
102
102
|
const { canvas } = useLiveSeatState();
|
|
103
103
|
|
|
104
104
|
// Event listener management
|
|
@@ -108,11 +108,11 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
108
108
|
const orientationListenerId = `player-control-${Date.now()}`;
|
|
109
109
|
|
|
110
110
|
// Computed properties
|
|
111
|
-
const isLandscapeStream = computed(() =>
|
|
112
|
-
canvas.value ? canvas.value.width > canvas.value.height : false
|
|
111
|
+
const isLandscapeStream = computed(() =>
|
|
112
|
+
canvas.value ? canvas.value.width > canvas.value.height : false,
|
|
113
113
|
);
|
|
114
|
-
const isPortraitStream = computed(() =>
|
|
115
|
-
canvas.value ? canvas.value.width < canvas.value.height : false
|
|
114
|
+
const isPortraitStream = computed(() =>
|
|
115
|
+
canvas.value ? canvas.value.width < canvas.value.height : false,
|
|
116
116
|
);
|
|
117
117
|
|
|
118
118
|
// Device information
|
|
@@ -124,7 +124,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
124
124
|
const withErrorHandling = async <T>(
|
|
125
125
|
operation: () => Promise<T>,
|
|
126
126
|
operationName: string,
|
|
127
|
-
fallbackValue: T
|
|
127
|
+
fallbackValue: T,
|
|
128
128
|
): Promise<T> => {
|
|
129
129
|
try {
|
|
130
130
|
return await operation();
|
|
@@ -160,47 +160,43 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
162
|
|
|
163
|
-
const resume = async (): Promise<boolean> => {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}, 'Resume playback', false);
|
|
182
|
-
};
|
|
163
|
+
const resume = async (): Promise<boolean> => withErrorHandling(async () => {
|
|
164
|
+
const video = DOMElementGetter.getVideoElement();
|
|
165
|
+
if (!video) {
|
|
166
|
+
throw new Error('Video element not found');
|
|
167
|
+
}
|
|
168
|
+
if (DOMElementGetter.hasTcPlayerElement()) {
|
|
169
|
+
await video.play();
|
|
170
|
+
} else {
|
|
171
|
+
const trtcCloudMap = TRTCCloud.subCloudMap;
|
|
172
|
+
trtcCloudMap.forEach((trtcCloud: TRTCCloud) => {
|
|
173
|
+
const trtc = trtcCloud?._trtc;
|
|
174
|
+
trtc?.callExperimentalAPI('resumeRemotePlayer', { userId: '*' });
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
isPlaying.value = true;
|
|
178
|
+
console.log('Video playback resumed');
|
|
179
|
+
return true;
|
|
180
|
+
}, 'Resume playback', false);
|
|
183
181
|
|
|
184
|
-
const pause = async (): Promise<boolean> => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}, 'Pause playback', false);
|
|
203
|
-
};
|
|
182
|
+
const pause = async (): Promise<boolean> => withErrorHandling(async () => {
|
|
183
|
+
const video = DOMElementGetter.getVideoElement();
|
|
184
|
+
if (!video) {
|
|
185
|
+
throw new Error('Video element not found');
|
|
186
|
+
}
|
|
187
|
+
if (DOMElementGetter.hasTcPlayerElement()) {
|
|
188
|
+
await video.pause();
|
|
189
|
+
} else {
|
|
190
|
+
const trtcCloudMap = TRTCCloud.subCloudMap;
|
|
191
|
+
trtcCloudMap.forEach((trtcCloud: TRTCCloud) => {
|
|
192
|
+
const trtc = trtcCloud?._trtc;
|
|
193
|
+
trtc?.callExperimentalAPI('pauseRemotePlayer', { userId: '*' });
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
isPlaying.value = false;
|
|
197
|
+
console.log('Video playback paused');
|
|
198
|
+
return true;
|
|
199
|
+
}, 'Pause playback', false);
|
|
204
200
|
|
|
205
201
|
/**
|
|
206
202
|
* Handle orientation change
|
|
@@ -226,7 +222,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
226
222
|
newOrientation,
|
|
227
223
|
deviceType,
|
|
228
224
|
isLandscapeStream: isLandscapeStream.value,
|
|
229
|
-
isFullscreen: isFullscreen.value
|
|
225
|
+
isFullscreen: isFullscreen.value,
|
|
230
226
|
});
|
|
231
227
|
|
|
232
228
|
// Smart adjustment of landscape styles
|
|
@@ -236,193 +232,186 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
236
232
|
/**
|
|
237
233
|
* Fullscreen control methods
|
|
238
234
|
*/
|
|
239
|
-
const requestFullscreen = async (): Promise<FullscreenResult> => {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const validation = DOMElementGetter.validateElements(elements);
|
|
243
|
-
|
|
244
|
-
if (!validation.isValid) {
|
|
245
|
-
throw new Error(`Missing required DOM elements: ${validation.missingElements.join(', ')}`);
|
|
246
|
-
}
|
|
235
|
+
const requestFullscreen = async (): Promise<FullscreenResult> => withErrorHandling(async () => {
|
|
236
|
+
const elements = DOMElementGetter.getAllElements();
|
|
237
|
+
const validation = DOMElementGetter.validateElements(elements);
|
|
247
238
|
|
|
248
|
-
|
|
249
|
-
|
|
239
|
+
if (!validation.isValid) {
|
|
240
|
+
throw new Error(`Missing required DOM elements: ${validation.missingElements.join(', ')}`);
|
|
241
|
+
}
|
|
250
242
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
currentOrientation,
|
|
254
|
-
streamType: isLandscapeStream.value ? 'landscape stream' : isPortraitStream.value ? 'portrait stream' : 'unknown',
|
|
255
|
-
shouldRotate: shouldRotateToLandscape,
|
|
256
|
-
reason: shouldRotateToLandscape ? 'Mobile device in portrait with landscape stream' :
|
|
257
|
-
currentOrientation === 'landscape' ? 'Already in landscape orientation' :
|
|
258
|
-
!isLandscapeStream.value ? 'Not a landscape stream' :
|
|
259
|
-
'Desktop device or other reason'
|
|
260
|
-
});
|
|
243
|
+
const currentOrientation = getCurrentOrientation();
|
|
244
|
+
const shouldRotateToLandscape = shouldRotateToLandscapeForFullscreen(deviceType, isLandscapeStream.value);
|
|
261
245
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
276
|
-
isLandscapeStyleMode.value = result.shouldRotateToLandscape;
|
|
277
|
-
return result;
|
|
278
|
-
}, 'Request fullscreen', { success: false, mode: FullscreenMode.CSS_SIMULATED, shouldRotateToLandscape: false });
|
|
279
|
-
};
|
|
246
|
+
console.log('Request fullscreen:', {
|
|
247
|
+
deviceType,
|
|
248
|
+
currentOrientation,
|
|
249
|
+
streamType: isLandscapeStream.value ? 'landscape stream' : isPortraitStream.value ? 'portrait stream' : 'unknown',
|
|
250
|
+
shouldRotate: shouldRotateToLandscape,
|
|
251
|
+
reason: shouldRotateToLandscape
|
|
252
|
+
? 'Mobile device in portrait with landscape stream'
|
|
253
|
+
: currentOrientation === 'landscape'
|
|
254
|
+
? 'Already in landscape orientation'
|
|
255
|
+
: !isLandscapeStream.value
|
|
256
|
+
? 'Not a landscape stream'
|
|
257
|
+
: 'Desktop device or other reason',
|
|
258
|
+
});
|
|
280
259
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
260
|
+
const result: FullscreenResult = await FullscreenManager.requestFullscreen(
|
|
261
|
+
elements.container!,
|
|
262
|
+
elements.view!,
|
|
263
|
+
deviceType,
|
|
264
|
+
isPortraitStream.value,
|
|
265
|
+
shouldRotateToLandscape,
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
if (result.success) {
|
|
269
|
+
isFullscreen.value = true;
|
|
270
|
+
console.log(`Fullscreen request successful (${result.mode})`);
|
|
271
|
+
} else {
|
|
272
|
+
console.error('Fullscreen request failed:', result.error);
|
|
273
|
+
}
|
|
274
|
+
isLandscapeStyleMode.value = result.shouldRotateToLandscape;
|
|
275
|
+
return result;
|
|
276
|
+
}, 'Request fullscreen', { success: false, mode: FullscreenMode.CSS_SIMULATED, shouldRotateToLandscape: false });
|
|
287
277
|
|
|
288
|
-
|
|
289
|
-
|
|
278
|
+
const exitFullscreen = async (): Promise<FullscreenResult> => withErrorHandling(async () => {
|
|
279
|
+
const elements = DOMElementGetter.getAllElements();
|
|
280
|
+
if (!elements.view) {
|
|
281
|
+
throw new Error('live-core-view element not found');
|
|
282
|
+
}
|
|
290
283
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
currentOrientation,
|
|
294
|
-
streamType: isLandscapeStream.value ? 'landscape stream' : isPortraitStream.value ? 'portrait stream' : 'unknown',
|
|
295
|
-
hadLandscapeRotation,
|
|
296
|
-
reason: hadLandscapeRotation ? 'Mobile device with landscape stream in landscape mode' :
|
|
297
|
-
currentOrientation === 'portrait' ? 'Already in portrait orientation' :
|
|
298
|
-
!isLandscapeStream.value ? 'Not a landscape stream' :
|
|
299
|
-
'Desktop device or other reason'
|
|
300
|
-
});
|
|
284
|
+
const currentOrientation = getCurrentOrientation();
|
|
285
|
+
const hadLandscapeRotation = hadLandscapeRotationToUndo(deviceType, isLandscapeStream.value);
|
|
301
286
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
287
|
+
console.log('Exit fullscreen:', {
|
|
288
|
+
deviceType,
|
|
289
|
+
currentOrientation,
|
|
290
|
+
streamType: isLandscapeStream.value ? 'landscape stream' : isPortraitStream.value ? 'portrait stream' : 'unknown',
|
|
291
|
+
hadLandscapeRotation,
|
|
292
|
+
reason: hadLandscapeRotation
|
|
293
|
+
? 'Mobile device with landscape stream in landscape mode'
|
|
294
|
+
: currentOrientation === 'portrait'
|
|
295
|
+
? 'Already in portrait orientation'
|
|
296
|
+
: !isLandscapeStream.value
|
|
297
|
+
? 'Not a landscape stream'
|
|
298
|
+
: 'Desktop device or other reason',
|
|
299
|
+
});
|
|
307
300
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
301
|
+
const result: FullscreenResult = await FullscreenManager.exitFullscreen(
|
|
302
|
+
elements.view,
|
|
303
|
+
deviceType,
|
|
304
|
+
hadLandscapeRotation,
|
|
305
|
+
);
|
|
313
306
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
307
|
+
// For standard fullscreen, state is updated by event listeners
|
|
308
|
+
// For CSS simulated fullscreen, update state directly
|
|
309
|
+
if (result.mode === FullscreenMode.CSS_SIMULATED) {
|
|
310
|
+
isFullscreen.value = false;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (result.success) {
|
|
314
|
+
console.log(`Fullscreen exit successful (${result.mode})`);
|
|
315
|
+
} else {
|
|
316
|
+
console.error('Fullscreen exit failed:', result.error);
|
|
317
|
+
}
|
|
318
|
+
isLandscapeStyleMode.value = false;
|
|
319
|
+
return result;
|
|
320
|
+
}, 'Exit fullscreen', { success: false, mode: FullscreenMode.CSS_SIMULATED, shouldRotateToLandscape: false });
|
|
323
321
|
|
|
324
322
|
/**
|
|
325
323
|
* Picture-in-picture control methods
|
|
326
324
|
*/
|
|
327
|
-
const requestPictureInPicture = async (): Promise<boolean> => {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
325
|
+
const requestPictureInPicture = async (): Promise<boolean> => withErrorHandling(async () => {
|
|
326
|
+
const video = DOMElementGetter.getVideoElement();
|
|
327
|
+
if (!video) {
|
|
328
|
+
throw new Error('Video element not found');
|
|
329
|
+
}
|
|
333
330
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
331
|
+
if (!video.requestPictureInPicture) {
|
|
332
|
+
throw new Error('Picture-in-picture not supported in current environment');
|
|
333
|
+
}
|
|
337
334
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
console.log('Picture-in-picture request successful');
|
|
343
|
-
return true;
|
|
344
|
-
}, 'Request picture-in-picture', false);
|
|
345
|
-
};
|
|
335
|
+
// Ensure event listeners are set
|
|
336
|
+
setupVideoEventListeners();
|
|
337
|
+
await video.requestPictureInPicture();
|
|
346
338
|
|
|
347
|
-
|
|
348
|
-
return
|
|
349
|
-
|
|
350
|
-
throw new Error('Exit picture-in-picture not supported in current environment');
|
|
351
|
-
}
|
|
339
|
+
console.log('Picture-in-picture request successful');
|
|
340
|
+
return true;
|
|
341
|
+
}, 'Request picture-in-picture', false);
|
|
352
342
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
|
|
343
|
+
const exitPictureInPicture = async (): Promise<boolean> => withErrorHandling(async () => {
|
|
344
|
+
if (!document.exitPictureInPicture) {
|
|
345
|
+
throw new Error('Exit picture-in-picture not supported in current environment');
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
await document.exitPictureInPicture();
|
|
349
|
+
console.log('Picture-in-picture exit successful');
|
|
350
|
+
return true;
|
|
351
|
+
}, 'Exit picture-in-picture', false);
|
|
358
352
|
|
|
359
353
|
/**
|
|
360
354
|
* Resolution control methods
|
|
361
355
|
*/
|
|
362
|
-
const switchResolution = async (resolution: Resolution): Promise<boolean> => {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
356
|
+
const switchResolution = async (resolution: Resolution): Promise<boolean> => withErrorHandling(async () => {
|
|
357
|
+
if (!roomEngine.instance) {
|
|
358
|
+
throw new Error('Room engine instance not available');
|
|
359
|
+
}
|
|
360
|
+
await roomEngine.instance.callExperimentalAPI(
|
|
361
|
+
JSON.stringify({
|
|
362
|
+
api: 'switchPlaybackQuality',
|
|
363
|
+
params: {
|
|
364
|
+
quality: resolution,
|
|
365
|
+
autoSwitch: false,
|
|
366
|
+
},
|
|
367
|
+
}),
|
|
368
|
+
);
|
|
369
|
+
if (!isPlaying.value) {
|
|
370
|
+
isPlaying.value = true;
|
|
371
|
+
}
|
|
372
|
+
currentResolution.value = resolution;
|
|
373
|
+
console.log(`Resolution switched to: ${resolution}`);
|
|
374
|
+
return true;
|
|
375
|
+
}, 'Switch resolution', false);
|
|
376
|
+
|
|
377
|
+
const getResolutionList = async (roomId: string): Promise<Resolution[]> => withErrorHandling(async () => {
|
|
378
|
+
if (!roomEngine.instance) {
|
|
379
|
+
throw new Error('Room engine instance not available');
|
|
380
|
+
}
|
|
384
381
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
api: 'queryPlaybackQualityList',
|
|
394
|
-
params: {
|
|
395
|
-
roomId: roomId,
|
|
396
|
-
},
|
|
397
|
-
}),
|
|
398
|
-
);
|
|
399
|
-
|
|
400
|
-
console.log(`Retrieved resolution list for room ${roomId}:`, resolutions);
|
|
401
|
-
return (resolutions || []) as Resolution[];
|
|
402
|
-
}, 'Get resolution list', []);
|
|
403
|
-
};
|
|
382
|
+
const resolutions = await roomEngine.instance.callExperimentalAPI(
|
|
383
|
+
JSON.stringify({
|
|
384
|
+
api: 'queryPlaybackQualityList',
|
|
385
|
+
params: {
|
|
386
|
+
roomId,
|
|
387
|
+
},
|
|
388
|
+
}),
|
|
389
|
+
);
|
|
404
390
|
|
|
391
|
+
console.log(`Retrieved resolution list for room ${roomId}:`, resolutions);
|
|
392
|
+
return (resolutions || []) as Resolution[];
|
|
393
|
+
}, 'Get resolution list', []);
|
|
405
394
|
|
|
406
|
-
const initializeResolution = async (roomId: string, applyResolution
|
|
395
|
+
const initializeResolution = async (roomId: string, applyResolution = true): Promise<void> => {
|
|
407
396
|
try {
|
|
408
397
|
// Check if resolution has been initialized for this room
|
|
409
398
|
const initializedKey = `${RESOLUTION_INITIALIZED_PREFIX}_${roomId}`;
|
|
410
399
|
const hasInitialized = localStorage.getItem(initializedKey) === 'true';
|
|
411
|
-
|
|
400
|
+
|
|
412
401
|
// Get available resolutionList
|
|
413
402
|
const availableResolutions = await getResolutionList(roomId);
|
|
414
403
|
resolutionList.value = availableResolutions;
|
|
415
|
-
|
|
404
|
+
|
|
416
405
|
if (availableResolutions.length === 0) {
|
|
417
406
|
console.warn('No resolutions available for room:', roomId);
|
|
418
407
|
return;
|
|
419
408
|
}
|
|
420
|
-
|
|
409
|
+
|
|
421
410
|
// Always set current resolution if it's not set or if it's not in the available list
|
|
422
411
|
if (!currentResolution.value || !availableResolutions.includes(currentResolution.value)) {
|
|
423
412
|
currentResolution.value = availableResolutions[0];
|
|
424
413
|
}
|
|
425
|
-
|
|
414
|
+
|
|
426
415
|
// Only apply resolution if it hasn't been initialized for this room or explicitly requested
|
|
427
416
|
const shouldApplyResolution = applyResolution && !hasInitialized && currentResolution.value !== undefined;
|
|
428
417
|
if (shouldApplyResolution) {
|
|
@@ -430,9 +419,9 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
430
419
|
// Mark as initialized for this room
|
|
431
420
|
localStorage.setItem(initializedKey, 'true');
|
|
432
421
|
}
|
|
433
|
-
|
|
422
|
+
|
|
434
423
|
console.log(`Resolution initialized for room ${roomId}:`, {
|
|
435
|
-
availableResolutions
|
|
424
|
+
availableResolutions,
|
|
436
425
|
currentResolution: currentResolution.value,
|
|
437
426
|
applied: shouldApplyResolution,
|
|
438
427
|
hasInitialized,
|
|
@@ -445,38 +434,22 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
445
434
|
/**
|
|
446
435
|
* Other control methods
|
|
447
436
|
*/
|
|
448
|
-
const setVolume = async (volume: number): Promise<boolean> => {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
}
|
|
465
|
-
roomEngine.instance?.setAudioPlayoutVolume({ volume: volume * 100 });
|
|
466
|
-
currentVolume.value = volume;
|
|
467
|
-
console.log(`Video volume set to: ${volume}`);
|
|
468
|
-
return true;
|
|
469
|
-
}, 'Set volume', false);
|
|
470
|
-
};
|
|
471
|
-
|
|
472
|
-
const changeFillMode = async (fillMode: FillMode): Promise<boolean> => {
|
|
473
|
-
return withErrorHandling(async () => {
|
|
474
|
-
currentFillMode.value = fillMode;
|
|
475
|
-
console.log(`Fill mode changed to: ${fillMode}`);
|
|
476
|
-
// TODO: Implement actual fill mode logic
|
|
477
|
-
return true;
|
|
478
|
-
}, 'Change fill mode', false);
|
|
479
|
-
};
|
|
437
|
+
const setVolume = async (volume: number): Promise<boolean> => withErrorHandling(async () => {
|
|
438
|
+
if (volume < 0 || volume > 1) {
|
|
439
|
+
throw new Error('Volume value must be between 0-1');
|
|
440
|
+
}
|
|
441
|
+
await roomEngine.instance?.setAudioPlayoutVolume({ volume: volume * 100 });
|
|
442
|
+
currentVolume.value = volume;
|
|
443
|
+
console.log(`Video volume set to: ${volume}`);
|
|
444
|
+
return true;
|
|
445
|
+
}, 'Set volume', false);
|
|
446
|
+
|
|
447
|
+
const changeFillMode = async (fillMode: FillMode): Promise<boolean> => withErrorHandling(async () => {
|
|
448
|
+
currentFillMode.value = fillMode;
|
|
449
|
+
console.log(`Fill mode changed to: ${fillMode}`);
|
|
450
|
+
// TODO: Implement actual fill mode logic
|
|
451
|
+
return true;
|
|
452
|
+
}, 'Change fill mode', false);
|
|
480
453
|
|
|
481
454
|
/**
|
|
482
455
|
* Handle style cleanup when exiting fullscreen
|
|
@@ -492,7 +465,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
492
465
|
console.log('Executing fullscreen exit style cleanup:', {
|
|
493
466
|
deviceType,
|
|
494
467
|
hasLandscapeStream: isLandscapeStream.value,
|
|
495
|
-
currentOrientation: getCurrentOrientation()
|
|
468
|
+
currentOrientation: getCurrentOrientation(),
|
|
496
469
|
});
|
|
497
470
|
|
|
498
471
|
// Remove all fullscreen related styles
|
|
@@ -501,11 +474,11 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
501
474
|
|
|
502
475
|
// If mobile device, try to unlock screen orientation
|
|
503
476
|
if (deviceType !== 'desktop') {
|
|
504
|
-
OrientationManager.unlockOrientation().catch(error => {
|
|
477
|
+
OrientationManager.unlockOrientation().catch((error) => {
|
|
505
478
|
console.warn('Failed to unlock orientation during cleanup:', error);
|
|
506
479
|
});
|
|
507
480
|
}
|
|
508
|
-
|
|
481
|
+
|
|
509
482
|
isLandscapeStyleMode.value = false;
|
|
510
483
|
console.log('Fullscreen exit style cleanup completed');
|
|
511
484
|
} catch (error) {
|
|
@@ -520,13 +493,13 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
520
493
|
const handleFullscreenChange = () => {
|
|
521
494
|
const isCurrentlyFullscreen = !!document.fullscreenElement;
|
|
522
495
|
const wasFullscreen = isFullscreen.value;
|
|
523
|
-
|
|
496
|
+
|
|
524
497
|
console.log('Fullscreen state change:', {
|
|
525
498
|
fullscreenElement: document.fullscreenElement,
|
|
526
499
|
isCurrentlyFullscreen,
|
|
527
500
|
previousValue: wasFullscreen,
|
|
528
501
|
deviceType,
|
|
529
|
-
changeType: isCurrentlyFullscreen ? 'entered' : 'exited'
|
|
502
|
+
changeType: isCurrentlyFullscreen ? 'entered' : 'exited',
|
|
530
503
|
});
|
|
531
504
|
|
|
532
505
|
// Update state
|
|
@@ -563,7 +536,9 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
563
536
|
|
|
564
537
|
const setupVideoEventListeners = (): void => {
|
|
565
538
|
const video = DOMElementGetter.getVideoElement();
|
|
566
|
-
if (!video)
|
|
539
|
+
if (!video) {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
567
542
|
|
|
568
543
|
const handleEnterPictureInPicture = () => {
|
|
569
544
|
console.log('Entered picture-in-picture mode');
|
|
@@ -640,13 +615,12 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
640
615
|
eventManager.addListener('ended', video, 'ended', handleEnded);
|
|
641
616
|
eventManager.addListener('loadstart', video, 'loadstart', handleLoadStart);
|
|
642
617
|
eventManager.addListener('canplay', video, 'canplay', handleCanPlay);
|
|
643
|
-
|
|
618
|
+
|
|
644
619
|
// Add additional state sync events
|
|
645
620
|
eventManager.addListener('seeking', video, 'seeking', handleSeeking);
|
|
646
621
|
eventManager.addListener('seeked', video, 'seeked', handleSeeked);
|
|
647
622
|
eventManager.addListener('timeupdate', video, 'timeupdate', handleTimeUpdate);
|
|
648
623
|
eventManager.addListener('volumechange', video, 'volumechange', handleVolumeChange);
|
|
649
|
-
|
|
650
624
|
};
|
|
651
625
|
|
|
652
626
|
/**
|
|
@@ -654,10 +628,10 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
654
628
|
*/
|
|
655
629
|
const cleanup = (): void => {
|
|
656
630
|
console.log('Cleaning up player control state...');
|
|
657
|
-
|
|
631
|
+
|
|
658
632
|
// Remove orientation listener
|
|
659
633
|
OrientationManager.removeOrientationListener(orientationListenerId);
|
|
660
|
-
|
|
634
|
+
|
|
661
635
|
// Remove all event listeners
|
|
662
636
|
eventManager.removeAllListeners();
|
|
663
637
|
console.log(`Cleaned up ${eventManager.getListenerCount()} event listeners`);
|
|
@@ -666,16 +640,16 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
666
640
|
// Initialize
|
|
667
641
|
setupFullscreenEventListeners();
|
|
668
642
|
setupVideoEventListeners();
|
|
669
|
-
|
|
643
|
+
|
|
670
644
|
// Setup orientation listener for dynamic style adjustment
|
|
671
645
|
OrientationManager.addOrientationListener(orientationListenerId, handleOrientationChange);
|
|
672
|
-
|
|
646
|
+
|
|
673
647
|
// Initial state sync
|
|
674
648
|
syncPlayingState();
|
|
675
649
|
syncVolumeState();
|
|
676
650
|
|
|
677
|
-
watch(
|
|
678
|
-
if(
|
|
651
|
+
watch(() => currentLive.value?.liveId, (liveId) => {
|
|
652
|
+
if (!liveId) {
|
|
679
653
|
exitFullscreen();
|
|
680
654
|
exitPictureInPicture();
|
|
681
655
|
isPlaying.value = true;
|
|
@@ -683,7 +657,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
683
657
|
isPictureInPicture.value = false;
|
|
684
658
|
currentVolume.value = 1.0;
|
|
685
659
|
}
|
|
686
|
-
})
|
|
660
|
+
});
|
|
687
661
|
|
|
688
662
|
// Return interface implementation
|
|
689
663
|
return {
|
|
@@ -694,7 +668,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
694
668
|
isLandscapeStyleMode,
|
|
695
669
|
isPictureInPicture,
|
|
696
670
|
currentVolume,
|
|
697
|
-
|
|
671
|
+
|
|
698
672
|
// Resolution state
|
|
699
673
|
resolutionList,
|
|
700
674
|
currentResolution,
|
|
@@ -711,7 +685,7 @@ export function usePlayerControlState(): PlayerControlState {
|
|
|
711
685
|
initializeResolution,
|
|
712
686
|
setVolume,
|
|
713
687
|
changeFillMode,
|
|
714
|
-
|
|
688
|
+
|
|
715
689
|
// Cleanup
|
|
716
690
|
cleanup,
|
|
717
691
|
};
|