From 811d8169d29383bc2f507b33942e6fc351947ec6 Mon Sep 17 00:00:00 2001 From: Krzysztof Moch Date: Thu, 23 Jan 2025 15:09:52 +0100 Subject: [PATCH] feat: override `dispose` method in VideoPlayer to cleanup resources --- .../generated/android/c++/JHybridVideoPlayerSpec.cpp | 4 ++++ .../generated/android/c++/JHybridVideoPlayerSpec.hpp | 1 + .../com/margelo/nitro/video/HybridVideoPlayerSpec.kt | 4 ++++ .../generated/ios/c++/HybridVideoPlayerSpecSwift.hpp | 6 ++++++ .../generated/ios/swift/HybridVideoPlayerSpec.swift | 1 + .../ios/swift/HybridVideoPlayerSpec_cxx.swift | 11 +++++++++++ .../generated/shared/c++/HybridVideoPlayerSpec.cpp | 4 ++++ .../generated/shared/c++/HybridVideoPlayerSpec.hpp | 2 ++ .../src/spec/nitro/VideoPlayer.nitro.ts | 5 +++++ 9 files changed, 38 insertions(+) diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp index e895b46f..a0e8ecb2 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp @@ -103,5 +103,9 @@ namespace margelo::nitro::video { return __promise; }(); } + void JHybridVideoPlayerSpec::clean() { + static const auto method = _javaPart->getClass()->getMethod("clean"); + method(_javaPart); + } } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp index d263089b..5ea1a277 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp @@ -60,6 +60,7 @@ namespace margelo::nitro::video { void play() override; void pause() override; std::shared_ptr> replaceSourceAsync(const std::shared_ptr& source) override; + void clean() override; private: friend HybridBase; diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt index 58934ad9..f64143b2 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt @@ -78,6 +78,10 @@ abstract class HybridVideoPlayerSpec: HybridObject() { @DoNotStrip @Keep abstract fun replaceSourceAsync(source: HybridVideoPlayerSourceSpec): Promise + + @DoNotStrip + @Keep + abstract fun clean(): Unit private external fun initHybrid(): HybridData diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp index 933b7281..9e6cb739 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp @@ -102,6 +102,12 @@ namespace margelo::nitro::video { auto __value = std::move(__result.value()); return __value; } + inline void clean() override { + auto __result = _swiftPart.clean(); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + } private: ReactNativeVideo::HybridVideoPlayerSpec_cxx _swiftPart; diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift index a5ca550b..9caf27d9 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift @@ -21,6 +21,7 @@ public protocol HybridVideoPlayerSpec_protocol: AnyObject { func play() throws -> Void func pause() throws -> Void func replaceSourceAsync(source: (any HybridVideoPlayerSourceSpec)) throws -> Promise + func clean() throws -> Void } /// See ``HybridVideoPlayerSpec`` diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift index 5ab0c4d8..3b3ce39e 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift @@ -200,4 +200,15 @@ public class HybridVideoPlayerSpec_cxx { return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr) } } + + @inline(__always) + public func clean() -> bridge.Result_void_ { + do { + try self.__implementation.clean() + return bridge.create_Result_void_() + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_void_(__exceptionPtr) + } + } } diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp index 746a18c9..266df3ae 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp @@ -24,7 +24,11 @@ namespace margelo::nitro::video { prototype.registerHybridMethod("play", &HybridVideoPlayerSpec::play); prototype.registerHybridMethod("pause", &HybridVideoPlayerSpec::pause); prototype.registerHybridMethod("replaceSourceAsync", &HybridVideoPlayerSpec::replaceSourceAsync); + prototype.registerHybridMethod("clean", &HybridVideoPlayerSpec::clean); }); } + void HybridVideoPlayerSpec::dispose() { + clean(); + } } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp index 97a30a22..9b28812e 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp @@ -60,10 +60,12 @@ namespace margelo::nitro::video { virtual void play() = 0; virtual void pause() = 0; virtual std::shared_ptr> replaceSourceAsync(const std::shared_ptr& source) = 0; + virtual void clean() = 0; protected: // Hybrid Setup void loadHybridMethods() override; + void dispose() override; protected: // Tag for logging diff --git a/packages/react-native-video/src/spec/nitro/VideoPlayer.nitro.ts b/packages/react-native-video/src/spec/nitro/VideoPlayer.nitro.ts index a9d39d15..36dce2d1 100644 --- a/packages/react-native-video/src/spec/nitro/VideoPlayer.nitro.ts +++ b/packages/react-native-video/src/spec/nitro/VideoPlayer.nitro.ts @@ -50,6 +50,11 @@ export interface VideoPlayer * see {@link VideoPlayerSource} */ replaceSourceAsync(source: VideoPlayerSource): Promise; + + /** + * Release the player resources. + */ + clean(): void; } export interface VideoPlayerFactory