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 { IPC_EVENT } from '../renderer/src/common/ipcEvents.js'
import log from 'electron-log' import log from 'electron-log'
import ReconnectManager from './reconnectManager.js' 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 fs from 'fs/promises'
import path from 'path' import path from 'path'
const TIMEOUT = 10000 // 10秒超时 const TIMEOUT = 10000 // 10秒超时
@ -55,7 +60,9 @@ const handleAttemptReconnect = (ip, callback) => {
} }
client.connect(Number(storedConnectionData.port), ip, () => { client.connect(Number(storedConnectionData.port), ip, () => {
(async () => {
log.info(`Reconnected successfully to ${ip}:${storedConnectionData.port}`) log.info(`Reconnected successfully to ${ip}:${storedConnectionData.port}`)
await synchronizeDeviceTimeAfterConnect(ip)
// 连接成功,保存连接信息 // 连接成功,保存连接信息
tcpClients.set(ip, connectionInfo) tcpClients.set(ip, connectionInfo)
@ -71,6 +78,7 @@ const handleAttemptReconnect = (ip, callback) => {
}) })
callback(true) callback(true)
})()
}) })
// 设置数据处理 // 设置数据处理
@ -168,6 +176,15 @@ const logIPCCommand = (ip, command) => {
log.info(`IPC Command from renderer - ${eventType} to ${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() { export function registerIpRouter() {
ipcMain.on(IPC_EVENT.DEVICE_SEARCH, searchDevice) ipcMain.on(IPC_EVENT.DEVICE_SEARCH, searchDevice)
ipcMain.on(IPC_EVENT.DEVICE_CONNECT, connectDevice) ipcMain.on(IPC_EVENT.DEVICE_CONNECT, connectDevice)
@ -481,11 +498,14 @@ const connectDevice = (event, { ip, port }) => {
} }
client.connect(Number(port), ip, () => { client.connect(Number(port), ip, () => {
(async () => {
await synchronizeDeviceTimeAfterConnect(ip)
event.reply(IPC_EVENT.DEVICE_CONNECT_REPLY, { success: true, ip }) event.reply(IPC_EVENT.DEVICE_CONNECT_REPLY, { success: true, ip })
tcpClients.set(ip, connectionInfo) tcpClients.set(ip, connectionInfo)
// 启动心跳检测 // 启动心跳检测
startHeartbeatCheck(ip) startHeartbeatCheck(ip)
})()
}) })
let buffer = '' let buffer = ''

36
src/main/lib/adbClient.js

@ -85,6 +85,27 @@ async function disconnect(ip) {
return runAdb(['disconnect']) 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) { async function pull(remotePath, destFilename, ip) {
const dest = path.join(adbDir, destFilename || path.basename(remotePath)) const dest = path.join(adbDir, destFilename || path.basename(remotePath))
await fsp.mkdir(adbDir, { recursive: true }) await fsp.mkdir(adbDir, { recursive: true })
@ -135,4 +156,17 @@ async function setFirstParameter({ param, ip, toSystem = false }) {
return { local } 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