diff --git a/android/src/main/java/com/video/hybrids/HybridVideoPlayer.kt b/android/src/main/java/com/video/hybrids/HybridVideoPlayer.kt index df6b5dd7..4451e96f 100644 --- a/android/src/main/java/com/video/hybrids/HybridVideoPlayer.kt +++ b/android/src/main/java/com/video/hybrids/HybridVideoPlayer.kt @@ -28,6 +28,9 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { get() = runOnMainThreadSync { return@runOnMainThreadSync player.volume.toDouble() } set(value) = runOnMainThread { player.volume = value.toFloat() } + override val duration: Double + get() = runOnMainThreadSync { return@runOnMainThreadSync player.duration.toDouble() } + private fun initializePlayerFromSource(source: HybridVideoPlayerSource) { this.source = source diff --git a/ios/hybrids/HybridVideoPlayer.swift b/ios/hybrids/HybridVideoPlayer.swift index 2c0397ab..b9118030 100644 --- a/ios/hybrids/HybridVideoPlayer.swift +++ b/ios/hybrids/HybridVideoPlayer.swift @@ -36,6 +36,10 @@ class HybridVideoPlayer: HybridVideoPlayerSpec { } } + var duration: Double { + Double(player.currentItem?.duration.seconds ?? Double.nan) + } + init(source: HybridVideoPlayerSourceSpec) throws { self.source = source diff --git a/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp b/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp index e65cd4b4..b36058aa 100644 --- a/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp @@ -60,6 +60,11 @@ namespace margelo::nitro::video { static const auto method = _javaPart->getClass()->getMethod("setCurrentTime"); method(_javaPart, currentTime); } + double JHybridVideoPlayerSpec::getDuration() { + static const auto method = _javaPart->getClass()->getMethod("getDuration"); + auto __result = method(_javaPart); + return __result; + } // Methods void JHybridVideoPlayerSpec::play() { diff --git a/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp b/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp index b0f212e5..63c83355 100644 --- a/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp @@ -53,6 +53,7 @@ namespace margelo::nitro::video { void setVolume(double volume) override; double getCurrentTime() override; void setCurrentTime(double currentTime) override; + double getDuration() override; public: // Methods diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt index 3a1179dd..eec23b27 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSpec.kt @@ -55,6 +55,10 @@ abstract class HybridVideoPlayerSpec: HybridObject() { @set:DoNotStrip @set:Keep abstract var currentTime: Double + + @get:DoNotStrip + @get:Keep + abstract val duration: Double // Methods @DoNotStrip diff --git a/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp b/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp index b7e28899..eb37db93 100644 --- a/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp @@ -76,6 +76,9 @@ namespace margelo::nitro::video { inline void setCurrentTime(double currentTime) noexcept override { _swiftPart.setCurrentTime(std::forward(currentTime)); } + inline double getDuration() noexcept override { + return _swiftPart.getDuration(); + } public: // Methods diff --git a/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift b/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift index 3347c5a8..6f96201a 100644 --- a/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +++ b/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift @@ -32,6 +32,7 @@ public protocol HybridVideoPlayerSpec: AnyObject, HybridObjectSpec { var source: (any HybridVideoPlayerSourceSpec) { get set } var volume: Double { get set } var currentTime: Double { get set } + var duration: Double { get } // Methods func play() throws -> Void diff --git a/nitrogen/generated/ios/swift/HybridVideoPlayerSpecCxx.swift b/nitrogen/generated/ios/swift/HybridVideoPlayerSpecCxx.swift index 3a8d617e..89ffef87 100644 --- a/nitrogen/generated/ios/swift/HybridVideoPlayerSpecCxx.swift +++ b/nitrogen/generated/ios/swift/HybridVideoPlayerSpecCxx.swift @@ -135,6 +135,13 @@ public class HybridVideoPlayerSpecCxx { self.__implementation.currentTime = newValue } } + + public var duration: Double { + @inline(__always) + get { + return self.__implementation.duration + } + } // Methods @inline(__always) diff --git a/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp b/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp index 2d4e14d9..bb78d4b1 100644 --- a/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +++ b/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp @@ -20,6 +20,7 @@ namespace margelo::nitro::video { prototype.registerHybridSetter("volume", &HybridVideoPlayerSpec::setVolume); prototype.registerHybridGetter("currentTime", &HybridVideoPlayerSpec::getCurrentTime); prototype.registerHybridSetter("currentTime", &HybridVideoPlayerSpec::setCurrentTime); + prototype.registerHybridGetter("duration", &HybridVideoPlayerSpec::getDuration); prototype.registerHybridMethod("play", &HybridVideoPlayerSpec::play); prototype.registerHybridMethod("pause", &HybridVideoPlayerSpec::pause); }); diff --git a/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp b/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp index d1cd52ee..705ee3b8 100644 --- a/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +++ b/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp @@ -52,6 +52,7 @@ namespace margelo::nitro::video { virtual void setVolume(double volume) = 0; virtual double getCurrentTime() = 0; virtual void setCurrentTime(double currentTime) = 0; + virtual double getDuration() = 0; public: // Methods diff --git a/src/spec/nitro/VideoPlayer.nitro.ts b/src/spec/nitro/VideoPlayer.nitro.ts index 58801d60..c5b07c95 100644 --- a/src/spec/nitro/VideoPlayer.nitro.ts +++ b/src/spec/nitro/VideoPlayer.nitro.ts @@ -6,6 +6,7 @@ export interface VideoPlayer source: VideoPlayerSource; volume: number; currentTime: number; + readonly duration: number; play(): void; pause(): void;