@jwplayer/jwplayer-react-native 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.github/CODEOWNERS +1 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +12 -2
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +12 -2
  4. package/.github/ISSUE_TEMPLATE/implement.md +26 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +12 -2
  6. package/README.md +25 -3
  7. package/RNJWPlayer.podspec +2 -2
  8. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  9. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  10. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  11. package/android/.gradle/buildOutputCleanup/cache.properties +2 -2
  12. package/android/build.gradle +2 -2
  13. package/android/src/main/AndroidManifest.xml +2 -0
  14. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerView.java +259 -11
  15. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerViewManager.java +4 -0
  16. package/android/src/main/java/com/jwplayer/rnjwplayer/Util.java +24 -3
  17. package/badges/version.svg +1 -1
  18. package/index.d.ts +14 -2
  19. package/index.js +8 -2
  20. package/ios/RNJWPlayer/RNJWPlayerView.swift +202 -196
  21. package/ios/RNJWPlayer/RNJWPlayerViewController.swift +27 -23
  22. package/ios/RNJWPlayer/RNJWPlayerViewManager.m +4 -0
  23. package/ios/RNJWPlayer/RNJWPlayerViewManager.swift +5 -3
  24. package/package.json +3 -3
  25. package/android/.gradle/8.1.1/checksums/checksums.lock +0 -0
  26. package/android/.gradle/8.1.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  27. package/android/.gradle/8.1.1/fileHashes/fileHashes.lock +0 -0
  28. package/android/.gradle/8.2/checksums/checksums.lock +0 -0
  29. package/android/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  30. package/android/.gradle/8.2/dependencies-accessors/gc.properties +0 -0
  31. package/android/.gradle/8.2/fileChanges/last-build.bin +0 -0
  32. package/android/.gradle/8.2/fileHashes/fileHashes.lock +0 -0
  33. package/android/.gradle/8.2/gc.properties +0 -0
  34. package/android/.gradle/config.properties +0 -2
  35. package/android/.idea/gradle.xml +0 -12
  36. package/android/.idea/migrations.xml +0 -10
  37. package/android/.idea/misc.xml +0 -10
  38. package/android/.idea/vcs.xml +0 -6
  39. package/android/.idea/workspace.xml +0 -54
  40. package/android/local.properties +0 -8
  41. /package/android/.gradle/{8.1.1 → 8.9}/dependencies-accessors/gc.properties +0 -0
  42. /package/android/.gradle/{8.1.1 → 8.9}/fileChanges/last-build.bin +0 -0
  43. /package/android/.gradle/{8.1.1 → 8.9}/gc.properties +0 -0
@@ -10,11 +10,14 @@ import AVFoundation
10
10
  import AVKit
11
11
  import MediaPlayer
12
12
  import React
13
- import GoogleCast
14
13
  import JWPlayerKit
15
14
 
15
+ #if USE_GOOGLE_CAST
16
+ import GoogleCast
17
+ #endif
18
+
16
19
  class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerDelegate, JWDRMContentKeyDataSource {
17
-
20
+
18
21
  var parentView:RNJWPlayerView!
19
22
 
20
23
  func setDelegates() {
@@ -155,27 +158,27 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
155
158
  func playerViewControllerDidDismissFullScreen(_ controller:JWPlayerViewController) {
156
159
  parentView?.onFullScreenExit?([:])
157
160
  }
158
-
161
+
159
162
  func playerViewController(_ controller:JWPlayerViewController, relatedMenuClosedWithMethod method:JWRelatedInteraction) {
160
163
 
161
164
  }
162
-
165
+
163
166
  func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, relatedMenuOpenedWithItems items: [JWPlayerKit.JWPlayerItem], withMethod method: JWPlayerKit.JWRelatedInteraction) {
164
-
167
+
165
168
  }
166
-
169
+
167
170
  func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, relatedItemBeganPlaying item: JWPlayerKit.JWPlayerItem, atIndex index: Int, withMethod method: JWPlayerKit.JWRelatedMethod) {
168
-
171
+
169
172
  }
170
173
 
171
174
  // MARK: Time events
172
175
 
173
- func onAdTimeEvent(time:JWTimeData) {
176
+ override func onAdTimeEvent(_ time:JWTimeData) {
174
177
  super.onAdTimeEvent(time)
175
178
  parentView?.onAdTime?(["position": time.position, "duration": time.duration])
176
179
  }
177
180
 
178
- func onMediaTimeEvent(time:JWTimeData) {
181
+ override func onMediaTimeEvent(_ time:JWTimeData) {
179
182
  super.onMediaTimeEvent(time)
180
183
  parentView?.onTime?(["position": time.position, "duration": time.duration])
181
184
  }
@@ -191,7 +194,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
191
194
  guard let fairplayCertUrlString = parentView?.fairplayCertUrl, let fairplayCertUrl = URL(string: fairplayCertUrlString) else {
192
195
  return
193
196
  }
194
-
197
+
195
198
  let request = URLRequest(url: fairplayCertUrl)
196
199
  let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
197
200
  if let error = error {
@@ -201,7 +204,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
201
204
  }
202
205
  task.resume()
203
206
  }
204
-
207
+
205
208
  func contentKeyWithSPCData(_ spcData: Data, completionHandler handler: @escaping (Data?, Date?, String?) -> Void) {
206
209
  if parentView?.processSpcUrl == nil {
207
210
  return
@@ -212,21 +215,21 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
212
215
  ckcRequest.httpMethod = "POST"
213
216
  ckcRequest.httpBody = spcData
214
217
  ckcRequest.addValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
215
-
218
+
216
219
  URLSession.shared.dataTask(with: ckcRequest as URLRequest) { (data, response, error) in
217
220
  if let httpResponse = response as? HTTPURLResponse, (error != nil || httpResponse.statusCode != 200) {
218
221
  NSLog("DRM ckc request error - %@", error.debugDescription)
219
222
  handler(nil, nil, nil)
220
223
  return
221
224
  }
222
-
225
+
223
226
  handler(data, nil, "application/octet-stream")
224
227
  }.resume()
225
228
  }
226
229
  }
227
230
 
228
231
  // MARK: - AV Picture In Picture Delegate
229
-
232
+
230
233
  override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
231
234
  super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
232
235
  // if (keyPath == "playbackLikelyToKeepUp") {
@@ -277,7 +280,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
277
280
 
278
281
  override func jwplayer(_ player:JWPlayer, didFinishLoadingWithTime loadTime:TimeInterval) {
279
282
  super.jwplayer(player, didFinishLoadingWithTime:loadTime)
280
- parentView?.onLoaded?([:])
283
+ parentView?.onLoaded?(["loadTime":loadTime])
281
284
  }
282
285
 
283
286
  override func jwplayer(_ player:JWPlayer, isAttemptingToPlay playlistItem:JWPlayerItem, reason:JWPlayReason) {
@@ -287,7 +290,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
287
290
 
288
291
  override func jwplayer(_ player:JWPlayer, isPlayingWithReason reason:JWPlayReason) {
289
292
  super.jwplayer(player, isPlayingWithReason:reason)
290
-
293
+
291
294
  parentView?.onPlay?([:])
292
295
 
293
296
  parentView?.userPaused = false
@@ -332,7 +335,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
332
335
 
333
336
  override func jwplayer(_ player:JWPlayer, didLoadPlaylistItem item:JWPlayerItem, at index:UInt) {
334
337
  super.jwplayer(player, didLoadPlaylistItem: item, at: index)
335
-
338
+
336
339
  // var sourceDict: [String: Any] = [:]
337
340
  // var file: String?
338
341
  //
@@ -393,7 +396,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
393
396
 
394
397
  override func jwplayer(_ player:JWPlayer, didLoadPlaylist playlist:[JWPlayerItem]) {
395
398
  super.jwplayer(player, didLoadPlaylist: playlist)
396
-
399
+
397
400
  let playlistArray:NSMutableArray! = NSMutableArray()
398
401
 
399
402
  for item:JWPlayerItem? in playlist {
@@ -492,7 +495,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
492
495
  }
493
496
 
494
497
  // MARK: - JWPlayer Cast Delegate
495
-
498
+ #if USE_GOOGLE_CAST
496
499
  override func castController(_ controller:JWCastController, castingBeganWithDevice device:JWCastingDevice) {
497
500
  super.castController(controller, castingBeganWithDevice:device)
498
501
  parentView?.onCasting?([:])
@@ -538,7 +541,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
538
541
  super.castController(controller, connectionSuspendedWithDevice:device)
539
542
  parentView?.onConnectionTemporarilySuspended?([:])
540
543
  }
541
-
544
+
542
545
  override func castController(_ controller: JWCastController, devicesAvailable devices:[JWCastingDevice]) {
543
546
  super.castController(controller, devicesAvailable:devices)
544
547
  parentView?.availableDevices = devices
@@ -566,6 +569,7 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
566
569
  super.castController(controller, disconnectedWithError:error)
567
570
  parentView?.onDisconnectedFromCastingDevice?(["error": error as Any])
568
571
  }
572
+ #endif
569
573
 
570
574
  // MARK: - JWPlayer AV Delegate
571
575
 
@@ -597,12 +601,12 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
597
601
  override func jwplayer(_ player:JWPlayer, updatedCaptionList options:[JWMediaSelectionOption]) {
598
602
  super.jwplayer(player, updatedCaptionList:options)
599
603
  }
600
-
604
+
601
605
  override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
602
606
  super.viewWillTransition(to: size, with: coordinator)
603
607
  coordinator.animate(alongsideTransition: { _ in
604
608
  let orientation = UIDevice.current.orientation
605
- switch orientation {
609
+ switch orientation {
606
610
  case .portrait, .portraitUpsideDown:
607
611
  if self.parentView?.currentConfig["exitFullScreenOnPortrait"] as? Bool ?? false {
608
612
  super.dismissFullScreen(animated: true)
@@ -612,5 +616,5 @@ class RNJWPlayerViewController : JWPlayerViewController, JWPlayerViewControllerD
612
616
  }
613
617
  })
614
618
  }
615
-
619
+
616
620
  }
@@ -93,6 +93,8 @@ RCT_EXTERN_METHOD(setVolume: (nonnull NSNumber *)reactTag :(nonnull NSNumber *)v
93
93
 
94
94
  RCT_EXTERN_METHOD(togglePIP: (nonnull NSNumber *)reactTag)
95
95
 
96
+ #if USE_GOOGLE_CAST
97
+
96
98
  RCT_EXTERN_METHOD(setUpCastController: (nonnull NSNumber *)reactTag)
97
99
 
98
100
  RCT_EXTERN_METHOD(presentCastDialog: (nonnull NSNumber *)reactTag)
@@ -103,6 +105,8 @@ RCT_EXTERN_METHOD(availableDevices: (nonnull NSNumber *)reactTag: (RCTPromiseRes
103
105
 
104
106
  RCT_EXTERN_METHOD(castState: (nonnull NSNumber *)reactTag :(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject)
105
107
 
108
+ #endif
109
+
106
110
  RCT_EXTERN_METHOD(getAudioTracks: (nonnull NSNumber *)reactTag: (RCTPromiseResolveBlock)resolve: (RCTPromiseRejectBlock)reject)
107
111
 
108
112
  RCT_EXTERN_METHOD(getCurrentAudioTrack: (nonnull NSNumber *)reactTag :(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject)
@@ -172,7 +172,7 @@ class RNJWPlayerViewManager: RCTViewManager {
172
172
  }
173
173
  }
174
174
 
175
- @objc func setVolume(_ reactTag: NSNumber, _ volume: Double) {
175
+ @objc func setVolume(_ reactTag: NSNumber, _ volume: NSNumber) {
176
176
  self.bridge.uiManager.addUIBlock { uiManager, viewRegistry in
177
177
  guard let view = viewRegistry?[reactTag] as? RNJWPlayerView else {
178
178
  print("Invalid view returned from registry, expecting RNJWPlayerView, got: \(String(describing: viewRegistry?[reactTag]))")
@@ -180,9 +180,9 @@ class RNJWPlayerViewManager: RCTViewManager {
180
180
  }
181
181
 
182
182
  if let playerView = view.playerView {
183
- playerView.player.volume = volume
183
+ playerView.player.volume = volume.doubleValue
184
184
  } else if let playerViewController = view.playerViewController {
185
- playerViewController.player.volume = volume
185
+ playerViewController.player.volume = volume.doubleValue
186
186
  }
187
187
  }
188
188
  }
@@ -205,6 +205,7 @@ class RNJWPlayerViewManager: RCTViewManager {
205
205
  }
206
206
  }
207
207
 
208
+ #if USE_GOOGLE_CAST
208
209
  @objc func setUpCastController(_ reactTag: NSNumber) {
209
210
  self.bridge.uiManager.addUIBlock { uiManager, viewRegistry in
210
211
  guard let view = viewRegistry?[reactTag] as? RNJWPlayerView else {
@@ -295,6 +296,7 @@ class RNJWPlayerViewManager: RCTViewManager {
295
296
  resolve(view.castState)
296
297
  }
297
298
  }
299
+ #endif
298
300
 
299
301
  @objc func getAudioTracks(_ reactTag: NSNumber, _ resolve: @escaping RCTPromiseResolveBlock, _ reject: @escaping RCTPromiseRejectBlock) {
300
302
  self.bridge.uiManager.addUIBlock { uiManager, viewRegistry in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jwplayer/jwplayer-react-native",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)",
5
5
  "main": "index.js",
6
6
  "types": "./index.d.ts",
@@ -35,11 +35,11 @@
35
35
  "license": "MIT",
36
36
  "homepage": "https://github.com/jwplayer/jwplayer-react-native#readme",
37
37
  "devDependencies": {
38
- "lodash": ">= 4.17.21",
38
+ "badge-maker": "^3.3.1",
39
39
  "react": ">= 18.2.0",
40
40
  "react-native": ">= 0.72.5"
41
41
  },
42
42
  "dependencies": {
43
- "badge-maker": "^3.3.1"
43
+ "lodash.isequalwith": "^4.4.0"
44
44
  }
45
45
  }
File without changes
@@ -1,2 +0,0 @@
1
- #Fri Apr 19 10:10:39 PDT 2024
2
- java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="GradleSettings">
4
- <option name="linkedExternalProjectsSettings">
5
- <GradleProjectSettings>
6
- <option name="externalProjectPath" value="$PROJECT_DIR$" />
7
- <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
8
- <option name="resolveExternalAnnotations" value="false" />
9
- </GradleProjectSettings>
10
- </option>
11
- </component>
12
- </project>
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectMigrations">
4
- <option name="MigrateToGradleLocalJavaHome">
5
- <set>
6
- <option value="$PROJECT_DIR$" />
7
- </set>
8
- </option>
9
- </component>
10
- </project>
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ExternalStorageConfigurationManager" enabled="true" />
4
- <component name="ProjectRootManager">
5
- <output url="file://$PROJECT_DIR$/build/classes" />
6
- </component>
7
- <component name="ProjectType">
8
- <option name="id" value="Android" />
9
- </component>
10
- </project>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
- </component>
6
- </project>
@@ -1,54 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="AutoImportSettings">
4
- <option name="autoReloadType" value="NONE" />
5
- </component>
6
- <component name="ChangeListManager">
7
- <list default="true" id="daffcf00-d6d8-483c-a28f-ba2d6899d4c5" name="Changes" comment="">
8
- <change beforePath="$PROJECT_DIR$/../Example/app/jsx/screens/DRMExample.js" beforeDir="false" afterPath="$PROJECT_DIR$/../Example/app/jsx/screens/DRMExample.js" afterDir="false" />
9
- <change beforePath="$PROJECT_DIR$/../Example/ios/Podfile.lock" beforeDir="false" afterPath="$PROJECT_DIR$/../Example/ios/Podfile.lock" afterDir="false" />
10
- <change beforePath="$PROJECT_DIR$/../Example/yarn.lock" beforeDir="false" afterPath="$PROJECT_DIR$/../Example/yarn.lock" afterDir="false" />
11
- <change beforePath="$PROJECT_DIR$/../ios/RNJWPlayer/RNJWPlayerView.swift" beforeDir="false" afterPath="$PROJECT_DIR$/../ios/RNJWPlayer/RNJWPlayerView.swift" afterDir="false" />
12
- </list>
13
- <option name="SHOW_DIALOG" value="false" />
14
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
15
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
16
- <option name="LAST_RESOLUTION" value="IGNORE" />
17
- </component>
18
- <component name="ClangdSettings">
19
- <option name="formatViaClangd" value="false" />
20
- </component>
21
- <component name="Git.Settings">
22
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
23
- </component>
24
- <component name="ProjectColorInfo"><![CDATA[{
25
- "associatedIndex": 5
26
- }]]></component>
27
- <component name="ProjectId" id="2fKP8rLRDpFiPXLGLH4cN1RyMXV" />
28
- <component name="ProjectViewState">
29
- <option name="showLibraryContents" value="true" />
30
- </component>
31
- <component name="PropertiesComponent"><![CDATA[{
32
- "keyToString": {
33
- "RunOnceActivity.OpenProjectViewOnStart": "true",
34
- "RunOnceActivity.ShowReadmeOnStart": "true",
35
- "RunOnceActivity.cidr.known.project.marker": "true",
36
- "android.gradle.sync.needed": "true",
37
- "cf.first.check.clang-format": "false",
38
- "cidr.known.project.marker": "true",
39
- "git-widget-placeholder": "release/react-1.0.0",
40
- "last_opened_file_path": "/Users/jmilham/source/repos/SDK/react/jwplayer-react-native/android"
41
- }
42
- }]]></component>
43
- <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
44
- <component name="TaskManager">
45
- <task active="true" id="Default" summary="Default task">
46
- <changelist id="daffcf00-d6d8-483c-a28f-ba2d6899d4c5" name="Changes" comment="" />
47
- <created>1713546640047</created>
48
- <option name="number" value="Default" />
49
- <option name="presentableId" value="Default" />
50
- <updated>1713546640047</updated>
51
- </task>
52
- <servers />
53
- </component>
54
- </project>
@@ -1,8 +0,0 @@
1
- ## This file must *NOT* be checked into Version Control Systems,
2
- # as it contains information specific to your local configuration.
3
- #
4
- # Location of the SDK. This is only used by Gradle.
5
- # For customization when using a Version Control System, please read the
6
- # header note.
7
- #Fri Apr 19 10:10:39 PDT 2024
8
- sdk.dir=/Users/jmilham/Library/Android/sdk
File without changes