44
55import type { Router , Response } from 'express' ;
66import type { AuthenticatedRequest } from '../auth-middleware' ;
7- import { CameraStatusResponse , StandardAPIResponse } from '../../types/web-api.types' ;
7+ import type { CameraStatusResponse , StandardAPIResponse } from '../../types/web-api.types' ;
88import { toAppError } from '../../../utils/error.utils' ;
99import { resolveContext , sendErrorResponse , type RouteDependencies } from './route-helpers' ;
1010
@@ -20,10 +20,25 @@ export function registerCameraRoutes(router: Router, deps: RouteDependencies): v
2020 ) ;
2121 }
2222
23- const isAvailable = deps . backendManager . isFeatureAvailable (
24- contextResult . contextId ,
25- 'camera'
23+ const { contextId, context } = contextResult ;
24+ const features = deps . backendManager . getFeatures ( contextId ) ;
25+ if ( ! features ) {
26+ return sendErrorResponse < StandardAPIResponse > (
27+ res ,
28+ 500 ,
29+ 'Failed to get printer features'
30+ ) ;
31+ }
32+
33+ const { resolveCameraConfig, getCameraUserConfig } = await import (
34+ '../../../utils/camera-utils'
2635 ) ;
36+ const cameraConfig = resolveCameraConfig ( {
37+ printerIpAddress : context . printerDetails . IPAddress ,
38+ printerFeatures : features ,
39+ userConfig : getCameraUserConfig ( contextId )
40+ } ) ;
41+ const isAvailable = cameraConfig . isAvailable ;
2742
2843 const response : CameraStatusResponse = {
2944 available : isAvailable ,
@@ -97,7 +112,7 @@ export function registerCameraRoutes(router: Router, deps: RouteDependencies): v
97112 }
98113
99114 let streamStatus = rtspStreamService . getStreamStatus ( contextId ) ;
100- if ( ! streamStatus ) {
115+ if ( ! streamStatus || streamStatus . rtspUrl !== cameraConfig . streamUrl ) {
101116 try {
102117 const { rtspFrameRate, rtspQuality } = context . printerDetails ;
103118 await rtspStreamService . setupStream ( contextId , cameraConfig . streamUrl , {
@@ -131,7 +146,7 @@ export function registerCameraRoutes(router: Router, deps: RouteDependencies): v
131146 const cameraProxyService = getCameraProxyService ( ) ;
132147 let status = cameraProxyService . getStatusForContext ( contextId ) ;
133148
134- if ( ! status ) {
149+ if ( ! status || status . sourceUrl !== cameraConfig . streamUrl ) {
135150 try {
136151 await cameraProxyService . setStreamUrl ( contextId , cameraConfig . streamUrl ) ;
137152 status = cameraProxyService . getStatusForContext ( contextId ) ;
0 commit comments