diff --git a/bun.lock b/bun.lock index 053e10e8..f247fdec 100644 --- a/bun.lock +++ b/bun.lock @@ -57,7 +57,7 @@ }, "packages/react-native-video": { "name": "react-native-video", - "version": "7.0.0-dev.5", + "version": "7.0.0-dev.7", "devDependencies": { "@expo/config-plugins": "^10.0.2", "@react-native/eslint-config": "^0.77.0", diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index f56ed277..4cbc74bc 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1565,7 +1565,7 @@ PODS: - React-logger (= 0.77.2) - React-perflogger (= 0.77.2) - React-utils (= 0.77.2) - - ReactNativeVideo (7.0.0-dev.5): + - ReactNativeVideo (7.0.0-dev.7): - DoubleConversion - glog - hermes-engine @@ -1876,7 +1876,7 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: f334cebc0beed0a72490492e978007082c03d533 ReactCodegen: 474fbb3e4bb0f1ee6c255d1955db76e13d509269 ReactCommon: 7763e59534d58e15f8f22121cdfe319040e08888 - ReactNativeVideo: 055eea1518708bb116895548d9365d6f4a8c86fe + ReactNativeVideo: b2fade3dd3cd947936c2a0397f7f761d64bfd6d6 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 31a098f74c16780569aebd614a0f37a907de0189 diff --git a/packages/react-native-video/android/src/main/java/com/video/hybrids/videoplayer/HybridVideoPlayer.kt b/packages/react-native-video/android/src/main/java/com/video/hybrids/videoplayer/HybridVideoPlayer.kt index 8c06f153..95b85d81 100644 --- a/packages/react-native-video/android/src/main/java/com/video/hybrids/videoplayer/HybridVideoPlayer.kt +++ b/packages/react-native-video/android/src/main/java/com/video/hybrids/videoplayer/HybridVideoPlayer.kt @@ -154,6 +154,10 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { playerPointer.playbackParameters = playerPointer.playbackParameters.withSpeed(value.toFloat()) } + override var isPlaying: Boolean = runOnMainThreadSync { + return@runOnMainThreadSync player?.isPlaying == true + } + private fun initializePlayer() { if (NitroModules.applicationContext == null) { throw LibraryError.ApplicationContextNotFound @@ -227,7 +231,7 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { override fun replaceSourceAsync(source: HybridVideoPlayerSourceSpec?): Promise { return Promise.async { if (source == null) { - playerPointer.stop() + release() return@async } diff --git a/packages/react-native-video/android/src/main/java/com/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt b/packages/react-native-video/android/src/main/java/com/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt index 82925614..96a0cfd3 100644 --- a/packages/react-native-video/android/src/main/java/com/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt +++ b/packages/react-native-video/android/src/main/java/com/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt @@ -51,7 +51,7 @@ class HybridVideoViewViewManager(nitroId: Int): HybridVideoViewViewManagerSpec() } override var autoEnterPictureInPicture: Boolean - get() = videoView.get()?.autoEnterPictureInPicture + get() = videoView.get()?.autoEnterPictureInPicture == true set(value) { videoView.get()?.autoEnterPictureInPicture = value } diff --git a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift index 58dff8be..1dd1b8db 100644 --- a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift +++ b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift @@ -144,6 +144,14 @@ class HybridVideoPlayer: HybridVideoPlayerSpec { } var loop: Bool = false + + var isPlaying: Bool { + get { + // we are using here player as we don't want to initialize it + // player is initialized lazily when playerPointer is accessed + return player?.rate != 0 + } + } func clean() throws { release() 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 eaed55f4..fd8671ac 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp @@ -109,6 +109,11 @@ namespace margelo::nitro::video { static const auto method = javaClassStatic()->getMethod("setRate"); method(_javaPart, rate); } + bool JHybridVideoPlayerSpec::getIsPlaying() { + static const auto method = javaClassStatic()->getMethod("isPlaying"); + auto __result = method(_javaPart); + return static_cast(__result); + } // Methods std::shared_ptr> JHybridVideoPlayerSpec::replaceSourceAsync(const std::optional>& source) { 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 cede02d7..cdf7d0fc 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp @@ -61,6 +61,7 @@ namespace margelo::nitro::video { void setLoop(bool loop) override; double getRate() override; void setRate(double rate) override; + bool getIsPlaying() override; public: // Methods 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 dc6bbfe1..e370c039 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 @@ -82,6 +82,10 @@ abstract class HybridVideoPlayerSpec: HybridObject() { @set:DoNotStrip @set:Keep abstract var rate: Double + + @get:DoNotStrip + @get:Keep + abstract val isPlaying: Boolean // Methods @DoNotStrip 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 da2e104a..38ae768c 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp @@ -106,6 +106,9 @@ namespace margelo::nitro::video { inline void setRate(double rate) noexcept override { _swiftPart.setRate(std::forward(rate)); } + inline bool getIsPlaying() noexcept override { + return _swiftPart.isPlaying(); + } public: // Methods 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 43c4d156..a864bb9e 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift @@ -20,6 +20,7 @@ public protocol HybridVideoPlayerSpec_protocol: HybridObject { var muted: Bool { get set } var loop: Bool { get set } var rate: Double { get set } + var isPlaying: Bool { get } // Methods func replaceSourceAsync(source: (any HybridVideoPlayerSourceSpec)?) throws -> Promise 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 6b3b29b0..b1c839ef 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 @@ -185,6 +185,13 @@ public class HybridVideoPlayerSpec_cxx { self.__implementation.rate = newValue } } + + public final var isPlaying: Bool { + @inline(__always) + get { + return self.__implementation.isPlaying + } + } // Methods @inline(__always) 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 3ba45ecc..5ef5ab68 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp @@ -28,6 +28,7 @@ namespace margelo::nitro::video { prototype.registerHybridSetter("loop", &HybridVideoPlayerSpec::setLoop); prototype.registerHybridGetter("rate", &HybridVideoPlayerSpec::getRate); prototype.registerHybridSetter("rate", &HybridVideoPlayerSpec::setRate); + prototype.registerHybridGetter("isPlaying", &HybridVideoPlayerSpec::getIsPlaying); prototype.registerHybridMethod("replaceSourceAsync", &HybridVideoPlayerSpec::replaceSourceAsync); prototype.registerHybridMethod("clean", &HybridVideoPlayerSpec::clean); prototype.registerHybridMethod("preload", &HybridVideoPlayerSpec::preload); 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 cccf680d..e630afd5 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp @@ -68,6 +68,7 @@ namespace margelo::nitro::video { virtual void setLoop(bool loop) = 0; virtual double getRate() = 0; virtual void setRate(double rate) = 0; + virtual bool getIsPlaying() = 0; public: // Methods diff --git a/packages/react-native-video/package.json b/packages/react-native-video/package.json index c194e772..94a69fc9 100644 --- a/packages/react-native-video/package.json +++ b/packages/react-native-video/package.json @@ -1,6 +1,6 @@ { "name": "react-native-video", - "version": "7.0.0-dev.7", + "version": "7.0.0-dev.8", "description": "