const transport = require('./ble-transport') const syncService = require('./sync-service') const themeService = require('./theme-service') const DEFAULT_DEVICE_FILTER = 'all' const DEVICE_FILTER_OPTIONS = [ { key: 'all', label: '全部' }, { key: 'target', label: '目标' } ] function isTargetDevice(device) { return !!(device && (device.isTargetDevice || device.isTargetAdvertised)) } function filterDevices(devices, filterMode) { if (filterMode === 'target') return devices.filter(isTargetDevice) return devices } function getHomePageState( transportState = transport.getState(), deviceFilterMode = DEFAULT_DEVICE_FILTER, syncState = syncService.getState(), themeState = themeService.getState() ) { const { connectedDevice } = transportState const filteredDevices = filterDevices(transportState.devices, deviceFilterMode) const allDeviceCount = transportState.devices.length const filteredDeviceCount = filteredDevices.length const connectionStatusText = connectedDevice ? '已连接' : (transportState.isConnecting ? '连接中' : '未连接') return { ...transportState, ...themeState, allDeviceCount, canClearDevices: !!allDeviceCount && !transportState.isConnecting, canDisconnectDevice: !!connectedDevice, canStartScan: !transportState.isConnecting, canSyncRegisters: !!connectedDevice && !transportState.isConnecting && !syncState.isSyncing, connectionCharacteristicText: connectedDevice ? transportState.characteristicText : '--', connectionDeviceId: connectedDevice ? connectedDevice.deviceId : '--', connectionName: connectedDevice ? connectedDevice.displayName : '', connectionServiceCount: connectedDevice ? transportState.connectedServiceCount : '--', connectionSignalText: connectedDevice ? connectedDevice.signalText : '--', connectionStatusText, devices: transportState.isDiscovering ? filteredDevices : [], deviceCountText: allDeviceCount ? (deviceFilterMode === 'target' ? `(${filteredDeviceCount}/${allDeviceCount})` : `(${allDeviceCount})`) : '', deviceFilterMode, deviceFilterOptions: DEVICE_FILTER_OPTIONS, emptyDeviceText: allDeviceCount && deviceFilterMode === 'target' ? '当前扫描结果中没有广播目标 UUID 的设备,可切回全部后连接确认特征值。' : '请确认设备已上电并处于可广播或配网状态。', emptyDeviceTitle: allDeviceCount && deviceFilterMode === 'target' ? '没有匹配目标特征的设备' : '还没有发现设备', isSyncing: syncState.isSyncing, scanButtonText: transportState.isDiscovering ? '停止' : '扫描', showDeviceSection: transportState.isDiscovering } } module.exports = { DEFAULT_DEVICE_FILTER, DEVICE_FILTER_OPTIONS, filterDevices, getHomePageState, isTargetDevice }