mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-05-12 02:19:55 +08:00
enhance ux login flow of auto start chat
This commit is contained in:
@@ -100,9 +100,6 @@ export async function initPuppeteer () {
|
||||
}
|
||||
}
|
||||
|
||||
const bossCookies = readStorageFile('boss-cookies.json')
|
||||
const bossLocalStorage = readStorageFile('boss-local-storage.json')
|
||||
|
||||
const targetCompanyList = readConfigFile('target-company-list.json').filter(it => !!it.trim());
|
||||
const combineRecommendJobFilterType = readConfigFile('boss.json').combineRecommendJobFilterType ?? CombineRecommendJobFilterType.ANY_COMBINE
|
||||
|
||||
@@ -1476,7 +1473,9 @@ export async function mainLoop (hooks) {
|
||||
page = (await browser.pages())[0]
|
||||
hooks.pageGotten?.call(page)
|
||||
//set cookies
|
||||
hooks.cookieWillSet?.call(bossCookies)
|
||||
const bossCookies = readStorageFile('boss-cookies.json')
|
||||
const bossLocalStorage = readStorageFile('boss-local-storage.json')
|
||||
await hooks.cookieWillSet?.promise(bossCookies)
|
||||
for(let i = 0; i < bossCookies.length; i++){
|
||||
await page.setCookie(bossCookies[i]);
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
import { sendToDaemon } from "../flow/OPEN_SETTING_WINDOW/connect-to-daemon"
|
||||
import minimist from 'minimist'
|
||||
|
||||
const runRecordId = minimist(process.argv.slice(2))['run-record-id'] ?? null
|
||||
export function pushUserInfoValidStatus (userInfoResponse) {
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
type: 'prerequisite-step-by-step-checkstep-by-step-check',
|
||||
step: {
|
||||
id: 'login-status-check',
|
||||
status: userInfoResponse.code === 0 ? 'fulfilled' : 'rejected'
|
||||
},
|
||||
runRecordId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export class UserResponseInfoPlugin {
|
||||
apply(hooks) {
|
||||
hooks.userInfoResponse.tapPromise(
|
||||
"UserResponseInfoPlugin",
|
||||
(userInfoResponse) => {
|
||||
pushUserInfoValidStatus(userInfoResponse)
|
||||
return Promise.resolve()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import { sendToDaemon } from '../flow/OPEN_SETTING_WINDOW/connect-to-daemon'
|
||||
import minimist from 'minimist'
|
||||
import { loginWithCookieAssistant } from './login-with-cookie-assistant'
|
||||
import { checkCookieListFormat } from '../../common/utils/cookie'
|
||||
import { sleep } from '@geekgeekrun/utils/sleep.mjs'
|
||||
import { readStorageFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs'
|
||||
|
||||
const runRecordId = minimist(process.argv.slice(2))['run-record-id'] ?? null
|
||||
export class CookieInvalidHandlePlugin {
|
||||
apply(hooks) {
|
||||
hooks.cookieWillSet.tapPromise('CookieInvalidHandlePlugin', async (cookies) => {
|
||||
let isValid = checkCookieListFormat(cookies)
|
||||
while (!isValid) {
|
||||
try {
|
||||
// popup login dialog, then update login status
|
||||
await loginWithCookieAssistant()
|
||||
await sleep(2000)
|
||||
const newCookies = readStorageFile('boss-cookies.json')
|
||||
isValid = checkCookieListFormat(newCookies)
|
||||
if (isValid) {
|
||||
cookies.length = 0
|
||||
for (const cookie of newCookies) {
|
||||
cookies.push(cookie)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (e?.message === 'USER_CANCELLED_LOGIN') {
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
type: 'prerequisite-step-by-step-checkstep-by-step-check',
|
||||
step: {
|
||||
id: 'basic-cookie-check',
|
||||
status: 'rejected'
|
||||
},
|
||||
runRecordId
|
||||
}
|
||||
})
|
||||
throw new Error('LOGIN_STATUS_INVALID')
|
||||
}
|
||||
}
|
||||
}
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
type: 'prerequisite-step-by-step-checkstep-by-step-check',
|
||||
step: {
|
||||
id: 'basic-cookie-check',
|
||||
status: 'fulfilled'
|
||||
},
|
||||
runRecordId
|
||||
}
|
||||
})
|
||||
})
|
||||
hooks.userInfoResponse.tapPromise('CookieInvalidHandlePlugin', async (userInfoResponse) => {
|
||||
if (userInfoResponse.code === 0) {
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
type: 'prerequisite-step-by-step-checkstep-by-step-check',
|
||||
step: {
|
||||
id: 'login-status-check',
|
||||
status: 'fulfilled'
|
||||
},
|
||||
runRecordId
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
try {
|
||||
// popup login dialog, then update login status
|
||||
await loginWithCookieAssistant()
|
||||
} catch (e) {
|
||||
if (e?.message === 'USER_CANCELLED_LOGIN') {
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
type: 'prerequisite-step-by-step-checkstep-by-step-check',
|
||||
step: {
|
||||
id: 'login-status-check',
|
||||
status: 'rejected'
|
||||
},
|
||||
runRecordId
|
||||
}
|
||||
})
|
||||
throw new Error('LOGIN_STATUS_INVALID')
|
||||
}
|
||||
}
|
||||
// throw new Error('THROW_FOR_RETRY')
|
||||
return Promise.reject(new Error('THROW_FOR_RETRY'))
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ export async function loginWithCookieAssistant({ windowOption } = {}) {
|
||||
if (processDone) {
|
||||
resolve(true)
|
||||
} else {
|
||||
reject(new Error('User cancelled login'))
|
||||
reject(new Error('USER_CANCELLED_LOGIN'))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -17,9 +17,15 @@ import GtagPlugin from '../../utils/gtag/GtagPlugin'
|
||||
import { connectToDaemon, sendToDaemon } from '../OPEN_SETTING_WINDOW/connect-to-daemon'
|
||||
// import { PeriodPushCurrentPageScreenshotPlugin } from '../../utils/screenshot'
|
||||
import { checkShouldExit } from '../../utils/worker'
|
||||
import { UserResponseInfoPlugin } from '../../features/boss-user-info-response-plugin'
|
||||
import { CookieInvalidHandlePlugin } from '../../features/cookie-invalid-handle-plugin'
|
||||
import initPublicIpc from '../../utils/initPublicIpc'
|
||||
const { default: SqlitePlugin } = SqlitePluginModule
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
console.log('收到SIGTERM信号,正在退出')
|
||||
process.exit(0)
|
||||
})
|
||||
|
||||
const rerunInterval = (() => {
|
||||
let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL)
|
||||
if (isNaN(v)) {
|
||||
@@ -36,7 +42,7 @@ const initPlugins = (hooks) => {
|
||||
new SqlitePlugin(getPublicDbFilePath()).apply(hooks)
|
||||
new GtagPlugin().apply(hooks)
|
||||
// new PeriodPushCurrentPageScreenshotPlugin().apply(hooks)
|
||||
new UserResponseInfoPlugin().apply(hooks)
|
||||
new CookieInvalidHandlePlugin().apply(hooks)
|
||||
}
|
||||
|
||||
const runRecordId = minimist(process.argv.slice(2))['run-record-id'] ?? null
|
||||
@@ -83,7 +89,7 @@ const runAutoChat = async () => {
|
||||
puppeteerLaunched: new SyncHook(['browser']),
|
||||
pageGotten: new SyncHook(['page']),
|
||||
pageLoaded: new SyncHook(),
|
||||
cookieWillSet: new SyncHook(['cookies']),
|
||||
cookieWillSet: new AsyncSeriesHook(['cookies']),
|
||||
userInfoResponse: new AsyncSeriesHook(['userInfo']),
|
||||
mainFlowWillLaunch: new AsyncSeriesHook(['args']),
|
||||
jobDetailIsGetFromRecommendList: new AsyncSeriesHook(['userInfo']),
|
||||
@@ -147,6 +153,11 @@ const runAutoChat = async () => {
|
||||
}
|
||||
|
||||
export const waitForProcessHandShakeAndRunAutoChat = async () => {
|
||||
await app.whenReady()
|
||||
app.on('window-all-closed', (e) => {
|
||||
e.preventDefault()
|
||||
})
|
||||
initPublicIpc()
|
||||
await connectToDaemon()
|
||||
await sendToDaemon(
|
||||
{
|
||||
|
||||
@@ -2,11 +2,9 @@ import { randomUUID } from "node:crypto";
|
||||
import { EventEmitter } from "node:events";
|
||||
import { tmpdir } from "node:os";
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
|
||||
const net = require('net');
|
||||
const split2 = require('split2');
|
||||
const { app } = require('electron');
|
||||
|
||||
let daemonClient = null;
|
||||
export const daemonEE = new EventEmitter()
|
||||
@@ -138,14 +136,6 @@ export function sendToDaemon(message, {
|
||||
// sendToDaemon({ type: 'start-worker', workerId, command, args, env });
|
||||
// });
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
if (daemonClient) {
|
||||
daemonClient.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
app.on('before-quit', () => {
|
||||
if (daemonClient) {
|
||||
daemonClient.destroy();
|
||||
}
|
||||
});
|
||||
export function closeDaemonClient() {
|
||||
daemonClient?.destroy()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import initIpc from './ipc'
|
||||
import gtag from '../../utils/gtag'
|
||||
import initPublicIpc from '../../utils/initPublicIpc'
|
||||
import { launchDaemon } from './launch-daemon'
|
||||
import { connectToDaemon, sendToDaemon } from './connect-to-daemon'
|
||||
import { connectToDaemon, sendToDaemon, closeDaemonClient } from './connect-to-daemon'
|
||||
import { sleep } from "@geekgeekrun/utils/sleep.mjs"
|
||||
|
||||
export function openSettingWindow() {
|
||||
@@ -91,4 +91,6 @@ export function openSettingWindow() {
|
||||
}
|
||||
)
|
||||
})
|
||||
app.on('window-all-closed', closeDaemonClient)
|
||||
app.on('before-quit', closeDaemonClient)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user