import styles from '@/components/StupWizard/index.module.scss' import ImageUrl from '@/utils/package/ImageUrl'; import {Button, Checkbox, Empty, Input, message, Modal, Popover, Radio, Select, Slider} from 'antd'; import {forwardRef, useEffect, useImperativeHandle, useState} from "react"; import agora from '@/utils/package/agora' import {CloseOutlined, LoadingOutlined, QuestionCircleOutlined} from '@ant-design/icons'; import {storage} from '@/utils'; import path from 'path'; const fs = require('fs').promises; const {exec} = require('child_process'); const StupWizard = forwardRef((props: any, ref: any) => { useImperativeHandle(ref, () => ({ changeModal: () => { if (location.hash.indexOf('/meeting') === -1) { agora.init() } setIsStupWizard(true) } })) const [list, setList] = useState([ { title: '通用', icon: ImageUrl.icon39, iconActive: ImageUrl.icon39Active, active: true, }, { title: '视频', icon: ImageUrl.icon39, iconActive: ImageUrl.icon39Active, active: false, }, { title: '音频', icon: ImageUrl.icon40, iconActive: ImageUrl.icon40Active, active: false, }, { title: '录制', icon: ImageUrl.icon41, iconActive: ImageUrl.icon41Active, active: false, }, { title: '共享文件', icon: ImageUrl.icon42, iconActive: ImageUrl.icon42Active, active: false, } ]) const [isStupWizard, setIsStupWizard] = useState(false); return ( <>
{list.map((row: any, index: number) => { return (
{ const newList = [...list]; newList.forEach(item => item.active = false); newList[index].active = true; setList(newList) agora.stopPlaybackDeviceTest() agora.stopRecordingDeviceTest() }}> {row.title}
) })}
{ if (location.hash.indexOf('/meeting') === -1) { agora.release() } setIsStupWizard(false) }} /> {list[0].active ? : null} {list[1].active ? : null} {list[2].active ? : null} {list[3].active ? : null} {list[4].active ? : null}
) }) const CurrencyComponents = () => { const [optionsValue, setOperationValue] = useState<'hide' | 'quit'>('hide'); const setting = JSON.parse(storage.getItem('setting') as string) useEffect(() => { setOperationValue(setting.closeSetting) }, []); return ( <>
通用
关闭按钮设置 { setting.closeSetting = e.target.value; storage.setItem('setting', JSON.stringify(setting)) setOperationValue(e.target.value) }} style={{flexShrink: 0, margin: '10px 0'}} value={optionsValue}> 退出主程序 不退出程序,最小化到托盘
) } const VideoComponents = () => { const [videoDeviceManager, setVideoDeviceManager] = useState({ list: [], item: null, }); const setting = JSON.parse(storage.getItem('setting') as string) useEffect(() => { getVideoDeviceList() }, []); const getVideoDeviceList = async (): Promise => { const userInfo = JSON.parse(storage.getItem('user') as string) agora.getVideoDeviceManager().then(async (res) => { const {item, list} = res if ((!setting.videoDeviceId && item) || (!(list.find((item: any) => item.deviceId === setting.videoDeviceId)) && item)) { setting.videoDeviceId = item } if (!list.length) { setting.videoDeviceId = '' } storage.setItem('setting', JSON.stringify(setting)) setVideoDeviceManager({ list: list.map((row: any) => { return { value: row.deviceId, label: row.deviceName } }), item: setting.videoDeviceId ? setting.videoDeviceId : item || null, }) if (setting.videoDeviceId && list.length) { await agora.setVideoDeviceManager(setting.videoDeviceId) await agora.startPreview('videoPreview', Number(userInfo.account)) } }) } return ( <>
视频
{ videoDeviceManager.item ?
:
}
摄像头: 解释说明:如未检测到摄像头请插拔后重试 } title="" > { setting.ecordingDeviceId = e; storage.setItem('setting', JSON.stringify(setting)) setAudioDeviceManager({ ...audioDeviceManager, ecordingItem: e }) agora.setRecordingDevice(e) }}/>; {audioDeviceManager.ecordingActive ?
{ agora.stopRecordingDeviceTest() setAudioDeviceManager({ ...audioDeviceManager, playBackActive: false, ecordingActive: false, }) }}>结束
:
{ agora.stopPlaybackDeviceTest() agora.startRecordingDeviceTest(100) setAudioDeviceManager({ ...audioDeviceManager, playBackActive: false, ecordingActive: true, }) }}>测试
}
{audioDeviceManager.ecordingActive ?
: null}
输入音量: { setting.ecordingVolume = e; storage.setItem('setting', JSON.stringify(setting)) await agora.setRecordingDeviceVolume(e) setAudioDeviceManager({ ...audioDeviceManager, ecordingVolume: e, }) }} disabled={!audioDeviceManager.ecordingItem}/>
{ setting.autoEcordingVolume = e.target.checked; storage.setItem('setting', JSON.stringify(setting)) setAudioDeviceManager({ ...audioDeviceManager, autoEcordingVolume: e.target.checked }) }} checked={audioDeviceManager.autoEcordingVolume}>自动调整麦克风音量
扬声器: { setting.recordingFilesPath = e.target.value; storage.setItem('setting', JSON.stringify(setting)) setFilePath(e.target.value) }} />
) } const FileComponents = () => { const [filePath, setFilePath] = useState('') const [isShareSavePath, setIsShareSavePath] = useState(true) const setting = JSON.parse(storage.getItem('setting') as string) useEffect(() => { if (!setting.shareFilesPath) { // 获取安装父目录 const currentDirectory = __dirname; const parentDirectory = path.resolve(currentDirectory, '../../Downloads'); setting.shareFilesPath = parentDirectory setFilePath(setting.shareFilesPath) storage.setItem('setting', JSON.stringify(setting)) } else { setFilePath(setting.shareFilesPath); } setIsShareSavePath(setting.isShareSavePath) window.addEventListener('customStorageChange', handleCustomStorageChange); return () => { window.removeEventListener('customStorageChange', handleCustomStorageChange); }; }, []) const handleCustomStorageChange = (e: any): void => { if (e.key === 'setting') { setFilePath(setting.shareFilesPath) } }; return ( <>
共享文件
文件下载
保存位置 { setting.shareFilesPath = e.target.value; storage.setItem('setting', JSON.stringify(setting)) setFilePath(e.target.value) }} />
{ setting.isShareSavePath = e.target.checked; storage.setItem('setting', JSON.stringify(setting)) setIsShareSavePath(e.target.checked) }} checked={isShareSavePath}>下载前询问每个文件保存位置
) } export default StupWizard