camera.ui3 0.0.30-alpha.0 → 0.0.30-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/interface/@camera.ui.DuwfK59t.0.0.30-alpha.3.js +3 -0
- package/dist/interface/@tanstack.DBBaUHTS.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{@vee-validate.0Cv0x9aN.0.0.30-alpha.0.js → @vee-validate.BRR3_tWq.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/@vue.BeJw0wEm.0.0.30-alpha.3.js +17 -0
- package/dist/interface/{@vueform.Du_niMHk.0.0.30-alpha.0.js → @vueform.Dcx-RQUw.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{@vueuse.Dv9U068T.0.0.30-alpha.0.js → @vueuse.Sz46sDez.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/Account.hmetZWTc.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Adminpanel.DxC80W0K.0.0.30-alpha.3.js +2 -0
- package/dist/interface/Appearance.BHZdWQlZ.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Backup.petPSq60.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Camera.DS7gbgwV.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Cameras.eqceAkdR.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Camview.DumV6nmv.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Config.DQ5vyHcx.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Console.CWp-LL5w.0.0.30-alpha.3.js +4 -0
- package/dist/interface/FirstSteps.DR2B1Gmx.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{NewCamera.Kn9biZIb.0.0.30-alpha.0.js → NewCamera.CpENkWIP.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/Plugin.KK2gWYUL.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Plugins.Dy1rL-Pc.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Recordings.Bny11D38.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Recordings.IdGxswmI.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Settings.D6l7BlOF.0.0.30-alpha.3.js +1 -0
- package/dist/interface/System.FIkCpF0A.0.0.30-alpha.3.js +4 -0
- package/dist/interface/User.By9sAd8k.0.0.30-alpha.3.js +1 -0
- package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.C7ZcC7dX.0.0.30-alpha.3.js +2 -0
- package/dist/interface/{VConsole.BT0UxZb1.0.0.30-alpha.0.js → VConsole.BG4nEIk8.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/VPlayer.CZqXCM-i.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{VPluginCard.Bz3GmzAE.0.0.30-alpha.0.js → VPluginCard.B_M3puzM.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{ace-builds.SRW0xGs1.0.0.30-alpha.0.js → ace-builds.D4S-MJ6b.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{apexcharts.BV8prH5x.0.0.30-alpha.0.js → apexcharts.u0duws01.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{dnd-core.BdsXoke-.0.0.30-alpha.0.js → dnd-core.C4232Xyz.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{draggabilly.D9j4BYFu.0.0.30-alpha.0.js → draggabilly.Xgwn1bT3.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{engine.io-client.di4Pt8W8.0.0.30-alpha.0.js → engine.io-client.CUastNh3.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{ev-emitter.Dxl4QoSg.0.0.30-alpha.0.js → ev-emitter.BYRnnQXb.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{fast-deep-equal.BUna8KlC.0.0.30-alpha.0.js → fast-deep-equal.CqwdqDxW.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{highlight.js.CMosnU3p.0.0.30-alpha.0.js → highlight.js.sNLmnsuC.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/index.html +34 -33
- package/dist/interface/{linkify-it.B9RFwlcp.0.0.30-alpha.0.js → linkify-it.8PrPWg7W.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/main.gxLiydtV.0.0.30-alpha.3.js +2 -0
- package/dist/interface/{markdown-it.DAiultxC.0.0.30-alpha.0.js → markdown-it.Q4_2MGLy.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{nprogress.C2KbBHcZ.0.0.30-alpha.0.js → nprogress.DQYtKLt9.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{pinia.DRjp4GU7.0.0.30-alpha.0.js → pinia.DcgsdRJU.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{plugins.Ur_7V4x8.0.0.30-alpha.0.js → plugins.DZjXmoDp.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{qrcode.DrYVb5am.0.0.30-alpha.0.js → qrcode.XqSuoGPb.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{react-dnd-touch-backend.ByHGbrKq.0.0.30-alpha.0.js → react-dnd-touch-backend.VzlzWkdX.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{rxjs.Dl5P76vZ.0.0.30-alpha.0.js → rxjs.CXnJywSk.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{socket.io-client.Cf7ABgrO.0.0.30-alpha.0.js → socket.io-client.DiiooL5k.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{socket.io-parser.DHnwqfTj.0.0.30-alpha.0.js → socket.io-parser.Dsh2ZviN.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/sw.js +1 -1
- package/dist/interface/{system.CRn9Cy3C.0.0.30-alpha.0.js → system.Bh4wNIkr.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{ui.C-XbEPHk.0.0.30-alpha.0.js → ui.B0YwbqBU.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{unidragger.zHlf1Df_.0.0.30-alpha.0.js → unidragger.DDL70rPA.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/utils.mAKpSMLY.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{v-calendar.CapJoEkJ.0.0.30-alpha.0.js → v-calendar.C8Yj7x1Q.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vee-validate.DcgOEpak.0.0.30-alpha.0.js → vee-validate.BbcoErf-.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue-i18n.D2pqkMP3.0.0.30-alpha.0.js → vue-i18n.B7m8y9GA.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue-inline-svg.DorOTPIf.0.0.30-alpha.0.js → vue-inline-svg.DC2U7Qim.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue-router.BVs4qaVs.0.0.30-alpha.0.js → vue-router.B3QeItm5.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue3-apexcharts.CBV9x5vk.0.0.30-alpha.0.js → vue3-apexcharts.DVzl7xGy.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue3-dnd.CXMddGIZ.0.0.30-alpha.0.js → vue3-dnd.76cFMD9V.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue3-toastify.DE7YmDSX.0.0.30-alpha.0.js → vue3-toastify.B-AJ7WuP.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vuetify.CYxxHEVN.0.0.30-alpha.0.js → vuetify.CYln2r6g.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/zod.DnW1_kUe.0.0.30-alpha.3.js +1 -0
- package/dist/server/bin/cameraui.js +10 -7
- package/dist/server/bin/cameraui.js.map +1 -1
- package/dist/server/bin/fork.js +2 -2
- package/dist/server/bin/fork.js.map +1 -1
- package/dist/server/bin/installer/darwin.js +1 -1
- package/dist/server/bin/installer/darwin.js.map +1 -1
- package/dist/server/bin/installer/linux.js +1 -1
- package/dist/server/bin/installer/linux.js.map +1 -1
- package/dist/server/package.json +11 -15
- package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cameras.controller.js +1 -1
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/controllers/frameWorkers.controller.js +1 -1
- package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
- package/dist/server/src/api/controllers/plugins.controller.js +1 -2
- package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
- package/dist/server/src/api/controllers/system.controller.js +1 -3
- package/dist/server/src/api/controllers/system.controller.js.map +1 -1
- package/dist/server/src/api/controllers/users.controller.js +2 -2
- package/dist/server/src/api/controllers/users.controller.js.map +1 -1
- package/dist/server/src/api/database/constants.d.ts +8 -0
- package/dist/server/src/api/database/constants.js +9 -0
- package/dist/server/src/api/database/constants.js.map +1 -0
- package/dist/server/src/api/database/index.d.ts +0 -8
- package/dist/server/src/api/database/index.js +14 -21
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migration.js +5 -4
- package/dist/server/src/api/database/migration.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +6 -6
- package/dist/server/src/api/go2rtc/api/application.js +1 -1
- package/dist/server/src/api/go2rtc/api/application.js.map +1 -1
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/plugins/logger.plugin.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +71 -71
- package/dist/server/src/api/schemas/config.schema.d.ts +6 -6
- package/dist/server/src/api/schemas/go2rtc.schema.d.ts +98 -98
- package/dist/server/src/api/schemas/users.schema.d.ts +116 -116
- package/dist/server/src/api/services/auth.service.js +1 -1
- package/dist/server/src/api/services/auth.service.js.map +1 -1
- package/dist/server/src/api/services/backup.service.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.js +1 -1
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/system.service.js +1 -1
- package/dist/server/src/api/services/system.service.js.map +1 -1
- package/dist/server/src/api/services/users.service.js +1 -1
- package/dist/server/src/api/services/users.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +2 -2
- package/dist/server/src/api/types/index.js.map +1 -1
- package/dist/server/src/api/utils/cert.js.map +1 -1
- package/dist/server/src/api/websocket/index.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.js +1 -1
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/api.d.ts +1 -7
- package/dist/server/src/api.js.map +1 -1
- package/dist/server/src/camera/controller.d.ts +4 -6
- package/dist/server/src/camera/controller.js +5 -8
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/types.d.ts +140 -13
- package/dist/server/src/camera/types.js.map +1 -1
- package/dist/server/src/decoder/index.js.map +1 -1
- package/dist/server/src/decoder/types.d.ts +1 -18
- package/dist/server/src/decoder/worker.d.ts +3 -2
- package/dist/server/src/decoder/worker.js +10 -22
- package/dist/server/src/decoder/worker.js.map +1 -1
- package/dist/server/src/go2rtc/index.js +2 -3
- package/dist/server/src/go2rtc/index.js.map +1 -1
- package/dist/server/src/main.js +3 -3
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/nats/index.d.ts +3 -4
- package/dist/server/src/nats/index.js +1 -3
- package/dist/server/src/nats/index.js.map +1 -1
- package/dist/server/src/nats/proxy/cameraDevice.d.ts +2 -2
- package/dist/server/src/nats/proxy/coreManager.d.ts +4 -2
- package/dist/server/src/nats/proxy/coreManager.js +7 -0
- package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
- package/dist/server/src/nats/proxy/deviceManager.d.ts +5 -5
- package/dist/server/src/nats/proxy/deviceManager.js +4 -2
- package/dist/server/src/nats/proxy/deviceManager.js.map +1 -1
- package/dist/server/src/nats/server.js +2 -3
- package/dist/server/src/nats/server.js.map +1 -1
- package/dist/server/src/nats/types.d.ts +19 -32
- package/dist/server/src/nats/utils.d.ts +1 -1
- package/dist/server/src/nats/websocket.js.map +1 -1
- package/dist/server/src/plugins/index.js +11 -9
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/interfaces/base.d.ts +1 -1
- package/dist/server/src/plugins/plugin.d.ts +1 -1
- package/dist/server/src/plugins/plugin.js +4 -4
- package/dist/server/src/plugins/plugin.js.map +1 -1
- package/dist/server/src/plugins/types.d.ts +36 -3
- package/dist/server/src/plugins/types.js.map +1 -1
- package/dist/server/src/plugins/worker.js +7 -16
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/services/config/constants.js +2 -2
- package/dist/server/src/services/config/constants.js.map +1 -1
- package/dist/server/src/services/config/index.d.ts +2 -0
- package/dist/server/src/services/config/index.js +10 -2
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/services/logger/index.d.ts +4 -16
- package/dist/server/src/services/logger/index.js +4 -83
- package/dist/server/src/services/logger/index.js.map +1 -1
- package/dist/server/src/services/logger/types.d.ts +8 -0
- package/dist/server/src/services/logger/types.js +2 -0
- package/dist/server/src/services/logger/types.js.map +1 -0
- package/localdeps.txt +4 -0
- package/package.json +11 -15
- package/dist/interface/@tanstack.DYQ7Jj8U.0.0.30-alpha.0.js +0 -1
- package/dist/interface/@vue.CvjRlaU6.0.0.30-alpha.0.js +0 -17
- package/dist/interface/Account.Dm2FouAU.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Adminpanel.B2Aiobnt.0.0.30-alpha.0.js +0 -2
- package/dist/interface/Appearance.EfH0tMdM.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Backup.D8SRclhB.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Camera.D-cOf4sS.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Cameras.oolxbmXU.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Camview.BHw8Pe3v.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Config.DmPTI5iz.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Console.Dq4khHFF.0.0.30-alpha.0.js +0 -4
- package/dist/interface/FirstSteps.Bo467abx.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Plugin.BLTVcTt1.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Plugins.Cp8mK__o.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Recordings.B_JIFk_G.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Recordings.gMbvwmk_.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Settings.EhHJjGrl.0.0.30-alpha.0.js +0 -1
- package/dist/interface/System.VodoK0U6.0.0.30-alpha.0.js +0 -4
- package/dist/interface/User.DpcN7DEC.0.0.30-alpha.0.js +0 -1
- package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.Br68bfQJ.0.0.30-alpha.0.js +0 -2
- package/dist/interface/VPlayer.DYua3Eh_.0.0.30-alpha.0.js +0 -1
- package/dist/interface/main.19pRAqPU.0.0.30-alpha.0.js +0 -4
- package/dist/interface/utils.BvINh1mj.0.0.30-alpha.0.js +0 -1
- package/dist/interface/zod.BaF2dDCd.0.0.30-alpha.0.js +0 -1
- package/dist/server/src/camera/device.d.ts +0 -29
- package/dist/server/src/camera/device.js +0 -20
- package/dist/server/src/camera/device.js.map +0 -1
- package/dist/server/src/camera/index.d.ts +0 -90
- package/dist/server/src/camera/index.js +0 -581
- package/dist/server/src/camera/index.js.map +0 -1
- package/dist/server/src/camera/interfaces/camera.d.ts +0 -10
- package/dist/server/src/camera/interfaces/camera.js +0 -23
- package/dist/server/src/camera/interfaces/camera.js.map +0 -1
- package/dist/server/src/camera/interfaces/prebuffer.d.ts +0 -11
- package/dist/server/src/camera/interfaces/prebuffer.js +0 -31
- package/dist/server/src/camera/interfaces/prebuffer.js.map +0 -1
- package/dist/server/src/camera/interfaces/ptz.d.ts +0 -13
- package/dist/server/src/camera/interfaces/ptz.js +0 -47
- package/dist/server/src/camera/interfaces/ptz.js.map +0 -1
- package/dist/server/src/camera/iou.d.ts +0 -2
- package/dist/server/src/camera/iou.js +0 -53
- package/dist/server/src/camera/iou.js.map +0 -1
- package/dist/server/src/camera/polygon.d.ts +0 -6
- package/dist/server/src/camera/polygon.js +0 -151
- package/dist/server/src/camera/polygon.js.map +0 -1
- package/dist/server/src/camera/streaming/peer-connection.d.ts +0 -55
- package/dist/server/src/camera/streaming/peer-connection.js +0 -203
- package/dist/server/src/camera/streaming/peer-connection.js.map +0 -1
- package/dist/server/src/camera/streaming/webrtc-connection.d.ts +0 -35
- package/dist/server/src/camera/streaming/webrtc-connection.js +0 -170
- package/dist/server/src/camera/streaming/webrtc-connection.js.map +0 -1
- package/dist/server/src/camera/streaming/werift-session.d.ts +0 -41
- package/dist/server/src/camera/streaming/werift-session.js +0 -179
- package/dist/server/src/camera/streaming/werift-session.js.map +0 -1
- package/dist/server/src/camera/videoFrame.d.ts +0 -24
- package/dist/server/src/camera/videoFrame.js +0 -104
- package/dist/server/src/camera/videoFrame.js.map +0 -1
- package/dist/server/src/index.d.ts +0 -18
- package/dist/server/src/index.js +0 -5
- package/dist/server/src/index.js.map +0 -1
- package/dist/server/src/nats/connection.d.ts +0 -17
- package/dist/server/src/nats/connection.js +0 -66
- package/dist/server/src/nats/connection.js.map +0 -1
- package/dist/server/src/nats/constants.d.ts +0 -1
- package/dist/server/src/nats/constants.js +0 -2
- package/dist/server/src/nats/constants.js.map +0 -1
- package/dist/server/src/nats/error.d.ts +0 -9
- package/dist/server/src/nats/error.js +0 -11
- package/dist/server/src/nats/error.js.map +0 -1
- package/dist/server/src/nats/messageQueue.d.ts +0 -20
- package/dist/server/src/nats/messageQueue.js +0 -132
- package/dist/server/src/nats/messageQueue.js.map +0 -1
- package/dist/server/src/nats/subscription.d.ts +0 -12
- package/dist/server/src/nats/subscription.js +0 -21
- package/dist/server/src/nats/subscription.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/child.d.ts +0 -1
- package/dist/server/src/polyglot/node/decoder/child.js +0 -644
- package/dist/server/src/polyglot/node/decoder/child.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +0 -24
- package/dist/server/src/polyglot/node/decoder/imageUtils.js +0 -205
- package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +0 -144
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +0 -65
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
- package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +0 -106
- package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +0 -107
- package/dist/server/src/polyglot/node/plugins/cameraStorage.js +0 -292
- package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/child.d.ts +0 -28
- package/dist/server/src/polyglot/node/plugins/child.js +0 -222
- package/dist/server/src/polyglot/node/plugins/child.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/configService.d.ts +0 -104
- package/dist/server/src/polyglot/node/plugins/configService.js +0 -213
- package/dist/server/src/polyglot/node/plugins/configService.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/pluginApi.d.ts +0 -35
- package/dist/server/src/polyglot/node/plugins/pluginApi.js +0 -23
- package/dist/server/src/polyglot/node/plugins/pluginApi.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/pluginLogger.d.ts +0 -18
- package/dist/server/src/polyglot/node/plugins/pluginLogger.js +0 -89
- package/dist/server/src/polyglot/node/plugins/pluginLogger.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +0 -69
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +0 -423
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.d.ts +0 -40
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js +0 -105
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +0 -47
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +0 -164
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/schema.d.ts +0 -293
- package/dist/server/src/polyglot/node/plugins/schema.js +0 -740
- package/dist/server/src/polyglot/node/plugins/schema.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/storageController.d.ts +0 -30
- package/dist/server/src/polyglot/node/plugins/storageController.js +0 -40
- package/dist/server/src/polyglot/node/plugins/storageController.js.map +0 -1
- package/dist/server/src/polyglot/python/camera/interfaces/camera.py +0 -20
- package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +0 -28
- package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +0 -38
- package/dist/server/src/polyglot/python/camera/iou.py +0 -80
- package/dist/server/src/polyglot/python/camera/polygon.py +0 -173
- package/dist/server/src/polyglot/python/camera/video_frame.py +0 -188
- package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +0 -1200
- package/dist/server/src/polyglot/python/decoder/child.py +0 -882
- package/dist/server/src/polyglot/python/decoder/image_utils.py +0 -149
- package/dist/server/src/polyglot/python/decoder/typings.py +0 -99
- package/dist/server/src/polyglot/python/plugins/camera_storage.py +0 -391
- package/dist/server/src/polyglot/python/plugins/child.py +0 -394
- package/dist/server/src/polyglot/python/plugins/config_service.py +0 -187
- package/dist/server/src/polyglot/python/plugins/constants.py +0 -1
- package/dist/server/src/polyglot/python/plugins/message_queue.py +0 -182
- package/dist/server/src/polyglot/python/plugins/plugin_api.py +0 -34
- package/dist/server/src/polyglot/python/plugins/plugin_logger.py +0 -111
- package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +0 -1599
- package/dist/server/src/polyglot/python/plugins/proxy/core_manager.py +0 -145
- package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +0 -226
- package/dist/server/src/polyglot/python/plugins/schema.py +0 -181
- package/dist/server/src/polyglot/python/plugins/storage_controller.py +0 -58
- package/dist/server/src/polyglot/python/plugins/typings.py +0 -253
- package/dist/server/src/polyglot/python/utilities/connection.py +0 -86
- package/dist/server/src/polyglot/python/utilities/json_lmdb.py +0 -19
- package/dist/server/src/polyglot/python/utilities/object_path.py +0 -195
- package/dist/server/src/polyglot/python/utilities/packer.py +0 -11
- package/dist/server/src/polyglot/python/utilities/subscriptions.py +0 -22
- package/dist/server/src/polyglot/python/utilities/task.py +0 -35
- package/dist/server/src/polyglot/python/utilities/thread.py +0 -10
- package/dist/server/src/polyglot/python/utilities/utils.py +0 -73
- package/dist/server/src/utils/ffmpeg.d.ts +0 -2
- package/dist/server/src/utils/ffmpeg.js +0 -61
- package/dist/server/src/utils/ffmpeg.js.map +0 -1
- package/dist/server/src/utils/network.d.ts +0 -12
- package/dist/server/src/utils/network.js +0 -92
- package/dist/server/src/utils/network.js.map +0 -1
- package/dist/server/src/utils/npm.d.ts +0 -4
- package/dist/server/src/utils/npm.js +0 -128
- package/dist/server/src/utils/npm.js.map +0 -1
- package/dist/server/src/utils/packer.d.ts +0 -2
- package/dist/server/src/utils/packer.js +0 -17
- package/dist/server/src/utils/packer.js.map +0 -1
- package/dist/server/src/utils/pythonInstaller.d.ts +0 -48
- package/dist/server/src/utils/pythonInstaller.js +0 -494
- package/dist/server/src/utils/pythonInstaller.js.map +0 -1
- package/dist/server/src/utils/reader.d.ts +0 -5
- package/dist/server/src/utils/reader.js +0 -41
- package/dist/server/src/utils/reader.js.map +0 -1
- package/dist/server/src/utils/subscribed.d.ts +0 -9
- package/dist/server/src/utils/subscribed.js +0 -17
- package/dist/server/src/utils/subscribed.js.map +0 -1
- package/dist/server/src/utils/utils.d.ts +0 -10
- package/dist/server/src/utils/utils.js +0 -165
- package/dist/server/src/utils/utils.js.map +0 -1
- /package/dist/interface/{@babel.l0sNRNKZ.0.0.30-alpha.0.js → @babel.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@intlify.YW_pt133.0.0.30-alpha.0.js → @intlify.YW_pt133.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@mdi.DnMbZhUH.0.0.30-alpha.0.js → @mdi.DnMbZhUH.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@popperjs.BQBsAJpH.0.0.30-alpha.0.js → @popperjs.BQBsAJpH.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.30-alpha.0.js → @react-dnd.CcwRs9xb.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@socket.io.Dkula2eQ.0.0.30-alpha.0.js → @socket.io.Dkula2eQ.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@xterm.CnserxUX.0.0.30-alpha.0.js → @xterm.-WsTvn6n.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/assets/{@vueform.0.0.30-alpha.0.h7tNX9p6.css → @vueform.0.0.30-alpha.3.h7tNX9p6.css} +0 -0
- /package/dist/interface/assets/{@xterm.0.0.30-alpha.0.CGrrDQr5.css → @xterm.0.0.30-alpha.3.CGrrDQr5.css} +0 -0
- /package/dist/interface/assets/{Account.0.0.30-alpha.0.Ce3OmKrC.css → Account.0.0.30-alpha.3.Ce3OmKrC.css} +0 -0
- /package/dist/interface/assets/{Adminpanel.0.0.30-alpha.0.CXsTAXPL.css → Adminpanel.0.0.30-alpha.3.CXsTAXPL.css} +0 -0
- /package/dist/interface/assets/{Backup.0.0.30-alpha.0.BIwaSlv3.css → Backup.0.0.30-alpha.3.BIwaSlv3.css} +0 -0
- /package/dist/interface/assets/{Camera.0.0.30-alpha.0.BDtUJ-lA.css → Camera.0.0.30-alpha.3.BDtUJ-lA.css} +0 -0
- /package/dist/interface/assets/{Cameras.0.0.30-alpha.0.Djx0F2MM.css → Cameras.0.0.30-alpha.3.Djx0F2MM.css} +0 -0
- /package/dist/interface/assets/{Camview.0.0.30-alpha.0.Ce_V-Nxj.css → Camview.0.0.30-alpha.3.Ce_V-Nxj.css} +0 -0
- /package/dist/interface/assets/{Config.0.0.30-alpha.0.k4QpWumg.css → Config.0.0.30-alpha.3.k4QpWumg.css} +0 -0
- /package/dist/interface/assets/{Console.0.0.30-alpha.0.DWrfRWs9.css → Console.0.0.30-alpha.3.DWrfRWs9.css} +0 -0
- /package/dist/interface/assets/{FirstSteps.0.0.30-alpha.0.B3-pv8-a.css → FirstSteps.0.0.30-alpha.3.B3-pv8-a.css} +0 -0
- /package/dist/interface/assets/{NewCamera.0.0.30-alpha.0.DJ3tUBT_.css → NewCamera.0.0.30-alpha.3.DJ3tUBT_.css} +0 -0
- /package/dist/interface/assets/{Plugin.0.0.30-alpha.0.BtRA6zDt.css → Plugin.0.0.30-alpha.3.BtRA6zDt.css} +0 -0
- /package/dist/interface/assets/{Plugins.0.0.30-alpha.0.Cwu0aGUO.css → Plugins.0.0.30-alpha.3.Cwu0aGUO.css} +0 -0
- /package/dist/interface/assets/{Settings.0.0.30-alpha.0.DC_-E3CR.css → Settings.0.0.30-alpha.3.DC_-E3CR.css} +0 -0
- /package/dist/interface/assets/{User.0.0.30-alpha.0.DPDcJbx8.css → User.0.0.30-alpha.3.DPDcJbx8.css} +0 -0
- /package/dist/interface/assets/{VConsole.0.0.30-alpha.0.BZT1WyS-.css → VConsole.0.0.30-alpha.3.BZT1WyS-.css} +0 -0
- /package/dist/interface/assets/{VPlayer.0.0.30-alpha.0.CZXlTn4I.css → VPlayer.0.0.30-alpha.3.CZXlTn4I.css} +0 -0
- /package/dist/interface/assets/{VPluginCard.0.0.30-alpha.0.CIL48ca_.css → VPluginCard.0.0.30-alpha.3.CIL48ca_.css} +0 -0
- /package/dist/interface/assets/{highlight.0.0.30-alpha.0.DgoK_Xib.css → highlight.0.0.30-alpha.3.DgoK_Xib.css} +0 -0
- /package/dist/interface/assets/{logo-256.0.0.30-alpha.0.BCQk9H1-.png → logo-256.0.0.30-alpha.3.BCQk9H1-.png} +0 -0
- /package/dist/interface/assets/{logo-512.0.0.30-alpha.0.DLKVOU2S.png → logo-512.0.0.30-alpha.3.DLKVOU2S.png} +0 -0
- /package/dist/interface/assets/{logo.0.0.30-alpha.0.DmEiRk0z.png → logo.0.0.30-alpha.3.DmEiRk0z.png} +0 -0
- /package/dist/interface/assets/{main.0.0.30-alpha.0.BOf8IWhK.css → main.0.0.30-alpha.3.BOf8IWhK.css} +0 -0
- /package/dist/interface/assets/{mode-json.0.0.30-alpha.0.Br7xisR1.js → mode-json.0.0.30-alpha.3.Br7xisR1.js} +0 -0
- /package/dist/interface/assets/{mode-yaml.0.0.30-alpha.0.CIYL8U3d.js → mode-yaml.0.0.30-alpha.3.CIYL8U3d.js} +0 -0
- /package/dist/interface/assets/{v-calendar.0.0.30-alpha.0.CtSuDYZU.css → v-calendar.0.0.30-alpha.3.CtSuDYZU.css} +0 -0
- /package/dist/interface/assets/{vue3-toastify.0.0.30-alpha.0.DTY1DMRs.css → vue3-toastify.0.0.30-alpha.3.DTY1DMRs.css} +0 -0
- /package/dist/interface/assets/{vuetify.0.0.30-alpha.0.Cd1awv3t.css → vuetify.0.0.30-alpha.3.Cd1awv3t.css} +0 -0
- /package/dist/interface/{axios.C-n2IhIP.0.0.30-alpha.0.js → axios.C-n2IhIP.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{compare-versions.DqEOhma6.0.0.30-alpha.0.js → compare-versions.DqEOhma6.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{dijkstrajs.D_NXgYpA.0.0.30-alpha.0.js → dijkstrajs.D_NXgYpA.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.30-alpha.0.js → engine.io-parser.BiEtp6m2.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{entities.C20TfXL6.0.0.30-alpha.0.js → entities.C20TfXL6.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{get-size.D1dS-IaP.0.0.30-alpha.0.js → get-size.D1dS-IaP.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{mdurl.k9Sl0PQj.0.0.30-alpha.0.js → mdurl.k9Sl0PQj.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{punycode.js.Dj65hjkv.0.0.30-alpha.0.js → punycode.js.Dj65hjkv.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{redux.CuxFRhX_.0.0.30-alpha.0.js → redux.CuxFRhX_.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{tslib.9k7AwCpt.0.0.30-alpha.0.js → tslib.9k7AwCpt.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{uc.micro.kMc2yuuw.0.0.30-alpha.0.js → uc.micro.kMc2yuuw.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{uuid.DvF23Exx.0.0.30-alpha.0.js → uuid.DvF23Exx.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{vue.l0sNRNKZ.0.0.30-alpha.0.js → vue.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
from contextlib import suppress
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import Any, Optional
|
|
4
|
-
from uuid import uuid4
|
|
5
|
-
|
|
6
|
-
from camera_ui_types import IceServer
|
|
7
|
-
from decoder.typings import AuthConfig
|
|
8
|
-
from message_queue import MessageQueue
|
|
9
|
-
from nats.aio.msg import Msg
|
|
10
|
-
from plugin_api import PluginAPI
|
|
11
|
-
from plugin_logger import PluginLogger
|
|
12
|
-
from pyeecui.asyncio import AsyncIOEventEmitter
|
|
13
|
-
from typings import PluginInfo, ProxyMessageStructure
|
|
14
|
-
from utilities.connection import ProxyConnection
|
|
15
|
-
from utilities.packer import unpack
|
|
16
|
-
from utilities.subscriptions import ProxySubscription
|
|
17
|
-
from utilities.task import TaskSet
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class CoreManager(AsyncIOEventEmitter):
|
|
21
|
-
def __init__(
|
|
22
|
-
self,
|
|
23
|
-
api: PluginAPI,
|
|
24
|
-
logger: PluginLogger,
|
|
25
|
-
plugin: PluginInfo,
|
|
26
|
-
proxy_endpoints: list[str],
|
|
27
|
-
auth: AuthConfig,
|
|
28
|
-
):
|
|
29
|
-
super().__init__()
|
|
30
|
-
|
|
31
|
-
self.initialized = False
|
|
32
|
-
|
|
33
|
-
self.api = api
|
|
34
|
-
self.logger = logger
|
|
35
|
-
|
|
36
|
-
self.auth = auth
|
|
37
|
-
self.proxy_endpoints = proxy_endpoints
|
|
38
|
-
self.plugin = plugin
|
|
39
|
-
|
|
40
|
-
self.subject = f"{self.plugin['id']}.coreManager"
|
|
41
|
-
self.cm_subject = "coreManager.subscriber"
|
|
42
|
-
|
|
43
|
-
self.publisher: Optional[ProxyConnection] = None
|
|
44
|
-
self.cm_publisher: Optional[ProxyConnection] = None
|
|
45
|
-
|
|
46
|
-
self.subscriber: Optional[ProxySubscription] = None
|
|
47
|
-
self.cm_subscriber: Optional[ProxySubscription] = None
|
|
48
|
-
|
|
49
|
-
self.tasks: TaskSet = TaskSet(f"{self.plugin['name']} CoreManager")
|
|
50
|
-
self.message_queue: Optional[MessageQueue] = None
|
|
51
|
-
|
|
52
|
-
# print("CoreManager", self.plugin["name"], self.dealer_id, self.subscriber_ids)
|
|
53
|
-
|
|
54
|
-
self.api.once("shutdown", self.__close)
|
|
55
|
-
|
|
56
|
-
async def init(self):
|
|
57
|
-
if self.initialized:
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
self.initialized = True
|
|
61
|
-
|
|
62
|
-
servers = [endpoint for endpoint in self.proxy_endpoints if endpoint.startswith("nats://")]
|
|
63
|
-
|
|
64
|
-
self.publisher = ProxyConnection(self.subject, servers, self.auth)
|
|
65
|
-
await self.publisher.connect()
|
|
66
|
-
|
|
67
|
-
self.cm_publisher = ProxyConnection(self.cm_subject, servers, self.auth)
|
|
68
|
-
await self.cm_publisher.connect()
|
|
69
|
-
|
|
70
|
-
self.subscriber = await self.publisher.subscribe(subject=self.subject)
|
|
71
|
-
self.message_queue = MessageQueue(
|
|
72
|
-
self.logger,
|
|
73
|
-
self.publisher,
|
|
74
|
-
self.subscriber,
|
|
75
|
-
self.__request_handler,
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
self.cm_subscriber = await self.cm_publisher.subscribe(subject=self.cm_subject)
|
|
79
|
-
self.cm_subscriber.on("message", self.__on_proxy_message)
|
|
80
|
-
|
|
81
|
-
async def get_ffmpeg_path(self) -> str:
|
|
82
|
-
return await self.__on_request("getFFmpegPath")
|
|
83
|
-
|
|
84
|
-
async def get_ice_servers(self) -> list[IceServer]:
|
|
85
|
-
return await self.__on_request("getIceServers")
|
|
86
|
-
|
|
87
|
-
async def get_server_addresses(self) -> list[str]:
|
|
88
|
-
return await self.__on_request("getServerAddresses")
|
|
89
|
-
|
|
90
|
-
def emit(self, event: str, *args: Any, **kwargs: Any) -> Any:
|
|
91
|
-
pass
|
|
92
|
-
|
|
93
|
-
async def __request_handler(self, message: ProxyMessageStructure):
|
|
94
|
-
pass
|
|
95
|
-
|
|
96
|
-
async def __emit_event(self, msg: Msg) -> None:
|
|
97
|
-
message = unpack(msg.data)
|
|
98
|
-
|
|
99
|
-
type = message.get("type")
|
|
100
|
-
data = message.get("data", {})
|
|
101
|
-
system = data.get("system", {})
|
|
102
|
-
|
|
103
|
-
if type == "systemUpdated":
|
|
104
|
-
super().emit(type, system)
|
|
105
|
-
|
|
106
|
-
async def __on_proxy_message(self, msg: Msg) -> None:
|
|
107
|
-
if not self.initialized:
|
|
108
|
-
return
|
|
109
|
-
|
|
110
|
-
self.tasks.add(self.__emit_event(msg))
|
|
111
|
-
|
|
112
|
-
async def __on_request(self, fn: str, args: list[Any] = []) -> Any:
|
|
113
|
-
if not self.message_queue:
|
|
114
|
-
raise Exception("Message queue is not initialized")
|
|
115
|
-
|
|
116
|
-
message: ProxyMessageStructure = {
|
|
117
|
-
"requestId": str(uuid4()),
|
|
118
|
-
"targetId": self.subject,
|
|
119
|
-
"targetName": self.plugin["name"],
|
|
120
|
-
"pluginId": self.plugin["id"],
|
|
121
|
-
"type": "request",
|
|
122
|
-
"proxy": "core",
|
|
123
|
-
"client": "coreFn",
|
|
124
|
-
"fn": fn,
|
|
125
|
-
"args": args,
|
|
126
|
-
"timestamp": int(datetime.now().timestamp() * 1000),
|
|
127
|
-
"timeout": 5000,
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return await self.message_queue.enqueue(message)
|
|
131
|
-
|
|
132
|
-
async def __close(self) -> None:
|
|
133
|
-
self.initialized = False
|
|
134
|
-
self.remove_all_listeners()
|
|
135
|
-
self.api.remove_listener("shutdown", self.__close)
|
|
136
|
-
|
|
137
|
-
if self.message_queue:
|
|
138
|
-
self.message_queue.abort_queue()
|
|
139
|
-
|
|
140
|
-
with suppress(Exception):
|
|
141
|
-
if self.publisher:
|
|
142
|
-
await self.publisher.close()
|
|
143
|
-
|
|
144
|
-
if self.cm_publisher:
|
|
145
|
-
await self.cm_publisher.close()
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
from contextlib import suppress
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import Any, Optional, Union, cast
|
|
4
|
-
from uuid import uuid4
|
|
5
|
-
|
|
6
|
-
from camera_ui_types import Camera, CameraConfig
|
|
7
|
-
from decoder.typings import AuthConfig
|
|
8
|
-
from message_queue import MessageQueue
|
|
9
|
-
from nats.aio.msg import Msg
|
|
10
|
-
from plugin_api import PluginAPI
|
|
11
|
-
from plugin_logger import PluginLogger
|
|
12
|
-
from pyeecui.asyncio import AsyncIOEventEmitter
|
|
13
|
-
from typings import PluginInfo, ProxyMessageStructure
|
|
14
|
-
from utilities.connection import ProxyConnection
|
|
15
|
-
from utilities.packer import unpack
|
|
16
|
-
from utilities.subscriptions import ProxySubscription
|
|
17
|
-
from utilities.task import TaskSet
|
|
18
|
-
|
|
19
|
-
from .camera_device import CameraDeviceProxy
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class DeviceManager(AsyncIOEventEmitter):
|
|
23
|
-
def __init__(
|
|
24
|
-
self,
|
|
25
|
-
api: PluginAPI,
|
|
26
|
-
logger: PluginLogger,
|
|
27
|
-
plugin: PluginInfo,
|
|
28
|
-
proxy_endpoints: list[str],
|
|
29
|
-
auth: AuthConfig,
|
|
30
|
-
):
|
|
31
|
-
super().__init__()
|
|
32
|
-
|
|
33
|
-
self.initialized = False
|
|
34
|
-
|
|
35
|
-
self.devices: dict[str, CameraDeviceProxy] = {}
|
|
36
|
-
|
|
37
|
-
self.api = api
|
|
38
|
-
self.logger = logger
|
|
39
|
-
|
|
40
|
-
self.auth = auth
|
|
41
|
-
self.proxy_endpoints = proxy_endpoints
|
|
42
|
-
self.plugin = plugin
|
|
43
|
-
|
|
44
|
-
self.subject = f"{self.plugin['id']}.deviceManager"
|
|
45
|
-
self.dm_subject = f"{self.plugin['id']}.deviceManager.subscriber"
|
|
46
|
-
|
|
47
|
-
self.publisher: Optional[ProxyConnection] = None
|
|
48
|
-
self.dm_publisher: Optional[ProxyConnection] = None
|
|
49
|
-
|
|
50
|
-
self.subscriber: Optional[ProxySubscription] = None
|
|
51
|
-
self.dm_subscriber: Optional[ProxySubscription] = None
|
|
52
|
-
|
|
53
|
-
self.tasks: TaskSet = TaskSet(f"{self.plugin['name']} DeviceManager")
|
|
54
|
-
self.message_queue: Optional[MessageQueue] = None
|
|
55
|
-
|
|
56
|
-
# print("DeviceManager", self.plugin["name"], self.dealer_id, self.subscriber_ids)
|
|
57
|
-
|
|
58
|
-
self.api.once("shutdown", self.__close)
|
|
59
|
-
|
|
60
|
-
async def init(self):
|
|
61
|
-
if self.initialized:
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
self.initialized = True
|
|
65
|
-
|
|
66
|
-
servers = [endpoint for endpoint in self.proxy_endpoints if endpoint.startswith("nats://")]
|
|
67
|
-
|
|
68
|
-
self.publisher = ProxyConnection(self.subject, servers, self.auth)
|
|
69
|
-
await self.publisher.connect()
|
|
70
|
-
|
|
71
|
-
self.dm_publisher = ProxyConnection(self.dm_subject, servers, self.auth)
|
|
72
|
-
await self.dm_publisher.connect()
|
|
73
|
-
|
|
74
|
-
self.subscriber = await self.publisher.subscribe(subject=self.subject)
|
|
75
|
-
self.message_queue = MessageQueue(
|
|
76
|
-
self.logger,
|
|
77
|
-
self.publisher,
|
|
78
|
-
self.subscriber,
|
|
79
|
-
self.__request_handler,
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
self.dm_subscriber = await self.dm_publisher.subscribe(subject=self.dm_subject)
|
|
83
|
-
self.dm_subscriber.on("message", self.__on_proxy_message)
|
|
84
|
-
|
|
85
|
-
async def get_camera_by_id(self, id: str) -> Optional[CameraDeviceProxy]:
|
|
86
|
-
camera_device = await self.__add_or_get_camera(id)
|
|
87
|
-
|
|
88
|
-
if not camera_device:
|
|
89
|
-
camera: Camera = await self.__on_request("getCameraById", [id])
|
|
90
|
-
|
|
91
|
-
if camera:
|
|
92
|
-
camera_device = await self.__add_or_get_camera(camera)
|
|
93
|
-
|
|
94
|
-
return camera_device
|
|
95
|
-
|
|
96
|
-
async def get_camera_by_name(self, name: str) -> Optional[CameraDeviceProxy]:
|
|
97
|
-
camera_device = next((device for device in self.devices.values() if device.name == name), None)
|
|
98
|
-
|
|
99
|
-
if not camera_device:
|
|
100
|
-
camera: Camera = await self.__on_request("getCameraByName", [name])
|
|
101
|
-
|
|
102
|
-
if camera:
|
|
103
|
-
camera_device = await self.__add_or_get_camera(camera)
|
|
104
|
-
|
|
105
|
-
return camera_device
|
|
106
|
-
|
|
107
|
-
async def create_camera(self, camera_config: CameraConfig) -> CameraDeviceProxy:
|
|
108
|
-
camera: Camera = await self.__on_request("createCamera", [camera_config])
|
|
109
|
-
camera_device = cast(CameraDeviceProxy, await self.__add_or_get_camera(camera))
|
|
110
|
-
return camera_device
|
|
111
|
-
|
|
112
|
-
async def remove_camera_by_name(self, name: str) -> None:
|
|
113
|
-
camera = await self.__on_request("getCameraByName", [name])
|
|
114
|
-
|
|
115
|
-
if camera:
|
|
116
|
-
await self.__on_request("removeCameraByName", [name])
|
|
117
|
-
del self.devices[camera["_id"]]
|
|
118
|
-
|
|
119
|
-
async def remove_camera_by_id(self, id: str) -> None:
|
|
120
|
-
await self.__on_request("removeCameraById", [id])
|
|
121
|
-
del self.devices[id]
|
|
122
|
-
|
|
123
|
-
def configure_cameras(self, camera_devices: list[CameraDeviceProxy]) -> None:
|
|
124
|
-
for camera_device in camera_devices:
|
|
125
|
-
self.devices[camera_device.id] = camera_device
|
|
126
|
-
|
|
127
|
-
def emit(self, event: str, *args: Any, **kwargs: Any) -> Any:
|
|
128
|
-
pass
|
|
129
|
-
|
|
130
|
-
async def __request_handler(self, message: ProxyMessageStructure):
|
|
131
|
-
pass
|
|
132
|
-
|
|
133
|
-
async def __emit_event(self, msg: Msg) -> None:
|
|
134
|
-
message = unpack(msg.data)
|
|
135
|
-
|
|
136
|
-
type = message.get("type")
|
|
137
|
-
data = message.get("data", {})
|
|
138
|
-
camera = data.get("camera")
|
|
139
|
-
extension = data.get("extension")
|
|
140
|
-
|
|
141
|
-
if type == "cameraSelected":
|
|
142
|
-
camera_device = await self.__add_or_get_camera(camera)
|
|
143
|
-
|
|
144
|
-
super().emit(type, camera_device, extension)
|
|
145
|
-
elif type == "cameraDeselected":
|
|
146
|
-
camera_device = self.devices.get(camera["_id"])
|
|
147
|
-
|
|
148
|
-
if camera_device:
|
|
149
|
-
await camera_device.cleanup()
|
|
150
|
-
|
|
151
|
-
del self.devices[camera["_id"]]
|
|
152
|
-
|
|
153
|
-
super().emit(type, camera["_id"], extension)
|
|
154
|
-
|
|
155
|
-
async def __on_proxy_message(self, msg: Msg) -> None:
|
|
156
|
-
if not self.initialized:
|
|
157
|
-
return
|
|
158
|
-
|
|
159
|
-
self.tasks.add(self.__emit_event(msg))
|
|
160
|
-
|
|
161
|
-
async def __on_request(self, fn: str, args: list[Any] = []) -> Any:
|
|
162
|
-
if not self.message_queue:
|
|
163
|
-
raise Exception("Message queue is not initialized")
|
|
164
|
-
|
|
165
|
-
message: ProxyMessageStructure = {
|
|
166
|
-
"requestId": str(uuid4()),
|
|
167
|
-
"targetId": self.subject,
|
|
168
|
-
"targetName": self.plugin["name"],
|
|
169
|
-
"pluginId": self.plugin["id"],
|
|
170
|
-
"type": "request",
|
|
171
|
-
"proxy": "device",
|
|
172
|
-
"client": "deviceFn",
|
|
173
|
-
"fn": fn,
|
|
174
|
-
"args": args,
|
|
175
|
-
"timestamp": int(datetime.now().timestamp() * 1000),
|
|
176
|
-
"timeout": 5000,
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return await self.message_queue.enqueue(message)
|
|
180
|
-
|
|
181
|
-
async def __add_or_get_camera(self, camera_or_id: Union[Camera, str]) -> Optional[CameraDeviceProxy]:
|
|
182
|
-
camera_device: Optional[CameraDeviceProxy] = None
|
|
183
|
-
|
|
184
|
-
if isinstance(camera_or_id, str):
|
|
185
|
-
id = camera_or_id
|
|
186
|
-
|
|
187
|
-
camera_device: Optional[CameraDeviceProxy] = next(
|
|
188
|
-
(device for device in self.devices.values() if device.id == id or device.name == id),
|
|
189
|
-
None,
|
|
190
|
-
)
|
|
191
|
-
else:
|
|
192
|
-
camera = camera_or_id
|
|
193
|
-
|
|
194
|
-
if camera["_id"] in self.devices:
|
|
195
|
-
camera_device = self.devices[camera["_id"]]
|
|
196
|
-
else:
|
|
197
|
-
camera_device = CameraDeviceProxy(
|
|
198
|
-
self.api,
|
|
199
|
-
self.logger,
|
|
200
|
-
camera,
|
|
201
|
-
self.plugin,
|
|
202
|
-
self.proxy_endpoints,
|
|
203
|
-
self.auth,
|
|
204
|
-
)
|
|
205
|
-
|
|
206
|
-
self.devices[camera["_id"]] = camera_device
|
|
207
|
-
|
|
208
|
-
if camera_device:
|
|
209
|
-
await camera_device.init()
|
|
210
|
-
|
|
211
|
-
return camera_device
|
|
212
|
-
|
|
213
|
-
async def __close(self) -> None:
|
|
214
|
-
self.initialized = False
|
|
215
|
-
self.remove_all_listeners()
|
|
216
|
-
self.api.remove_listener("shutdown", self.__close)
|
|
217
|
-
|
|
218
|
-
if self.message_queue:
|
|
219
|
-
self.message_queue.abort_queue()
|
|
220
|
-
|
|
221
|
-
with suppress(Exception):
|
|
222
|
-
if self.publisher:
|
|
223
|
-
await self.publisher.close()
|
|
224
|
-
|
|
225
|
-
if self.dm_publisher:
|
|
226
|
-
await self.dm_publisher.close()
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
from typing import Any, cast
|
|
3
|
-
|
|
4
|
-
from camera_ui_types import (
|
|
5
|
-
JsonSchema,
|
|
6
|
-
JsonSchemaForm,
|
|
7
|
-
RootSchema,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def config_path_to_schema_path(config_path: str) -> str:
|
|
12
|
-
"""
|
|
13
|
-
Converts a configuration path to a schema path by handling array indices and nested properties.
|
|
14
|
-
|
|
15
|
-
This function transforms the config path to match the structure expected by a JSON schema. For instance, converting array
|
|
16
|
-
indices and adding 'properties' keywords as needed to represent the hierarchical structure of the schema.
|
|
17
|
-
|
|
18
|
-
:param config_path: A dot-separated path string representing the location of a configuration item.
|
|
19
|
-
:return: A dot-separated path string adjusted to align with JSON schema structure.
|
|
20
|
-
"""
|
|
21
|
-
path_parts = config_path.split(".")
|
|
22
|
-
schema_path_parts: list[str] = []
|
|
23
|
-
|
|
24
|
-
for index, part in enumerate(path_parts):
|
|
25
|
-
is_numeric_index = bool(re.match(r"^\d+$", part))
|
|
26
|
-
is_last_part = index == len(path_parts) - 1
|
|
27
|
-
|
|
28
|
-
if is_numeric_index:
|
|
29
|
-
schema_path_parts.extend(["items", "properties"])
|
|
30
|
-
else:
|
|
31
|
-
schema_path_parts.append(part)
|
|
32
|
-
if not is_last_part and not re.match(r"^\d+$", path_parts[index + 1]):
|
|
33
|
-
schema_path_parts.append("properties")
|
|
34
|
-
|
|
35
|
-
return ".".join(schema_path_parts)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def generate_json_from_root_schema(
|
|
39
|
-
root_schema: RootSchema,
|
|
40
|
-
) -> dict[str, Any]:
|
|
41
|
-
"""
|
|
42
|
-
Generates a default JSON object based on the provided root schema. This function iterates through the schema's properties,
|
|
43
|
-
creating a nested JSON object that matches the structure of the schema with default values where specified.
|
|
44
|
-
|
|
45
|
-
:param root_schema: The root schema object which defines the structure and default values for the JSON object.
|
|
46
|
-
:return: A JSON object that conforms to the provided schema.
|
|
47
|
-
"""
|
|
48
|
-
json_object: dict[str, Any] = {}
|
|
49
|
-
|
|
50
|
-
for key, json_schema in root_schema["schema"].items():
|
|
51
|
-
json_object[key] = generate_json_from_schema(json_schema)
|
|
52
|
-
|
|
53
|
-
return json_object
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def generate_json_from_schema(
|
|
57
|
-
json_schema: JsonSchema,
|
|
58
|
-
) -> Any:
|
|
59
|
-
"""
|
|
60
|
-
Generates JSON data based on a single schema definition. Depending on the schema type, this may generate a string, number,
|
|
61
|
-
boolean, object, or array, incorporating default values and nested structures as defined in the schema.
|
|
62
|
-
|
|
63
|
-
:param json_schema: The JSON schema from which to generate data.
|
|
64
|
-
:return: Generated JSON data that conforms to the specified schema.
|
|
65
|
-
"""
|
|
66
|
-
schema_type = json_schema.get("type")
|
|
67
|
-
|
|
68
|
-
if schema_type in ["string", "number", "boolean"]:
|
|
69
|
-
if "enum" in json_schema:
|
|
70
|
-
if json_schema.get("multiple"):
|
|
71
|
-
return [json_schema.get("defaultValue")] if "defaultValue" in json_schema else []
|
|
72
|
-
else:
|
|
73
|
-
return json_schema.get(
|
|
74
|
-
"defaultValue",
|
|
75
|
-
json_schema["enum"][0] if json_schema.get("required", False) else None,
|
|
76
|
-
)
|
|
77
|
-
else:
|
|
78
|
-
return json_schema.get("defaultValue")
|
|
79
|
-
elif schema_type == "object":
|
|
80
|
-
properties = json_schema.get("properties")
|
|
81
|
-
if properties:
|
|
82
|
-
return {k: generate_json_from_schema(v) for k, v in properties.items()}
|
|
83
|
-
return {}
|
|
84
|
-
elif schema_type == "array":
|
|
85
|
-
items = json_schema.get("items")
|
|
86
|
-
if items:
|
|
87
|
-
return [generate_json_from_schema(items)]
|
|
88
|
-
return []
|
|
89
|
-
else:
|
|
90
|
-
return None
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def get_value_by_path(obj: dict[str, Any], path: str) -> Any:
|
|
94
|
-
"""
|
|
95
|
-
Retrieves a value from a nested object or a list based on a dot-separated path. If the path includes indices for accessing
|
|
96
|
-
array elements, these are handled accordingly. If any part of the path is not found, None is returned.
|
|
97
|
-
|
|
98
|
-
:param obj: The object or list from which to retrieve the value.
|
|
99
|
-
:param path: A dot-separated path string representing the location of the item.
|
|
100
|
-
:return: The value at the specified path, or None if the path is not found.
|
|
101
|
-
"""
|
|
102
|
-
|
|
103
|
-
keys: list[str] = []
|
|
104
|
-
for key in path.split("."):
|
|
105
|
-
if "[" in key:
|
|
106
|
-
path_key, index = key.split("[")
|
|
107
|
-
keys.append(path_key)
|
|
108
|
-
keys.append(index[:-1])
|
|
109
|
-
else:
|
|
110
|
-
keys.append(key)
|
|
111
|
-
|
|
112
|
-
current = obj
|
|
113
|
-
for key in keys:
|
|
114
|
-
if current is None:
|
|
115
|
-
return None
|
|
116
|
-
current = current.get(key)
|
|
117
|
-
|
|
118
|
-
return current
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def remove_functions_from_schema_form(
|
|
122
|
-
schema_form: JsonSchemaForm,
|
|
123
|
-
) -> JsonSchemaForm:
|
|
124
|
-
"""
|
|
125
|
-
Removes 'onSet' and 'onGet' functions from a schema form, making it suitable for serialization or scenarios where these
|
|
126
|
-
executable functions should not be included. This is particularly useful for preparing a schema for transmission over a
|
|
127
|
-
network or storing in a format that does not support functions.
|
|
128
|
-
|
|
129
|
-
:param schema_form: The schema form from which to remove functions.
|
|
130
|
-
:return: A new schema form with the functions removed.
|
|
131
|
-
"""
|
|
132
|
-
filtered_schema_form: JsonSchemaForm = {}
|
|
133
|
-
|
|
134
|
-
for key, json_schema in schema_form.items():
|
|
135
|
-
filtered_schema_form[key] = remove_functions_from_schema(json_schema)
|
|
136
|
-
|
|
137
|
-
return filtered_schema_form
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def remove_functions_from_schema(
|
|
141
|
-
json_schema: JsonSchema,
|
|
142
|
-
) -> JsonSchema:
|
|
143
|
-
"""
|
|
144
|
-
Similar to 'remove_functions_from_schema_form', but operates on a single schema object. It removes 'onSet' and 'onGet'
|
|
145
|
-
functions if present.
|
|
146
|
-
|
|
147
|
-
:param json_schema: The individual schema from which to remove functions.
|
|
148
|
-
:return: A new schema with the functions removed.
|
|
149
|
-
"""
|
|
150
|
-
json_schema_items = cast(dict[str, Any], json_schema.items()) # type: ignore
|
|
151
|
-
filtered_schema = cast(JsonSchema, {k: v for k, v in json_schema_items if k not in ["onSet", "onGet"]})
|
|
152
|
-
|
|
153
|
-
if filtered_schema["type"] == "object" and "properties" in filtered_schema:
|
|
154
|
-
filtered_schema["properties"] = remove_functions_from_schema_form(filtered_schema["properties"])
|
|
155
|
-
elif filtered_schema["type"] == "array" and "items" in filtered_schema:
|
|
156
|
-
filtered_schema["items"] = remove_functions_from_schema(filtered_schema["items"])
|
|
157
|
-
|
|
158
|
-
return filtered_schema
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def schema_path_to_config_path(schema_path: str) -> str:
|
|
162
|
-
"""
|
|
163
|
-
Converts a schema path back to a configuration path by removing 'properties' and 'items' keywords, effectively reversing
|
|
164
|
-
the operation performed by 'config_path_to_schema_path'. This is useful for mapping a location within a schema to a
|
|
165
|
-
corresponding location in a configuration object or file.
|
|
166
|
-
|
|
167
|
-
:param schema_path: A dot-separated path string representing the location within a schema.
|
|
168
|
-
:return: A dot-separated path string representing the corresponding location within a configuration.
|
|
169
|
-
"""
|
|
170
|
-
path_parts = schema_path.split(".")
|
|
171
|
-
config_path_parts: list[str] = []
|
|
172
|
-
|
|
173
|
-
for part in path_parts:
|
|
174
|
-
if part != "properties" and part != "items":
|
|
175
|
-
is_numeric_index = bool(re.match(r"^\d+$", part))
|
|
176
|
-
if is_numeric_index:
|
|
177
|
-
config_path_parts.append(f"[{part}]")
|
|
178
|
-
else:
|
|
179
|
-
config_path_parts.append(part)
|
|
180
|
-
|
|
181
|
-
return ".".join(config_path_parts)
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
from typing import Any, Literal, Optional
|
|
2
|
-
|
|
3
|
-
from camera_storage import CameraStorage
|
|
4
|
-
from camera_ui_types import JsonSchemaForm
|
|
5
|
-
from lmdbm import Lmdb
|
|
6
|
-
from plugin_api import PluginAPI
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class StorageController:
|
|
10
|
-
def __init__(self, api: PluginAPI, plugin_db: Lmdb[Literal["config"], dict[str, Any]]) -> None:
|
|
11
|
-
self.__api = api
|
|
12
|
-
self.__camera_storages: dict[str, CameraStorage] = {}
|
|
13
|
-
self.__plugin_db = plugin_db
|
|
14
|
-
|
|
15
|
-
def create_camera_storage(
|
|
16
|
-
self,
|
|
17
|
-
instance: Any,
|
|
18
|
-
camera_id: str,
|
|
19
|
-
schema: Optional[JsonSchemaForm] = None,
|
|
20
|
-
) -> CameraStorage:
|
|
21
|
-
"""
|
|
22
|
-
Creates or retrieves an existing camera storage instance for the specified camera ID. If a storage instance does not already exist, it is initialized and stored.
|
|
23
|
-
|
|
24
|
-
:param instance: The plugin instance associated with this camera storage.
|
|
25
|
-
:param camera_id: A unique identifier for the camera.
|
|
26
|
-
:param schema: The JSON schema form defining the data structure for this camera's storage.
|
|
27
|
-
:return: An instance of CameraStorage for the specified camera.
|
|
28
|
-
"""
|
|
29
|
-
if schema is None:
|
|
30
|
-
schema = {}
|
|
31
|
-
|
|
32
|
-
camera_storage = self.__camera_storages.get(camera_id) or CameraStorage(
|
|
33
|
-
self.__api, self.__plugin_db, instance, camera_id, schema
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
camera_storage.initializeStorage()
|
|
37
|
-
|
|
38
|
-
self.__camera_storages[camera_id] = camera_storage
|
|
39
|
-
|
|
40
|
-
return camera_storage
|
|
41
|
-
|
|
42
|
-
def get_camera_storage(self, camera_id: str) -> Optional[CameraStorage]:
|
|
43
|
-
"""
|
|
44
|
-
Retrieves a camera storage instance for the specified camera ID, if one exists.
|
|
45
|
-
|
|
46
|
-
:param camera_id: The unique identifier for the camera whose storage instance is being requested.
|
|
47
|
-
:return: The CameraStorage instance for the specified camera, or None if no such instance exists.
|
|
48
|
-
"""
|
|
49
|
-
return self.__camera_storages.get(camera_id)
|
|
50
|
-
|
|
51
|
-
def remove_camera_storage(self, camera_id: str) -> None:
|
|
52
|
-
"""
|
|
53
|
-
Removes the camera storage instance associated with the specified camera ID, if it exists.
|
|
54
|
-
|
|
55
|
-
:param camera_id: The unique identifier for the camera whose storage instance should be removed.
|
|
56
|
-
"""
|
|
57
|
-
if camera_id in self.__camera_storages:
|
|
58
|
-
del self.__camera_storages[camera_id]
|