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.