@zezosoft/zezo-ott-react-native-video-player 1.0.0

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.
Files changed (185) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +308 -0
  3. package/lib/module/VideoPlayer/MediaControls/BottomControls.js +156 -0
  4. package/lib/module/VideoPlayer/MediaControls/BottomControls.js.map +1 -0
  5. package/lib/module/VideoPlayer/MediaControls/MediaControls.js +27 -0
  6. package/lib/module/VideoPlayer/MediaControls/MediaControls.js.map +1 -0
  7. package/lib/module/VideoPlayer/MediaControls/MediaControlsProvider.js +85 -0
  8. package/lib/module/VideoPlayer/MediaControls/MediaControlsProvider.js.map +1 -0
  9. package/lib/module/VideoPlayer/MediaControls/MiddleControls.js +208 -0
  10. package/lib/module/VideoPlayer/MediaControls/MiddleControls.js.map +1 -0
  11. package/lib/module/VideoPlayer/MediaControls/TopControls.js +94 -0
  12. package/lib/module/VideoPlayer/MediaControls/TopControls.js.map +1 -0
  13. package/lib/module/VideoPlayer/Styles/fonts.js +58 -0
  14. package/lib/module/VideoPlayer/Styles/fonts.js.map +1 -0
  15. package/lib/module/VideoPlayer/Styles/globalStyles.js +75 -0
  16. package/lib/module/VideoPlayer/Styles/globalStyles.js.map +1 -0
  17. package/lib/module/VideoPlayer/VideoPlayer.js +180 -0
  18. package/lib/module/VideoPlayer/VideoPlayer.js.map +1 -0
  19. package/lib/module/VideoPlayer/components/ProgressBar.js +84 -0
  20. package/lib/module/VideoPlayer/components/ProgressBar.js.map +1 -0
  21. package/lib/module/VideoPlayer/components/SkipAndNextControls.js +154 -0
  22. package/lib/module/VideoPlayer/components/SkipAndNextControls.js.map +1 -0
  23. package/lib/module/VideoPlayer/components/SubtitleView.js +57 -0
  24. package/lib/module/VideoPlayer/components/SubtitleView.js.map +1 -0
  25. package/lib/module/VideoPlayer/context/VideoPlayerConfig.js +47 -0
  26. package/lib/module/VideoPlayer/context/VideoPlayerConfig.js.map +1 -0
  27. package/lib/module/VideoPlayer/context/index.js +4 -0
  28. package/lib/module/VideoPlayer/context/index.js.map +1 -0
  29. package/lib/module/VideoPlayer/index.js +7 -0
  30. package/lib/module/VideoPlayer/index.js.map +1 -0
  31. package/lib/module/VideoPlayer/model/AudioAndSubtitles.js +257 -0
  32. package/lib/module/VideoPlayer/model/AudioAndSubtitles.js.map +1 -0
  33. package/lib/module/VideoPlayer/model/Episodes.js +272 -0
  34. package/lib/module/VideoPlayer/model/Episodes.js.map +1 -0
  35. package/lib/module/VideoPlayer/model/SettingModal.js +115 -0
  36. package/lib/module/VideoPlayer/model/SettingModal.js.map +1 -0
  37. package/lib/module/VideoPlayer/model/SpeedControls.js +140 -0
  38. package/lib/module/VideoPlayer/model/SpeedControls.js.map +1 -0
  39. package/lib/module/VideoPlayer/model/VideoPlayerSettings.js +113 -0
  40. package/lib/module/VideoPlayer/model/VideoPlayerSettings.js.map +1 -0
  41. package/lib/module/VideoPlayer/store/index.js +5 -0
  42. package/lib/module/VideoPlayer/store/index.js.map +1 -0
  43. package/lib/module/VideoPlayer/store/videoPlayer.type.js +4 -0
  44. package/lib/module/VideoPlayer/store/videoPlayer.type.js.map +1 -0
  45. package/lib/module/VideoPlayer/store/videoPlayerStore.js +147 -0
  46. package/lib/module/VideoPlayer/store/videoPlayerStore.js.map +1 -0
  47. package/lib/module/VideoPlayer/utils/Display.js +22 -0
  48. package/lib/module/VideoPlayer/utils/Display.js.map +1 -0
  49. package/lib/module/VideoPlayer/utils/PlatformSelector.js +18 -0
  50. package/lib/module/VideoPlayer/utils/PlatformSelector.js.map +1 -0
  51. package/lib/module/VideoPlayer/utils/hooks/index.js +5 -0
  52. package/lib/module/VideoPlayer/utils/hooks/index.js.map +1 -0
  53. package/lib/module/VideoPlayer/utils/hooks/useVideoPlayerBack.js +48 -0
  54. package/lib/module/VideoPlayer/utils/hooks/useVideoPlayerBack.js.map +1 -0
  55. package/lib/module/VideoPlayer/utils/hooks/useVideoResolutions.js +88 -0
  56. package/lib/module/VideoPlayer/utils/hooks/useVideoResolutions.js.map +1 -0
  57. package/lib/module/VideoPlayer/utils/index.js +10 -0
  58. package/lib/module/VideoPlayer/utils/index.js.map +1 -0
  59. package/lib/module/VideoPlayer/utils/lockOrientation.js +31 -0
  60. package/lib/module/VideoPlayer/utils/lockOrientation.js.map +1 -0
  61. package/lib/module/VideoPlayer/utils/playerEvents.js +79 -0
  62. package/lib/module/VideoPlayer/utils/playerEvents.js.map +1 -0
  63. package/lib/module/VideoPlayer/utils/timeFormatter.js +35 -0
  64. package/lib/module/VideoPlayer/utils/timeFormatter.js.map +1 -0
  65. package/lib/module/VideoPlayer/utils/useWatchReporter.js +68 -0
  66. package/lib/module/VideoPlayer/utils/useWatchReporter.js.map +1 -0
  67. package/lib/module/VideoPlayer/utils/videoControl.js +166 -0
  68. package/lib/module/VideoPlayer/utils/videoControl.js.map +1 -0
  69. package/lib/module/VideoPlayer/utils/videoRef.js +5 -0
  70. package/lib/module/VideoPlayer/utils/videoRef.js.map +1 -0
  71. package/lib/module/VideoPlayer/utils/videoSource.js +17 -0
  72. package/lib/module/VideoPlayer/utils/videoSource.js.map +1 -0
  73. package/lib/module/index.js +4 -0
  74. package/lib/module/index.js.map +1 -0
  75. package/lib/module/package.json +1 -0
  76. package/lib/typescript/package.json +1 -0
  77. package/lib/typescript/src/VideoPlayer/MediaControls/BottomControls.d.ts +3 -0
  78. package/lib/typescript/src/VideoPlayer/MediaControls/BottomControls.d.ts.map +1 -0
  79. package/lib/typescript/src/VideoPlayer/MediaControls/MediaControls.d.ts +6 -0
  80. package/lib/typescript/src/VideoPlayer/MediaControls/MediaControls.d.ts.map +1 -0
  81. package/lib/typescript/src/VideoPlayer/MediaControls/MediaControlsProvider.d.ts +14 -0
  82. package/lib/typescript/src/VideoPlayer/MediaControls/MediaControlsProvider.d.ts.map +1 -0
  83. package/lib/typescript/src/VideoPlayer/MediaControls/MiddleControls.d.ts +3 -0
  84. package/lib/typescript/src/VideoPlayer/MediaControls/MiddleControls.d.ts.map +1 -0
  85. package/lib/typescript/src/VideoPlayer/MediaControls/TopControls.d.ts +7 -0
  86. package/lib/typescript/src/VideoPlayer/MediaControls/TopControls.d.ts.map +1 -0
  87. package/lib/typescript/src/VideoPlayer/Styles/fonts.d.ts +54 -0
  88. package/lib/typescript/src/VideoPlayer/Styles/fonts.d.ts.map +1 -0
  89. package/lib/typescript/src/VideoPlayer/Styles/globalStyles.d.ts +70 -0
  90. package/lib/typescript/src/VideoPlayer/Styles/globalStyles.d.ts.map +1 -0
  91. package/lib/typescript/src/VideoPlayer/VideoPlayer.d.ts +22 -0
  92. package/lib/typescript/src/VideoPlayer/VideoPlayer.d.ts.map +1 -0
  93. package/lib/typescript/src/VideoPlayer/components/ProgressBar.d.ts +12 -0
  94. package/lib/typescript/src/VideoPlayer/components/ProgressBar.d.ts.map +1 -0
  95. package/lib/typescript/src/VideoPlayer/components/SkipAndNextControls.d.ts +12 -0
  96. package/lib/typescript/src/VideoPlayer/components/SkipAndNextControls.d.ts.map +1 -0
  97. package/lib/typescript/src/VideoPlayer/components/SubtitleView.d.ts +3 -0
  98. package/lib/typescript/src/VideoPlayer/components/SubtitleView.d.ts.map +1 -0
  99. package/lib/typescript/src/VideoPlayer/context/VideoPlayerConfig.d.ts +25 -0
  100. package/lib/typescript/src/VideoPlayer/context/VideoPlayerConfig.d.ts.map +1 -0
  101. package/lib/typescript/src/VideoPlayer/context/index.d.ts +3 -0
  102. package/lib/typescript/src/VideoPlayer/context/index.d.ts.map +1 -0
  103. package/lib/typescript/src/VideoPlayer/index.d.ts +5 -0
  104. package/lib/typescript/src/VideoPlayer/index.d.ts.map +1 -0
  105. package/lib/typescript/src/VideoPlayer/model/AudioAndSubtitles.d.ts +4 -0
  106. package/lib/typescript/src/VideoPlayer/model/AudioAndSubtitles.d.ts.map +1 -0
  107. package/lib/typescript/src/VideoPlayer/model/Episodes.d.ts +12 -0
  108. package/lib/typescript/src/VideoPlayer/model/Episodes.d.ts.map +1 -0
  109. package/lib/typescript/src/VideoPlayer/model/SettingModal.d.ts +12 -0
  110. package/lib/typescript/src/VideoPlayer/model/SettingModal.d.ts.map +1 -0
  111. package/lib/typescript/src/VideoPlayer/model/SpeedControls.d.ts +4 -0
  112. package/lib/typescript/src/VideoPlayer/model/SpeedControls.d.ts.map +1 -0
  113. package/lib/typescript/src/VideoPlayer/model/VideoPlayerSettings.d.ts +7 -0
  114. package/lib/typescript/src/VideoPlayer/model/VideoPlayerSettings.d.ts.map +1 -0
  115. package/lib/typescript/src/VideoPlayer/store/index.d.ts +3 -0
  116. package/lib/typescript/src/VideoPlayer/store/index.d.ts.map +1 -0
  117. package/lib/typescript/src/VideoPlayer/store/videoPlayer.type.d.ts +144 -0
  118. package/lib/typescript/src/VideoPlayer/store/videoPlayer.type.d.ts.map +1 -0
  119. package/lib/typescript/src/VideoPlayer/store/videoPlayerStore.d.ts +20 -0
  120. package/lib/typescript/src/VideoPlayer/store/videoPlayerStore.d.ts.map +1 -0
  121. package/lib/typescript/src/VideoPlayer/utils/Display.d.ts +8 -0
  122. package/lib/typescript/src/VideoPlayer/utils/Display.d.ts.map +1 -0
  123. package/lib/typescript/src/VideoPlayer/utils/PlatformSelector.d.ts +11 -0
  124. package/lib/typescript/src/VideoPlayer/utils/PlatformSelector.d.ts.map +1 -0
  125. package/lib/typescript/src/VideoPlayer/utils/hooks/index.d.ts +3 -0
  126. package/lib/typescript/src/VideoPlayer/utils/hooks/index.d.ts.map +1 -0
  127. package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoPlayerBack.d.ts +6 -0
  128. package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoPlayerBack.d.ts.map +1 -0
  129. package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoResolutions.d.ts +12 -0
  130. package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoResolutions.d.ts.map +1 -0
  131. package/lib/typescript/src/VideoPlayer/utils/index.d.ts +8 -0
  132. package/lib/typescript/src/VideoPlayer/utils/index.d.ts.map +1 -0
  133. package/lib/typescript/src/VideoPlayer/utils/lockOrientation.d.ts +3 -0
  134. package/lib/typescript/src/VideoPlayer/utils/lockOrientation.d.ts.map +1 -0
  135. package/lib/typescript/src/VideoPlayer/utils/playerEvents.d.ts +18 -0
  136. package/lib/typescript/src/VideoPlayer/utils/playerEvents.d.ts.map +1 -0
  137. package/lib/typescript/src/VideoPlayer/utils/timeFormatter.d.ts +9 -0
  138. package/lib/typescript/src/VideoPlayer/utils/timeFormatter.d.ts.map +1 -0
  139. package/lib/typescript/src/VideoPlayer/utils/useWatchReporter.d.ts +26 -0
  140. package/lib/typescript/src/VideoPlayer/utils/useWatchReporter.d.ts.map +1 -0
  141. package/lib/typescript/src/VideoPlayer/utils/videoControl.d.ts +17 -0
  142. package/lib/typescript/src/VideoPlayer/utils/videoControl.d.ts.map +1 -0
  143. package/lib/typescript/src/VideoPlayer/utils/videoRef.d.ts +3 -0
  144. package/lib/typescript/src/VideoPlayer/utils/videoRef.d.ts.map +1 -0
  145. package/lib/typescript/src/VideoPlayer/utils/videoSource.d.ts +10 -0
  146. package/lib/typescript/src/VideoPlayer/utils/videoSource.d.ts.map +1 -0
  147. package/lib/typescript/src/index.d.ts +2 -0
  148. package/lib/typescript/src/index.d.ts.map +1 -0
  149. package/package.json +191 -0
  150. package/src/VideoPlayer/MediaControls/BottomControls.tsx +185 -0
  151. package/src/VideoPlayer/MediaControls/MediaControls.tsx +29 -0
  152. package/src/VideoPlayer/MediaControls/MediaControlsProvider.tsx +99 -0
  153. package/src/VideoPlayer/MediaControls/MiddleControls.tsx +232 -0
  154. package/src/VideoPlayer/MediaControls/TopControls.tsx +92 -0
  155. package/src/VideoPlayer/Styles/fonts.ts +106 -0
  156. package/src/VideoPlayer/Styles/globalStyles.ts +74 -0
  157. package/src/VideoPlayer/VideoPlayer.tsx +217 -0
  158. package/src/VideoPlayer/components/ProgressBar.tsx +98 -0
  159. package/src/VideoPlayer/components/SkipAndNextControls.tsx +195 -0
  160. package/src/VideoPlayer/components/SubtitleView.tsx +53 -0
  161. package/src/VideoPlayer/context/VideoPlayerConfig.tsx +65 -0
  162. package/src/VideoPlayer/context/index.ts +5 -0
  163. package/src/VideoPlayer/index.ts +4 -0
  164. package/src/VideoPlayer/model/AudioAndSubtitles.tsx +302 -0
  165. package/src/VideoPlayer/model/Episodes.tsx +294 -0
  166. package/src/VideoPlayer/model/SettingModal.tsx +128 -0
  167. package/src/VideoPlayer/model/SpeedControls.tsx +134 -0
  168. package/src/VideoPlayer/model/VideoPlayerSettings.tsx +141 -0
  169. package/src/VideoPlayer/store/index.ts +2 -0
  170. package/src/VideoPlayer/store/videoPlayer.type.ts +192 -0
  171. package/src/VideoPlayer/store/videoPlayerStore.ts +101 -0
  172. package/src/VideoPlayer/utils/Display.ts +14 -0
  173. package/src/VideoPlayer/utils/PlatformSelector.ts +18 -0
  174. package/src/VideoPlayer/utils/hooks/index.ts +2 -0
  175. package/src/VideoPlayer/utils/hooks/useVideoPlayerBack.ts +66 -0
  176. package/src/VideoPlayer/utils/hooks/useVideoResolutions.ts +119 -0
  177. package/src/VideoPlayer/utils/index.ts +7 -0
  178. package/src/VideoPlayer/utils/lockOrientation.ts +34 -0
  179. package/src/VideoPlayer/utils/playerEvents.ts +97 -0
  180. package/src/VideoPlayer/utils/timeFormatter.ts +47 -0
  181. package/src/VideoPlayer/utils/useWatchReporter.ts +104 -0
  182. package/src/VideoPlayer/utils/videoControl.ts +192 -0
  183. package/src/VideoPlayer/utils/videoRef.ts +4 -0
  184. package/src/VideoPlayer/utils/videoSource.ts +23 -0
  185. package/src/index.tsx +1 -0
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable react/no-unstable-nested-components */
4
+ import { FlatList, TouchableOpacity, View, StyleSheet, Text } from 'react-native';
5
+ import React from 'react';
6
+ import FastImage from 'react-native-fast-image';
7
+ import { moderateScale, verticalScale } from 'react-native-size-matters';
8
+ import { MenuProvider, Menu, MenuOptions, MenuOption, MenuTrigger } from 'react-native-popup-menu';
9
+ import { RFValue } from 'react-native-responsive-fontsize';
10
+ import { formatDuration, getEpisodeIndex } from "../utils/index.js";
11
+ import { useVideoPlayerStore } from "../store/videoPlayerStore.js";
12
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
13
+ import globalStyles from "../Styles/globalStyles.js";
14
+ import { useVideoPlayerConfig } from "../context/index.js";
15
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
+ const Episodes = ({
17
+ onPressEpisode,
18
+ reportProgress
19
+ }) => {
20
+ const {
21
+ activeSeason,
22
+ activeTrack,
23
+ setCurrentTrackIndex,
24
+ setActiveTrack,
25
+ playList,
26
+ setSettingsModal,
27
+ setIsPaused,
28
+ contentSeasons,
29
+ setActiveSeason,
30
+ setSelectedSubtitleTrack,
31
+ setPlayBackRate,
32
+ setActiveSubtitle,
33
+ setSelectedVideoTrack,
34
+ setMaxBitRate,
35
+ setDuration
36
+ } = useVideoPlayerStore();
37
+ const {
38
+ colors
39
+ } = useVideoPlayerConfig();
40
+ const {
41
+ left
42
+ } = useSafeAreaInsets();
43
+ if (!activeSeason?.seasonNumber || !activeSeason?.episodes) {
44
+ return /*#__PURE__*/_jsx(View, {
45
+ style: globalStyles.flexOneJustifyContentCenterAndAlignItemsCenter,
46
+ children: /*#__PURE__*/_jsx(Text, {
47
+ style: {
48
+ color: colors.text
49
+ },
50
+ children: "Something went wrong. Please try again."
51
+ })
52
+ });
53
+ }
54
+ const handleEpisodePress = async episode => {
55
+ const isSuccess = await onPressEpisode({
56
+ episode
57
+ });
58
+ if (!isSuccess) return;
59
+ if (episode.id === activeTrack?.episodeId) {
60
+ setSettingsModal({
61
+ isVisible: false,
62
+ action: 'none'
63
+ });
64
+ setIsPaused(false);
65
+ return;
66
+ }
67
+ const index = getEpisodeIndex(playList, episode.id);
68
+ setCurrentTrackIndex(index);
69
+ setDuration(0);
70
+ setActiveTrack({
71
+ type: 'series',
72
+ episodeId: episode.id,
73
+ contentId: episode.contentId,
74
+ episodeName: episode.title,
75
+ episodeNumber: episode.episodeNumber,
76
+ seasonNumber: activeSeason.seasonNumber ?? 0,
77
+ skipIntro: episode.skipIntro ?? undefined,
78
+ nextEpisodeAt: episode.nextEpisodeAt ?? undefined,
79
+ sourceLink: episode.sourceLink || '',
80
+ thumbnail: episode.thumbnail,
81
+ subtitles: episode.subtitles || null,
82
+ id: episode.id,
83
+ title: episode.title,
84
+ description: episode.description || '',
85
+ duration: episode.duration || 0,
86
+ sourceType: episode.sourceType || 'HLS'
87
+ });
88
+ setSelectedSubtitleTrack(null);
89
+ setActiveSubtitle(null);
90
+ setSelectedVideoTrack(null);
91
+ setMaxBitRate(null);
92
+ setSettingsModal({
93
+ isVisible: false,
94
+ action: 'none'
95
+ });
96
+ setIsPaused(false);
97
+ setPlayBackRate(1, 'Normal');
98
+ };
99
+ return /*#__PURE__*/_jsx(MenuProvider, {
100
+ children: /*#__PURE__*/_jsxs(View, {
101
+ children: [/*#__PURE__*/_jsxs(Menu, {
102
+ children: [/*#__PURE__*/_jsx(MenuTrigger, {
103
+ style: [styles.menuTrigger, {
104
+ marginLeft: left + moderateScale(8)
105
+ }],
106
+ customStyles: {
107
+ triggerText: {
108
+ ...menuTriggerCustomStyles.triggerText,
109
+ color: colors.text
110
+ }
111
+ },
112
+ text: `Season ${activeSeason?.seasonNumber}`
113
+ }), /*#__PURE__*/_jsx(MenuOptions, {
114
+ optionsContainerStyle: styles.menuOptionsContainer,
115
+ children: contentSeasons?.map((season, index) => /*#__PURE__*/_jsx(MenuOption, {
116
+ style: styles.menuOption,
117
+ customStyles: menuOptionCustomStyles,
118
+ onSelect: () => setActiveSeason(season),
119
+ text: `Season ${season.seasonNumber}`
120
+ }, index))
121
+ })]
122
+ }), /*#__PURE__*/_jsx(View, {
123
+ style: styles.episodesContainer,
124
+ children: /*#__PURE__*/_jsx(FlatList, {
125
+ data: activeSeason?.episodes,
126
+ horizontal: true,
127
+ showsHorizontalScrollIndicator: false,
128
+ ItemSeparatorComponent: () => /*#__PURE__*/_jsx(View, {
129
+ style: {
130
+ width: moderateScale(12)
131
+ }
132
+ }),
133
+ ListHeaderComponent: () => /*#__PURE__*/_jsx(View, {
134
+ style: {
135
+ width: left + moderateScale(8)
136
+ }
137
+ }),
138
+ ListFooterComponent: () => /*#__PURE__*/_jsx(View, {
139
+ style: {
140
+ width: moderateScale(16)
141
+ }
142
+ }),
143
+ renderItem: ({
144
+ item
145
+ }) => /*#__PURE__*/_jsxs(TouchableOpacity, {
146
+ onPress: () => {
147
+ reportProgress('EPISODE_CHANGE');
148
+ handleEpisodePress(item);
149
+ },
150
+ style: styles.episodeItem,
151
+ activeOpacity: 0.8,
152
+ children: [/*#__PURE__*/_jsx(FastImage, {
153
+ source: {
154
+ uri: item?.thumbnail
155
+ },
156
+ style: styles.episodeThumbnail,
157
+ resizeMode: FastImage.resizeMode.cover
158
+ }), item.id === activeTrack?.episodeId && /*#__PURE__*/_jsx(Text, {
159
+ style: [styles.nowPlayingBadge, {
160
+ color: colors.text,
161
+ backgroundColor: colors.primary
162
+ }],
163
+ children: "Now Playing"
164
+ }), /*#__PURE__*/_jsx(Text, {
165
+ numberOfLines: 1,
166
+ style: [styles.episodeTitle, {
167
+ color: colors.text
168
+ }],
169
+ children: item?.title
170
+ }), /*#__PURE__*/_jsx(View, {
171
+ style: styles.episodeInfoRow,
172
+ children: /*#__PURE__*/_jsx(Text, {
173
+ style: styles.episodeInfoText,
174
+ children: [item.episodeNumber && `S${String(activeSeason?.seasonNumber).padStart(2, '0')} E${String(item.episodeNumber).padStart(2, '0')}`, item.publishDate && `(${item.publishDate})`, item?.duration && formatDuration(item?.duration, true)].filter(Boolean).join(' | ')
175
+ })
176
+ }), item.description && /*#__PURE__*/_jsx(Text, {
177
+ style: styles.episodeDescription,
178
+ numberOfLines: 3,
179
+ children: item?.description
180
+ })]
181
+ }),
182
+ keyExtractor: item => item?.id
183
+ })
184
+ })]
185
+ })
186
+ });
187
+ };
188
+ const styles = StyleSheet.create({
189
+ menuTrigger: {
190
+ alignSelf: 'flex-start',
191
+ backgroundColor: 'gray',
192
+ paddingHorizontal: moderateScale(16),
193
+ paddingVertical: moderateScale(8),
194
+ marginTop: verticalScale(20),
195
+ borderRadius: moderateScale(8)
196
+ },
197
+ menuOptionsContainer: {
198
+ marginTop: verticalScale(60),
199
+ width: moderateScale(150)
200
+ },
201
+ menuOption: {
202
+ paddingHorizontal: moderateScale(16),
203
+ paddingVertical: moderateScale(12)
204
+ },
205
+ episodesContainer: {
206
+ marginTop: verticalScale(20),
207
+ paddingBottom: verticalScale(20)
208
+ },
209
+ episodeItem: {
210
+ width: moderateScale(240),
211
+ backgroundColor: '#373737ff',
212
+ borderRadius: moderateScale(12),
213
+ overflow: 'hidden'
214
+ },
215
+ episodeThumbnail: {
216
+ width: '100%',
217
+ height: undefined,
218
+ aspectRatio: 16 / 9,
219
+ backgroundColor: '#444' // slightly lighter fallback
220
+ },
221
+ nowPlayingBadge: {
222
+ position: 'absolute',
223
+ top: moderateScale(6),
224
+ left: moderateScale(6),
225
+ paddingHorizontal: moderateScale(8),
226
+ paddingVertical: moderateScale(4),
227
+ // slightly bigger
228
+ borderRadius: moderateScale(4),
229
+ fontSize: RFValue(12),
230
+ fontWeight: '600',
231
+ overflow: 'hidden'
232
+ },
233
+ episodeTitle: {
234
+ fontSize: RFValue(14),
235
+ // bigger
236
+ fontWeight: '600',
237
+ // bolder
238
+ marginHorizontal: moderateScale(8),
239
+ marginTop: verticalScale(3)
240
+ },
241
+ episodeInfoRow: {
242
+ flexDirection: 'row',
243
+ justifyContent: 'flex-start',
244
+ // better alignment
245
+ marginHorizontal: moderateScale(8),
246
+ marginTop: verticalScale(2),
247
+ alignItems: 'center'
248
+ },
249
+ episodeInfoText: {
250
+ color: '#f1f1f1ff',
251
+ fontSize: RFValue(10.5)
252
+ },
253
+ episodeDescription: {
254
+ marginHorizontal: moderateScale(8),
255
+ marginVertical: verticalScale(5),
256
+ color: '#f1f1f1ff',
257
+ fontSize: RFValue(10),
258
+ lineHeight: RFValue(10)
259
+ }
260
+ });
261
+ const menuTriggerCustomStyles = {
262
+ triggerText: {
263
+ fontSize: RFValue(16)
264
+ }
265
+ };
266
+ const menuOptionCustomStyles = {
267
+ optionText: {
268
+ fontSize: RFValue(16)
269
+ }
270
+ };
271
+ export default Episodes;
272
+ //# sourceMappingURL=Episodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FlatList","TouchableOpacity","View","StyleSheet","Text","React","FastImage","moderateScale","verticalScale","MenuProvider","Menu","MenuOptions","MenuOption","MenuTrigger","RFValue","formatDuration","getEpisodeIndex","useVideoPlayerStore","useSafeAreaInsets","globalStyles","useVideoPlayerConfig","jsx","_jsx","jsxs","_jsxs","Episodes","onPressEpisode","reportProgress","activeSeason","activeTrack","setCurrentTrackIndex","setActiveTrack","playList","setSettingsModal","setIsPaused","contentSeasons","setActiveSeason","setSelectedSubtitleTrack","setPlayBackRate","setActiveSubtitle","setSelectedVideoTrack","setMaxBitRate","setDuration","colors","left","seasonNumber","episodes","style","flexOneJustifyContentCenterAndAlignItemsCenter","children","color","text","handleEpisodePress","episode","isSuccess","id","episodeId","isVisible","action","index","type","contentId","episodeName","title","episodeNumber","skipIntro","undefined","nextEpisodeAt","sourceLink","thumbnail","subtitles","description","duration","sourceType","styles","menuTrigger","marginLeft","customStyles","triggerText","menuTriggerCustomStyles","optionsContainerStyle","menuOptionsContainer","map","season","menuOption","menuOptionCustomStyles","onSelect","episodesContainer","data","horizontal","showsHorizontalScrollIndicator","ItemSeparatorComponent","width","ListHeaderComponent","ListFooterComponent","renderItem","item","onPress","episodeItem","activeOpacity","source","uri","episodeThumbnail","resizeMode","cover","nowPlayingBadge","backgroundColor","primary","numberOfLines","episodeTitle","episodeInfoRow","episodeInfoText","String","padStart","publishDate","filter","Boolean","join","episodeDescription","keyExtractor","create","alignSelf","paddingHorizontal","paddingVertical","marginTop","borderRadius","paddingBottom","overflow","height","aspectRatio","position","top","fontSize","fontWeight","marginHorizontal","flexDirection","justifyContent","alignItems","marginVertical","lineHeight","optionText"],"sourceRoot":"../../../../src","sources":["VideoPlayer/model/Episodes.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
4
+ import React from 'react';
5
+ import { moderateScale } from 'react-native-size-matters';
6
+ import { X } from 'lucide-react-native';
7
+ import { useVideoPlayerStore } from "../store/videoPlayerStore.js";
8
+ import Episodes from "./Episodes.js";
9
+ import SpeedControls from "./SpeedControls.js";
10
+ import VideoPlayerSettings from "./VideoPlayerSettings.js";
11
+ import AudioAndSubtitles from "./AudioAndSubtitles.js";
12
+ import { useVideoResolutions } from "../utils/hooks/useVideoResolutions.js";
13
+ import { useVideoPlayerConfig } from "../context/index.js";
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ const VisibleAction = ({
16
+ settingModalAction,
17
+ onPressEpisode,
18
+ reportProgress,
19
+ resolutions
20
+ }) => {
21
+ switch (settingModalAction) {
22
+ case 'speed':
23
+ return /*#__PURE__*/_jsx(SpeedControls, {});
24
+ case 'audioOrSubtitle':
25
+ return /*#__PURE__*/_jsx(AudioAndSubtitles, {});
26
+ case 'settings':
27
+ return /*#__PURE__*/_jsx(VideoPlayerSettings, {
28
+ resolutions: resolutions || []
29
+ });
30
+ case 'episodes':
31
+ return /*#__PURE__*/_jsx(Episodes, {
32
+ onPressEpisode: onPressEpisode,
33
+ reportProgress: reportProgress
34
+ });
35
+ default:
36
+ return null;
37
+ }
38
+ };
39
+ const SettingModal = ({
40
+ onPressEpisode,
41
+ reportProgress
42
+ }) => {
43
+ const {
44
+ settingsModal,
45
+ setSettingsModal,
46
+ setIsPaused,
47
+ setControlsVisible,
48
+ activeTrack
49
+ } = useVideoPlayerStore();
50
+ const {
51
+ colors
52
+ } = useVideoPlayerConfig();
53
+ // Fetch available resolutions for current track
54
+ const resolutions = useVideoResolutions(activeTrack);
55
+ const onClose = () => {
56
+ setSettingsModal({
57
+ isVisible: false,
58
+ action: 'none'
59
+ });
60
+ setIsPaused(false);
61
+ setControlsVisible(true);
62
+ };
63
+ if (!settingsModal.isVisible) return null;
64
+ const containerStyle = settingsModal.action === 'audioOrSubtitle' ? [styles.contentContainer, styles.audioOrSubtitlePadding] : styles.contentContainer;
65
+ return /*#__PURE__*/_jsxs(View, {
66
+ style: StyleSheet.absoluteFill,
67
+ children: [/*#__PURE__*/_jsx(View, {
68
+ style: styles.overlay
69
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
70
+ onPress: onClose,
71
+ style: styles.closeButton,
72
+ children: /*#__PURE__*/_jsx(X, {
73
+ color: colors.text,
74
+ size: moderateScale(25)
75
+ })
76
+ }), /*#__PURE__*/_jsx(View, {
77
+ style: containerStyle,
78
+ children: /*#__PURE__*/_jsx(VisibleAction, {
79
+ settingModalAction: settingsModal.action,
80
+ resolutions: resolutions,
81
+ onPressEpisode: onPressEpisode,
82
+ reportProgress: reportProgress
83
+ })
84
+ })]
85
+ });
86
+ };
87
+ export default SettingModal;
88
+ const styles = StyleSheet.create({
89
+ overlay: {
90
+ ...StyleSheet.absoluteFillObject,
91
+ backgroundColor: 'rgba(0,0,0,0.9)',
92
+ pointerEvents: 'none'
93
+ },
94
+ closeButton: {
95
+ position: 'absolute',
96
+ top: moderateScale(20),
97
+ right: moderateScale(60),
98
+ width: moderateScale(50),
99
+ height: moderateScale(50),
100
+ justifyContent: 'center',
101
+ alignItems: 'center',
102
+ borderRadius: moderateScale(50),
103
+ zIndex: 10000
104
+ },
105
+ contentContainer: {
106
+ flex: 1,
107
+ zIndex: 1000
108
+ },
109
+ audioOrSubtitlePadding: {
110
+ paddingLeft: moderateScale(16),
111
+ paddingRight: moderateScale(16),
112
+ paddingTop: moderateScale(8)
113
+ }
114
+ });
115
+ //# sourceMappingURL=SettingModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","TouchableOpacity","View","React","moderateScale","X","useVideoPlayerStore","Episodes","SpeedControls","VideoPlayerSettings","AudioAndSubtitles","useVideoResolutions","useVideoPlayerConfig","jsx","_jsx","jsxs","_jsxs","VisibleAction","settingModalAction","onPressEpisode","reportProgress","resolutions","SettingModal","settingsModal","setSettingsModal","setIsPaused","setControlsVisible","activeTrack","colors","onClose","isVisible","action","containerStyle","styles","contentContainer","audioOrSubtitlePadding","style","absoluteFill","children","overlay","onPress","closeButton","color","text","size","create","absoluteFillObject","backgroundColor","pointerEvents","position","top","right","width","height","justifyContent","alignItems","borderRadius","zIndex","flex","paddingLeft","paddingRight","paddingTop"],"sourceRoot":"../../../../src","sources":["VideoPlayer/model/SettingModal.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ import React, { useMemo } from 'react';
4
+ import { FlatList, TouchableOpacity, View, StyleSheet, Text } from 'react-native';
5
+ import { verticalScale } from 'react-native-size-matters';
6
+ import { RFValue } from 'react-native-responsive-fontsize';
7
+ import { useVideoPlayerStore } from "../store/videoPlayerStore.js";
8
+ import globalStyles from "../Styles/globalStyles.js";
9
+ import { useVideoPlayerConfig } from "../context/index.js";
10
+
11
+ // --- Constants ---
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ const SPEED_OPTIONS = [{
14
+ name: '0.25x',
15
+ value: 0.25
16
+ }, {
17
+ name: '0.5x',
18
+ value: 0.5
19
+ }, {
20
+ name: '0.75x',
21
+ value: 0.75
22
+ }, {
23
+ name: 'Normal',
24
+ value: 1
25
+ }, {
26
+ name: '1.25x',
27
+ value: 1.25
28
+ }, {
29
+ name: '1.5x',
30
+ value: 1.5
31
+ }, {
32
+ name: '1.75x',
33
+ value: 1.75
34
+ }, {
35
+ name: '2x',
36
+ value: 2
37
+ }];
38
+
39
+ // --- UI Components ---
40
+ const ListHeader = () => /*#__PURE__*/_jsx(View, {
41
+ style: styles.listHeader
42
+ });
43
+ const ListFooter = () => /*#__PURE__*/_jsx(View, {
44
+ style: styles.listFooter
45
+ });
46
+ const SpeedItem = ({
47
+ name,
48
+ value,
49
+ isSelected,
50
+ onPress,
51
+ colors
52
+ }) => /*#__PURE__*/_jsx(TouchableOpacity, {
53
+ onPress: () => onPress({
54
+ value,
55
+ name
56
+ }),
57
+ style: styles.itemTouchable,
58
+ activeOpacity: 0.7,
59
+ children: /*#__PURE__*/_jsx(Text, {
60
+ style: [styles.itemText, {
61
+ color: colors.text
62
+ }, isSelected ? styles.itemTextSelected : styles.itemTextUnselected],
63
+ children: name
64
+ })
65
+ });
66
+
67
+ // --- Main Component ---
68
+ const SpeedControls = () => {
69
+ const {
70
+ setIsPaused,
71
+ playBackRate,
72
+ setPlayBackRate,
73
+ setControlsVisible,
74
+ setSettingsModal
75
+ } = useVideoPlayerStore();
76
+ const {
77
+ colors
78
+ } = useVideoPlayerConfig();
79
+ const speeds = useMemo(() => SPEED_OPTIONS, []);
80
+ const handleSelectSpeed = (value, name) => {
81
+ setPlayBackRate(value, name);
82
+ setSettingsModal({
83
+ action: 'none',
84
+ isVisible: false
85
+ });
86
+ setControlsVisible(true);
87
+ setIsPaused(false);
88
+ };
89
+ return /*#__PURE__*/_jsx(View, {
90
+ style: globalStyles.flexOneJustifyContentCenterAndAlignItemsCenter,
91
+ children: /*#__PURE__*/_jsx(FlatList, {
92
+ data: speeds,
93
+ showsVerticalScrollIndicator: false,
94
+ keyExtractor: item => item.name,
95
+ ListHeaderComponent: ListHeader,
96
+ ListFooterComponent: ListFooter,
97
+ renderItem: ({
98
+ item
99
+ }) => /*#__PURE__*/_jsx(SpeedItem, {
100
+ name: item.name,
101
+ value: item.value,
102
+ isSelected: playBackRate === item.value,
103
+ onPress: ({
104
+ value,
105
+ name
106
+ }) => handleSelectSpeed(value, name),
107
+ colors: colors
108
+ })
109
+ })
110
+ });
111
+ };
112
+ export default SpeedControls;
113
+
114
+ // --- Styles ---
115
+ const styles = StyleSheet.create({
116
+ listHeader: {
117
+ height: verticalScale(20)
118
+ },
119
+ listFooter: {
120
+ height: verticalScale(50)
121
+ },
122
+ itemTouchable: {
123
+ paddingVertical: verticalScale(12),
124
+ paddingHorizontal: verticalScale(30),
125
+ alignItems: 'center'
126
+ },
127
+ itemText: {
128
+ textAlign: 'center',
129
+ fontSize: RFValue(17),
130
+ // better readability
131
+ fontWeight: '600' // semi-bold for better emphasis
132
+ },
133
+ itemTextSelected: {
134
+ opacity: 1
135
+ },
136
+ itemTextUnselected: {
137
+ opacity: 0.6
138
+ }
139
+ });
140
+ //# sourceMappingURL=SpeedControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useMemo","FlatList","TouchableOpacity","View","StyleSheet","Text","verticalScale","RFValue","useVideoPlayerStore","globalStyles","useVideoPlayerConfig","jsx","_jsx","SPEED_OPTIONS","name","value","ListHeader","style","styles","listHeader","ListFooter","listFooter","SpeedItem","isSelected","onPress","colors","itemTouchable","activeOpacity","children","itemText","color","text","itemTextSelected","itemTextUnselected","SpeedControls","setIsPaused","playBackRate","setPlayBackRate","setControlsVisible","setSettingsModal","speeds","handleSelectSpeed","action","isVisible","flexOneJustifyContentCenterAndAlignItemsCenter","data","showsVerticalScrollIndicator","keyExtractor","item","ListHeaderComponent","ListFooterComponent","renderItem","create","height","paddingVertical","paddingHorizontal","alignItems","textAlign","fontSize","fontWeight","opacity"],"sourceRoot":"../../../../src","sources":["VideoPlayer/model/SpeedControls.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SACEC,QAAQ,EACRC,gBAAgB,EAChBC,IAAI,EACJC,UAAU,EACVC,IAAI,QACC,cAAc;AACrB,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,OAAO,QAAQ,kCAAkC;AAE1D,SAASC,mBAAmB,QAAQ,8BAA2B;AAC/D,OAAOC,YAAY,MAAM,2BAAwB;AACjD,SAASC,oBAAoB,QAAQ,qBAAY;;AAEjD;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,MAAMC,aAAa,GAAG,CACpB;EAAEC,IAAI,EAAE,OAAO;EAAEC,KAAK,EAAE;AAAK,CAAC,EAC9B;EAAED,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE;AAAI,CAAC,EAC5B;EAAED,IAAI,EAAE,OAAO;EAAEC,KAAK,EAAE;AAAK,CAAC,EAC9B;EAAED,IAAI,EAAE,QAAQ;EAAEC,KAAK,EAAE;AAAE,CAAC,EAC5B;EAAED,IAAI,EAAE,OAAO;EAAEC,KAAK,EAAE;AAAK,CAAC,EAC9B;EAAED,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE;AAAI,CAAC,EAC5B;EAAED,IAAI,EAAE,OAAO;EAAEC,KAAK,EAAE;AAAK,CAAC,EAC9B;EAAED,IAAI,EAAE,IAAI;EAAEC,KAAK,EAAE;AAAE,CAAC,CACzB;;AAED;AACA,MAAMC,UAAU,GAAGA,CAAA,kBAAMJ,IAAA,CAACT,IAAI;EAACc,KAAK,EAAEC,MAAM,CAACC;AAAW,CAAE,CAAC;AAC3D,MAAMC,UAAU,GAAGA,CAAA,kBAAMR,IAAA,CAACT,IAAI;EAACc,KAAK,EAAEC,MAAM,CAACG;AAAW,CAAE,CAAC;AAa3D,MAAMC,SAAmC,GAAGA,CAAC;EAC3CR,IAAI;EACJC,KAAK;EACLQ,UAAU;EACVC,OAAO;EACPC;AACF,CAAC,kBACCb,IAAA,CAACV,gBAAgB;EACfsB,OAAO,EAAEA,CAAA,KAAMA,OAAO,CAAC;IAAET,KAAK;IAAED;EAAK,CAAC,CAAE;EACxCG,KAAK,EAAEC,MAAM,CAACQ,aAAc;EAC5BC,aAAa,EAAE,GAAI;EAAAC,QAAA,eAEnBhB,IAAA,CAACP,IAAI;IACHY,KAAK,EAAE,CACLC,MAAM,CAACW,QAAQ,EACf;MAAEC,KAAK,EAAEL,MAAM,CAACM;IAAK,CAAC,EACtBR,UAAU,GAAGL,MAAM,CAACc,gBAAgB,GAAGd,MAAM,CAACe,kBAAkB,CAChE;IAAAL,QAAA,EAEDd;EAAI,CACD;AAAC,CACS,CACnB;;AAED;AACA,MAAMoB,aAAuB,GAAGA,CAAA,KAAM;EACpC,MAAM;IACJC,WAAW;IACXC,YAAY;IACZC,eAAe;IACfC,kBAAkB;IAClBC;EACF,CAAC,GAAG/B,mBAAmB,CAAC,CAAC;EACzB,MAAM;IAAEiB;EAAO,CAAC,GAAGf,oBAAoB,CAAC,CAAC;EACzC,MAAM8B,MAAM,GAAGxC,OAAO,CAAC,MAAMa,aAAa,EAAE,EAAE,CAAC;EAE/C,MAAM4B,iBAAiB,GAAGA,CAAC1B,KAAa,EAAED,IAAY,KAAK;IACzDuB,eAAe,CAACtB,KAAK,EAAED,IAAI,CAAC;IAC5ByB,gBAAgB,CAAC;MAAEG,MAAM,EAAE,MAAM;MAAEC,SAAS,EAAE;IAAM,CAAC,CAAC;IACtDL,kBAAkB,CAAC,IAAI,CAAC;IACxBH,WAAW,CAAC,KAAK,CAAC;EACpB,CAAC;EAED,oBACEvB,IAAA,CAACT,IAAI;IAACc,KAAK,EAAER,YAAY,CAACmC,8CAA+C;IAAAhB,QAAA,eACvEhB,IAAA,CAACX,QAAQ;MACP4C,IAAI,EAAEL,MAAO;MACbM,4BAA4B,EAAE,KAAM;MACpCC,YAAY,EAAGC,IAAI,IAAKA,IAAI,CAAClC,IAAK;MAClCmC,mBAAmB,EAAEjC,UAAW;MAChCkC,mBAAmB,EAAE9B,UAAW;MAChC+B,UAAU,EAAEA,CAAC;QAAEH;MAAK,CAAC,kBACnBpC,IAAA,CAACU,SAAS;QACRR,IAAI,EAAEkC,IAAI,CAAClC,IAAK;QAChBC,KAAK,EAAEiC,IAAI,CAACjC,KAAM;QAClBQ,UAAU,EAAEa,YAAY,KAAKY,IAAI,CAACjC,KAAM;QACxCS,OAAO,EAAEA,CAAC;UAAET,KAAK;UAAED;QAAK,CAAC,KAAK2B,iBAAiB,CAAC1B,KAAK,EAAED,IAAI,CAAE;QAC7DW,MAAM,EAAEA;MAAO,CAChB;IACD,CACH;EAAC,CACE,CAAC;AAEX,CAAC;AAED,eAAeS,aAAa;;AAE5B;AACA,MAAMhB,MAAM,GAAGd,UAAU,CAACgD,MAAM,CAAC;EAC/BjC,UAAU,EAAE;IACVkC,MAAM,EAAE/C,aAAa,CAAC,EAAE;EAC1B,CAAC;EACDe,UAAU,EAAE;IACVgC,MAAM,EAAE/C,aAAa,CAAC,EAAE;EAC1B,CAAC;EACDoB,aAAa,EAAE;IACb4B,eAAe,EAAEhD,aAAa,CAAC,EAAE,CAAC;IAClCiD,iBAAiB,EAAEjD,aAAa,CAAC,EAAE,CAAC;IACpCkD,UAAU,EAAE;EACd,CAAC;EACD3B,QAAQ,EAAE;IACR4B,SAAS,EAAE,QAAQ;IACnBC,QAAQ,EAAEnD,OAAO,CAAC,EAAE,CAAC;IAAE;IACvBoD,UAAU,EAAE,KAAK,CAAE;EACrB,CAAC;EACD3B,gBAAgB,EAAE;IAChB4B,OAAO,EAAE;EACX,CAAC;EACD3B,kBAAkB,EAAE;IAClB2B,OAAO,EAAE;EACX;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable react/no-unstable-nested-components */
4
+ import { useCallback } from 'react';
5
+ import { FlatList, TouchableOpacity, View, StyleSheet, Text } from 'react-native';
6
+ import { scale, verticalScale } from 'react-native-size-matters';
7
+ import { RFValue } from 'react-native-responsive-fontsize';
8
+ import { SelectedVideoTrackType } from 'react-native-video';
9
+ import globalStyles from "../Styles/globalStyles.js";
10
+ import { useVideoPlayerStore } from "../store/index.js";
11
+ import { useVideoPlayerConfig } from "../context/index.js";
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ const VideoPlayerSettings = ({
14
+ resolutions
15
+ }) => {
16
+ const {
17
+ setMaxBitRate,
18
+ setSelectedVideoTrack,
19
+ setIsPaused,
20
+ setSettingsModal,
21
+ setControlsVisible,
22
+ maxBitRate
23
+ } = useVideoPlayerStore();
24
+ const {
25
+ colors
26
+ } = useVideoPlayerConfig();
27
+ const handleSelect = useCallback(item => {
28
+ if (item.height === 'auto') {
29
+ setSelectedVideoTrack(null);
30
+ setMaxBitRate(null);
31
+ } else {
32
+ setSelectedVideoTrack({
33
+ type: SelectedVideoTrackType.RESOLUTION,
34
+ value: Number(item.height)
35
+ });
36
+ setMaxBitRate(item.bandwidth ?? null);
37
+ }
38
+ setIsPaused(false);
39
+ setSettingsModal({
40
+ isVisible: false,
41
+ action: 'none'
42
+ });
43
+ setControlsVisible(false);
44
+ }, [setMaxBitRate, setSelectedVideoTrack, setIsPaused, setSettingsModal, setControlsVisible]);
45
+ const keyExtractor = useCallback((item, index) => `${item.height}-${index}`, []);
46
+ const renderItem = useCallback(({
47
+ item
48
+ }) => {
49
+ const isSelected = maxBitRate === item.bandwidth;
50
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
51
+ onPress: () => handleSelect(item),
52
+ activeOpacity: 0.7,
53
+ children: /*#__PURE__*/_jsx(Text, {
54
+ style: [styles.optionText, {
55
+ color: colors.text
56
+ }, isSelected ? styles.optionTextSelected : styles.optionTextUnselected],
57
+ children: item.height === 'auto' ? 'Auto' : `${item.height}p`
58
+ })
59
+ });
60
+ }, [colors.text, handleSelect, maxBitRate]);
61
+ return /*#__PURE__*/_jsxs(View, {
62
+ style: [globalStyles.flexOne, styles.container],
63
+ children: [/*#__PURE__*/_jsx(Text, {
64
+ style: [styles.headerText, {
65
+ color: colors.text
66
+ }, styles.marginTopBottom],
67
+ children: "Video Quality"
68
+ }), /*#__PURE__*/_jsx(FlatList, {
69
+ data: resolutions,
70
+ renderItem: renderItem,
71
+ keyExtractor: keyExtractor,
72
+ showsVerticalScrollIndicator: false,
73
+ contentContainerStyle: {
74
+ paddingBottom: verticalScale(50)
75
+ },
76
+ ItemSeparatorComponent: () => /*#__PURE__*/_jsx(View, {
77
+ style: {
78
+ height: verticalScale(12)
79
+ }
80
+ })
81
+ })]
82
+ });
83
+ };
84
+ export default VideoPlayerSettings;
85
+ const styles = StyleSheet.create({
86
+ container: {
87
+ alignItems: 'center',
88
+ paddingHorizontal: 20
89
+ },
90
+ headerText: {
91
+ fontSize: RFValue(20),
92
+ fontWeight: '700',
93
+ textAlign: 'center'
94
+ },
95
+ marginTopBottom: {
96
+ marginBottom: verticalScale(16),
97
+ paddingTop: verticalScale(24)
98
+ },
99
+ optionText: {
100
+ fontSize: RFValue(17),
101
+ paddingVertical: verticalScale(4),
102
+ paddingHorizontal: scale(12),
103
+ textAlign: 'center'
104
+ },
105
+ optionTextSelected: {
106
+ fontWeight: '700',
107
+ textDecorationLine: 'underline' // selected highlight
108
+ },
109
+ optionTextUnselected: {
110
+ opacity: 0.8
111
+ }
112
+ });
113
+ //# sourceMappingURL=VideoPlayerSettings.js.map