60 lines
1.2 KiB
TypeScript
60 lines
1.2 KiB
TypeScript
import { makeAutoObservable } from 'mobx'
|
|
|
|
import { type BleDevice } from '@/ble/core/types'
|
|
import { type DeviceInfo } from '@/ble/protocol/types'
|
|
|
|
interface BleState {
|
|
isScanning: boolean
|
|
isConnected: boolean
|
|
connectedDevice: BleDevice | null
|
|
deviceInfo: DeviceInfo | null
|
|
version: string
|
|
isActivated: boolean
|
|
transferProgress: number
|
|
discoveredDevices: BleDevice[]
|
|
contents: string[]
|
|
loading: {
|
|
connecting: boolean
|
|
querying: boolean
|
|
converting: boolean
|
|
transferring: boolean
|
|
}
|
|
error: string | null
|
|
}
|
|
|
|
class BleStore {
|
|
// State
|
|
state: BleState = {
|
|
isScanning: false,
|
|
isConnected: false,
|
|
connectedDevice: null,
|
|
deviceInfo: null,
|
|
version: '',
|
|
isActivated: false,
|
|
transferProgress: 0,
|
|
discoveredDevices: [],
|
|
contents: [],
|
|
loading: {
|
|
connecting: false,
|
|
querying: false,
|
|
converting: false,
|
|
transferring: false,
|
|
},
|
|
error: null,
|
|
}
|
|
|
|
bleSessionId = `ble-session-${Date.now().toString()}`
|
|
|
|
constructor() {
|
|
makeAutoObservable(this)
|
|
}
|
|
|
|
// Actions
|
|
setState(updater: (prev: BleState) => BleState) {
|
|
this.state = updater(this.state)
|
|
}
|
|
}
|
|
|
|
// Global instance
|
|
export const bleStore = new BleStore()
|