Implementation
Future<void> move(String profileToken, PanTilt direction,
[Zoom? zoom]) async {
loggy.debug('move');
Zoom zoomAdjust = zoom ?? Zoom(x: 0);
try {
await relativeMove(
profileToken, PtzPosition(panTilt: direction, zoom: zoomAdjust));
} catch (err) {
PanTilt? panTilt;
loggy.error('Relative move failed');
loggy.error(err);
loggy.error('Attempting workaround with AbsoluteMove');
final ptzStatus = await 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) {
zoomAdjust = Zoom(x: ptzStatus.position.zoom!.x + zoomAdjust.x);
}
await absoluteMove(
profileToken, PtzPosition(panTilt: panTilt, zoom: zoomAdjust));
}
}