@@ -168,64 +168,7 @@ const deleteThisCamera = (cameraName: string) => {
168168    }); 
169169}; 
170170
171- const   camerasMatch =  (camera1 :  PVCameraInfo , camera2 :  PVCameraInfo ) =>  {
172-   if  (camera1 .PVUsbCameraInfo  &&  camera2 .PVUsbCameraInfo ) 
173-     return  ( 
174-       camera1 .PVUsbCameraInfo .name  ===  camera2 .PVUsbCameraInfo .name  &&  
175-       camera1 .PVUsbCameraInfo .vendorId  ===  camera2 .PVUsbCameraInfo .vendorId  &&  
176-       camera1 .PVUsbCameraInfo .productId  ===  camera2 .PVUsbCameraInfo .productId  &&  
177-       camera1 .PVUsbCameraInfo .uniquePath  ===  camera2 .PVUsbCameraInfo .uniquePath  
178-     ); 
179-   else  if  (camera1 .PVCSICameraInfo  &&  camera2 .PVCSICameraInfo ) 
180-     return  ( 
181-       camera1 .PVCSICameraInfo .uniquePath  ===  camera2 .PVCSICameraInfo .uniquePath  &&  
182-       camera1 .PVCSICameraInfo .baseName  ===  camera2 .PVCSICameraInfo .baseName  
183-     ); 
184-   else  if  (camera1 .PVFileCameraInfo  &&  camera2 .PVFileCameraInfo ) 
185-     return  ( 
186-       camera1 .PVFileCameraInfo .uniquePath  ===  camera2 .PVFileCameraInfo .uniquePath  &&  
187-       camera1 .PVFileCameraInfo .name  ===  camera2 .PVFileCameraInfo .name  
188-     ); 
189-   else  return  false ; 
190- }; 
191- 
192- const   cameraInfoFor =  (camera :  PVCameraInfo  |  null ):  PVUsbCameraInfo  |  PVCSICameraInfo  |  PVFileCameraInfo  |  any  =>  {
193-   if  (! camera ) return  null ; 
194-   if  (camera .PVUsbCameraInfo ) { 
195-     return  camera .PVUsbCameraInfo ; 
196-   } 
197-   if  (camera .PVCSICameraInfo ) { 
198-     return  camera .PVCSICameraInfo ; 
199-   } 
200-   if  (camera .PVFileCameraInfo ) { 
201-     return  camera .PVFileCameraInfo ; 
202-   } 
203-   return  {}; 
204- }; 
205- 
206- /** 
207-  * Find the PVCameraInfo currently occupying the same uniquepath as the the given module 
208-  */  
209- const   getMatchedDevice =  (info :  PVCameraInfo  |  undefined ):  PVCameraInfo  =>  {
210-   if  (! info ) { 
211-     return  { 
212-       PVFileCameraInfo: undefined , 
213-       PVCSICameraInfo: undefined , 
214-       PVUsbCameraInfo: undefined  
215-     }; 
216-   } 
217-   return  ( 
218-     useStateStore ().vsmState .allConnectedCameras .find ( 
219-       (it ) =>  cameraInfoFor (it ).uniquePath  ===  cameraInfoFor (info ).uniquePath  
220-     ) ||  { 
221-       PVFileCameraInfo : undefined , 
222-       PVCSICameraInfo : undefined , 
223-       PVUsbCameraInfo : undefined  
224-     } 
225-   ); 
226- }; 
227- 
228- const   cameraCononected =  (uniquePath :  string ):  boolean  =>  {
171+ const   cameraConnected =  (uniquePath :  string ):  boolean  =>  {
229172  return  ( 
230173    useStateStore ().vsmState .allConnectedCameras .find ((it ) =>  cameraInfoFor (it ).uniquePath  ===  uniquePath ) !==  undefined  
231174  ); 
@@ -252,8 +195,8 @@ const activeVisionModules = computed(() =>
252195    //  Display connected cameras first 
253196    .sort ( 
254197      (first , second ) =>  
255-         (cameraCononected (cameraInfoFor (second .matchedCameraInfo ).uniquePath ) ?  1  :  0 ) -  
256-         (cameraCononected (cameraInfoFor (first .matchedCameraInfo ).uniquePath ) ?  1  :  0 ) 
198+         (cameraConnected (cameraInfoFor (second .matchedCameraInfo ).uniquePath ) ?  1  :  0 ) -  
199+         (cameraConnected (cameraInfoFor (first .matchedCameraInfo ).uniquePath ) ?  1  :  0 ) 
257200    ) 
258201); 
259202
@@ -274,6 +217,45 @@ const setCameraDeleting = (camera: UiCameraConfiguration | WebsocketCameraSettin
274217  cameraToDelete .value  =  camera ; 
275218}; 
276219const   yesDeleteMySettingsText =  ref (" "  );
220+ 
221+ /** 
222+  * Get the connection-type-specific camera info from the given PVCameraInfo object. 
223+  */  
224+ const   cameraInfoFor =  (camera :  PVCameraInfo  |  null ):  PVUsbCameraInfo  |  PVCSICameraInfo  |  PVFileCameraInfo  |  any  =>  {
225+   if  (! camera ) return  null ; 
226+   if  (camera .PVUsbCameraInfo ) { 
227+     return  camera .PVUsbCameraInfo ; 
228+   } 
229+   if  (camera .PVCSICameraInfo ) { 
230+     return  camera .PVCSICameraInfo ; 
231+   } 
232+   if  (camera .PVFileCameraInfo ) { 
233+     return  camera .PVFileCameraInfo ; 
234+   } 
235+   return  {}; 
236+ }; 
237+ 
238+ /** 
239+  * Find the PVCameraInfo currently occupying the same uniquePath as the the given module 
240+  */  
241+ const   getMatchedDevice =  (info :  PVCameraInfo  |  undefined ):  PVCameraInfo  =>  {
242+   if  (! info ) { 
243+     return  { 
244+       PVFileCameraInfo: undefined , 
245+       PVCSICameraInfo: undefined , 
246+       PVUsbCameraInfo: undefined  
247+     }; 
248+   } 
249+   return  ( 
250+     useStateStore ().vsmState .allConnectedCameras .find ( 
251+       (it ) =>  cameraInfoFor (it ).uniquePath  ===  cameraInfoFor (info ).uniquePath  
252+     ) ||  { 
253+       PVFileCameraInfo : undefined , 
254+       PVCSICameraInfo : undefined , 
255+       PVUsbCameraInfo : undefined  
256+     } 
257+   ); 
258+ }; 
277259 </script >
278260
279261<template >
@@ -290,14 +272,11 @@ const yesDeleteMySettingsText = ref("");
290272      >
291273        <v-card  color =" surface"   class =" rounded-12"  >
292274          <v-card-title >{{ cameraInfoFor(module.matchedCameraInfo).name }}</v-card-title >
293-           <v-card-subtitle  v-if =" !cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath)" 
275+           <v-card-subtitle  v-if =" !cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath)" 
294276            >Status: <span  class =" inactive-status"  >Disconnected</span ></v-card-subtitle 
295277          >
296278          <v-card-subtitle 
297-             v-else-if =" 
298-               cameraCononected(cameraInfoFor(module.matchedCameraInfo).uniquePath) && 
299-               camerasMatch(getMatchedDevice(module.matchedCameraInfo), module.matchedCameraInfo) 
300-             "  
279+             v-else-if =" cameraConnected(cameraInfoFor(module.matchedCameraInfo).uniquePath) && !module.mismatch" 
301280            >Status: <span  class =" active-status"  >Active</span ></v-card-subtitle 
302281          >
303282          <v-card-subtitle  v-else >Status: <span  class =" mismatch-status"  >Mismatch</span ></v-card-subtitle >
@@ -306,7 +285,7 @@ const yesDeleteMySettingsText = ref("");
306285              <tbody >
307286                <tr 
308287                  v-if =" 
309-                     cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath) && 
288+                     cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath) && 
310289                    useStateStore().backendResults[module.uniqueName] 
311290                  "  
312291                >
@@ -348,7 +327,7 @@ const yesDeleteMySettingsText = ref("");
348327              </tbody >
349328            </v-table >
350329            <div 
351-               v-if =" cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath)" 
330+               v-if =" cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath)" 
352331              :id =" `stream-container-${index}`" 
353332              class =" d-flex flex-column justify-center align-center mt-3" 
354333              style =" height  : 250px  " 
@@ -370,7 +349,7 @@ const yesDeleteMySettingsText = ref("");
370349                  @click =" 
371350                    setCameraView( 
372351                      module.matchedCameraInfo, 
373-                       cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath) 
352+                       cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath) 
374353                    ) 
375354                  "  
376355                >
@@ -441,7 +420,7 @@ const yesDeleteMySettingsText = ref("");
441420                </tr >
442421                <tr >
443422                  <td >Connected</td >
444-                   <td >{{ cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath) }}</td >
423+                   <td >{{ cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath) }}</td >
445424                </tr >
446425              </tbody >
447426            </v-table >
@@ -456,7 +435,7 @@ const yesDeleteMySettingsText = ref("");
456435                  @click =" 
457436                    setCameraView( 
458437                      module.matchedCameraInfo, 
459-                       cameraCononected (cameraInfoFor(module.matchedCameraInfo).uniquePath) 
438+                       cameraConnected (cameraInfoFor(module.matchedCameraInfo).uniquePath) 
460439                    ) 
461440                  "  
462441                >
@@ -562,7 +541,13 @@ const yesDeleteMySettingsText = ref("");
562541        <v-card-text  v-if =" !viewingCamera[1]"  >
563542          <PvCameraInfoCard  :camera =" viewingCamera[0]"   />
564543        </v-card-text >
565-         <v-card-text  v-else-if =" !camerasMatch(getMatchedDevice(viewingCamera[0]), viewingCamera[0])"  >
544+         <v-card-text 
545+           v-else-if =" 
546+             activeVisionModules.find( 
547+               (it) => cameraInfoFor(it.matchedCameraInfo).uniquePath === cameraInfoFor(viewingCamera[0]).uniquePath 
548+             )?.mismatch 
549+           "  
550+         >
566551          <v-alert 
567552            class =" mb-3" 
568553            color =" buttonActive" 
0 commit comments