diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/moments/trimmer.tsx | 102 | ||||
-rw-r--r-- | src/screens/moments/CameraScreen.tsx | 9 | ||||
-rw-r--r-- | src/screens/profile/CaptionScreen.tsx | 2 | ||||
-rw-r--r-- | src/utils/camera.ts | 1 |
4 files changed, 112 insertions, 2 deletions
diff --git a/src/components/moments/trimmer.tsx b/src/components/moments/trimmer.tsx new file mode 100644 index 00000000..f011d222 --- /dev/null +++ b/src/components/moments/trimmer.tsx @@ -0,0 +1,102 @@ +import React, {useEffect, useState} from 'react'; +import Video from 'react-native-video'; +import {Trimmer, ProcessingManager} from 'react-native-video-processing'; +import {useRef} from 'react'; + +export const TrimmerPlayer: React.FC<{ + source: string; + styles: Object; + hideTrimmer: boolean; +}> = ({source, styles, hideTrimmer}) => { + const playerRef = useRef<Video>(); + + const [seekTime, setSeekTime] = useState<number>(0); + const [paused, setPaused] = useState<boolean>(false); + useEffect(() => { + playerRef.current?.seek(seekTime); + }, [seekTime]); + + const [trackerTime, setTrackerTime] = useState<number>(0); + useEffect(() => { + if (!paused && (trackerTime >= end || trackerTime < start)) { + setTrackerTime(start); + playerRef.current?.seek(start); + } + }, [trackerTime]); + + const [end, setEnd] = useState<number>(60); + const [start, setStart] = useState<number>(0); + useEffect(() => { + setSeekTime(start); + setTrackerTime(start); + }, [start]); + useEffect(() => { + setSeekTime(end); + setTrackerTime(end - 0.1); + }, [end]); + + const trim = () => { + ProcessingManager.trim(source, { + startTime: start / 2, //need to divide by two for bug in module + endTime: end, + // saveToCameraRoll: true, // default is false // iOS only + saveWithCurrentDate: true, // default is false // iOS only + quality: 'highest', + }).then((data: any) => console.log('trim', data)); + }; + + return ( + <> + <Video + ref={(ref) => { + playerRef.current = ref || undefined; + }} + source={{uri: source}} // Looks for .mp4 file (background.mp4) in the given expansion version. + rate={1.0} // 0 is paused, 1 is normal. + volume={1.0} // 0 is muted, 1 is normal. + muted={false} // Mutes the audio entirely. + paused={paused} // Pauses playback entirely. + //resizeMode="cover" // Fill the whole screen at aspect ratio. + repeat={true} // Repeat forever. + onLoad={(payload) => { + console.log(payload, source); + setEnd(payload.duration); + }} + onProgress={(e) => { + if (!paused) { + setTrackerTime(e.currentTime); + } + }} // Callback every ~250ms with currentTime + //onEnd={() => console.log('end')} // Callback when playback finishes + //onError={this.videoError} // Callback when video cannot be loaded + style={styles} + onTouchEnd={() => { + setPaused((state) => !state); + }} + /> + {hideTrimmer ? ( + <> </> + ) : ( + <Trimmer + source={source} + height={100} + width={350} + onTrackerMove={(e) => { + setPaused(true); + setSeekTime(e.currentTime); + }} // iOS only + currentTime={trackerTime + 0.25} // added .25 bc tracker is inaccurate + themeColor={'white'} // iOS only + showTrackerHandle={true} + thumbWidth={10} // iOS only + trackerColor={'white'} // iOS only + onChange={(e) => { + setPaused(true); + setEnd(e.endTime); + setStart(e.startTime); + }} + /> + )} + </> + ); +}; diff --git a/src/screens/moments/CameraScreen.tsx b/src/screens/moments/CameraScreen.tsx index ee5834cb..ef52a56f 100644 --- a/src/screens/moments/CameraScreen.tsx +++ b/src/screens/moments/CameraScreen.tsx @@ -184,7 +184,16 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => { ) { showGIFFailureAlert(() => navigateToCropper(media.path)); } else { +<<<<<<< HEAD + // is this a video? + if (media.duration !== null) { + navigateToCaptionScreen(true, media.sourceURL); + } else { + navigateToCropper(media.sourceURL); + } +======= navigateToCropper(media.path); +>>>>>>> master } }} /> diff --git a/src/screens/profile/CaptionScreen.tsx b/src/screens/profile/CaptionScreen.tsx index 1232eb66..d3aadf76 100644 --- a/src/screens/profile/CaptionScreen.tsx +++ b/src/screens/profile/CaptionScreen.tsx @@ -49,7 +49,6 @@ import {RootState} from '../../store/rootReducer'; import {MomentTagType} from '../../types'; import {isIPhoneX, normalize, SCREEN_WIDTH, StatusBarHeight} from '../../utils'; import {mentionPartTypes} from '../../utils/comments'; - /** * Upload Screen to allow users to upload posts to Tagg */ @@ -365,6 +364,7 @@ const CaptionScreen: React.FC<CaptionScreenProps> = ({route, navigation}) => { </SearchBackground> ); }; + const styles = StyleSheet.create({ contentContainer: { paddingTop: StatusBarHeight, diff --git a/src/utils/camera.ts b/src/utils/camera.ts index 9e37d62e..4a72f5f4 100644 --- a/src/utils/camera.ts +++ b/src/utils/camera.ts @@ -8,7 +8,6 @@ import { TakePictureOptions, TakePictureResponse, } from 'react-native-camera'; -import {ProcessingManager} from 'react-native-video-processing'; import ImagePicker, {ImageOrVideo, Video} from 'react-native-image-crop-picker'; import {ERROR_UPLOAD} from '../constants/strings'; |