diff --git a/bun.lock b/bun.lock index bf50f4b6..a63375a2 100644 --- a/bun.lock +++ b/bun.lock @@ -51,13 +51,13 @@ }, "example": { "name": "react-native-video-example", - "version": "7.0.0-alpha.11", + "version": "7.0.0-beta.0", "dependencies": { "@react-native-community/slider": "^4.5.6", "@react-native-video/drm": "*", "react": "18.3.1", "react-native": "^0.77.0", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "react-native-video": "*", }, "devDependencies": { @@ -79,7 +79,7 @@ }, "packages/drm-plugin": { "name": "@react-native-video/drm", - "version": "7.0.0-alpha.11", + "version": "7.0.0-beta.0", "devDependencies": { "@react-native/babel-preset": "0.79.2", "@release-it/conventional-changelog": "^9.0.2", @@ -88,12 +88,12 @@ "eslint": "^8.51.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-prettier": "^5.0.1", - "nitrogen": "^0.30.0", + "nitrogen": "^0.31.0", "prettier": "^3.0.3", "react": "18.3.1", "react-native": "^0.77.0", "react-native-builder-bob": "^0.40.13", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "react-native-video": "*", "release-it": "^17.10.0", "typescript": "^5.8.3", @@ -107,7 +107,7 @@ }, "packages/react-native-video": { "name": "react-native-video", - "version": "7.0.0-alpha.12", + "version": "7.0.0-beta.0", "devDependencies": { "@expo/config-plugins": "^10.0.2", "@react-native/eslint-config": "^0.77.0", @@ -116,12 +116,12 @@ "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", - "nitrogen": "^0.30.0", + "nitrogen": "^0.31.0", "prettier": "^3.0.3", "react": "18.3.1", "react-native": "^0.77.0", "react-native-builder-bob": "^0.40.0", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "typescript": "^5.2.2", }, "peerDependencies": { @@ -2686,7 +2686,7 @@ "new-github-release-url": ["new-github-release-url@2.0.0", "", { "dependencies": { "type-fest": "^2.5.1" } }, "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ=="], - "nitrogen": ["nitrogen@0.30.1", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.30.1", "ts-morph": "^27.0.0", "yargs": "^18.0.0", "zod": "^4.0.5" }, "bin": { "nitrogen": "lib/index.js" } }, "sha512-Ls4gahvOxcI2WXyhimHinv4LOujbyXir8bE4hyhqG8vAV5spEcDi0F4nZ0oiTERAnfN/rq1Lskx+hc7Wrl5O+g=="], + "nitrogen": ["nitrogen@0.31.10", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.31.10", "ts-morph": "^27.0.0", "yargs": "^18.0.0", "zod": "^4.0.5" }, "bin": { "nitrogen": "lib/index.js" } }, "sha512-Z77c1lj4IeyCigxiO59fW4fnHgfvOZvksTTwfESAJBnHG2DnS28VQ2oCAWL+fPIEvMozLFi+cRyTQu63eJMCSA=="], "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], @@ -3066,7 +3066,7 @@ "react-native-monorepo-config": ["react-native-monorepo-config@0.1.10", "", { "dependencies": { "escape-string-regexp": "^5.0.0", "fast-glob": "^3.3.3" } }, "sha512-v0rlaLZiCUg95Mpw6xNRQce5k9yio0qscKjNQaPtFYMNL75YugS2UPUItIPLIRbZubK+s2/LRzBjX+mdyUgh4g=="], - "react-native-nitro-modules": ["react-native-nitro-modules@0.30.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-/m1kIUx4qQonqauVLn/DdkXFTKQI180VUJz7G2P/4Jab3NfUqdrFg6ixpf9bH1YXsXb92hK/8epTgl0B8OPxfw=="], + "react-native-nitro-modules": ["react-native-nitro-modules@0.31.10", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-hcvjTu9YJE9fMmnAUvhG8CxvYLpOuMQ/2eyi/S6GyrecezF6Rmk/uRQEL6v09BRFWA/xRVZNQVulQPS+2HS3mQ=="], "react-native-video": ["react-native-video@workspace:packages/react-native-video"], diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index ec0374c9..b11621a2 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -8,7 +8,7 @@ PODS: - hermes-engine (0.77.3): - hermes-engine/Pre-built (= 0.77.3) - hermes-engine/Pre-built (0.77.3) - - NitroModules (0.30.1): + - NitroModules (0.31.10): - DoubleConversion - glog - hermes-engine @@ -1565,7 +1565,7 @@ PODS: - React-logger (= 0.77.3) - React-perflogger (= 0.77.3) - React-utils (= 0.77.3) - - ReactNativeVideo (7.0.0-alpha.11): + - ReactNativeVideo (7.0.0-beta.0): - DoubleConversion - glog - hermes-engine @@ -1587,7 +1587,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - ReactNativeVideoDrm (7.0.0-alpha.11): + - ReactNativeVideoDrm (7.0.0-beta.0): - DoubleConversion - glog - hermes-engine @@ -1844,7 +1844,7 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 hermes-engine: b2187dbe13edb0db8fcb2a93a69c1987a30d98a4 - NitroModules: eac3d2deb32a5b72ef76210e735dd80bde02f472 + NitroModules: 72332b5857c49f2ee0b5390d4aa00fb91db17df7 RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 RCTDeprecation: 6ee92578d332db1d4e03267d3ae98bcf8b780863 RCTRequired: 5b3da0e0f91fddda935574b81748c3e3d3649ee7 @@ -1904,8 +1904,8 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 31015410a4a53b9fd0a908ad4d6e3e2b9a25086a ReactCodegen: 53316394e985ded1babc7f143c90c77d2bb1b43c ReactCommon: bf4612cba0fa356b529385029f470d5529dddde4 - ReactNativeVideo: d6536278408a2518bf15b8f0b8fb066b3c824065 - ReactNativeVideoDrm: 4316a2f9e2ba34ed83de3c70fd37ab985568f948 + ReactNativeVideo: 5a5e609057e980e9ea2736914377804358c53ae9 + ReactNativeVideoDrm: 4f266c3b018170319ed16bc511218c0d411358d5 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 92f3bb322c40a86b7233b815854730442e01b8c4 diff --git a/example/ios/VideoExample.xcodeproj/project.pbxproj b/example/ios/VideoExample.xcodeproj/project.pbxproj index 1ee7d060..ed3d3ce9 100644 --- a/example/ios/VideoExample.xcodeproj/project.pbxproj +++ b/example/ios/VideoExample.xcodeproj/project.pbxproj @@ -8,10 +8,10 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* VideoExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* VideoExampleTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-VideoExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-VideoExample.a */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 816A0BB965C7D616166E4A50 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + 9B33EFC63F107D31293DC837 /* libPods-VideoExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC879E2D9A5E3666772BB43B /* libPods-VideoExample.a */; }; E24C673A2DA45E9200FB6B41 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24C67392DA45E9200FB6B41 /* AppDelegate.swift */; }; /* End PBXBuildFile section */ @@ -29,16 +29,16 @@ 00E356EE1AD99517003FC87E /* VideoExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VideoExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* VideoExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoExampleTests.m; sourceTree = ""; }; + 1296B1F9CB9A72FBF202C0EA /* Pods-VideoExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoExample.debug.xcconfig"; path = "Target Support Files/Pods-VideoExample/Pods-VideoExample.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* VideoExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VideoExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = VideoExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = VideoExample/Info.plist; sourceTree = ""; }; 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = VideoExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-VideoExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoExample.debug.xcconfig"; path = "Target Support Files/Pods-VideoExample/Pods-VideoExample.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-VideoExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoExample.release.xcconfig"; path = "Target Support Files/Pods-VideoExample/Pods-VideoExample.release.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-VideoExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VideoExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = VideoExample/LaunchScreen.storyboard; sourceTree = ""; }; + AAFF36D6DEC049CEB9D865D8 /* Pods-VideoExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoExample.release.xcconfig"; path = "Target Support Files/Pods-VideoExample/Pods-VideoExample.release.xcconfig"; sourceTree = ""; }; E24C67342DA4538300FB6B41 /* VideoExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VideoExample-Bridging-Header.h"; sourceTree = ""; }; E24C67392DA45E9200FB6B41 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = VideoExample/AppDelegate.swift; sourceTree = ""; }; + EC879E2D9A5E3666772BB43B /* libPods-VideoExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VideoExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -54,7 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C80B921A6F3F58F76C31292 /* libPods-VideoExample.a in Frameworks */, + 9B33EFC63F107D31293DC837 /* libPods-VideoExample.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,7 +95,7 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-VideoExample.a */, + EC879E2D9A5E3666772BB43B /* libPods-VideoExample.a */, ); name = Frameworks; sourceTree = ""; @@ -134,8 +134,8 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 3B4392A12AC88292D35C810B /* Pods-VideoExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-VideoExample.release.xcconfig */, + 1296B1F9CB9A72FBF202C0EA /* Pods-VideoExample.debug.xcconfig */, + AAFF36D6DEC049CEB9D865D8 /* Pods-VideoExample.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -165,13 +165,13 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "VideoExample" */; buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + FD3671B4534E587DE7FC3AE1 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + 6075DF6F545CCB0D1B44F807 /* [CP] Embed Pods Frameworks */, + 5C23AE340DBC4431B262FF5D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -255,7 +255,24 @@ shellPath = /bin/sh; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { + 5C23AE340DBC4431B262FF5D /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6075DF6F545CCB0D1B44F807 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -272,7 +289,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + FD3671B4534E587DE7FC3AE1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -294,23 +311,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VideoExample/Pods-VideoExample-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -392,7 +392,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-VideoExample.debug.xcconfig */; + baseConfigurationReference = 1296B1F9CB9A72FBF202C0EA /* Pods-VideoExample.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -423,7 +423,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-VideoExample.release.xcconfig */; + baseConfigurationReference = AAFF36D6DEC049CEB9D865D8 /* Pods-VideoExample.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; diff --git a/example/package.json b/example/package.json index 08805f78..e7f312e2 100644 --- a/example/package.json +++ b/example/package.json @@ -15,7 +15,7 @@ "@react-native-community/slider": "^4.5.6", "react": "18.3.1", "react-native": "^0.77.0", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "react-native-video": "*", "@react-native-video/drm": "*" }, diff --git a/example/patches/nitrogen+0.30.1.patch b/example/patches/nitrogen+0.31.10.patch similarity index 100% rename from example/patches/nitrogen+0.30.1.patch rename to example/patches/nitrogen+0.31.10.patch diff --git a/example/patches/react-native-nitro-modules+0.30.1.patch b/example/patches/react-native-nitro-modules+0.31.10.patch similarity index 100% rename from example/patches/react-native-nitro-modules+0.30.1.patch rename to example/patches/react-native-nitro-modules+0.31.10.patch diff --git a/packages/drm-plugin/package.json b/packages/drm-plugin/package.json index eca8b5e9..3f442979 100644 --- a/packages/drm-plugin/package.json +++ b/packages/drm-plugin/package.json @@ -72,12 +72,12 @@ "eslint": "^8.51.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-prettier": "^5.0.1", - "nitrogen": "^0.30.0", + "nitrogen": "^0.31.0", "prettier": "^3.0.3", "react": "18.3.1", "react-native": "^0.77.0", "react-native-builder-bob": "^0.40.13", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "release-it": "^17.10.0", "typescript": "^5.8.3", "react-native-video": "*" diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/core/player/OnAudioFocusChangedListener.kt b/packages/react-native-video/android/src/main/java/com/twg/video/core/player/OnAudioFocusChangedListener.kt index 5b933b50..d681e88f 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/core/player/OnAudioFocusChangedListener.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/core/player/OnAudioFocusChangedListener.kt @@ -1,23 +1,21 @@ package com.twg.video.core.player -import android.content.IntentFilter import android.media.AudioManager -import androidx.core.content.ContextCompat -import com.margelo.nitro.video.HybridVideoPlayerEventEmitterSpec +import com.margelo.nitro.video.HybridVideoPlayerEventEmitter // TODO: We should make VideoFocusManager that will track focus globally for now lets just do simple listener class OnAudioFocusChangedListener : AudioManager.OnAudioFocusChangeListener { - private var eventEmitter: HybridVideoPlayerEventEmitterSpec? = null + private var eventEmitter: HybridVideoPlayerEventEmitter? = null override fun onAudioFocusChange(focusChange: Int) { when (focusChange) { - AudioManager.AUDIOFOCUS_GAIN -> eventEmitter?.onAudioFocusChange?.invoke(true) - AudioManager.AUDIOFOCUS_LOSS -> eventEmitter?.onAudioFocusChange?.invoke(false) - AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> eventEmitter?.onAudioFocusChange?.invoke(false) + AudioManager.AUDIOFOCUS_GAIN -> eventEmitter?.onAudioFocusChange(true) + AudioManager.AUDIOFOCUS_LOSS -> eventEmitter?.onAudioFocusChange(false) + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> eventEmitter?.onAudioFocusChange(false) } } - fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitterSpec) { + fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitter) { this.eventEmitter = eventEmitter } diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/core/recivers/AudioBecomingNoisyReceiver.kt b/packages/react-native-video/android/src/main/java/com/twg/video/core/recivers/AudioBecomingNoisyReceiver.kt index b613ee72..1669bcf0 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/core/recivers/AudioBecomingNoisyReceiver.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/core/recivers/AudioBecomingNoisyReceiver.kt @@ -7,19 +7,19 @@ import android.content.IntentFilter import android.media.AudioManager import androidx.core.content.ContextCompat import com.margelo.nitro.NitroModules -import com.margelo.nitro.video.HybridVideoPlayerEventEmitterSpec +import com.margelo.nitro.video.HybridVideoPlayerEventEmitter import com.twg.video.core.LibraryError class AudioBecomingNoisyReceiver() : BroadcastReceiver() { - private var eventEmitter: HybridVideoPlayerEventEmitterSpec? = null + private var eventEmitter: HybridVideoPlayerEventEmitter? = null override fun onReceive(context: Context?, intent: Intent?) { if (intent?.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) { - eventEmitter?.onAudioBecomingNoisy?.invoke() + eventEmitter?.onAudioBecomingNoisy() } } - fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitterSpec) { + fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitter) { val context = NitroModules.applicationContext ?: throw LibraryError.ApplicationContextNotFound this.eventEmitter = eventEmitter diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt index 962003eb..f3b3c8be 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayer/HybridVideoPlayer.kt @@ -307,8 +307,10 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { currentTime = time.coerceIn(0.0, duration) } - override fun replaceSourceAsync(source: HybridVideoPlayerSourceSpec?): Promise { + override fun replaceSourceAsync(source: Variant_NullType_HybridVideoPlayerSourceSpec?): Promise { return Promise.async { + val source = source?.asSecondOrNull() + if (source == null) { release() return@async @@ -351,10 +353,11 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { VideoPlaybackService.stopService(this, videoPlaybackServiceConnection) } - VideoManager.unregisterPlayer(this) - stopProgressUpdates() - loadedWithSource = false runOnMainThread { + VideoManager.unregisterPlayer(this) + stopProgressUpdates() + loadedWithSource = false + player.removeListener(playerListener) player.removeAnalyticsListener(analyticsListener) player.release() // Release player @@ -597,10 +600,10 @@ class HybridVideoPlayer() : HybridVideoPlayerSpec() { return TextTrackUtils.getAvailableTextTracks(player, source) } - override fun selectTextTrack(textTrack: TextTrack?) { + override fun selectTextTrack(textTrack: Variant_NullType_TextTrack?) { selectedExternalTrackIndex = TextTrackUtils.selectTextTrack( player = player, - textTrack = textTrack, + textTrack = textTrack?.asSecondOrNull(), source = source, onTrackChange = { track -> eventEmitter.onTrackChange(track) } ) diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt index 56aa61de..45c6c41d 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt @@ -1,41 +1,166 @@ package com.margelo.nitro.video -class HybridVideoPlayerEventEmitter(): HybridVideoPlayerEventEmitterSpec() { - override var onAudioBecomingNoisy: () -> Unit = {} +import android.util.Log +import com.margelo.nitro.core.NullType +import java.util.UUID - override var onAudioFocusChange: (Boolean) -> Unit = {} +data class ListenerPair(val id: UUID, val eventName: String, val callback: Any) - override var onBandwidthUpdate: (BandwidthData) -> Unit = {} +class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec() { + var listeners: MutableList = mutableListOf() - override var onBuffer: (Boolean) -> Unit = {} + // MARK: - Private helpers + private fun addListener(eventName: String, listener: T): ListenerSubscription { + val id = UUID.randomUUID() + listeners.add(ListenerPair(id, eventName, listener)) + return ListenerSubscription { listeners.removeAll { it.id == id } } + } - override var onControlsVisibleChange: (Boolean) -> Unit = {} + private inline fun emitEvent(eventName: String, invokeCallback: (T) -> Unit) { + listeners.filter { it.eventName == eventName }.forEach { pair -> + try { + @Suppress("UNCHECKED_CAST") + val callback = pair.callback as? T + if (callback == null) { + Log.d(TAG, "Invalid callback type for $eventName") + return@forEach + } + invokeCallback(callback) + } catch (error: Error) { + Log.d(TAG, "Error calling $eventName listener $error") + } + } + } - override var onEnd: () -> Unit = {} + // MARK: - Listener registration methods + + override fun addOnAudioBecomingNoisyListener(listener: () -> Unit) = + addListener("onAudioBecomingNoisy", listener) - override var onExternalPlaybackChange: (Boolean) -> Unit = {} + override fun addOnAudioFocusChangeListener(listener: (Boolean) -> Unit) = + addListener("onAudioFocusChange", listener) - override var onLoad: (onLoadData) -> Unit = {} + override fun addOnBandwidthUpdateListener(listener: (BandwidthData) -> Unit) = + addListener("onBandwidthUpdate", listener) - override var onLoadStart: (onLoadStartData) -> Unit = {} + override fun addOnBufferListener(listener: (Boolean) -> Unit) = + addListener("onBuffer", listener) - override var onPlaybackStateChange: (onPlaybackStateChangeData) -> Unit = {} + override fun addOnControlsVisibleChangeListener(listener: (Boolean) -> Unit) = + addListener("onControlsVisibleChange", listener) - override var onPlaybackRateChange: (Double) -> Unit = {} + override fun addOnEndListener(listener: () -> Unit) = + addListener("onEnd", listener) - override var onProgress: (onProgressData) -> Unit = {} + override fun addOnExternalPlaybackChangeListener(listener: (Boolean) -> Unit) = + addListener("onExternalPlaybackChange", listener) - override var onReadyToDisplay: () -> Unit = {} + override fun addOnLoadListener(listener: (onLoadData) -> Unit) = + addListener("onLoad", listener) - override var onSeek: (Double) -> Unit = {} + override fun addOnLoadStartListener(listener: (onLoadStartData) -> Unit) = + addListener("onLoadStart", listener) - override var onTimedMetadata: (TimedMetadata) -> Unit = {} + override fun addOnPlaybackStateChangeListener(listener: (onPlaybackStateChangeData) -> Unit) = + addListener("onPlaybackStateChange", listener) - override var onTextTrackDataChanged: (Array) -> Unit = {} + override fun addOnPlaybackRateChangeListener(listener: (Double) -> Unit) = + addListener("onPlaybackRateChange", listener) - override var onTrackChange: (TextTrack?) -> Unit = {} + override fun addOnProgressListener(listener: (onProgressData) -> Unit) = + addListener("onProgress", listener) - override var onVolumeChange: (onVolumeChangeData) -> Unit = {} + override fun addOnReadyToDisplayListener(listener: () -> Unit) = + addListener("onReadyToDisplay", listener) - override var onStatusChange: (VideoPlayerStatus) -> Unit = {} + override fun addOnSeekListener(listener: (Double) -> Unit) = + addListener("onSeek", listener) + + override fun addOnStatusChangeListener(listener: (VideoPlayerStatus) -> Unit) = + addListener("onStatusChange", listener) + + override fun addOnTimedMetadataListener(listener: (TimedMetadata) -> Unit) = + addListener("onTimedMetadata", listener) + + override fun addOnTextTrackDataChangedListener(listener: (Array) -> Unit) = + addListener("onTextTrackDataChanged", listener) + + override fun addOnTrackChangeListener(listener: (Variant_NullType_TextTrack?) -> Unit) = + addListener("onTrackChange", listener) + + override fun addOnVolumeChangeListener(listener: (onVolumeChangeData) -> Unit) = + addListener("onVolumeChange", listener) + + override fun clearAllListeners() { + listeners.clear() + } + + // MARK: - Event emission methods + + fun onAudioBecomingNoisy() = + emitEvent<() -> Unit>("onAudioBecomingNoisy") { it() } + + fun onAudioFocusChange(hasFocus: Boolean) = + emitEvent<(Boolean) -> Unit>("onAudioFocusChange") { it(hasFocus) } + + fun onBandwidthUpdate(data: BandwidthData) = + emitEvent<(BandwidthData) -> Unit>("onBandwidthUpdate") { it(data) } + + fun onBuffer(isBuffering: Boolean) = + emitEvent<(Boolean) -> Unit>("onBuffer") { it(isBuffering) } + + fun onControlsVisibleChange(isVisible: Boolean) = + emitEvent<(Boolean) -> Unit>("onControlsVisibleChange") { it(isVisible) } + + fun onEnd() = + emitEvent<() -> Unit>("onEnd") { it() } + + fun onExternalPlaybackChange(isExternalPlayback: Boolean) = + emitEvent<(Boolean) -> Unit>("onExternalPlaybackChange") { it(isExternalPlayback) } + + fun onLoad(data: onLoadData) = + emitEvent<(onLoadData) -> Unit>("onLoad") { it(data) } + + fun onLoadStart(data: onLoadStartData) = + emitEvent<(onLoadStartData) -> Unit>("onLoadStart") { it(data) } + + fun onPlaybackStateChange(data: onPlaybackStateChangeData) = + emitEvent<(onPlaybackStateChangeData) -> Unit>("onPlaybackStateChange") { it(data) } + + fun onPlaybackRateChange(rate: Double) = + emitEvent<(Double) -> Unit>("onPlaybackRateChange") { it(rate) } + + fun onProgress(data: onProgressData) = + emitEvent<(onProgressData) -> Unit>("onProgress") { it(data) } + + fun onReadyToDisplay() = + emitEvent<() -> Unit>("onReadyToDisplay") { it() } + + fun onSeek(position: Double) = + emitEvent<(Double) -> Unit>("onSeek") { it(position) } + + fun onTimedMetadata(metadata: TimedMetadata) = + emitEvent<(TimedMetadata) -> Unit>("onTimedMetadata") { it(metadata) } + + fun onTextTrackDataChanged(tracks: Array) = + emitEvent<(Array) -> Unit>("onTextTrackDataChanged") { it(tracks) } + + fun onTrackChange(track: TextTrack?) { + val param = if (track == null) { + Variant_NullType_TextTrack.create(NullType.NULL) + } else { + Variant_NullType_TextTrack.create(track) + } + emitEvent<(Variant_NullType_TextTrack?) -> Unit>("onTrackChange") { it(param) } + } + + fun onVolumeChange(data: onVolumeChangeData) = + emitEvent<(onVolumeChangeData) -> Unit>("onVolumeChange") { it(data) } + + fun onStatusChange(status: VideoPlayerStatus) = + emitEvent<(VideoPlayerStatus) -> Unit>("onStatusChange") { it(status) } + + companion object { + const val TAG = "HybridVideoPlayerEventEmitter" + } } diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt index 1123641a..e6432651 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt @@ -7,12 +7,24 @@ import com.twg.video.core.VideoManager import com.twg.video.core.VideoViewError import com.twg.video.core.utils.PictureInPictureUtils import com.twg.video.core.utils.Threading +import java.util.UUID + +data class ViewListenerPair( + val id: UUID, + val eventName: String, + val callback: Any +) @DoNotStrip @OptIn(UnstableApi::class) -class HybridVideoViewViewManager(nitroId: Int): HybridVideoViewViewManagerSpec(), VideoViewEvents { +class HybridVideoViewViewManager(nitroId: Int): HybridVideoViewViewManagerSpec(), VideoViewEventsEmitter { private var videoView = VideoManager.getVideoViewWeakReferenceByNitroId(nitroId) ?: throw VideoViewError.ViewNotFound(nitroId) + private val listeners = mutableListOf() + + init { + videoView.get()?.eventsEmitter = this + } override var player: HybridVideoPlayerSpec? get() { @@ -86,47 +98,90 @@ class HybridVideoViewViewManager(nitroId: Int): HybridVideoViewViewManagerSpec() videoView.get()?.surfaceType = value } - // View callbacks - override var onPictureInPictureChange: ((Boolean) -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.onPictureInPictureChange = value - } - override var onFullscreenChange: ((Boolean) -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.onFullscreenChange = value - } - override var willEnterFullscreen: (() -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.willEnterFullscreen = value - } - override var willExitFullscreen: (() -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.willExitFullscreen = value - } - override var willEnterPictureInPicture: (() -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.willEnterPictureInPicture = value - } - override var willExitPictureInPicture: (() -> Unit)? = null - set(value) { - field = value - videoView.get()?.events?.willExitPictureInPicture = value + // MARK: - Private helpers + + private fun addListener(eventName: String, listener: T): ListenerSubscription { + val id = UUID.randomUUID() + listeners.add(ViewListenerPair(id, eventName, listener as Any)) + return ListenerSubscription { listeners.removeAll { it.id == id } } + } + + @Suppress("UNCHECKED_CAST") + private fun emitEvent(eventName: String, invoke: (T) -> Unit) { + listeners.filter { it.eventName == eventName }.forEach { pair -> + try { + invoke(pair.callback as T) + } catch (e: Exception) { + println("[ReactNativeVideo] Error calling $eventName listener: $e") + } } + } + + // MARK: - Listener registration methods + + override fun addOnPictureInPictureChangeListener(listener: (Boolean) -> Unit): ListenerSubscription { + return addListener("onPictureInPictureChange", listener) + } + + override fun addOnFullscreenChangeListener(listener: (Boolean) -> Unit): ListenerSubscription { + return addListener("onFullscreenChange", listener) + } + + override fun addWillEnterFullscreenListener(listener: () -> Unit): ListenerSubscription { + return addListener("willEnterFullscreen", listener) + } + + override fun addWillExitFullscreenListener(listener: () -> Unit): ListenerSubscription { + return addListener("willExitFullscreen", listener) + } + + override fun addWillEnterPictureInPictureListener(listener: () -> Unit): ListenerSubscription { + return addListener("willEnterPictureInPicture", listener) + } + + override fun addWillExitPictureInPictureListener(listener: () -> Unit): ListenerSubscription { + return addListener("willExitPictureInPicture", listener) + } + + override fun clearAllListeners() { + listeners.clear() + } + + // MARK: - Event emission methods (called by VideoView) + + override fun onPictureInPictureChange(isActive: Boolean) { + emitEvent<(Boolean) -> Unit>("onPictureInPictureChange") { it(isActive) } + } + + override fun onFullscreenChange(isActive: Boolean) { + emitEvent<(Boolean) -> Unit>("onFullscreenChange") { it(isActive) } + } + + override fun willEnterFullscreen() { + emitEvent<() -> Unit>("willEnterFullscreen") { it() } + } + + override fun willExitFullscreen() { + emitEvent<() -> Unit>("willExitFullscreen") { it() } + } + + override fun willEnterPictureInPicture() { + emitEvent<() -> Unit>("willEnterPictureInPicture") { it() } + } + + override fun willExitPictureInPicture() { + emitEvent<() -> Unit>("willExitPictureInPicture") { it() } + } override val memorySize: Long get() = 0 } -interface VideoViewEvents { - var onPictureInPictureChange: ((Boolean) -> Unit)? - var onFullscreenChange: ((Boolean) -> Unit)? - var willEnterFullscreen: (() -> Unit)? - var willExitFullscreen: (() -> Unit)? - var willEnterPictureInPicture: (() -> Unit)? - var willExitPictureInPicture: (() -> Unit)? +interface VideoViewEventsEmitter { + fun onPictureInPictureChange(isActive: Boolean) + fun onFullscreenChange(isActive: Boolean) + fun willEnterFullscreen() + fun willExitFullscreen() + fun willEnterPictureInPicture() + fun willExitPictureInPicture() } diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/view/VideoView.kt b/packages/react-native-video/android/src/main/java/com/twg/video/view/VideoView.kt index 8f35b89d..121c7bd9 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/view/VideoView.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/view/VideoView.kt @@ -24,7 +24,7 @@ import com.margelo.nitro.NitroModules import com.margelo.nitro.video.HybridVideoPlayer import com.margelo.nitro.video.ResizeMode import com.margelo.nitro.video.SurfaceType -import com.margelo.nitro.video.VideoViewEvents +import com.margelo.nitro.video.VideoViewEventsEmitter import com.twg.video.core.LibraryError import com.twg.video.core.VideoManager import com.twg.video.core.VideoViewError @@ -124,21 +124,16 @@ class VideoView @JvmOverloads constructor( } } - var events = object : VideoViewEvents { - override var onPictureInPictureChange: ((Boolean) -> Unit)? = {} - override var onFullscreenChange: ((Boolean) -> Unit)? = {} - override var willEnterFullscreen: (() -> Unit)? = {} - override var willExitFullscreen: (() -> Unit)? = {} - override var willEnterPictureInPicture: (() -> Unit)? = {} - override var willExitPictureInPicture: (() -> Unit)? = {} - } + var eventsEmitter: VideoViewEventsEmitter? = null var onNitroIdChange: ((Int?) -> Unit)? = null var playerView = createPlayerView() var isInFullscreen: Boolean = false set(value) { + if (value != field) { + eventsEmitter?.onFullscreenChange(value) + } field = value - events.onFullscreenChange?.let { it(value) } } var isInPictureInPicture: Boolean = false set(value) { @@ -154,7 +149,7 @@ class VideoView @JvmOverloads constructor( playerView.controllerHideOnTouch = true } - events.onPictureInPictureChange?.let { it(value) } + eventsEmitter?.onPictureInPictureChange(value) } private var rootContentViews: List = listOf() private var pictureInPictureHelperTag: String? = null @@ -234,7 +229,7 @@ class VideoView @JvmOverloads constructor( } try { - events.willEnterFullscreen?.let { it() } + eventsEmitter?.willEnterFullscreen() val fragment = FullscreenVideoFragment(this) fullscreenFragmentTag = fragment.id @@ -256,7 +251,7 @@ class VideoView @JvmOverloads constructor( return } - events.willExitFullscreen?.let { it() } + eventsEmitter?.willExitFullscreen() val currentActivity = applicationContent.currentActivity fullscreenFragmentTag?.let { tag -> @@ -442,7 +437,7 @@ class VideoView @JvmOverloads constructor( val currentActivity = applicationContent.currentActivity ?: return false return try { - events.willEnterPictureInPicture?.let { it() } + eventsEmitter?.willEnterPictureInPicture() // Disable controls before entering PiP - media session creates its own controls for PiP runOnMainThread { @@ -483,7 +478,7 @@ class VideoView @JvmOverloads constructor( VideoManager.notifyPictureInPictureExited(this) - events.willExitPictureInPicture?.let { it() } + eventsEmitter?.willExitPictureInPicture() // Restore controls when exiting PiP - they were disabled because media session handles PiP controls playerView.useController = useController @@ -512,7 +507,7 @@ class VideoView @JvmOverloads constructor( Log.d("ReactNativeVideo", "Activity is in PiP mode, preparing for transition") } - events.willExitPictureInPicture?.let { it() } + eventsEmitter?.willExitPictureInPicture() // Restore controls when exiting PiP - they were disabled because media session handles PiP controls playerView.useController = useController diff --git a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer+Events.swift b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer+Events.swift index 3db4bc7b..99cef8e9 100644 --- a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer+Events.swift +++ b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer+Events.swift @@ -5,44 +5,48 @@ // Created by Krzysztof Moch on 02/05/2025. // -import Foundation import AVFoundation +import Foundation extension HybridVideoPlayer: VideoPlayerObserverDelegate { // MARK: - VideoPlayerObserverDelegate - + func onPlayedToEnd(player: AVPlayer) { - eventEmitter.onEnd() - + _eventEmitter?.onEnd() + if loop { currentTime = 0 try? play() } } - + func onRateChanged(rate: Float) { - eventEmitter.onPlaybackRateChange(Double(rate)) + _eventEmitter?.onPlaybackRateChange(Double(rate)) NowPlayingInfoCenterManager.shared.updateNowPlayingInfo() updateAndEmitPlaybackState() } - + func onVolumeChanged(volume: Float) { - eventEmitter.onVolumeChange(onVolumeChangeData( - volume: Double(volume), - muted: muted - )) + _eventEmitter?.onVolumeChange( + onVolumeChangeData( + volume: Double(volume), + muted: muted + ) + ) } - + func onPlaybackBufferEmpty() { isCurrentlyBuffering = true status = .loading updateAndEmitPlaybackState() } - + func onProgressUpdate(currentTime: Double, bufferDuration: Double) { - eventEmitter.onProgress(.init(currentTime: currentTime, bufferDuration: bufferDuration)) + _eventEmitter?.onProgress( + .init(currentTime: currentTime, bufferDuration: bufferDuration) + ) } - + func onPlaybackLikelyToKeepUp() { isCurrentlyBuffering = false if player.timeControlStatus == .playing { @@ -50,42 +54,44 @@ extension HybridVideoPlayer: VideoPlayerObserverDelegate { } updateAndEmitPlaybackState() } - + func onExternalPlaybackActiveChanged(isActive: Bool) { - eventEmitter.onExternalPlaybackChange(isActive) + _eventEmitter?.onExternalPlaybackChange(isActive) } - + func onTimeControlStatusChanged(status: AVPlayer.TimeControlStatus) { if player.status == .failed || playerItem?.status == .failed { self.status = .error isCurrentlyBuffering = false - eventEmitter.onPlaybackStateChange(.init(isPlaying: false, isBuffering: false)) + _eventEmitter?.onPlaybackStateChange( + .init(isPlaying: false, isBuffering: false) + ) return } - + switch status { case .waitingToPlayAtSpecifiedRate: isCurrentlyBuffering = true self.status = .loading break - + case .playing: isCurrentlyBuffering = false self.status = .readytoplay break - + case .paused: isCurrentlyBuffering = false self.status = .readytoplay break - + @unknown default: break } - + updateAndEmitPlaybackState() } - + func onPlayerStatusChanged(status: AVPlayer.Status) { if status == .failed || playerItem?.status == .failed { self.status = .error @@ -93,7 +99,7 @@ extension HybridVideoPlayer: VideoPlayerObserverDelegate { updateAndEmitPlaybackState() } } - + func onPlayerItemStatusChanged(status: AVPlayerItem.Status) { if status == .failed { self.status = .error @@ -101,68 +107,74 @@ extension HybridVideoPlayer: VideoPlayerObserverDelegate { updateAndEmitPlaybackState() return } - + switch status { case .unknown: isCurrentlyBuffering = true self.status = .loading - + // Set initial buffering state when we have a playerItem if let playerItem = self.playerItem { if playerItem.isPlaybackBufferEmpty { isCurrentlyBuffering = true } } - + case .readyToPlay: guard let playerItem else { return } - + let height = playerItem.presentationSize.height let width = playerItem.presentationSize.width - let orientation: VideoOrientation = playerItem.asset.tracks.first(where: { $0.mediaType == .video })?.orientation ?? .unknown - - eventEmitter.onLoad( + let orientation: VideoOrientation = + playerItem.asset.tracks.first(where: { $0.mediaType == .video })? + .orientation ?? .unknown + + _eventEmitter?.onLoad( .init(currentTime, duration, height, width, orientation) ) - - if playerItem.isPlaybackLikelyToKeepUp && !playerItem.isPlaybackBufferEmpty { + + if playerItem.isPlaybackLikelyToKeepUp + && !playerItem.isPlaybackBufferEmpty + { isCurrentlyBuffering = false self.status = .readytoplay } - + case .failed: self.status = .error isCurrentlyBuffering = false - + @unknown default: break } - + updateAndEmitPlaybackState() } - + func onTextTrackDataChanged(texts: [NSAttributedString]) { - eventEmitter.onTextTrackDataChanged(texts.map { $0.string }) + _eventEmitter?.onTextTrackDataChanged(texts.map { $0.string }) } - + func onTimedMetadataChanged(timedMetadata: [AVMetadataItem]) { var metadata: [TimedMetadataObject] = [] for item in timedMetadata { let value = item.value as? String let identifier = item.identifier?.rawValue - + if let value, let identifier { metadata.append(.init(value: value, identifier: identifier)) } } - - eventEmitter.onTimedMetadata(.init(metadata: metadata)) + + _eventEmitter?.onTimedMetadata(.init(metadata: metadata)) } - + func onBandwidthUpdate(bitrate: Double) { - eventEmitter.onBandwidthUpdate(.init(bitrate: bitrate, width: nil, height: nil)) + _eventEmitter?.onBandwidthUpdate( + .init(bitrate: bitrate, width: nil, height: nil) + ) } - + func onPlayerItemWillChange(hasNewPlayerItem: Bool) { if hasNewPlayerItem { // Set initial buffering state when playerItem is assigned @@ -174,11 +186,13 @@ extension HybridVideoPlayer: VideoPlayerObserverDelegate { isCurrentlyBuffering = false } } - + func updateAndEmitPlaybackState() { let isPlaying = player.rate > 0 && !isCurrentlyBuffering - - eventEmitter.onPlaybackStateChange(.init(isPlaying: isPlaying, isBuffering: isCurrentlyBuffering)) - eventEmitter.onBuffer(isCurrentlyBuffering) + + _eventEmitter?.onPlaybackStateChange( + .init(isPlaying: isPlaying, isBuffering: isCurrentlyBuffering) + ) + _eventEmitter?.onBuffer(isCurrentlyBuffering) } } diff --git a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift index 589ace04..ca68784a 100644 --- a/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift +++ b/packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift @@ -10,6 +10,7 @@ import Foundation import NitroModules class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { + /** * Player instance for video playback */ @@ -70,12 +71,15 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { var status: VideoPlayerStatus = .idle { didSet { if status != oldValue { - eventEmitter.onStatusChange(status) + _eventEmitter?.onStatusChange(status) } } } var eventEmitter: HybridVideoPlayerEventEmitterSpec + var _eventEmitter: HybridVideoPlayerEventEmitter? { + return eventEmitter as? HybridVideoPlayerEventEmitter + } var volume: Double { set { @@ -89,7 +93,7 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { var muted: Bool { set { player.isMuted = newValue - eventEmitter.onVolumeChange( + _eventEmitter?.onVolumeChange( onVolumeChangeData( volume: Double(player.volume), muted: muted @@ -103,7 +107,7 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { var currentTime: Double { set { - eventEmitter.onSeek(newValue) + _eventEmitter?.onSeek(newValue) player.seek( to: CMTime(seconds: newValue, preferredTimescale: 1000), toleranceBefore: .zero, @@ -281,46 +285,65 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { currentTime = time } - func replaceSourceAsync(source: (any HybridVideoPlayerSourceSpec)?) throws + func replaceSourceAsync( + source: Variant_NullType__any_HybridVideoPlayerSourceSpec_? + ) throws -> Promise { let promise = Promise() + /** + @frozen + public indirect enum Variant_NullType__any_HybridVideoPlayerSourceSpec_ { + case first(NullType) + case second((any HybridVideoPlayerSourceSpec)) + } + */ + + // if source is nil, release player + // if source is not NullType, set source guard let source else { release() promise.resolve(withResult: ()) return promise } - Task.detached(priority: .userInitiated) { [weak self] in - guard let self else { - promise.reject( - withError: LibraryError.deallocated(objectName: "HybridVideoPlayer") - .error() - ) - return - } - - await self.sourceLoader.cancel() - - if let oldSource = self.source as? HybridVideoPlayerSource { - oldSource.releaseAsset() - } - - self.source = source - - do { - self.playerItem = try await self.sourceLoader.load { - try await self.initializePlayerItem() + switch source { + case .first(_): + release() + promise.resolve(withResult: ()) + return promise + case .second(let newSource): + Task.detached(priority: .userInitiated) { [weak self] in + guard let self else { + promise.reject( + withError: LibraryError.deallocated(objectName: "HybridVideoPlayer") + .error() + ) + return } - self.player.replaceCurrentItem(with: self.playerItem) - NowPlayingInfoCenterManager.shared.updateNowPlayingInfo() - promise.resolve(withResult: ()) - } catch { - if error is CancellationError { - promise.reject(withError: PlayerError.cancelled.error()) - } else { - promise.reject(withError: error) + + await self.sourceLoader.cancel() + + if let oldSource = self.source as? HybridVideoPlayerSource { + oldSource.releaseAsset() + } + + self.source = newSource + + do { + self.playerItem = try await self.sourceLoader.load { + try await self.initializePlayerItem() + } + self.player.replaceCurrentItem(with: self.playerItem) + NowPlayingInfoCenterManager.shared.updateNowPlayingInfo() + promise.resolve(withResult: ()) + } catch { + if error is CancellationError { + promise.reject(withError: PlayerError.cancelled.error()) + } else { + promise.reject(withError: error) + } } } } @@ -343,7 +366,7 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { ) let isNetworkSource = _source.url.isFileURL == false - eventEmitter.onLoadStart( + _eventEmitter?.onLoadStart( .init(sourceType: isNetworkSource ? .network : .local, source: _source) ) @@ -412,7 +435,7 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { return tracks } - func selectTextTrack(textTrack: TextTrack?) throws { + func selectTextTrack(textTrack: Variant_NullType_TextTrack?) throws { guard let currentItem = player.currentItem else { throw PlayerError.notInitialized.error() } @@ -429,37 +452,45 @@ class HybridVideoPlayer: HybridVideoPlayerSpec, NativeVideoPlayerSpec { guard let textTrack = textTrack else { currentItem.select(nil, in: mediaSelection) selectedExternalTrackIndex = nil - eventEmitter.onTrackChange(nil) + _eventEmitter?.onTrackChange(nil) return } - // If textTrack id is empty, deselect any selected track - if textTrack.id.isEmpty { + switch textTrack { + case .first(_): currentItem.select(nil, in: mediaSelection) selectedExternalTrackIndex = nil - eventEmitter.onTrackChange(nil) + _eventEmitter?.onTrackChange(nil) return - } - - if textTrack.id.hasPrefix("external-") { - let trackIndexStr = String(textTrack.id.dropFirst("external-".count)) - if let trackIndex = Int(trackIndexStr), - trackIndex < mediaSelection.options.count - { - let option = mediaSelection.options[trackIndex] - currentItem.select(option, in: mediaSelection) - selectedExternalTrackIndex = trackIndex - eventEmitter.onTrackChange(textTrack) + case .second(let textTrack): + // If textTrack id is empty, deselect any selected track + if textTrack.id.isEmpty { + currentItem.select(nil, in: mediaSelection) + selectedExternalTrackIndex = nil + _eventEmitter?.onTrackChange(nil) + return } - } else if textTrack.id.hasPrefix("builtin-") { - for option in mediaSelection.options { - let optionId = - "builtin-\(option.displayName)-\(option.locale?.identifier ?? "unknown")" - if optionId == textTrack.id { + + if textTrack.id.hasPrefix("external-") { + let trackIndexStr = String(textTrack.id.dropFirst("external-".count)) + if let trackIndex = Int(trackIndexStr), + trackIndex < mediaSelection.options.count + { + let option = mediaSelection.options[trackIndex] currentItem.select(option, in: mediaSelection) - selectedExternalTrackIndex = nil - eventEmitter.onTrackChange(textTrack) - return + selectedExternalTrackIndex = trackIndex + _eventEmitter?.onTrackChange(.second(textTrack)) + } + } else if textTrack.id.hasPrefix("builtin-") { + for option in mediaSelection.options { + let optionId = + "builtin-\(option.displayName)-\(option.locale?.identifier ?? "unknown")" + if optionId == textTrack.id { + currentItem.select(option, in: mediaSelection) + selectedExternalTrackIndex = nil + _eventEmitter?.onTrackChange(.second(textTrack)) + return + } } } } diff --git a/packages/react-native-video/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift b/packages/react-native-video/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift index 622f0e78..0415985a 100644 --- a/packages/react-native-video/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift +++ b/packages/react-native-video/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift @@ -8,42 +8,196 @@ import Foundation import NitroModules -class HybridVideoPlayerEventEmitter: HybridVideoPlayerEventEmitterSpec { - var onAudioBecomingNoisy: (() -> Void) = {} - - var onAudioFocusChange: ((Bool) -> Void) = { _ in } - - var onBandwidthUpdate: ((BandwidthData) -> Void) = { _ in } - - var onBuffer: ((Bool) -> Void) = { _ in } - - var onControlsVisibleChange: ((Bool) -> Void) = { _ in } - - var onEnd: (() -> Void) = {} - - var onExternalPlaybackChange: ((Bool) -> Void) = { _ in } - - var onLoad: ((onLoadData) -> Void) = { _ in } - - var onLoadStart: ((onLoadStartData) -> Void) = { _ in } - - var onPlaybackStateChange: ((onPlaybackStateChangeData) -> Void) = { _ in } - - var onPlaybackRateChange: ((Double) -> Void) = { _ in } - - var onProgress: ((onProgressData) -> Void) = { _ in } - - var onReadyToDisplay: (() -> Void) = {} - - var onSeek: ((Double) -> Void) = { _ in } - - var onStatusChange: (VideoPlayerStatus) -> Void = { _ in } - - var onTimedMetadata: ((TimedMetadata) -> Void) = { _ in } - - var onTextTrackDataChanged: ([String]) -> Void = { _ in } - - var onTrackChange: ((TextTrack?) -> Void) = { _ in } - - var onVolumeChange: ((onVolumeChangeData) -> Void) = { _ in } +struct ListenerPair { + let id: UUID + let eventName: String + let callback: Any +} + +class HybridVideoPlayerEventEmitter: HybridVideoPlayerEventEmitterSpec { + var listeners: [ListenerPair] = [] + + // MARK: - Private helpers + + private func addListener(eventName: String, listener: T) -> ListenerSubscription { + let id = UUID() + listeners.append(ListenerPair(id: id, eventName: eventName, callback: listener)) + return ListenerSubscription(remove: { [weak self] in + self?.listeners.removeAll { $0.id == id } + }) + } + + private func emitEvent(eventName: String, invoke: (T) throws -> Void) { + for pair in listeners where pair.eventName == eventName { + if let callback = pair.callback as? T { + do { + try invoke(callback) + } catch { + print("[ReactNativeVideo] Error calling \(eventName) listener: \(error)") + } + } else { + print("[ReactNativeVideo] Invalid callback type for \(eventName)") + } + } + } + + // MARK: - Listener registration methods + + func addOnAudioBecomingNoisyListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "onAudioBecomingNoisy", listener: listener) + } + + func addOnAudioFocusChangeListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onAudioFocusChange", listener: listener) + } + + func addOnBandwidthUpdateListener(listener: @escaping (BandwidthData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onBandwidthUpdate", listener: listener) + } + + func addOnBufferListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onBuffer", listener: listener) + } + + func addOnControlsVisibleChangeListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onControlsVisibleChange", listener: listener) + } + + func addOnEndListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "onEnd", listener: listener) + } + + func addOnExternalPlaybackChangeListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onExternalPlaybackChange", listener: listener) + } + + func addOnLoadListener(listener: @escaping (onLoadData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onLoad", listener: listener) + } + + func addOnLoadStartListener(listener: @escaping (onLoadStartData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onLoadStart", listener: listener) + } + + func addOnPlaybackStateChangeListener(listener: @escaping (onPlaybackStateChangeData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onPlaybackStateChange", listener: listener) + } + + func addOnPlaybackRateChangeListener(listener: @escaping (Double) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onPlaybackRateChange", listener: listener) + } + + func addOnProgressListener(listener: @escaping (onProgressData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onProgress", listener: listener) + } + + func addOnReadyToDisplayListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "onReadyToDisplay", listener: listener) + } + + func addOnSeekListener(listener: @escaping (Double) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onSeek", listener: listener) + } + + func addOnStatusChangeListener(listener: @escaping (VideoPlayerStatus) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onStatusChange", listener: listener) + } + + func addOnTimedMetadataListener(listener: @escaping (TimedMetadata) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onTimedMetadata", listener: listener) + } + + func addOnTextTrackDataChangedListener(listener: @escaping ([String]) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onTextTrackDataChanged", listener: listener) + } + + func addOnTrackChangeListener(listener: @escaping (Variant_NullType_TextTrack?) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onTrackChange", listener: listener) + } + + func addOnVolumeChangeListener(listener: @escaping (onVolumeChangeData) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onVolumeChange", listener: listener) + } + + func clearAllListeners() throws { + listeners.removeAll() + } + + // MARK: - Event emission methods + + func onAudioBecomingNoisy() { + emitEvent(eventName: "onAudioBecomingNoisy") { (callback: () throws -> Void) in try callback() } + } + + func onAudioFocusChange(_ hasFocus: Bool) { + emitEvent(eventName: "onAudioFocusChange") { (callback: (Bool) throws -> Void) in try callback(hasFocus) } + } + + func onBandwidthUpdate(_ data: BandwidthData) { + emitEvent(eventName: "onBandwidthUpdate") { (callback: (BandwidthData) throws -> Void) in try callback(data) } + } + + func onBuffer(_ isBuffering: Bool) { + emitEvent(eventName: "onBuffer") { (callback: (Bool) throws -> Void) in try callback(isBuffering) } + } + + func onControlsVisibleChange(_ isVisible: Bool) { + emitEvent(eventName: "onControlsVisibleChange") { (callback: (Bool) throws -> Void) in try callback(isVisible) } + } + + func onEnd() { + emitEvent(eventName: "onEnd") { (callback: () throws -> Void) in try callback() } + } + + func onExternalPlaybackChange(_ isExternalPlaybackActive: Bool) { + emitEvent(eventName: "onExternalPlaybackChange") { (callback: (Bool) throws -> Void) in try callback(isExternalPlaybackActive) } + } + + func onLoad(_ data: onLoadData) { + emitEvent(eventName: "onLoad") { (callback: (onLoadData) throws -> Void) in try callback(data) } + } + + func onLoadStart(_ data: onLoadStartData) { + emitEvent(eventName: "onLoadStart") { (callback: (onLoadStartData) throws -> Void) in try callback(data) } + } + + func onPlaybackStateChange(_ data: onPlaybackStateChangeData) { + emitEvent(eventName: "onPlaybackStateChange") { (callback: (onPlaybackStateChangeData) throws -> Void) in try callback(data) } + } + + func onPlaybackRateChange(_ rate: Double) { + emitEvent(eventName: "onPlaybackRateChange") { (callback: (Double) throws -> Void) in try callback(rate) } + } + + func onProgress(_ data: onProgressData) { + emitEvent(eventName: "onProgress") { (callback: (onProgressData) throws -> Void) in try callback(data) } + } + + func onReadyToDisplay() { + emitEvent(eventName: "onReadyToDisplay") { (callback: () throws -> Void) in try callback() } + } + + func onSeek(_ position: Double) { + emitEvent(eventName: "onSeek") { (callback: (Double) throws -> Void) in try callback(position) } + } + + func onStatusChange(_ status: VideoPlayerStatus) { + emitEvent(eventName: "onStatusChange") { (callback: (VideoPlayerStatus) throws -> Void) in try callback(status) } + } + + func onTimedMetadata(_ metadata: TimedMetadata) { + emitEvent(eventName: "onTimedMetadata") { (callback: (TimedMetadata) throws -> Void) in try callback(metadata) } + } + + func onTextTrackDataChanged(_ tracks: [String]) { + emitEvent(eventName: "onTextTrackDataChanged") { (callback: ([String]) throws -> Void) in try callback(tracks) } + } + + func onTrackChange(_ track: Variant_NullType_TextTrack?) { + emitEvent(eventName: "onTrackChange") { (callback: (Variant_NullType_TextTrack?) throws -> Void) in try callback(track) } + } + + func onVolumeChange(_ data: onVolumeChangeData) { + emitEvent(eventName: "onVolumeChange") { (callback: (onVolumeChangeData) throws -> Void) in try callback(data) } + } } diff --git a/packages/react-native-video/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift b/packages/react-native-video/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift index ff0efb97..d63643eb 100644 --- a/packages/react-native-video/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift +++ b/packages/react-native-video/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift @@ -9,8 +9,15 @@ import Foundation import AVKit import NitroModules +struct ViewListenerPair { + let id: UUID + let eventName: String + let callback: Any +} + class HybridVideoViewViewManager: HybridVideoViewViewManagerSpec { weak var view: VideoComponentView? + var listeners: [ViewListenerPair] = [] let DEALOCATED_WARNING = "ReactNativeVideo: VideoComponentView is no longer available. It is likely that the view was deallocated." @@ -24,6 +31,30 @@ class HybridVideoViewViewManager: HybridVideoViewViewManagerSpec { view.delegate = VideoViewDelegate(viewManager: self) } + // MARK: - Private helpers + + private func addListener(eventName: String, listener: T) -> ListenerSubscription { + let id = UUID() + listeners.append(ViewListenerPair(id: id, eventName: eventName, callback: listener)) + return ListenerSubscription(remove: { [weak self] in + self?.listeners.removeAll { $0.id == id } + }) + } + + private func emitEvent(eventName: String, invoke: (T) throws -> Void) { + for pair in listeners where pair.eventName == eventName { + if let callback = pair.callback as? T { + do { + try invoke(callback) + } catch { + print("[ReactNativeVideo] Error calling \(eventName) listener: \(error)") + } + } else { + print("[ReactNativeVideo] Invalid callback type for \(eventName)") + } + } + } + // MARK: - Properties weak var player: (any HybridVideoPlayerSpec)? { @@ -177,19 +208,59 @@ class HybridVideoViewViewManager: HybridVideoViewViewManagerSpec { return AVPictureInPictureController.isPictureInPictureSupported() } - // MARK: - Callbacks + // MARK: - Listener registration methods - var onPictureInPictureChange: ((Bool) -> Void)? + func addOnPictureInPictureChangeListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onPictureInPictureChange", listener: listener) + } - var onFullscreenChange: ((Bool) -> Void)? + func addOnFullscreenChangeListener(listener: @escaping (Bool) -> Void) throws -> ListenerSubscription { + addListener(eventName: "onFullscreenChange", listener: listener) + } - var willEnterFullscreen: (() -> Void)? + func addWillEnterFullscreenListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "willEnterFullscreen", listener: listener) + } - var willExitFullscreen: (() -> Void)? + func addWillExitFullscreenListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "willExitFullscreen", listener: listener) + } - var willEnterPictureInPicture: (() -> Void)? + func addWillEnterPictureInPictureListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "willEnterPictureInPicture", listener: listener) + } - var willExitPictureInPicture: (() -> Void)? + func addWillExitPictureInPictureListener(listener: @escaping () -> Void) throws -> ListenerSubscription { + addListener(eventName: "willExitPictureInPicture", listener: listener) + } - var onReadyToDisplay: (() -> Void)? + func clearAllListeners() throws { + listeners.removeAll() + } + + // MARK: - Event emission methods + + func onPictureInPictureChange(_ isActive: Bool) { + emitEvent(eventName: "onPictureInPictureChange") { (callback: (Bool) throws -> Void) in try callback(isActive) } + } + + func onFullscreenChange(_ isActive: Bool) { + emitEvent(eventName: "onFullscreenChange") { (callback: (Bool) throws -> Void) in try callback(isActive) } + } + + func willEnterFullscreen() { + emitEvent(eventName: "willEnterFullscreen") { (callback: () throws -> Void) in try callback() } + } + + func willExitFullscreen() { + emitEvent(eventName: "willExitFullscreen") { (callback: () throws -> Void) in try callback() } + } + + func willEnterPictureInPicture() { + emitEvent(eventName: "willEnterPictureInPicture") { (callback: () throws -> Void) in try callback() } + } + + func willExitPictureInPicture() { + emitEvent(eventName: "willExitPictureInPicture") { (callback: () throws -> Void) in try callback() } + } } diff --git a/packages/react-native-video/ios/view/VideoComponentViewObserver.swift b/packages/react-native-video/ios/view/VideoComponentViewObserver.swift index 4413f824..f3065fa2 100644 --- a/packages/react-native-video/ios/view/VideoComponentViewObserver.swift +++ b/packages/react-native-video/ios/view/VideoComponentViewObserver.swift @@ -28,31 +28,33 @@ final class VideoViewDelegate: NSObject, VideoComponentViewDelegate { } func onPictureInPictureChange(_ isActive: Bool) { - viewManager?.onPictureInPictureChange?(isActive) + viewManager?.onPictureInPictureChange(isActive) } func onFullscreenChange(_ isActive: Bool) { - viewManager?.onFullscreenChange?(isActive) + viewManager?.onFullscreenChange(isActive) } func willEnterFullscreen() { - viewManager?.willEnterFullscreen?() + viewManager?.willEnterFullscreen() } func willExitFullscreen() { - viewManager?.willExitFullscreen?() + viewManager?.willExitFullscreen() } func willEnterPictureInPicture() { - viewManager?.willEnterPictureInPicture?() + viewManager?.willEnterPictureInPicture() } func willExitPictureInPicture() { - viewManager?.willExitPictureInPicture?() + viewManager?.willExitPictureInPicture() } func onReadyToDisplay() { - viewManager?.player?.eventEmitter.onReadyToDisplay() + if let player = viewManager?.player as? HybridVideoPlayer { + player._eventEmitter?.onReadyToDisplay() + } } } diff --git a/packages/react-native-video/nitrogen/generated/android/ReactNativeVideo+autolinking.cmake b/packages/react-native-video/nitrogen/generated/android/ReactNativeVideo+autolinking.cmake index 3065a295..cc1a7185 100644 --- a/packages/react-native-video/nitrogen/generated/android/ReactNativeVideo+autolinking.cmake +++ b/packages/react-native-video/nitrogen/generated/android/ReactNativeVideo+autolinking.cmake @@ -42,6 +42,8 @@ target_sources( ../nitrogen/generated/shared/c++/HybridVideoViewViewManagerFactorySpec.cpp # Android-specific Nitrogen C++ sources ../nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp + ../nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp + ../nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp ../nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp ../nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp ../nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp diff --git a/packages/react-native-video/nitrogen/generated/android/ReactNativeVideoOnLoad.cpp b/packages/react-native-video/nitrogen/generated/android/ReactNativeVideoOnLoad.cpp index 2938284f..3e846757 100644 --- a/packages/react-native-video/nitrogen/generated/android/ReactNativeVideoOnLoad.cpp +++ b/packages/react-native-video/nitrogen/generated/android/ReactNativeVideoOnLoad.cpp @@ -26,11 +26,11 @@ #include "JFunc_void_onPlaybackStateChangeData.hpp" #include "JFunc_void_double.hpp" #include "JFunc_void_onProgressData.hpp" +#include "JFunc_void_VideoPlayerStatus.hpp" #include "JFunc_void_TimedMetadata.hpp" #include "JFunc_void_std__vector_std__string_.hpp" -#include "JFunc_void_std__optional_TextTrack_.hpp" +#include "JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp" #include "JFunc_void_onVolumeChangeData.hpp" -#include "JFunc_void_VideoPlayerStatus.hpp" #include "JHybridVideoPlayerSourceSpec.hpp" #include "JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp" #include "JHybridVideoPlayerSourceFactorySpec.hpp" @@ -58,11 +58,11 @@ int initialize(JavaVM* vm) { margelo::nitro::video::JFunc_void_onPlaybackStateChangeData_cxx::registerNatives(); margelo::nitro::video::JFunc_void_double_cxx::registerNatives(); margelo::nitro::video::JFunc_void_onProgressData_cxx::registerNatives(); + margelo::nitro::video::JFunc_void_VideoPlayerStatus_cxx::registerNatives(); margelo::nitro::video::JFunc_void_TimedMetadata_cxx::registerNatives(); margelo::nitro::video::JFunc_void_std__vector_std__string__cxx::registerNatives(); - margelo::nitro::video::JFunc_void_std__optional_TextTrack__cxx::registerNatives(); + margelo::nitro::video::JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx::registerNatives(); margelo::nitro::video::JFunc_void_onVolumeChangeData_cxx::registerNatives(); - margelo::nitro::video::JFunc_void_VideoPlayerStatus_cxx::registerNatives(); margelo::nitro::video::JHybridVideoPlayerSourceSpec::registerNatives(); margelo::nitro::video::JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_cxx::registerNatives(); margelo::nitro::video::JHybridVideoPlayerSourceFactorySpec::registerNatives(); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp index be5e6d9b..6f81b6f5 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp @@ -14,6 +14,7 @@ #include #include "OnGetLicensePayload.hpp" #include +#include #include #include "JOnGetLicensePayload.hpp" @@ -65,7 +66,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_cxx final: public jni::HybridClass { + class JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function>>>(const OnGetLicensePayload& /* payload */)>& func) { return JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void.hpp index ec57138c..3638de86 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void.hpp @@ -11,6 +11,7 @@ #include #include +#include namespace margelo::nitro::video { @@ -37,7 +38,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_cxx final: public jni::HybridClass { + class JFunc_void_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp index ef113048..bcf3a9ad 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp @@ -12,6 +12,7 @@ #include "BandwidthData.hpp" #include +#include #include "JBandwidthData.hpp" #include @@ -40,7 +41,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_BandwidthData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_BandwidthData_cxx final: public jni::HybridClass { + class JFunc_void_BandwidthData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_BandwidthData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp index f52d8940..8bb82f2f 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp @@ -12,6 +12,7 @@ #include "TimedMetadata.hpp" #include +#include #include "JTimedMetadata.hpp" #include "TimedMetadataObject.hpp" #include @@ -23,7 +24,7 @@ namespace margelo::nitro::video { using namespace facebook; /** - * Represents the Java/Kotlin callback `(metadata: TimedMetadata) -> Unit`. + * Represents the Java/Kotlin callback `(data: TimedMetadata) -> Unit`. * This can be passed around between C++ and Java/Kotlin. */ struct JFunc_void_TimedMetadata: public jni::JavaClass { @@ -34,18 +35,18 @@ namespace margelo::nitro::video { /** * Invokes the function this `JFunc_void_TimedMetadata` instance holds through JNI. */ - void invoke(const TimedMetadata& metadata) const { - static const auto method = javaClassStatic()->getMethod /* metadata */)>("invoke"); - method(self(), JTimedMetadata::fromCpp(metadata)); + void invoke(const TimedMetadata& data) const { + static const auto method = javaClassStatic()->getMethod /* data */)>("invoke"); + method(self(), JTimedMetadata::fromCpp(data)); } }; /** * An implementation of Func_void_TimedMetadata that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_TimedMetadata_cxx final: public jni::HybridClass { + class JFunc_void_TimedMetadata_cxx final: public jni::HybridClass { public: - static jni::local_ref fromCpp(const std::function& func) { + static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_TimedMetadata_cxx::newObjectCxxArgs(func); } @@ -53,13 +54,13 @@ namespace margelo::nitro::video { /** * Invokes the C++ `std::function<...>` this `JFunc_void_TimedMetadata_cxx` instance holds. */ - void invoke_cxx(jni::alias_ref metadata) { - _func(metadata->toCpp()); + void invoke_cxx(jni::alias_ref data) { + _func(data->toCpp()); } public: [[nodiscard]] - inline const std::function& getFunction() const { + inline const std::function& getFunction() const { return _func; } @@ -70,11 +71,11 @@ namespace margelo::nitro::video { } private: - explicit JFunc_void_TimedMetadata_cxx(const std::function& func): _func(func) { } + explicit JFunc_void_TimedMetadata_cxx(const std::function& func): _func(func) { } private: friend HybridBase; - std::function _func; + std::function _func; }; } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp index ec3842a6..eabcdafc 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp @@ -12,6 +12,7 @@ #include "VideoPlayerStatus.hpp" #include +#include #include "JVideoPlayerStatus.hpp" namespace margelo::nitro::video { @@ -39,7 +40,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_VideoPlayerStatus that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_VideoPlayerStatus_cxx final: public jni::HybridClass { + class JFunc_void_VideoPlayerStatus_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_VideoPlayerStatus_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_bool.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_bool.hpp index aba55d48..02464560 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_bool.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_bool.hpp @@ -11,6 +11,7 @@ #include #include +#include namespace margelo::nitro::video { @@ -37,7 +38,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_bool that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_bool_cxx final: public jni::HybridClass { + class JFunc_void_bool_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_bool_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_double.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_double.hpp index 653e2a01..a9442e83 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_double.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_double.hpp @@ -11,6 +11,7 @@ #include #include +#include namespace margelo::nitro::video { @@ -37,7 +38,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_double that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_double_cxx final: public jni::HybridClass { + class JFunc_void_double_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_double_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp index 6d865d6c..27297969 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp @@ -12,6 +12,7 @@ #include "onLoadData.hpp" #include +#include #include "JonLoadData.hpp" #include "VideoOrientation.hpp" #include "JVideoOrientation.hpp" @@ -41,7 +42,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_onLoadData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_onLoadData_cxx final: public jni::HybridClass { + class JFunc_void_onLoadData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_onLoadData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp index c59aac9f..089b0819 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp @@ -12,6 +12,7 @@ #include "onLoadStartData.hpp" #include +#include #include "JonLoadStartData.hpp" #include "SourceType.hpp" #include "JSourceType.hpp" @@ -44,7 +45,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_onLoadStartData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_onLoadStartData_cxx final: public jni::HybridClass { + class JFunc_void_onLoadStartData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_onLoadStartData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp index 9db750ad..a14bd81a 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp @@ -12,6 +12,7 @@ #include "onPlaybackStateChangeData.hpp" #include +#include #include "JonPlaybackStateChangeData.hpp" namespace margelo::nitro::video { @@ -39,7 +40,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_onPlaybackStateChangeData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_onPlaybackStateChangeData_cxx final: public jni::HybridClass { + class JFunc_void_onPlaybackStateChangeData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_onPlaybackStateChangeData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp index 13dcfff0..aba423c2 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp @@ -12,6 +12,7 @@ #include "onProgressData.hpp" #include +#include #include "JonProgressData.hpp" namespace margelo::nitro::video { @@ -39,7 +40,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_onProgressData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_onProgressData_cxx final: public jni::HybridClass { + class JFunc_void_onProgressData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_onProgressData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp index f4313d98..fe285957 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp @@ -12,6 +12,7 @@ #include "onVolumeChangeData.hpp" #include +#include #include "JonVolumeChangeData.hpp" namespace margelo::nitro::video { @@ -39,7 +40,7 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_onVolumeChangeData that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_onVolumeChangeData_cxx final: public jni::HybridClass { + class JFunc_void_onVolumeChangeData_cxx final: public jni::HybridClass { public: static jni::local_ref fromCpp(const std::function& func) { return JFunc_void_onVolumeChangeData_cxx::newObjectCxxArgs(func); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_TextTrack_.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_TextTrack_.hpp deleted file mode 100644 index 4cfc2e87..00000000 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_TextTrack_.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/// -/// JFunc_void_std__optional_TextTrack_.hpp -/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. -/// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo -/// - -#pragma once - -#include -#include - -#include "TextTrack.hpp" -#include -#include -#include "JTextTrack.hpp" -#include - -namespace margelo::nitro::video { - - using namespace facebook; - - /** - * Represents the Java/Kotlin callback `(track: TextTrack?) -> Unit`. - * This can be passed around between C++ and Java/Kotlin. - */ - struct JFunc_void_std__optional_TextTrack_: public jni::JavaClass { - public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__optional_TextTrack_;"; - - public: - /** - * Invokes the function this `JFunc_void_std__optional_TextTrack_` instance holds through JNI. - */ - void invoke(const std::optional& track) const { - static const auto method = javaClassStatic()->getMethod /* track */)>("invoke"); - method(self(), track.has_value() ? JTextTrack::fromCpp(track.value()) : nullptr); - } - }; - - /** - * An implementation of Func_void_std__optional_TextTrack_ that is backed by a C++ implementation (using `std::function<...>`) - */ - struct JFunc_void_std__optional_TextTrack__cxx final: public jni::HybridClass { - public: - static jni::local_ref fromCpp(const std::function& /* track */)>& func) { - return JFunc_void_std__optional_TextTrack__cxx::newObjectCxxArgs(func); - } - - public: - /** - * Invokes the C++ `std::function<...>` this `JFunc_void_std__optional_TextTrack__cxx` instance holds. - */ - void invoke_cxx(jni::alias_ref track) { - _func(track != nullptr ? std::make_optional(track->toCpp()) : std::nullopt); - } - - public: - [[nodiscard]] - inline const std::function& /* track */)>& getFunction() const { - return _func; - } - - public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__optional_TextTrack__cxx;"; - static void registerNatives() { - registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__optional_TextTrack__cxx::invoke_cxx)}); - } - - private: - explicit JFunc_void_std__optional_TextTrack__cxx(const std::function& /* track */)>& func): _func(func) { } - - private: - friend HybridBase; - std::function& /* track */)> _func; - }; - -} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp new file mode 100644 index 00000000..95635815 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp @@ -0,0 +1,83 @@ +/// +/// JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#include +#include + +#include +#include "TextTrack.hpp" +#include +#include +#include +#include +#include "JVariant_NullType_TextTrack.hpp" +#include +#include "JTextTrack.hpp" +#include + +namespace margelo::nitro::video { + + using namespace facebook; + + /** + * Represents the Java/Kotlin callback `(track: Variant_NullType_TextTrack?) -> Unit`. + * This can be passed around between C++ and Java/Kotlin. + */ + struct JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__;"; + + public: + /** + * Invokes the function this `JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__` instance holds through JNI. + */ + void invoke(const std::optional>& track) const { + static const auto method = javaClassStatic()->getMethod /* track */)>("invoke"); + method(self(), track.has_value() ? JVariant_NullType_TextTrack::fromCpp(track.value()) : nullptr); + } + }; + + /** + * An implementation of Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ that is backed by a C++ implementation (using `std::function<...>`) + */ + class JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx final: public jni::HybridClass { + public: + static jni::local_ref fromCpp(const std::function>& /* track */)>& func) { + return JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx::newObjectCxxArgs(func); + } + + public: + /** + * Invokes the C++ `std::function<...>` this `JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx` instance holds. + */ + void invoke_cxx(jni::alias_ref track) { + _func(track != nullptr ? std::make_optional(track->toCpp()) : std::nullopt); + } + + public: + [[nodiscard]] + inline const std::function>& /* track */)>& getFunction() const { + return _func; + } + + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Func_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx;"; + static void registerNatives() { + registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx::invoke_cxx)}); + } + + private: + explicit JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx(const std::function>& /* track */)>& func): _func(func) { } + + private: + friend HybridBase; + std::function>& /* track */)> _func; + }; + +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp index 50983a48..3287132c 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp @@ -13,13 +13,14 @@ #include #include #include +#include namespace margelo::nitro::video { using namespace facebook; /** - * Represents the Java/Kotlin callback `(texts: Array) -> Unit`. + * Represents the Java/Kotlin callback `(data: Array) -> Unit`. * This can be passed around between C++ and Java/Kotlin. */ struct JFunc_void_std__vector_std__string_: public jni::JavaClass { @@ -30,14 +31,15 @@ namespace margelo::nitro::video { /** * Invokes the function this `JFunc_void_std__vector_std__string_` instance holds through JNI. */ - void invoke(const std::vector& texts) const { - static const auto method = javaClassStatic()->getMethod> /* texts */)>("invoke"); + void invoke(const std::vector& data) const { + static const auto method = javaClassStatic()->getMethod> /* data */)>("invoke"); method(self(), [&]() { - size_t __size = texts.size(); + size_t __size = data.size(); jni::local_ref> __array = jni::JArrayClass::newArray(__size); for (size_t __i = 0; __i < __size; __i++) { - const auto& __element = texts[__i]; - __array->setElement(__i, *jni::make_jstring(__element)); + const auto& __element = data[__i]; + auto __elementJni = jni::make_jstring(__element); + __array->setElement(__i, *__elementJni); } return __array; }()); @@ -47,9 +49,9 @@ namespace margelo::nitro::video { /** * An implementation of Func_void_std__vector_std__string_ that is backed by a C++ implementation (using `std::function<...>`) */ - struct JFunc_void_std__vector_std__string__cxx final: public jni::HybridClass { + class JFunc_void_std__vector_std__string__cxx final: public jni::HybridClass { public: - static jni::local_ref fromCpp(const std::function& /* texts */)>& func) { + static jni::local_ref fromCpp(const std::function& /* data */)>& func) { return JFunc_void_std__vector_std__string__cxx::newObjectCxxArgs(func); } @@ -57,13 +59,13 @@ namespace margelo::nitro::video { /** * Invokes the C++ `std::function<...>` this `JFunc_void_std__vector_std__string__cxx` instance holds. */ - void invoke_cxx(jni::alias_ref> texts) { + void invoke_cxx(jni::alias_ref> data) { _func([&]() { - size_t __size = texts->size(); + size_t __size = data->size(); std::vector __vector; __vector.reserve(__size); for (size_t __i = 0; __i < __size; __i++) { - auto __element = texts->getElement(__i); + auto __element = data->getElement(__i); __vector.push_back(__element->toStdString()); } return __vector; @@ -72,7 +74,7 @@ namespace margelo::nitro::video { public: [[nodiscard]] - inline const std::function& /* texts */)>& getFunction() const { + inline const std::function& /* data */)>& getFunction() const { return _func; } @@ -83,11 +85,11 @@ namespace margelo::nitro::video { } private: - explicit JFunc_void_std__vector_std__string__cxx(const std::function& /* texts */)>& func): _func(func) { } + explicit JFunc_void_std__vector_std__string__cxx(const std::function& /* data */)>& func): _func(func) { } private: friend HybridBase; - std::function& /* texts */)> _func; + std::function& /* data */)> _func; }; } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp index ffe1f899..77a79d0d 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp @@ -7,6 +7,8 @@ #include "JHybridVideoPlayerEventEmitterSpec.hpp" +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } // Forward declaration of `BandwidthData` to properly resolve imports. namespace margelo::nitro::video { struct BandwidthData; } // Forward declaration of `onLoadData` to properly resolve imports. @@ -23,6 +25,8 @@ namespace margelo::nitro::video { class HybridVideoPlayerSourceSpec; } namespace margelo::nitro::video { struct onPlaybackStateChangeData; } // Forward declaration of `onProgressData` to properly resolve imports. namespace margelo::nitro::video { struct onProgressData; } +// Forward declaration of `VideoPlayerStatus` to properly resolve imports. +namespace margelo::nitro::video { enum class VideoPlayerStatus; } // Forward declaration of `TimedMetadata` to properly resolve imports. namespace margelo::nitro::video { struct TimedMetadata; } // Forward declaration of `TimedMetadataObject` to properly resolve imports. @@ -31,11 +35,12 @@ namespace margelo::nitro::video { struct TimedMetadataObject; } namespace margelo::nitro::video { struct TextTrack; } // Forward declaration of `onVolumeChangeData` to properly resolve imports. namespace margelo::nitro::video { struct onVolumeChangeData; } -// Forward declaration of `VideoPlayerStatus` to properly resolve imports. -namespace margelo::nitro::video { enum class VideoPlayerStatus; } +#include "ListenerSubscription.hpp" +#include "JListenerSubscription.hpp" #include #include "JFunc_void.hpp" +#include #include "JFunc_void_bool.hpp" #include "BandwidthData.hpp" #include "JFunc_void_BandwidthData.hpp" @@ -61,6 +66,9 @@ namespace margelo::nitro::video { enum class VideoPlayerStatus; } #include "onProgressData.hpp" #include "JFunc_void_onProgressData.hpp" #include "JonProgressData.hpp" +#include "VideoPlayerStatus.hpp" +#include "JFunc_void_VideoPlayerStatus.hpp" +#include "JVideoPlayerStatus.hpp" #include "TimedMetadata.hpp" #include "JFunc_void_TimedMetadata.hpp" #include "JTimedMetadata.hpp" @@ -69,15 +77,16 @@ namespace margelo::nitro::video { enum class VideoPlayerStatus; } #include "JTimedMetadataObject.hpp" #include #include "JFunc_void_std__vector_std__string_.hpp" +#include #include "TextTrack.hpp" -#include "JFunc_void_std__optional_TextTrack_.hpp" +#include +#include "JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp" +#include "JVariant_NullType_TextTrack.hpp" +#include #include "JTextTrack.hpp" #include "onVolumeChangeData.hpp" #include "JFunc_void_onVolumeChangeData.hpp" #include "JonVolumeChangeData.hpp" -#include "VideoPlayerStatus.hpp" -#include "JFunc_void_VideoPlayerStatus.hpp" -#include "JVideoPlayerStatus.hpp" namespace margelo::nitro::video { @@ -101,370 +110,114 @@ namespace margelo::nitro::video { method(_javaPart); } - // Properties - std::function JHybridVideoPlayerEventEmitterSpec::getOnAudioBecomingNoisy() { - static const auto method = javaClassStatic()->getMethod()>("getOnAudioBecomingNoisy_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnAudioBecomingNoisy(const std::function& onAudioBecomingNoisy) { - static const auto method = javaClassStatic()->getMethod /* onAudioBecomingNoisy */)>("setOnAudioBecomingNoisy_cxx"); - method(_javaPart, JFunc_void_cxx::fromCpp(onAudioBecomingNoisy)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnAudioFocusChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnAudioFocusChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool hasAudioFocus) -> void { - return __resultRef->invoke(hasAudioFocus); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnAudioFocusChange(const std::function& onAudioFocusChange) { - static const auto method = javaClassStatic()->getMethod /* onAudioFocusChange */)>("setOnAudioFocusChange_cxx"); - method(_javaPart, JFunc_void_bool_cxx::fromCpp(onAudioFocusChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnBandwidthUpdate() { - static const auto method = javaClassStatic()->getMethod()>("getOnBandwidthUpdate_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_BandwidthData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](BandwidthData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnBandwidthUpdate(const std::function& onBandwidthUpdate) { - static const auto method = javaClassStatic()->getMethod /* onBandwidthUpdate */)>("setOnBandwidthUpdate_cxx"); - method(_javaPart, JFunc_void_BandwidthData_cxx::fromCpp(onBandwidthUpdate)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnBuffer() { - static const auto method = javaClassStatic()->getMethod()>("getOnBuffer_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool buffering) -> void { - return __resultRef->invoke(buffering); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnBuffer(const std::function& onBuffer) { - static const auto method = javaClassStatic()->getMethod /* onBuffer */)>("setOnBuffer_cxx"); - method(_javaPart, JFunc_void_bool_cxx::fromCpp(onBuffer)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnControlsVisibleChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnControlsVisibleChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool visible) -> void { - return __resultRef->invoke(visible); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnControlsVisibleChange(const std::function& onControlsVisibleChange) { - static const auto method = javaClassStatic()->getMethod /* onControlsVisibleChange */)>("setOnControlsVisibleChange_cxx"); - method(_javaPart, JFunc_void_bool_cxx::fromCpp(onControlsVisibleChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnEnd() { - static const auto method = javaClassStatic()->getMethod()>("getOnEnd_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnEnd(const std::function& onEnd) { - static const auto method = javaClassStatic()->getMethod /* onEnd */)>("setOnEnd_cxx"); - method(_javaPart, JFunc_void_cxx::fromCpp(onEnd)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnExternalPlaybackChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnExternalPlaybackChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool externalPlaybackActive) -> void { - return __resultRef->invoke(externalPlaybackActive); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnExternalPlaybackChange(const std::function& onExternalPlaybackChange) { - static const auto method = javaClassStatic()->getMethod /* onExternalPlaybackChange */)>("setOnExternalPlaybackChange_cxx"); - method(_javaPart, JFunc_void_bool_cxx::fromCpp(onExternalPlaybackChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnLoad() { - static const auto method = javaClassStatic()->getMethod()>("getOnLoad_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_onLoadData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](onLoadData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnLoad(const std::function& onLoad) { - static const auto method = javaClassStatic()->getMethod /* onLoad */)>("setOnLoad_cxx"); - method(_javaPart, JFunc_void_onLoadData_cxx::fromCpp(onLoad)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnLoadStart() { - static const auto method = javaClassStatic()->getMethod()>("getOnLoadStart_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_onLoadStartData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](onLoadStartData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnLoadStart(const std::function& onLoadStart) { - static const auto method = javaClassStatic()->getMethod /* onLoadStart */)>("setOnLoadStart_cxx"); - method(_javaPart, JFunc_void_onLoadStartData_cxx::fromCpp(onLoadStart)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnPlaybackStateChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnPlaybackStateChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_onPlaybackStateChangeData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](onPlaybackStateChangeData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnPlaybackStateChange(const std::function& onPlaybackStateChange) { - static const auto method = javaClassStatic()->getMethod /* onPlaybackStateChange */)>("setOnPlaybackStateChange_cxx"); - method(_javaPart, JFunc_void_onPlaybackStateChangeData_cxx::fromCpp(onPlaybackStateChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnPlaybackRateChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnPlaybackRateChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_double_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](double rate) -> void { - return __resultRef->invoke(rate); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnPlaybackRateChange(const std::function& onPlaybackRateChange) { - static const auto method = javaClassStatic()->getMethod /* onPlaybackRateChange */)>("setOnPlaybackRateChange_cxx"); - method(_javaPart, JFunc_void_double_cxx::fromCpp(onPlaybackRateChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnProgress() { - static const auto method = javaClassStatic()->getMethod()>("getOnProgress_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_onProgressData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](onProgressData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnProgress(const std::function& onProgress) { - static const auto method = javaClassStatic()->getMethod /* onProgress */)>("setOnProgress_cxx"); - method(_javaPart, JFunc_void_onProgressData_cxx::fromCpp(onProgress)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnReadyToDisplay() { - static const auto method = javaClassStatic()->getMethod()>("getOnReadyToDisplay_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnReadyToDisplay(const std::function& onReadyToDisplay) { - static const auto method = javaClassStatic()->getMethod /* onReadyToDisplay */)>("setOnReadyToDisplay_cxx"); - method(_javaPart, JFunc_void_cxx::fromCpp(onReadyToDisplay)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnSeek() { - static const auto method = javaClassStatic()->getMethod()>("getOnSeek_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_double_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](double seekTime) -> void { - return __resultRef->invoke(seekTime); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnSeek(const std::function& onSeek) { - static const auto method = javaClassStatic()->getMethod /* onSeek */)>("setOnSeek_cxx"); - method(_javaPart, JFunc_void_double_cxx::fromCpp(onSeek)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnTimedMetadata() { - static const auto method = javaClassStatic()->getMethod()>("getOnTimedMetadata_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_TimedMetadata_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](TimedMetadata metadata) -> void { - return __resultRef->invoke(metadata); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnTimedMetadata(const std::function& onTimedMetadata) { - static const auto method = javaClassStatic()->getMethod /* onTimedMetadata */)>("setOnTimedMetadata_cxx"); - method(_javaPart, JFunc_void_TimedMetadata_cxx::fromCpp(onTimedMetadata)); - } - std::function& /* texts */)> JHybridVideoPlayerEventEmitterSpec::getOnTextTrackDataChanged() { - static const auto method = javaClassStatic()->getMethod()>("getOnTextTrackDataChanged_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function& /* texts */)> { - if (__result->isInstanceOf(JFunc_void_std__vector_std__string__cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](std::vector texts) -> void { - return __resultRef->invoke(texts); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnTextTrackDataChanged(const std::function& /* texts */)>& onTextTrackDataChanged) { - static const auto method = javaClassStatic()->getMethod /* onTextTrackDataChanged */)>("setOnTextTrackDataChanged_cxx"); - method(_javaPart, JFunc_void_std__vector_std__string__cxx::fromCpp(onTextTrackDataChanged)); - } - std::function& /* track */)> JHybridVideoPlayerEventEmitterSpec::getOnTrackChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnTrackChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function& /* track */)> { - if (__result->isInstanceOf(JFunc_void_std__optional_TextTrack__cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](std::optional track) -> void { - return __resultRef->invoke(track); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnTrackChange(const std::function& /* track */)>& onTrackChange) { - static const auto method = javaClassStatic()->getMethod /* onTrackChange */)>("setOnTrackChange_cxx"); - method(_javaPart, JFunc_void_std__optional_TextTrack__cxx::fromCpp(onTrackChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnVolumeChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnVolumeChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_onVolumeChangeData_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](onVolumeChangeData data) -> void { - return __resultRef->invoke(data); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnVolumeChange(const std::function& onVolumeChange) { - static const auto method = javaClassStatic()->getMethod /* onVolumeChange */)>("setOnVolumeChange_cxx"); - method(_javaPart, JFunc_void_onVolumeChangeData_cxx::fromCpp(onVolumeChange)); - } - std::function JHybridVideoPlayerEventEmitterSpec::getOnStatusChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnStatusChange_cxx"); - auto __result = method(_javaPart); - return [&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_VideoPlayerStatus_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](VideoPlayerStatus status) -> void { - return __resultRef->invoke(status); - }; - } - }(); - } - void JHybridVideoPlayerEventEmitterSpec::setOnStatusChange(const std::function& onStatusChange) { - static const auto method = javaClassStatic()->getMethod /* onStatusChange */)>("setOnStatusChange_cxx"); - method(_javaPart, JFunc_void_VideoPlayerStatus_cxx::fromCpp(onStatusChange)); + std::string JHybridVideoPlayerEventEmitterSpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); } - // Methods + // Properties + // Methods + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnAudioBecomingNoisyListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnAudioBecomingNoisyListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnAudioFocusChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnAudioFocusChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnBandwidthUpdateListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnBandwidthUpdateListener_cxx"); + auto __result = method(_javaPart, JFunc_void_BandwidthData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnBufferListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnBufferListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnControlsVisibleChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnControlsVisibleChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnEndListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnEndListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnExternalPlaybackChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnExternalPlaybackChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnLoadListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnLoadListener_cxx"); + auto __result = method(_javaPart, JFunc_void_onLoadData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnLoadStartListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnLoadStartListener_cxx"); + auto __result = method(_javaPart, JFunc_void_onLoadStartData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnPlaybackStateChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnPlaybackStateChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_onPlaybackStateChangeData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnPlaybackRateChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnPlaybackRateChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnProgressListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnProgressListener_cxx"); + auto __result = method(_javaPart, JFunc_void_onProgressData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnReadyToDisplayListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnReadyToDisplayListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnSeekListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnSeekListener_cxx"); + auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnStatusChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnStatusChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_VideoPlayerStatus_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnTimedMetadataListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnTimedMetadataListener_cxx"); + auto __result = method(_javaPart, JFunc_void_TimedMetadata_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnTextTrackDataChangedListener(const std::function& /* data */)>& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnTextTrackDataChangedListener_cxx"); + auto __result = method(_javaPart, JFunc_void_std__vector_std__string__cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnTrackChangeListener(const std::function>& /* track */)>& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnTrackChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoPlayerEventEmitterSpec::addOnVolumeChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnVolumeChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_onVolumeChangeData_cxx::fromCpp(listener)); + return __result->toCpp(); + } + void JHybridVideoPlayerEventEmitterSpec::clearAllListeners() { + static const auto method = javaClassStatic()->getMethod("clearAllListeners"); + method(_javaPart); + } + } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp index 589919d0..95a95e8c 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { @@ -49,48 +50,30 @@ namespace margelo::nitro::video { public: // Properties - std::function getOnAudioBecomingNoisy() override; - void setOnAudioBecomingNoisy(const std::function& onAudioBecomingNoisy) override; - std::function getOnAudioFocusChange() override; - void setOnAudioFocusChange(const std::function& onAudioFocusChange) override; - std::function getOnBandwidthUpdate() override; - void setOnBandwidthUpdate(const std::function& onBandwidthUpdate) override; - std::function getOnBuffer() override; - void setOnBuffer(const std::function& onBuffer) override; - std::function getOnControlsVisibleChange() override; - void setOnControlsVisibleChange(const std::function& onControlsVisibleChange) override; - std::function getOnEnd() override; - void setOnEnd(const std::function& onEnd) override; - std::function getOnExternalPlaybackChange() override; - void setOnExternalPlaybackChange(const std::function& onExternalPlaybackChange) override; - std::function getOnLoad() override; - void setOnLoad(const std::function& onLoad) override; - std::function getOnLoadStart() override; - void setOnLoadStart(const std::function& onLoadStart) override; - std::function getOnPlaybackStateChange() override; - void setOnPlaybackStateChange(const std::function& onPlaybackStateChange) override; - std::function getOnPlaybackRateChange() override; - void setOnPlaybackRateChange(const std::function& onPlaybackRateChange) override; - std::function getOnProgress() override; - void setOnProgress(const std::function& onProgress) override; - std::function getOnReadyToDisplay() override; - void setOnReadyToDisplay(const std::function& onReadyToDisplay) override; - std::function getOnSeek() override; - void setOnSeek(const std::function& onSeek) override; - std::function getOnTimedMetadata() override; - void setOnTimedMetadata(const std::function& onTimedMetadata) override; - std::function& /* texts */)> getOnTextTrackDataChanged() override; - void setOnTextTrackDataChanged(const std::function& /* texts */)>& onTextTrackDataChanged) override; - std::function& /* track */)> getOnTrackChange() override; - void setOnTrackChange(const std::function& /* track */)>& onTrackChange) override; - std::function getOnVolumeChange() override; - void setOnVolumeChange(const std::function& onVolumeChange) override; - std::function getOnStatusChange() override; - void setOnStatusChange(const std::function& onStatusChange) override; + public: // Methods - + ListenerSubscription addOnAudioBecomingNoisyListener(const std::function& listener) override; + ListenerSubscription addOnAudioFocusChangeListener(const std::function& listener) override; + ListenerSubscription addOnBandwidthUpdateListener(const std::function& listener) override; + ListenerSubscription addOnBufferListener(const std::function& listener) override; + ListenerSubscription addOnControlsVisibleChangeListener(const std::function& listener) override; + ListenerSubscription addOnEndListener(const std::function& listener) override; + ListenerSubscription addOnExternalPlaybackChangeListener(const std::function& listener) override; + ListenerSubscription addOnLoadListener(const std::function& listener) override; + ListenerSubscription addOnLoadStartListener(const std::function& listener) override; + ListenerSubscription addOnPlaybackStateChangeListener(const std::function& listener) override; + ListenerSubscription addOnPlaybackRateChangeListener(const std::function& listener) override; + ListenerSubscription addOnProgressListener(const std::function& listener) override; + ListenerSubscription addOnReadyToDisplayListener(const std::function& listener) override; + ListenerSubscription addOnSeekListener(const std::function& listener) override; + ListenerSubscription addOnStatusChangeListener(const std::function& listener) override; + ListenerSubscription addOnTimedMetadataListener(const std::function& listener) override; + ListenerSubscription addOnTextTrackDataChangedListener(const std::function& /* data */)>& listener) override; + ListenerSubscription addOnTrackChangeListener(const std::function>& /* track */)>& listener) override; + ListenerSubscription addOnVolumeChangeListener(const std::function& listener) override; + void clearAllListeners() override; private: friend HybridBase; diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp index 5eeb9a9c..81f3afc8 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp @@ -40,6 +40,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoPlayerFactorySpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp index eba1b7ba..c64387bc 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp index 62f47e87..d8ea7ef9 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp @@ -47,6 +47,7 @@ namespace margelo::nitro::video { struct CustomVideoMetadata; } #include "OnGetLicensePayload.hpp" #include #include "JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp" +#include #include #include "JOnGetLicensePayload.hpp" #include "BufferConfig.hpp" @@ -80,6 +81,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoPlayerSourceFactorySpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp index b7ffa7f2..eb1cc7d2 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp index 625752a4..ba323a6a 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp @@ -46,6 +46,7 @@ namespace margelo::nitro::video { enum class VideoOrientation; } #include "OnGetLicensePayload.hpp" #include #include "JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp" +#include #include #include "JOnGetLicensePayload.hpp" #include "BufferConfig.hpp" @@ -83,6 +84,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoPlayerSourceSpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties std::string JHybridVideoPlayerSourceSpec::getUri() { static const auto method = javaClassStatic()->getMethod()>("getUri"); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp index 82fa476f..5480d8c2 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { 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 0afead62..efa58327 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp @@ -38,6 +38,11 @@ namespace margelo::nitro::video { struct TextTrack; } #include #include #include +#include +#include +#include "JVariant_NullType_HybridVideoPlayerSourceSpec.hpp" +#include +#include "JVariant_NullType_TextTrack.hpp" namespace margelo::nitro::video { @@ -61,6 +66,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoPlayerSpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties std::shared_ptr JHybridVideoPlayerSpec::getSource() { static const auto method = javaClassStatic()->getMethod()>("getSource"); @@ -184,9 +195,9 @@ namespace margelo::nitro::video { } // Methods - std::shared_ptr> JHybridVideoPlayerSpec::replaceSourceAsync(const std::optional>& source) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* source */)>("replaceSourceAsync"); - auto __result = method(_javaPart, source.has_value() ? std::dynamic_pointer_cast(source.value())->getJavaPart() : nullptr); + std::shared_ptr> JHybridVideoPlayerSpec::replaceSourceAsync(const std::optional>>& source) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* source */)>("replaceSourceAsync"); + auto __result = method(_javaPart, source.has_value() ? JVariant_NullType_HybridVideoPlayerSourceSpec::fromCpp(source.value()) : nullptr); return [&]() { auto __promise = Promise::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& /* unit */) { @@ -213,9 +224,9 @@ namespace margelo::nitro::video { return __vector; }(); } - void JHybridVideoPlayerSpec::selectTextTrack(const std::optional& textTrack) { - static const auto method = javaClassStatic()->getMethod /* textTrack */)>("selectTextTrack"); - method(_javaPart, textTrack.has_value() ? JTextTrack::fromCpp(textTrack.value()) : nullptr); + void JHybridVideoPlayerSpec::selectTextTrack(const std::optional>& textTrack) { + static const auto method = javaClassStatic()->getMethod /* textTrack */)>("selectTextTrack"); + method(_javaPart, textTrack.has_value() ? JVariant_NullType_TextTrack::fromCpp(textTrack.value()) : nullptr); } std::shared_ptr> JHybridVideoPlayerSpec::initialize() { static const auto method = javaClassStatic()->getMethod()>("initialize"); 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 292b07fd..da546e87 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { @@ -78,9 +79,9 @@ namespace margelo::nitro::video { public: // Methods - std::shared_ptr> replaceSourceAsync(const std::optional>& source) override; + std::shared_ptr> replaceSourceAsync(const std::optional>>& source) override; std::vector getAvailableTextTracks() override; - void selectTextTrack(const std::optional& textTrack) override; + void selectTextTrack(const std::optional>& textTrack) override; std::shared_ptr> initialize() override; std::shared_ptr> preload() override; void play() override; diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp index e3110548..80b9bcd1 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp @@ -36,6 +36,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoViewViewManagerFactorySpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp index 1e2b59c8..36a18424 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp index afd45488..d89ea699 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp @@ -13,6 +13,8 @@ namespace margelo::nitro::video { class HybridVideoPlayerSpec; } namespace margelo::nitro::video { enum class ResizeMode; } // Forward declaration of `SurfaceType` to properly resolve imports. namespace margelo::nitro::video { enum class SurfaceType; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } #include #include "HybridVideoPlayerSpec.hpp" @@ -22,9 +24,12 @@ namespace margelo::nitro::video { enum class SurfaceType; } #include "JResizeMode.hpp" #include "SurfaceType.hpp" #include "JSurfaceType.hpp" +#include "ListenerSubscription.hpp" +#include "JListenerSubscription.hpp" #include -#include "JFunc_void_bool.hpp" #include "JFunc_void.hpp" +#include +#include "JFunc_void_bool.hpp" namespace margelo::nitro::video { @@ -48,6 +53,12 @@ namespace margelo::nitro::video { method(_javaPart); } + std::string JHybridVideoViewViewManagerSpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties std::optional> JHybridVideoViewViewManagerSpec::getPlayer() { static const auto method = javaClassStatic()->getMethod()>("getPlayer"); @@ -112,120 +123,6 @@ namespace margelo::nitro::video { static const auto method = javaClassStatic()->getMethod /* surfaceType */)>("setSurfaceType"); method(_javaPart, JSurfaceType::fromCpp(surfaceType)); } - std::optional> JHybridVideoViewViewManagerSpec::getOnPictureInPictureChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnPictureInPictureChange_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool isInPictureInPicture) -> void { - return __resultRef->invoke(isInPictureInPicture); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setOnPictureInPictureChange(const std::optional>& onPictureInPictureChange) { - static const auto method = javaClassStatic()->getMethod /* onPictureInPictureChange */)>("setOnPictureInPictureChange_cxx"); - method(_javaPart, onPictureInPictureChange.has_value() ? JFunc_void_bool_cxx::fromCpp(onPictureInPictureChange.value()) : nullptr); - } - std::optional> JHybridVideoViewViewManagerSpec::getOnFullscreenChange() { - static const auto method = javaClassStatic()->getMethod()>("getOnFullscreenChange_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_bool_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef](bool fullscreen) -> void { - return __resultRef->invoke(fullscreen); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setOnFullscreenChange(const std::optional>& onFullscreenChange) { - static const auto method = javaClassStatic()->getMethod /* onFullscreenChange */)>("setOnFullscreenChange_cxx"); - method(_javaPart, onFullscreenChange.has_value() ? JFunc_void_bool_cxx::fromCpp(onFullscreenChange.value()) : nullptr); - } - std::optional> JHybridVideoViewViewManagerSpec::getWillEnterFullscreen() { - static const auto method = javaClassStatic()->getMethod()>("getWillEnterFullscreen_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setWillEnterFullscreen(const std::optional>& willEnterFullscreen) { - static const auto method = javaClassStatic()->getMethod /* willEnterFullscreen */)>("setWillEnterFullscreen_cxx"); - method(_javaPart, willEnterFullscreen.has_value() ? JFunc_void_cxx::fromCpp(willEnterFullscreen.value()) : nullptr); - } - std::optional> JHybridVideoViewViewManagerSpec::getWillExitFullscreen() { - static const auto method = javaClassStatic()->getMethod()>("getWillExitFullscreen_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setWillExitFullscreen(const std::optional>& willExitFullscreen) { - static const auto method = javaClassStatic()->getMethod /* willExitFullscreen */)>("setWillExitFullscreen_cxx"); - method(_javaPart, willExitFullscreen.has_value() ? JFunc_void_cxx::fromCpp(willExitFullscreen.value()) : nullptr); - } - std::optional> JHybridVideoViewViewManagerSpec::getWillEnterPictureInPicture() { - static const auto method = javaClassStatic()->getMethod()>("getWillEnterPictureInPicture_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setWillEnterPictureInPicture(const std::optional>& willEnterPictureInPicture) { - static const auto method = javaClassStatic()->getMethod /* willEnterPictureInPicture */)>("setWillEnterPictureInPicture_cxx"); - method(_javaPart, willEnterPictureInPicture.has_value() ? JFunc_void_cxx::fromCpp(willEnterPictureInPicture.value()) : nullptr); - } - std::optional> JHybridVideoViewViewManagerSpec::getWillExitPictureInPicture() { - static const auto method = javaClassStatic()->getMethod()>("getWillExitPictureInPicture_cxx"); - auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional([&]() -> std::function { - if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { - auto downcast = jni::static_ref_cast(__result); - return downcast->cthis()->getFunction(); - } else { - auto __resultRef = jni::make_global(__result); - return [__resultRef]() -> void { - return __resultRef->invoke(); - }; - } - }()) : std::nullopt; - } - void JHybridVideoViewViewManagerSpec::setWillExitPictureInPicture(const std::optional>& willExitPictureInPicture) { - static const auto method = javaClassStatic()->getMethod /* willExitPictureInPicture */)>("setWillExitPictureInPicture_cxx"); - method(_javaPart, willExitPictureInPicture.has_value() ? JFunc_void_cxx::fromCpp(willExitPictureInPicture.value()) : nullptr); - } // Methods void JHybridVideoViewViewManagerSpec::enterFullscreen() { @@ -249,5 +146,39 @@ namespace margelo::nitro::video { auto __result = method(_javaPart); return static_cast(__result); } + ListenerSubscription JHybridVideoViewViewManagerSpec::addOnPictureInPictureChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnPictureInPictureChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoViewViewManagerSpec::addOnFullscreenChangeListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addOnFullscreenChangeListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoViewViewManagerSpec::addWillEnterFullscreenListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addWillEnterFullscreenListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoViewViewManagerSpec::addWillExitFullscreenListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addWillExitFullscreenListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoViewViewManagerSpec::addWillEnterPictureInPictureListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addWillEnterPictureInPictureListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + ListenerSubscription JHybridVideoViewViewManagerSpec::addWillExitPictureInPictureListener(const std::function& listener) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* listener */)>("addWillExitPictureInPictureListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(listener)); + return __result->toCpp(); + } + void JHybridVideoViewViewManagerSpec::clearAllListeners() { + static const auto method = javaClassStatic()->getMethod("clearAllListeners"); + method(_javaPart); + } } // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp index 220330c9..05c85efb 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp @@ -41,6 +41,7 @@ namespace margelo::nitro::video { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { @@ -63,18 +64,6 @@ namespace margelo::nitro::video { void setKeepScreenAwake(bool keepScreenAwake) override; SurfaceType getSurfaceType() override; void setSurfaceType(SurfaceType surfaceType) override; - std::optional> getOnPictureInPictureChange() override; - void setOnPictureInPictureChange(const std::optional>& onPictureInPictureChange) override; - std::optional> getOnFullscreenChange() override; - void setOnFullscreenChange(const std::optional>& onFullscreenChange) override; - std::optional> getWillEnterFullscreen() override; - void setWillEnterFullscreen(const std::optional>& willEnterFullscreen) override; - std::optional> getWillExitFullscreen() override; - void setWillExitFullscreen(const std::optional>& willExitFullscreen) override; - std::optional> getWillEnterPictureInPicture() override; - void setWillEnterPictureInPicture(const std::optional>& willEnterPictureInPicture) override; - std::optional> getWillExitPictureInPicture() override; - void setWillExitPictureInPicture(const std::optional>& willExitPictureInPicture) override; public: // Methods @@ -83,6 +72,13 @@ namespace margelo::nitro::video { void enterPictureInPicture() override; void exitPictureInPicture() override; bool canEnterPictureInPicture() override; + ListenerSubscription addOnPictureInPictureChangeListener(const std::function& listener) override; + ListenerSubscription addOnFullscreenChangeListener(const std::function& listener) override; + ListenerSubscription addWillEnterFullscreenListener(const std::function& listener) override; + ListenerSubscription addWillExitFullscreenListener(const std::function& listener) override; + ListenerSubscription addWillEnterPictureInPictureListener(const std::function& listener) override; + ListenerSubscription addWillExitPictureInPictureListener(const std::function& listener) override; + void clearAllListeners() override; private: friend HybridBase; diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JListenerSubscription.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JListenerSubscription.hpp new file mode 100644 index 00000000..a0bb5d04 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JListenerSubscription.hpp @@ -0,0 +1,67 @@ +/// +/// JListenerSubscription.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#include +#include "ListenerSubscription.hpp" + +#include "JFunc_void.hpp" +#include +#include + +namespace margelo::nitro::video { + + using namespace facebook; + + /** + * The C++ JNI bridge between the C++ struct "ListenerSubscription" and the the Kotlin data class "ListenerSubscription". + */ + struct JListenerSubscription final: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/ListenerSubscription;"; + + public: + /** + * Convert this Java/Kotlin-based struct to the C++ struct ListenerSubscription by copying all values to C++. + */ + [[maybe_unused]] + [[nodiscard]] + ListenerSubscription toCpp() const { + static const auto clazz = javaClassStatic(); + static const auto fieldRemove = clazz->getField("remove"); + jni::local_ref remove = this->getFieldValue(fieldRemove); + return ListenerSubscription( + [&]() -> std::function { + if (remove->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(remove); + return downcast->cthis()->getFunction(); + } else { + auto removeRef = jni::make_global(remove); + return JNICallable(std::move(removeRef)); + } + }() + ); + } + + public: + /** + * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java. + */ + [[maybe_unused]] + static jni::local_ref fromCpp(const ListenerSubscription& value) { + using JSignature = JListenerSubscription(jni::alias_ref); + static const auto clazz = javaClassStatic(); + static const auto create = clazz->getStaticMethod("fromCpp"); + return create( + clazz, + JFunc_void_cxx::fromCpp(value.remove) + ); + } + }; + +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JNativeDrmParams.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JNativeDrmParams.hpp index 65358b5d..9e42a706 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JNativeDrmParams.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JNativeDrmParams.hpp @@ -13,6 +13,7 @@ #include "JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp" #include "JOnGetLicensePayload.hpp" #include "OnGetLicensePayload.hpp" +#include #include #include #include @@ -73,9 +74,7 @@ namespace margelo::nitro::video { return downcast->cthis()->getFunction(); } else { auto getLicenseRef = jni::make_global(getLicense); - return [getLicenseRef](OnGetLicensePayload payload) -> std::shared_ptr>>> { - return getLicenseRef->invoke(payload); - }; + return JNICallable>>>(OnGetLicensePayload)>(std::move(getLicenseRef)); } }()) : std::nullopt ); diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JNativeVideoConfig.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JNativeVideoConfig.hpp index e35c5565..8e79eefa 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JNativeVideoConfig.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JNativeVideoConfig.hpp @@ -27,6 +27,7 @@ #include "OnGetLicensePayload.hpp" #include "Resolution.hpp" #include "SubtitleType.hpp" +#include #include #include #include @@ -112,7 +113,8 @@ namespace margelo::nitro::video { jni::local_ref> __array = jni::JArrayClass::newArray(__size); for (size_t __i = 0; __i < __size; __i++) { const auto& __element = value.externalSubtitles.value()[__i]; - __array->setElement(__i, *JNativeExternalSubtitle::fromCpp(__element)); + auto __elementJni = JNativeExternalSubtitle::fromCpp(__element); + __array->setElement(__i, *__elementJni); } return __array; }() : nullptr, diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JTimedMetadata.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JTimedMetadata.hpp index 3caa1209..79eb023d 100644 --- a/packages/react-native-video/nitrogen/generated/android/c++/JTimedMetadata.hpp +++ b/packages/react-native-video/nitrogen/generated/android/c++/JTimedMetadata.hpp @@ -66,7 +66,8 @@ namespace margelo::nitro::video { jni::local_ref> __array = jni::JArrayClass::newArray(__size); for (size_t __i = 0; __i < __size; __i++) { const auto& __element = value.metadata[__i]; - __array->setElement(__i, *JTimedMetadataObject::fromCpp(__element)); + auto __elementJni = JTimedMetadataObject::fromCpp(__element); + __array->setElement(__i, *__elementJni); } return __array; }() diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp new file mode 100644 index 00000000..97844d18 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp @@ -0,0 +1,26 @@ +/// +/// JVariant_NullType_HybridVideoPlayerSourceSpec.cpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#include "JVariant_NullType_HybridVideoPlayerSourceSpec.hpp" + +namespace margelo::nitro::video { + /** + * Converts JVariant_NullType_HybridVideoPlayerSourceSpec to std::variant> + */ + std::variant> JVariant_NullType_HybridVideoPlayerSourceSpec::toCpp() const { + if (isInstanceOf(JVariant_NullType_HybridVideoPlayerSourceSpec_impl::First::javaClassStatic())) { + // It's a `nitro::NullType` + auto jniValue = static_cast(this)->getValue(); + return nitro::null; + } else if (isInstanceOf(JVariant_NullType_HybridVideoPlayerSourceSpec_impl::Second::javaClassStatic())) { + // It's a `std::shared_ptr` + auto jniValue = static_cast(this)->getValue(); + return jniValue->cthis()->shared_cast(); + } + throw std::invalid_argument("Variant is unknown Kotlin instance!"); + } +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.hpp new file mode 100644 index 00000000..98b02bd9 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.hpp @@ -0,0 +1,72 @@ +/// +/// JVariant_NullType_HybridVideoPlayerSourceSpec.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#include +#include + +#include +#include +#include "HybridVideoPlayerSourceSpec.hpp" +#include +#include +#include "JHybridVideoPlayerSourceSpec.hpp" + +namespace margelo::nitro::video { + + using namespace facebook; + + /** + * The C++ JNI bridge between the C++ std::variant and the Java class "Variant_NullType_HybridVideoPlayerSourceSpec". + */ + class JVariant_NullType_HybridVideoPlayerSourceSpec: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec;"; + + static jni::local_ref create_0(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); + return method(javaClassStatic(), value); + } + static jni::local_ref create_1(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); + return method(javaClassStatic(), value); + } + + static jni::local_ref fromCpp(const std::variant>& variant) { + switch (variant.index()) { + case 0: return create_0(JNull::null()); + case 1: return create_1(std::dynamic_pointer_cast(std::get<1>(variant))->getJavaPart()); + default: throw std::invalid_argument("Variant holds unknown index! (" + std::to_string(variant.index()) + ")"); + } + } + + [[nodiscard]] std::variant> toCpp() const; + }; + + namespace JVariant_NullType_HybridVideoPlayerSourceSpec_impl { + class First: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec$First;"; + + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); + return getFieldValue(field); + } + }; + + class Second: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec$Second;"; + + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); + return getFieldValue(field); + } + }; + } // namespace JVariant_NullType_HybridVideoPlayerSourceSpec_impl +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp new file mode 100644 index 00000000..48738fb4 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp @@ -0,0 +1,26 @@ +/// +/// JVariant_NullType_TextTrack.cpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#include "JVariant_NullType_TextTrack.hpp" + +namespace margelo::nitro::video { + /** + * Converts JVariant_NullType_TextTrack to std::variant + */ + std::variant JVariant_NullType_TextTrack::toCpp() const { + if (isInstanceOf(JVariant_NullType_TextTrack_impl::First::javaClassStatic())) { + // It's a `nitro::NullType` + auto jniValue = static_cast(this)->getValue(); + return nitro::null; + } else if (isInstanceOf(JVariant_NullType_TextTrack_impl::Second::javaClassStatic())) { + // It's a `TextTrack` + auto jniValue = static_cast(this)->getValue(); + return jniValue->toCpp(); + } + throw std::invalid_argument("Variant is unknown Kotlin instance!"); + } +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.hpp b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.hpp new file mode 100644 index 00000000..52596e75 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.hpp @@ -0,0 +1,73 @@ +/// +/// JVariant_NullType_TextTrack.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#include +#include + +#include +#include "TextTrack.hpp" +#include +#include +#include "JTextTrack.hpp" +#include +#include + +namespace margelo::nitro::video { + + using namespace facebook; + + /** + * The C++ JNI bridge between the C++ std::variant and the Java class "Variant_NullType_TextTrack". + */ + class JVariant_NullType_TextTrack: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_TextTrack;"; + + static jni::local_ref create_0(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); + return method(javaClassStatic(), value); + } + static jni::local_ref create_1(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); + return method(javaClassStatic(), value); + } + + static jni::local_ref fromCpp(const std::variant& variant) { + switch (variant.index()) { + case 0: return create_0(JNull::null()); + case 1: return create_1(JTextTrack::fromCpp(std::get<1>(variant))); + default: throw std::invalid_argument("Variant holds unknown index! (" + std::to_string(variant.index()) + ")"); + } + } + + [[nodiscard]] std::variant toCpp() const; + }; + + namespace JVariant_NullType_TextTrack_impl { + class First: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_TextTrack$First;"; + + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); + return getFieldValue(field); + } + }; + + class Second: public jni::JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/video/Variant_NullType_TextTrack$Second;"; + + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); + return getFieldValue(field); + } + }; + } // namespace JVariant_NullType_TextTrack_impl +} // namespace margelo::nitro::video diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BandwidthData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BandwidthData.kt index 26660b92..deeba4e4 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BandwidthData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BandwidthData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -28,6 +27,8 @@ data class BandwidthData( @Keep val height: Double? ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BufferConfig.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BufferConfig.kt index dfc2cf31..7799c4b0 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BufferConfig.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/BufferConfig.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -52,6 +51,8 @@ data class BufferConfig( @Keep val preferredMaximumResolutionForExpensiveNetworks: Resolution? ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/CustomVideoMetadata.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/CustomVideoMetadata.kt index 3d23b269..74b2aace 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/CustomVideoMetadata.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/CustomVideoMetadata.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -34,6 +33,8 @@ data class CustomVideoMetadata( @Keep val imageUri: String? ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt index e0cf724b..52929bfc 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt @@ -10,9 +10,8 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative - +import com.margelo.nitro.core.Promise /** * Represents the JavaScript callback `(payload: struct) => std::shared_ptr>>>`. diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void.kt index 24177f63..1af9752f 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_BandwidthData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_BandwidthData.kt index 546d3218..fd01826e 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_BandwidthData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_BandwidthData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_TimedMetadata.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_TimedMetadata.kt index ba18b023..be92717b 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_TimedMetadata.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_TimedMetadata.kt @@ -10,12 +10,11 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative /** - * Represents the JavaScript callback `(metadata: struct) => void`. + * Represents the JavaScript callback `(data: struct) => void`. * This can be either implemented in C++ (in which case it might be a callback coming from JS), * or in Kotlin/Java (in which case it is a native callback). */ @@ -29,11 +28,11 @@ fun interface Func_void_TimedMetadata: (TimedMetadata) -> Unit { */ @DoNotStrip @Keep - override fun invoke(metadata: TimedMetadata): Unit + override fun invoke(data: TimedMetadata): Unit } /** - * Represents the JavaScript callback `(metadata: struct) => void`. + * Represents the JavaScript callback `(data: struct) => void`. * This is implemented in C++, via a `std::function<...>`. * The callback might be coming from JS. */ @@ -57,15 +56,15 @@ class Func_void_TimedMetadata_cxx: Func_void_TimedMetadata { @DoNotStrip @Keep - override fun invoke(metadata: TimedMetadata): Unit - = invoke_cxx(metadata) + override fun invoke(data: TimedMetadata): Unit + = invoke_cxx(data) @FastNative - private external fun invoke_cxx(metadata: TimedMetadata): Unit + private external fun invoke_cxx(data: TimedMetadata): Unit } /** - * Represents the JavaScript callback `(metadata: struct) => void`. + * Represents the JavaScript callback `(data: struct) => void`. * This is implemented in Java/Kotlin, via a `(TimedMetadata) -> Unit`. * The callback is always coming from native. */ @@ -75,7 +74,7 @@ class Func_void_TimedMetadata_cxx: Func_void_TimedMetadata { class Func_void_TimedMetadata_java(private val function: (TimedMetadata) -> Unit): Func_void_TimedMetadata { @DoNotStrip @Keep - override fun invoke(metadata: TimedMetadata): Unit { - return this.function(metadata) + override fun invoke(data: TimedMetadata): Unit { + return this.function(data) } } diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_VideoPlayerStatus.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_VideoPlayerStatus.kt index b6a3640e..eb51f870 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_VideoPlayerStatus.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_VideoPlayerStatus.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_bool.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_bool.kt index 941330d2..8705c4f3 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_bool.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_bool.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_double.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_double.kt index 743f10bc..a4df1404 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_double.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_double.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadData.kt index d3e74dc3..5a118089 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadStartData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadStartData.kt index 81b37930..6e0bc943 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadStartData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onLoadStartData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onPlaybackStateChangeData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onPlaybackStateChangeData.kt index 50a948d2..17fd7acb 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onPlaybackStateChangeData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onPlaybackStateChangeData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onProgressData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onProgressData.kt index 8248c5ad..483a1197 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onProgressData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onProgressData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onVolumeChangeData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onVolumeChangeData.kt index 62342d99..ef01f213 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onVolumeChangeData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_onVolumeChangeData.kt @@ -10,7 +10,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_TextTrack_.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt similarity index 64% rename from packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_TextTrack_.kt rename to packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt index 02c0851e..8507472c 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_TextTrack_.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt @@ -1,5 +1,5 @@ /// -/// Func_void_std__optional_TextTrack_.kt +/// Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro /// Copyright © 2025 Marc Rousavy @ Margelo @@ -10,9 +10,8 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative - +import com.margelo.nitro.core.NullType /** * Represents the JavaScript callback `(track: optional) => void`. @@ -22,14 +21,14 @@ import dalvik.annotation.optimization.FastNative @DoNotStrip @Keep @Suppress("ClassName", "RedundantUnitReturnType") -fun interface Func_void_std__optional_TextTrack_: (TextTrack?) -> Unit { +fun interface Func_void_std__optional_std__variant_nitro__NullType__TextTrack__: (Variant_NullType_TextTrack?) -> Unit { /** * Call the given JS callback. * @throws Throwable if the JS function itself throws an error, or if the JS function/runtime has already been deleted. */ @DoNotStrip @Keep - override fun invoke(track: TextTrack?): Unit + override fun invoke(track: Variant_NullType_TextTrack?): Unit } /** @@ -44,7 +43,7 @@ fun interface Func_void_std__optional_TextTrack_: (TextTrack?) -> Unit { "RedundantSuppression", "RedundantUnitReturnType", "FunctionName", "ConvertSecondaryConstructorToPrimary", "ClassName", "LocalVariableName", ) -class Func_void_std__optional_TextTrack__cxx: Func_void_std__optional_TextTrack_ { +class Func_void_std__optional_std__variant_nitro__NullType__TextTrack___cxx: Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ { @DoNotStrip @Keep private val mHybridData: HybridData @@ -57,25 +56,25 @@ class Func_void_std__optional_TextTrack__cxx: Func_void_std__optional_TextTrack_ @DoNotStrip @Keep - override fun invoke(track: TextTrack?): Unit + override fun invoke(track: Variant_NullType_TextTrack?): Unit = invoke_cxx(track) @FastNative - private external fun invoke_cxx(track: TextTrack?): Unit + private external fun invoke_cxx(track: Variant_NullType_TextTrack?): Unit } /** * Represents the JavaScript callback `(track: optional) => void`. - * This is implemented in Java/Kotlin, via a `(TextTrack?) -> Unit`. + * This is implemented in Java/Kotlin, via a `(Variant_NullType_TextTrack?) -> Unit`. * The callback is always coming from native. */ @DoNotStrip @Keep @Suppress("ClassName", "RedundantUnitReturnType", "unused") -class Func_void_std__optional_TextTrack__java(private val function: (TextTrack?) -> Unit): Func_void_std__optional_TextTrack_ { +class Func_void_std__optional_std__variant_nitro__NullType__TextTrack___java(private val function: (Variant_NullType_TextTrack?) -> Unit): Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ { @DoNotStrip @Keep - override fun invoke(track: TextTrack?): Unit { + override fun invoke(track: Variant_NullType_TextTrack?): Unit { return this.function(track) } } diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__vector_std__string_.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__vector_std__string_.kt index 560c4ddc..4ac1ef31 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__vector_std__string_.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Func_void_std__vector_std__string_.kt @@ -10,12 +10,11 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* import dalvik.annotation.optimization.FastNative /** - * Represents the JavaScript callback `(texts: array) => void`. + * Represents the JavaScript callback `(data: array) => void`. * This can be either implemented in C++ (in which case it might be a callback coming from JS), * or in Kotlin/Java (in which case it is a native callback). */ @@ -29,11 +28,11 @@ fun interface Func_void_std__vector_std__string_: (Array) -> Unit { */ @DoNotStrip @Keep - override fun invoke(texts: Array): Unit + override fun invoke(data: Array): Unit } /** - * Represents the JavaScript callback `(texts: array) => void`. + * Represents the JavaScript callback `(data: array) => void`. * This is implemented in C++, via a `std::function<...>`. * The callback might be coming from JS. */ @@ -57,15 +56,15 @@ class Func_void_std__vector_std__string__cxx: Func_void_std__vector_std__string_ @DoNotStrip @Keep - override fun invoke(texts: Array): Unit - = invoke_cxx(texts) + override fun invoke(data: Array): Unit + = invoke_cxx(data) @FastNative - private external fun invoke_cxx(texts: Array): Unit + private external fun invoke_cxx(data: Array): Unit } /** - * Represents the JavaScript callback `(texts: array) => void`. + * Represents the JavaScript callback `(data: array) => void`. * This is implemented in Java/Kotlin, via a `(Array) -> Unit`. * The callback is always coming from native. */ @@ -75,7 +74,7 @@ class Func_void_std__vector_std__string__cxx: Func_void_std__vector_std__string_ class Func_void_std__vector_std__string__java(private val function: (Array) -> Unit): Func_void_std__vector_std__string_ { @DoNotStrip @Keep - override fun invoke(texts: Array): Unit { - return this.function(texts) + override fun invoke(data: Array): Unit { + return this.function(data) } } diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerEventEmitterSpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerEventEmitterSpec.kt index 398a6430..42bd34c0 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerEventEmitterSpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerEventEmitterSpec.kt @@ -10,7 +10,8 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.NullType +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoPlayerEventEmitter HybridObject. @@ -36,275 +37,189 @@ abstract class HybridVideoPlayerEventEmitterSpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoPlayerEventEmitter]" + } + // Properties - abstract var onAudioBecomingNoisy: () -> Unit - private var onAudioBecomingNoisy_cxx: Func_void - @Keep - @DoNotStrip - get() { - return Func_void_java(onAudioBecomingNoisy) - } - @Keep - @DoNotStrip - set(value) { - onAudioBecomingNoisy = value - } - - abstract var onAudioFocusChange: (hasAudioFocus: Boolean) -> Unit - - private var onAudioFocusChange_cxx: Func_void_bool - @Keep - @DoNotStrip - get() { - return Func_void_bool_java(onAudioFocusChange) - } - @Keep - @DoNotStrip - set(value) { - onAudioFocusChange = value - } - - abstract var onBandwidthUpdate: (data: BandwidthData) -> Unit - - private var onBandwidthUpdate_cxx: Func_void_BandwidthData - @Keep - @DoNotStrip - get() { - return Func_void_BandwidthData_java(onBandwidthUpdate) - } - @Keep - @DoNotStrip - set(value) { - onBandwidthUpdate = value - } - - abstract var onBuffer: (buffering: Boolean) -> Unit - - private var onBuffer_cxx: Func_void_bool - @Keep - @DoNotStrip - get() { - return Func_void_bool_java(onBuffer) - } - @Keep - @DoNotStrip - set(value) { - onBuffer = value - } - - abstract var onControlsVisibleChange: (visible: Boolean) -> Unit - - private var onControlsVisibleChange_cxx: Func_void_bool - @Keep - @DoNotStrip - get() { - return Func_void_bool_java(onControlsVisibleChange) - } - @Keep - @DoNotStrip - set(value) { - onControlsVisibleChange = value - } - - abstract var onEnd: () -> Unit - - private var onEnd_cxx: Func_void - @Keep - @DoNotStrip - get() { - return Func_void_java(onEnd) - } - @Keep - @DoNotStrip - set(value) { - onEnd = value - } - - abstract var onExternalPlaybackChange: (externalPlaybackActive: Boolean) -> Unit - - private var onExternalPlaybackChange_cxx: Func_void_bool - @Keep - @DoNotStrip - get() { - return Func_void_bool_java(onExternalPlaybackChange) - } - @Keep - @DoNotStrip - set(value) { - onExternalPlaybackChange = value - } - - abstract var onLoad: (data: onLoadData) -> Unit - - private var onLoad_cxx: Func_void_onLoadData - @Keep - @DoNotStrip - get() { - return Func_void_onLoadData_java(onLoad) - } - @Keep - @DoNotStrip - set(value) { - onLoad = value - } - - abstract var onLoadStart: (data: onLoadStartData) -> Unit - - private var onLoadStart_cxx: Func_void_onLoadStartData - @Keep - @DoNotStrip - get() { - return Func_void_onLoadStartData_java(onLoadStart) - } - @Keep - @DoNotStrip - set(value) { - onLoadStart = value - } - - abstract var onPlaybackStateChange: (data: onPlaybackStateChangeData) -> Unit - - private var onPlaybackStateChange_cxx: Func_void_onPlaybackStateChangeData - @Keep - @DoNotStrip - get() { - return Func_void_onPlaybackStateChangeData_java(onPlaybackStateChange) - } - @Keep - @DoNotStrip - set(value) { - onPlaybackStateChange = value - } - - abstract var onPlaybackRateChange: (rate: Double) -> Unit - - private var onPlaybackRateChange_cxx: Func_void_double - @Keep - @DoNotStrip - get() { - return Func_void_double_java(onPlaybackRateChange) - } - @Keep - @DoNotStrip - set(value) { - onPlaybackRateChange = value - } - - abstract var onProgress: (data: onProgressData) -> Unit - - private var onProgress_cxx: Func_void_onProgressData - @Keep - @DoNotStrip - get() { - return Func_void_onProgressData_java(onProgress) - } - @Keep - @DoNotStrip - set(value) { - onProgress = value - } - - abstract var onReadyToDisplay: () -> Unit - - private var onReadyToDisplay_cxx: Func_void - @Keep - @DoNotStrip - get() { - return Func_void_java(onReadyToDisplay) - } - @Keep - @DoNotStrip - set(value) { - onReadyToDisplay = value - } - - abstract var onSeek: (seekTime: Double) -> Unit - - private var onSeek_cxx: Func_void_double - @Keep - @DoNotStrip - get() { - return Func_void_double_java(onSeek) - } - @Keep - @DoNotStrip - set(value) { - onSeek = value - } - - abstract var onTimedMetadata: (metadata: TimedMetadata) -> Unit - - private var onTimedMetadata_cxx: Func_void_TimedMetadata - @Keep - @DoNotStrip - get() { - return Func_void_TimedMetadata_java(onTimedMetadata) - } - @Keep - @DoNotStrip - set(value) { - onTimedMetadata = value - } - - abstract var onTextTrackDataChanged: (texts: Array) -> Unit - - private var onTextTrackDataChanged_cxx: Func_void_std__vector_std__string_ - @Keep - @DoNotStrip - get() { - return Func_void_std__vector_std__string__java(onTextTrackDataChanged) - } - @Keep - @DoNotStrip - set(value) { - onTextTrackDataChanged = value - } - - abstract var onTrackChange: (track: TextTrack?) -> Unit - - private var onTrackChange_cxx: Func_void_std__optional_TextTrack_ - @Keep - @DoNotStrip - get() { - return Func_void_std__optional_TextTrack__java(onTrackChange) - } - @Keep - @DoNotStrip - set(value) { - onTrackChange = value - } - - abstract var onVolumeChange: (data: onVolumeChangeData) -> Unit - - private var onVolumeChange_cxx: Func_void_onVolumeChangeData - @Keep - @DoNotStrip - get() { - return Func_void_onVolumeChangeData_java(onVolumeChange) - } - @Keep - @DoNotStrip - set(value) { - onVolumeChange = value - } - - abstract var onStatusChange: (status: VideoPlayerStatus) -> Unit - - private var onStatusChange_cxx: Func_void_VideoPlayerStatus - @Keep - @DoNotStrip - get() { - return Func_void_VideoPlayerStatus_java(onStatusChange) - } - @Keep - @DoNotStrip - set(value) { - onStatusChange = value - } // Methods + abstract fun addOnAudioBecomingNoisyListener(listener: () -> Unit): ListenerSubscription + @DoNotStrip + @Keep + private fun addOnAudioBecomingNoisyListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addOnAudioBecomingNoisyListener(listener) + return __result + } + + abstract fun addOnAudioFocusChangeListener(listener: (hasAudioFocus: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnAudioFocusChangeListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnAudioFocusChangeListener(listener) + return __result + } + + abstract fun addOnBandwidthUpdateListener(listener: (data: BandwidthData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnBandwidthUpdateListener_cxx(listener: Func_void_BandwidthData): ListenerSubscription { + val __result = addOnBandwidthUpdateListener(listener) + return __result + } + + abstract fun addOnBufferListener(listener: (buffering: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnBufferListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnBufferListener(listener) + return __result + } + + abstract fun addOnControlsVisibleChangeListener(listener: (visible: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnControlsVisibleChangeListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnControlsVisibleChangeListener(listener) + return __result + } + + abstract fun addOnEndListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnEndListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addOnEndListener(listener) + return __result + } + + abstract fun addOnExternalPlaybackChangeListener(listener: (externalPlaybackActive: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnExternalPlaybackChangeListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnExternalPlaybackChangeListener(listener) + return __result + } + + abstract fun addOnLoadListener(listener: (data: onLoadData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnLoadListener_cxx(listener: Func_void_onLoadData): ListenerSubscription { + val __result = addOnLoadListener(listener) + return __result + } + + abstract fun addOnLoadStartListener(listener: (data: onLoadStartData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnLoadStartListener_cxx(listener: Func_void_onLoadStartData): ListenerSubscription { + val __result = addOnLoadStartListener(listener) + return __result + } + + abstract fun addOnPlaybackStateChangeListener(listener: (data: onPlaybackStateChangeData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnPlaybackStateChangeListener_cxx(listener: Func_void_onPlaybackStateChangeData): ListenerSubscription { + val __result = addOnPlaybackStateChangeListener(listener) + return __result + } + + abstract fun addOnPlaybackRateChangeListener(listener: (rate: Double) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnPlaybackRateChangeListener_cxx(listener: Func_void_double): ListenerSubscription { + val __result = addOnPlaybackRateChangeListener(listener) + return __result + } + + abstract fun addOnProgressListener(listener: (data: onProgressData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnProgressListener_cxx(listener: Func_void_onProgressData): ListenerSubscription { + val __result = addOnProgressListener(listener) + return __result + } + + abstract fun addOnReadyToDisplayListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnReadyToDisplayListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addOnReadyToDisplayListener(listener) + return __result + } + + abstract fun addOnSeekListener(listener: (position: Double) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnSeekListener_cxx(listener: Func_void_double): ListenerSubscription { + val __result = addOnSeekListener(listener) + return __result + } + + abstract fun addOnStatusChangeListener(listener: (status: VideoPlayerStatus) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnStatusChangeListener_cxx(listener: Func_void_VideoPlayerStatus): ListenerSubscription { + val __result = addOnStatusChangeListener(listener) + return __result + } + + abstract fun addOnTimedMetadataListener(listener: (data: TimedMetadata) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnTimedMetadataListener_cxx(listener: Func_void_TimedMetadata): ListenerSubscription { + val __result = addOnTimedMetadataListener(listener) + return __result + } + + abstract fun addOnTextTrackDataChangedListener(listener: (data: Array) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnTextTrackDataChangedListener_cxx(listener: Func_void_std__vector_std__string_): ListenerSubscription { + val __result = addOnTextTrackDataChangedListener(listener) + return __result + } + + abstract fun addOnTrackChangeListener(listener: (track: Variant_NullType_TextTrack?) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnTrackChangeListener_cxx(listener: Func_void_std__optional_std__variant_nitro__NullType__TextTrack__): ListenerSubscription { + val __result = addOnTrackChangeListener(listener) + return __result + } + + abstract fun addOnVolumeChangeListener(listener: (data: onVolumeChangeData) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnVolumeChangeListener_cxx(listener: Func_void_onVolumeChangeData): ListenerSubscription { + val __result = addOnVolumeChangeListener(listener) + return __result + } + + @DoNotStrip + @Keep + abstract fun clearAllListeners(): Unit private external fun initHybrid(): HybridData diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerFactorySpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerFactorySpec.kt index bffdadf5..b2b9bc07 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerFactorySpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerFactorySpec.kt @@ -10,7 +10,7 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoPlayerFactory HybridObject. @@ -36,6 +36,11 @@ abstract class HybridVideoPlayerFactorySpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoPlayerFactory]" + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceFactorySpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceFactorySpec.kt index 8f02975c..a54fd6c9 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceFactorySpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceFactorySpec.kt @@ -10,7 +10,7 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoPlayerSourceFactory HybridObject. @@ -36,6 +36,11 @@ abstract class HybridVideoPlayerSourceFactorySpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoPlayerSourceFactory]" + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceSpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceSpec.kt index 1f30aaca..5e8161c9 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceSpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoPlayerSourceSpec.kt @@ -10,7 +10,8 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.Promise +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoPlayerSource HybridObject. @@ -36,6 +37,11 @@ abstract class HybridVideoPlayerSourceSpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoPlayerSource]" + } + // Properties @get:DoNotStrip @get:Keep 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 9e97bff4..161ea527 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 @@ -10,7 +10,9 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.Promise +import com.margelo.nitro.core.NullType +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoPlayer HybridObject. @@ -36,6 +38,11 @@ abstract class HybridVideoPlayerSpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoPlayer]" + } + // Properties @get:DoNotStrip @get:Keep @@ -124,7 +131,7 @@ abstract class HybridVideoPlayerSpec: HybridObject() { // Methods @DoNotStrip @Keep - abstract fun replaceSourceAsync(source: HybridVideoPlayerSourceSpec?): Promise + abstract fun replaceSourceAsync(source: Variant_NullType_HybridVideoPlayerSourceSpec?): Promise @DoNotStrip @Keep @@ -132,7 +139,7 @@ abstract class HybridVideoPlayerSpec: HybridObject() { @DoNotStrip @Keep - abstract fun selectTextTrack(textTrack: TextTrack?): Unit + abstract fun selectTextTrack(textTrack: Variant_NullType_TextTrack?): Unit @DoNotStrip @Keep diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerFactorySpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerFactorySpec.kt index 68211783..f7969dcf 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerFactorySpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerFactorySpec.kt @@ -10,7 +10,7 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoViewViewManagerFactory HybridObject. @@ -36,6 +36,11 @@ abstract class HybridVideoViewViewManagerFactorySpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoViewViewManagerFactory]" + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerSpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerSpec.kt index 4e30043b..67e74233 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerSpec.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/HybridVideoViewViewManagerSpec.kt @@ -10,7 +10,7 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the VideoViewViewManager HybridObject. @@ -36,6 +36,11 @@ abstract class HybridVideoViewViewManagerSpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject VideoViewViewManager]" + } + // Properties @get:DoNotStrip @get:Keep @@ -78,90 +83,6 @@ abstract class HybridVideoViewViewManagerSpec: HybridObject() { @set:DoNotStrip @set:Keep abstract var surfaceType: SurfaceType - - abstract var onPictureInPictureChange: ((isInPictureInPicture: Boolean) -> Unit)? - - private var onPictureInPictureChange_cxx: Func_void_bool? - @Keep - @DoNotStrip - get() { - return onPictureInPictureChange?.let { Func_void_bool_java(it) } - } - @Keep - @DoNotStrip - set(value) { - onPictureInPictureChange = value?.let { it } - } - - abstract var onFullscreenChange: ((fullscreen: Boolean) -> Unit)? - - private var onFullscreenChange_cxx: Func_void_bool? - @Keep - @DoNotStrip - get() { - return onFullscreenChange?.let { Func_void_bool_java(it) } - } - @Keep - @DoNotStrip - set(value) { - onFullscreenChange = value?.let { it } - } - - abstract var willEnterFullscreen: (() -> Unit)? - - private var willEnterFullscreen_cxx: Func_void? - @Keep - @DoNotStrip - get() { - return willEnterFullscreen?.let { Func_void_java(it) } - } - @Keep - @DoNotStrip - set(value) { - willEnterFullscreen = value?.let { it } - } - - abstract var willExitFullscreen: (() -> Unit)? - - private var willExitFullscreen_cxx: Func_void? - @Keep - @DoNotStrip - get() { - return willExitFullscreen?.let { Func_void_java(it) } - } - @Keep - @DoNotStrip - set(value) { - willExitFullscreen = value?.let { it } - } - - abstract var willEnterPictureInPicture: (() -> Unit)? - - private var willEnterPictureInPicture_cxx: Func_void? - @Keep - @DoNotStrip - get() { - return willEnterPictureInPicture?.let { Func_void_java(it) } - } - @Keep - @DoNotStrip - set(value) { - willEnterPictureInPicture = value?.let { it } - } - - abstract var willExitPictureInPicture: (() -> Unit)? - - private var willExitPictureInPicture_cxx: Func_void? - @Keep - @DoNotStrip - get() { - return willExitPictureInPicture?.let { Func_void_java(it) } - } - @Keep - @DoNotStrip - set(value) { - willExitPictureInPicture = value?.let { it } - } // Methods @DoNotStrip @@ -183,6 +104,64 @@ abstract class HybridVideoViewViewManagerSpec: HybridObject() { @DoNotStrip @Keep abstract fun canEnterPictureInPicture(): Boolean + + abstract fun addOnPictureInPictureChangeListener(listener: (isInPictureInPicture: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnPictureInPictureChangeListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnPictureInPictureChangeListener(listener) + return __result + } + + abstract fun addOnFullscreenChangeListener(listener: (fullscreen: Boolean) -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addOnFullscreenChangeListener_cxx(listener: Func_void_bool): ListenerSubscription { + val __result = addOnFullscreenChangeListener(listener) + return __result + } + + abstract fun addWillEnterFullscreenListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addWillEnterFullscreenListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addWillEnterFullscreenListener(listener) + return __result + } + + abstract fun addWillExitFullscreenListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addWillExitFullscreenListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addWillExitFullscreenListener(listener) + return __result + } + + abstract fun addWillEnterPictureInPictureListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addWillEnterPictureInPictureListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addWillEnterPictureInPictureListener(listener) + return __result + } + + abstract fun addWillExitPictureInPictureListener(listener: () -> Unit): ListenerSubscription + + @DoNotStrip + @Keep + private fun addWillExitPictureInPictureListener_cxx(listener: Func_void): ListenerSubscription { + val __result = addWillExitPictureInPictureListener(listener) + return __result + } + + @DoNotStrip + @Keep + abstract fun clearAllListeners(): Unit private external fun initHybrid(): HybridData diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/ListenerSubscription.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/ListenerSubscription.kt new file mode 100644 index 00000000..58accb9b --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/ListenerSubscription.kt @@ -0,0 +1,42 @@ +/// +/// ListenerSubscription.kt +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +package com.margelo.nitro.video + +import androidx.annotation.Keep +import com.facebook.proguard.annotations.DoNotStrip + + +/** + * Represents the JavaScript object/struct "ListenerSubscription". + */ +@DoNotStrip +@Keep +data class ListenerSubscription( + @DoNotStrip + @Keep + val remove: Func_void +) { + /** + * Create a new instance of ListenerSubscription from Kotlin + */ + constructor(remove: () -> Unit): + this(Func_void_java(remove)) + + private companion object { + /** + * Constructor called from C++ + */ + @DoNotStrip + @Keep + @Suppress("unused") + @JvmStatic + private fun fromCpp(remove: Func_void): ListenerSubscription { + return ListenerSubscription(remove) + } + } +} diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/LivePlaybackParams.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/LivePlaybackParams.kt index 29899f90..f6677a60 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/LivePlaybackParams.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/LivePlaybackParams.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -34,6 +33,8 @@ data class LivePlaybackParams( @Keep val targetOffsetMs: Double? ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeDrmParams.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeDrmParams.kt index b9614317..1e87829a 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeDrmParams.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeDrmParams.kt @@ -9,8 +9,7 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* - +import com.margelo.nitro.core.Promise /** * Represents the JavaScript object/struct "NativeDrmParams". @@ -38,8 +37,14 @@ data class NativeDrmParams( val multiSession: Boolean?, @DoNotStrip @Keep - val getLicense: ((payload: OnGetLicensePayload) -> Promise>)? + val getLicense: Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload? ) { + /** + * Create a new instance of NativeDrmParams from Kotlin + */ + constructor(type: String?, licenseUrl: String?, certificateUrl: String?, contentId: String?, licenseHeaders: Map?, multiSession: Boolean?, getLicense: ((payload: OnGetLicensePayload) -> Promise>)?): + this(type, licenseUrl, certificateUrl, contentId, licenseHeaders, multiSession, getLicense?.let { Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_java(it) }) + private companion object { /** * Constructor called from C++ @@ -49,7 +54,7 @@ data class NativeDrmParams( @Suppress("unused") @JvmStatic private fun fromCpp(type: String?, licenseUrl: String?, certificateUrl: String?, contentId: String?, licenseHeaders: Map?, multiSession: Boolean?, getLicense: Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload?): NativeDrmParams { - return NativeDrmParams(type, licenseUrl, certificateUrl, contentId, licenseHeaders, multiSession, getLicense?.let { it }) + return NativeDrmParams(type, licenseUrl, certificateUrl, contentId, licenseHeaders, multiSession, getLicense) } } } diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeExternalSubtitle.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeExternalSubtitle.kt index 2ca92cae..59c7b5dc 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeExternalSubtitle.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeExternalSubtitle.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -31,6 +30,8 @@ data class NativeExternalSubtitle( @Keep val language: String ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeVideoConfig.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeVideoConfig.kt index 3c5d8f8c..9eebb826 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeVideoConfig.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/NativeVideoConfig.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -40,6 +39,8 @@ data class NativeVideoConfig( @Keep val initializeOnCreation: Boolean? ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/OnGetLicensePayload.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/OnGetLicensePayload.kt index cafe1692..f66fd9e1 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/OnGetLicensePayload.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/OnGetLicensePayload.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -31,6 +30,8 @@ data class OnGetLicensePayload( @Keep val spc: String ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Resolution.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Resolution.kt index 802dc4eb..c483d784 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Resolution.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Resolution.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class Resolution( @Keep val height: Double ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TextTrack.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TextTrack.kt index f11a7453..2e2aceb3 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TextTrack.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TextTrack.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -31,6 +30,8 @@ data class TextTrack( @Keep val selected: Boolean ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadata.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadata.kt index bc4a6327..101bf406 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadata.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadata.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -22,6 +21,8 @@ data class TimedMetadata( @Keep val metadata: Array ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadataObject.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadataObject.kt index c2f9adb5..f289fe35 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadataObject.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/TimedMetadataObject.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class TimedMetadataObject( @Keep val identifier: String ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec.kt new file mode 100644 index 00000000..96494fc2 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_HybridVideoPlayerSourceSpec.kt @@ -0,0 +1,59 @@ +/// +/// Variant_NullType_HybridVideoPlayerSourceSpec.kt +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +package com.margelo.nitro.video + +import com.facebook.proguard.annotations.DoNotStrip +import com.margelo.nitro.core.NullType + +/** + * Represents the TypeScript variant "NullType | HybridVideoPlayerSourceSpec". + */ +@Suppress("ClassName") +@DoNotStrip +sealed class Variant_NullType_HybridVideoPlayerSourceSpec { + @DoNotStrip + data class First(@DoNotStrip val value: NullType): Variant_NullType_HybridVideoPlayerSourceSpec() + @DoNotStrip + data class Second(@DoNotStrip val value: HybridVideoPlayerSourceSpec): Variant_NullType_HybridVideoPlayerSourceSpec() + + @Deprecated("getAs() is not type-safe. Use fold/asFirstOrNull/asSecondOrNull instead.", level = DeprecationLevel.ERROR) + inline fun getAs(): T? = when (this) { + is First -> value as? T + is Second -> value as? T + } + + val isFirst: Boolean + get() = this is First + val isSecond: Boolean + get() = this is Second + + fun asFirstOrNull(): NullType? { + val value = (this as? First)?.value ?: return null + return value + } + fun asSecondOrNull(): HybridVideoPlayerSourceSpec? { + val value = (this as? Second)?.value ?: return null + return value + } + + inline fun match(first: (NullType) -> R, second: (HybridVideoPlayerSourceSpec) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + } + } + + companion object { + @JvmStatic + @DoNotStrip + fun create(value: NullType): Variant_NullType_HybridVideoPlayerSourceSpec = First(value) + @JvmStatic + @DoNotStrip + fun create(value: HybridVideoPlayerSourceSpec): Variant_NullType_HybridVideoPlayerSourceSpec = Second(value) + } +} diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_TextTrack.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_TextTrack.kt new file mode 100644 index 00000000..6dee41d3 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/Variant_NullType_TextTrack.kt @@ -0,0 +1,59 @@ +/// +/// Variant_NullType_TextTrack.kt +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +package com.margelo.nitro.video + +import com.facebook.proguard.annotations.DoNotStrip +import com.margelo.nitro.core.NullType + +/** + * Represents the TypeScript variant "NullType | TextTrack". + */ +@Suppress("ClassName") +@DoNotStrip +sealed class Variant_NullType_TextTrack { + @DoNotStrip + data class First(@DoNotStrip val value: NullType): Variant_NullType_TextTrack() + @DoNotStrip + data class Second(@DoNotStrip val value: TextTrack): Variant_NullType_TextTrack() + + @Deprecated("getAs() is not type-safe. Use fold/asFirstOrNull/asSecondOrNull instead.", level = DeprecationLevel.ERROR) + inline fun getAs(): T? = when (this) { + is First -> value as? T + is Second -> value as? T + } + + val isFirst: Boolean + get() = this is First + val isSecond: Boolean + get() = this is Second + + fun asFirstOrNull(): NullType? { + val value = (this as? First)?.value ?: return null + return value + } + fun asSecondOrNull(): TextTrack? { + val value = (this as? Second)?.value ?: return null + return value + } + + inline fun match(first: (NullType) -> R, second: (TextTrack) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + } + } + + companion object { + @JvmStatic + @DoNotStrip + fun create(value: NullType): Variant_NullType_TextTrack = First(value) + @JvmStatic + @DoNotStrip + fun create(value: TextTrack): Variant_NullType_TextTrack = Second(value) + } +} diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/VideoInformation.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/VideoInformation.kt index 1ca7a637..5674f91c 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/VideoInformation.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/VideoInformation.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -43,6 +42,8 @@ data class VideoInformation( @Keep val orientation: VideoOrientation ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadData.kt index 1af73c28..f1117b69 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -34,6 +33,8 @@ data class onLoadData( @Keep val orientation: VideoOrientation ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadStartData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadStartData.kt index fca4ec1a..8e4664ea 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadStartData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onLoadStartData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class onLoadStartData( @Keep val source: HybridVideoPlayerSourceSpec ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onPlaybackStateChangeData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onPlaybackStateChangeData.kt index f8c25041..7f079867 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onPlaybackStateChangeData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onPlaybackStateChangeData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class onPlaybackStateChangeData( @Keep val isBuffering: Boolean ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onProgressData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onProgressData.kt index c1266d0a..b069761d 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onProgressData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onProgressData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class onProgressData( @Keep val bufferDuration: Double ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onVolumeChangeData.kt b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onVolumeChangeData.kt index 6691f451..c5630dbc 100644 --- a/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onVolumeChangeData.kt +++ b/packages/react-native-video/nitrogen/generated/android/kotlin/com/margelo/nitro/video/onVolumeChangeData.kt @@ -9,7 +9,6 @@ package com.margelo.nitro.video import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* /** @@ -25,6 +24,8 @@ data class onVolumeChangeData( @Keep val muted: Boolean ) { + /* primary constructor */ + private companion object { /** * Constructor called from C++ diff --git a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.cpp b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.cpp index 152a1525..43358ca4 100644 --- a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.cpp +++ b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.cpp @@ -16,6 +16,7 @@ #include "HybridVideoViewViewManagerFactorySpecSwift.hpp" #include "HybridVideoViewViewManagerSpecSwift.hpp" #include "ReactNativeVideo-Swift-Cxx-Umbrella.hpp" +#include namespace margelo::nitro::video::bridge::swift { @@ -155,26 +156,34 @@ namespace margelo::nitro::video::bridge::swift { }; } - // pragma MARK: std::function + // pragma MARK: std::function + Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* NON_NULL swiftClosureWrapper) noexcept { + auto swiftClosure = ReactNativeVideo::Func_void_VideoPlayerStatus::fromUnsafe(swiftClosureWrapper); + return [swiftClosure = std::move(swiftClosure)](VideoPlayerStatus status) mutable -> void { + swiftClosure.call(static_cast(status)); + }; + } + + // pragma MARK: std::function Func_void_TimedMetadata create_Func_void_TimedMetadata(void* NON_NULL swiftClosureWrapper) noexcept { auto swiftClosure = ReactNativeVideo::Func_void_TimedMetadata::fromUnsafe(swiftClosureWrapper); - return [swiftClosure = std::move(swiftClosure)](const TimedMetadata& metadata) mutable -> void { - swiftClosure.call(metadata); + return [swiftClosure = std::move(swiftClosure)](const TimedMetadata& data) mutable -> void { + swiftClosure.call(data); }; } - // pragma MARK: std::function& /* texts */)> + // pragma MARK: std::function& /* data */)> Func_void_std__vector_std__string_ create_Func_void_std__vector_std__string_(void* NON_NULL swiftClosureWrapper) noexcept { auto swiftClosure = ReactNativeVideo::Func_void_std__vector_std__string_::fromUnsafe(swiftClosureWrapper); - return [swiftClosure = std::move(swiftClosure)](const std::vector& texts) mutable -> void { - swiftClosure.call(texts); + return [swiftClosure = std::move(swiftClosure)](const std::vector& data) mutable -> void { + swiftClosure.call(data); }; } - // pragma MARK: std::function& /* track */)> - Func_void_std__optional_TextTrack_ create_Func_void_std__optional_TextTrack_(void* NON_NULL swiftClosureWrapper) noexcept { - auto swiftClosure = ReactNativeVideo::Func_void_std__optional_TextTrack_::fromUnsafe(swiftClosureWrapper); - return [swiftClosure = std::move(swiftClosure)](const std::optional& track) mutable -> void { + // pragma MARK: std::function>& /* track */)> + Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ create_Func_void_std__optional_std__variant_nitro__NullType__TextTrack__(void* NON_NULL swiftClosureWrapper) noexcept { + auto swiftClosure = ReactNativeVideo::Func_void_std__optional_std__variant_nitro__NullType__TextTrack__::fromUnsafe(swiftClosureWrapper); + return [swiftClosure = std::move(swiftClosure)](const std::optional>& track) mutable -> void { swiftClosure.call(track); }; } @@ -187,14 +196,6 @@ namespace margelo::nitro::video::bridge::swift { }; } - // pragma MARK: std::function - Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* NON_NULL swiftClosureWrapper) noexcept { - auto swiftClosure = ReactNativeVideo::Func_void_VideoPlayerStatus::fromUnsafe(swiftClosureWrapper); - return [swiftClosure = std::move(swiftClosure)](VideoPlayerStatus status) mutable -> void { - swiftClosure.call(static_cast(status)); - }; - } - // pragma MARK: std::function Func_void_std__string create_Func_void_std__string(void* NON_NULL swiftClosureWrapper) noexcept { auto swiftClosure = ReactNativeVideo::Func_void_std__string::fromUnsafe(swiftClosureWrapper); diff --git a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.hpp b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.hpp index a2b75bbf..5fd34923 100644 --- a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Bridge.hpp @@ -28,6 +28,8 @@ namespace margelo::nitro::video { class HybridVideoPlayerSpec; } namespace margelo::nitro::video { class HybridVideoViewViewManagerFactorySpec; } // Forward declaration of `HybridVideoViewViewManagerSpec` to properly resolve imports. namespace margelo::nitro::video { class HybridVideoViewViewManagerSpec; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } // Forward declaration of `LivePlaybackParams` to properly resolve imports. namespace margelo::nitro::video { struct LivePlaybackParams; } // Forward declaration of `NativeDrmParams` to properly resolve imports. @@ -92,6 +94,7 @@ namespace ReactNativeVideo { class HybridVideoViewViewManagerSpec_cxx; } #include "HybridVideoPlayerSpec.hpp" #include "HybridVideoViewViewManagerFactorySpec.hpp" #include "HybridVideoViewViewManagerSpec.hpp" +#include "ListenerSubscription.hpp" #include "LivePlaybackParams.hpp" #include "NativeDrmParams.hpp" #include "NativeExternalSubtitle.hpp" @@ -110,7 +113,7 @@ namespace ReactNativeVideo { class HybridVideoViewViewManagerSpec_cxx; } #include "onPlaybackStateChangeData.hpp" #include "onProgressData.hpp" #include "onVolumeChangeData.hpp" -#include +#include #include #include #include @@ -120,6 +123,7 @@ namespace ReactNativeVideo { class HybridVideoViewViewManagerSpec_cxx; } #include #include #include +#include #include /** @@ -208,18 +212,47 @@ namespace margelo::nitro::video::bridge::swift { return Func_void_std__exception_ptr_Wrapper(std::move(value)); } - // pragma MARK: std::optional> + // pragma MARK: std::variant> /** - * Specialized version of `std::optional>`. + * Wrapper struct for `std::variant>`. + * std::variant cannot be used in Swift because of a Swift bug. + * Not even specializing it works. So we create a wrapper struct. */ - using std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__ = std::optional>; - inline std::optional> create_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::shared_ptr& value) noexcept { - return std::optional>(value); + struct std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__ { + std::variant> variant; + std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(std::variant> variant): variant(variant) { } + operator std::variant>() const noexcept { + return variant; + } + inline size_t index() const noexcept { + return variant.index(); + } + inline nitro::NullType get_0() const noexcept { + return std::get<0>(variant); + } + inline std::shared_ptr get_1() const noexcept { + return std::get<1>(variant); + } + }; + inline std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__ create_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(nitro::NullType value) noexcept { + return std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(value); } - inline bool has_value_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::optional>& optional) noexcept { + inline std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__ create_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::shared_ptr& value) noexcept { + return std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(value); + } + + // pragma MARK: std::optional>> + /** + * Specialized version of `std::optional>>`. + */ + using std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___ = std::optional>>; + inline std::optional>> create_std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___(const std::variant>& value) noexcept { + return std::optional>>(value); + } + inline bool has_value_std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___(const std::optional>>& optional) noexcept { return optional.has_value(); } - inline std::shared_ptr get_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::optional>& optional) noexcept { + inline std::variant> get_std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___(const std::optional>>& optional) noexcept { return *optional; } @@ -249,6 +282,50 @@ namespace margelo::nitro::video::bridge::swift { return vector; } + // pragma MARK: std::variant + /** + * Wrapper struct for `std::variant`. + * std::variant cannot be used in Swift because of a Swift bug. + * Not even specializing it works. So we create a wrapper struct. + */ + struct std__variant_nitro__NullType__TextTrack_ { + std::variant variant; + std__variant_nitro__NullType__TextTrack_(std::variant variant): variant(variant) { } + operator std::variant() const noexcept { + return variant; + } + inline size_t index() const noexcept { + return variant.index(); + } + inline nitro::NullType get_0() const noexcept { + return std::get<0>(variant); + } + inline TextTrack get_1() const noexcept { + return std::get<1>(variant); + } + }; + inline std__variant_nitro__NullType__TextTrack_ create_std__variant_nitro__NullType__TextTrack_(nitro::NullType value) noexcept { + return std__variant_nitro__NullType__TextTrack_(value); + } + inline std__variant_nitro__NullType__TextTrack_ create_std__variant_nitro__NullType__TextTrack_(const TextTrack& value) noexcept { + return std__variant_nitro__NullType__TextTrack_(value); + } + + // pragma MARK: std::optional> + /** + * Specialized version of `std::optional>`. + */ + using std__optional_std__variant_nitro__NullType__TextTrack__ = std::optional>; + inline std::optional> create_std__optional_std__variant_nitro__NullType__TextTrack__(const std::variant& value) noexcept { + return std::optional>(value); + } + inline bool has_value_std__optional_std__variant_nitro__NullType__TextTrack__(const std::optional>& optional) noexcept { + return optional.has_value(); + } + inline std::variant get_std__optional_std__variant_nitro__NullType__TextTrack__(const std::optional>& optional) noexcept { + return *optional; + } + // pragma MARK: std::optional /** * Specialized version of `std::optional`. @@ -493,6 +570,28 @@ namespace margelo::nitro::video::bridge::swift { return Func_void_onProgressData_Wrapper(std::move(value)); } + // pragma MARK: std::function + /** + * Specialized version of `std::function`. + */ + using Func_void_VideoPlayerStatus = std::function; + /** + * Wrapper class for a `std::function`, this can be used from Swift. + */ + class Func_void_VideoPlayerStatus_Wrapper final { + public: + explicit Func_void_VideoPlayerStatus_Wrapper(std::function&& func): _function(std::make_unique>(std::move(func))) {} + inline void call(int status) const noexcept { + _function->operator()(static_cast(status)); + } + private: + std::unique_ptr> _function; + } SWIFT_NONCOPYABLE; + Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* NON_NULL swiftClosureWrapper) noexcept; + inline Func_void_VideoPlayerStatus_Wrapper wrap_Func_void_VideoPlayerStatus(Func_void_VideoPlayerStatus value) noexcept { + return Func_void_VideoPlayerStatus_Wrapper(std::move(value)); + } + // pragma MARK: std::vector /** * Specialized version of `std::vector`. @@ -504,22 +603,22 @@ namespace margelo::nitro::video::bridge::swift { return vector; } - // pragma MARK: std::function + // pragma MARK: std::function /** * Specialized version of `std::function`. */ - using Func_void_TimedMetadata = std::function; + using Func_void_TimedMetadata = std::function; /** - * Wrapper class for a `std::function`, this can be used from Swift. + * Wrapper class for a `std::function`, this can be used from Swift. */ class Func_void_TimedMetadata_Wrapper final { public: - explicit Func_void_TimedMetadata_Wrapper(std::function&& func): _function(std::make_unique>(std::move(func))) {} - inline void call(TimedMetadata metadata) const noexcept { - _function->operator()(metadata); + explicit Func_void_TimedMetadata_Wrapper(std::function&& func): _function(std::make_unique>(std::move(func))) {} + inline void call(TimedMetadata data) const noexcept { + _function->operator()(data); } private: - std::unique_ptr> _function; + std::unique_ptr> _function; } SWIFT_NONCOPYABLE; Func_void_TimedMetadata create_Func_void_TimedMetadata(void* NON_NULL swiftClosureWrapper) noexcept; inline Func_void_TimedMetadata_Wrapper wrap_Func_void_TimedMetadata(Func_void_TimedMetadata value) noexcept { @@ -537,48 +636,48 @@ namespace margelo::nitro::video::bridge::swift { return vector; } - // pragma MARK: std::function& /* texts */)> + // pragma MARK: std::function& /* data */)> /** * Specialized version of `std::function&)>`. */ - using Func_void_std__vector_std__string_ = std::function& /* texts */)>; + using Func_void_std__vector_std__string_ = std::function& /* data */)>; /** - * Wrapper class for a `std::function& / * texts * /)>`, this can be used from Swift. + * Wrapper class for a `std::function& / * data * /)>`, this can be used from Swift. */ class Func_void_std__vector_std__string__Wrapper final { public: - explicit Func_void_std__vector_std__string__Wrapper(std::function& /* texts */)>&& func): _function(std::make_unique& /* texts */)>>(std::move(func))) {} - inline void call(std::vector texts) const noexcept { - _function->operator()(texts); + explicit Func_void_std__vector_std__string__Wrapper(std::function& /* data */)>&& func): _function(std::make_unique& /* data */)>>(std::move(func))) {} + inline void call(std::vector data) const noexcept { + _function->operator()(data); } private: - std::unique_ptr& /* texts */)>> _function; + std::unique_ptr& /* data */)>> _function; } SWIFT_NONCOPYABLE; Func_void_std__vector_std__string_ create_Func_void_std__vector_std__string_(void* NON_NULL swiftClosureWrapper) noexcept; inline Func_void_std__vector_std__string__Wrapper wrap_Func_void_std__vector_std__string_(Func_void_std__vector_std__string_ value) noexcept { return Func_void_std__vector_std__string__Wrapper(std::move(value)); } - // pragma MARK: std::function& /* track */)> + // pragma MARK: std::function>& /* track */)> /** - * Specialized version of `std::function&)>`. + * Specialized version of `std::function>&)>`. */ - using Func_void_std__optional_TextTrack_ = std::function& /* track */)>; + using Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ = std::function>& /* track */)>; /** - * Wrapper class for a `std::function& / * track * /)>`, this can be used from Swift. + * Wrapper class for a `std::function>& / * track * /)>`, this can be used from Swift. */ - class Func_void_std__optional_TextTrack__Wrapper final { + class Func_void_std__optional_std__variant_nitro__NullType__TextTrack___Wrapper final { public: - explicit Func_void_std__optional_TextTrack__Wrapper(std::function& /* track */)>&& func): _function(std::make_unique& /* track */)>>(std::move(func))) {} - inline void call(std::optional track) const noexcept { + explicit Func_void_std__optional_std__variant_nitro__NullType__TextTrack___Wrapper(std::function>& /* track */)>&& func): _function(std::make_unique>& /* track */)>>(std::move(func))) {} + inline void call(std::optional> track) const noexcept { _function->operator()(track); } private: - std::unique_ptr& /* track */)>> _function; + std::unique_ptr>& /* track */)>> _function; } SWIFT_NONCOPYABLE; - Func_void_std__optional_TextTrack_ create_Func_void_std__optional_TextTrack_(void* NON_NULL swiftClosureWrapper) noexcept; - inline Func_void_std__optional_TextTrack__Wrapper wrap_Func_void_std__optional_TextTrack_(Func_void_std__optional_TextTrack_ value) noexcept { - return Func_void_std__optional_TextTrack__Wrapper(std::move(value)); + Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ create_Func_void_std__optional_std__variant_nitro__NullType__TextTrack__(void* NON_NULL swiftClosureWrapper) noexcept; + inline Func_void_std__optional_std__variant_nitro__NullType__TextTrack___Wrapper wrap_Func_void_std__optional_std__variant_nitro__NullType__TextTrack__(Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ value) noexcept { + return Func_void_std__optional_std__variant_nitro__NullType__TextTrack___Wrapper(std::move(value)); } // pragma MARK: std::function @@ -603,26 +702,13 @@ namespace margelo::nitro::video::bridge::swift { return Func_void_onVolumeChangeData_Wrapper(std::move(value)); } - // pragma MARK: std::function - /** - * Specialized version of `std::function`. - */ - using Func_void_VideoPlayerStatus = std::function; - /** - * Wrapper class for a `std::function`, this can be used from Swift. - */ - class Func_void_VideoPlayerStatus_Wrapper final { - public: - explicit Func_void_VideoPlayerStatus_Wrapper(std::function&& func): _function(std::make_unique>(std::move(func))) {} - inline void call(int status) const noexcept { - _function->operator()(static_cast(status)); - } - private: - std::unique_ptr> _function; - } SWIFT_NONCOPYABLE; - Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* NON_NULL swiftClosureWrapper) noexcept; - inline Func_void_VideoPlayerStatus_Wrapper wrap_Func_void_VideoPlayerStatus(Func_void_VideoPlayerStatus value) noexcept { - return Func_void_VideoPlayerStatus_Wrapper(std::move(value)); + // pragma MARK: Result + using Result_ListenerSubscription_ = Result; + inline Result_ListenerSubscription_ create_Result_ListenerSubscription_(const ListenerSubscription& value) noexcept { + return Result::withValue(value); + } + inline Result_ListenerSubscription_ create_Result_ListenerSubscription_(const std::exception_ptr& error) noexcept { + return Result::withError(error); } // pragma MARK: std::vector @@ -966,51 +1052,6 @@ namespace margelo::nitro::video::bridge::swift { return *optional; } - // pragma MARK: std::optional> - /** - * Specialized version of `std::optional>`. - */ - using std__optional_std__function_void_bool____isInPictureInPicture______ = std::optional>; - inline std::optional> create_std__optional_std__function_void_bool____isInPictureInPicture______(const std::function& value) noexcept { - return std::optional>(value); - } - inline bool has_value_std__optional_std__function_void_bool____isInPictureInPicture______(const std::optional>& optional) noexcept { - return optional.has_value(); - } - inline std::function get_std__optional_std__function_void_bool____isInPictureInPicture______(const std::optional>& optional) noexcept { - return *optional; - } - - // pragma MARK: std::optional> - /** - * Specialized version of `std::optional>`. - */ - using std__optional_std__function_void_bool____fullscreen______ = std::optional>; - inline std::optional> create_std__optional_std__function_void_bool____fullscreen______(const std::function& value) noexcept { - return std::optional>(value); - } - inline bool has_value_std__optional_std__function_void_bool____fullscreen______(const std::optional>& optional) noexcept { - return optional.has_value(); - } - inline std::function get_std__optional_std__function_void_bool____fullscreen______(const std::optional>& optional) noexcept { - return *optional; - } - - // pragma MARK: std::optional> - /** - * Specialized version of `std::optional>`. - */ - using std__optional_std__function_void____ = std::optional>; - inline std::optional> create_std__optional_std__function_void____(const std::function& value) noexcept { - return std::optional>(value); - } - inline bool has_value_std__optional_std__function_void____(const std::optional>& optional) noexcept { - return optional.has_value(); - } - inline std::function get_std__optional_std__function_void____(const std::optional>& optional) noexcept { - return *optional; - } - // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. diff --git a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Umbrella.hpp b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Umbrella.hpp index 2d88026b..b48e4548 100644 --- a/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Umbrella.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/ReactNativeVideo-Swift-Cxx-Umbrella.hpp @@ -30,6 +30,8 @@ namespace margelo::nitro::video { class HybridVideoViewViewManagerFactorySpec; } namespace margelo::nitro::video { class HybridVideoViewViewManagerSpec; } // Forward declaration of `IgnoreSilentSwitchMode` to properly resolve imports. namespace margelo::nitro::video { enum class IgnoreSilentSwitchMode; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } // Forward declaration of `LivePlaybackParams` to properly resolve imports. namespace margelo::nitro::video { struct LivePlaybackParams; } // Forward declaration of `MixAudioMode` to properly resolve imports. @@ -87,6 +89,7 @@ namespace margelo::nitro::video { struct onVolumeChangeData; } #include "HybridVideoViewViewManagerFactorySpec.hpp" #include "HybridVideoViewViewManagerSpec.hpp" #include "IgnoreSilentSwitchMode.hpp" +#include "ListenerSubscription.hpp" #include "LivePlaybackParams.hpp" #include "MixAudioMode.hpp" #include "NativeDrmParams.hpp" @@ -109,6 +112,7 @@ namespace margelo::nitro::video { struct onVolumeChangeData; } #include "onPlaybackStateChangeData.hpp" #include "onProgressData.hpp" #include "onVolumeChangeData.hpp" +#include #include #include #include @@ -117,6 +121,7 @@ namespace margelo::nitro::video { struct onVolumeChangeData; } #include #include #include +#include #include // C++ helpers for Swift diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp index e37e162b..dd47ef62 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp @@ -12,6 +12,8 @@ // Forward declaration of `HybridVideoPlayerEventEmitterSpec_cxx` to properly resolve imports. namespace ReactNativeVideo { class HybridVideoPlayerEventEmitterSpec_cxx; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } // Forward declaration of `BandwidthData` to properly resolve imports. namespace margelo::nitro::video { struct BandwidthData; } // Forward declaration of `onLoadData` to properly resolve imports. @@ -28,6 +30,8 @@ namespace margelo::nitro::video { class HybridVideoPlayerSourceSpec; } namespace margelo::nitro::video { struct onPlaybackStateChangeData; } // Forward declaration of `onProgressData` to properly resolve imports. namespace margelo::nitro::video { struct onProgressData; } +// Forward declaration of `VideoPlayerStatus` to properly resolve imports. +namespace margelo::nitro::video { enum class VideoPlayerStatus; } // Forward declaration of `TimedMetadata` to properly resolve imports. namespace margelo::nitro::video { struct TimedMetadata; } // Forward declaration of `TimedMetadataObject` to properly resolve imports. @@ -36,9 +40,8 @@ namespace margelo::nitro::video { struct TimedMetadataObject; } namespace margelo::nitro::video { struct TextTrack; } // Forward declaration of `onVolumeChangeData` to properly resolve imports. namespace margelo::nitro::video { struct onVolumeChangeData; } -// Forward declaration of `VideoPlayerStatus` to properly resolve imports. -namespace margelo::nitro::video { enum class VideoPlayerStatus; } +#include "ListenerSubscription.hpp" #include #include "BandwidthData.hpp" #include @@ -50,13 +53,15 @@ namespace margelo::nitro::video { enum class VideoPlayerStatus; } #include "HybridVideoPlayerSourceSpec.hpp" #include "onPlaybackStateChangeData.hpp" #include "onProgressData.hpp" +#include "VideoPlayerStatus.hpp" #include "TimedMetadata.hpp" #include "TimedMetadataObject.hpp" #include #include +#include #include "TextTrack.hpp" +#include #include "onVolumeChangeData.hpp" -#include "VideoPlayerStatus.hpp" #include "ReactNativeVideo-Swift-Cxx-Umbrella.hpp" @@ -92,146 +97,174 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties - inline std::function getOnAudioBecomingNoisy() noexcept override { - auto __result = _swiftPart.getOnAudioBecomingNoisy(); - return __result; - } - inline void setOnAudioBecomingNoisy(const std::function& onAudioBecomingNoisy) noexcept override { - _swiftPart.setOnAudioBecomingNoisy(onAudioBecomingNoisy); - } - inline std::function getOnAudioFocusChange() noexcept override { - auto __result = _swiftPart.getOnAudioFocusChange(); - return __result; - } - inline void setOnAudioFocusChange(const std::function& onAudioFocusChange) noexcept override { - _swiftPart.setOnAudioFocusChange(onAudioFocusChange); - } - inline std::function getOnBandwidthUpdate() noexcept override { - auto __result = _swiftPart.getOnBandwidthUpdate(); - return __result; - } - inline void setOnBandwidthUpdate(const std::function& onBandwidthUpdate) noexcept override { - _swiftPart.setOnBandwidthUpdate(onBandwidthUpdate); - } - inline std::function getOnBuffer() noexcept override { - auto __result = _swiftPart.getOnBuffer(); - return __result; - } - inline void setOnBuffer(const std::function& onBuffer) noexcept override { - _swiftPart.setOnBuffer(onBuffer); - } - inline std::function getOnControlsVisibleChange() noexcept override { - auto __result = _swiftPart.getOnControlsVisibleChange(); - return __result; - } - inline void setOnControlsVisibleChange(const std::function& onControlsVisibleChange) noexcept override { - _swiftPart.setOnControlsVisibleChange(onControlsVisibleChange); - } - inline std::function getOnEnd() noexcept override { - auto __result = _swiftPart.getOnEnd(); - return __result; - } - inline void setOnEnd(const std::function& onEnd) noexcept override { - _swiftPart.setOnEnd(onEnd); - } - inline std::function getOnExternalPlaybackChange() noexcept override { - auto __result = _swiftPart.getOnExternalPlaybackChange(); - return __result; - } - inline void setOnExternalPlaybackChange(const std::function& onExternalPlaybackChange) noexcept override { - _swiftPart.setOnExternalPlaybackChange(onExternalPlaybackChange); - } - inline std::function getOnLoad() noexcept override { - auto __result = _swiftPart.getOnLoad(); - return __result; - } - inline void setOnLoad(const std::function& onLoad) noexcept override { - _swiftPart.setOnLoad(onLoad); - } - inline std::function getOnLoadStart() noexcept override { - auto __result = _swiftPart.getOnLoadStart(); - return __result; - } - inline void setOnLoadStart(const std::function& onLoadStart) noexcept override { - _swiftPart.setOnLoadStart(onLoadStart); - } - inline std::function getOnPlaybackStateChange() noexcept override { - auto __result = _swiftPart.getOnPlaybackStateChange(); - return __result; - } - inline void setOnPlaybackStateChange(const std::function& onPlaybackStateChange) noexcept override { - _swiftPart.setOnPlaybackStateChange(onPlaybackStateChange); - } - inline std::function getOnPlaybackRateChange() noexcept override { - auto __result = _swiftPart.getOnPlaybackRateChange(); - return __result; - } - inline void setOnPlaybackRateChange(const std::function& onPlaybackRateChange) noexcept override { - _swiftPart.setOnPlaybackRateChange(onPlaybackRateChange); - } - inline std::function getOnProgress() noexcept override { - auto __result = _swiftPart.getOnProgress(); - return __result; - } - inline void setOnProgress(const std::function& onProgress) noexcept override { - _swiftPart.setOnProgress(onProgress); - } - inline std::function getOnReadyToDisplay() noexcept override { - auto __result = _swiftPart.getOnReadyToDisplay(); - return __result; - } - inline void setOnReadyToDisplay(const std::function& onReadyToDisplay) noexcept override { - _swiftPart.setOnReadyToDisplay(onReadyToDisplay); - } - inline std::function getOnSeek() noexcept override { - auto __result = _swiftPart.getOnSeek(); - return __result; - } - inline void setOnSeek(const std::function& onSeek) noexcept override { - _swiftPart.setOnSeek(onSeek); - } - inline std::function getOnTimedMetadata() noexcept override { - auto __result = _swiftPart.getOnTimedMetadata(); - return __result; - } - inline void setOnTimedMetadata(const std::function& onTimedMetadata) noexcept override { - _swiftPart.setOnTimedMetadata(onTimedMetadata); - } - inline std::function& /* texts */)> getOnTextTrackDataChanged() noexcept override { - auto __result = _swiftPart.getOnTextTrackDataChanged(); - return __result; - } - inline void setOnTextTrackDataChanged(const std::function& /* texts */)>& onTextTrackDataChanged) noexcept override { - _swiftPart.setOnTextTrackDataChanged(onTextTrackDataChanged); - } - inline std::function& /* track */)> getOnTrackChange() noexcept override { - auto __result = _swiftPart.getOnTrackChange(); - return __result; - } - inline void setOnTrackChange(const std::function& /* track */)>& onTrackChange) noexcept override { - _swiftPart.setOnTrackChange(onTrackChange); - } - inline std::function getOnVolumeChange() noexcept override { - auto __result = _swiftPart.getOnVolumeChange(); - return __result; - } - inline void setOnVolumeChange(const std::function& onVolumeChange) noexcept override { - _swiftPart.setOnVolumeChange(onVolumeChange); - } - inline std::function getOnStatusChange() noexcept override { - auto __result = _swiftPart.getOnStatusChange(); - return __result; - } - inline void setOnStatusChange(const std::function& onStatusChange) noexcept override { - _swiftPart.setOnStatusChange(onStatusChange); - } + public: // Methods - + inline ListenerSubscription addOnAudioBecomingNoisyListener(const std::function& listener) override { + auto __result = _swiftPart.addOnAudioBecomingNoisyListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnAudioFocusChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnAudioFocusChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnBandwidthUpdateListener(const std::function& listener) override { + auto __result = _swiftPart.addOnBandwidthUpdateListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnBufferListener(const std::function& listener) override { + auto __result = _swiftPart.addOnBufferListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnControlsVisibleChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnControlsVisibleChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnEndListener(const std::function& listener) override { + auto __result = _swiftPart.addOnEndListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnExternalPlaybackChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnExternalPlaybackChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnLoadListener(const std::function& listener) override { + auto __result = _swiftPart.addOnLoadListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnLoadStartListener(const std::function& listener) override { + auto __result = _swiftPart.addOnLoadStartListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnPlaybackStateChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnPlaybackStateChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnPlaybackRateChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnPlaybackRateChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnProgressListener(const std::function& listener) override { + auto __result = _swiftPart.addOnProgressListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnReadyToDisplayListener(const std::function& listener) override { + auto __result = _swiftPart.addOnReadyToDisplayListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnSeekListener(const std::function& listener) override { + auto __result = _swiftPart.addOnSeekListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnStatusChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnStatusChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnTimedMetadataListener(const std::function& listener) override { + auto __result = _swiftPart.addOnTimedMetadataListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnTextTrackDataChangedListener(const std::function& /* data */)>& listener) override { + auto __result = _swiftPart.addOnTextTrackDataChangedListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnTrackChangeListener(const std::function>& /* track */)>& listener) override { + auto __result = _swiftPart.addOnTrackChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnVolumeChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnVolumeChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline void clearAllListeners() override { + auto __result = _swiftPart.clearAllListeners(); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + } private: ReactNativeVideo::HybridVideoPlayerEventEmitterSpec_cxx _swiftPart; diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp index adfd0b95..5b3f1821 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp @@ -55,6 +55,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp index 71d90811..ae2bb6ff 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp @@ -85,6 +85,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp index 3a3564fc..9c899a18 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp @@ -87,6 +87,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties 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 6ea8e857..aa367019 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp @@ -35,6 +35,8 @@ namespace margelo::nitro::video { struct TextTrack; } #include #include #include +#include +#include #include #include "ReactNativeVideo-Swift-Cxx-Umbrella.hpp" @@ -71,6 +73,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties @@ -161,7 +166,7 @@ namespace margelo::nitro::video { public: // Methods - inline std::shared_ptr> replaceSourceAsync(const std::optional>& source) override { + inline std::shared_ptr> replaceSourceAsync(const std::optional>>& source) override { auto __result = _swiftPart.replaceSourceAsync(source); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); @@ -177,7 +182,7 @@ namespace margelo::nitro::video { auto __value = std::move(__result.value()); return __value; } - inline void selectTextTrack(const std::optional& textTrack) override { + inline void selectTextTrack(const std::optional>& textTrack) override { auto __result = _swiftPart.selectTextTrack(textTrack); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp index a45fda33..d8507862 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp @@ -52,6 +52,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp index 6d9d0119..b48f4b36 100644 --- a/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp +++ b/packages/react-native-video/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp @@ -18,12 +18,15 @@ namespace margelo::nitro::video { class HybridVideoPlayerSpec; } namespace margelo::nitro::video { enum class ResizeMode; } // Forward declaration of `SurfaceType` to properly resolve imports. namespace margelo::nitro::video { enum class SurfaceType; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } #include #include "HybridVideoPlayerSpec.hpp" #include #include "ResizeMode.hpp" #include "SurfaceType.hpp" +#include "ListenerSubscription.hpp" #include #include "ReactNativeVideo-Swift-Cxx-Umbrella.hpp" @@ -60,6 +63,9 @@ namespace margelo::nitro::video { void dispose() noexcept override { _swiftPart.dispose(); } + std::string toString() override { + return _swiftPart.toString(); + } public: // Properties @@ -108,48 +114,6 @@ namespace margelo::nitro::video { inline void setSurfaceType(SurfaceType surfaceType) noexcept override { _swiftPart.setSurfaceType(static_cast(surfaceType)); } - inline std::optional> getOnPictureInPictureChange() noexcept override { - auto __result = _swiftPart.getOnPictureInPictureChange(); - return __result; - } - inline void setOnPictureInPictureChange(const std::optional>& onPictureInPictureChange) noexcept override { - _swiftPart.setOnPictureInPictureChange(onPictureInPictureChange); - } - inline std::optional> getOnFullscreenChange() noexcept override { - auto __result = _swiftPart.getOnFullscreenChange(); - return __result; - } - inline void setOnFullscreenChange(const std::optional>& onFullscreenChange) noexcept override { - _swiftPart.setOnFullscreenChange(onFullscreenChange); - } - inline std::optional> getWillEnterFullscreen() noexcept override { - auto __result = _swiftPart.getWillEnterFullscreen(); - return __result; - } - inline void setWillEnterFullscreen(const std::optional>& willEnterFullscreen) noexcept override { - _swiftPart.setWillEnterFullscreen(willEnterFullscreen); - } - inline std::optional> getWillExitFullscreen() noexcept override { - auto __result = _swiftPart.getWillExitFullscreen(); - return __result; - } - inline void setWillExitFullscreen(const std::optional>& willExitFullscreen) noexcept override { - _swiftPart.setWillExitFullscreen(willExitFullscreen); - } - inline std::optional> getWillEnterPictureInPicture() noexcept override { - auto __result = _swiftPart.getWillEnterPictureInPicture(); - return __result; - } - inline void setWillEnterPictureInPicture(const std::optional>& willEnterPictureInPicture) noexcept override { - _swiftPart.setWillEnterPictureInPicture(willEnterPictureInPicture); - } - inline std::optional> getWillExitPictureInPicture() noexcept override { - auto __result = _swiftPart.getWillExitPictureInPicture(); - return __result; - } - inline void setWillExitPictureInPicture(const std::optional>& willExitPictureInPicture) noexcept override { - _swiftPart.setWillExitPictureInPicture(willExitPictureInPicture); - } public: // Methods @@ -185,6 +149,60 @@ namespace margelo::nitro::video { auto __value = std::move(__result.value()); return __value; } + inline ListenerSubscription addOnPictureInPictureChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnPictureInPictureChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addOnFullscreenChangeListener(const std::function& listener) override { + auto __result = _swiftPart.addOnFullscreenChangeListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addWillEnterFullscreenListener(const std::function& listener) override { + auto __result = _swiftPart.addWillEnterFullscreenListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addWillExitFullscreenListener(const std::function& listener) override { + auto __result = _swiftPart.addWillExitFullscreenListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addWillEnterPictureInPictureListener(const std::function& listener) override { + auto __result = _swiftPart.addWillEnterPictureInPictureListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline ListenerSubscription addWillExitPictureInPictureListener(const std::function& listener) override { + auto __result = _swiftPart.addWillExitPictureInPictureListener(listener); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + auto __value = std::move(__result.value()); + return __value; + } + inline void clearAllListeners() override { + auto __result = _swiftPart.clearAllListeners(); + if (__result.hasError()) [[unlikely]] { + std::rethrow_exception(__result.error()); + } + } private: ReactNativeVideo::HybridVideoViewViewManagerSpec_cxx _swiftPart; diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/BandwidthData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/BandwidthData.swift index e57f8f00..966c84da 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/BandwidthData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/BandwidthData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** @@ -48,14 +49,7 @@ public extension BandwidthData { var width: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__width) { - let __unwrapped = bridge.get_std__optional_double_(self.__width) - return __unwrapped - } else { - return nil - } - }() + return self.__width.value } @inline(__always) set { @@ -72,14 +66,7 @@ public extension BandwidthData { var height: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__height) { - let __unwrapped = bridge.get_std__optional_double_(self.__height) - return __unwrapped - } else { - return nil - } - }() + return self.__height.value } @inline(__always) set { diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/BufferConfig.swift b/packages/react-native-video/nitrogen/generated/ios/swift/BufferConfig.swift index d0bb6459..d1d88d56 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/BufferConfig.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/BufferConfig.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** @@ -108,14 +109,7 @@ public extension BufferConfig { var minBufferMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__minBufferMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__minBufferMs) - return __unwrapped - } else { - return nil - } - }() + return self.__minBufferMs.value } @inline(__always) set { @@ -132,14 +126,7 @@ public extension BufferConfig { var maxBufferMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__maxBufferMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__maxBufferMs) - return __unwrapped - } else { - return nil - } - }() + return self.__maxBufferMs.value } @inline(__always) set { @@ -156,14 +143,7 @@ public extension BufferConfig { var bufferForPlaybackMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__bufferForPlaybackMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__bufferForPlaybackMs) - return __unwrapped - } else { - return nil - } - }() + return self.__bufferForPlaybackMs.value } @inline(__always) set { @@ -180,14 +160,7 @@ public extension BufferConfig { var bufferForPlaybackAfterRebufferMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__bufferForPlaybackAfterRebufferMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__bufferForPlaybackAfterRebufferMs) - return __unwrapped - } else { - return nil - } - }() + return self.__bufferForPlaybackAfterRebufferMs.value } @inline(__always) set { @@ -204,14 +177,7 @@ public extension BufferConfig { var backBufferDurationMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__backBufferDurationMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__backBufferDurationMs) - return __unwrapped - } else { - return nil - } - }() + return self.__backBufferDurationMs.value } @inline(__always) set { @@ -228,14 +194,7 @@ public extension BufferConfig { var preferredForwardBufferDurationMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__preferredForwardBufferDurationMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__preferredForwardBufferDurationMs) - return __unwrapped - } else { - return nil - } - }() + return self.__preferredForwardBufferDurationMs.value } @inline(__always) set { @@ -252,14 +211,7 @@ public extension BufferConfig { var preferredPeakBitRate: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__preferredPeakBitRate) { - let __unwrapped = bridge.get_std__optional_double_(self.__preferredPeakBitRate) - return __unwrapped - } else { - return nil - } - }() + return self.__preferredPeakBitRate.value } @inline(__always) set { @@ -293,14 +245,7 @@ public extension BufferConfig { var preferredPeakBitRateForExpensiveNetworks: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__preferredPeakBitRateForExpensiveNetworks) { - let __unwrapped = bridge.get_std__optional_double_(self.__preferredPeakBitRateForExpensiveNetworks) - return __unwrapped - } else { - return nil - } - }() + return self.__preferredPeakBitRateForExpensiveNetworks.value } @inline(__always) set { diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/CustomVideoMetadata.swift b/packages/react-native-video/nitrogen/generated/ios/swift/CustomVideoMetadata.swift index e6adfa3a..ce746e70 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/CustomVideoMetadata.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/CustomVideoMetadata.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift index eb52fa34..a0e368ed 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ payload: OnGetLicensePayload) -> Promise>` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void.swift index 48b038a9..3139c473 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `() -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift index 59b81f4a..e16b3495 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: BandwidthData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift index f7efc07e..b9db91d9 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift @@ -5,25 +5,25 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** - * Wraps a Swift `(_ metadata: TimedMetadata) -> Void` as a class. + * Wraps a Swift `(_ data: TimedMetadata) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. */ public final class Func_void_TimedMetadata { public typealias bridge = margelo.nitro.video.bridge.swift - private let closure: (_ metadata: TimedMetadata) -> Void + private let closure: (_ data: TimedMetadata) -> Void - public init(_ closure: @escaping (_ metadata: TimedMetadata) -> Void) { + public init(_ closure: @escaping (_ data: TimedMetadata) -> Void) { self.closure = closure } @inline(__always) - public func call(metadata: TimedMetadata) -> Void { - self.closure(metadata) + public func call(data: TimedMetadata) -> Void { + self.closure(data) } /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift index db0d4ad7..8ae8f4e2 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ value: VideoInformation) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift index 183d16ae..8d7d091c 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ status: VideoPlayerStatus) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_bool.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_bool.swift index 7ed02cc4..d4d88c69 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_bool.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_bool.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ isInPictureInPicture: Bool) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_double.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_double.swift index 245198bd..a23ff459 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_double.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_double.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ rate: Double) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadData.swift index af153509..8241fbf5 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: onLoadData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift index 7ffdd51f..a2ab0556 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: onLoadStartData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift index 16cfa823..463fb2ca 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: onPlaybackStateChangeData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onProgressData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onProgressData.swift index fd7efea8..aac44735 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onProgressData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onProgressData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: onProgressData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift index 9162496e..7234bff7 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ data: onVolumeChangeData) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift index 1ff9b139..06b26143 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ error: Error) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_TextTrack_.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_TextTrack_.swift deleted file mode 100644 index 23208f7d..00000000 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_TextTrack_.swift +++ /dev/null @@ -1,47 +0,0 @@ -/// -/// Func_void_std__optional_TextTrack_.swift -/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. -/// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo -/// - -import NitroModules - - -/** - * Wraps a Swift `(_ track: TextTrack?) -> Void` as a class. - * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. - */ -public final class Func_void_std__optional_TextTrack_ { - public typealias bridge = margelo.nitro.video.bridge.swift - - private let closure: (_ track: TextTrack?) -> Void - - public init(_ closure: @escaping (_ track: TextTrack?) -> Void) { - self.closure = closure - } - - @inline(__always) - public func call(track: bridge.std__optional_TextTrack_) -> Void { - self.closure(track.value) - } - - /** - * Casts this instance to a retained unsafe raw pointer. - * This acquires one additional strong reference on the object! - */ - @inline(__always) - public func toUnsafe() -> UnsafeMutableRawPointer { - return Unmanaged.passRetained(self).toOpaque() - } - - /** - * Casts an unsafe pointer to a `Func_void_std__optional_TextTrack_`. - * The pointer has to be a retained opaque `Unmanaged`. - * This removes one strong reference from the object! - */ - @inline(__always) - public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_std__optional_TextTrack_ { - return Unmanaged.fromOpaque(pointer).takeRetainedValue() - } -} diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift new file mode 100644 index 00000000..6ec17592 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift @@ -0,0 +1,66 @@ +/// +/// Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +import Foundation +import NitroModules + +/** + * Wraps a Swift `(_ track: Variant_NullType_TextTrack?) -> Void` as a class. + * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. + */ +public final class Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ { + public typealias bridge = margelo.nitro.video.bridge.swift + + private let closure: (_ track: Variant_NullType_TextTrack?) -> Void + + public init(_ closure: @escaping (_ track: Variant_NullType_TextTrack?) -> Void) { + self.closure = closure + } + + @inline(__always) + public func call(track: bridge.std__optional_std__variant_nitro__NullType__TextTrack__) -> Void { + self.closure({ () -> Variant_NullType_TextTrack? in + if bridge.has_value_std__optional_std__variant_nitro__NullType__TextTrack__(track) { + let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__TextTrack__(track) + return { () -> Variant_NullType_TextTrack in + let __variant = bridge.std__variant_nitro__NullType__TextTrack_(__unwrapped) + switch __variant.index() { + case 0: + let __actual = __variant.get_0() + return .first(NullType.null) + case 1: + let __actual = __variant.get_1() + return .second(__actual) + default: + fatalError("Variant can never have index \(__variant.index())!") + } + }() + } else { + return nil + } + }()) + } + + /** + * Casts this instance to a retained unsafe raw pointer. + * This acquires one additional strong reference on the object! + */ + @inline(__always) + public func toUnsafe() -> UnsafeMutableRawPointer { + return Unmanaged.passRetained(self).toOpaque() + } + + /** + * Casts an unsafe pointer to a `Func_void_std__optional_std__variant_nitro__NullType__TextTrack__`. + * The pointer has to be a retained opaque `Unmanaged`. + * This removes one strong reference from the object! + */ + @inline(__always) + public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_std__optional_std__variant_nitro__NullType__TextTrack__ { + return Unmanaged.fromOpaque(pointer).takeRetainedValue() + } +} diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift index e793bef9..812ccbca 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ value: Promise) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__string.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__string.swift index 155e0826..47187d4a 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__string.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__string.swift @@ -5,9 +5,9 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** * Wraps a Swift `(_ value: String) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift index 0836c42c..7949acf8 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift @@ -5,25 +5,25 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules - /** - * Wraps a Swift `(_ texts: [String]) -> Void` as a class. + * Wraps a Swift `(_ data: [String]) -> Void` as a class. * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`. */ public final class Func_void_std__vector_std__string_ { public typealias bridge = margelo.nitro.video.bridge.swift - private let closure: (_ texts: [String]) -> Void + private let closure: (_ data: [String]) -> Void - public init(_ closure: @escaping (_ texts: [String]) -> Void) { + public init(_ closure: @escaping (_ data: [String]) -> Void) { self.closure = closure } @inline(__always) - public func call(texts: bridge.std__vector_std__string_) -> Void { - self.closure(texts.map({ __item in String(__item) })) + public func call(data: bridge.std__vector_std__string_) -> Void { + self.closure(data.map({ __item in String(__item) })) } /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift index b55259ab..97542cb1 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift @@ -11,28 +11,36 @@ import NitroModules /// See ``HybridVideoPlayerEventEmitterSpec`` public protocol HybridVideoPlayerEventEmitterSpec_protocol: HybridObject { // Properties - var onAudioBecomingNoisy: () -> Void { get set } - var onAudioFocusChange: (_ hasAudioFocus: Bool) -> Void { get set } - var onBandwidthUpdate: (_ data: BandwidthData) -> Void { get set } - var onBuffer: (_ buffering: Bool) -> Void { get set } - var onControlsVisibleChange: (_ visible: Bool) -> Void { get set } - var onEnd: () -> Void { get set } - var onExternalPlaybackChange: (_ externalPlaybackActive: Bool) -> Void { get set } - var onLoad: (_ data: onLoadData) -> Void { get set } - var onLoadStart: (_ data: onLoadStartData) -> Void { get set } - var onPlaybackStateChange: (_ data: onPlaybackStateChangeData) -> Void { get set } - var onPlaybackRateChange: (_ rate: Double) -> Void { get set } - var onProgress: (_ data: onProgressData) -> Void { get set } - var onReadyToDisplay: () -> Void { get set } - var onSeek: (_ seekTime: Double) -> Void { get set } - var onTimedMetadata: (_ metadata: TimedMetadata) -> Void { get set } - var onTextTrackDataChanged: (_ texts: [String]) -> Void { get set } - var onTrackChange: (_ track: TextTrack?) -> Void { get set } - var onVolumeChange: (_ data: onVolumeChangeData) -> Void { get set } - var onStatusChange: (_ status: VideoPlayerStatus) -> Void { get set } + // Methods - + func addOnAudioBecomingNoisyListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addOnAudioFocusChangeListener(listener: @escaping (_ hasAudioFocus: Bool) -> Void) throws -> ListenerSubscription + func addOnBandwidthUpdateListener(listener: @escaping (_ data: BandwidthData) -> Void) throws -> ListenerSubscription + func addOnBufferListener(listener: @escaping (_ buffering: Bool) -> Void) throws -> ListenerSubscription + func addOnControlsVisibleChangeListener(listener: @escaping (_ visible: Bool) -> Void) throws -> ListenerSubscription + func addOnEndListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addOnExternalPlaybackChangeListener(listener: @escaping (_ externalPlaybackActive: Bool) -> Void) throws -> ListenerSubscription + func addOnLoadListener(listener: @escaping (_ data: onLoadData) -> Void) throws -> ListenerSubscription + func addOnLoadStartListener(listener: @escaping (_ data: onLoadStartData) -> Void) throws -> ListenerSubscription + func addOnPlaybackStateChangeListener(listener: @escaping (_ data: onPlaybackStateChangeData) -> Void) throws -> ListenerSubscription + func addOnPlaybackRateChangeListener(listener: @escaping (_ rate: Double) -> Void) throws -> ListenerSubscription + func addOnProgressListener(listener: @escaping (_ data: onProgressData) -> Void) throws -> ListenerSubscription + func addOnReadyToDisplayListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addOnSeekListener(listener: @escaping (_ position: Double) -> Void) throws -> ListenerSubscription + func addOnStatusChangeListener(listener: @escaping (_ status: VideoPlayerStatus) -> Void) throws -> ListenerSubscription + func addOnTimedMetadataListener(listener: @escaping (_ data: TimedMetadata) -> Void) throws -> ListenerSubscription + func addOnTextTrackDataChangedListener(listener: @escaping (_ data: [String]) -> Void) throws -> ListenerSubscription + func addOnTrackChangeListener(listener: @escaping (_ track: Variant_NullType_TextTrack?) -> Void) throws -> ListenerSubscription + func addOnVolumeChangeListener(listener: @escaping (_ data: onVolumeChangeData) -> Void) throws -> ListenerSubscription + func clearAllListeners() throws -> Void +} + +public extension HybridVideoPlayerEventEmitterSpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoPlayerEventEmitter]" + } } /// See ``HybridVideoPlayerEventEmitterSpec`` diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift index 93d0624e..66e61478 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoPlayerEventEmitterSpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoPlayerEventEmitterSpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoPlayerEventEmitterSpec_(self.toUnsafe()) @@ -105,380 +105,368 @@ open class HybridVideoPlayerEventEmitterSpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties - public final var onAudioBecomingNoisy: bridge.Func_void { - @inline(__always) - get { - return { () -> bridge.Func_void in - let __closureWrapper = Func_void(self.__implementation.onAudioBecomingNoisy) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onAudioBecomingNoisy = { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(newValue) + + + // Methods + @inline(__always) + public final func addOnAudioBecomingNoisyListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnAudioBecomingNoisyListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) return { () -> Void in __wrappedFunction.call() } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onAudioFocusChange: bridge.Func_void_bool { - @inline(__always) - get { - return { () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(self.__implementation.onAudioFocusChange) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onAudioFocusChange = { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(newValue) + @inline(__always) + public final func addOnAudioFocusChangeListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnAudioFocusChangeListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) return { (__hasAudioFocus: Bool) -> Void in __wrappedFunction.call(__hasAudioFocus) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onBandwidthUpdate: bridge.Func_void_BandwidthData { - @inline(__always) - get { - return { () -> bridge.Func_void_BandwidthData in - let __closureWrapper = Func_void_BandwidthData(self.__implementation.onBandwidthUpdate) - return bridge.create_Func_void_BandwidthData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onBandwidthUpdate = { () -> (BandwidthData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_BandwidthData(newValue) + @inline(__always) + public final func addOnBandwidthUpdateListener(listener: bridge.Func_void_BandwidthData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnBandwidthUpdateListener(listener: { () -> (BandwidthData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_BandwidthData(listener) return { (__data: BandwidthData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onBuffer: bridge.Func_void_bool { - @inline(__always) - get { - return { () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(self.__implementation.onBuffer) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onBuffer = { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(newValue) + @inline(__always) + public final func addOnBufferListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnBufferListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) return { (__buffering: Bool) -> Void in __wrappedFunction.call(__buffering) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onControlsVisibleChange: bridge.Func_void_bool { - @inline(__always) - get { - return { () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(self.__implementation.onControlsVisibleChange) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onControlsVisibleChange = { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(newValue) + @inline(__always) + public final func addOnControlsVisibleChangeListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnControlsVisibleChangeListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) return { (__visible: Bool) -> Void in __wrappedFunction.call(__visible) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onEnd: bridge.Func_void { - @inline(__always) - get { - return { () -> bridge.Func_void in - let __closureWrapper = Func_void(self.__implementation.onEnd) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onEnd = { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(newValue) + @inline(__always) + public final func addOnEndListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnEndListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) return { () -> Void in __wrappedFunction.call() } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onExternalPlaybackChange: bridge.Func_void_bool { - @inline(__always) - get { - return { () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(self.__implementation.onExternalPlaybackChange) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onExternalPlaybackChange = { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(newValue) + @inline(__always) + public final func addOnExternalPlaybackChangeListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnExternalPlaybackChangeListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) return { (__externalPlaybackActive: Bool) -> Void in __wrappedFunction.call(__externalPlaybackActive) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onLoad: bridge.Func_void_onLoadData { - @inline(__always) - get { - return { () -> bridge.Func_void_onLoadData in - let __closureWrapper = Func_void_onLoadData(self.__implementation.onLoad) - return bridge.create_Func_void_onLoadData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onLoad = { () -> (onLoadData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_onLoadData(newValue) + @inline(__always) + public final func addOnLoadListener(listener: bridge.Func_void_onLoadData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnLoadListener(listener: { () -> (onLoadData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_onLoadData(listener) return { (__data: onLoadData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onLoadStart: bridge.Func_void_onLoadStartData { - @inline(__always) - get { - return { () -> bridge.Func_void_onLoadStartData in - let __closureWrapper = Func_void_onLoadStartData(self.__implementation.onLoadStart) - return bridge.create_Func_void_onLoadStartData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onLoadStart = { () -> (onLoadStartData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_onLoadStartData(newValue) + @inline(__always) + public final func addOnLoadStartListener(listener: bridge.Func_void_onLoadStartData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnLoadStartListener(listener: { () -> (onLoadStartData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_onLoadStartData(listener) return { (__data: onLoadStartData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onPlaybackStateChange: bridge.Func_void_onPlaybackStateChangeData { - @inline(__always) - get { - return { () -> bridge.Func_void_onPlaybackStateChangeData in - let __closureWrapper = Func_void_onPlaybackStateChangeData(self.__implementation.onPlaybackStateChange) - return bridge.create_Func_void_onPlaybackStateChangeData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onPlaybackStateChange = { () -> (onPlaybackStateChangeData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_onPlaybackStateChangeData(newValue) + @inline(__always) + public final func addOnPlaybackStateChangeListener(listener: bridge.Func_void_onPlaybackStateChangeData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnPlaybackStateChangeListener(listener: { () -> (onPlaybackStateChangeData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_onPlaybackStateChangeData(listener) return { (__data: onPlaybackStateChangeData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onPlaybackRateChange: bridge.Func_void_double { - @inline(__always) - get { - return { () -> bridge.Func_void_double in - let __closureWrapper = Func_void_double(self.__implementation.onPlaybackRateChange) - return bridge.create_Func_void_double(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onPlaybackRateChange = { () -> (Double) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_double(newValue) + @inline(__always) + public final func addOnPlaybackRateChangeListener(listener: bridge.Func_void_double) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnPlaybackRateChangeListener(listener: { () -> (Double) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_double(listener) return { (__rate: Double) -> Void in __wrappedFunction.call(__rate) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onProgress: bridge.Func_void_onProgressData { - @inline(__always) - get { - return { () -> bridge.Func_void_onProgressData in - let __closureWrapper = Func_void_onProgressData(self.__implementation.onProgress) - return bridge.create_Func_void_onProgressData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onProgress = { () -> (onProgressData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_onProgressData(newValue) + @inline(__always) + public final func addOnProgressListener(listener: bridge.Func_void_onProgressData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnProgressListener(listener: { () -> (onProgressData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_onProgressData(listener) return { (__data: onProgressData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onReadyToDisplay: bridge.Func_void { - @inline(__always) - get { - return { () -> bridge.Func_void in - let __closureWrapper = Func_void(self.__implementation.onReadyToDisplay) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onReadyToDisplay = { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(newValue) + @inline(__always) + public final func addOnReadyToDisplayListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnReadyToDisplayListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) return { () -> Void in __wrappedFunction.call() } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onSeek: bridge.Func_void_double { - @inline(__always) - get { - return { () -> bridge.Func_void_double in - let __closureWrapper = Func_void_double(self.__implementation.onSeek) - return bridge.create_Func_void_double(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onSeek = { () -> (Double) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_double(newValue) - return { (__seekTime: Double) -> Void in - __wrappedFunction.call(__seekTime) + @inline(__always) + public final func addOnSeekListener(listener: bridge.Func_void_double) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnSeekListener(listener: { () -> (Double) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_double(listener) + return { (__position: Double) -> Void in + __wrappedFunction.call(__position) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onTimedMetadata: bridge.Func_void_TimedMetadata { - @inline(__always) - get { - return { () -> bridge.Func_void_TimedMetadata in - let __closureWrapper = Func_void_TimedMetadata(self.__implementation.onTimedMetadata) - return bridge.create_Func_void_TimedMetadata(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onTimedMetadata = { () -> (TimedMetadata) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_TimedMetadata(newValue) - return { (__metadata: TimedMetadata) -> Void in - __wrappedFunction.call(__metadata) + @inline(__always) + public final func addOnStatusChangeListener(listener: bridge.Func_void_VideoPlayerStatus) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnStatusChangeListener(listener: { () -> (VideoPlayerStatus) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_VideoPlayerStatus(listener) + return { (__status: VideoPlayerStatus) -> Void in + __wrappedFunction.call(__status.rawValue) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onTextTrackDataChanged: bridge.Func_void_std__vector_std__string_ { - @inline(__always) - get { - return { () -> bridge.Func_void_std__vector_std__string_ in - let __closureWrapper = Func_void_std__vector_std__string_(self.__implementation.onTextTrackDataChanged) - return bridge.create_Func_void_std__vector_std__string_(__closureWrapper.toUnsafe()) - }() + @inline(__always) + public final func addOnTimedMetadataListener(listener: bridge.Func_void_TimedMetadata) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnTimedMetadataListener(listener: { () -> (TimedMetadata) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_TimedMetadata(listener) + return { (__data: TimedMetadata) -> Void in + __wrappedFunction.call(__data) + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } - @inline(__always) - set { - self.__implementation.onTextTrackDataChanged = { () -> ([String]) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_std__vector_std__string_(newValue) - return { (__texts: [String]) -> Void in + } + + @inline(__always) + public final func addOnTextTrackDataChangedListener(listener: bridge.Func_void_std__vector_std__string_) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnTextTrackDataChangedListener(listener: { () -> ([String]) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_std__vector_std__string_(listener) + return { (__data: [String]) -> Void in __wrappedFunction.call({ () -> bridge.std__vector_std__string_ in - var __vector = bridge.create_std__vector_std__string_(__texts.count) - for __item in __texts { + var __vector = bridge.create_std__vector_std__string_(__data.count) + for __item in __data { __vector.push_back(std.string(__item)) } return __vector }()) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onTrackChange: bridge.Func_void_std__optional_TextTrack_ { - @inline(__always) - get { - return { () -> bridge.Func_void_std__optional_TextTrack_ in - let __closureWrapper = Func_void_std__optional_TextTrack_(self.__implementation.onTrackChange) - return bridge.create_Func_void_std__optional_TextTrack_(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onTrackChange = { () -> (TextTrack?) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_std__optional_TextTrack_(newValue) - return { (__track: TextTrack?) -> Void in - __wrappedFunction.call({ () -> bridge.std__optional_TextTrack_ in + @inline(__always) + public final func addOnTrackChangeListener(listener: bridge.Func_void_std__optional_std__variant_nitro__NullType__TextTrack__) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnTrackChangeListener(listener: { () -> (Variant_NullType_TextTrack?) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_std__optional_std__variant_nitro__NullType__TextTrack__(listener) + return { (__track: Variant_NullType_TextTrack?) -> Void in + __wrappedFunction.call({ () -> bridge.std__optional_std__variant_nitro__NullType__TextTrack__ in if let __unwrappedValue = __track { - return bridge.create_std__optional_TextTrack_(__unwrappedValue) + return bridge.create_std__optional_std__variant_nitro__NullType__TextTrack__({ () -> bridge.std__variant_nitro__NullType__TextTrack_ in + switch __unwrappedValue { + case .first(let __value): + return bridge.create_std__variant_nitro__NullType__TextTrack_(margelo.nitro.NullType.null) + case .second(let __value): + return bridge.create_std__variant_nitro__NullType__TextTrack_(__value) + } + }().variant) } else { return .init() } }()) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onVolumeChange: bridge.Func_void_onVolumeChangeData { - @inline(__always) - get { - return { () -> bridge.Func_void_onVolumeChangeData in - let __closureWrapper = Func_void_onVolumeChangeData(self.__implementation.onVolumeChange) - return bridge.create_Func_void_onVolumeChangeData(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onVolumeChange = { () -> (onVolumeChangeData) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_onVolumeChangeData(newValue) + @inline(__always) + public final func addOnVolumeChangeListener(listener: bridge.Func_void_onVolumeChangeData) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnVolumeChangeListener(listener: { () -> (onVolumeChangeData) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_onVolumeChangeData(listener) return { (__data: onVolumeChangeData) -> Void in __wrappedFunction.call(__data) } - }() + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) } } - public final var onStatusChange: bridge.Func_void_VideoPlayerStatus { - @inline(__always) - get { - return { () -> bridge.Func_void_VideoPlayerStatus in - let __closureWrapper = Func_void_VideoPlayerStatus(self.__implementation.onStatusChange) - return bridge.create_Func_void_VideoPlayerStatus(__closureWrapper.toUnsafe()) - }() - } - @inline(__always) - set { - self.__implementation.onStatusChange = { () -> (VideoPlayerStatus) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_VideoPlayerStatus(newValue) - return { (__status: VideoPlayerStatus) -> Void in - __wrappedFunction.call(__status.rawValue) - } - }() + @inline(__always) + public final func clearAllListeners() -> bridge.Result_void_ { + do { + try self.__implementation.clearAllListeners() + return bridge.create_Result_void_() + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_void_(__exceptionPtr) } } - - // Methods - } diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift index a3ef9be8..8c2422bd 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift @@ -17,6 +17,13 @@ public protocol HybridVideoPlayerFactorySpec_protocol: HybridObject { func createPlayer(source: (any HybridVideoPlayerSourceSpec)) throws -> (any HybridVideoPlayerSpec) } +public extension HybridVideoPlayerFactorySpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoPlayerFactory]" + } +} + /// See ``HybridVideoPlayerFactorySpec`` open class HybridVideoPlayerFactorySpec_base { private weak var cxxWrapper: HybridVideoPlayerFactorySpec_cxx? = nil diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift index 5a76e01a..53301c9e 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoPlayerFactorySpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoPlayerFactorySpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoPlayerFactorySpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoPlayerFactorySpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift index 7f2f1034..fc264211 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift @@ -18,6 +18,13 @@ public protocol HybridVideoPlayerSourceFactorySpec_protocol: HybridObject { func fromVideoConfig(config: NativeVideoConfig) throws -> (any HybridVideoPlayerSourceSpec) } +public extension HybridVideoPlayerSourceFactorySpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoPlayerSourceFactory]" + } +} + /// See ``HybridVideoPlayerSourceFactorySpec`` open class HybridVideoPlayerSourceFactorySpec_base { private weak var cxxWrapper: HybridVideoPlayerSourceFactorySpec_cxx? = nil diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift index a6978fc0..d35fbc43 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoPlayerSourceFactorySpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoPlayerSourceFactorySpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoPlayerSourceFactorySpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoPlayerSourceFactorySpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift index 0bf86e9a..58094086 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift @@ -18,6 +18,13 @@ public protocol HybridVideoPlayerSourceSpec_protocol: HybridObject { func getAssetInformationAsync() throws -> Promise } +public extension HybridVideoPlayerSourceSpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoPlayerSource]" + } +} + /// See ``HybridVideoPlayerSourceSpec`` open class HybridVideoPlayerSourceSpec_base { private weak var cxxWrapper: HybridVideoPlayerSourceSpec_cxx? = nil diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift index 810c8253..c5fb6152 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoPlayerSourceSpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoPlayerSourceSpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoPlayerSourceSpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoPlayerSourceSpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties public final var uri: std.string { @inline(__always) 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 a72adeb6..a3f913c5 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift @@ -29,9 +29,9 @@ public protocol HybridVideoPlayerSpec_protocol: HybridObject { var selectedTrack: TextTrack? { get } // Methods - func replaceSourceAsync(source: (any HybridVideoPlayerSourceSpec)?) throws -> Promise + func replaceSourceAsync(source: Variant_NullType__any_HybridVideoPlayerSourceSpec_?) throws -> Promise func getAvailableTextTracks() throws -> [TextTrack] - func selectTextTrack(textTrack: TextTrack?) throws -> Void + func selectTextTrack(textTrack: Variant_NullType_TextTrack?) throws -> Void func initialize() throws -> Promise func preload() throws -> Promise func play() throws -> Void @@ -40,6 +40,13 @@ public protocol HybridVideoPlayerSpec_protocol: HybridObject { func seekTo(time: Double) throws -> Void } +public extension HybridVideoPlayerSpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoPlayer]" + } +} + /// See ``HybridVideoPlayerSpec`` open class HybridVideoPlayerSpec_base { private weak var cxxWrapper: HybridVideoPlayerSpec_cxx? = nil 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 d3ab0e10..b72d0bb6 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 @@ -76,7 +76,7 @@ open class HybridVideoPlayerSpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoPlayerSpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoPlayerSpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoPlayerSpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties public final var source: bridge.std__shared_ptr_HybridVideoPlayerSourceSpec_ { @inline(__always) @@ -272,15 +280,27 @@ open class HybridVideoPlayerSpec_cxx { // Methods @inline(__always) - public final func replaceSourceAsync(source: bridge.std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__) -> bridge.Result_std__shared_ptr_Promise_void___ { + public final func replaceSourceAsync(source: bridge.std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___) -> bridge.Result_std__shared_ptr_Promise_void___ { do { - let __result = try self.__implementation.replaceSourceAsync(source: { () -> (any HybridVideoPlayerSourceSpec)? in - if bridge.has_value_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(source) { - let __unwrapped = bridge.get_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(source) - return { () -> HybridVideoPlayerSourceSpec in - let __unsafePointer = bridge.get_std__shared_ptr_HybridVideoPlayerSourceSpec_(__unwrapped) - let __instance = HybridVideoPlayerSourceSpec_cxx.fromUnsafe(__unsafePointer) - return __instance.getHybridVideoPlayerSourceSpec() + let __result = try self.__implementation.replaceSourceAsync(source: { () -> Variant_NullType__any_HybridVideoPlayerSourceSpec_? in + if bridge.has_value_std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___(source) { + let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec___(source) + return { () -> Variant_NullType__any_HybridVideoPlayerSourceSpec_ in + let __variant = bridge.std__variant_nitro__NullType__std__shared_ptr_HybridVideoPlayerSourceSpec__(__unwrapped) + switch __variant.index() { + case 0: + let __actual = __variant.get_0() + return .first(NullType.null) + case 1: + let __actual = __variant.get_1() + return .second({ () -> HybridVideoPlayerSourceSpec in + let __unsafePointer = bridge.get_std__shared_ptr_HybridVideoPlayerSourceSpec_(__actual) + let __instance = HybridVideoPlayerSourceSpec_cxx.fromUnsafe(__unsafePointer) + return __instance.getHybridVideoPlayerSourceSpec() + }()) + default: + fatalError("Variant can never have index \(__variant.index())!") + } }() } else { return nil @@ -320,9 +340,28 @@ open class HybridVideoPlayerSpec_cxx { } @inline(__always) - public final func selectTextTrack(textTrack: bridge.std__optional_TextTrack_) -> bridge.Result_void_ { + public final func selectTextTrack(textTrack: bridge.std__optional_std__variant_nitro__NullType__TextTrack__) -> bridge.Result_void_ { do { - try self.__implementation.selectTextTrack(textTrack: textTrack.value) + try self.__implementation.selectTextTrack(textTrack: { () -> Variant_NullType_TextTrack? in + if bridge.has_value_std__optional_std__variant_nitro__NullType__TextTrack__(textTrack) { + let __unwrapped = bridge.get_std__optional_std__variant_nitro__NullType__TextTrack__(textTrack) + return { () -> Variant_NullType_TextTrack in + let __variant = bridge.std__variant_nitro__NullType__TextTrack_(__unwrapped) + switch __variant.index() { + case 0: + let __actual = __variant.get_0() + return .first(NullType.null) + case 1: + let __actual = __variant.get_1() + return .second(__actual) + default: + fatalError("Variant can never have index \(__variant.index())!") + } + }() + } else { + return nil + } + }()) return bridge.create_Result_void_() } catch (let __error) { let __exceptionPtr = __error.toCpp() diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift index cdbbbe1e..493ed451 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift @@ -17,6 +17,13 @@ public protocol HybridVideoViewViewManagerFactorySpec_protocol: HybridObject { func createViewManager(nitroId: Double) throws -> (any HybridVideoViewViewManagerSpec) } +public extension HybridVideoViewViewManagerFactorySpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoViewViewManagerFactory]" + } +} + /// See ``HybridVideoViewViewManagerFactorySpec`` open class HybridVideoViewViewManagerFactorySpec_base { private weak var cxxWrapper: HybridVideoViewViewManagerFactorySpec_cxx? = nil diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift index 112b5698..5070b181 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoViewViewManagerFactorySpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoViewViewManagerFactorySpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoViewViewManagerFactorySpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoViewViewManagerFactorySpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift index 0f731fcc..be6f7c71 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift @@ -18,12 +18,6 @@ public protocol HybridVideoViewViewManagerSpec_protocol: HybridObject { var resizeMode: ResizeMode { get set } var keepScreenAwake: Bool { get set } var surfaceType: SurfaceType { get set } - var onPictureInPictureChange: ((_ isInPictureInPicture: Bool) -> Void)? { get set } - var onFullscreenChange: ((_ fullscreen: Bool) -> Void)? { get set } - var willEnterFullscreen: (() -> Void)? { get set } - var willExitFullscreen: (() -> Void)? { get set } - var willEnterPictureInPicture: (() -> Void)? { get set } - var willExitPictureInPicture: (() -> Void)? { get set } // Methods func enterFullscreen() throws -> Void @@ -31,6 +25,20 @@ public protocol HybridVideoViewViewManagerSpec_protocol: HybridObject { func enterPictureInPicture() throws -> Void func exitPictureInPicture() throws -> Void func canEnterPictureInPicture() throws -> Bool + func addOnPictureInPictureChangeListener(listener: @escaping (_ isInPictureInPicture: Bool) -> Void) throws -> ListenerSubscription + func addOnFullscreenChangeListener(listener: @escaping (_ fullscreen: Bool) -> Void) throws -> ListenerSubscription + func addWillEnterFullscreenListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addWillExitFullscreenListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addWillEnterPictureInPictureListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func addWillExitPictureInPictureListener(listener: @escaping () -> Void) throws -> ListenerSubscription + func clearAllListeners() throws -> Void +} + +public extension HybridVideoViewViewManagerSpec_protocol { + /// Default implementation of ``HybridObject.toString`` + func toString() -> String { + return "[HybridObject VideoViewViewManager]" + } } /// See ``HybridVideoViewViewManagerSpec`` diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift index b6ef9f04..7577cd71 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift @@ -76,7 +76,7 @@ open class HybridVideoViewViewManagerSpec_cxx { */ public func getCxxPart() -> bridge.std__shared_ptr_HybridVideoViewViewManagerSpec_ { let cachedCxxPart = self.__cxxPart.lock() - if cachedCxxPart.__convertToBool() { + if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridVideoViewViewManagerSpec_(self.toUnsafe()) @@ -105,6 +105,14 @@ open class HybridVideoViewViewManagerSpec_cxx { self.__implementation.dispose() } + /** + * Call toString() on the Swift class. + */ + @inline(__always) + public func toString() -> String { + return self.__implementation.toString() + } + // Properties public final var player: bridge.std__optional_std__shared_ptr_HybridVideoPlayerSpec__ { @inline(__always) @@ -202,198 +210,6 @@ open class HybridVideoViewViewManagerSpec_cxx { self.__implementation.surfaceType = margelo.nitro.video.SurfaceType(rawValue: newValue)! } } - - public final var onPictureInPictureChange: bridge.std__optional_std__function_void_bool____isInPictureInPicture______ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void_bool____isInPictureInPicture______ in - if let __unwrappedValue = self.__implementation.onPictureInPictureChange { - return bridge.create_std__optional_std__function_void_bool____isInPictureInPicture______({ () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(__unwrappedValue) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.onPictureInPictureChange = { () -> ((_ isInPictureInPicture: Bool) -> Void)? in - if bridge.has_value_std__optional_std__function_void_bool____isInPictureInPicture______(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void_bool____isInPictureInPicture______(newValue) - return { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(__unwrapped) - return { (__isInPictureInPicture: Bool) -> Void in - __wrappedFunction.call(__isInPictureInPicture) - } - }() - } else { - return nil - } - }() - } - } - - public final var onFullscreenChange: bridge.std__optional_std__function_void_bool____fullscreen______ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void_bool____fullscreen______ in - if let __unwrappedValue = self.__implementation.onFullscreenChange { - return bridge.create_std__optional_std__function_void_bool____fullscreen______({ () -> bridge.Func_void_bool in - let __closureWrapper = Func_void_bool(__unwrappedValue) - return bridge.create_Func_void_bool(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.onFullscreenChange = { () -> ((_ fullscreen: Bool) -> Void)? in - if bridge.has_value_std__optional_std__function_void_bool____fullscreen______(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void_bool____fullscreen______(newValue) - return { () -> (Bool) -> Void in - let __wrappedFunction = bridge.wrap_Func_void_bool(__unwrapped) - return { (__fullscreen: Bool) -> Void in - __wrappedFunction.call(__fullscreen) - } - }() - } else { - return nil - } - }() - } - } - - public final var willEnterFullscreen: bridge.std__optional_std__function_void____ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void____ in - if let __unwrappedValue = self.__implementation.willEnterFullscreen { - return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in - let __closureWrapper = Func_void(__unwrappedValue) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.willEnterFullscreen = { () -> (() -> Void)? in - if bridge.has_value_std__optional_std__function_void____(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void____(newValue) - return { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(__unwrapped) - return { () -> Void in - __wrappedFunction.call() - } - }() - } else { - return nil - } - }() - } - } - - public final var willExitFullscreen: bridge.std__optional_std__function_void____ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void____ in - if let __unwrappedValue = self.__implementation.willExitFullscreen { - return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in - let __closureWrapper = Func_void(__unwrappedValue) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.willExitFullscreen = { () -> (() -> Void)? in - if bridge.has_value_std__optional_std__function_void____(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void____(newValue) - return { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(__unwrapped) - return { () -> Void in - __wrappedFunction.call() - } - }() - } else { - return nil - } - }() - } - } - - public final var willEnterPictureInPicture: bridge.std__optional_std__function_void____ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void____ in - if let __unwrappedValue = self.__implementation.willEnterPictureInPicture { - return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in - let __closureWrapper = Func_void(__unwrappedValue) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.willEnterPictureInPicture = { () -> (() -> Void)? in - if bridge.has_value_std__optional_std__function_void____(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void____(newValue) - return { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(__unwrapped) - return { () -> Void in - __wrappedFunction.call() - } - }() - } else { - return nil - } - }() - } - } - - public final var willExitPictureInPicture: bridge.std__optional_std__function_void____ { - @inline(__always) - get { - return { () -> bridge.std__optional_std__function_void____ in - if let __unwrappedValue = self.__implementation.willExitPictureInPicture { - return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in - let __closureWrapper = Func_void(__unwrappedValue) - return bridge.create_Func_void(__closureWrapper.toUnsafe()) - }()) - } else { - return .init() - } - }() - } - @inline(__always) - set { - self.__implementation.willExitPictureInPicture = { () -> (() -> Void)? in - if bridge.has_value_std__optional_std__function_void____(newValue) { - let __unwrapped = bridge.get_std__optional_std__function_void____(newValue) - return { () -> () -> Void in - let __wrappedFunction = bridge.wrap_Func_void(__unwrapped) - return { () -> Void in - __wrappedFunction.call() - } - }() - } else { - return nil - } - }() - } - } // Methods @inline(__always) @@ -451,4 +267,117 @@ open class HybridVideoViewViewManagerSpec_cxx { return bridge.create_Result_bool_(__exceptionPtr) } } + + @inline(__always) + public final func addOnPictureInPictureChangeListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnPictureInPictureChangeListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) + return { (__isInPictureInPicture: Bool) -> Void in + __wrappedFunction.call(__isInPictureInPicture) + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func addOnFullscreenChangeListener(listener: bridge.Func_void_bool) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addOnFullscreenChangeListener(listener: { () -> (Bool) -> Void in + let __wrappedFunction = bridge.wrap_Func_void_bool(listener) + return { (__fullscreen: Bool) -> Void in + __wrappedFunction.call(__fullscreen) + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func addWillEnterFullscreenListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addWillEnterFullscreenListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) + return { () -> Void in + __wrappedFunction.call() + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func addWillExitFullscreenListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addWillExitFullscreenListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) + return { () -> Void in + __wrappedFunction.call() + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func addWillEnterPictureInPictureListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addWillEnterPictureInPictureListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) + return { () -> Void in + __wrappedFunction.call() + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func addWillExitPictureInPictureListener(listener: bridge.Func_void) -> bridge.Result_ListenerSubscription_ { + do { + let __result = try self.__implementation.addWillExitPictureInPictureListener(listener: { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(listener) + return { () -> Void in + __wrappedFunction.call() + } + }()) + let __resultCpp = __result + return bridge.create_Result_ListenerSubscription_(__resultCpp) + } catch (let __error) { + let __exceptionPtr = __error.toCpp() + return bridge.create_Result_ListenerSubscription_(__exceptionPtr) + } + } + + @inline(__always) + public final func clearAllListeners() -> bridge.Result_void_ { + do { + try self.__implementation.clearAllListeners() + 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/ios/swift/ListenerSubscription.swift b/packages/react-native-video/nitrogen/generated/ios/swift/ListenerSubscription.swift new file mode 100644 index 00000000..ec697b3e --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/ios/swift/ListenerSubscription.swift @@ -0,0 +1,47 @@ +/// +/// ListenerSubscription.swift +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +import Foundation +import NitroModules + +/** + * Represents an instance of `ListenerSubscription`, backed by a C++ struct. + */ +public typealias ListenerSubscription = margelo.nitro.video.ListenerSubscription + +public extension ListenerSubscription { + private typealias bridge = margelo.nitro.video.bridge.swift + + /** + * Create a new instance of `ListenerSubscription`. + */ + init(remove: @escaping () -> Void) { + self.init({ () -> bridge.Func_void in + let __closureWrapper = Func_void(remove) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }()) + } + + var remove: () -> Void { + @inline(__always) + get { + return { () -> () -> Void in + let __wrappedFunction = bridge.wrap_Func_void(self.__remove) + return { () -> Void in + __wrappedFunction.call() + } + }() + } + @inline(__always) + set { + self.__remove = { () -> bridge.Func_void in + let __closureWrapper = Func_void(newValue) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + } + } +} diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/LivePlaybackParams.swift b/packages/react-native-video/nitrogen/generated/ios/swift/LivePlaybackParams.swift index 64c31c5c..efa07484 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/LivePlaybackParams.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/LivePlaybackParams.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** @@ -55,14 +56,7 @@ public extension LivePlaybackParams { var minPlaybackSpeed: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__minPlaybackSpeed) { - let __unwrapped = bridge.get_std__optional_double_(self.__minPlaybackSpeed) - return __unwrapped - } else { - return nil - } - }() + return self.__minPlaybackSpeed.value } @inline(__always) set { @@ -79,14 +73,7 @@ public extension LivePlaybackParams { var maxPlaybackSpeed: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__maxPlaybackSpeed) { - let __unwrapped = bridge.get_std__optional_double_(self.__maxPlaybackSpeed) - return __unwrapped - } else { - return nil - } - }() + return self.__maxPlaybackSpeed.value } @inline(__always) set { @@ -103,14 +90,7 @@ public extension LivePlaybackParams { var maxOffsetMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__maxOffsetMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__maxOffsetMs) - return __unwrapped - } else { - return nil - } - }() + return self.__maxOffsetMs.value } @inline(__always) set { @@ -127,14 +107,7 @@ public extension LivePlaybackParams { var minOffsetMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__minOffsetMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__minOffsetMs) - return __unwrapped - } else { - return nil - } - }() + return self.__minOffsetMs.value } @inline(__always) set { @@ -151,14 +124,7 @@ public extension LivePlaybackParams { var targetOffsetMs: Double? { @inline(__always) get { - return { () -> Double? in - if bridge.has_value_std__optional_double_(self.__targetOffsetMs) { - let __unwrapped = bridge.get_std__optional_double_(self.__targetOffsetMs) - return __unwrapped - } else { - return nil - } - }() + return self.__targetOffsetMs.value } @inline(__always) set { diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/NativeDrmParams.swift b/packages/react-native-video/nitrogen/generated/ios/swift/NativeDrmParams.swift index 177a5ed5..7106472a 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/NativeDrmParams.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/NativeDrmParams.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift b/packages/react-native-video/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift index 472a8ddb..3f656e1a 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/NativeVideoConfig.swift b/packages/react-native-video/nitrogen/generated/ios/swift/NativeVideoConfig.swift index 67a4aead..525ffad3 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/NativeVideoConfig.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/NativeVideoConfig.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/OnGetLicensePayload.swift b/packages/react-native-video/nitrogen/generated/ios/swift/OnGetLicensePayload.swift index f7a8e345..498e4e57 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/OnGetLicensePayload.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/OnGetLicensePayload.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Resolution.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Resolution.swift index 3b85fa07..e79ad0b3 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/Resolution.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Resolution.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/TextTrack.swift b/packages/react-native-video/nitrogen/generated/ios/swift/TextTrack.swift index f582412f..2973d440 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/TextTrack.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/TextTrack.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadata.swift b/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadata.swift index b0a231b7..37786bca 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadata.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadata.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadataObject.swift b/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadataObject.swift index 70dcf655..68ad441c 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadataObject.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/TimedMetadataObject.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType_TextTrack.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType_TextTrack.swift new file mode 100644 index 00000000..37de7dc3 --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType_TextTrack.swift @@ -0,0 +1,18 @@ +/// +/// Variant_NullType_TextTrack.swift +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +import NitroModules + +/** + * An Swift enum with associated values representing a Variant/Union type. + * JS type: `null | struct` + */ +@frozen +public indirect enum Variant_NullType_TextTrack { + case first(NullType) + case second(TextTrack) +} diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift b/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift new file mode 100644 index 00000000..401804ec --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/ios/swift/Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift @@ -0,0 +1,18 @@ +/// +/// Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +import NitroModules + +/** + * An Swift enum with associated values representing a Variant/Union type. + * JS type: `null | hybrid-object` + */ +@frozen +public indirect enum Variant_NullType__any_HybridVideoPlayerSourceSpec_ { + case first(NullType) + case second((any HybridVideoPlayerSourceSpec)) +} diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/VideoInformation.swift b/packages/react-native-video/nitrogen/generated/ios/swift/VideoInformation.swift index 0d01a50a..71d470c1 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/VideoInformation.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/VideoInformation.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/onLoadData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/onLoadData.swift index 301d21d3..20af3eca 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/onLoadData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/onLoadData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/onLoadStartData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/onLoadStartData.swift index e5a63cfc..b09b3901 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/onLoadStartData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/onLoadStartData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift index daa5601e..3868931a 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/onProgressData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/onProgressData.swift index 9eda524d..d78b479f 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/onProgressData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/onProgressData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/ios/swift/onVolumeChangeData.swift b/packages/react-native-video/nitrogen/generated/ios/swift/onVolumeChangeData.swift index ab9b5410..ddd7790d 100644 --- a/packages/react-native-video/nitrogen/generated/ios/swift/onVolumeChangeData.swift +++ b/packages/react-native-video/nitrogen/generated/ios/swift/onVolumeChangeData.swift @@ -5,6 +5,7 @@ /// Copyright © 2025 Marc Rousavy @ Margelo /// +import Foundation import NitroModules /** diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp index 09a17aa1..526b5cff 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp @@ -14,44 +14,26 @@ namespace margelo::nitro::video { HybridObject::loadHybridMethods(); // load custom methods/properties registerHybrids(this, [](Prototype& prototype) { - prototype.registerHybridGetter("onAudioBecomingNoisy", &HybridVideoPlayerEventEmitterSpec::getOnAudioBecomingNoisy); - prototype.registerHybridSetter("onAudioBecomingNoisy", &HybridVideoPlayerEventEmitterSpec::setOnAudioBecomingNoisy); - prototype.registerHybridGetter("onAudioFocusChange", &HybridVideoPlayerEventEmitterSpec::getOnAudioFocusChange); - prototype.registerHybridSetter("onAudioFocusChange", &HybridVideoPlayerEventEmitterSpec::setOnAudioFocusChange); - prototype.registerHybridGetter("onBandwidthUpdate", &HybridVideoPlayerEventEmitterSpec::getOnBandwidthUpdate); - prototype.registerHybridSetter("onBandwidthUpdate", &HybridVideoPlayerEventEmitterSpec::setOnBandwidthUpdate); - prototype.registerHybridGetter("onBuffer", &HybridVideoPlayerEventEmitterSpec::getOnBuffer); - prototype.registerHybridSetter("onBuffer", &HybridVideoPlayerEventEmitterSpec::setOnBuffer); - prototype.registerHybridGetter("onControlsVisibleChange", &HybridVideoPlayerEventEmitterSpec::getOnControlsVisibleChange); - prototype.registerHybridSetter("onControlsVisibleChange", &HybridVideoPlayerEventEmitterSpec::setOnControlsVisibleChange); - prototype.registerHybridGetter("onEnd", &HybridVideoPlayerEventEmitterSpec::getOnEnd); - prototype.registerHybridSetter("onEnd", &HybridVideoPlayerEventEmitterSpec::setOnEnd); - prototype.registerHybridGetter("onExternalPlaybackChange", &HybridVideoPlayerEventEmitterSpec::getOnExternalPlaybackChange); - prototype.registerHybridSetter("onExternalPlaybackChange", &HybridVideoPlayerEventEmitterSpec::setOnExternalPlaybackChange); - prototype.registerHybridGetter("onLoad", &HybridVideoPlayerEventEmitterSpec::getOnLoad); - prototype.registerHybridSetter("onLoad", &HybridVideoPlayerEventEmitterSpec::setOnLoad); - prototype.registerHybridGetter("onLoadStart", &HybridVideoPlayerEventEmitterSpec::getOnLoadStart); - prototype.registerHybridSetter("onLoadStart", &HybridVideoPlayerEventEmitterSpec::setOnLoadStart); - prototype.registerHybridGetter("onPlaybackStateChange", &HybridVideoPlayerEventEmitterSpec::getOnPlaybackStateChange); - prototype.registerHybridSetter("onPlaybackStateChange", &HybridVideoPlayerEventEmitterSpec::setOnPlaybackStateChange); - prototype.registerHybridGetter("onPlaybackRateChange", &HybridVideoPlayerEventEmitterSpec::getOnPlaybackRateChange); - prototype.registerHybridSetter("onPlaybackRateChange", &HybridVideoPlayerEventEmitterSpec::setOnPlaybackRateChange); - prototype.registerHybridGetter("onProgress", &HybridVideoPlayerEventEmitterSpec::getOnProgress); - prototype.registerHybridSetter("onProgress", &HybridVideoPlayerEventEmitterSpec::setOnProgress); - prototype.registerHybridGetter("onReadyToDisplay", &HybridVideoPlayerEventEmitterSpec::getOnReadyToDisplay); - prototype.registerHybridSetter("onReadyToDisplay", &HybridVideoPlayerEventEmitterSpec::setOnReadyToDisplay); - prototype.registerHybridGetter("onSeek", &HybridVideoPlayerEventEmitterSpec::getOnSeek); - prototype.registerHybridSetter("onSeek", &HybridVideoPlayerEventEmitterSpec::setOnSeek); - prototype.registerHybridGetter("onTimedMetadata", &HybridVideoPlayerEventEmitterSpec::getOnTimedMetadata); - prototype.registerHybridSetter("onTimedMetadata", &HybridVideoPlayerEventEmitterSpec::setOnTimedMetadata); - prototype.registerHybridGetter("onTextTrackDataChanged", &HybridVideoPlayerEventEmitterSpec::getOnTextTrackDataChanged); - prototype.registerHybridSetter("onTextTrackDataChanged", &HybridVideoPlayerEventEmitterSpec::setOnTextTrackDataChanged); - prototype.registerHybridGetter("onTrackChange", &HybridVideoPlayerEventEmitterSpec::getOnTrackChange); - prototype.registerHybridSetter("onTrackChange", &HybridVideoPlayerEventEmitterSpec::setOnTrackChange); - prototype.registerHybridGetter("onVolumeChange", &HybridVideoPlayerEventEmitterSpec::getOnVolumeChange); - prototype.registerHybridSetter("onVolumeChange", &HybridVideoPlayerEventEmitterSpec::setOnVolumeChange); - prototype.registerHybridGetter("onStatusChange", &HybridVideoPlayerEventEmitterSpec::getOnStatusChange); - prototype.registerHybridSetter("onStatusChange", &HybridVideoPlayerEventEmitterSpec::setOnStatusChange); + prototype.registerHybridMethod("addOnAudioBecomingNoisyListener", &HybridVideoPlayerEventEmitterSpec::addOnAudioBecomingNoisyListener); + prototype.registerHybridMethod("addOnAudioFocusChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnAudioFocusChangeListener); + prototype.registerHybridMethod("addOnBandwidthUpdateListener", &HybridVideoPlayerEventEmitterSpec::addOnBandwidthUpdateListener); + prototype.registerHybridMethod("addOnBufferListener", &HybridVideoPlayerEventEmitterSpec::addOnBufferListener); + prototype.registerHybridMethod("addOnControlsVisibleChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnControlsVisibleChangeListener); + prototype.registerHybridMethod("addOnEndListener", &HybridVideoPlayerEventEmitterSpec::addOnEndListener); + prototype.registerHybridMethod("addOnExternalPlaybackChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnExternalPlaybackChangeListener); + prototype.registerHybridMethod("addOnLoadListener", &HybridVideoPlayerEventEmitterSpec::addOnLoadListener); + prototype.registerHybridMethod("addOnLoadStartListener", &HybridVideoPlayerEventEmitterSpec::addOnLoadStartListener); + prototype.registerHybridMethod("addOnPlaybackStateChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnPlaybackStateChangeListener); + prototype.registerHybridMethod("addOnPlaybackRateChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnPlaybackRateChangeListener); + prototype.registerHybridMethod("addOnProgressListener", &HybridVideoPlayerEventEmitterSpec::addOnProgressListener); + prototype.registerHybridMethod("addOnReadyToDisplayListener", &HybridVideoPlayerEventEmitterSpec::addOnReadyToDisplayListener); + prototype.registerHybridMethod("addOnSeekListener", &HybridVideoPlayerEventEmitterSpec::addOnSeekListener); + prototype.registerHybridMethod("addOnStatusChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnStatusChangeListener); + prototype.registerHybridMethod("addOnTimedMetadataListener", &HybridVideoPlayerEventEmitterSpec::addOnTimedMetadataListener); + prototype.registerHybridMethod("addOnTextTrackDataChangedListener", &HybridVideoPlayerEventEmitterSpec::addOnTextTrackDataChangedListener); + prototype.registerHybridMethod("addOnTrackChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnTrackChangeListener); + prototype.registerHybridMethod("addOnVolumeChangeListener", &HybridVideoPlayerEventEmitterSpec::addOnVolumeChangeListener); + prototype.registerHybridMethod("clearAllListeners", &HybridVideoPlayerEventEmitterSpec::clearAllListeners); }); } diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp index d5fac00b..8423c160 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp @@ -13,6 +13,8 @@ #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } // Forward declaration of `BandwidthData` to properly resolve imports. namespace margelo::nitro::video { struct BandwidthData; } // Forward declaration of `onLoadData` to properly resolve imports. @@ -23,28 +25,31 @@ namespace margelo::nitro::video { struct onLoadStartData; } namespace margelo::nitro::video { struct onPlaybackStateChangeData; } // Forward declaration of `onProgressData` to properly resolve imports. namespace margelo::nitro::video { struct onProgressData; } +// Forward declaration of `VideoPlayerStatus` to properly resolve imports. +namespace margelo::nitro::video { enum class VideoPlayerStatus; } // Forward declaration of `TimedMetadata` to properly resolve imports. namespace margelo::nitro::video { struct TimedMetadata; } // Forward declaration of `TextTrack` to properly resolve imports. namespace margelo::nitro::video { struct TextTrack; } // Forward declaration of `onVolumeChangeData` to properly resolve imports. namespace margelo::nitro::video { struct onVolumeChangeData; } -// Forward declaration of `VideoPlayerStatus` to properly resolve imports. -namespace margelo::nitro::video { enum class VideoPlayerStatus; } +#include "ListenerSubscription.hpp" #include #include "BandwidthData.hpp" #include "onLoadData.hpp" #include "onLoadStartData.hpp" #include "onPlaybackStateChangeData.hpp" #include "onProgressData.hpp" +#include "VideoPlayerStatus.hpp" #include "TimedMetadata.hpp" #include #include +#include #include "TextTrack.hpp" +#include #include #include "onVolumeChangeData.hpp" -#include "VideoPlayerStatus.hpp" namespace margelo::nitro::video { @@ -73,48 +78,30 @@ namespace margelo::nitro::video { public: // Properties - virtual std::function getOnAudioBecomingNoisy() = 0; - virtual void setOnAudioBecomingNoisy(const std::function& onAudioBecomingNoisy) = 0; - virtual std::function getOnAudioFocusChange() = 0; - virtual void setOnAudioFocusChange(const std::function& onAudioFocusChange) = 0; - virtual std::function getOnBandwidthUpdate() = 0; - virtual void setOnBandwidthUpdate(const std::function& onBandwidthUpdate) = 0; - virtual std::function getOnBuffer() = 0; - virtual void setOnBuffer(const std::function& onBuffer) = 0; - virtual std::function getOnControlsVisibleChange() = 0; - virtual void setOnControlsVisibleChange(const std::function& onControlsVisibleChange) = 0; - virtual std::function getOnEnd() = 0; - virtual void setOnEnd(const std::function& onEnd) = 0; - virtual std::function getOnExternalPlaybackChange() = 0; - virtual void setOnExternalPlaybackChange(const std::function& onExternalPlaybackChange) = 0; - virtual std::function getOnLoad() = 0; - virtual void setOnLoad(const std::function& onLoad) = 0; - virtual std::function getOnLoadStart() = 0; - virtual void setOnLoadStart(const std::function& onLoadStart) = 0; - virtual std::function getOnPlaybackStateChange() = 0; - virtual void setOnPlaybackStateChange(const std::function& onPlaybackStateChange) = 0; - virtual std::function getOnPlaybackRateChange() = 0; - virtual void setOnPlaybackRateChange(const std::function& onPlaybackRateChange) = 0; - virtual std::function getOnProgress() = 0; - virtual void setOnProgress(const std::function& onProgress) = 0; - virtual std::function getOnReadyToDisplay() = 0; - virtual void setOnReadyToDisplay(const std::function& onReadyToDisplay) = 0; - virtual std::function getOnSeek() = 0; - virtual void setOnSeek(const std::function& onSeek) = 0; - virtual std::function getOnTimedMetadata() = 0; - virtual void setOnTimedMetadata(const std::function& onTimedMetadata) = 0; - virtual std::function& /* texts */)> getOnTextTrackDataChanged() = 0; - virtual void setOnTextTrackDataChanged(const std::function& /* texts */)>& onTextTrackDataChanged) = 0; - virtual std::function& /* track */)> getOnTrackChange() = 0; - virtual void setOnTrackChange(const std::function& /* track */)>& onTrackChange) = 0; - virtual std::function getOnVolumeChange() = 0; - virtual void setOnVolumeChange(const std::function& onVolumeChange) = 0; - virtual std::function getOnStatusChange() = 0; - virtual void setOnStatusChange(const std::function& onStatusChange) = 0; + public: // Methods - + virtual ListenerSubscription addOnAudioBecomingNoisyListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnAudioFocusChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnBandwidthUpdateListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnBufferListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnControlsVisibleChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnEndListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnExternalPlaybackChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnLoadListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnLoadStartListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnPlaybackStateChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnPlaybackRateChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnProgressListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnReadyToDisplayListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnSeekListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnStatusChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnTimedMetadataListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnTextTrackDataChangedListener(const std::function& /* data */)>& listener) = 0; + virtual ListenerSubscription addOnTrackChangeListener(const std::function>& /* track */)>& listener) = 0; + virtual ListenerSubscription addOnVolumeChangeListener(const std::function& listener) = 0; + virtual void clearAllListeners() = 0; protected: // Hybrid Setup 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 c4ca014b..bd9f9eca 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp @@ -35,6 +35,8 @@ namespace margelo::nitro::video { struct TextTrack; } #include "TextTrack.hpp" #include #include +#include +#include #include namespace margelo::nitro::video { @@ -93,9 +95,9 @@ namespace margelo::nitro::video { public: // Methods - virtual std::shared_ptr> replaceSourceAsync(const std::optional>& source) = 0; + virtual std::shared_ptr> replaceSourceAsync(const std::optional>>& source) = 0; virtual std::vector getAvailableTextTracks() = 0; - virtual void selectTextTrack(const std::optional& textTrack) = 0; + virtual void selectTextTrack(const std::optional>& textTrack) = 0; virtual std::shared_ptr> initialize() = 0; virtual std::shared_ptr> preload() = 0; virtual void play() = 0; diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp index 713cc6c4..b4b06b54 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp @@ -28,23 +28,18 @@ namespace margelo::nitro::video { prototype.registerHybridSetter("keepScreenAwake", &HybridVideoViewViewManagerSpec::setKeepScreenAwake); prototype.registerHybridGetter("surfaceType", &HybridVideoViewViewManagerSpec::getSurfaceType); prototype.registerHybridSetter("surfaceType", &HybridVideoViewViewManagerSpec::setSurfaceType); - prototype.registerHybridGetter("onPictureInPictureChange", &HybridVideoViewViewManagerSpec::getOnPictureInPictureChange); - prototype.registerHybridSetter("onPictureInPictureChange", &HybridVideoViewViewManagerSpec::setOnPictureInPictureChange); - prototype.registerHybridGetter("onFullscreenChange", &HybridVideoViewViewManagerSpec::getOnFullscreenChange); - prototype.registerHybridSetter("onFullscreenChange", &HybridVideoViewViewManagerSpec::setOnFullscreenChange); - prototype.registerHybridGetter("willEnterFullscreen", &HybridVideoViewViewManagerSpec::getWillEnterFullscreen); - prototype.registerHybridSetter("willEnterFullscreen", &HybridVideoViewViewManagerSpec::setWillEnterFullscreen); - prototype.registerHybridGetter("willExitFullscreen", &HybridVideoViewViewManagerSpec::getWillExitFullscreen); - prototype.registerHybridSetter("willExitFullscreen", &HybridVideoViewViewManagerSpec::setWillExitFullscreen); - prototype.registerHybridGetter("willEnterPictureInPicture", &HybridVideoViewViewManagerSpec::getWillEnterPictureInPicture); - prototype.registerHybridSetter("willEnterPictureInPicture", &HybridVideoViewViewManagerSpec::setWillEnterPictureInPicture); - prototype.registerHybridGetter("willExitPictureInPicture", &HybridVideoViewViewManagerSpec::getWillExitPictureInPicture); - prototype.registerHybridSetter("willExitPictureInPicture", &HybridVideoViewViewManagerSpec::setWillExitPictureInPicture); prototype.registerHybridMethod("enterFullscreen", &HybridVideoViewViewManagerSpec::enterFullscreen); prototype.registerHybridMethod("exitFullscreen", &HybridVideoViewViewManagerSpec::exitFullscreen); prototype.registerHybridMethod("enterPictureInPicture", &HybridVideoViewViewManagerSpec::enterPictureInPicture); prototype.registerHybridMethod("exitPictureInPicture", &HybridVideoViewViewManagerSpec::exitPictureInPicture); prototype.registerHybridMethod("canEnterPictureInPicture", &HybridVideoViewViewManagerSpec::canEnterPictureInPicture); + prototype.registerHybridMethod("addOnPictureInPictureChangeListener", &HybridVideoViewViewManagerSpec::addOnPictureInPictureChangeListener); + prototype.registerHybridMethod("addOnFullscreenChangeListener", &HybridVideoViewViewManagerSpec::addOnFullscreenChangeListener); + prototype.registerHybridMethod("addWillEnterFullscreenListener", &HybridVideoViewViewManagerSpec::addWillEnterFullscreenListener); + prototype.registerHybridMethod("addWillExitFullscreenListener", &HybridVideoViewViewManagerSpec::addWillExitFullscreenListener); + prototype.registerHybridMethod("addWillEnterPictureInPictureListener", &HybridVideoViewViewManagerSpec::addWillEnterPictureInPictureListener); + prototype.registerHybridMethod("addWillExitPictureInPictureListener", &HybridVideoViewViewManagerSpec::addWillExitPictureInPictureListener); + prototype.registerHybridMethod("clearAllListeners", &HybridVideoViewViewManagerSpec::clearAllListeners); }); } diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp index 3a4cba13..19318e47 100644 --- a/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp +++ b/packages/react-native-video/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp @@ -19,12 +19,15 @@ namespace margelo::nitro::video { class HybridVideoPlayerSpec; } namespace margelo::nitro::video { enum class ResizeMode; } // Forward declaration of `SurfaceType` to properly resolve imports. namespace margelo::nitro::video { enum class SurfaceType; } +// Forward declaration of `ListenerSubscription` to properly resolve imports. +namespace margelo::nitro::video { struct ListenerSubscription; } #include #include "HybridVideoPlayerSpec.hpp" #include #include "ResizeMode.hpp" #include "SurfaceType.hpp" +#include "ListenerSubscription.hpp" #include namespace margelo::nitro::video { @@ -68,18 +71,6 @@ namespace margelo::nitro::video { virtual void setKeepScreenAwake(bool keepScreenAwake) = 0; virtual SurfaceType getSurfaceType() = 0; virtual void setSurfaceType(SurfaceType surfaceType) = 0; - virtual std::optional> getOnPictureInPictureChange() = 0; - virtual void setOnPictureInPictureChange(const std::optional>& onPictureInPictureChange) = 0; - virtual std::optional> getOnFullscreenChange() = 0; - virtual void setOnFullscreenChange(const std::optional>& onFullscreenChange) = 0; - virtual std::optional> getWillEnterFullscreen() = 0; - virtual void setWillEnterFullscreen(const std::optional>& willEnterFullscreen) = 0; - virtual std::optional> getWillExitFullscreen() = 0; - virtual void setWillExitFullscreen(const std::optional>& willExitFullscreen) = 0; - virtual std::optional> getWillEnterPictureInPicture() = 0; - virtual void setWillEnterPictureInPicture(const std::optional>& willEnterPictureInPicture) = 0; - virtual std::optional> getWillExitPictureInPicture() = 0; - virtual void setWillExitPictureInPicture(const std::optional>& willExitPictureInPicture) = 0; public: // Methods @@ -88,6 +79,13 @@ namespace margelo::nitro::video { virtual void enterPictureInPicture() = 0; virtual void exitPictureInPicture() = 0; virtual bool canEnterPictureInPicture() = 0; + virtual ListenerSubscription addOnPictureInPictureChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addOnFullscreenChangeListener(const std::function& listener) = 0; + virtual ListenerSubscription addWillEnterFullscreenListener(const std::function& listener) = 0; + virtual ListenerSubscription addWillExitFullscreenListener(const std::function& listener) = 0; + virtual ListenerSubscription addWillEnterPictureInPictureListener(const std::function& listener) = 0; + virtual ListenerSubscription addWillExitPictureInPictureListener(const std::function& listener) = 0; + virtual void clearAllListeners() = 0; protected: // Hybrid Setup diff --git a/packages/react-native-video/nitrogen/generated/shared/c++/ListenerSubscription.hpp b/packages/react-native-video/nitrogen/generated/shared/c++/ListenerSubscription.hpp new file mode 100644 index 00000000..7e1e949f --- /dev/null +++ b/packages/react-native-video/nitrogen/generated/shared/c++/ListenerSubscription.hpp @@ -0,0 +1,75 @@ +/// +/// ListenerSubscription.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif + + + +#include + +namespace margelo::nitro::video { + + /** + * A struct which can be represented as a JavaScript object (ListenerSubscription). + */ + struct ListenerSubscription { + public: + std::function remove SWIFT_PRIVATE; + + public: + ListenerSubscription() = default; + explicit ListenerSubscription(std::function remove): remove(remove) {} + }; + +} // namespace margelo::nitro::video + +namespace margelo::nitro { + + // C++ ListenerSubscription <> JS ListenerSubscription (object) + template <> + struct JSIConverter final { + static inline margelo::nitro::video::ListenerSubscription fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + jsi::Object obj = arg.asObject(runtime); + return margelo::nitro::video::ListenerSubscription( + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "remove")) + ); + } + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::video::ListenerSubscription& arg) { + jsi::Object obj(runtime); + obj.setProperty(runtime, "remove", JSIConverter>::toJSI(runtime, arg.remove)); + return obj; + } + static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { + if (!value.isObject()) { + return false; + } + jsi::Object obj = value.getObject(runtime); + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "remove"))) return false; + return true; + } + }; + +} // namespace margelo::nitro diff --git a/packages/react-native-video/package.json b/packages/react-native-video/package.json index fd432c7a..554b2e5e 100644 --- a/packages/react-native-video/package.json +++ b/packages/react-native-video/package.json @@ -80,13 +80,13 @@ "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", - "nitrogen": "^0.30.0", + "nitrogen": "^0.31.0", "prettier": "^3.0.3", "react": "18.3.1", "react-native": "^0.77.0", "@react-native/eslint-config": "^0.77.0", "react-native-builder-bob": "^0.40.0", - "react-native-nitro-modules": "^0.30.0", + "react-native-nitro-modules": "^0.31.0", "typescript": "^5.2.2" }, "peerDependencies": { diff --git a/packages/react-native-video/src/core/VideoPlayer.ts b/packages/react-native-video/src/core/VideoPlayer.ts index 25487a3e..304e8c31 100644 --- a/packages/react-native-video/src/core/VideoPlayer.ts +++ b/packages/react-native-video/src/core/VideoPlayer.ts @@ -57,7 +57,7 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase { if ( parsedError instanceof VideoRuntimeError && - this.triggerEvent('onError', parsedError) + this.triggerJSEvent('onError', parsedError as VideoRuntimeError) ) { // We don't throw errors if onError is provided return; diff --git a/packages/react-native-video/src/core/VideoPlayerEvents.ts b/packages/react-native-video/src/core/VideoPlayerEvents.ts index 771a7357..f1a73206 100644 --- a/packages/react-native-video/src/core/VideoPlayerEvents.ts +++ b/packages/react-native-video/src/core/VideoPlayerEvents.ts @@ -1,13 +1,17 @@ -import type { VideoPlayerEventEmitter } from '../spec/nitro/VideoPlayerEventEmitter.nitro'; +import type { + ListenerSubscription, + VideoPlayerEventEmitter, +} from '../spec/nitro/VideoPlayerEventEmitter.nitro'; import { ALL_PLAYER_EVENTS, + type JSVideoPlayerEvents, type AllPlayerEvents as PlayerEvents, } from './types/Events'; export class VideoPlayerEvents { protected eventEmitter: VideoPlayerEventEmitter; - protected eventListeners: Partial< - Record void>> + protected jsEventListeners: Partial< + Record void>> > = {}; protected readonly supportedEvents: (keyof PlayerEvents)[] = @@ -15,52 +19,128 @@ export class VideoPlayerEvents { constructor(eventEmitter: VideoPlayerEventEmitter) { this.eventEmitter = eventEmitter; - for (let event of this.supportedEvents) { - // @ts-expect-error we narrow the type of the event - this.eventEmitter[event] = this.triggerEvent.bind(this, event); - } } - protected triggerEvent( + protected triggerJSEvent( event: Event, - ...params: Parameters + ...params: Parameters ): boolean { - if (!this.eventListeners[event]?.size) return false; - for (let fn of this.eventListeners[event]) { - fn(...params); - } + if (!this.jsEventListeners[event]) return false; + this.jsEventListeners[event]?.forEach((fn) => fn(...params)); return true; } + /** + * Adds a listener for a player event. + * @throw Error if the event is not supported. + * @param event - The event to add a listener for. + * @param callback - The callback to call when the event is triggered. + * @returns A subscription object that can be used to remove the listener. + */ addEventListener( event: Event, callback: PlayerEvents[Event] - ) { - this.eventListeners[event] ??= new Set(); - this.eventListeners[event].add(callback); - } - - removeEventListener( - event: Event, - callback: PlayerEvents[Event] - ) { - this.eventListeners[event]?.delete(callback); + ): ListenerSubscription { + switch (event) { + // ----------------- JS Events ----------------- + case 'onError': + this.jsEventListeners.onError ??= new Set(); + this.jsEventListeners.onError.add( + callback as JSVideoPlayerEvents['onError'] + ); + return { + remove: () => + this.jsEventListeners.onError?.delete( + callback as JSVideoPlayerEvents['onError'] + ), + }; + // ----------------- Native Events ----------------- + case 'onAudioBecomingNoisy': + return this.eventEmitter.addOnAudioBecomingNoisyListener( + callback as PlayerEvents['onAudioBecomingNoisy'] + ); + case 'onAudioFocusChange': + return this.eventEmitter.addOnAudioFocusChangeListener( + callback as PlayerEvents['onAudioFocusChange'] + ); + case 'onBandwidthUpdate': + return this.eventEmitter.addOnBandwidthUpdateListener( + callback as PlayerEvents['onBandwidthUpdate'] + ); + case 'onBuffer': + return this.eventEmitter.addOnBufferListener( + callback as PlayerEvents['onBuffer'] + ); + case 'onControlsVisibleChange': + return this.eventEmitter.addOnControlsVisibleChangeListener( + callback as PlayerEvents['onControlsVisibleChange'] + ); + case 'onEnd': + return this.eventEmitter.addOnEndListener( + callback as PlayerEvents['onEnd'] + ); + case 'onExternalPlaybackChange': + return this.eventEmitter.addOnExternalPlaybackChangeListener( + callback as PlayerEvents['onExternalPlaybackChange'] + ); + case 'onLoad': + return this.eventEmitter.addOnLoadListener( + callback as PlayerEvents['onLoad'] + ); + case 'onLoadStart': + return this.eventEmitter.addOnLoadStartListener( + callback as PlayerEvents['onLoadStart'] + ); + case 'onPlaybackStateChange': + return this.eventEmitter.addOnPlaybackStateChangeListener( + callback as PlayerEvents['onPlaybackStateChange'] + ); + case 'onPlaybackRateChange': + return this.eventEmitter.addOnPlaybackRateChangeListener( + callback as PlayerEvents['onPlaybackRateChange'] + ); + case 'onProgress': + return this.eventEmitter.addOnProgressListener( + callback as PlayerEvents['onProgress'] + ); + case 'onReadyToDisplay': + return this.eventEmitter.addOnReadyToDisplayListener( + callback as PlayerEvents['onReadyToDisplay'] + ); + case 'onSeek': + return this.eventEmitter.addOnSeekListener( + callback as PlayerEvents['onSeek'] + ); + case 'onTimedMetadata': + return this.eventEmitter.addOnTimedMetadataListener( + callback as PlayerEvents['onTimedMetadata'] + ); + case 'onTextTrackDataChanged': + return this.eventEmitter.addOnTextTrackDataChangedListener( + callback as PlayerEvents['onTextTrackDataChanged'] + ); + case 'onTrackChange': + return this.eventEmitter.addOnTrackChangeListener( + callback as PlayerEvents['onTrackChange'] + ); + case 'onVolumeChange': + return this.eventEmitter.addOnVolumeChangeListener( + callback as PlayerEvents['onVolumeChange'] + ); + case 'onStatusChange': + return this.eventEmitter.addOnStatusChangeListener( + callback as PlayerEvents['onStatusChange'] + ); + default: + throw new Error(`[React Native Video] Unsupported event: ${event}`); + } } /** * Clears all events from the event emitter. */ clearAllEvents() { - this.supportedEvents.forEach((event) => { - this.clearEvent(event); - }); - } - - /** - * Clears a specific event from the event emitter. - * @param event - The name of the event to clear. - */ - clearEvent(event: keyof PlayerEvents) { - this.eventListeners[event]?.clear(); + this.jsEventListeners = {}; + this.eventEmitter.clearAllListeners(); } } diff --git a/packages/react-native-video/src/core/hooks/useEvent.ts b/packages/react-native-video/src/core/hooks/useEvent.ts index fd970965..2755df72 100644 --- a/packages/react-native-video/src/core/hooks/useEvent.ts +++ b/packages/react-native-video/src/core/hooks/useEvent.ts @@ -15,8 +15,10 @@ export const useEvent = ( callback: AllPlayerEvents[T] ) => { useEffect(() => { - player.addEventListener(event, callback); + const subscription = player.addEventListener(event, callback); - return () => player.removeEventListener(event, callback); + return () => { + subscription.remove(); + }; }, [player, event, callback]); }; diff --git a/packages/react-native-video/src/core/types/Events.ts b/packages/react-native-video/src/core/types/Events.ts index 6d681d92..c0a3343d 100644 --- a/packages/react-native-video/src/core/types/Events.ts +++ b/packages/react-native-video/src/core/types/Events.ts @@ -93,10 +93,12 @@ export interface VideoPlayerEvents { onStatusChange: (status: VideoPlayerStatus) => void; } -export interface AllPlayerEvents extends VideoPlayerEvents { +export interface JSVideoPlayerEvents { onError: (error: VideoRuntimeError) => void; } +export type AllPlayerEvents = VideoPlayerEvents & JSVideoPlayerEvents; + export interface VideoViewEvents { /** * Called when the video view's picture in picture state changes. @@ -264,3 +266,13 @@ export const ALL_PLAYER_EVENTS: (keyof AllPlayerEvents)[] = 'onVolumeChange', 'onStatusChange' ); + +export const ALL_VIEW_EVENTS: (keyof VideoViewEvents)[] = + allKeysOf()( + 'onPictureInPictureChange', + 'onFullscreenChange', + 'willEnterFullscreen', + 'willExitFullscreen', + 'willEnterPictureInPicture', + 'willExitPictureInPicture' + ); diff --git a/packages/react-native-video/src/core/video-view/VideoView.tsx b/packages/react-native-video/src/core/video-view/VideoView.tsx index b4d488e2..66a93080 100644 --- a/packages/react-native-video/src/core/video-view/VideoView.tsx +++ b/packages/react-native-video/src/core/video-view/VideoView.tsx @@ -1,12 +1,13 @@ import * as React from 'react'; import type { ViewProps, ViewStyle } from 'react-native'; import { NitroModules } from 'react-native-nitro-modules'; +import type { ListenerSubscription } from '../../spec/nitro/VideoPlayerEventEmitter.nitro'; import type { SurfaceType, VideoViewViewManager, VideoViewViewManagerFactory, } from '../../spec/nitro/VideoViewViewManager.nitro'; -import type { VideoViewEvents } from '../types/Events'; +import { type VideoViewEvents } from '../types/Events'; import type { ResizeMode } from '../types/ResizeMode'; import { tryParseNativeVideoError, @@ -85,6 +86,16 @@ export interface VideoViewRef { * @returns true if picture in picture mode is supported, false otherwise */ canEnterPictureInPicture: () => boolean; + /** + * Adds a listener for a view event. + * @param event - The event to add a listener for. + * @param callback - The callback to call when the event is triggered. + * @returns A subscription object that can be used to remove the listener. + */ + addEventListener: ( + event: Event, + callback: VideoViewEvents[Event] + ) => ListenerSubscription; } let nitroIdCounter = 1; @@ -114,12 +125,6 @@ const updateProps = (manager: VideoViewViewManager, props: VideoViewProps) => { manager.pictureInPicture = props.pictureInPicture ?? false; manager.autoEnterPictureInPicture = props.autoEnterPictureInPicture ?? false; manager.resizeMode = props.resizeMode ?? 'none'; - manager.onPictureInPictureChange = props.onPictureInPictureChange; - manager.onFullscreenChange = props.onFullscreenChange; - manager.willEnterFullscreen = props.willEnterFullscreen; - manager.willExitFullscreen = props.willExitFullscreen; - manager.willEnterPictureInPicture = props.willEnterPictureInPicture; - manager.willExitPictureInPicture = props.willExitPictureInPicture; manager.keepScreenAwake = props.keepScreenAwake ?? true; manager.surfaceType = props.surfaceType ?? 'surface'; }; @@ -143,12 +148,19 @@ const VideoView = React.forwardRef( pictureInPicture = false, autoEnterPictureInPicture = false, resizeMode = 'none', + onPictureInPictureChange, + onFullscreenChange, + willEnterFullscreen, + willExitFullscreen, + willEnterPictureInPicture, + willExitPictureInPicture, ...props }, ref ) => { const nitroId = React.useMemo(() => nitroIdCounter++, []); const nitroViewManager = React.useRef(null); + const [isManagerReady, setIsManagerReady] = React.useState(false); const setupViewManager = React.useCallback( (id: number) => { @@ -166,15 +178,7 @@ const VideoView = React.forwardRef( } } - // Updates props to native view - updateProps(nitroViewManager.current, { - ...props, - player: player, - controls: controls, - pictureInPicture: pictureInPicture, - autoEnterPictureInPicture: autoEnterPictureInPicture, - resizeMode: resizeMode, - }); + setIsManagerReady(true); } catch (error) { const parsedError = tryParseNativeVideoError(error); @@ -203,15 +207,7 @@ const VideoView = React.forwardRef( throw parsedError; } }, - [ - props, - player, - controls, - pictureInPicture, - autoEnterPictureInPicture, - resizeMode, - nitroId, - ] + [nitroId] ); const onNitroIdChange = React.useCallback( @@ -252,10 +248,125 @@ const VideoView = React.forwardRef( } ); }, + addEventListener: ( + event: Event, + callback: VideoViewEvents[Event] + ): ListenerSubscription => { + return wrapNativeViewManagerFunction( + nitroViewManager.current, + (manager) => { + switch (event) { + case 'onPictureInPictureChange': + return manager.addOnPictureInPictureChangeListener( + callback as VideoViewEvents['onPictureInPictureChange'] + ); + case 'onFullscreenChange': + return manager.addOnFullscreenChangeListener( + callback as VideoViewEvents['onFullscreenChange'] + ); + case 'willEnterFullscreen': + return manager.addWillEnterFullscreenListener( + callback as VideoViewEvents['willEnterFullscreen'] + ); + case 'willExitFullscreen': + return manager.addWillExitFullscreenListener( + callback as VideoViewEvents['willExitFullscreen'] + ); + case 'willEnterPictureInPicture': + return manager.addWillEnterPictureInPictureListener( + callback as VideoViewEvents['willEnterPictureInPicture'] + ); + case 'willExitPictureInPicture': + return manager.addWillExitPictureInPictureListener( + callback as VideoViewEvents['willExitPictureInPicture'] + ); + default: + throw new Error( + `[React Native Video] Unsupported event: ${event}` + ); + } + } + ); + }, }), [] ); + // Cleanup all listeners on unmount + React.useEffect(() => { + return () => { + if (nitroViewManager.current) { + nitroViewManager.current.clearAllListeners(); + setIsManagerReady(false); + } + }; + }, []); + + // Register prop-based event callbacks as listeners + React.useEffect(() => { + if (!nitroViewManager.current) { + return; + } + + const subscriptions: ListenerSubscription[] = []; + + if (onPictureInPictureChange) { + subscriptions.push( + nitroViewManager.current.addOnPictureInPictureChangeListener( + onPictureInPictureChange + ) + ); + } + if (onFullscreenChange) { + subscriptions.push( + nitroViewManager.current.addOnFullscreenChangeListener( + onFullscreenChange + ) + ); + } + if (willEnterFullscreen) { + subscriptions.push( + nitroViewManager.current.addWillEnterFullscreenListener( + willEnterFullscreen + ) + ); + } + if (willExitFullscreen) { + subscriptions.push( + nitroViewManager.current.addWillExitFullscreenListener( + willExitFullscreen + ) + ); + } + if (willEnterPictureInPicture) { + subscriptions.push( + nitroViewManager.current.addWillEnterPictureInPictureListener( + willEnterPictureInPicture + ) + ); + } + if (willExitPictureInPicture) { + subscriptions.push( + nitroViewManager.current.addWillExitPictureInPictureListener( + willExitPictureInPicture + ) + ); + } + + return () => { + subscriptions.forEach((sub) => sub.remove()); + }; + }, [ + onPictureInPictureChange, + onFullscreenChange, + willEnterFullscreen, + willExitFullscreen, + willEnterPictureInPicture, + willExitPictureInPicture, + isManagerReady, + ]); + + // Update non-event props React.useEffect(() => { if (!nitroViewManager.current) { return; @@ -277,6 +388,7 @@ const VideoView = React.forwardRef( autoEnterPictureInPicture, resizeMode, props, + isManagerReady, ]); return ( diff --git a/packages/react-native-video/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts b/packages/react-native-video/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts index e8676d67..5f0cc4c9 100644 --- a/packages/react-native-video/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts +++ b/packages/react-native-video/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts @@ -1,13 +1,207 @@ import type { HybridObject } from 'react-native-nitro-modules'; +import type { + BandwidthData, + onLoadData, + onLoadStartData, + onPlaybackStateChangeData, + onProgressData, + onVolumeChangeData, + TimedMetadata, +} from '../../core/types/Events'; +import type { TextTrack } from '../../core/types/TextTrack'; +import type { VideoPlayerStatus } from '../../core/types/VideoPlayerStatus'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars import type { VideoPlayerEvents } from '../../core/types/Events'; -/** - * The holder of the video player events. - * @platform iOS - * @platform android - */ +export interface ListenerSubscription { + remove(): void; +} + export interface VideoPlayerEventEmitter - extends HybridObject<{ ios: 'swift'; android: 'kotlin' }>, - // For some magical reason, xcode builds fails if we make all events optional. - // For now they are initialized with empty functions (NOOP) - VideoPlayerEvents {} + extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> { + /** + * Adds a listener for the `onAudioBecomingNoisy` event. + * @see {@link VideoPlayerEvents.onAudioBecomingNoisy} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnAudioBecomingNoisyListener(listener: () => void): ListenerSubscription; + + /** + * Adds a listener for the `onAudioFocusChange` event. + * @see {@link VideoPlayerEvents.onAudioFocusChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnAudioFocusChangeListener( + listener: (hasAudioFocus: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onBandwidthUpdate` event. + * @see {@link VideoPlayerEvents.onBandwidthUpdate} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnBandwidthUpdateListener( + listener: (data: BandwidthData) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onBuffer` event. + * @see {@link VideoPlayerEvents.onBuffer} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnBufferListener( + listener: (buffering: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onControlsVisibleChange` event. + * @see {@link VideoPlayerEvents.onControlsVisibleChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnControlsVisibleChangeListener( + listener: (visible: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onEnd` event. + * @see {@link VideoPlayerEvents.onEnd} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnEndListener(listener: () => void): ListenerSubscription; + + /** + * Adds a listener for the `onExternalPlaybackChange` event. + * @see {@link VideoPlayerEvents.onExternalPlaybackChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnExternalPlaybackChangeListener( + listener: (externalPlaybackActive: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onLoad` event. + * @see {@link VideoPlayerEvents.onLoad} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnLoadListener(listener: (data: onLoadData) => void): ListenerSubscription; + + /** + * Adds a listener for the `onLoadStart` event. + * @see {@link VideoPlayerEvents.onLoadStart} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnLoadStartListener( + listener: (data: onLoadStartData) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onPlaybackStateChange` event. + * @see {@link VideoPlayerEvents.onPlaybackStateChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnPlaybackStateChangeListener( + listener: (data: onPlaybackStateChangeData) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onPlaybackRateChange` event. + * @see {@link VideoPlayerEvents.onPlaybackRateChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnPlaybackRateChangeListener( + listener: (rate: number) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onProgress` event. + * @see {@link VideoPlayerEvents.onProgress} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnProgressListener( + listener: (data: onProgressData) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onReadyToDisplay` event. + * @see {@link VideoPlayerEvents.onReadyToDisplay} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnReadyToDisplayListener(listener: () => void): ListenerSubscription; + + /** + * Adds a listener for the `onSeek` event. + * @see {@link VideoPlayerEvents.onSeek} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnSeekListener(listener: (position: number) => void): ListenerSubscription; + + /** + * Adds a listener for the `onStatusChange` event. + * @see {@link VideoPlayerEvents.onStatusChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnStatusChangeListener( + listener: (status: VideoPlayerStatus) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onTimedMetadata` event. + * @see {@link VideoPlayerEvents.onTimedMetadata} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnTimedMetadataListener( + listener: (data: TimedMetadata) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onTextTrackDataChanged` event. + * @see {@link VideoPlayerEvents.onTextTrackDataChanged} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnTextTrackDataChangedListener( + listener: (data: string[]) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onTrackChange` event. + * @see {@link VideoPlayerEvents.onTrackChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnTrackChangeListener( + listener: (track: TextTrack | null) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onVolumeChange` event. + * @see {@link VideoPlayerEvents.onVolumeChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnVolumeChangeListener( + listener: (data: onVolumeChangeData) => void + ): ListenerSubscription; + + /** + * Clears all listeners from the event emitter. + */ + clearAllListeners(): void; +} diff --git a/packages/react-native-video/src/spec/nitro/VideoViewViewManager.nitro.ts b/packages/react-native-video/src/spec/nitro/VideoViewViewManager.nitro.ts index eb4e7fc3..d0836066 100644 --- a/packages/react-native-video/src/spec/nitro/VideoViewViewManager.nitro.ts +++ b/packages/react-native-video/src/spec/nitro/VideoViewViewManager.nitro.ts @@ -1,14 +1,13 @@ import type { HybridObject } from 'react-native-nitro-modules'; -import type { VideoViewEvents } from '../../core/types/Events'; import type { ResizeMode } from '../../core/types/ResizeMode'; import type { VideoPlayer } from './VideoPlayer.nitro'; +import type { ListenerSubscription } from './VideoPlayerEventEmitter.nitro'; export type SurfaceType = 'surface' | 'texture'; // @internal export interface VideoViewViewManager - extends HybridObject<{ ios: 'swift'; android: 'kotlin' }>, - Partial { + extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> { player?: VideoPlayer; controls: boolean; pictureInPicture: boolean; @@ -21,6 +20,69 @@ export interface VideoViewViewManager canEnterPictureInPicture(): boolean; keepScreenAwake: boolean; surfaceType: SurfaceType; + + // Event listeners + + /** + * Adds a listener for the `onPictureInPictureChange` event. + * @see {@link VideoViewEvents.onPictureInPictureChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnPictureInPictureChangeListener( + listener: (isInPictureInPicture: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `onFullscreenChange` event. + * @see {@link VideoViewEvents.onFullscreenChange} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addOnFullscreenChangeListener( + listener: (fullscreen: boolean) => void + ): ListenerSubscription; + + /** + * Adds a listener for the `willEnterFullscreen` event. + * @see {@link VideoViewEvents.willEnterFullscreen} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addWillEnterFullscreenListener(listener: () => void): ListenerSubscription; + + /** + * Adds a listener for the `willExitFullscreen` event. + * @see {@link VideoViewEvents.willExitFullscreen} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addWillExitFullscreenListener(listener: () => void): ListenerSubscription; + + /** + * Adds a listener for the `willEnterPictureInPicture` event. + * @see {@link VideoViewEvents.willEnterPictureInPicture} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addWillEnterPictureInPictureListener( + listener: () => void + ): ListenerSubscription; + + /** + * Adds a listener for the `willExitPictureInPicture` event. + * @see {@link VideoViewEvents.willExitPictureInPicture} + * @param listener - The listener to add. + * @returns A subscription object that can be used to remove the listener. + */ + addWillExitPictureInPictureListener( + listener: () => void + ): ListenerSubscription; + + /** + * Clears all listeners from the event emitter. + */ + clearAllListeners(): void; } // @internal