forked from snowplow/snowplow-javascript-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathentities.ts
More file actions
70 lines (57 loc) · 2.33 KB
/
Copy pathentities.ts
File metadata and controls
70 lines (57 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import type { updateMediaTracking } from '@snowplow/browser-plugin-media';
import type { SelfDescribingJson } from '@snowplow/tracker-core';
import { MediaType } from '@snowplow/browser-plugin-media/src/types';
import { TrackingOptions, YouTubeEntity } from './types';
type PlayerStatus = NonNullable<Parameters<typeof updateMediaTracking>[0]['player']>;
const PLAYER_TYPE = 'com.youtube-youtube';
export function buildPlayerEntity(conf: TrackingOptions): PlayerStatus | undefined {
const player = conf.player;
if (!player) return;
return {
currentTime: player.getCurrentTime(),
duration: player.getDuration(),
ended: player.getPlayerState() === YT.PlayerState.ENDED,
fullscreen: undefined,
label: conf.config.label,
livestream: undefined,
loop: undefined,
mediaType: MediaType.Video,
muted: player.isMuted(),
paused: player.getPlayerState() !== YT.PlayerState.PLAYING,
pictureInPicture: undefined,
playbackRate: player.getPlaybackRate(),
playerType: PLAYER_TYPE,
quality: player.getPlaybackQuality(),
volume: player.getVolume(),
};
}
export function buildYouTubeEntity(conf: TrackingOptions): SelfDescribingJson<YouTubeEntity> | null {
const { player, urlParameters = {} } = conf;
if (!player) return null;
const state = player.getPlayerState();
let data: YouTubeEntity = {
autoPlay: urlParameters.autoplay === '1',
avaliablePlaybackRates: player.getAvailablePlaybackRates(),
avaliableQualityLevels: player.getAvailableQualityLevels(),
buffering: state === YT.PlayerState.BUFFERING,
controls: urlParameters.controls !== '0',
cued: state === YT.PlayerState.CUED,
loaded: parseInt(String(player.getVideoLoadedFraction() * 100)),
playbackQuality: player.getPlaybackQuality(),
playerId: player.getIframe().id,
unstarted: state === YT.PlayerState.UNSTARTED,
url: player.getVideoUrl(),
};
const spherical: YT.SphericalProperties = player.getSphericalProperties();
if (spherical) data = { ...data, ...spherical };
const playlistIndex = player.getPlaylistIndex();
if (playlistIndex !== -1) data.playlistIndex = playlistIndex;
const playlist = player.getPlaylist();
if (playlist) {
data.playlist = playlist.map((item: string) => parseInt(item, 10));
}
return {
schema: 'iglu:com.youtube/youtube/jsonschema/1-0-0',
data,
};
}