diff --git a/src/main/ipcRouter.js b/src/main/ipcRouter.js index d0bff80..0e97002 100644 --- a/src/main/ipcRouter.js +++ b/src/main/ipcRouter.js @@ -7,7 +7,12 @@ import { dirname } from 'path' import { IPC_EVENT } from '../renderer/src/common/ipcEvents.js' import log from 'electron-log' import ReconnectManager from './reconnectManager.js' -import { getParametersFromDevice, setFirstParameter, disconnect } from './lib/adbClient.js' +import { + getParametersFromDevice, + setFirstParameter, + disconnect, + syncDeviceDateTime +} from './lib/adbClient.js' import fs from 'fs/promises' import path from 'path' const TIMEOUT = 10000 // 10秒超时 @@ -55,22 +60,25 @@ const handleAttemptReconnect = (ip, callback) => { } client.connect(Number(storedConnectionData.port), ip, () => { - log.info(`Reconnected successfully to ${ip}:${storedConnectionData.port}`) + (async () => { + log.info(`Reconnected successfully to ${ip}:${storedConnectionData.port}`) + await synchronizeDeviceTimeAfterConnect(ip) - // 连接成功,保存连接信息 - tcpClients.set(ip, connectionInfo) + // 连接成功,保存连接信息 + tcpClients.set(ip, connectionInfo) - // 启动心跳检测 - startHeartbeatCheck(ip) + // 启动心跳检测 + startHeartbeatCheck(ip) - // 通知渲染进程重连成功 - storedConnectionData.eventSender.send(IPC_EVENT.DEVICE_CONNECT_REPLY, { - success: true, - ip: ip, - reconnected: true - }) + // 通知渲染进程重连成功 + storedConnectionData.eventSender.send(IPC_EVENT.DEVICE_CONNECT_REPLY, { + success: true, + ip: ip, + reconnected: true + }) - callback(true) + callback(true) + })() }) // 设置数据处理 @@ -168,6 +176,15 @@ const logIPCCommand = (ip, command) => { log.info(`IPC Command from renderer - ${eventType} to ${ip}:`, command) } +const synchronizeDeviceTimeAfterConnect = async (ip) => { + try { + await syncDeviceDateTime(ip) + log.info(`Device time synchronized successfully for ${ip}`) + } catch (error) { + log.warn(`Failed to synchronize device time for ${ip}:`, error.message) + } +} + export function registerIpRouter() { ipcMain.on(IPC_EVENT.DEVICE_SEARCH, searchDevice) ipcMain.on(IPC_EVENT.DEVICE_CONNECT, connectDevice) @@ -481,11 +498,14 @@ const connectDevice = (event, { ip, port }) => { } client.connect(Number(port), ip, () => { - event.reply(IPC_EVENT.DEVICE_CONNECT_REPLY, { success: true, ip }) - tcpClients.set(ip, connectionInfo) - - // 启动心跳检测 - startHeartbeatCheck(ip) + (async () => { + await synchronizeDeviceTimeAfterConnect(ip) + event.reply(IPC_EVENT.DEVICE_CONNECT_REPLY, { success: true, ip }) + tcpClients.set(ip, connectionInfo) + + // 启动心跳检测 + startHeartbeatCheck(ip) + })() }) let buffer = '' diff --git a/src/main/lib/adbClient.js b/src/main/lib/adbClient.js index 4d0df19..2263aed 100644 --- a/src/main/lib/adbClient.js +++ b/src/main/lib/adbClient.js @@ -85,6 +85,27 @@ async function disconnect(ip) { return runAdb(['disconnect']) } +function formatDeviceDateTime(date = new Date()) { + const year = date.getFullYear() + const month = String(date.getMonth() + 1).padStart(2, '0') + const day = String(date.getDate()).padStart(2, '0') + const hours = String(date.getHours()).padStart(2, '0') + const minutes = String(date.getMinutes()).padStart(2, '0') + const seconds = String(date.getSeconds()).padStart(2, '0') + + return `${month}${day}${hours}${minutes}${year}.${seconds}` +} + +async function syncDeviceDateTime(ip, date = new Date()) { + if (!ip) throw new Error('ip required') + + await connect(ip) + const serial = getAdbSerial(ip) + const formattedDateTime = formatDeviceDateTime(date) + + return runAdb(['-s', serial, 'shell', 'date', formattedDateTime]) +} + async function pull(remotePath, destFilename, ip) { const dest = path.join(adbDir, destFilename || path.basename(remotePath)) await fsp.mkdir(adbDir, { recursive: true }) @@ -135,4 +156,17 @@ async function setFirstParameter({ param, ip, toSystem = false }) { return { local } } -export { adbPath, runAdb, connect, pull, push, readLocalOLE, writeFirstOLE, getParametersFromDevice, setFirstParameter, disconnect, getAdbSerial } +export { + adbPath, + runAdb, + connect, + pull, + push, + readLocalOLE, + writeFirstOLE, + getParametersFromDevice, + setFirstParameter, + disconnect, + getAdbSerial, + syncDeviceDateTime +}