From 6db0d020d53e79a12748bb36bea1a94e0cac2127 Mon Sep 17 00:00:00 2001 From: Hakim Date: Mon, 18 Nov 2024 11:58:25 +0900 Subject: [PATCH] feat: add clearSession method for flutter ios --- flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m | 11 +++++++++++ flutter/flutter/lib/ffmpeg_kit_config.dart | 12 ++++++++++++ .../lib/ffmpeg_kit_flutter_platform_interface.dart | 4 ++++ .../lib/method_channel_ffmpeg_kit_flutter.dart | 4 ++++ 4 files changed, 31 insertions(+) diff --git a/flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m b/flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m index 3ac9d64..ccf84b9 100644 --- a/flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m +++ b/flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m @@ -395,6 +395,12 @@ extern int const AbstractSessionDefaultTimeoutForAsynchronousMessagesInTransmit; [self getSessions:result]; } else if ([@"clearSessions" isEqualToString:call.method]) { [self clearSessions:result]; + } else if ([@"clearSession" isEqualToString:call.method]) { + if (sessionId != nil) { + [self clearSession:sessionId result:result]; + } else { + result([FlutterError errorWithCode:@"INVALID_SESSION" message:@"Invalid session id." details:nil]); + } } else if ([@"getSessionsByState" isEqualToString:call.method]) { NSNumber* stateIndex = call.arguments[@"state"]; if (stateIndex != nil) { @@ -909,6 +915,11 @@ extern int const AbstractSessionDefaultTimeoutForAsynchronousMessagesInTransmit; result([FFmpegKitFlutterPlugin toSessionArray:[FFmpegKitConfig getSessions]]); } +- (void)clearSession:(NSNumber*)sessionId result:(FlutterResult)result { + [FFmpegKitConfig clearSession:[sessionId longValue]]; + result(nil); +} + - (void)clearSessions:(FlutterResult)result { [FFmpegKitConfig clearSessions]; result(nil); diff --git a/flutter/flutter/lib/ffmpeg_kit_config.dart b/flutter/flutter/lib/ffmpeg_kit_config.dart index bf57480..b533350 100644 --- a/flutter/flutter/lib/ffmpeg_kit_config.dart +++ b/flutter/flutter/lib/ffmpeg_kit_config.dart @@ -496,6 +496,18 @@ class FFmpegKitConfig { } } + /// Deletes a session from the session history. + /// Note that callbacks cannot be triggered for deleted sessions. + static Future clearSession(int sessionId) async { + try { + await init(); + return _platform.clearSession(sessionId); + } on PlatformException catch (e, stack) { + print("Plugin clearSession error: ${e.message}"); + return Future.error("clearSession failed.", stack); + } + } + /// Clears all, including ongoing, sessions in the session history. /// Note that callbacks cannot be triggered for deleted sessions. static Future clearSessions() async { diff --git a/flutter/flutter_platform_interface/lib/ffmpeg_kit_flutter_platform_interface.dart b/flutter/flutter_platform_interface/lib/ffmpeg_kit_flutter_platform_interface.dart index 779dcff..50131b8 100644 --- a/flutter/flutter_platform_interface/lib/ffmpeg_kit_flutter_platform_interface.dart +++ b/flutter/flutter_platform_interface/lib/ffmpeg_kit_flutter_platform_interface.dart @@ -272,6 +272,10 @@ abstract class FFmpegKitPlatform extends PlatformInterface { 'ffmpegKitConfigGetSessions() has not been implemented!'); } + Future clearSession(int sessionId) async { + throw UnimplementedError('clearSession() has not been implemented!'); + } + Future clearSessions() async { throw UnimplementedError('clearSessions() has not been implemented!'); } diff --git a/flutter/flutter_platform_interface/lib/method_channel_ffmpeg_kit_flutter.dart b/flutter/flutter_platform_interface/lib/method_channel_ffmpeg_kit_flutter.dart index 9de767f..d121f01 100644 --- a/flutter/flutter_platform_interface/lib/method_channel_ffmpeg_kit_flutter.dart +++ b/flutter/flutter_platform_interface/lib/method_channel_ffmpeg_kit_flutter.dart @@ -243,6 +243,10 @@ class MethodChannelFFmpegKit extends FFmpegKitPlatform { Future?> ffmpegKitConfigGetSessions() async => _channel.invokeMethod>('getSessions'); + @override + Future clearSession(int sessionId) async => + _channel.invokeMethod('clearSession', {'sessionId': sessionId}); + @override Future clearSessions() async => _channel.invokeMethod('clearSessions');