Skip to content
This repository has been archived by the owner on Apr 19, 2024. It is now read-only.

Commit

Permalink
wip#2
Browse files Browse the repository at this point in the history
  • Loading branch information
fikryfahrezy committed Oct 16, 2023
1 parent 6972172 commit 3dd4a83
Show file tree
Hide file tree
Showing 36 changed files with 568 additions and 384 deletions.
7 changes: 5 additions & 2 deletions src/lib/PlayerMedia.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
PlayerRef,
PlayerDispatcher,
PlayerConfigObject,
PlayerGetPlayerKey
PlayerGetPlayerKey,
PlayerInternalPlayer
} from './players/types';
import { onMount, createEventDispatcher } from 'svelte';
import { isMediaStream } from './players/utils';
Expand Down Expand Up @@ -210,7 +211,9 @@
return player.getSecondsLoaded();
}
export function getInternalPlayer(key?: PlayerGetPlayerKey) {
export function getInternalPlayer<TKey extends PlayerGetPlayerKey>(
key?: TKey
): PlayerInternalPlayer[TKey] | null {
if (!player) {
return null;
}
Expand Down
7 changes: 5 additions & 2 deletions src/lib/SveltePlayer.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
PlayerUrl,
PlayerConfig,
PlayerConfigKey,
PlayerGetPlayerKey
PlayerGetPlayerKey,
PlayerInternalPlayer
} from './players/types';
import { createEventDispatcher } from 'svelte';
Expand Down Expand Up @@ -84,7 +85,9 @@
return playerRef.getSecondsLoaded();
}
export function getInternalPlayer(key: PlayerGetPlayerKey = 'player') {
export function getInternalPlayer<TKey extends PlayerGetPlayerKey>(
key: TKey | 'player' = 'player'
): PlayerInternalPlayer['player'] | PlayerInternalPlayer[TKey] | null {
if (!playerRef) {
return null;
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/players/DailyMotion.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
video_end() {
dispatch('ended');
},
durationchange: onDurationChange,
durationchange: _onDurationChange,
pause() {
dispatch('pause');
},
Expand All @@ -88,7 +88,7 @@
);
}
export function onDurationChange() {
export function _onDurationChange() {
const duration = getDuration();
dispatch('duration', duration);
}
Expand Down Expand Up @@ -137,7 +137,7 @@
return player;
}
export function setPlayer(newPlayer: DailyMotionPlayer) {
export function _setPlayer(newPlayer: DailyMotionPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Facebook.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@
return player;
}
export function setPlayer(newPlayer: FacebookPlayer) {
export function _setPlayer(newPlayer: FacebookPlayer) {
player = newPlayer;
}
</script>
Expand Down
56 changes: 32 additions & 24 deletions src/lib/players/FilePlayer.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
<script lang="ts">
import type { GlobalSDKDASHKey, GlobalSDKHLSKey, GlobalSDKFLVKey } from './global.types';
import type { PlayerDispatcher } from './types';
import type { FileConfig, FilePlayerElement, FileUrl, FileInternalPlayerKey } from './file.types';
import type {
FileConfig,
FilePlayerElement,
FileUrl,
FileInternalPlayerKey,
FileInternalPlayer
} from './file.types';
import type { DashJSMediaPlayerClass } from './dash.types';
import type { FlvJSPlayer } from './flv.types';
import type { HLSClass } from './hls.types';
Expand Down Expand Up @@ -71,8 +77,8 @@
}
if (shouldUseAudio(currentProps) !== shouldUseAudio(prevProps)) {
removeListeners(prevPlayer, prevProps.url);
addListeners(newPlayer);
_removeListeners(prevPlayer, prevProps.url);
_addListeners(newPlayer);
}
if (currentProps.url !== prevProps.url && !isMediaStream(currentProps.url)) {
Expand Down Expand Up @@ -102,22 +108,22 @@
onMount(function () {
dispatch('mount');
addListeners(playerObject.player);
_addListeners(playerObject.player);
playerObject.player.src = String(getSource(url)); // Ensure src is set in strict mode
if (IS_IOS || config.forceDisableHls) {
playerObject.player.load();
}
return function () {
playerObject.player.src = '';
removeListeners(playerObject.player);
_removeListeners(playerObject.player);
if (hls) {
hls.destroy();
}
};
});
function addListeners(playerParams: FilePlayerElement) {
export let _addListeners = (playerParams: FilePlayerElement) => {
playerParams.addEventListener('play', onPlay);
playerParams.addEventListener('waiting', onBuffer);
playerParams.addEventListener('playing', onBufferEnd);
Expand All @@ -138,9 +144,9 @@
playerParams.setAttribute('webkit-playsinline', '');
playerParams.setAttribute('x5-playsinline', '');
}
}
};
function removeListeners(playerParams: FilePlayerElement, urlParams?: typeof url) {
export let _removeListeners = (playerParams: FilePlayerElement, urlParams?: typeof url) => {
playerParams.removeEventListener('canplay', onReady);
playerParams.removeEventListener('play', onPlay);
playerParams.removeEventListener('waiting', onBuffer);
Expand All @@ -157,7 +163,7 @@
// onReady is handled by hls.js
playerParams.removeEventListener('canplay', onReady);
}
}
};
function onReady(e: Event) {
dispatch('ready', e);
Expand Down Expand Up @@ -215,7 +221,7 @@
}
}
function onSeek(e: Event) {
export function onSeek(e: Event) {
dispatch('seek', (e.target as HTMLMediaElement).currentTime);
}
Expand Down Expand Up @@ -457,25 +463,27 @@
return url;
}
export function getPlayer(key?: FileInternalPlayerKey) {
switch (key) {
case 'dash':
return dash ?? null;
case 'flv':
return flv ?? null;
case 'hls':
return hls ?? null;
case 'player':
return playerObject.player ?? null;
default:
return null;
}
export function getPlayer<TKey extends FileInternalPlayerKey>(
key: TKey
): FileInternalPlayer[TKey] | null {
const fileInternalPlayer: Partial<FileInternalPlayer> = {
dash,
flv,
hls,
player: playerObject.player
};
return fileInternalPlayer[key] ?? null;
}
export function setPlayer(newPlayer: FilePlayerElement) {
export function _setPlayer(newPlayer: FilePlayerElement) {
playerObject.player = newPlayer;
}
export function _setPrevPlayer(newPlayer: FilePlayerElement) {
playerObject.prevPlayer = newPlayer;
}
$: useAudio = shouldUseAudio({ config, url });
$: Element = (useAudio ? 'audio' : 'video') as 'audio' | 'video';
$: widthStyle = `width: ${width === 'auto' ? width : '100%'};`;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Kaltura.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
return player;
}
export function setPlayer(newPlayer: PlayerJSPlayer) {
export function _setPlayer(newPlayer: PlayerJSPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Mixcloud.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
return player;
}
export function setPlayer(newPlayer: MixcloudWidget) {
export function _setPlayer(newPlayer: MixcloudWidget) {
player = newPlayer;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/NotImplemented.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
return player;
}
export function setPlayer(newPlayer: NotImplementedPlayer) {
export function _setPlayer(newPlayer: NotImplementedPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/SoundCloud.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
return player;
}
export function setPlayer(newPlayer: SoundCloudPlayer) {
export function _setPlayer(newPlayer: SoundCloudPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Streamable.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
return player;
}
export function setPlayer(newPlayer: PlayerJSPlayer) {
export function _setPlayer(newPlayer: PlayerJSPlayer) {
player = newPlayer;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Twitch.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
return player;
}
export function setPlayer(newPlayer: TwitchPlayer) {
export function _setPlayer(newPlayer: TwitchPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Vidyard.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
return player;
}
export function setPlayer(newPlayer: VidyardPlayer) {
export function _setPlayer(newPlayer: VidyardPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Vimeo.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
return player;
}
export function setPlayer(newPlayer: VimeoPlayer) {
export function _setPlayer(newPlayer: VimeoPlayer) {
player = newPlayer;
}
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/Wistia.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@
return player;
}
export function setPlayer(newPlayer: WistiaPlayer) {
export function _setPlayer(newPlayer: WistiaPlayer) {
player = newPlayer;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/YouTube.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
return player;
}
export function setPlayer(newPlayer: YTPlayer) {
export function _setPlayer(newPlayer: YTPlayer) {
player = newPlayer;
}
</script>
Expand Down
9 changes: 7 additions & 2 deletions src/lib/players/file.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ export type FilePlayerElement = HTMLAudioElement | HTMLVideoElement;

export type FilePlayer = FilePlayerElement;

export type FileInternalPlayerKey = 'player' | 'hls' | 'dash' | 'flv';
export type FileInternalPlayer = {
hls: HLSClass;
dash: DashJSMediaPlayerClass;
flv: FlvJSPlayer;
player: FilePlayer;
};

export type FileInternalPlayer = HLSClass | DashJSMediaPlayerClass | FlvJSPlayer | FilePlayer;
export type FileInternalPlayerKey = keyof FileInternalPlayer;

export type FileErrorData = ErrorData;

Expand Down
2 changes: 1 addition & 1 deletion src/lib/players/notimplemented.global.types.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export type NotImplementedPlayer = Record<string, never>;
export type NotImplementedPlayer = null;
16 changes: 8 additions & 8 deletions src/lib/players/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ import type {
FileErrorData,
FileErrorSDKInstance,
FileErrorSDKGlobal,
FileInternalPlayer,
FileInternalPlayerKey
FileInternalPlayer
} from './file.types';
import type { NotImplementedConfig } from './notimplemented.types';

Expand All @@ -47,7 +46,11 @@ export type PlayerInstance =
| WistiaPlayer
| VidyardPlayer;

export type PlayerInternalPlayer = PlayerInstance | FileInternalPlayer;
export type PlayerInternalPlayer = Omit<FileInternalPlayer, 'player'> & {
player: FileInternalPlayer['player'] | PlayerInstance;
};

export type PlayerGetPlayerKey = keyof PlayerInternalPlayer;

export type PlayerKey =
| 'youtube'
Expand Down Expand Up @@ -149,12 +152,9 @@ export type PlayerProps = {
display: string;
};

export type PlayerGetPlayerKey = 'player' | FileInternalPlayerKey;

export type PlayerRef = {
load(url: PlayerUrl, isReady?: boolean): void;
stop(): void;
onDurationChange?(): void;
play(): void;
pause(): void;
setVolume(fraction: number): void;
Expand All @@ -168,8 +168,8 @@ export type PlayerRef = {
setLoop?(loop: boolean): void;
enablePIP?(): void;
disablePIP?(): void;
getPlayer(key?: PlayerGetPlayerKey): PlayerInternalPlayer | null;
setPlayer?(palyer: PlayerInternalPlayer): void;
getPlayer(key?: 'player'): PlayerInternalPlayer['player'] | null;
getPlayer<TKey extends PlayerGetPlayerKey>(key?: TKey): PlayerInternalPlayer[TKey] | null;
};

export type PlayerComponent = Constructor<SvelteComponent<Partial<PlayerProps>> & PlayerRef>;
Expand Down
Loading

0 comments on commit 3dd4a83

Please sign in to comment.