diff --git a/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS.ts b/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS.ts index e569e59..355104d 100644 --- a/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS.ts +++ b/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS.ts @@ -1,10 +1,9 @@ import DingtalkPlugin from '@bossgeekgo/dingtalk-plugin/index.mjs' import { app } from 'electron' -import { - SyncHook, - AsyncSeriesHook -} from 'tapable' +import { SyncHook, AsyncSeriesHook } from 'tapable' import { readConfigFile } from '@bossgeekgo/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' +import * as net from 'net' + const { groupRobotAccessToken: dingTalkAccessToken } = readConfigFile('dingtalk.json') const initPlugins = (hooks) => { @@ -12,10 +11,31 @@ const initPlugins = (hooks) => { } export const runAutoChat = async () => { + let pipe: null | net.Socket = null + try { + pipe = new net.Socket({ fd: 3 }) + } catch { + console.warn('pipe is not available') + } + pipe?.write( + JSON.stringify({ + type: 'INITIALIZE_PUPPETEER' + }) + ) try { await (await import('@bossgeekgo/geek-auto-start-chat-with-boss/index.mjs')).initPuppeteer() + pipe?.write( + JSON.stringify({ + type: 'PUPPETEER_INITIALIZE_SUCCESSFULLY' + }) + ) } catch { console.error(new Error('PUPPETEER_MAY_NOT_INSTALLED')) + pipe?.write( + JSON.stringify({ + type: 'PUPPETEER_MAY_NOT_INSTALLED' + }) + ) app.exit(1) return } @@ -32,14 +52,21 @@ export const runAutoChat = async () => { errorEncounter: new SyncHook(['errorInfo']) } initPlugins(hooks) + pipe?.write( + JSON.stringify({ + type: 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED' //geek-auto-start-chat-with-boss-started + }) + ) while (true) { try { await mainLoop(hooks) } catch (err) { console.log(err) - if(err instanceof Error && err.message.includes('ERR_MODULE_NOT_FOUND')) { - throw err - } + // if(err instanceof Error && err.message.includes('ERR_MODULE_NOT_FOUND')) { + // throw err + // } else { + void err + // } } } } diff --git a/packages/ui/src/main/window/mainWindow.ts b/packages/ui/src/main/window/mainWindow.ts index a2378b7..1c8cea9 100644 --- a/packages/ui/src/main/window/mainWindow.ts +++ b/packages/ui/src/main/window/mainWindow.ts @@ -85,30 +85,41 @@ export function createMainWindow(): void { if (subProcessOfPuppeteer) { return } - try { - await import('@bossgeekgo/geek-auto-start-chat-with-boss/index.mjs') - } catch (err) { - console.log(err) // TODO: what's the error? - throw new Error('PUPPETEER_MAY_NOT_INSTALLED') - } console.log(process) subProcessOfPuppeteer = childProcess.spawn(process.argv[0], process.argv.slice(1), { env: { ...process.env, MAIN_BOSSGEEKGO_UI_RUN_MODE: 'geekAutoStartWithBoss' // PUPPETEER_EXECUTABLE_PATH: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge' - } + }, + stdio: [null, null, null, 'pipe'] }) - ipcMain.emit('geek-auto-start-chat-with-boss-started') subProcessOfPuppeteer.once('exit', () => { mainWindow.webContents.send('geek-auto-start-chat-with-boss-stopped') subProcessOfPuppeteer = null }) console.log(subProcessOfPuppeteer) + return new Promise((resolve) => { + subProcessOfPuppeteer!.stdio[3]!.on('data', (raw) => { + const data = JSON.parse(raw.toString()) + if (data.type === 'PUPPETEER_MAY_NOT_INSTALLED') { + resolve(data) + } + if (data.type === 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED') { + resolve(data) + } + }) + }) + // TODO: }) ipcMain.handle('stop-geek-auto-start-chat-with-boss', async () => { mainWindow.webContents.send('geek-auto-start-chat-with-boss-stopping') subProcessOfPuppeteer?.kill('SIGINT') }) + ipcMain.on('open-project-homepage-on-github', () => { + shell.openExternal(`https://github.com/bossgeekgo`, { + activate: true + }) + }) } diff --git a/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue b/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue index eb8200e..9d13f3b 100644 --- a/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue +++ b/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue @@ -33,8 +33,8 @@