1
0

service.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const transport = require('../../transport/ble-core.js')
  2. const themeService = require('../../store/theme-store.js')
  3. const {
  4. DEFAULT_DEVICE_FILTER,
  5. getHomePageState
  6. } = require('./view-model.js')
  7. let initScheduled = false
  8. function deferStartupWork(task) {
  9. if (typeof task !== 'function') return
  10. if (typeof setTimeout === 'function') {
  11. setTimeout(task, 120)
  12. return
  13. }
  14. task()
  15. }
  16. function init() {
  17. if (initScheduled) return
  18. initScheduled = true
  19. deferStartupWork(() => {
  20. try {
  21. transport.init()
  22. themeService.init()
  23. } catch (error) {}
  24. })
  25. }
  26. function getState(deviceFilterMode = DEFAULT_DEVICE_FILTER) {
  27. return getHomePageState(
  28. transport.getState(),
  29. deviceFilterMode,
  30. themeService.getState()
  31. )
  32. }
  33. function subscribeState(getDeviceFilterMode, subscriber) {
  34. if (typeof subscriber !== 'function') return () => {}
  35. const getFilterMode = typeof getDeviceFilterMode === 'function'
  36. ? getDeviceFilterMode
  37. : () => DEFAULT_DEVICE_FILTER
  38. const emit = () => subscriber(getState(getFilterMode()))
  39. const unsubscribers = [
  40. transport.subscribe(emit),
  41. themeService.subscribe(emit)
  42. ]
  43. return () => {
  44. unsubscribers.forEach((unsubscribe) => {
  45. if (typeof unsubscribe === 'function') unsubscribe()
  46. })
  47. }
  48. }
  49. function toggleScan(isDiscovering) {
  50. return isDiscovering ? transport.stopScan() : transport.startScan()
  51. }
  52. module.exports = {
  53. DEFAULT_DEVICE_FILTER,
  54. clearDevices: transport.clearDevices,
  55. connectDeviceById: transport.connectDeviceById,
  56. disconnectDevice: transport.disconnectDevice,
  57. getState,
  58. init,
  59. subscribeState,
  60. toggleScan
  61. }