Add events handlers

This commit is contained in:
2026-04-19 21:05:55 +02:00
parent 835510115e
commit f2332b4844
26 changed files with 1184 additions and 48 deletions
+23 -3
View File
@@ -24,8 +24,28 @@ export const useEvent = <Event extends keyof OmniEvents>(
export const usePlayerState = <Key extends keyof OmniPlayerState>(
key: Key,
): OmniPlayerState[Key] => {
const player = usePlayer();
const [ret, setState] = useState(player[key]);
// TODO: find a way to listen to that.
const player = usePlayer() as OmniPlayer;
const [ret, setState] = useState<any>(player[key]);
useEffect(() => {
const em = player.eventMap;
switch (key) {
case "currentTime":
case "buffered":
case "duration":
case "playbackRate":
case "volume":
em.addStateListener(key, setState);
return () => em.removeStateListener(key, setState);
case "isPlaying":
case "muted":
em.addStateBoolListener(key, setState);
return () => em.removeStateBoolListener(key, setState);
case "status":
em.addPlayerStatusListener(setState);
return () => em.removePlayerStatusListener(setState);
}
}, [player, key]);
return ret;
};
+1
View File
@@ -1,2 +1,3 @@
export { useEvent, usePlayerState } from "./events";
export { OmniProvider, usePlayer } from "./provider";
export { OmniView } from "./view";
+17 -6
View File
@@ -1,17 +1,28 @@
import type { HybridObject } from "react-native-nitro-modules";
import type { OmniEvents } from "../types/events";
import type {
// OmniPlayerState,
OmniPlayerState,
OmniPlayer as OmniPlayerT,
PlayerStatus,
} from "../types/player";
import type { Source } from "../types/source";
export type NumberProperty = Exclude<
keyof OmniPlayerState,
"status" | "isPlaying" | "muted"
>;
export type BoolProperty = "isPlaying" | "muted";
export interface OmniEventMap extends HybridObject<{ android: "kotlin" }> {
// addStateListener(
// key: keyof OmniPlayerState,
// cb: (value: number) => void,
// ): void;
// removeStateListener(cb: OmniEvents["end"]): void;
addStateListener(key: NumberProperty, cb: (value: number) => void): void;
removeStateListener(key: NumberProperty, cb: (value: number) => void): void;
addStateBoolListener(key: BoolProperty, cb: (value: boolean) => void): void;
removeStateBoolListener(
key: BoolProperty,
cb: (value: boolean) => void,
): void;
addPlayerStatusListener(cb: (value: PlayerStatus) => void): void;
removePlayerStatusListener(cb: (value: PlayerStatus) => void): void;
addOnEndListener(cb: OmniEvents["end"]): void;
removeOnEndListener(cb: OmniEvents["end"]): void;