From 3bc3a43aab44bbcd7f018bf2ecd6cdffd364d9da Mon Sep 17 00:00:00 2001 From: liujiangyong Date: Fri, 12 Jun 2026 13:45:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BE=E5=A4=87=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/ipcRouter.js | 56 ++++++++++++++++++++++++++------------- src/main/lib/adbClient.js | 36 ++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 19 deletions(-) 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 +}