47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { CameraManager } from '../../../camera-manager/manager';
|
|
import { getStreamCameraID, setSubstream } from '../../../utils/substream';
|
|
import { View } from '../../../view/view';
|
|
import { ViewModifier } from '../types';
|
|
|
|
interface SubstreamOnViewModifierAPI {
|
|
getCameraManager(): CameraManager;
|
|
}
|
|
|
|
export class SubstreamOnViewModifier implements ViewModifier {
|
|
protected _api: SubstreamOnViewModifierAPI;
|
|
|
|
constructor(api: SubstreamOnViewModifierAPI) {
|
|
this._api = api;
|
|
}
|
|
|
|
public modify(view: View): void {
|
|
if (!view.camera) {
|
|
return;
|
|
}
|
|
|
|
const dependencies = [
|
|
...this._api
|
|
.getCameraManager()
|
|
.getStore()
|
|
.getAllDependentCameras(view.camera, 'substream'),
|
|
];
|
|
|
|
if (dependencies.length <= 1) {
|
|
return;
|
|
}
|
|
|
|
const currentOverride = getStreamCameraID(view);
|
|
|
|
/* istanbul ignore if: the if path cannot be reached, as there is a
|
|
view.camera guard at the start of this method and getStreamCameraID will
|
|
always return non-null as long as camera is present -- @preserve */
|
|
if (!currentOverride) {
|
|
return;
|
|
}
|
|
const currentIndex = dependencies.indexOf(currentOverride);
|
|
const newIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % dependencies.length;
|
|
|
|
setSubstream(view, dependencies[newIndex]);
|
|
}
|
|
}
|