Skip to content

Commit 859c7d6

Browse files
committed
Fix #15 - viscaIP not refreshed
1 parent e63aae7 commit 859c7d6

6 files changed

Lines changed: 38 additions & 40 deletions

File tree

release/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "crewtimer-video-recorder",
3-
"version": "1.0.15",
3+
"version": "1.0.16",
44
"description": "An NDI video recorder for use with CrewTimer Video Review",
55
"license": "MIT",
66
"author": {

src/renderer/doc/WhatsNew.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
### Version 1.0.15
1+
#### Version 1.0.16
22

33
- Assist with identifying Camera IP Address
4+
5+
#### Version 1.0.15
6+
47
- Add icon to open camera web page
58
- Add focus assistance metric
69
- Support multiple recorders on the network (Start, Finish, etc)

src/renderer/recorder/CameraMonitor.tsx

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import { UseDatum } from 'react-usedatum';
33
import { queryCameraList } from './RecorderApi';
44
import { showErrorDialog } from '../components/ErrorDialog';
55
import { useIsRecording, useRecordingProps } from './RecorderData';
6-
import { setViscaIP, useViscaIP } from '../visca/ViscaState';
7-
import { sendViscaCommand } from '../visca/ViscaAPI';
6+
import { useViscaIP } from '../visca/ViscaState';
87

98
export const [useCameraList, setCameraList] = UseDatum<
109
{ name: string; address: string }[]
1110
>([]);
1211

1312
export const CameraMonitor = () => {
1413
const [isRecording] = useIsRecording();
15-
const [viscaIP] = useViscaIP();
1614
const [recordingProps] = useRecordingProps();
15+
const [cameraList] = useCameraList();
16+
const [, setViscaIP] = useViscaIP();
1717

1818
/** Periodically query for the available NDI cameras */
1919
useEffect(() => {
@@ -33,28 +33,30 @@ export const CameraMonitor = () => {
3333
return () => clearInterval(timer);
3434
}, [isRecording]);
3535

36-
/** Periodically send a VISCA Command to detect camera connection issues */
3736
useEffect(() => {
38-
if (viscaIP !== recordingProps.networkIP) {
39-
setViscaIP(recordingProps.networkIP);
40-
return undefined;
41-
}
42-
if (!viscaIP) {
43-
return undefined;
37+
// Keep the camera IP address in sync with the selected camera
38+
const camera = cameraList.find(
39+
(c) => c.name === recordingProps.networkCamera,
40+
);
41+
if (camera) {
42+
setViscaIP(camera.address);
4443
}
44+
}, [cameraList, recordingProps.networkCamera, setViscaIP]);
4545

46-
// const monitor = () => {
47-
// sendViscaCommand({ type: 'AUTO_FOCUS_VALUE' })
48-
// .then(() => {
49-
// return true;
50-
// })
51-
// .catch(() => {});
52-
// };
53-
// monitor();
54-
// const timer = setInterval(monitor, 5000);
55-
// return () => clearInterval(timer);
56-
return undefined;
57-
}, [recordingProps.networkIP, viscaIP]);
46+
/** Periodically send a VISCA Command to detect camera connection issues */
47+
// useEffect(() => {
48+
// // const monitor = () => {
49+
// // sendViscaCommand({ type: 'AUTO_FOCUS_VALUE' })
50+
// // .then(() => {
51+
// // return true;
52+
// // })
53+
// // .catch(() => {});
54+
// // };
55+
// // monitor();
56+
// // const timer = setInterval(monitor, 5000);
57+
// // return () => clearInterval(timer);
58+
// return undefined;
59+
// }, [viscaIP]);
5860

5961
// eslint-disable-next-line react/jsx-no-useless-fragment
6062
return <></>;

src/renderer/recorder/RecorderConfig.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import RGBAImageCanvas from '../components/RGBAImageCanvas';
2323
import { showErrorDialog } from '../components/ErrorDialog';
2424
import InfoPopup from '../components/InfoPopup';
2525
import RecorderTips from './RecorderTips';
26-
import { getViscaIP, useViscaIP } from '../visca/ViscaState';
26+
import { useViscaIP } from '../visca/ViscaState';
2727
import { useCameraList } from './CameraMonitor';
2828
import { ViscaPortSelector } from '../visca/ViscaPortSelector';
2929
import { updateSettings } from './RecorderApi';
@@ -51,7 +51,7 @@ const RecorderConfig: React.FC = () => {
5151
const [recordingProps, setRecordingProps] = useRecordingProps();
5252
const [, setRecordingPropsPending] = useRecordingPropsPending();
5353
const [cameraList] = useCameraList();
54-
const [, setViscaIP] = useViscaIP();
54+
const [viscaIP] = useViscaIP();
5555
const [wpList] = useWaypointList();
5656
const { waypoint } = recordingProps;
5757
const waypointList = [...wpList];
@@ -95,19 +95,11 @@ const RecorderConfig: React.FC = () => {
9595
};
9696

9797
const handleCameraChange = (event: React.ChangeEvent<HTMLInputElement>) => {
98-
const networkIP =
99-
cameraList
100-
.find((c) => c.name === event.target.value)
101-
?.address.replace(/:.*/, '') || '';
10298
setRecordingPropsPending(true);
10399
setRecordingProps({
104100
...recordingProps,
105101
networkCamera: event.target.value,
106-
networkIP,
107102
});
108-
// update the Camera IP
109-
110-
setViscaIP(networkIP || '');
111103
};
112104

113105
const selectedCamera = recordingProps.networkCamera;
@@ -163,11 +155,11 @@ const RecorderConfig: React.FC = () => {
163155
</Grid>
164156
<Grid item xs={1} container alignItems="center">
165157
{camFound && (
166-
<Tooltip title={`Open Camera Web Page at ${getViscaIP()}`}>
158+
<Tooltip title={`Open Camera Web Page at ${viscaIP}`}>
167159
<IconButton
168160
color="inherit"
169161
aria-label="Open Camera"
170-
onClick={() => window.open(`http://${getViscaIP()}`)}
162+
onClick={() => window.open(`http://${viscaIP}`)}
171163
size="medium"
172164
>
173165
<CameraIcon />

src/renderer/recorder/RecorderData.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export interface FocusProps {
7474
}
7575

7676
export const [useFocusArea] = UseStoredDatum<FocusProps>('focusArea', {
77-
enabled: true,
77+
enabled: false,
7878
xPct: 0.5,
7979
yPct: 0.5,
8080
sizePct: 0.2,

src/renderer/visca/ViscaControlPanel.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import {
2323
import { setToast } from '../components/Toast';
2424
import {
2525
ExposureMode,
26-
getViscaIP,
2726
useCameraState,
27+
useViscaIP,
2828
useViscaState,
2929
} from './ViscaState';
3030
import ViscaValueButton from './ViscaValueButton';
@@ -36,6 +36,7 @@ const ViscaControlPanel = () => {
3636
const [cameraState, setCameraState] = useCameraState();
3737
const [viscaState] = useViscaState();
3838
const [focusAreaProps, setFocusAreaProps] = useFocusArea();
39+
const [viscaIP] = useViscaIP();
3940
useEffect(() => {
4041
const monitor = () => {
4142
sendViscaCommand({ type: 'AUTO_FOCUS_VALUE' })
@@ -253,12 +254,12 @@ const ViscaControlPanel = () => {
253254
gap={1}
254255
>
255256
<ViscaPresets />
256-
<Tooltip title={`Open Camera Web Page at ${getViscaIP()}`}>
257+
<Tooltip title={`Open Camera Web Page at ${viscaIP}`}>
257258
<IconButton
258259
disabled={viscaState !== 'Connected'}
259260
color="inherit"
260261
aria-label="Open Camera"
261-
onClick={() => window.open(`http://${getViscaIP()}`)}
262+
onClick={() => window.open(`http://${viscaIP}`)}
262263
size="medium"
263264
>
264265
<CameraIcon />

0 commit comments

Comments
 (0)