@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.
- package/LICENSE +21 -0
- package/README.md +308 -0
- package/lib/module/VideoPlayer/MediaControls/BottomControls.js +156 -0
- package/lib/module/VideoPlayer/MediaControls/BottomControls.js.map +1 -0
- package/lib/module/VideoPlayer/MediaControls/MediaControls.js +27 -0
- package/lib/module/VideoPlayer/MediaControls/MediaControls.js.map +1 -0
- package/lib/module/VideoPlayer/MediaControls/MediaControlsProvider.js +85 -0
- package/lib/module/VideoPlayer/MediaControls/MediaControlsProvider.js.map +1 -0
- package/lib/module/VideoPlayer/MediaControls/MiddleControls.js +208 -0
- package/lib/module/VideoPlayer/MediaControls/MiddleControls.js.map +1 -0
- package/lib/module/VideoPlayer/MediaControls/TopControls.js +94 -0
- package/lib/module/VideoPlayer/MediaControls/TopControls.js.map +1 -0
- package/lib/module/VideoPlayer/Styles/fonts.js +58 -0
- package/lib/module/VideoPlayer/Styles/fonts.js.map +1 -0
- package/lib/module/VideoPlayer/Styles/globalStyles.js +75 -0
- package/lib/module/VideoPlayer/Styles/globalStyles.js.map +1 -0
- package/lib/module/VideoPlayer/VideoPlayer.js +180 -0
- package/lib/module/VideoPlayer/VideoPlayer.js.map +1 -0
- package/lib/module/VideoPlayer/components/ProgressBar.js +84 -0
- package/lib/module/VideoPlayer/components/ProgressBar.js.map +1 -0
- package/lib/module/VideoPlayer/components/SkipAndNextControls.js +154 -0
- package/lib/module/VideoPlayer/components/SkipAndNextControls.js.map +1 -0
- package/lib/module/VideoPlayer/components/SubtitleView.js +57 -0
- package/lib/module/VideoPlayer/components/SubtitleView.js.map +1 -0
- package/lib/module/VideoPlayer/context/VideoPlayerConfig.js +47 -0
- package/lib/module/VideoPlayer/context/VideoPlayerConfig.js.map +1 -0
- package/lib/module/VideoPlayer/context/index.js +4 -0
- package/lib/module/VideoPlayer/context/index.js.map +1 -0
- package/lib/module/VideoPlayer/index.js +7 -0
- package/lib/module/VideoPlayer/index.js.map +1 -0
- package/lib/module/VideoPlayer/model/AudioAndSubtitles.js +257 -0
- package/lib/module/VideoPlayer/model/AudioAndSubtitles.js.map +1 -0
- package/lib/module/VideoPlayer/model/Episodes.js +272 -0
- package/lib/module/VideoPlayer/model/Episodes.js.map +1 -0
- package/lib/module/VideoPlayer/model/SettingModal.js +115 -0
- package/lib/module/VideoPlayer/model/SettingModal.js.map +1 -0
- package/lib/module/VideoPlayer/model/SpeedControls.js +140 -0
- package/lib/module/VideoPlayer/model/SpeedControls.js.map +1 -0
- package/lib/module/VideoPlayer/model/VideoPlayerSettings.js +113 -0
- package/lib/module/VideoPlayer/model/VideoPlayerSettings.js.map +1 -0
- package/lib/module/VideoPlayer/store/index.js +5 -0
- package/lib/module/VideoPlayer/store/index.js.map +1 -0
- package/lib/module/VideoPlayer/store/videoPlayer.type.js +4 -0
- package/lib/module/VideoPlayer/store/videoPlayer.type.js.map +1 -0
- package/lib/module/VideoPlayer/store/videoPlayerStore.js +147 -0
- package/lib/module/VideoPlayer/store/videoPlayerStore.js.map +1 -0
- package/lib/module/VideoPlayer/utils/Display.js +22 -0
- package/lib/module/VideoPlayer/utils/Display.js.map +1 -0
- package/lib/module/VideoPlayer/utils/PlatformSelector.js +18 -0
- package/lib/module/VideoPlayer/utils/PlatformSelector.js.map +1 -0
- package/lib/module/VideoPlayer/utils/hooks/index.js +5 -0
- package/lib/module/VideoPlayer/utils/hooks/index.js.map +1 -0
- package/lib/module/VideoPlayer/utils/hooks/useVideoPlayerBack.js +48 -0
- package/lib/module/VideoPlayer/utils/hooks/useVideoPlayerBack.js.map +1 -0
- package/lib/module/VideoPlayer/utils/hooks/useVideoResolutions.js +88 -0
- package/lib/module/VideoPlayer/utils/hooks/useVideoResolutions.js.map +1 -0
- package/lib/module/VideoPlayer/utils/index.js +10 -0
- package/lib/module/VideoPlayer/utils/index.js.map +1 -0
- package/lib/module/VideoPlayer/utils/lockOrientation.js +31 -0
- package/lib/module/VideoPlayer/utils/lockOrientation.js.map +1 -0
- package/lib/module/VideoPlayer/utils/playerEvents.js +79 -0
- package/lib/module/VideoPlayer/utils/playerEvents.js.map +1 -0
- package/lib/module/VideoPlayer/utils/timeFormatter.js +35 -0
- package/lib/module/VideoPlayer/utils/timeFormatter.js.map +1 -0
- package/lib/module/VideoPlayer/utils/useWatchReporter.js +68 -0
- package/lib/module/VideoPlayer/utils/useWatchReporter.js.map +1 -0
- package/lib/module/VideoPlayer/utils/videoControl.js +166 -0
- package/lib/module/VideoPlayer/utils/videoControl.js.map +1 -0
- package/lib/module/VideoPlayer/utils/videoRef.js +5 -0
- package/lib/module/VideoPlayer/utils/videoRef.js.map +1 -0
- package/lib/module/VideoPlayer/utils/videoSource.js +17 -0
- package/lib/module/VideoPlayer/utils/videoSource.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/BottomControls.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/BottomControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MediaControls.d.ts +6 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MediaControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MediaControlsProvider.d.ts +14 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MediaControlsProvider.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MiddleControls.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/MiddleControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/TopControls.d.ts +7 -0
- package/lib/typescript/src/VideoPlayer/MediaControls/TopControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/Styles/fonts.d.ts +54 -0
- package/lib/typescript/src/VideoPlayer/Styles/fonts.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/Styles/globalStyles.d.ts +70 -0
- package/lib/typescript/src/VideoPlayer/Styles/globalStyles.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/VideoPlayer.d.ts +22 -0
- package/lib/typescript/src/VideoPlayer/VideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/components/ProgressBar.d.ts +12 -0
- package/lib/typescript/src/VideoPlayer/components/ProgressBar.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/components/SkipAndNextControls.d.ts +12 -0
- package/lib/typescript/src/VideoPlayer/components/SkipAndNextControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/components/SubtitleView.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/components/SubtitleView.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/context/VideoPlayerConfig.d.ts +25 -0
- package/lib/typescript/src/VideoPlayer/context/VideoPlayerConfig.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/context/index.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/context/index.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/index.d.ts +5 -0
- package/lib/typescript/src/VideoPlayer/index.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/model/AudioAndSubtitles.d.ts +4 -0
- package/lib/typescript/src/VideoPlayer/model/AudioAndSubtitles.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/model/Episodes.d.ts +12 -0
- package/lib/typescript/src/VideoPlayer/model/Episodes.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/model/SettingModal.d.ts +12 -0
- package/lib/typescript/src/VideoPlayer/model/SettingModal.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/model/SpeedControls.d.ts +4 -0
- package/lib/typescript/src/VideoPlayer/model/SpeedControls.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/model/VideoPlayerSettings.d.ts +7 -0
- package/lib/typescript/src/VideoPlayer/model/VideoPlayerSettings.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/store/index.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/store/index.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/store/videoPlayer.type.d.ts +144 -0
- package/lib/typescript/src/VideoPlayer/store/videoPlayer.type.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/store/videoPlayerStore.d.ts +20 -0
- package/lib/typescript/src/VideoPlayer/store/videoPlayerStore.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/Display.d.ts +8 -0
- package/lib/typescript/src/VideoPlayer/utils/Display.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/PlatformSelector.d.ts +11 -0
- package/lib/typescript/src/VideoPlayer/utils/PlatformSelector.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/index.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoPlayerBack.d.ts +6 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoPlayerBack.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoResolutions.d.ts +12 -0
- package/lib/typescript/src/VideoPlayer/utils/hooks/useVideoResolutions.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/index.d.ts +8 -0
- package/lib/typescript/src/VideoPlayer/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/lockOrientation.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/utils/lockOrientation.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/playerEvents.d.ts +18 -0
- package/lib/typescript/src/VideoPlayer/utils/playerEvents.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/timeFormatter.d.ts +9 -0
- package/lib/typescript/src/VideoPlayer/utils/timeFormatter.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/useWatchReporter.d.ts +26 -0
- package/lib/typescript/src/VideoPlayer/utils/useWatchReporter.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/videoControl.d.ts +17 -0
- package/lib/typescript/src/VideoPlayer/utils/videoControl.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/videoRef.d.ts +3 -0
- package/lib/typescript/src/VideoPlayer/utils/videoRef.d.ts.map +1 -0
- package/lib/typescript/src/VideoPlayer/utils/videoSource.d.ts +10 -0
- package/lib/typescript/src/VideoPlayer/utils/videoSource.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/package.json +191 -0
- package/src/VideoPlayer/MediaControls/BottomControls.tsx +185 -0
- package/src/VideoPlayer/MediaControls/MediaControls.tsx +29 -0
- package/src/VideoPlayer/MediaControls/MediaControlsProvider.tsx +99 -0
- package/src/VideoPlayer/MediaControls/MiddleControls.tsx +232 -0
- package/src/VideoPlayer/MediaControls/TopControls.tsx +92 -0
- package/src/VideoPlayer/Styles/fonts.ts +106 -0
- package/src/VideoPlayer/Styles/globalStyles.ts +74 -0
- package/src/VideoPlayer/VideoPlayer.tsx +217 -0
- package/src/VideoPlayer/components/ProgressBar.tsx +98 -0
- package/src/VideoPlayer/components/SkipAndNextControls.tsx +195 -0
- package/src/VideoPlayer/components/SubtitleView.tsx +53 -0
- package/src/VideoPlayer/context/VideoPlayerConfig.tsx +65 -0
- package/src/VideoPlayer/context/index.ts +5 -0
- package/src/VideoPlayer/index.ts +4 -0
- package/src/VideoPlayer/model/AudioAndSubtitles.tsx +302 -0
- package/src/VideoPlayer/model/Episodes.tsx +294 -0
- package/src/VideoPlayer/model/SettingModal.tsx +128 -0
- package/src/VideoPlayer/model/SpeedControls.tsx +134 -0
- package/src/VideoPlayer/model/VideoPlayerSettings.tsx +141 -0
- package/src/VideoPlayer/store/index.ts +2 -0
- package/src/VideoPlayer/store/videoPlayer.type.ts +192 -0
- package/src/VideoPlayer/store/videoPlayerStore.ts +101 -0
- package/src/VideoPlayer/utils/Display.ts +14 -0
- package/src/VideoPlayer/utils/PlatformSelector.ts +18 -0
- package/src/VideoPlayer/utils/hooks/index.ts +2 -0
- package/src/VideoPlayer/utils/hooks/useVideoPlayerBack.ts +66 -0
- package/src/VideoPlayer/utils/hooks/useVideoResolutions.ts +119 -0
- package/src/VideoPlayer/utils/index.ts +7 -0
- package/src/VideoPlayer/utils/lockOrientation.ts +34 -0
- package/src/VideoPlayer/utils/playerEvents.ts +97 -0
- package/src/VideoPlayer/utils/timeFormatter.ts +47 -0
- package/src/VideoPlayer/utils/useWatchReporter.ts +104 -0
- package/src/VideoPlayer/utils/videoControl.ts +192 -0
- package/src/VideoPlayer/utils/videoRef.ts +4 -0
- package/src/VideoPlayer/utils/videoSource.ts +23 -0
- package/src/index.tsx +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","FlatList","TouchableOpacity","View","StyleSheet","Text","scale","verticalScale","RFValue","SelectedVideoTrackType","globalStyles","useVideoPlayerStore","useVideoPlayerConfig","jsx","_jsx","jsxs","_jsxs","VideoPlayerSettings","resolutions","setMaxBitRate","setSelectedVideoTrack","setIsPaused","setSettingsModal","setControlsVisible","maxBitRate","colors","handleSelect","item","height","type","RESOLUTION","value","Number","bandwidth","isVisible","action","keyExtractor","index","renderItem","isSelected","onPress","activeOpacity","children","style","styles","optionText","color","text","optionTextSelected","optionTextUnselected","flexOne","container","headerText","marginTopBottom","data","showsVerticalScrollIndicator","contentContainerStyle","paddingBottom","ItemSeparatorComponent","create","alignItems","paddingHorizontal","fontSize","fontWeight","textAlign","marginBottom","paddingTop","paddingVertical","textDecorationLine","opacity"],"sourceRoot":"../../../../src","sources":["VideoPlayer/model/VideoPlayerSettings.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["VideoPlayer/store/index.ts"],"mappings":";;AAAA,cAAc,uBAAoB;AAClC,cAAc,uBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["VideoPlayer/store/videoPlayer.type.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author Naresh Dhamu
|
|
5
|
+
* @lastModified Sat 16 Aug 2025 at 10:26 AM
|
|
6
|
+
*/
|
|
7
|
+
import { create } from 'zustand';
|
|
8
|
+
import { createJSONStorage, persist } from 'zustand/middleware';
|
|
9
|
+
import { MMKV } from 'react-native-mmkv';
|
|
10
|
+
import { ResizeMode } from 'react-native-video';
|
|
11
|
+
export const storage = new MMKV({
|
|
12
|
+
id: 'videoPlayerStorage',
|
|
13
|
+
encryptionKey: 'videoPlayerKey'
|
|
14
|
+
});
|
|
15
|
+
export const mmkvStorage = {
|
|
16
|
+
setItem: (key, value) => storage.set(key, value),
|
|
17
|
+
getItem: key => storage.getString(key) ?? null,
|
|
18
|
+
removeItem: key => storage.delete(key)
|
|
19
|
+
};
|
|
20
|
+
const storeDataDefaults = {
|
|
21
|
+
currentTime: 0,
|
|
22
|
+
duration: 0,
|
|
23
|
+
isPaused: false,
|
|
24
|
+
isBuffering: false,
|
|
25
|
+
resizeMode: ResizeMode.CONTAIN,
|
|
26
|
+
controlsVisible: true,
|
|
27
|
+
controlsTimer: 6,
|
|
28
|
+
activeTrack: null,
|
|
29
|
+
playableDuration: 0,
|
|
30
|
+
settingsModal: {
|
|
31
|
+
isVisible: false,
|
|
32
|
+
action: 'none'
|
|
33
|
+
},
|
|
34
|
+
playBackRate: 1,
|
|
35
|
+
playBackRateLabel: null,
|
|
36
|
+
onLoad: null,
|
|
37
|
+
selectedAudioTrack: null,
|
|
38
|
+
selectedSubtitleTrack: null,
|
|
39
|
+
selectedVideoTrack: null,
|
|
40
|
+
activeSubtitle: null,
|
|
41
|
+
maxBitRate: null,
|
|
42
|
+
startWatchTime: null,
|
|
43
|
+
playList: [],
|
|
44
|
+
currentTrackIndex: 0,
|
|
45
|
+
contentSeasons: null,
|
|
46
|
+
activeSeason: null,
|
|
47
|
+
error: null,
|
|
48
|
+
isViewCounted: false,
|
|
49
|
+
isSkipIntroVisible: false,
|
|
50
|
+
isNextEpisodeVisible: false
|
|
51
|
+
};
|
|
52
|
+
export const useVideoPlayerStore = create()(persist(set => ({
|
|
53
|
+
...storeDataDefaults,
|
|
54
|
+
setCurrentTime: currentTime => set({
|
|
55
|
+
currentTime
|
|
56
|
+
}),
|
|
57
|
+
setDuration: duration => set({
|
|
58
|
+
duration
|
|
59
|
+
}),
|
|
60
|
+
setIsPaused: isPaused => set({
|
|
61
|
+
isPaused
|
|
62
|
+
}),
|
|
63
|
+
setIsBuffering: isBuffering => set({
|
|
64
|
+
isBuffering
|
|
65
|
+
}),
|
|
66
|
+
setResizeMode: resizeMode => set({
|
|
67
|
+
resizeMode
|
|
68
|
+
}),
|
|
69
|
+
setControlsVisible: controlsVisible => set({
|
|
70
|
+
controlsVisible
|
|
71
|
+
}),
|
|
72
|
+
setControlsTimer: controlsTimer => set({
|
|
73
|
+
controlsTimer
|
|
74
|
+
}),
|
|
75
|
+
setActiveTrack: activeTrack => set({
|
|
76
|
+
activeTrack
|
|
77
|
+
}),
|
|
78
|
+
setPlayableDuration: playableDuration => set({
|
|
79
|
+
playableDuration
|
|
80
|
+
}),
|
|
81
|
+
setSettingsModal: ({
|
|
82
|
+
isVisible,
|
|
83
|
+
action
|
|
84
|
+
}) => set({
|
|
85
|
+
settingsModal: {
|
|
86
|
+
isVisible,
|
|
87
|
+
action
|
|
88
|
+
}
|
|
89
|
+
}),
|
|
90
|
+
setPlayBackRate: (playBackRate, playBackRateLabel) => set({
|
|
91
|
+
playBackRate,
|
|
92
|
+
playBackRateLabel
|
|
93
|
+
}),
|
|
94
|
+
setOnLoad: onLoad => set({
|
|
95
|
+
onLoad
|
|
96
|
+
}),
|
|
97
|
+
setSelectedAudioTrack: selectedAudioTrack => set({
|
|
98
|
+
selectedAudioTrack
|
|
99
|
+
}),
|
|
100
|
+
setSelectedSubtitleTrack: selectedSubtitleTrack => set({
|
|
101
|
+
selectedSubtitleTrack
|
|
102
|
+
}),
|
|
103
|
+
setSelectedVideoTrack: selectedVideoTrack => set({
|
|
104
|
+
selectedVideoTrack
|
|
105
|
+
}),
|
|
106
|
+
setActiveSubtitle: activeSubtitle => set({
|
|
107
|
+
activeSubtitle
|
|
108
|
+
}),
|
|
109
|
+
setMaxBitRate: maxBitRate => set({
|
|
110
|
+
maxBitRate
|
|
111
|
+
}),
|
|
112
|
+
setStartWatchTime: startWatchTime => set({
|
|
113
|
+
startWatchTime
|
|
114
|
+
}),
|
|
115
|
+
setPlayList: playList => set({
|
|
116
|
+
playList
|
|
117
|
+
}),
|
|
118
|
+
setCurrentTrackIndex: currentTrackIndex => set({
|
|
119
|
+
currentTrackIndex
|
|
120
|
+
}),
|
|
121
|
+
setContentSeasons: contentSeasons => set({
|
|
122
|
+
contentSeasons
|
|
123
|
+
}),
|
|
124
|
+
setActiveSeason: activeSeason => set({
|
|
125
|
+
activeSeason
|
|
126
|
+
}),
|
|
127
|
+
setError: error => set({
|
|
128
|
+
error
|
|
129
|
+
}),
|
|
130
|
+
setIsViewCounted: isViewCounted => set({
|
|
131
|
+
isViewCounted
|
|
132
|
+
}),
|
|
133
|
+
setIsSkipIntroVisible: isSkipIntroVisible => set({
|
|
134
|
+
isSkipIntroVisible
|
|
135
|
+
}),
|
|
136
|
+
setIsNextEpisodeVisible: isNextEpisodeVisible => set({
|
|
137
|
+
isNextEpisodeVisible
|
|
138
|
+
}),
|
|
139
|
+
resetStore: () => {
|
|
140
|
+
set(storeDataDefaults);
|
|
141
|
+
storage.clearAll();
|
|
142
|
+
}
|
|
143
|
+
}), {
|
|
144
|
+
name: 'VideoPlayerStorage',
|
|
145
|
+
storage: createJSONStorage(() => mmkvStorage)
|
|
146
|
+
}));
|
|
147
|
+
//# sourceMappingURL=videoPlayerStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["create","createJSONStorage","persist","MMKV","ResizeMode","storage","id","encryptionKey","mmkvStorage","setItem","key","value","set","getItem","getString","removeItem","delete","storeDataDefaults","currentTime","duration","isPaused","isBuffering","resizeMode","CONTAIN","controlsVisible","controlsTimer","activeTrack","playableDuration","settingsModal","isVisible","action","playBackRate","playBackRateLabel","onLoad","selectedAudioTrack","selectedSubtitleTrack","selectedVideoTrack","activeSubtitle","maxBitRate","startWatchTime","playList","currentTrackIndex","contentSeasons","activeSeason","error","isViewCounted","isSkipIntroVisible","isNextEpisodeVisible","useVideoPlayerStore","setCurrentTime","setDuration","setIsPaused","setIsBuffering","setResizeMode","setControlsVisible","setControlsTimer","setActiveTrack","setPlayableDuration","setSettingsModal","setPlayBackRate","setOnLoad","setSelectedAudioTrack","setSelectedSubtitleTrack","setSelectedVideoTrack","setActiveSubtitle","setMaxBitRate","setStartWatchTime","setPlayList","setCurrentTrackIndex","setContentSeasons","setActiveSeason","setError","setIsViewCounted","setIsSkipIntroVisible","setIsNextEpisodeVisible","resetStore","clearAll","name"],"sourceRoot":"../../../../src","sources":["VideoPlayer/store/videoPlayerStore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author Naresh Dhamu
|
|
5
|
+
* @lastModified Thu 14 Aug 2025 at 09:41 AM
|
|
6
|
+
*/
|
|
7
|
+
import { Dimensions } from 'react-native';
|
|
8
|
+
const {
|
|
9
|
+
height,
|
|
10
|
+
width
|
|
11
|
+
} = Dimensions.get('window');
|
|
12
|
+
const setHeight = h => height / 100 * h;
|
|
13
|
+
const setWidth = w => width / 100 * w;
|
|
14
|
+
const fullWidth = Dimensions.get('window').width;
|
|
15
|
+
const fullHeight = Dimensions.get('window').height;
|
|
16
|
+
export default {
|
|
17
|
+
setHeight,
|
|
18
|
+
setWidth,
|
|
19
|
+
fullWidth,
|
|
20
|
+
fullHeight
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=Display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Dimensions","height","width","get","setHeight","h","setWidth","w","fullWidth","fullHeight"],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/Display.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,SAASA,UAAU,QAAQ,cAAc;AAEzC,MAAM;EAAEC,MAAM;EAAEC;AAAM,CAAC,GAAGF,UAAU,CAACG,GAAG,CAAC,QAAQ,CAAC;AAElD,MAAMC,SAAS,GAAIC,CAAS,IAAMJ,MAAM,GAAG,GAAG,GAAII,CAAC;AACnD,MAAMC,QAAQ,GAAIC,CAAS,IAAML,KAAK,GAAG,GAAG,GAAIK,CAAC;AACjD,MAAMC,SAAS,GAAGR,UAAU,CAACG,GAAG,CAAC,QAAQ,CAAC,CAACD,KAAK;AAChD,MAAMO,UAAU,GAAGT,UAAU,CAACG,GAAG,CAAC,QAAQ,CAAC,CAACF,MAAM;AAElD,eAAe;EAAEG,SAAS;EAAEE,QAAQ;EAAEE,SAAS;EAAEC;AAAW,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author Naresh Dhamu
|
|
5
|
+
* @lastModified Fri 08 Aug 2025 at 08:44 PM
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Platform } from 'react-native';
|
|
9
|
+
class PlatformSelector {
|
|
10
|
+
isAndroid() {
|
|
11
|
+
return Platform.OS === 'android';
|
|
12
|
+
}
|
|
13
|
+
isIOS() {
|
|
14
|
+
return Platform.OS === 'ios';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default new PlatformSelector();
|
|
18
|
+
//# sourceMappingURL=PlatformSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","PlatformSelector","isAndroid","OS","isIOS"],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/PlatformSelector.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,gBAAgB,CAAC;EACdC,SAASA,CAAA,EAAY;IAC1B,OAAOF,QAAQ,CAACG,EAAE,KAAK,SAAS;EAClC;EAEOC,KAAKA,CAAA,EAAY;IACtB,OAAOJ,QAAQ,CAACG,EAAE,KAAK,KAAK;EAC9B;AACF;AAEA,eAAe,IAAIF,gBAAgB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["VideoPlayer/utils/hooks/index.ts"],"mappings":";;AAAA,cAAc,yBAAsB;AACpC,cAAc,0BAAuB","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useCallback, useRef } from 'react';
|
|
4
|
+
import { BackHandler, Platform, AppState } from 'react-native';
|
|
5
|
+
import { lockToPortrait } from "../lockOrientation.js";
|
|
6
|
+
import { useVideoPlayerStore } from "../../store/videoPlayerStore.js";
|
|
7
|
+
export const useVideoPlayerBack = ({
|
|
8
|
+
navigation
|
|
9
|
+
} = {}) => {
|
|
10
|
+
const {
|
|
11
|
+
resetStore
|
|
12
|
+
} = useVideoPlayerStore();
|
|
13
|
+
const hasClosed = useRef(false); // prevent multiple calls
|
|
14
|
+
|
|
15
|
+
const handleClose = useCallback(() => {
|
|
16
|
+
if (hasClosed.current) return; // prevent loop
|
|
17
|
+
hasClosed.current = true;
|
|
18
|
+
resetStore();
|
|
19
|
+
lockToPortrait();
|
|
20
|
+
if (navigation?.canGoBack()) {
|
|
21
|
+
navigation.goBack();
|
|
22
|
+
}
|
|
23
|
+
}, [resetStore, navigation]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const backHandler = Platform.OS === 'android' ? BackHandler.addEventListener('hardwareBackPress', () => {
|
|
26
|
+
handleClose();
|
|
27
|
+
return true;
|
|
28
|
+
}) : undefined;
|
|
29
|
+
const unsubscribe = navigation?.addListener('beforeRemove', e => {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
handleClose();
|
|
32
|
+
navigation.dispatch(e.data.action);
|
|
33
|
+
});
|
|
34
|
+
const handleAppStateChange = nextAppState => {
|
|
35
|
+
if (nextAppState === 'inactive') {
|
|
36
|
+
handleClose();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const appStateListener = AppState.addEventListener('change', handleAppStateChange);
|
|
40
|
+
return () => {
|
|
41
|
+
backHandler?.remove();
|
|
42
|
+
unsubscribe?.();
|
|
43
|
+
appStateListener.remove();
|
|
44
|
+
};
|
|
45
|
+
}, [handleClose, navigation]);
|
|
46
|
+
return handleClose;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=useVideoPlayerBack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useCallback","useRef","BackHandler","Platform","AppState","lockToPortrait","useVideoPlayerStore","useVideoPlayerBack","navigation","resetStore","hasClosed","handleClose","current","canGoBack","goBack","backHandler","OS","addEventListener","undefined","unsubscribe","addListener","e","preventDefault","dispatch","data","action","handleAppStateChange","nextAppState","appStateListener","remove"],"sourceRoot":"../../../../../src","sources":["VideoPlayer/utils/hooks/useVideoPlayerBack.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AACtD,SACEC,WAAW,EACXC,QAAQ,EACRC,QAAQ,QAEH,cAAc;AACrB,SAASC,cAAc,QAAQ,uBAAoB;AACnD,SAASC,mBAAmB,QAAQ,iCAA8B;AAMlE,OAAO,MAAMC,kBAAkB,GAAGA,CAAC;EACjCC;AACuB,CAAC,GAAG,CAAC,CAAC,KAAK;EAClC,MAAM;IAAEC;EAAW,CAAC,GAAGH,mBAAmB,CAAC,CAAC;EAC5C,MAAMI,SAAS,GAAGT,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;;EAEjC,MAAMU,WAAW,GAAGX,WAAW,CAAC,MAAM;IACpC,IAAIU,SAAS,CAACE,OAAO,EAAE,OAAO,CAAC;IAC/BF,SAAS,CAACE,OAAO,GAAG,IAAI;IAExBH,UAAU,CAAC,CAAC;IACZJ,cAAc,CAAC,CAAC;IAEhB,IAAIG,UAAU,EAAEK,SAAS,CAAC,CAAC,EAAE;MAC3BL,UAAU,CAACM,MAAM,CAAC,CAAC;IACrB;EACF,CAAC,EAAE,CAACL,UAAU,EAAED,UAAU,CAAC,CAAC;EAE5BT,SAAS,CAAC,MAAM;IACd,MAAMgB,WAAW,GACfZ,QAAQ,CAACa,EAAE,KAAK,SAAS,GACrBd,WAAW,CAACe,gBAAgB,CAAC,mBAAmB,EAAE,MAAM;MACtDN,WAAW,CAAC,CAAC;MACb,OAAO,IAAI;IACb,CAAC,CAAC,GACFO,SAAS;IAEf,MAAMC,WAAW,GAAGX,UAAU,EAAEY,WAAW,CAAC,cAAc,EAAGC,CAAM,IAAK;MACtEA,CAAC,CAACC,cAAc,CAAC,CAAC;MAClBX,WAAW,CAAC,CAAC;MACbH,UAAU,CAACe,QAAQ,CAACF,CAAC,CAACG,IAAI,CAACC,MAAM,CAAC;IACpC,CAAC,CAAC;IAEF,MAAMC,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,IAAIA,YAAY,KAAK,UAAU,EAAE;QAC/BhB,WAAW,CAAC,CAAC;MACf;IACF,CAAC;IACD,MAAMiB,gBAAgB,GAAGxB,QAAQ,CAACa,gBAAgB,CAChD,QAAQ,EACRS,oBACF,CAAC;IAED,OAAO,MAAM;MACXX,WAAW,EAAEc,MAAM,CAAC,CAAC;MACrBV,WAAW,GAAG,CAAC;MACfS,gBAAgB,CAACC,MAAM,CAAC,CAAC;IAC3B,CAAC;EACH,CAAC,EAAE,CAAClB,WAAW,EAAEH,UAAU,CAAC,CAAC;EAE7B,OAAOG,WAAW;AACpB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
async function getHLSBandwidthAndResolutions(m3u8Url) {
|
|
6
|
+
try {
|
|
7
|
+
if (!m3u8Url?.endsWith('.m3u8')) return [];
|
|
8
|
+
const {
|
|
9
|
+
data
|
|
10
|
+
} = await axios.get(m3u8Url);
|
|
11
|
+
if (!data) return [];
|
|
12
|
+
const lines = data.split('\n');
|
|
13
|
+
const streams = [];
|
|
14
|
+
let bandwidth = null;
|
|
15
|
+
let width = null;
|
|
16
|
+
let height = null;
|
|
17
|
+
for (const line of lines) {
|
|
18
|
+
if (line.startsWith('#EXT-X-STREAM-INF')) {
|
|
19
|
+
const bandwidthMatch = line.match(/BANDWIDTH=(\d+)/);
|
|
20
|
+
const resolutionMatch = line.match(/RESOLUTION=(\d+)x(\d+)/);
|
|
21
|
+
bandwidth = bandwidthMatch ? Number(bandwidthMatch[1]) : null;
|
|
22
|
+
if (resolutionMatch) {
|
|
23
|
+
width = Number(resolutionMatch[1]);
|
|
24
|
+
height = Number(resolutionMatch[2]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (line.trim().endsWith('.m3u8') && bandwidth !== null && width !== null && height !== null) {
|
|
28
|
+
streams.push({
|
|
29
|
+
bandwidth,
|
|
30
|
+
width,
|
|
31
|
+
height
|
|
32
|
+
});
|
|
33
|
+
bandwidth = null;
|
|
34
|
+
width = null;
|
|
35
|
+
height = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
streams.sort((a, b) => b.height - a.height);
|
|
39
|
+
const autoStream = {
|
|
40
|
+
bandwidth: 0,
|
|
41
|
+
width: 'auto',
|
|
42
|
+
height: 'auto'
|
|
43
|
+
};
|
|
44
|
+
return [autoStream, ...streams];
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error('Error fetching or parsing HLS stream:', error);
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Simple in-memory cache
|
|
51
|
+
const resolutionCache = {};
|
|
52
|
+
export const useVideoResolutions = track => {
|
|
53
|
+
const [resolutions, setResolutions] = useState([{
|
|
54
|
+
height: 'auto',
|
|
55
|
+
bandwidth: null
|
|
56
|
+
}]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!track) return;
|
|
59
|
+
const source = track.isTrailer ? track.trailerSource : track.sourceLink;
|
|
60
|
+
if (!source) return;
|
|
61
|
+
|
|
62
|
+
// Cache hit
|
|
63
|
+
if (resolutionCache[source]) {
|
|
64
|
+
setResolutions(resolutionCache[source]);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const fetchResolutions = async () => {
|
|
68
|
+
try {
|
|
69
|
+
const data = await getHLSBandwidthAndResolutions(source);
|
|
70
|
+
const filteredData = data.filter(item => typeof item.height === 'number');
|
|
71
|
+
const newResolutions = [{
|
|
72
|
+
height: 'auto',
|
|
73
|
+
bandwidth: null
|
|
74
|
+
}, ...filteredData.map(item => ({
|
|
75
|
+
height: item.height,
|
|
76
|
+
bandwidth: item.bandwidth
|
|
77
|
+
}))];
|
|
78
|
+
resolutionCache[source] = newResolutions; // cache
|
|
79
|
+
setResolutions(newResolutions);
|
|
80
|
+
} catch (error) {
|
|
81
|
+
console.error('Failed to fetch video resolutions', error);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
fetchResolutions();
|
|
85
|
+
}, [track]);
|
|
86
|
+
return resolutions;
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=useVideoResolutions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","axios","getHLSBandwidthAndResolutions","m3u8Url","endsWith","data","get","lines","split","streams","bandwidth","width","height","line","startsWith","bandwidthMatch","match","resolutionMatch","Number","trim","push","sort","a","b","autoStream","error","console","resolutionCache","useVideoResolutions","track","resolutions","setResolutions","source","isTrailer","trailerSource","sourceLink","fetchResolutions","filteredData","filter","item","newResolutions","map"],"sourceRoot":"../../../../../src","sources":["VideoPlayer/utils/hooks/useVideoResolutions.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export * from "./lockOrientation.js";
|
|
4
|
+
export * from "./hooks/index.js";
|
|
5
|
+
export * from "./playerEvents.js";
|
|
6
|
+
export * from "./videoControl.js";
|
|
7
|
+
export * from "./videoSource.js";
|
|
8
|
+
export * from "./timeFormatter.js";
|
|
9
|
+
export * from "./videoRef.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/index.ts"],"mappings":";;AAAA,cAAc,sBAAmB;AACjC,cAAc,kBAAS;AACvB,cAAc,mBAAgB;AAC9B,cAAc,mBAAgB;AAC9B,cAAc,kBAAe;AAC7B,cAAc,oBAAiB;AAC/B,cAAc,eAAY","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StatusBar, Platform } from 'react-native';
|
|
4
|
+
import Orientation from 'react-native-orientation-locker';
|
|
5
|
+
import SystemNavigationBar from 'react-native-system-navigation-bar';
|
|
6
|
+
import PlatformSelector from "./PlatformSelector.js";
|
|
7
|
+
export const lockToPortrait = () => {
|
|
8
|
+
try {
|
|
9
|
+
Orientation.lockToPortrait();
|
|
10
|
+
StatusBar.setHidden(false, 'fade');
|
|
11
|
+
if (PlatformSelector.isAndroid()) {
|
|
12
|
+
SystemNavigationBar.fullScreen(false);
|
|
13
|
+
SystemNavigationBar.navigationShow();
|
|
14
|
+
} else if (Platform.OS === 'ios') {}
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.warn('Error locking to portrait:', error);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const lockToLandscape = () => {
|
|
20
|
+
try {
|
|
21
|
+
Orientation.lockToLandscape();
|
|
22
|
+
StatusBar.setHidden(true, 'fade');
|
|
23
|
+
if (PlatformSelector.isAndroid()) {
|
|
24
|
+
SystemNavigationBar.fullScreen(true);
|
|
25
|
+
SystemNavigationBar.stickyImmersive();
|
|
26
|
+
} else if (Platform.OS === 'ios') {}
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.warn('Error locking to landscape:', error);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=lockOrientation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StatusBar","Platform","Orientation","SystemNavigationBar","PlatformSelector","lockToPortrait","setHidden","isAndroid","fullScreen","navigationShow","OS","error","console","warn","lockToLandscape","stickyImmersive"],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/lockOrientation.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,cAAc;AAClD,OAAOC,WAAW,MAAM,iCAAiC;AACzD,OAAOC,mBAAmB,MAAM,oCAAoC;AACpE,OAAOC,gBAAgB,MAAM,uBAAoB;AAEjD,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,IAAI;IACFH,WAAW,CAACG,cAAc,CAAC,CAAC;IAC5BL,SAAS,CAACM,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAElC,IAAIF,gBAAgB,CAACG,SAAS,CAAC,CAAC,EAAE;MAChCJ,mBAAmB,CAACK,UAAU,CAAC,KAAK,CAAC;MACrCL,mBAAmB,CAACM,cAAc,CAAC,CAAC;IACtC,CAAC,MAAM,IAAIR,QAAQ,CAACS,EAAE,KAAK,KAAK,EAAE,CAClC;EACF,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdC,OAAO,CAACC,IAAI,CAAC,4BAA4B,EAAEF,KAAK,CAAC;EACnD;AACF,CAAC;AAED,OAAO,MAAMG,eAAe,GAAGA,CAAA,KAAM;EACnC,IAAI;IACFZ,WAAW,CAACY,eAAe,CAAC,CAAC;IAC7Bd,SAAS,CAACM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IAEjC,IAAIF,gBAAgB,CAACG,SAAS,CAAC,CAAC,EAAE;MAChCJ,mBAAmB,CAACK,UAAU,CAAC,IAAI,CAAC;MACpCL,mBAAmB,CAACY,eAAe,CAAC,CAAC;IACvC,CAAC,MAAM,IAAId,QAAQ,CAACS,EAAE,KAAK,KAAK,EAAE,CAClC;EACF,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdC,OAAO,CAACC,IAAI,CAAC,6BAA6B,EAAEF,KAAK,CAAC;EACpD;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { mmkvStorage, useVideoPlayerStore } from "../store/videoPlayerStore.js";
|
|
4
|
+
import { handleNext } from "./index.js";
|
|
5
|
+
export const createPlayerEvents = () => {
|
|
6
|
+
const onProgress = ({
|
|
7
|
+
currentTime = 0,
|
|
8
|
+
playableDuration = 0
|
|
9
|
+
}) => {
|
|
10
|
+
const store = useVideoPlayerStore.getState(); // always fresh store
|
|
11
|
+
store.setCurrentTime(currentTime);
|
|
12
|
+
store.setPlayableDuration(playableDuration);
|
|
13
|
+
try {
|
|
14
|
+
mmkvStorage.setItem('currentTime', String(currentTime));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
console.warn('MMKV save failed', e);
|
|
17
|
+
}
|
|
18
|
+
if (store.isBuffering) store.setIsBuffering(false);
|
|
19
|
+
};
|
|
20
|
+
const onLoad = data => {
|
|
21
|
+
const store = useVideoPlayerStore.getState();
|
|
22
|
+
store.setDuration(data.duration || 0);
|
|
23
|
+
store.setOnLoad(data);
|
|
24
|
+
mmkvStorage.setItem('current_watch_time', '0');
|
|
25
|
+
store.setError(null);
|
|
26
|
+
store.setIsViewCounted(false);
|
|
27
|
+
store.setStartWatchTime(Date.now());
|
|
28
|
+
store.setIsNextEpisodeVisible(true);
|
|
29
|
+
store.setIsSkipIntroVisible(true);
|
|
30
|
+
store.setIsBuffering(false);
|
|
31
|
+
};
|
|
32
|
+
const onBuffer = ({
|
|
33
|
+
isBuffering
|
|
34
|
+
}) => {
|
|
35
|
+
const store = useVideoPlayerStore.getState();
|
|
36
|
+
if (isBuffering) store.setIsBuffering(true);else setTimeout(() => store.setIsBuffering(false), 150);
|
|
37
|
+
};
|
|
38
|
+
const onEnd = ({
|
|
39
|
+
onPressEpisode,
|
|
40
|
+
reportProgress,
|
|
41
|
+
autoNext
|
|
42
|
+
}) => {
|
|
43
|
+
reportProgress('COMPLETED');
|
|
44
|
+
const store = useVideoPlayerStore.getState();
|
|
45
|
+
if (!store.activeTrack?.isTrailer && store.activeTrack?.type === 'series') {
|
|
46
|
+
handleNext({
|
|
47
|
+
onPressEpisode,
|
|
48
|
+
autoNext
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
store.setIsPaused(true);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const onLoadStart = _ => {
|
|
55
|
+
const store = useVideoPlayerStore.getState();
|
|
56
|
+
store.setIsBuffering(true);
|
|
57
|
+
};
|
|
58
|
+
const LeaveVideoPlayer = () => {
|
|
59
|
+
const store = useVideoPlayerStore.getState();
|
|
60
|
+
store.setDuration(0);
|
|
61
|
+
store.setCurrentTime(0);
|
|
62
|
+
store.setPlayableDuration(0);
|
|
63
|
+
store.setIsPaused(false);
|
|
64
|
+
store.setSettingsModal({
|
|
65
|
+
isVisible: false,
|
|
66
|
+
action: 'none'
|
|
67
|
+
});
|
|
68
|
+
store.setIsBuffering(false);
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
onProgress,
|
|
72
|
+
onLoad,
|
|
73
|
+
onBuffer,
|
|
74
|
+
onEnd,
|
|
75
|
+
onLoadStart,
|
|
76
|
+
LeaveVideoPlayer
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=playerEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mmkvStorage","useVideoPlayerStore","handleNext","createPlayerEvents","onProgress","currentTime","playableDuration","store","getState","setCurrentTime","setPlayableDuration","setItem","String","e","console","warn","isBuffering","setIsBuffering","onLoad","data","setDuration","duration","setOnLoad","setError","setIsViewCounted","setStartWatchTime","Date","now","setIsNextEpisodeVisible","setIsSkipIntroVisible","onBuffer","setTimeout","onEnd","onPressEpisode","reportProgress","autoNext","activeTrack","isTrailer","type","setIsPaused","onLoadStart","_","LeaveVideoPlayer","setSettingsModal","isVisible","action"],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/playerEvents.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author Naresh Dhamu
|
|
5
|
+
* @lastModified Sat 16 Aug 2025 at 10:32 PM
|
|
6
|
+
* @description: Utility functions for formatting time
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const formatDuration = (totalSeconds, hideSeconds = false, addSpaces = false) => {
|
|
10
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
11
|
+
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
12
|
+
const seconds = totalSeconds % 60;
|
|
13
|
+
const formatUnit = (value, label) => value ? `${value}${addSpaces ? ` ${label} ` : label}` : '';
|
|
14
|
+
const result = formatUnit(hours, 'h') + formatUnit(minutes, 'm') + formatUnit(seconds, 's');
|
|
15
|
+
return hideSeconds ? formatUnit(hours, 'h') + formatUnit(minutes, 'm') : result;
|
|
16
|
+
};
|
|
17
|
+
export const formatTime = seconds => {
|
|
18
|
+
const h = Math.floor(seconds / 3600);
|
|
19
|
+
const m = Math.floor(seconds % 3600 / 60);
|
|
20
|
+
const s = Math.floor(seconds % 60);
|
|
21
|
+
if (h > 0) {
|
|
22
|
+
return `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
|
|
23
|
+
}
|
|
24
|
+
return `${m}:${String(s).padStart(2, '0')}`;
|
|
25
|
+
};
|
|
26
|
+
export const formatTimeWithMs = seconds => {
|
|
27
|
+
if (isNaN(seconds) || seconds < 0) return '00:00.000';
|
|
28
|
+
const totalMs = Math.floor(seconds * 1000);
|
|
29
|
+
const ms = totalMs % 1000;
|
|
30
|
+
const totalSec = Math.floor(totalMs / 1000);
|
|
31
|
+
const min = Math.floor(totalSec / 60);
|
|
32
|
+
const sec = totalSec % 60;
|
|
33
|
+
return `${String(min).padStart(2, '0')}:${String(sec).padStart(2, '0')}.${String(ms).padStart(3, '0')}`;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=timeFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["formatDuration","totalSeconds","hideSeconds","addSpaces","hours","Math","floor","minutes","seconds","formatUnit","value","label","result","formatTime","h","m","s","String","padStart","formatTimeWithMs","isNaN","totalMs","ms","totalSec","min","sec"],"sourceRoot":"../../../../src","sources":["VideoPlayer/utils/timeFormatter.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,cAAc,GAAGA,CAC5BC,YAAoB,EACpBC,WAAW,GAAG,KAAK,EACnBC,SAAS,GAAG,KAAK,KACN;EACX,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACL,YAAY,GAAG,IAAI,CAAC;EAC7C,MAAMM,OAAO,GAAGF,IAAI,CAACC,KAAK,CAAEL,YAAY,GAAG,IAAI,GAAI,EAAE,CAAC;EACtD,MAAMO,OAAO,GAAGP,YAAY,GAAG,EAAE;EAEjC,MAAMQ,UAAU,GAAGA,CAACC,KAAa,EAAEC,KAAa,KAC9CD,KAAK,GAAG,GAAGA,KAAK,GAAGP,SAAS,GAAG,IAAIQ,KAAK,GAAG,GAAGA,KAAK,EAAE,GAAG,EAAE;EAE5D,MAAMC,MAAM,GACVH,UAAU,CAACL,KAAK,EAAE,GAAG,CAAC,GACtBK,UAAU,CAACF,OAAO,EAAE,GAAG,CAAC,GACxBE,UAAU,CAACD,OAAO,EAAE,GAAG,CAAC;EAE1B,OAAON,WAAW,GACdO,UAAU,CAACL,KAAK,EAAE,GAAG,CAAC,GAAGK,UAAU,CAACF,OAAO,EAAE,GAAG,CAAC,GACjDK,MAAM;AACZ,CAAC;AAED,OAAO,MAAMC,UAAU,GAAIL,OAAe,IAAK;EAC7C,MAAMM,CAAC,GAAGT,IAAI,CAACC,KAAK,CAACE,OAAO,GAAG,IAAI,CAAC;EACpC,MAAMO,CAAC,GAAGV,IAAI,CAACC,KAAK,CAAEE,OAAO,GAAG,IAAI,GAAI,EAAE,CAAC;EAC3C,MAAMQ,CAAC,GAAGX,IAAI,CAACC,KAAK,CAACE,OAAO,GAAG,EAAE,CAAC;EAClC,IAAIM,CAAC,GAAG,CAAC,EAAE;IACT,OAAO,GAAGA,CAAC,IAAIG,MAAM,CAACF,CAAC,CAAC,CAACG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAID,MAAM,CAACD,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;EAC3E;EACA,OAAO,GAAGH,CAAC,IAAIE,MAAM,CAACD,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC7C,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIX,OAAe,IAAa;EAC3D,IAAIY,KAAK,CAACZ,OAAO,CAAC,IAAIA,OAAO,GAAG,CAAC,EAAE,OAAO,WAAW;EACrD,MAAMa,OAAO,GAAGhB,IAAI,CAACC,KAAK,CAACE,OAAO,GAAG,IAAI,CAAC;EAC1C,MAAMc,EAAE,GAAGD,OAAO,GAAG,IAAI;EACzB,MAAME,QAAQ,GAAGlB,IAAI,CAACC,KAAK,CAACe,OAAO,GAAG,IAAI,CAAC;EAC3C,MAAMG,GAAG,GAAGnB,IAAI,CAACC,KAAK,CAACiB,QAAQ,GAAG,EAAE,CAAC;EACrC,MAAME,GAAG,GAAGF,QAAQ,GAAG,EAAE;EACzB,OAAO,GAAGN,MAAM,CAACO,GAAG,CAAC,CAACN,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAID,MAAM,CAACQ,GAAG,CAAC,CAACP,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAID,MAAM,CAACK,EAAE,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACzG,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import { useVideoPlayerStore, mmkvStorage } from "../store/videoPlayerStore.js";
|
|
5
|
+
export const countWatchTime = (forceFlush = false) => {
|
|
6
|
+
const {
|
|
7
|
+
duration,
|
|
8
|
+
setStartWatchTime,
|
|
9
|
+
startWatchTime
|
|
10
|
+
} = useVideoPlayerStore.getState();
|
|
11
|
+
const currentTimeFromStorage = Number(mmkvStorage.getItem('currentTime') || 0);
|
|
12
|
+
const prevWatchTime = Number(mmkvStorage.getItem('current_watch_time') || 0);
|
|
13
|
+
const completed = duration > 0 && Math.round(currentTimeFromStorage / duration) >= 0.95;
|
|
14
|
+
let totalTimeWatched = prevWatchTime;
|
|
15
|
+
if (startWatchTime) {
|
|
16
|
+
const elapsedTime = (Date.now() - startWatchTime) / 1000;
|
|
17
|
+
totalTimeWatched = prevWatchTime + elapsedTime;
|
|
18
|
+
mmkvStorage.setItem('current_watch_time', totalTimeWatched.toString());
|
|
19
|
+
setStartWatchTime(null);
|
|
20
|
+
}
|
|
21
|
+
if (forceFlush) {
|
|
22
|
+
const latest = Number(mmkvStorage.getItem('current_watch_time') || '0');
|
|
23
|
+
return {
|
|
24
|
+
totalWatchTime: latest,
|
|
25
|
+
completed,
|
|
26
|
+
currentTime: currentTimeFromStorage
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
totalWatchTime: totalTimeWatched,
|
|
31
|
+
completed,
|
|
32
|
+
currentTime: currentTimeFromStorage
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export const useWatchReporter = ({
|
|
36
|
+
onWatchProgress
|
|
37
|
+
}) => {
|
|
38
|
+
const reportProgress = useCallback((event = 'PROGRESS', forcedCurrentTime) => {
|
|
39
|
+
const {
|
|
40
|
+
activeTrack,
|
|
41
|
+
duration
|
|
42
|
+
} = useVideoPlayerStore.getState();
|
|
43
|
+
if (!activeTrack) return;
|
|
44
|
+
const {
|
|
45
|
+
totalWatchTime,
|
|
46
|
+
completed,
|
|
47
|
+
currentTime
|
|
48
|
+
} = countWatchTime(event === 'VIDEO_CLOSE' || event === 'EPISODE_CHANGE' || event === 'COMPLETED');
|
|
49
|
+
const progress = {
|
|
50
|
+
contentId: activeTrack?.contentId || null,
|
|
51
|
+
episodeId: activeTrack?.episodeId || null,
|
|
52
|
+
contentType: activeTrack?.type,
|
|
53
|
+
currentTime: forcedCurrentTime ?? currentTime,
|
|
54
|
+
totalWatchTime,
|
|
55
|
+
duration: duration || 0,
|
|
56
|
+
isVideoCompleted: completed,
|
|
57
|
+
activeTrack
|
|
58
|
+
};
|
|
59
|
+
onWatchProgress?.({
|
|
60
|
+
...progress,
|
|
61
|
+
event
|
|
62
|
+
});
|
|
63
|
+
}, [onWatchProgress]);
|
|
64
|
+
return {
|
|
65
|
+
reportProgress
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=useWatchReporter.js.map
|