diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index ac982cd..b0e185e 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -7,5 +7,5 @@
-
+
diff --git a/android/src/main/kotlin/video/api/flutter/uploader/MethodCallHandlerImpl.kt b/android/src/main/kotlin/video/api/flutter/uploader/MethodCallHandlerImpl.kt
index 4099ebf..5b0eddc 100644
--- a/android/src/main/kotlin/video/api/flutter/uploader/MethodCallHandlerImpl.kt
+++ b/android/src/main/kotlin/video/api/flutter/uploader/MethodCallHandlerImpl.kt
@@ -267,6 +267,27 @@ class MethodCallHandlerImpl(
result.error("failed_to_cancel", "Failed to cancel", error)
})
}
+ "cancelByVideoId" -> {
+ val videoId = call.argument("videoId");
+ when {
+ (videoId == null) -> {
+ result.error(
+ "missing_video_id", "Videoid is missing", null
+ )
+ }
+
+ else -> {
+ uploaderModuleImpl.cancelByVideoId(
+ videoId,
+ {
+ result.success(null)
+ }, { error ->
+ result.error("failed_to_cancel", "Failed to cancel", error)
+ })
+ }
+ }
+
+ }
else -> result.notImplemented()
}
diff --git a/ios/Classes/SwiftUploaderPlugin.swift b/ios/Classes/SwiftUploaderPlugin.swift
index c273a43..8161376 100644
--- a/ios/Classes/SwiftUploaderPlugin.swift
+++ b/ios/Classes/SwiftUploaderPlugin.swift
@@ -163,6 +163,14 @@ public class SwiftUploaderPlugin: NSObject, FlutterPlugin {
}
case "cancelAll":
uploadModule.cancelAll()
+ case "cancelByVideoId":
+ if let args = call.arguments as? [String: Any],
+ let videoId = args["videoId"] as? String
+ {
+ uploadModule.cancelByVideoId(videoId: videoId);
+ }else{
+ result(FlutterError(code: "missing_parameters",message : "video id is missing",details: nil))
+ }
default:
result(FlutterMethodNotImplemented)
}
diff --git a/ios/Classes/UploaderModule.swift b/ios/Classes/UploaderModule.swift
index 1fa1487..49ee958 100644
--- a/ios/Classes/UploaderModule.swift
+++ b/ios/Classes/UploaderModule.swift
@@ -3,6 +3,7 @@ import ApiVideoUploader
public class UploaderModule: NSObject {
private var progressiveUploadSessions: [String: ProgressiveUploadSessionProtocol] = [:]
private var uploadRequests: [RequestTask] = []
+ private var videoIds: [String] = []
@objc(setSdkName:::)
func setSdkName(name: String, version: String) throws {
@@ -56,6 +57,7 @@ public class UploaderModule: NSObject {
self.handleCompletion(video: video, error: error, onSuccess: onSuccess, onError: onError)
}
uploadRequests.append(request)
+ videoIds.append(videoId ?? "")
}
@objc(upload::::::)
@@ -64,6 +66,10 @@ public class UploaderModule: NSObject {
self.handleCompletion(video: video, error: error, onSuccess: onSuccess, onError: onError)
}
uploadRequests.append(request)
+ if(videoIds.contains(videoId)){
+ }else{
+ videoIds.append(videoId)
+ }
}
@objc(createUploadProgressiveSession:::)
@@ -114,6 +120,19 @@ public class UploaderModule: NSObject {
request.cancel()
}
uploadRequests.removeAll()
+ videoIds.removeAll();
+ }
+
+ @objc(cancelByVideoId:)
+ func cancelByVideoId(videoId: String){
+ if let index = videoIds.firstIndex(of: videoId){
+ let request = uploadRequests[index];
+ request.cancel();
+ uploadRequests.remove(at: index);
+ }else{
+ print("Already Completed or Cancelled");
+ }
+
}
private func handleCompletion(video: Video?, error: Error?, onSuccess: @escaping (String) -> Void, onError: @escaping (Error) -> Void) {
diff --git a/lib/src/video_uploader_mobile_platform.dart b/lib/src/video_uploader_mobile_platform.dart
index dabac01..7739ab7 100644
--- a/lib/src/video_uploader_mobile_platform.dart
+++ b/lib/src/video_uploader_mobile_platform.dart
@@ -193,6 +193,16 @@ class ApiVideoMobileUploaderPlugin extends ApiVideoUploaderPlatform {
Future cancelAll() async {
await _channel.invokeMethod('cancelAll');
}
+
+ /// Cancels video upload by video ID
+ Future cancelByVideoID({required String videoId}) async{
+ await _channel.invokeMethod(
+ 'cancelByVideoId',
+ {
+ 'videoId': videoId,
+ },
+ );
+ }
}
/// A wrapper around upload calls to manage progress callback.
diff --git a/lib/src/video_uploader_platform_interface.dart b/lib/src/video_uploader_platform_interface.dart
index ddc6066..15de335 100644
--- a/lib/src/video_uploader_platform_interface.dart
+++ b/lib/src/video_uploader_platform_interface.dart
@@ -108,6 +108,10 @@ abstract class ApiVideoUploaderPlatform extends PlatformInterface {
Future cancelAll() {
throw UnimplementedError('cancelAll() has not been implemented.');
}
+
+ Future cancelByVideoID({required String videoId}){
+ throw UnimplementedError('cancelByVideoID() has not been implemented');
+ }
}
class _PlatformImplementation extends ApiVideoUploaderPlatform {}
diff --git a/lib/video_uploader.dart b/lib/video_uploader.dart
index 90b2f55..1cce857 100644
--- a/lib/video_uploader.dart
+++ b/lib/video_uploader.dart
@@ -101,6 +101,12 @@ class ApiVideoUploader {
static cancelAll() {
return _uploaderPlatform.cancelAll();
}
+
+ /// Cancels upload based on video ID
+ static cancelByVideoID({required String videoId}) async{
+ return _uploaderPlatform.cancelByVideoID(videoId : videoId);
+ }
+
}
/// A session that manages progressive upload with upload token.