From 013d76726b51783525c5a79d4a605bd4072be5e0 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Sat, 21 Feb 2026 10:20:36 +0800 Subject: [PATCH] add listener for `common-job-condition-config-updated`; enhance common config show in ghosting reminder ui --- .../common-job-condition-config.json | 1 - .../src/main/features/common-job-condition.ts | 32 ++++++++++++++ .../flow/OPEN_SETTING_WINDOW/ipc/index.ts | 26 ++--------- packages/ui/src/main/utils/initPublicIpc.ts | 21 ++++++++- .../window/commonJobConditionConfigWindow.ts | 11 ++++- .../page/CommonJobConditionConfig/index.vue | 35 ++++++++++++--- .../GeekAutoStartChatWithBoss/index.vue | 9 ++-- .../page/MainLayout/ReadNoReplyReminder.vue | 43 +++++++++++++++++-- 8 files changed, 139 insertions(+), 39 deletions(-) create mode 100644 packages/ui/src/main/features/common-job-condition.ts diff --git a/packages/geek-auto-start-chat-with-boss/default-config-file/common-job-condition-config.json b/packages/geek-auto-start-chat-with-boss/default-config-file/common-job-condition-config.json index c70ad95..22d37d6 100644 --- a/packages/geek-auto-start-chat-with-boss/default-config-file/common-job-condition-config.json +++ b/packages/geek-auto-start-chat-with-boss/default-config-file/common-job-condition-config.json @@ -9,5 +9,4 @@ "expectSalaryCalculateWay": 1, "expectSalaryLow": null, "expectSalaryHigh": null - } \ No newline at end of file diff --git a/packages/ui/src/main/features/common-job-condition.ts b/packages/ui/src/main/features/common-job-condition.ts new file mode 100644 index 0000000..017ea1b --- /dev/null +++ b/packages/ui/src/main/features/common-job-condition.ts @@ -0,0 +1,32 @@ +import { ipcMain } from 'electron' +import { createCommonJobConditionConfigWindow } from '../window/commonJobConditionConfigWindow' +import { mainWindow } from '../window/mainWindow' +import { readConfigFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' + +let commonJobConditionConfigWindow = null +export async function waitForCommonJobConditionDone() { + return new Promise((resolve, reject) => { + commonJobConditionConfigWindow = createCommonJobConditionConfigWindow({ + parent: mainWindow!, + modal: true, + show: true + }) + let processDone = false + function handler() { + processDone = true + commonJobConditionConfigWindow.close() + } + ipcMain.once('common-job-condition-config-done', handler) + commonJobConditionConfigWindow.on('closed', async () => { + ipcMain.off('common-job-condition-config-done', handler) + if (processDone) { + mainWindow?.webContents.send('common-job-condition-config-updated', { + config: await readConfigFile('common-job-condition-config.json') + }) + resolve(true) + } else { + reject(new Error('USER_CANCELLED')) + } + }) + }) +} diff --git a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts index ee1a4e4..a5a8dcc 100644 --- a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts +++ b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts @@ -2,8 +2,6 @@ import { ipcMain, shell, app, dialog, BrowserWindow } from 'electron' import path from 'path' import * as childProcess from 'node:child_process' import { - ensureConfigFileExist, - configFileNameList, readConfigFile, writeConfigFile, readStorageFile, @@ -58,24 +56,10 @@ import { waitForUserApproveAgreement } from '../../../features/first-launch-notice-window' import { getLastUsedAndAvailableBrowser } from '../../DOWNLOAD_DEPENDENCIES/utils/browser-history' -import { createCommonJobConditionConfigWindow } from '../../../window/commonJobConditionConfigWindow' +import { waitForCommonJobConditionDone } from '../../../features/common-job-condition' +import { ensureConfigFileExist } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' export default function initIpc() { - ipcMain.handle('fetch-config-file-content', async () => { - const configFileContentList = configFileNameList.map((fileName) => { - return readConfigFile(fileName) - }) - const result = { - config: {} - } - - configFileNameList.forEach((fileName, index) => { - result.config[fileName] = configFileContentList[index] - }) - - return result - }) - ipcMain.handle('save-config-file-from-ui', async (ev, payload) => { payload = JSON.parse(payload) ensureConfigFileExist() @@ -612,11 +596,7 @@ export default function initIpc() { } }) ipcMain.handle('common-job-condition-config', async () => { - createCommonJobConditionConfigWindow({ - parent: mainWindow!, - modal: true, - show: true - }) + await waitForCommonJobConditionDone() }) ipcMain.handle('exit-app-immediately', () => { diff --git a/packages/ui/src/main/utils/initPublicIpc.ts b/packages/ui/src/main/utils/initPublicIpc.ts index 305f99e..3d4adfe 100644 --- a/packages/ui/src/main/utils/initPublicIpc.ts +++ b/packages/ui/src/main/utils/initPublicIpc.ts @@ -5,8 +5,10 @@ import os from 'node:os' import fs from 'node:fs' import { ensureStorageFileExist, - readStorageFile, - writeStorageFile + writeStorageFile, + configFileNameList, + readConfigFile, + readStorageFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' export default function initPublicIpc() { @@ -110,4 +112,19 @@ export default function initPublicIpc() { } return null }) + + ipcMain.handle('fetch-config-file-content', async () => { + const configFileContentList = configFileNameList.map((fileName) => { + return readConfigFile(fileName) + }) + const result = { + config: {} + } + + configFileNameList.forEach((fileName, index) => { + result.config[fileName] = configFileContentList[index] + }) + + return result + }) } diff --git a/packages/ui/src/main/window/commonJobConditionConfigWindow.ts b/packages/ui/src/main/window/commonJobConditionConfigWindow.ts index f825726..c4daaa9 100644 --- a/packages/ui/src/main/window/commonJobConditionConfigWindow.ts +++ b/packages/ui/src/main/window/commonJobConditionConfigWindow.ts @@ -1,5 +1,6 @@ -import { BrowserWindow } from 'electron' +import { BrowserWindow, ipcMain } from 'electron' import path from 'path' +import { writeConfigFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' export let commonJobConditionConfigWindow: BrowserWindow | null = null export function createCommonJobConditionConfigWindow( @@ -42,5 +43,13 @@ export function createCommonJobConditionConfigWindow( commonJobConditionConfigWindow = null }) + ipcMain.handle('save-common-job-condition-config', async (_ev, payload) => { + await writeConfigFile('common-job-condition-config.json', payload) + commonJobConditionConfigWindow!.close() + }) + commonJobConditionConfigWindow!.once('closed', () => { + ipcMain.removeHandler('save-common-job-condition-config') + }) + return commonJobConditionConfigWindow! } diff --git a/packages/ui/src/renderer/src/page/CommonJobConditionConfig/index.vue b/packages/ui/src/renderer/src/page/CommonJobConditionConfig/index.vue index 669dc4e..4374250 100644 --- a/packages/ui/src/renderer/src/page/CommonJobConditionConfig/index.vue +++ b/packages/ui/src/renderer/src/page/CommonJobConditionConfig/index.vue @@ -596,7 +596,7 @@