import {writable} from "svelte/store"; import type {RemotePeer, SimplePeer} from "../WebRtc/SimplePeer"; import {VideoPeer} from "../WebRtc/VideoPeer"; import {ScreenSharingPeer} from "../WebRtc/ScreenSharingPeer"; import type {Streamable} from "./StreamableCollectionStore"; /** * A store that contains the peer / media that has currently the "importance" focus. */ function createVideoFocusStore() { const { subscribe, set, update } = writable(null); let focusedMedia: Streamable | null = null; return { subscribe, focus: (media: Streamable) => { focusedMedia = media; set(media); }, removeFocus: () => { focusedMedia = null; set(null); }, toggleFocus: (media: Streamable) => { if (media !== focusedMedia) { focusedMedia = media; } else { focusedMedia = null; } set(focusedMedia); }, connectToSimplePeer: (simplePeer: SimplePeer) => { simplePeer.registerPeerConnectionListener({ onConnect(peer: RemotePeer) { }, onDisconnect(userId: number) { if ((focusedMedia instanceof VideoPeer || focusedMedia instanceof ScreenSharingPeer) && focusedMedia.userId === userId) { set(null); } } }) } }; } export const videoFocusStore = createVideoFocusStore();