@applicaster/quick-brick-player 12.0.0-rc.13 → 12.0.0-rc.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/quick-brick-player",
3
- "version": "12.0.0-rc.13",
3
+ "version": "12.0.0-rc.130",
4
4
  "description": "Quick Brick Player",
5
5
  "main": "./src/index.ts",
6
6
  "types": "index.d.ts",
@@ -36,12 +36,13 @@
36
36
  },
37
37
  "homepage": "https://github.com/applicaster/quickbrick#readme",
38
38
  "dependencies": {
39
- "@applicaster/quick-brick-mobile-transport-controls": "12.0.0-rc.11",
40
- "@applicaster/quick-brick-tv-transport-controls": "11.0.0-rc.133",
41
- "@applicaster/zapp-react-native-tvos-app": "12.0.0-rc.13",
42
- "@applicaster/zapp-react-native-ui-components": "12.0.0-rc.13",
43
- "@applicaster/zapp-react-native-utils": "12.0.0-rc.13",
39
+ "@applicaster/quick-brick-mobile-transport-controls": "12.0.0-rc.118",
40
+ "@applicaster/quick-brick-tv-transport-controls": "12.0.0-rc.112",
41
+ "@applicaster/zapp-react-native-tvos-app": "12.0.0-rc.130",
42
+ "@applicaster/zapp-react-native-ui-components": "12.0.0-rc.130",
43
+ "@applicaster/zapp-react-native-utils": "12.0.0-rc.130",
44
44
  "keymirror": "^0.1.1",
45
+ "query-string": "7.1.3",
45
46
  "react-native-web-linear-gradient": "1.1.2",
46
47
  "shaka-player": "4.3.5",
47
48
  "typeface-montserrat": "^0.0.54",
@@ -1,74 +1,85 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { Image, StyleSheet, View } from "react-native";
2
+ import { StyleSheet, View } from "react-native";
3
3
  import { usePlayer } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayer";
4
4
  import { MUTED_USAGE } from "../const";
5
5
  import { LiveImageManager } from "@applicaster/zapp-react-native-ui-components/Components/VideoLive/LiveImageManager";
6
+ import { QBImage as Image } from "@applicaster/zapp-react-native-ui-components/Components/Image";
6
7
 
7
8
  type Asset = string | undefined;
8
9
 
9
10
  const isCurrentPlayer = (playerId) =>
10
11
  LiveImageManager.instance.getCurrentlyPlaying()?.playerId === playerId;
11
12
 
13
+ const liveImageButtonsListenerKey = "live-image-buttons";
14
+
12
15
  const usePlayPauseListeners = (playerId, player, asset, setImageUri) =>
13
16
  useEffect(() => {
14
17
  if (playerId && player) {
15
- if (player.playerState.isReadyToPlay) {
16
- if (player.playerState.isPaused) {
17
- setImageUri(asset.active);
18
- } else {
19
- setImageUri(asset.inactive);
20
- }
18
+ setImageUri(null);
19
+
20
+ return;
21
+ }
22
+
23
+ if (player.playerState.isReadyToPlay) {
24
+ if (player.playerState.isPaused) {
25
+ setImageUri(asset.active);
26
+ } else {
27
+ setImageUri(asset.inactive);
21
28
  }
29
+ }
22
30
 
23
- return player.addListener({
24
- id: "live-image-buttons",
25
- listener: {
26
- onPlayerResume: () => {
27
- setImageUri(asset.inactive);
28
- },
29
- onPlayerPause: () => {
30
- setImageUri(asset.active);
31
- },
32
- onPlayerClose: () => {
33
- setImageUri(null);
34
- },
35
- onLoad() {
36
- setImageUri(asset.inactive);
37
- },
31
+ return player.addListener({
32
+ id: liveImageButtonsListenerKey,
33
+ listener: {
34
+ onPlayerResume: () => {
35
+ setImageUri(asset.inactive);
38
36
  },
39
- });
40
- }
37
+ onPlayerPause: () => {
38
+ setImageUri(asset.active);
39
+ },
40
+ onPlayerClose: () => {
41
+ setImageUri(null);
42
+ },
43
+ onLoad() {
44
+ setImageUri(asset.inactive);
45
+ },
46
+ },
47
+ });
41
48
  }, [player, playerId, asset]);
42
49
 
43
50
  const useMuteUnmuteListeners = (playerId, player, asset, setImageUri) =>
44
51
  useEffect(() => {
45
- if (playerId && player) {
46
- // active action = muted, inactive = unmuted
47
- return player.addListener({
48
- id: "live-image-buttons",
49
- listener: {
50
- onPlayerMute: () => {
51
- if (isCurrentPlayer(playerId)) {
52
- setImageUri(asset.active);
53
- }
54
- },
55
- onPlayerUnmute: () => {
56
- if (isCurrentPlayer(playerId)) {
57
- setImageUri(asset.inactive);
58
- }
59
- },
60
- onLoad() {
61
- setImageUri(player?.getIsMuted() ? asset.active : asset.inactive);
62
- },
63
- onPlayerClose: () => {
64
- setImageUri(null);
65
- },
66
- onVideoEnd: () => {
67
- setImageUri(null);
68
- },
69
- },
70
- });
52
+ if (!player || !playerId) {
53
+ setImageUri(null);
54
+
55
+ return;
71
56
  }
57
+
58
+ // active action = muted, inactive = unmuted
59
+ return player.addListener({
60
+ id: liveImageButtonsListenerKey,
61
+ listener: {
62
+ onPlayerMute: () => {
63
+ if (isCurrentPlayer(playerId)) {
64
+ setImageUri(asset.active);
65
+ }
66
+ },
67
+ onPlayerUnmute: () => {
68
+ if (isCurrentPlayer(playerId)) {
69
+ setImageUri(asset.inactive);
70
+ }
71
+ },
72
+ onLoad() {
73
+ setImageUri(player?.getIsMuted() ? asset.active : asset.inactive);
74
+ },
75
+ onPlayerClose: () => {
76
+ setImageUri(null);
77
+ },
78
+ onVideoEnd: () => {
79
+ setImageUri(null);
80
+ },
81
+ },
82
+ });
72
83
  }, [player, playerId, asset]);
73
84
 
74
85
  const useListeners = MUTED_USAGE
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { memo } from "react";
2
2
  import { LiveImageManager } from "@applicaster/zapp-react-native-ui-components/Components/VideoLive/LiveImageManager";
3
3
 
4
4
  import { Context } from "./Context";
@@ -21,7 +21,7 @@ const playActionCallback = (player) => {
21
21
  }
22
22
  };
23
23
 
24
- const invokeAction = () => {
24
+ const invokeAction = (_item: ZappEntry, _object) => {
25
25
  const actionCallback = MUTED_USAGE ? muteActionCallback : playActionCallback;
26
26
  // We only allow one player to be present at a time
27
27
  const player = LiveImageManager.instance.getCurrentlyPlaying()?.player;
@@ -29,6 +29,54 @@ const invokeAction = () => {
29
29
  actionCallback(player);
30
30
  };
31
31
 
32
+ // Not exported because currently the is no way
33
+ // to subscribe to the action availability change.
34
+ // We currently return a null state to disable the action.
35
+ // eslint-disable-next-line unused-imports/no-unused-vars
36
+ const isActionAvailable = (item: ZappEntry) => {
37
+ return (
38
+ LiveImageManager.instance.getCurrentlyPlaying()?.getPlayer().entry.id ===
39
+ item.id
40
+ );
41
+ };
42
+
43
+ const addListener = (
44
+ entryId: string,
45
+ listener: CellActionStateListenerFunction
46
+ ) => {
47
+ const callback = (event: Record<string, any>) => {
48
+ if (event.entry?.id !== entryId) {
49
+ return;
50
+ }
51
+
52
+ const player = LiveImageManager.instance.getCurrentlyPlaying()?.getPlayer();
53
+
54
+ if (!player || player.entry?.id !== entryId) {
55
+ listener(null);
56
+
57
+ return;
58
+ }
59
+
60
+ const actionState = MUTED_USAGE ? player.getIsMuted() : player.isPaused();
61
+
62
+ listener({
63
+ state: actionState ? 1 : 0,
64
+ label: "",
65
+ asset: AssetComponent,
66
+ });
67
+ };
68
+
69
+ return LiveImageManager.instance.addListener({
70
+ id: `cell-player-${entryId}`,
71
+ listener: {
72
+ onEnd: callback,
73
+ onStart: callback,
74
+ onError: callback,
75
+ onDestroy: callback,
76
+ },
77
+ });
78
+ };
79
+
32
80
  const emptyState = [];
33
81
 
34
82
  const initialEntryState = () => ({
@@ -38,7 +86,7 @@ const initialEntryState = () => ({
38
86
  });
39
87
 
40
88
  export function ContextProvider(Component: ReactComponent<any>) {
41
- return function DefaultPlayerProvider({
89
+ return memo(function DefaultPlayerProvider({
42
90
  children,
43
91
  }: CellActionContextProviderProps) {
44
92
  const contextValue = React.useMemo(
@@ -46,6 +94,7 @@ export function ContextProvider(Component: ReactComponent<any>) {
46
94
  state: emptyState,
47
95
  invokeAction,
48
96
  initialEntryState,
97
+ addListener,
49
98
  }),
50
99
  [invokeAction, initialEntryState]
51
100
  );
@@ -55,5 +104,5 @@ export function ContextProvider(Component: ReactComponent<any>) {
55
104
  <Component>{children}</Component>
56
105
  </Context.Provider>
57
106
  );
58
- };
107
+ });
59
108
  }
@@ -3,7 +3,8 @@ import { Text, TextStyle, View } from "react-native";
3
3
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
4
4
 
5
5
  type AudioDescriptionProps = {
6
- content: ZappEntry;
6
+ title: string | number;
7
+ summary: string | number;
7
8
  layoutState: {
8
9
  inline: boolean;
9
10
  docked: boolean;
@@ -78,8 +79,7 @@ const summaryStyles = (value: GetValue, prefix: string): TextStyle => ({
78
79
  });
79
80
 
80
81
  export const AudioDescription = (props: AudioDescriptionProps) => {
81
- const { content, layoutState, value } = props;
82
- const { title, summary } = content;
82
+ const { title, summary, layoutState, value } = props;
83
83
  const prefix = layoutState.docked ? "docked_player_" : "";
84
84
 
85
85
  return (