Browse Source

feat: 设备连接后自动同步时间功能

master
liujiangyong 2 weeks ago
parent
commit
3bc3a43aab
  1. 22
      src/main/ipcRouter.js
  2. 36
      src/main/lib/adbClient.js

22
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,7 +60,9 @@ const handleAttemptReconnect = (ip, callback) => {
}
client.connect(Number(storedConnectionData.port), ip, () => {
(async () => {
log.info(`Reconnected successfully to ${ip}:${storedConnectionData.port}`)
await synchronizeDeviceTimeAfterConnect(ip)
// 连接成功,保存连接信息
tcpClients.set(ip, connectionInfo)
@ -71,6 +78,7 @@ const handleAttemptReconnect = (ip, callback) => {
})
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, () => {
(async () => {
await synchronizeDeviceTimeAfterConnect(ip)
event.reply(IPC_EVENT.DEVICE_CONNECT_REPLY, { success: true, ip })
tcpClients.set(ip, connectionInfo)
// 启动心跳检测
startHeartbeatCheck(ip)
})()
})
let buffer = ''

36
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
}

Loading…
Cancel
Save