You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.6 KiB
JavaScript

const path = require('path');
const { app, BrowserWindow, ipcMain } = require('electron');
const isDev = require('electron-is-dev');
const { spawn } = require('child_process');
const iconv = require('iconv-lite');
function createWindow() {
const win = new BrowserWindow({
width: 1920,
height: 1080,
webPreferences: {
preload: path.join(__dirname, 'preload.cjs')
}
});
win.loadFile(path.join(__dirname, '../dist/index.html'));
win.webContents.openDevTools()
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});
ipcMain.on('launch-live-talking', () => {
// Determine folder and path of LiveTalking.exe
const exeFolder = isDev
? path.join(__dirname, '../../Livetalking')
: path.join(process.resourcesPath, 'Livetalking');
const exePath = path.join(exeFolder, 'LiveTalking.exe');
console.log('[Main] Launching LiveTalking.exe at:', exePath);
// Spawn a new terminal window to run the exe in its own working directory
const child = spawn('cmd.exe', ['/c', 'start', '""', `"${exePath}"`], {
cwd: exeFolder,
windowsVerbatimArguments: true,
windowsHide: false,
detached: true
});
child.unref();
// Decode stderr (GBK) and log
child.stderr.on('data', (data) => {
console.error(iconv.decode(data, 'gbk'));
});
// Handle spawn errors
child.on('error', (err) => {
console.error('Error spawning LiveTalking:', err);
});
// Log exit status
child.on('exit', (code, signal) => {
console.log(`LiveTalking exited with code ${code}, signal ${signal}`);
});
});