Skip to content

Commit

Permalink
Fix auto media action problem .
Browse files Browse the repository at this point in the history
  • Loading branch information
dermotduffy committed Aug 26, 2024
1 parent e94f550 commit 4712a32
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/components-lib/live/live-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ export class LiveController implements ReactiveController {

constructor(host: LiveControllerHost) {
this._host = host;

host.addController(this);

this._intersectionObserver = new IntersectionObserver(
this._intersectionHandler.bind(this),
);
Expand Down
12 changes: 6 additions & 6 deletions src/utils/embla/plugins/auto-media-actions/auto-media-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export function AutoMediaActions(
let options: OptionsType;
let emblaApi: EmblaCarouselType;
let slides: HTMLElement[];
let containerIntersecting: boolean | null = null;
let viewportIntersecting: boolean | null = null;
const microphoneMuteTimer = new Timer();

const intersectionObserver: IntersectionObserver = new IntersectionObserver(
Expand Down Expand Up @@ -92,7 +92,7 @@ export function AutoMediaActions(
emblaApi.on('destroy', mute);

document.addEventListener('visibilitychange', visibilityHandler);
intersectionObserver.observe(emblaApi.containerNode());
intersectionObserver.observe(emblaApi.rootNode());

if (
options.autoUnmuteConditions?.includes('microphone') ||
Expand Down Expand Up @@ -184,14 +184,14 @@ export function AutoMediaActions(
}

function intersectionHandler(entries: IntersectionObserverEntry[]): void {
const wasIntersecting = containerIntersecting;
containerIntersecting = entries.some((entry) => entry.isIntersecting);
const wasIntersecting = viewportIntersecting;
viewportIntersecting = entries.some((entry) => entry.isIntersecting);

if (wasIntersecting !== null && wasIntersecting !== containerIntersecting) {
if (wasIntersecting !== null && wasIntersecting !== viewportIntersecting) {
// If the live view is preloaded (i.e. in the background) we may need to
// take media actions, e.g. muting a live stream that is now running in
// the background, so we act even if the new state is hidden.
actOnVisibilityChange(containerIntersecting);
actOnVisibilityChange(viewportIntersecting);
}
}

Expand Down
1 change: 1 addition & 0 deletions tests/components-lib/live/live-controller.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ describe('LiveController', () => {
parent.addEventListener('frigate-card:message', eventListener);

const controller = new LiveController(host);
expect(host.addController).toBeCalled();

controller.hostConnected();

Expand Down

0 comments on commit 4712a32

Please sign in to comment.