From 29ba3db68e0eac9de6fe12506c54c56ed6aa3e41 Mon Sep 17 00:00:00 2001 From: zackshi Date: Tue, 7 Apr 2026 15:48:33 +0800 Subject: [PATCH] release: ultra-live-electron 5.8.2 --- TUILiveKit.main.js | 11 +- electron-builder.json5 | 19 - main.js | 66 +- package.json | 8 +- scripts/check-dialog-i18n.js | 219 +++ src/TUILiveKit/ChildView.vue | 312 ---- src/TUILiveKit/ConfirmView.vue | 194 --- src/TUILiveKit/MainCoverView.vue | 124 -- src/TUILiveKit/MainView.vue | 1158 ------------ src/TUILiveKit/common/AudioControl.vue | 96 - src/TUILiveKit/common/AudioSettingTab.vue | 261 --- src/TUILiveKit/common/BeautyConfigPanel.vue | 584 ------- src/TUILiveKit/common/DeviceSelect.vue | 113 -- src/TUILiveKit/common/SpeakerControl.vue | 92 - src/TUILiveKit/common/VideoProfile.vue | 72 - src/TUILiveKit/common/VideoSettingTab.vue | 337 ---- src/TUILiveKit/common/base/Badge.vue | 76 - src/TUILiveKit/common/base/ColorPicker.vue | 51 - src/TUILiveKit/common/base/Dialog/Index.vue | 363 ---- src/TUILiveKit/common/base/Dialog/README.md | 142 -- src/TUILiveKit/common/base/Dialog/dialog.ts | 170 -- src/TUILiveKit/common/base/Dialog/example.vue | 153 -- src/TUILiveKit/common/base/Dialog/index.ts | 13 - src/TUILiveKit/common/base/Dialog/type.ts | 36 - src/TUILiveKit/common/base/Option.vue | 76 - src/TUILiveKit/common/base/Select.vue | 224 --- src/TUILiveKit/common/base/Slider.vue | 137 -- src/TUILiveKit/common/base/Switch.vue | 65 - src/TUILiveKit/common/icons/AddIcon.vue | 7 - src/TUILiveKit/common/icons/AddMusicIcon.vue | 5 - .../common/icons/AddShareScreenIcon.vue | 22 - src/TUILiveKit/common/icons/AddVideo.vue | 23 - src/TUILiveKit/common/icons/ArrowDownIcon.vue | 5 - .../common/icons/ArrowDownRotateIcon.vue | 7 - .../common/icons/ArrowSetUpIcon.vue | 5 - .../icons/ArrowStrokeSelectDownIcon.vue | 5 - src/TUILiveKit/common/icons/ArrowUpIcon.vue | 18 - src/TUILiveKit/common/icons/AudioEffIcon.vue | 13 - src/TUILiveKit/common/icons/AudioIcon.vue | 7 - src/TUILiveKit/common/icons/BGMIcon.vue | 11 - src/TUILiveKit/common/icons/BeautyIcon.vue | 13 - src/TUILiveKit/common/icons/BlacklistIcon.vue | 33 - src/TUILiveKit/common/icons/BottomBarIcon.vue | 10 - src/TUILiveKit/common/icons/CameraIcon.vue | 16 - src/TUILiveKit/common/icons/CameraMirror.vue | 7 - .../common/icons/CameraUnmirror.vue | 8 - .../common/icons/CancelMikeIcon.vue | 25 - .../common/icons/ChangeVoiceIcon.vue | 11 - .../ChangeVoiceIcons/ForeignLanguagesIcon.vue | 31 - .../ChangeVoiceIcons/HeavyCurrentIcon.vue | 32 - .../ChangeVoiceIcons/HeavyMachineryIcon.vue | 31 - .../icons/ChangeVoiceIcons/HeavyMetalIcon.vue | 31 - .../icons/ChangeVoiceIcons/InfluenzaIcon.vue | 31 - .../icons/ChangeVoiceIcons/IntangibleIcon.vue | 31 - .../icons/ChangeVoiceIcons/LolitaIcon.vue | 31 - .../icons/ChangeVoiceIcons/NaughtyKidIcon.vue | 31 - .../ChangeVoiceIcons/OriginVoiceIcon.vue | 27 - .../icons/ChangeVoiceIcons/PlumpIcon.vue | 31 - .../ChangeVoiceIcons/TrappedBeastIcon.vue | 31 - .../icons/ChangeVoiceIcons/UncleIcon.vue | 31 - .../common/icons/CloseCameraIcon.vue | 7 - .../common/icons/DeleteMusicIcon.vue | 5 - .../common/icons/DermabrasionBeautyIcon.vue | 10 - src/TUILiveKit/common/icons/DownIcon.vue | 7 - src/TUILiveKit/common/icons/EditIcon.vue | 5 - src/TUILiveKit/common/icons/EmojiIcon.vue | 17 - src/TUILiveKit/common/icons/EndLivingIcon.vue | 5 - src/TUILiveKit/common/icons/ErrorIcon.vue | 5 - .../common/icons/FloridBeautyIcon.vue | 11 - src/TUILiveKit/common/icons/GiftCountIcon.vue | 8 - src/TUILiveKit/common/icons/GiftValueIcon.vue | 8 - .../common/icons/HorizontalScreenIcon.vue | 9 - src/TUILiveKit/common/icons/KickedIcon.vue | 5 - src/TUILiveKit/common/icons/LanguageIcon.vue | 16 + .../common/icons/LayoutSettingIcon.vue | 10 - src/TUILiveKit/common/icons/LinkMicIcon.vue | 13 - src/TUILiveKit/common/icons/MailIcon.vue | 10 - .../common/icons/MediaSourceMute.vue | 6 - .../common/icons/MediaSourceUnmute.vue | 5 - src/TUILiveKit/common/icons/MicMoreIcon.vue | 7 - src/TUILiveKit/common/icons/MicOnIcon.vue | 6 - .../common/icons/MicropositionIcon.vue | 7 - src/TUILiveKit/common/icons/MovieIcon.vue | 16 - src/TUILiveKit/common/icons/MusicIcon.vue | 14 - src/TUILiveKit/common/icons/MusicListIcon.vue | 5 - .../common/icons/NineSquareGridIcon.vue | 14 - src/TUILiveKit/common/icons/NoBeautyIcon.vue | 7 - src/TUILiveKit/common/icons/PKIcon.vue | 13 - src/TUILiveKit/common/icons/PausePlayIcon.vue | 5 - src/TUILiveKit/common/icons/PlayingIcon.vue | 5 - src/TUILiveKit/common/icons/PointIcon.vue | 11 - src/TUILiveKit/common/icons/RecordIcon.vue | 8 - src/TUILiveKit/common/icons/RefreshIcon.vue | 10 - .../icons/ReverbVoiceIcons/AuditoriumIcon.vue | 28 - .../icons/ReverbVoiceIcons/CellIcon.vue | 24 - .../icons/ReverbVoiceIcons/DeepAudioIcon.vue | 26 - .../common/icons/ReverbVoiceIcons/KTVIcon.vue | 25 - .../icons/ReverbVoiceIcons/MagneticIcon.vue | 24 - .../icons/ReverbVoiceIcons/MelodiousIcon.vue | 27 - .../ReverbVoiceIcons/MetallicAudioIcon.vue | 32 - .../icons/ReverbVoiceIcons/NoEffectIcon.vue | 28 - .../ReverbVoiceIcons/RecordingRoomIcon.vue | 22 - .../icons/ReverbVoiceIcons/ResonantIcon.vue | 28 - .../icons/ReverbVoiceIcons/VacantIcon.vue | 24 - src/TUILiveKit/common/icons/SeatIcon.vue | 9 - src/TUILiveKit/common/icons/SelectedIcon.vue | 5 - .../common/icons/SequentialPlayIcon.vue | 10 - src/TUILiveKit/common/icons/SetIcon.vue | 10 - .../common/icons/ShapeBeautyIcon.vue | 9 - .../common/icons/ShareScreenIcon.vue | 22 - .../common/icons/ShortBeautyIcon.vue | 10 - .../common/icons/SidebarLayoutIcon.vue | 14 - .../common/icons/SingleLoopPlayIcon.vue | 9 - .../common/icons/SlimmingBeautyIcon.vue | 11 - .../common/icons/SoundEffectIcon.vue | 7 - .../common/icons/SpeakerLayoutIcon.vue | 7 - .../common/icons/SpeakerOffIcon.vue | 7 - src/TUILiveKit/common/icons/SpeakerOnIcon.vue | 6 - .../common/icons/StartLivingIcon.vue | 5 - src/TUILiveKit/common/icons/StartPlayIcon.vue | 5 - .../StreamLayoutTemplate/Dynamic1v6Icon.vue | 7 - .../StreamLayoutTemplate/DynamicGrid9Icon.vue | 7 - .../StreamLayoutTemplate/Fixed1v6Icon.vue | 9 - .../StreamLayoutTemplate/FixedGrid9Icon.vue | 14 - .../HorizontalFloatIcon.vue | 7 - src/TUILiveKit/common/icons/SuccessIcon.vue | 12 - .../common/icons/SwitchSourcesMirror.vue | 7 - .../common/icons/SwitchThemeIcon.vue | 15 - src/TUILiveKit/common/icons/TextIcon.vue | 13 - .../common/icons/ThreeColumnIcon.vue | 8 - src/TUILiveKit/common/icons/UnMuteIcon.vue | 6 - src/TUILiveKit/common/icons/UpIcon.vue | 7 - .../common/icons/VShapeBeautyIcon.vue | 9 - .../common/icons/VerticalScreenIcon.vue | 10 - src/TUILiveKit/common/icons/VideoIcon.vue | 9 - .../common/icons/ViewProfileIcon.vue | 5 - src/TUILiveKit/common/icons/VoiceChatIcon.vue | 7 - .../common/icons/VoiceEffectIcon.vue | 9 - src/TUILiveKit/common/icons/VoiceIcon.vue | 9 - .../common/icons/WhitenBeautyIcon.vue | 11 - src/TUILiveKit/communication/index.ts | 645 ------- .../LiveChildView/LiveChildHeader.vue | 54 - .../LiveCoGuest/ApplicationList.vue | 52 - .../LiveChildView/LiveCoGuest/Index.vue | 245 --- .../LiveCoGuest/LayoutConfig.vue | 197 --- .../LiveChildView/LiveCoGuest/SeatList.vue | 54 - .../LiveChildView/LiveMemberControl.vue | 133 -- .../LiveChildView/LiveMoreTool/LiveAddBgm.vue | 365 ---- .../LiveMoreTool/LiveChangeVoice.vue | 207 --- .../LiveMoreTool/LiveCoHost/Index.vue | 287 --- .../LiveCoHost/LiveCoHostBattle.vue | 142 -- .../LiveCoHost/LiveCoHostConnection.vue | 155 -- .../LiveCoHost/LiveCoHostSetting.vue | 279 --- .../LiveMoreTool/LiveReverbVoice.vue | 210 --- .../components/LiveChildView/LiveSetting.vue | 105 -- .../LiveSource/LiveCameraSource.vue | 178 -- .../LiveSource/LiveOnlineVideo.vue | 272 --- .../LiveSource/LivePhoneMirror.vue | 276 --- .../LiveSource/LiveScreenShareSource.vue | 205 --- .../LiveSource/LiveVideoFile.vue | 290 --- .../LiveSource/ScreenWindowPreviewer.vue | 85 - .../LiveChildView/LiveUserProfile.vue | 410 ----- .../components/LiveConfig/Index.vue | 800 --------- .../components/LiveController/Index.vue | 291 ---- .../components/LiveCoverView/StreamCover.vue | 98 +- .../components/LiveHeader/Index.vue | 345 ---- .../components/LiveMember/Index.vue | 90 - .../components/LiveMessage/Index.vue | 245 --- .../components/LiveMessage/MessageText.vue | 43 - .../components/LiveMessage/chatEditor.vue | 141 -- .../components/LiveMessage/emoji.vue | 81 - .../components/LiveMessage/useMessageHook.ts | 70 - src/TUILiveKit/components/LiveMessage/util.ts | 513 ------ .../components/LiveMoreTool/Index.vue | 146 -- .../components/LivePreview/Index.vue | 334 ---- .../components/LivePreview/useContextMenu.ts | 109 -- .../components/LiveSource/LiveImageSource.vue | 194 --- .../components/LiveSource/imageStorage.ts | 3 - .../v2/CoGuestPanel/i18n/en-US/index.ts | 21 - .../components/v2/CoGuestPanel/i18n/index.ts | 4 - .../v2/CoGuestPanel/i18n/zh-CN/index.ts | 21 - .../components/v2/CoGuestPanel/index.ts | 5 +- .../components/v2/LiveCoverUpload.vue | 14 +- .../v2/LiveHeader/LiveTitleSettingDialog.vue | 19 +- .../components/v2/LiveHeader/index.vue | 234 ++- .../components/v2/LivePusherNotification.vue | 73 +- .../LiveScenePanel/MaterialRenameDialog.vue | 1 + .../components/v2/LiveSettingButton.vue | 33 +- src/TUILiveKit/components/v2/LiveURLCopy.vue | 76 + src/TUILiveKit/constants/tuiConstant.ts | 68 +- src/TUILiveKit/hooks/useElectronLogin.ts | 63 +- src/TUILiveKit/hooks/useMediaEventHandler.ts | 120 -- .../hooks/useMediaMixingErrorHandler.ts | 46 +- src/TUILiveKit/hooks/useRoomErrorHandler.ts | 434 ----- src/TUILiveKit/ipc/types.ts | 2 +- src/TUILiveKit/locales/en-US.ts | 533 ------ src/TUILiveKit/locales/index.ts | 80 - src/TUILiveKit/locales/zh-CN.ts | 533 ------ src/TUILiveKit/service/StreamLayoutService.ts | 395 ----- src/TUILiveKit/store/child/audioEffect.ts | 106 -- src/TUILiveKit/store/child/currentSource.ts | 452 ----- src/TUILiveKit/store/main/audioEffect.ts | 106 -- src/TUILiveKit/store/main/basic.ts | 136 -- src/TUILiveKit/store/main/chat.ts | 89 - src/TUILiveKit/store/main/device.ts | 107 -- src/TUILiveKit/store/main/mediaSources.ts | 838 --------- src/TUILiveKit/store/main/room.ts | 1174 ------------- src/TUILiveKit/types.ts | 2 +- src/TUILiveKit/utils/common.ts | 55 +- src/TUILiveKit/utils/utils.ts | 42 + src/api/upload.ts | 5 +- src/assets/verify-code.svg | 6 - src/i18n/en-US/index.ts | 531 +++++- src/i18n/index.ts | 11 +- src/i18n/ja-JP/index.ts | 1105 ++++++++++++ src/i18n/ko-KR/index.ts | 1550 +++++++++++++++++ src/i18n/sync.ts | 57 + src/i18n/zh-CN/index.ts | 523 +++++- src/i18n/zh-TW/index.ts | 1105 ++++++++++++ src/icons/add-circle.svg | 4 - src/icons/arrow.svg | 3 - src/icons/co-guest-icon.svg | 5 - src/icons/co-host-icon.svg | 11 - src/icons/editor-icon.svg | 3 - src/icons/layout.svg | 5 - src/icons/live-ended.svg | 9 - src/icons/mirror.svg | 7 - src/icons/start-live.svg | 14 - src/main.ts | 21 +- src/router/index.ts | 36 +- src/views/Login/Index.vue | 10 +- src/views/Login/IndexToC.vue | 8 +- src/views/Login/PasswordForm.vue | 4 +- src/views/Login/SecretKeyForm.vue | 4 +- src/views/Login/UserSigForm.vue | 4 +- src/views/TUILiveKitChild.vue | 16 - src/views/TUILiveKitCover.vue | 17 - src/views/TUILiveKitCoverV2.vue | 5 +- src/views/TUILiveKitMacV2.vue | 100 +- src/views/TUILiveKitMain.vue | 148 -- src/views/TUILiveKitMainV2.vue | 100 +- upload-server/.gitignore | 1 + upload-server/README.md | 23 + upload-server/package.json | 4 +- upload-server/src/config/index.js | 2 +- upload-server/src/routes/uploadRouter.js | 75 +- 246 files changed, 6041 insertions(+), 20419 deletions(-) create mode 100644 scripts/check-dialog-i18n.js delete mode 100644 src/TUILiveKit/ChildView.vue delete mode 100644 src/TUILiveKit/ConfirmView.vue delete mode 100644 src/TUILiveKit/MainCoverView.vue delete mode 100644 src/TUILiveKit/MainView.vue delete mode 100644 src/TUILiveKit/common/AudioControl.vue delete mode 100644 src/TUILiveKit/common/AudioSettingTab.vue delete mode 100644 src/TUILiveKit/common/BeautyConfigPanel.vue delete mode 100644 src/TUILiveKit/common/DeviceSelect.vue delete mode 100644 src/TUILiveKit/common/SpeakerControl.vue delete mode 100644 src/TUILiveKit/common/VideoProfile.vue delete mode 100644 src/TUILiveKit/common/VideoSettingTab.vue delete mode 100644 src/TUILiveKit/common/base/Badge.vue delete mode 100644 src/TUILiveKit/common/base/ColorPicker.vue delete mode 100644 src/TUILiveKit/common/base/Dialog/Index.vue delete mode 100644 src/TUILiveKit/common/base/Dialog/README.md delete mode 100644 src/TUILiveKit/common/base/Dialog/dialog.ts delete mode 100644 src/TUILiveKit/common/base/Dialog/example.vue delete mode 100644 src/TUILiveKit/common/base/Dialog/index.ts delete mode 100644 src/TUILiveKit/common/base/Dialog/type.ts delete mode 100644 src/TUILiveKit/common/base/Option.vue delete mode 100644 src/TUILiveKit/common/base/Select.vue delete mode 100644 src/TUILiveKit/common/base/Slider.vue delete mode 100644 src/TUILiveKit/common/base/Switch.vue delete mode 100644 src/TUILiveKit/common/icons/AddIcon.vue delete mode 100644 src/TUILiveKit/common/icons/AddMusicIcon.vue delete mode 100644 src/TUILiveKit/common/icons/AddShareScreenIcon.vue delete mode 100644 src/TUILiveKit/common/icons/AddVideo.vue delete mode 100644 src/TUILiveKit/common/icons/ArrowDownIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ArrowDownRotateIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ArrowSetUpIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ArrowStrokeSelectDownIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ArrowUpIcon.vue delete mode 100644 src/TUILiveKit/common/icons/AudioEffIcon.vue delete mode 100644 src/TUILiveKit/common/icons/AudioIcon.vue delete mode 100644 src/TUILiveKit/common/icons/BGMIcon.vue delete mode 100644 src/TUILiveKit/common/icons/BeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/BlacklistIcon.vue delete mode 100644 src/TUILiveKit/common/icons/BottomBarIcon.vue delete mode 100644 src/TUILiveKit/common/icons/CameraIcon.vue delete mode 100644 src/TUILiveKit/common/icons/CameraMirror.vue delete mode 100644 src/TUILiveKit/common/icons/CameraUnmirror.vue delete mode 100644 src/TUILiveKit/common/icons/CancelMikeIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/ForeignLanguagesIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/HeavyCurrentIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/HeavyMachineryIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/HeavyMetalIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/InfluenzaIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/IntangibleIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/LolitaIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/NaughtyKidIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/OriginVoiceIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/PlumpIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/TrappedBeastIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ChangeVoiceIcons/UncleIcon.vue delete mode 100644 src/TUILiveKit/common/icons/CloseCameraIcon.vue delete mode 100644 src/TUILiveKit/common/icons/DeleteMusicIcon.vue delete mode 100644 src/TUILiveKit/common/icons/DermabrasionBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/DownIcon.vue delete mode 100644 src/TUILiveKit/common/icons/EditIcon.vue delete mode 100644 src/TUILiveKit/common/icons/EmojiIcon.vue delete mode 100644 src/TUILiveKit/common/icons/EndLivingIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ErrorIcon.vue delete mode 100644 src/TUILiveKit/common/icons/FloridBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/GiftCountIcon.vue delete mode 100644 src/TUILiveKit/common/icons/GiftValueIcon.vue delete mode 100644 src/TUILiveKit/common/icons/HorizontalScreenIcon.vue delete mode 100644 src/TUILiveKit/common/icons/KickedIcon.vue create mode 100644 src/TUILiveKit/common/icons/LanguageIcon.vue delete mode 100644 src/TUILiveKit/common/icons/LayoutSettingIcon.vue delete mode 100644 src/TUILiveKit/common/icons/LinkMicIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MailIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MediaSourceMute.vue delete mode 100644 src/TUILiveKit/common/icons/MediaSourceUnmute.vue delete mode 100644 src/TUILiveKit/common/icons/MicMoreIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MicOnIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MicropositionIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MovieIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MusicIcon.vue delete mode 100644 src/TUILiveKit/common/icons/MusicListIcon.vue delete mode 100644 src/TUILiveKit/common/icons/NineSquareGridIcon.vue delete mode 100644 src/TUILiveKit/common/icons/NoBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/PKIcon.vue delete mode 100644 src/TUILiveKit/common/icons/PausePlayIcon.vue delete mode 100644 src/TUILiveKit/common/icons/PlayingIcon.vue delete mode 100644 src/TUILiveKit/common/icons/PointIcon.vue delete mode 100644 src/TUILiveKit/common/icons/RecordIcon.vue delete mode 100644 src/TUILiveKit/common/icons/RefreshIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/AuditoriumIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/CellIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/DeepAudioIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/KTVIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/MagneticIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/MelodiousIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/MetallicAudioIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/NoEffectIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/RecordingRoomIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/ResonantIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ReverbVoiceIcons/VacantIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SeatIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SelectedIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SequentialPlayIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SetIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ShapeBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ShareScreenIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ShortBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SidebarLayoutIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SingleLoopPlayIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SlimmingBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SoundEffectIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SpeakerLayoutIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SpeakerOffIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SpeakerOnIcon.vue delete mode 100644 src/TUILiveKit/common/icons/StartLivingIcon.vue delete mode 100644 src/TUILiveKit/common/icons/StartPlayIcon.vue delete mode 100644 src/TUILiveKit/common/icons/StreamLayoutTemplate/Dynamic1v6Icon.vue delete mode 100644 src/TUILiveKit/common/icons/StreamLayoutTemplate/DynamicGrid9Icon.vue delete mode 100644 src/TUILiveKit/common/icons/StreamLayoutTemplate/Fixed1v6Icon.vue delete mode 100644 src/TUILiveKit/common/icons/StreamLayoutTemplate/FixedGrid9Icon.vue delete mode 100644 src/TUILiveKit/common/icons/StreamLayoutTemplate/HorizontalFloatIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SuccessIcon.vue delete mode 100644 src/TUILiveKit/common/icons/SwitchSourcesMirror.vue delete mode 100644 src/TUILiveKit/common/icons/SwitchThemeIcon.vue delete mode 100644 src/TUILiveKit/common/icons/TextIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ThreeColumnIcon.vue delete mode 100644 src/TUILiveKit/common/icons/UnMuteIcon.vue delete mode 100644 src/TUILiveKit/common/icons/UpIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VShapeBeautyIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VerticalScreenIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VideoIcon.vue delete mode 100644 src/TUILiveKit/common/icons/ViewProfileIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VoiceChatIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VoiceEffectIcon.vue delete mode 100644 src/TUILiveKit/common/icons/VoiceIcon.vue delete mode 100644 src/TUILiveKit/common/icons/WhitenBeautyIcon.vue delete mode 100644 src/TUILiveKit/communication/index.ts delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveChildHeader.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveCoGuest/ApplicationList.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveCoGuest/Index.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveCoGuest/LayoutConfig.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveCoGuest/SeatList.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMemberControl.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveAddBgm.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveChangeVoice.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveCoHost/Index.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveCoHost/LiveCoHostBattle.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveCoHost/LiveCoHostConnection.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveCoHost/LiveCoHostSetting.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveMoreTool/LiveReverbVoice.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSetting.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/LiveCameraSource.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/LiveOnlineVideo.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/LivePhoneMirror.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/LiveScreenShareSource.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/LiveVideoFile.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveSource/ScreenWindowPreviewer.vue delete mode 100644 src/TUILiveKit/components/LiveChildView/LiveUserProfile.vue delete mode 100644 src/TUILiveKit/components/LiveConfig/Index.vue delete mode 100644 src/TUILiveKit/components/LiveController/Index.vue delete mode 100644 src/TUILiveKit/components/LiveHeader/Index.vue delete mode 100644 src/TUILiveKit/components/LiveMember/Index.vue delete mode 100644 src/TUILiveKit/components/LiveMessage/Index.vue delete mode 100644 src/TUILiveKit/components/LiveMessage/MessageText.vue delete mode 100644 src/TUILiveKit/components/LiveMessage/chatEditor.vue delete mode 100644 src/TUILiveKit/components/LiveMessage/emoji.vue delete mode 100644 src/TUILiveKit/components/LiveMessage/useMessageHook.ts delete mode 100644 src/TUILiveKit/components/LiveMessage/util.ts delete mode 100644 src/TUILiveKit/components/LiveMoreTool/Index.vue delete mode 100644 src/TUILiveKit/components/LivePreview/Index.vue delete mode 100644 src/TUILiveKit/components/LivePreview/useContextMenu.ts delete mode 100644 src/TUILiveKit/components/LiveSource/LiveImageSource.vue delete mode 100644 src/TUILiveKit/components/LiveSource/imageStorage.ts delete mode 100644 src/TUILiveKit/components/v2/CoGuestPanel/i18n/en-US/index.ts delete mode 100644 src/TUILiveKit/components/v2/CoGuestPanel/i18n/index.ts delete mode 100644 src/TUILiveKit/components/v2/CoGuestPanel/i18n/zh-CN/index.ts create mode 100644 src/TUILiveKit/components/v2/LiveURLCopy.vue delete mode 100644 src/TUILiveKit/hooks/useMediaEventHandler.ts delete mode 100644 src/TUILiveKit/hooks/useRoomErrorHandler.ts delete mode 100644 src/TUILiveKit/locales/en-US.ts delete mode 100644 src/TUILiveKit/locales/index.ts delete mode 100644 src/TUILiveKit/locales/zh-CN.ts delete mode 100644 src/TUILiveKit/service/StreamLayoutService.ts delete mode 100644 src/TUILiveKit/store/child/audioEffect.ts delete mode 100644 src/TUILiveKit/store/child/currentSource.ts delete mode 100644 src/TUILiveKit/store/main/audioEffect.ts delete mode 100644 src/TUILiveKit/store/main/basic.ts delete mode 100644 src/TUILiveKit/store/main/chat.ts delete mode 100644 src/TUILiveKit/store/main/device.ts delete mode 100644 src/TUILiveKit/store/main/mediaSources.ts delete mode 100644 src/TUILiveKit/store/main/room.ts delete mode 100644 src/assets/verify-code.svg create mode 100644 src/i18n/ja-JP/index.ts create mode 100644 src/i18n/ko-KR/index.ts create mode 100644 src/i18n/sync.ts create mode 100644 src/i18n/zh-TW/index.ts delete mode 100644 src/icons/add-circle.svg delete mode 100644 src/icons/arrow.svg delete mode 100644 src/icons/co-guest-icon.svg delete mode 100644 src/icons/co-host-icon.svg delete mode 100644 src/icons/editor-icon.svg delete mode 100644 src/icons/layout.svg delete mode 100644 src/icons/live-ended.svg delete mode 100644 src/icons/mirror.svg delete mode 100644 src/icons/start-live.svg delete mode 100644 src/views/TUILiveKitChild.vue delete mode 100644 src/views/TUILiveKitCover.vue delete mode 100644 src/views/TUILiveKitMain.vue create mode 100644 upload-server/.gitignore create mode 100644 upload-server/README.md diff --git a/TUILiveKit.main.js b/TUILiveKit.main.js index d02af1f..48a1f8f 100644 --- a/TUILiveKit.main.js +++ b/TUILiveKit.main.js @@ -509,6 +509,9 @@ function bindIPCEvent() { ipcMain.handle('app-path', () => { return app.getAppPath(); }); + ipcMain.handle('get-language', () => { + return language; + }); ipcMain.handle('window-type', (event) => { if (event.sender === windowMap.main?.webContents) { @@ -794,10 +797,8 @@ function bindIPCEvent() { postMessageToWindow(windowMap.confirm, 'port-to-confirm', null, [port]); }); - ipcMain.on('set-language', (event, args) => { - console.log(`${logPrefix}set-language`, args); - language = args; - }); + // Legacy 'set-language' channel removed — language updates now flow through + // the V2 mainProcessHandlers['setLanguage'] via ipcBridge.sendToElectronMain(). ipcMain.on('show-context-menu', (event) => { const template = [ @@ -948,6 +949,7 @@ function bindIPCEvent() { function unbindIPCMainEvent() { ipcMain.removeHandler('app-path'); + ipcMain.removeHandler('get-language'); ipcMain.removeHandler('window-type'); ipcMain.removeAllListeners('window-message'); // V2 IPC message router ipcMain.removeAllListeners('on-minimize-window'); @@ -957,7 +959,6 @@ function unbindIPCMainEvent() { ipcMain.removeAllListeners('close-child'); ipcMain.removeAllListeners('login'); ipcMain.removeAllListeners('port-to-child'); - ipcMain.removeAllListeners('set-language'); ipcMain.removeAllListeners('show-context-menu'); ipcMain.removeAllListeners('start-use-driver-installer'); ipcMain.removeAllListeners('app-quit-confirmed'); diff --git a/electron-builder.json5 b/electron-builder.json5 index c9837bb..7775c8a 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -23,10 +23,6 @@ { "from": "node_modules/trtc-electron-sdk/build/mac-framework/${arch}/", "to": "./Frameworks" - }, - { - "from": "node_modules/trtc-electron-plugin-xmagic/plugin/XMagic/mac/", - "to": "./Resources/app/plugin/XMagic/mac/" } ], "target": ["dmg"], @@ -47,21 +43,6 @@ "**/*" ] }, - { - "from": "node_modules/trtc-electron-plugin-xmagic/plugin/XMagic/win/${arch}/platforms/", - "to": "./resources/platforms", - "filter": ["**/*"], - }, - { - "from": "node_modules/trtc-electron-plugin-xmagic/plugin/XMagic/win/${arch}/", - "to": "./resources/app/plugin/XMagic/win/${arch}/", - "filter": ["**/*"], - }, - { - "from": "node_modules/trtc-electron-plugin-xmagic/plugin/XMagic/win/res/", - "to": "./resources/app/plugin/XMagic/win/res/", - "filter": ["**/*"], - }, ], "target": ["nsis", "zip"], }, diff --git a/main.js b/main.js index 47ee1e1..c797ee3 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ -const { app, ipcMain } = require('electron'); +const { app, ipcMain, globalShortcut, Menu } = require('electron'); const { TUILiveKitMain } = require('./TUILiveKit.main'); function quitApplication() { @@ -15,7 +15,65 @@ ipcMain.on('openTUILiveKit', (event, args) => { TUILiveKitMain.on('closed', quitApplication); }); +function registerDisableRefreshShortcuts() { + const shortcuts = [ + 'CommandOrControl+R', + 'CommandOrControl+Shift+R', + 'F5', + ]; + shortcuts.forEach((shortcut) => { + const ok = globalShortcut.register(shortcut, () => { + console.log(`[main.js]blocked refresh shortcut: ${shortcut}`); + }); + if (!ok) { + console.warn(`[main.js]failed to register shortcut: ${shortcut}`); + } + }); +} + +function setupApplicationMenuWithoutReload() { + const template = []; + + if (process.platform === 'darwin') { + template.push({ + label: app.name, + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' }, + ], + }); + } + + template.push( + { role: 'editMenu' }, + { + label: 'View', + submenu: [ + // Intentionally keep zoom/fullscreen/devtools, but remove reload/forceReload. + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'toggleDevTools' }, + { role: 'togglefullscreen' }, + ], + }, + { role: 'windowMenu' } + ); + + Menu.setApplicationMenu(Menu.buildFromTemplate(template)); +} + app.whenReady().then(() => { + registerDisableRefreshShortcuts(); + setupApplicationMenuWithoutReload(); TUILiveKitMain.open(); }); @@ -25,4 +83,8 @@ app.on('window-all-closed', () => { app.on('activate', () => { TUILiveKitMain.open(); -}); \ No newline at end of file +}); + +app.on('will-quit', () => { + globalShortcut.unregisterAll(); +}); diff --git a/package.json b/package.json index a7e4b8a..86c3ca6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ultra-live-electron", - "version": "5.5.2", + "version": "5.8.2", "description": "Tencent Cloud Living and Streaming Tool for desktop and laptop", "main": "main.js", "author": "Tencent Cloud", @@ -23,9 +23,9 @@ "start:with-upload-server": "concurrently \"npm run serve\" \"npm run upload-server\" \"npm run electron\"" }, "dependencies": { - "@tencentcloud/tuiroom-engine-electron": "~4.0.1", - "@tencentcloud/uikit-base-component-vue3": "1.3.7", - "tuikit-atomicx-vue3-electron": "5.5.2", + "@tencentcloud/tuiroom-engine-electron": "~4.0.2", + "@tencentcloud/uikit-base-component-vue3": "1.4.1", + "tuikit-atomicx-vue3-electron": "5.8.2", "core-js": "^3.36.1", "movable-resizable-js": "^0.2.0", "pinia": "^2.1.7", diff --git a/scripts/check-dialog-i18n.js b/scripts/check-dialog-i18n.js new file mode 100644 index 0000000..488fa3f --- /dev/null +++ b/scripts/check-dialog-i18n.js @@ -0,0 +1,219 @@ +/* eslint-disable no-console */ +const fs = require('node:fs'); +const path = require('node:path'); +const { parse, compileTemplate } = require('vue/compiler-sfc'); + +const projectRoot = path.resolve(__dirname, '..'); +const srcDir = path.join(projectRoot, 'src'); + +function walk(dir) { + if (!fs.existsSync(dir)) { + return []; + } + const entries = fs.readdirSync(dir, { withFileTypes: true }); + const out = []; + entries.forEach((entry) => { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + out.push(...walk(fullPath)); + return; + } + if (entry.isFile() && fullPath.endsWith('.vue')) { + out.push(fullPath); + } + }); + return out; +} + +function walkTemplateNodes(nodeOrNodes, visitor) { + if (!nodeOrNodes) { + return; + } + + if (Array.isArray(nodeOrNodes)) { + nodeOrNodes.forEach((node) => walkTemplateNodes(node, visitor)); + return; + } + + const node = nodeOrNodes; + switch (node.type) { + case 0: // Root + walkTemplateNodes(node.children, visitor); + break; + case 1: // Element + visitor(node); + walkTemplateNodes(node.children, visitor); + break; + case 9: // If + (node.branches || []).forEach((branch) => walkTemplateNodes(branch, visitor)); + break; + case 10: // IfBranch + walkTemplateNodes(node.children, visitor); + break; + case 11: // For + walkTemplateNodes(node.children, visitor); + break; + default: + break; + } +} + +function hasDialogTextProp(dialogNode, names) { + for (const prop of dialogNode.props || []) { + if (prop.type === 6 && names.has(prop.name)) { + return true; + } + + if ( + prop.type === 7 + && prop.name === 'bind' + && prop.arg + && prop.arg.type === 4 + && names.has(prop.arg.content) + ) { + return true; + } + } + return false; +} + +function isFooterSlotTemplate(node) { + for (const prop of node.props || []) { + if (prop.type === 6 && prop.name === 'slot' && prop.value && prop.value.content === 'footer') { + return true; + } + + if ( + prop.type === 7 + && prop.name === 'slot' + && prop.arg + && prop.arg.type === 4 + && prop.arg.content === 'footer' + ) { + return true; + } + } + + return false; +} + +function hasFooterSlot(dialogNode) { + let found = false; + walkTemplateNodes(dialogNode.children || [], (node) => { + if (found) { + return; + } + if (node.tag === 'template' && isFooterSlotTemplate(node)) { + found = true; + } + }); + return found; +} + +function getLineNumberByOffset(source, offset) { + return source.slice(0, offset).split('\n').length; +} + +function isIgnorableSfcParseError(error) { + return String(error).includes('At least one
{{ props.region.seatIndex }} - {{ t('Conn Wait') }} + {{ t('LiveView.WaitingForConnection') }}
@@ -28,10 +23,8 @@ import { ref, computed, defineProps, onMounted, onUnmounted } from 'vue'; import type { Ref } from 'vue'; import { TUIDeviceStatus } from '@tencentcloud/tuiroom-engine-electron'; import { TUIConnectionMode, TUIUserSeatStreamRegion } from '../../types'; -import { useI18n } from '../../locales'; +import { useUIKit } from '@tencentcloud/uikit-base-component-vue3'; import MicOffIcon from '../../common/icons/MicOffIcon.vue'; -import MoreIcon from '../../common/icons/MoreIcon.vue'; -import LiveMemberControl from '../LiveChildView/LiveMemberControl.vue'; import { DEFAULT_USER_AVATAR_URL } from '../../constants/tuiConstant'; import logger from '../../utils/logger'; @@ -42,12 +35,10 @@ type Props = { const logPrefix = '[TUILiveKitStreamCover]'; -const { t } = useI18n(); +const { t } = useUIKit(); const props = defineProps(); const streamCoverRef: Ref = ref(null); -const moreIconRef: Ref = ref(null); -const isMoreMenuVisible: Ref = ref(false); const positonStyle = computed(() => { return { @@ -58,35 +49,6 @@ const positonStyle = computed(() => { }; }); -const openMoreMenu = () => { - isMoreMenuVisible.value = true; -}; - -const closeMoreMenu = () => { - isMoreMenuVisible.value = false; -}; - -const onKickOffSeat = (userId: string) => { - logger.log(`${logPrefix}onKickOffSeat:${userId}`); - window.mainWindowPortInCover?.postMessage({ - key: 'kickOffSeat', - data: { - userId, - } - }); -}; - - -const onKickOutRoom = (userId: string) => { - logger.log(`${logPrefix}onKickOutRoom:${userId}`); - window.mainWindowPortInCover?.postMessage({ - key: 'kickOutRoom', - data: { - userId, - } - }); -}; - // eslint-disable-next-line no-undef let timerId: string | number | NodeJS.Timeout | undefined; const bindMouseEnterLeaveEvent = () => { @@ -106,23 +68,14 @@ const bindMouseEnterLeaveEvent = () => { } }; -const onClickOutMenuSide = (event: MouseEvent) => { - if (moreIconRef.value && moreIconRef.value.contains(event.target as Node)) { - return; - } - closeMoreMenu(); -}; - onMounted(() => { bindMouseEnterLeaveEvent(); - document.addEventListener('click', onClickOutMenuSide, false); }); onUnmounted(() => { if (timerId) { clearTimeout(timerId); } - document.removeEventListener('click', onClickOutMenuSide, false); }); @@ -146,33 +99,6 @@ onUnmounted(() => { } } - &:hover .tui-menu-icon { - display: block; - } - .tui-menu-icon { - display: none; - position: absolute; - top: 0.125rem; - right: 0.125rem; - width: 1.25rem; - height: 1.25rem; - border-radius: 0.25rem; - background-color: $color-cover-pendant-background; - cursor: pointer; - - .tui-more-icon { - transform: rotate(90deg); - } - - &:hover { - background-color: $font-button-text-hover-color; - } - - &:active { - background-color: $font-button-text-active-color; - } - } - .tui-stream-state { position: absolute; left: 0.125rem; @@ -216,24 +142,20 @@ onUnmounted(() => { flex-direction: column; align-items: center; justify-content: center; + text-align: center; color: var(--text-color-secondary); .tui-seat-index { - font-size: 1.25rem; - font-weight: 600; - line-height: 1.5; - color: var(--text-color-primary); + font-size: 1.5rem; + font-weight: 500; } .tui-seat-hint { - font-size: 0.75rem; - line-height: 1.5; - opacity: 0.7; + max-width: 80%; + font-size: 0.875rem; + font-weight: 400; + overflow-wrap: break-word; } } - - .tui-stream-cover-pop-menu { - top: 1.5rem; - } } diff --git a/src/TUILiveKit/components/LiveHeader/Index.vue b/src/TUILiveKit/components/LiveHeader/Index.vue deleted file mode 100644 index cbf0a27..0000000 --- a/src/TUILiveKit/components/LiveHeader/Index.vue +++ /dev/null @@ -1,345 +0,0 @@ - - - - - diff --git a/src/TUILiveKit/components/LiveMember/Index.vue b/src/TUILiveKit/components/LiveMember/Index.vue deleted file mode 100644 index fce271b..0000000 --- a/src/TUILiveKit/components/LiveMember/Index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/src/TUILiveKit/components/LiveMessage/Index.vue b/src/TUILiveKit/components/LiveMessage/Index.vue deleted file mode 100644 index 90a124f..0000000 --- a/src/TUILiveKit/components/LiveMessage/Index.vue +++ /dev/null @@ -1,245 +0,0 @@ - - - diff --git a/src/TUILiveKit/components/LiveMessage/MessageText.vue b/src/TUILiveKit/components/LiveMessage/MessageText.vue deleted file mode 100644 index 8019d24..0000000 --- a/src/TUILiveKit/components/LiveMessage/MessageText.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/src/TUILiveKit/components/LiveMessage/chatEditor.vue b/src/TUILiveKit/components/LiveMessage/chatEditor.vue deleted file mode 100644 index 3764805..0000000 --- a/src/TUILiveKit/components/LiveMessage/chatEditor.vue +++ /dev/null @@ -1,141 +0,0 @@ -