重新打开应用是否自动登录判断优化 #18
15
main.js
15
main.js
|
|
@ -17,7 +17,7 @@ const { autoUpdater, CancellationToken } = require('electron-updater');
|
|||
const cancellationToken = new CancellationToken()
|
||||
app.allowRendererProcessReuse = false;
|
||||
let mainWindow = null;
|
||||
let childWindow = []
|
||||
let childWindow = {}
|
||||
let isMaximized = false;
|
||||
let env;
|
||||
let regKey;
|
||||
|
|
@ -310,18 +310,17 @@ app.on('ready', () => {
|
|||
enableRemoteModule: true,
|
||||
nodeIntegrationInWorker: true,
|
||||
allowMediaDevices: true,
|
||||
// preload: path.join(__dirname, 'preload.js')
|
||||
preload: path.join(__dirname, 'preload.js')
|
||||
},
|
||||
// show: false,
|
||||
// frame: false,
|
||||
// backgroundColor: '#00000000',
|
||||
// transparent: true,
|
||||
show: false,
|
||||
frame: false,
|
||||
backgroundColor: '#00000000',
|
||||
transparent: true,
|
||||
})
|
||||
child.loadURL(config.url)
|
||||
childWindow.push(child)
|
||||
childWindow[key] = child
|
||||
child.once('ready-to-show', () => {
|
||||
child.show()
|
||||
console.log(config);
|
||||
child.setSize(config.width, config.height)
|
||||
})
|
||||
});
|
||||
|
|
|
|||
226
src/App.tsx
226
src/App.tsx
|
|
@ -18,6 +18,7 @@ import { agora } from "@/utils/package/agora";
|
|||
import QuitTips from "@/components/QuitTips";
|
||||
import { GetLeave } from "@/api/Meeting";
|
||||
import path from "path";
|
||||
import ShareScreenWindow from "./page/ShareScreenWindow";
|
||||
const fs = require('fs').promises;
|
||||
const { exec } = require('child_process');
|
||||
const App: React.FC = () => {
|
||||
|
|
@ -32,122 +33,124 @@ const App: React.FC = () => {
|
|||
});
|
||||
const [spinning, setSpinning] = useState(false);
|
||||
const [isState, setIsState] = useState(true);
|
||||
useEffect(() => {
|
||||
let userInfo = JSON.parse(storage.getItem('user') as string)
|
||||
let loginInfo = JSON.parse(storage.getItem('login') as string)
|
||||
if (userInfo && !userInfo.isAnonymous) {
|
||||
if (loginInfo && loginInfo.isAutoLogin) {
|
||||
PostLogin({
|
||||
account: loginInfo.account,
|
||||
pwd: CryptoJS.MD5(loginInfo.password).toString(CryptoJS.enc.Hex)
|
||||
}).then(async (res) => {
|
||||
if (res.code === 200) {
|
||||
storage.setItem('user', JSON.stringify(res.data))
|
||||
storage.setItem('userLogin', true)
|
||||
toSrc('/home')
|
||||
await startSignalr()
|
||||
} else {
|
||||
toSrc('/login')
|
||||
}
|
||||
})
|
||||
if (location.hash.indexOf('shareScreenWindow') == -1) {
|
||||
useEffect(() => {
|
||||
let userInfo = JSON.parse(storage.getItem('user') as string)
|
||||
let loginInfo = JSON.parse(storage.getItem('login') as string)
|
||||
if (userInfo && !userInfo.isAnonymous) {
|
||||
if (loginInfo && loginInfo.isAutoLogin) {
|
||||
PostLogin({
|
||||
account: loginInfo.account,
|
||||
pwd: CryptoJS.MD5(loginInfo.password).toString(CryptoJS.enc.Hex)
|
||||
}).then(async (res) => {
|
||||
if (res.code === 200) {
|
||||
storage.setItem('user', JSON.stringify(res.data))
|
||||
storage.setItem('userLogin', true)
|
||||
toSrc('/home')
|
||||
await startSignalr()
|
||||
} else {
|
||||
toSrc('/login')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
toSrc('/login')
|
||||
}
|
||||
} else {
|
||||
toSrc('/login')
|
||||
}
|
||||
} else {
|
||||
toSrc('/login')
|
||||
}
|
||||
window.addEventListener('resize', handleResize);
|
||||
const originalSetItem = window.localStorage.setItem;
|
||||
window.localStorage.setItem = function (key, value) {
|
||||
originalSetItem.call(this, key, value);
|
||||
const event = new Event('customStorageChange') as any;
|
||||
event.key = key
|
||||
event.value = value
|
||||
window.dispatchEvent(event);
|
||||
};
|
||||
window.addEventListener('customStorageChange', handleCustomStorageChange);
|
||||
return () => {
|
||||
window.removeEventListener('resize', handleResize);
|
||||
window.removeEventListener('customStorageChange', handleCustomStorageChange);
|
||||
};
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
window.electron.downFile(async (_e: any, data: any) => {
|
||||
const response = await fetch(data.filePath);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
const buffer = Buffer.from(arrayBuffer);
|
||||
fs.writeFile(`${data.downFilePaths}${data.fileName}`, buffer, {});
|
||||
message.success(`下载成功!文件已保存至:${data.downFilePaths}`)
|
||||
await fs.access(data.downFilePaths, fs.constants.F_OK);
|
||||
if (process.platform === 'win32') {
|
||||
exec(`explorer "${data.downFilePaths}"`);
|
||||
} else if (process.platform === 'darwin') {
|
||||
exec(`open "${data.downFilePaths}"`);
|
||||
}
|
||||
})
|
||||
window.electron.onFilePath(async (_e: any, filePath: string, key: string) => {
|
||||
const setting = await JSON.parse(storage.getItem('setting') as string)
|
||||
if (key === 'recordingFilesPath') {
|
||||
setting.recordingFilesPath = filePath
|
||||
} else {
|
||||
setting.shareFilesPath = filePath
|
||||
}
|
||||
storage.setItem('setting', JSON.stringify(setting))
|
||||
})
|
||||
window.electron.quitAndInstall(async (_e: any) => {
|
||||
leaveChannel()
|
||||
})
|
||||
}, [])
|
||||
useEffect(() => {
|
||||
window.electron.onUpdate((_e: any, data: any) => {
|
||||
if (location.hash.indexOf('/meeting') === -1) {
|
||||
updateModalRef.current.changeModal(data)
|
||||
}
|
||||
})
|
||||
if (!storage.getItem('setting')) {
|
||||
storage.setItem('setting', JSON.stringify({
|
||||
videoDeviceId: '', //摄像头id
|
||||
ecordingDeviceId: "", //输入设备id
|
||||
playBackDeviceId: "", //输出设备id
|
||||
ecordingVolume: '', //输入音量
|
||||
playBackVolume: '', //输出音量
|
||||
autoEcordingVolume: true, //是否自动调整麦克风音量
|
||||
recordingFilesPath: path.resolve(__dirname, '../../Downloads') + '\\', //本地录制保存路径
|
||||
shareFilesPath: path.resolve(__dirname, '../../Downloads/') + '\\', //共享文件保存路径
|
||||
isShareSavePath: true, //是否下载钱询问每个文件保存的位置
|
||||
closeSetting: 'hide', //关闭按钮设置
|
||||
isAINoiseReduction: true, //是否开启ai降噪
|
||||
aINoiseReduction: 1, // 降噪模式
|
||||
}))
|
||||
}
|
||||
}, [])
|
||||
useEffect(() => {
|
||||
if (isState) {
|
||||
setIsState(false)
|
||||
window.electron.onQuit(async () => {
|
||||
if (location.hash.indexOf('/login') === 1) {
|
||||
window.electron.quit()
|
||||
} else {
|
||||
if (storage.getItem('isTips') === 'true') {
|
||||
const setting = JSON.parse(storage.getItem('setting') as string)
|
||||
if (setting.closeSetting === 'hide') {
|
||||
window.electron.setViewStatus(setting.closeSetting)
|
||||
} else {
|
||||
window.electron.quit()
|
||||
}
|
||||
} else {
|
||||
quitTipsRef.current.changeModal()
|
||||
}
|
||||
window.addEventListener('resize', handleResize);
|
||||
const originalSetItem = window.localStorage.setItem;
|
||||
window.localStorage.setItem = function (key, value) {
|
||||
originalSetItem.call(this, key, value);
|
||||
const event = new Event('customStorageChange') as any;
|
||||
event.key = key
|
||||
event.value = value
|
||||
window.dispatchEvent(event);
|
||||
};
|
||||
window.addEventListener('customStorageChange', handleCustomStorageChange);
|
||||
return () => {
|
||||
window.removeEventListener('resize', handleResize);
|
||||
window.removeEventListener('customStorageChange', handleCustomStorageChange);
|
||||
};
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
window.electron.downFile(async (_e: any, data: any) => {
|
||||
const response = await fetch(data.filePath);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
const buffer = Buffer.from(arrayBuffer);
|
||||
fs.writeFile(`${data.downFilePaths}${data.fileName}`, buffer, {});
|
||||
message.success(`下载成功!文件已保存至:${data.downFilePaths}`)
|
||||
await fs.access(data.downFilePaths, fs.constants.F_OK);
|
||||
if (process.platform === 'win32') {
|
||||
exec(`explorer "${data.downFilePaths}"`);
|
||||
} else if (process.platform === 'darwin') {
|
||||
exec(`open "${data.downFilePaths}"`);
|
||||
}
|
||||
})
|
||||
}
|
||||
storage.setItem('stateInfo', JSON.stringify(state))
|
||||
}, [state])
|
||||
useEffect(() => {
|
||||
if (location.href.indexOf('/login') !== -1) {
|
||||
onStop()
|
||||
}
|
||||
}, [navigate])
|
||||
window.electron.onFilePath(async (_e: any, filePath: string, key: string) => {
|
||||
const setting = await JSON.parse(storage.getItem('setting') as string)
|
||||
if (key === 'recordingFilesPath') {
|
||||
setting.recordingFilesPath = filePath
|
||||
} else {
|
||||
setting.shareFilesPath = filePath
|
||||
}
|
||||
storage.setItem('setting', JSON.stringify(setting))
|
||||
})
|
||||
window.electron.quitAndInstall(async (_e: any) => {
|
||||
leaveChannel()
|
||||
})
|
||||
}, [])
|
||||
useEffect(() => {
|
||||
window.electron.onUpdate((_e: any, data: any) => {
|
||||
if (location.hash.indexOf('/meeting') === -1) {
|
||||
updateModalRef.current.changeModal(data)
|
||||
}
|
||||
})
|
||||
if (!storage.getItem('setting')) {
|
||||
storage.setItem('setting', JSON.stringify({
|
||||
videoDeviceId: '', //摄像头id
|
||||
ecordingDeviceId: "", //输入设备id
|
||||
playBackDeviceId: "", //输出设备id
|
||||
ecordingVolume: '', //输入音量
|
||||
playBackVolume: '', //输出音量
|
||||
autoEcordingVolume: true, //是否自动调整麦克风音量
|
||||
recordingFilesPath: path.resolve(__dirname, '../../Downloads') + '\\', //本地录制保存路径
|
||||
shareFilesPath: path.resolve(__dirname, '../../Downloads/') + '\\', //共享文件保存路径
|
||||
isShareSavePath: true, //是否下载钱询问每个文件保存的位置
|
||||
closeSetting: 'hide', //关闭按钮设置
|
||||
isAINoiseReduction: true, //是否开启ai降噪
|
||||
aINoiseReduction: 1, // 降噪模式
|
||||
}))
|
||||
}
|
||||
}, [])
|
||||
useEffect(() => {
|
||||
if (isState) {
|
||||
setIsState(false)
|
||||
window.electron.onQuit(async () => {
|
||||
if (location.hash.indexOf('/login') === 1) {
|
||||
window.electron.quit()
|
||||
} else {
|
||||
if (storage.getItem('isTips') === 'true') {
|
||||
const setting = JSON.parse(storage.getItem('setting') as string)
|
||||
if (setting.closeSetting === 'hide') {
|
||||
window.electron.setViewStatus(setting.closeSetting)
|
||||
} else {
|
||||
window.electron.quit()
|
||||
}
|
||||
} else {
|
||||
quitTipsRef.current.changeModal()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
storage.setItem('stateInfo', JSON.stringify(state))
|
||||
}, [state])
|
||||
useEffect(() => {
|
||||
if (location.href.indexOf('/login') !== -1) {
|
||||
onStop()
|
||||
}
|
||||
}, [navigate])
|
||||
}
|
||||
useEffect(() => {
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if (event.key === 'F11') {
|
||||
|
|
@ -239,6 +242,7 @@ const App: React.FC = () => {
|
|||
</Route>
|
||||
<Route path='/login' element={<Login />} />
|
||||
<Route path='/meeting' element={<Meeting />} />
|
||||
<Route path='/shareScreenWindow' element={<ShareScreenWindow />} />
|
||||
<Route path='*' element={<NotFound />} />
|
||||
</Routes>
|
||||
<Spin spinning={spinning} fullscreen />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
.shareScreenWindow {
|
||||
background-color: red;
|
||||
color: red;
|
||||
color: black;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
|
@ -6,7 +6,12 @@ const ShareScreenWindow: React.FC = () => {
|
|||
|
||||
}, []);
|
||||
|
||||
|
||||
// window.electron.createChildWindow({
|
||||
// url: location.origin + `/#/shareScreenWindow`,
|
||||
// width: 600,
|
||||
// height: 40,
|
||||
// key: 'shareScreenWindow',
|
||||
// })
|
||||
return (
|
||||
<>
|
||||
<div className={styles.shareScreenWindow}>
|
||||
|
|
|
|||
Loading…
Reference in New Issue