Implementation
Future<void> move(String profileToken, PanTilt direction) async {
loggy.debug('move');
try {
await relativeMove(
profileToken, PtzPosition(panTilt: direction, zoom: Zoom(x: 0)));
} catch (err) {
PanTilt? panTilt;
Zoom? zoom;
loggy.error('Relative move failed');
loggy.error(err);
loggy.error('Attempting workaround with AbsoluteMove');
final ptzStatus = await onvif.ptz.getStatus(profileToken);
if (ptzStatus.position.panTilt != null) {
panTilt = PanTilt(
x: ptzStatus.position.panTilt!.x + direction.x,
y: ptzStatus.position.panTilt!.y + direction.y);
} else {
panTilt = PanTilt(x: 0, y: 0);
}
if (ptzStatus.position.zoom != null) {
zoom = Zoom(x: ptzStatus.position.zoom!.x);
}
await absoluteMove(
profileToken, PtzPosition(panTilt: panTilt, zoom: zoom));
}
}