aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/moments/trimmer.tsx102
-rw-r--r--src/screens/moments/CameraScreen.tsx9
-rw-r--r--src/screens/profile/CaptionScreen.tsx2
-rw-r--r--src/utils/camera.ts1
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';