react-native-video-trim 1.0.16 → 1.0.18

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/README.md CHANGED
@@ -15,9 +15,16 @@ npm install react-native-video-trim
15
15
 
16
16
  yarn add react-native-video-trim
17
17
  ```
18
- Next install CocoaPods deps:
19
-
18
+ ## For iOS (React Native CLI project)
19
+ Run the following command to setup for iOS:
20
+ ```
21
+ npx pod-install ios
20
22
  ```
23
+ ## For Expo project
24
+ You need to run `prebuild` in order for native code takes effect:
25
+ ```
26
+ npx expo prebuild
27
+
21
28
  npx pod-install ios
22
29
  ```
23
30
 
@@ -149,6 +156,7 @@ Main method to show Video Editor UI.
149
156
  - `saveToPhoto` (optional, `default = true`): whether to save video to photo/gallery after editing
150
157
  - `removeAfterSavedToPhoto` (optional, `default = false`): whether to remove output file from storage after saved to Photo
151
158
  - `maxDuration` (optional): maximum duration for the trimmed video
159
+ - `minDuration` (optional): minimum duration for the trimmed video
152
160
  - `cancelButtonText` (optional): text of left button in Editor dialog
153
161
  - `saveButtonText` (optional): text of right button in Editor dialog
154
162
  - `enableCancelDialog` (optional, `default = true`): whether to show alert dialog on press Cancel
@@ -161,6 +169,7 @@ Main method to show Video Editor UI.
161
169
  - `saveDialogMessage` (optional, `default = "Are you sure want to save?"`)
162
170
  - `saveDialogCancelText` (optional, `default = "Close"`)
163
171
  - `saveDialogConfirmText` (optional, `default = "Proceed"`)
172
+ - `fullScreenModalIOS` (optional, `default = false`): whether to open editor in fullscreen modal
164
173
  - `trimmingText` (optional, `default = "Trimming video..."`): trimming text on the progress dialog
165
174
 
166
175
  If `saveToPhoto = true`, you must ensure that you have request permission to write to photo/gallery
@@ -17,10 +17,10 @@ public class VideoTrimmerUtil {
17
17
 
18
18
  private static final String TAG = VideoTrimmerUtil.class.getSimpleName();
19
19
  public static final String FILE_PREFIX = "trimmedVideo";
20
- public static final long MIN_SHOOT_DURATION = 3000L;// min 3 seconds for trimming
21
- // public static final int VIDEO_MAX_TIME = 10;// max 10 seconds for trimming
22
- // public static final long MAX_SHOOT_DURATION = VIDEO_MAX_TIME * 1000L;
23
- public static long maxShootDuration = 10 * 1000L;
20
+ public static final long MIN_SHOOT_DURATION = 1000L;// min 3 seconds for trimming
21
+ public static final int VIDEO_MAX_TIME = 10;// max 10 seconds for trimming
22
+ public static final long MAX_SHOOT_DURATION = VIDEO_MAX_TIME * 1000L;
23
+ // public static long maxShootDuration = 10 * 1000L;
24
24
  public static int MAX_COUNT_RANGE = 10; // how many images in the highlight range of seek bar
25
25
  public static int SCREEN_WIDTH_FULL = DeviceUtil.getDeviceWidth();
26
26
  public static final int RECYCLER_VIEW_PADDING = UnitConverter.dpToPx(35);
@@ -25,7 +25,7 @@ import android.widget.RelativeLayout;
25
25
  import android.widget.TextView;
26
26
  import android.widget.Toast;
27
27
 
28
- import androidx.appcompat.app.AlertDialog;
28
+ import androidx.annotation.NonNull;
29
29
  import androidx.recyclerview.widget.LinearLayoutManager;
30
30
  import androidx.recyclerview.widget.RecyclerView;
31
31
 
@@ -52,7 +52,7 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
52
52
 
53
53
  private static final String TAG = VideoTrimmerView.class.getSimpleName();
54
54
 
55
- private int mMaxWidth = VIDEO_FRAMES_WIDTH;
55
+ private final int mMaxWidth = VIDEO_FRAMES_WIDTH;
56
56
  private ReactApplicationContext mContext;
57
57
  private RelativeLayout mLinearVideo;
58
58
  private ZVideoView mVideoView;
@@ -74,13 +74,12 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
74
74
  private long scrollPos = 0;
75
75
  private int mScaledTouchSlop;
76
76
  private int lastScrollX;
77
- private boolean isSeeking;
78
- private boolean isOverScaledTouchSlop;
79
77
  private int mThumbsTotalCount;
80
78
  private ValueAnimator mRedProgressAnimator;
81
- private Handler mAnimationHandler = new Handler();
79
+ private final Handler mAnimationHandler = new Handler();
82
80
  private Boolean mIsPrepared = false;
83
- private int mMaxDuration = 0;
81
+ private long mMaxDuration = VideoTrimmerUtil.MAX_SHOOT_DURATION;
82
+ private long mMinDuration = VideoTrimmerUtil.MIN_SHOOT_DURATION;
84
83
 
85
84
 
86
85
  public VideoTrimmerView(ReactApplicationContext context, AttributeSet attrs) {
@@ -125,12 +124,12 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
125
124
  VideoTrimmerUtil.VIDEO_FRAMES_WIDTH = VideoTrimmerUtil.SCREEN_WIDTH_FULL - RECYCLER_VIEW_PADDING * 2;
126
125
  VideoTrimmerUtil.MAX_COUNT_RANGE = Math.max(((int) VIDEO_FRAMES_WIDTH / VideoTrimmerUtil.mThumbWidth), VideoTrimmerUtil.MAX_COUNT_RANGE);
127
126
 
128
- if (mDuration <= VideoTrimmerUtil.maxShootDuration) {
127
+ if (mDuration <= mMaxDuration) {
129
128
  mThumbsTotalCount = VideoTrimmerUtil.MAX_COUNT_RANGE;
130
129
  mRightProgressPos = mDuration;
131
130
  } else {
132
- mThumbsTotalCount = (int) (mDuration * 1.0f / (VideoTrimmerUtil.maxShootDuration * 1.0f) * VideoTrimmerUtil.MAX_COUNT_RANGE);
133
- mRightProgressPos = VideoTrimmerUtil.maxShootDuration;
131
+ mThumbsTotalCount = (int) (mDuration * 1.0f / (mMaxDuration * 1.0f) * VideoTrimmerUtil.MAX_COUNT_RANGE);
132
+ mRightProgressPos = mMaxDuration;
134
133
  }
135
134
 
136
135
  mVideoThumbRecyclerView.addItemDecoration(new SpacesItemDecoration2(RECYCLER_VIEW_PADDING, mThumbsTotalCount));
@@ -138,12 +137,12 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
138
137
  mRangeSeekBarView.setSelectedMinValue(mLeftProgressPos);
139
138
  mRangeSeekBarView.setSelectedMaxValue(mRightProgressPos);
140
139
  mRangeSeekBarView.setStartEndTime(mLeftProgressPos, mRightProgressPos);
141
- mRangeSeekBarView.setMinShootTime(VideoTrimmerUtil.MIN_SHOOT_DURATION);
140
+ mRangeSeekBarView.setMinShootTime(mMinDuration);
142
141
  mRangeSeekBarView.setNotifyWhileDragging(true);
143
142
  mRangeSeekBarView.setOnRangeSeekBarChangeListener(mOnRangeSeekBarChangeListener);
144
143
  mSeekBarLayout.addView(mRangeSeekBarView);
145
144
  if(mThumbsTotalCount - VideoTrimmerUtil.MAX_COUNT_RANGE > 0) {
146
- mAverageMsPx = (mDuration - VideoTrimmerUtil.maxShootDuration) / (float) (mThumbsTotalCount - VideoTrimmerUtil.MAX_COUNT_RANGE);
145
+ mAverageMsPx = (mDuration - mMaxDuration) / (float) (mThumbsTotalCount - VideoTrimmerUtil.MAX_COUNT_RANGE);
147
146
  } else {
148
147
  mAverageMsPx = 0f;
149
148
  }
@@ -185,14 +184,13 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
185
184
  mVideoView.setLayoutParams(lp);
186
185
  mDuration = mVideoView.getDuration();
187
186
 
188
- VideoTrimmerUtil.maxShootDuration = mMaxDuration > 0 ? Math.min(mMaxDuration * 1000L, mDuration) : mDuration;
187
+ mMaxDuration = Math.min(mMaxDuration, mDuration);
189
188
 
190
189
  MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
191
190
  mediaMetadataRetriever.setDataSource(mContext, mSourceUri);
192
191
  // take first frame
193
192
  Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
194
- int width = VideoTrimmerUtil.THUMB_HEIGHT * bitmap.getWidth() / bitmap.getHeight();
195
- VideoTrimmerUtil.mThumbWidth = width;
193
+ VideoTrimmerUtil.mThumbWidth = VideoTrimmerUtil.THUMB_HEIGHT * bitmap.getWidth() / bitmap.getHeight();
196
194
 
197
195
  if (!getRestoreState()) {
198
196
  seekTo((int) mRedProgressBarPos);
@@ -267,8 +265,8 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
267
265
  }
268
266
 
269
267
  public void onSaveClicked() {
270
- if (mRightProgressPos - mLeftProgressPos < VideoTrimmerUtil.MIN_SHOOT_DURATION) {
271
- Toast.makeText(mContext, "Video shorter than 3s, can't proceed", Toast.LENGTH_SHORT).show();
268
+ if (mRightProgressPos - mLeftProgressPos < mMinDuration) {
269
+ Toast.makeText(mContext, "Video is too short, can't proceed", Toast.LENGTH_SHORT).show();
272
270
  } else {
273
271
  mVideoView.pause();
274
272
  VideoTrimmerUtil.trim(
@@ -308,14 +306,11 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
308
306
  mRightProgressPos = Math.min(maxValue + scrollPos, mDuration);
309
307
  switch (action) {
310
308
  case MotionEvent.ACTION_DOWN:
311
- isSeeking = false;
312
309
  break;
313
310
  case MotionEvent.ACTION_MOVE:
314
- isSeeking = true;
315
311
  seekTo((int) (pressedThumb == RangeSeekBarView.Thumb.MIN ? mLeftProgressPos : mRightProgressPos));
316
312
  break;
317
313
  case MotionEvent.ACTION_UP:
318
- isSeeking = false;
319
314
  seekTo((int) mLeftProgressPos);
320
315
  break;
321
316
  default:
@@ -329,21 +324,18 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
329
324
 
330
325
  private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
331
326
  @Override
332
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
327
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
333
328
  super.onScrollStateChanged(recyclerView, newState);
334
329
  }
335
330
 
336
331
  @Override
337
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
332
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
338
333
  super.onScrolled(recyclerView, dx, dy);
339
- isSeeking = false;
340
334
  int scrollX = calcScrollXDistance();
341
- //达不到滑动的距离
335
+
342
336
  if (Math.abs(lastScrollX - scrollX) < mScaledTouchSlop) {
343
- isOverScaledTouchSlop = false;
344
337
  return;
345
338
  }
346
- isOverScaledTouchSlop = true;
347
339
  //初始状态,why ? 因为默认的时候有35dp的空白!
348
340
  if (scrollX == -RECYCLER_VIEW_PADDING) {
349
341
  scrollPos = 0;
@@ -354,7 +346,6 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
354
346
  mRightProgressPos = Math.min(mRangeSeekBarView.getSelectedMaxValue() + scrollPos, mDuration);
355
347
  mRedProgressBarPos = mLeftProgressPos;
356
348
  } else {
357
- isSeeking = true;
358
349
  scrollPos = (long) (mAverageMsPx * (RECYCLER_VIEW_PADDING + scrollX) / VideoTrimmerUtil.mThumbWidth);
359
350
  mLeftProgressPos = mRangeSeekBarView.getSelectedMinValue() + scrollPos;
360
351
 
@@ -418,7 +409,7 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
418
409
  }
419
410
  }
420
411
 
421
- private Runnable mAnimationRunnable = () -> updateVideoProgress();
412
+ private final Runnable mAnimationRunnable = () -> updateVideoProgress();
422
413
 
423
414
  private void updateVideoProgress() {
424
415
  long currentPosition = mVideoView.getCurrentPosition();
@@ -463,7 +454,11 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
463
454
 
464
455
  private void configure(ReadableMap config) {
465
456
  if (config.hasKey("maxDuration")) {
466
- this.mMaxDuration = config.getInt("maxDuration");
457
+ this.mMaxDuration = Math.max(0, config.getInt("maxDuration") * 1000L);
458
+ }
459
+
460
+ if (config.hasKey("minDuration")) {
461
+ this.mMinDuration = Math.max(1000L, config.getInt("minDuration") * 1000L);
467
462
  }
468
463
 
469
464
  if (config.hasKey("cancelButtonText")) {
@@ -10,16 +10,6 @@ class VideoTrim: RCTEventEmitter {
10
10
 
11
11
  private var saveToPhoto = true
12
12
  private var removeAfterSavedToPhoto = false
13
- private var enableCancelDialog = true
14
- private var cancelDialogTitle = "Warning!"
15
- private var cancelDialogMessage = "Are you sure want to cancel?"
16
- private var cancelDialogCancelText = "Close"
17
- private var cancelDialogConfirmText = "Proceed"
18
- private var enableSaveDialog = true
19
- private var saveDialogTitle = "Confirmation!"
20
- private var saveDialogMessage = "Are you sure want to save?"
21
- private var saveDialogCancelText = "Close"
22
- private var saveDialogConfirmText = "Proceed"
23
13
  private var trimmingText = "Trimming video..."
24
14
 
25
15
  @objc
@@ -58,21 +48,19 @@ class VideoTrim: RCTEventEmitter {
58
48
  saveToPhoto = config["saveToPhoto"] as? Bool ?? true
59
49
  removeAfterSavedToPhoto = config["removeAfterSavedToPhoto"] as? Bool ?? false
60
50
 
61
- // since RN Module is singleton, so we need to reset values everytime instead of reassign
62
- // Eg. this will not work if change: cancelDialogTitle = config["cancelDialogTitle"] as? String ?? cancelDialogTitle
63
- // because if we change cancelDialogTitle, the value is still there, and if from RN side we pass undefined, it'll still have previous value
64
- enableCancelDialog = config["enableCancelDialog"] as? Bool ?? true
65
- cancelDialogTitle = config["cancelDialogTitle"] as? String ?? "Warning!"
66
- cancelDialogMessage = config["cancelDialogMessage"] as? String ?? "Are you sure want to cancel?"
67
- cancelDialogCancelText = config["cancelDialogCancelText"] as? String ?? "Close"
68
- cancelDialogConfirmText = config["cancelDialogConfirmText"] as? String ?? "Proceed"
51
+ let enableCancelDialog = config["enableCancelDialog"] as? Bool ?? true
52
+ let cancelDialogTitle = config["cancelDialogTitle"] as? String ?? "Warning!"
53
+ let cancelDialogMessage = config["cancelDialogMessage"] as? String ?? "Are you sure want to cancel?"
54
+ let cancelDialogCancelText = config["cancelDialogCancelText"] as? String ?? "Close"
55
+ let cancelDialogConfirmText = config["cancelDialogConfirmText"] as? String ?? "Proceed"
69
56
 
70
- enableSaveDialog = config["enableSaveDialog"] as? Bool ?? true
71
- saveDialogTitle = config["saveDialogTitle"] as? String ?? "Confirmation!"
72
- saveDialogMessage = config["saveDialogMessage"] as? String ?? "Are you sure want to save?"
73
- saveDialogCancelText = config["saveDialogCancelText"] as? String ?? "Close"
74
- saveDialogConfirmText = config["saveDialogConfirmText"] as? String ?? "Proceed"
75
- trimmingText = config["trimmingText"] as? String ?? "Trimming video..."
57
+ let enableSaveDialog = config["enableSaveDialog"] as? Bool ?? true
58
+ let saveDialogTitle = config["saveDialogTitle"] as? String ?? "Confirmation!"
59
+ let saveDialogMessage = config["saveDialogMessage"] as? String ?? "Are you sure want to save?"
60
+ let saveDialogCancelText = config["saveDialogCancelText"] as? String ?? "Close"
61
+ let saveDialogConfirmText = config["saveDialogConfirmText"] as? String ?? "Proceed"
62
+ trimmingText = config["trimmingText"] as? String ?? "Trimming video..."
63
+ let fullScreenModalIOS = config["fullScreenModalIOS"] as? Bool ?? false
76
64
 
77
65
  if let destPath = copyFileToDocumentDir(uri: uri) {
78
66
  if UIVideoEditorController.canEditVideo(atPath: destPath.path) {
@@ -85,6 +73,10 @@ class VideoTrim: RCTEventEmitter {
85
73
  vc.maximumDuration = maxDuration
86
74
  }
87
75
 
76
+ if let minDuration = config["minDuration"] as? Int {
77
+ vc.minimumDuration = minDuration
78
+ }
79
+
88
80
  if let cancelBtnText = config["cancelButtonText"] as? String, !cancelBtnText.isEmpty {
89
81
  vc.cancelBtnText = cancelBtnText
90
82
  }
@@ -94,7 +86,7 @@ class VideoTrim: RCTEventEmitter {
94
86
  }
95
87
 
96
88
  vc.cancelBtnClicked = {
97
- if !self.enableCancelDialog {
89
+ if !enableCancelDialog {
98
90
  let _ = self.deleteFile(url: destPath) // remove the file we just copied to document directory
99
91
  self.emitEventToJS("onCancelTrimming", eventData: nil)
100
92
 
@@ -106,10 +98,10 @@ class VideoTrim: RCTEventEmitter {
106
98
  }
107
99
 
108
100
  // Create Alert
109
- let dialogMessage = UIAlertController(title: self.cancelDialogTitle, message: self.cancelDialogMessage, preferredStyle: .alert)
101
+ let dialogMessage = UIAlertController(title: cancelDialogTitle, message: cancelDialogMessage, preferredStyle: .alert)
110
102
 
111
103
  // Create OK button with action handler
112
- let ok = UIAlertAction(title: self.cancelDialogConfirmText, style: .destructive, handler: { (action) -> Void in
104
+ let ok = UIAlertAction(title: cancelDialogConfirmText, style: .destructive, handler: { (action) -> Void in
113
105
  let _ = self.deleteFile(url: destPath) // remove the file we just copied to document directory
114
106
  self.emitEventToJS("onCancelTrimming", eventData: nil)
115
107
 
@@ -120,7 +112,7 @@ class VideoTrim: RCTEventEmitter {
120
112
  })
121
113
 
122
114
  // Create Cancel button with action handlder
123
- let cancel = UIAlertAction(title: self.cancelDialogCancelText, style: .cancel)
115
+ let cancel = UIAlertAction(title: cancelDialogCancelText, style: .cancel)
124
116
 
125
117
  //Add OK and Cancel button to an Alert object
126
118
  dialogMessage.addAction(ok)
@@ -133,21 +125,21 @@ class VideoTrim: RCTEventEmitter {
133
125
  }
134
126
 
135
127
  vc.saveBtnClicked = {(selectedRange: CMTimeRange) in
136
- if !self.enableSaveDialog {
128
+ if !enableSaveDialog {
137
129
  self.trim(viewController: vc,inputFile: destPath, videoDuration: vc.asset.duration.seconds, startTime: selectedRange.start.seconds, endTime: selectedRange.end.seconds)
138
130
  return
139
131
  }
140
132
 
141
133
  // Create Alert
142
- let dialogMessage = UIAlertController(title: self.saveDialogTitle, message: self.saveDialogMessage, preferredStyle: .alert)
134
+ let dialogMessage = UIAlertController(title: saveDialogTitle, message: saveDialogMessage, preferredStyle: .alert)
143
135
 
144
136
  // Create OK button with action handler
145
- let ok = UIAlertAction(title: self.saveDialogConfirmText, style: .default, handler: { (action) -> Void in
137
+ let ok = UIAlertAction(title: saveDialogConfirmText, style: .default, handler: { (action) -> Void in
146
138
  self.trim(viewController: vc,inputFile: destPath, videoDuration: vc.asset.duration.seconds, startTime: selectedRange.start.seconds, endTime: selectedRange.end.seconds)
147
139
  })
148
140
 
149
141
  // Create Cancel button with action handlder
150
- let cancel = UIAlertAction(title: self.saveDialogCancelText, style: .cancel)
142
+ let cancel = UIAlertAction(title: saveDialogCancelText, style: .cancel)
151
143
 
152
144
  //Add OK and Cancel button to an Alert object
153
145
  dialogMessage.addAction(ok)
@@ -161,6 +153,10 @@ class VideoTrim: RCTEventEmitter {
161
153
 
162
154
  vc.isModalInPresentation = true // prevent modal closed by swipe down
163
155
 
156
+ if fullScreenModalIOS {
157
+ vc.modalPresentationStyle = .fullScreen
158
+ }
159
+
164
160
  if let root = RCTPresentedViewController() {
165
161
  root.present(vc, animated: true, completion: {
166
162
  self.emitEventToJS("onShow", eventData: nil)
@@ -73,7 +73,7 @@ import AVFoundation
73
73
  }
74
74
 
75
75
  // a clip cannot be trimmed shorter than this duration
76
- var minimumDuration: CMTime = .zero
76
+ var minimumDuration: CMTime = CMTime(seconds: 1, preferredTimescale: 600)
77
77
  var maximumDuration: CMTime = .positiveInfinity
78
78
 
79
79
  // the available range of the asset.
@@ -577,8 +577,9 @@ import AVFoundation
577
577
 
578
578
  var didClamp = false
579
579
  if CMTimeCompare(newDuration, minimumDuration) == -1 {
580
- time = CMTimeSubtract(selectedRange.end, minimumDuration)
581
- didClamp = true
580
+ // time = CMTimeSubtract(selectedRange.end, minimumDuration)
581
+ // didClamp = true
582
+ return
582
583
  }
583
584
  if CMTimeCompare(time, range.start) == -1 {
584
585
  time = range.start
@@ -644,8 +645,9 @@ import AVFoundation
644
645
 
645
646
  var didClamp = false
646
647
  if CMTimeCompare(newDuration, minimumDuration) == -1 {
647
- time = CMTimeAdd(selectedRange.start, minimumDuration)
648
- didClamp = true
648
+ // time = CMTimeAdd(selectedRange.start, minimumDuration)
649
+ // didClamp = true
650
+ return
649
651
  }
650
652
  if CMTimeCompare(time, range.start) == -1 {
651
653
  time = range.start
@@ -42,6 +42,7 @@ extension AVAsset {
42
42
  class VideoTrimmerViewController: UIViewController {
43
43
  var asset: AVAsset!
44
44
  var maximumDuration: Int?
45
+ var minimumDuration: Int?
45
46
  var cancelBtnText = "Cancel"
46
47
  var saveButtonText = "Save"
47
48
  var cancelBtnClicked: (() -> Void)?
@@ -209,6 +210,10 @@ class VideoTrimmerViewController: UIViewController {
209
210
 
210
211
  trimmer.selectedRange = CMTimeRange(start: .zero, end: trimmer.maximumDuration)
211
212
  }
213
+
214
+ if minimumDuration != nil {
215
+ trimmer.minimumDuration = CMTime(seconds: max(1, Double(minimumDuration!)), preferredTimescale: 600) // minimum 1 second
216
+ }
212
217
 
213
218
  trimmer.addTarget(self, action: #selector(didBeginTrimming(_:)), for: VideoTrimmer.didBeginTrimming)
214
219
  trimmer.addTarget(self, action: #selector(didEndTrimming(_:)), for: VideoTrimmer.didEndTrimming)
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","VideoTrim","NativeModules","Proxy","get","Error","showEditor","filePath","config","arguments","length","undefined","trim","saveToPhoto","outputPath","OS","Version","saveVideo","removeAfterSavedToPhoto","deleteFile","granted","PermissionsAndroid","request","PERMISSIONS","WRITE_EXTERNAL_STORAGE","title","message","buttonNeutral","buttonNegative","buttonPositive","RESULTS","GRANTED","err","hideDialog","isValidVideo","listFiles","cleanFiles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","VideoTrim","NativeModules","Proxy","get","Error","showEditor","filePath","config","arguments","length","undefined","trim","saveToPhoto","outputPath","OS","Version","saveVideo","removeAfterSavedToPhoto","deleteFile","granted","PermissionsAndroid","request","PERMISSIONS","WRITE_EXTERNAL_STORAGE","title","message","buttonNeutral","buttonNegative","buttonPositive","RESULTS","GRANTED","err","hideDialog","isValidVideo","listFiles","cleanFiles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","PermissionsAndroid","Platform","LINKING_ERROR","select","ios","default","VideoTrim","Proxy","get","Error","showEditor","filePath","config","arguments","length","undefined","trim","saveToPhoto","outputPath","OS","Version","saveVideo","removeAfterSavedToPhoto","deleteFile","granted","request","PERMISSIONS","WRITE_EXTERNAL_STORAGE","title","message","buttonNeutral","buttonNegative","buttonPositive","RESULTS","GRANTED","err","hideDialog","isValidVideo","listFiles","cleanFiles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["NativeModules","PermissionsAndroid","Platform","LINKING_ERROR","select","ios","default","VideoTrim","Proxy","get","Error","showEditor","filePath","config","arguments","length","undefined","trim","saveToPhoto","outputPath","OS","Version","saveVideo","removeAfterSavedToPhoto","deleteFile","granted","request","PERMISSIONS","WRITE_EXTERNAL_STORAGE","title","message","buttonNeutral","buttonNegative","buttonPositive","RESULTS","GRANTED","err","hideDialog","isValidVideo","listFiles","cleanFiles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -2,6 +2,7 @@ export interface EditorConfig {
2
2
  saveToPhoto?: boolean;
3
3
  removeAfterSavedToPhoto?: boolean;
4
4
  maxDuration?: number;
5
+ minDuration?: number;
5
6
  cancelButtonText?: string;
6
7
  saveButtonText?: string;
7
8
  enableCancelDialog?: boolean;
@@ -15,6 +16,7 @@ export interface EditorConfig {
15
16
  saveDialogCancelText?: string;
16
17
  saveDialogConfirmText?: string;
17
18
  trimmingText?: string;
19
+ fullScreenModalIOS?: boolean;
18
20
  }
19
21
  /**
20
22
  * Delete a file
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-video-trim",
3
- "version": "1.0.16",
3
+ "version": "1.0.18",
4
4
  "description": "Video trimmer for your React Native app",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/index.tsx CHANGED
@@ -21,6 +21,7 @@ export interface EditorConfig {
21
21
  saveToPhoto?: boolean;
22
22
  removeAfterSavedToPhoto?: boolean;
23
23
  maxDuration?: number;
24
+ minDuration?: number;
24
25
  cancelButtonText?: string;
25
26
  saveButtonText?: string;
26
27
  enableCancelDialog?: boolean;
@@ -34,6 +35,7 @@ export interface EditorConfig {
34
35
  saveDialogCancelText?: string;
35
36
  saveDialogConfirmText?: string;
36
37
  trimmingText?: string;
38
+ fullScreenModalIOS?: boolean;
37
39
  }
38
40
 
39
41
  /**