react-native-nitro-player 0.5.5 → 0.5.7

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 (36) hide show
  1. package/README.md +2 -0
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +43 -0
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/NitroPlayerLogger.kt +8 -2
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +345 -4
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +43 -10
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +76 -7
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/storage/NitroPlayerStorage.kt +9 -2
  8. package/ios/HybridTrackPlayer.swift +54 -1
  9. package/ios/core/TrackPlayerCore.swift +254 -2
  10. package/ios/download/DownloadDatabase.swift +79 -2
  11. package/ios/download/DownloadManagerCore.swift +81 -2
  12. package/ios/playlist/PlaylistManager.swift +68 -0
  13. package/lib/specs/TrackPlayer.nitro.d.ts +47 -0
  14. package/lib/types/PlayerQueue.d.ts +5 -0
  15. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +2 -0
  16. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__double.hpp +104 -0
  17. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +160 -0
  18. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +8 -0
  19. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +7 -3
  20. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__double.kt +80 -0
  21. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +37 -0
  22. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerConfig.kt +6 -3
  23. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +16 -0
  24. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +65 -0
  25. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +62 -0
  26. package/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
  27. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__double.swift +47 -0
  28. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +8 -0
  29. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +173 -0
  30. package/nitrogen/generated/ios/swift/PlayerConfig.swift +24 -1
  31. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
  32. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +8 -0
  33. package/nitrogen/generated/shared/c++/PlayerConfig.hpp +6 -2
  34. package/package.json +1 -1
  35. package/src/specs/TrackPlayer.nitro.ts +57 -0
  36. package/src/types/PlayerQueue.ts +5 -0
@@ -154,6 +154,43 @@ abstract class HybridTrackPlayerSpec: HybridObject() {
154
154
  @DoNotStrip
155
155
  @Keep
156
156
  abstract fun setVolume(volume: Double): Boolean
157
+
158
+ @DoNotStrip
159
+ @Keep
160
+ abstract fun updateTracks(tracks: Array<TrackItem>): Promise<Unit>
161
+
162
+ @DoNotStrip
163
+ @Keep
164
+ abstract fun getTracksById(trackIds: Array<String>): Promise<Array<TrackItem>>
165
+
166
+ @DoNotStrip
167
+ @Keep
168
+ abstract fun getTracksNeedingUrls(): Promise<Array<TrackItem>>
169
+
170
+ @DoNotStrip
171
+ @Keep
172
+ abstract fun getNextTracks(count: Double): Promise<Array<TrackItem>>
173
+
174
+ @DoNotStrip
175
+ @Keep
176
+ abstract fun getCurrentTrackIndex(): Promise<Double>
177
+
178
+ abstract fun onTracksNeedUpdate(callback: (tracks: Array<TrackItem>, lookahead: Double) -> Unit): Unit
179
+
180
+ @DoNotStrip
181
+ @Keep
182
+ private fun onTracksNeedUpdate_cxx(callback: Func_void_std__vector_TrackItem__double): Unit {
183
+ val __result = onTracksNeedUpdate(callback)
184
+ return __result
185
+ }
186
+
187
+ @DoNotStrip
188
+ @Keep
189
+ abstract fun setPlaybackSpeed(speed: Double): Promise<Unit>
190
+
191
+ @DoNotStrip
192
+ @Keep
193
+ abstract fun getPlaybackSpeed(): Promise<Double>
157
194
 
158
195
  private external fun initHybrid(): HybridData
159
196
 
@@ -25,7 +25,10 @@ data class PlayerConfig(
25
25
  val carPlayEnabled: Boolean?,
26
26
  @DoNotStrip
27
27
  @Keep
28
- val showInNotification: Boolean?
28
+ val showInNotification: Boolean?,
29
+ @DoNotStrip
30
+ @Keep
31
+ val lookaheadCount: Double?
29
32
  ) {
30
33
  /* primary constructor */
31
34
 
@@ -37,8 +40,8 @@ data class PlayerConfig(
37
40
  @Keep
38
41
  @Suppress("unused")
39
42
  @JvmStatic
40
- private fun fromCpp(androidAutoEnabled: Boolean?, carPlayEnabled: Boolean?, showInNotification: Boolean?): PlayerConfig {
41
- return PlayerConfig(androidAutoEnabled, carPlayEnabled, showInNotification)
43
+ private fun fromCpp(androidAutoEnabled: Boolean?, carPlayEnabled: Boolean?, showInNotification: Boolean?, lookaheadCount: Double?): PlayerConfig {
44
+ return PlayerConfig(androidAutoEnabled, carPlayEnabled, showInNotification, lookaheadCount)
42
45
  }
43
46
  }
44
47
  }
@@ -234,6 +234,22 @@ namespace margelo::nitro::nitroplayer::bridge::swift {
234
234
  };
235
235
  }
236
236
 
237
+ // pragma MARK: std::function<void(double /* result */)>
238
+ Func_void_double create_Func_void_double(void* NON_NULL swiftClosureWrapper) noexcept {
239
+ auto swiftClosure = NitroPlayer::Func_void_double::fromUnsafe(swiftClosureWrapper);
240
+ return [swiftClosure = std::move(swiftClosure)](double result) mutable -> void {
241
+ swiftClosure.call(result);
242
+ };
243
+ }
244
+
245
+ // pragma MARK: std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>
246
+ Func_void_std__vector_TrackItem__double create_Func_void_std__vector_TrackItem__double(void* NON_NULL swiftClosureWrapper) noexcept {
247
+ auto swiftClosure = NitroPlayer::Func_void_std__vector_TrackItem__double::fromUnsafe(swiftClosureWrapper);
248
+ return [swiftClosure = std::move(swiftClosure)](const std::vector<TrackItem>& tracks, double lookahead) mutable -> void {
249
+ swiftClosure.call(tracks, lookahead);
250
+ };
251
+ }
252
+
237
253
  // pragma MARK: std::shared_ptr<HybridTrackPlayerSpec>
238
254
  std::shared_ptr<HybridTrackPlayerSpec> create_std__shared_ptr_HybridTrackPlayerSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
239
255
  NitroPlayer::HybridTrackPlayerSpec_cxx swiftPart = NitroPlayer::HybridTrackPlayerSpec_cxx::fromUnsafe(swiftUnsafePointer);
@@ -1417,6 +1417,62 @@ namespace margelo::nitro::nitroplayer::bridge::swift {
1417
1417
  return Func_void_double_double_std__optional_bool__Wrapper(std::move(value));
1418
1418
  }
1419
1419
 
1420
+ // pragma MARK: std::shared_ptr<Promise<double>>
1421
+ /**
1422
+ * Specialized version of `std::shared_ptr<Promise<double>>`.
1423
+ */
1424
+ using std__shared_ptr_Promise_double__ = std::shared_ptr<Promise<double>>;
1425
+ inline std::shared_ptr<Promise<double>> create_std__shared_ptr_Promise_double__() noexcept {
1426
+ return Promise<double>::create();
1427
+ }
1428
+ inline PromiseHolder<double> wrap_std__shared_ptr_Promise_double__(std::shared_ptr<Promise<double>> promise) noexcept {
1429
+ return PromiseHolder<double>(std::move(promise));
1430
+ }
1431
+
1432
+ // pragma MARK: std::function<void(double /* result */)>
1433
+ /**
1434
+ * Specialized version of `std::function<void(double)>`.
1435
+ */
1436
+ using Func_void_double = std::function<void(double /* result */)>;
1437
+ /**
1438
+ * Wrapper class for a `std::function<void(double / * result * /)>`, this can be used from Swift.
1439
+ */
1440
+ class Func_void_double_Wrapper final {
1441
+ public:
1442
+ explicit Func_void_double_Wrapper(std::function<void(double /* result */)>&& func): _function(std::make_unique<std::function<void(double /* result */)>>(std::move(func))) {}
1443
+ inline void call(double result) const noexcept {
1444
+ _function->operator()(result);
1445
+ }
1446
+ private:
1447
+ std::unique_ptr<std::function<void(double /* result */)>> _function;
1448
+ } SWIFT_NONCOPYABLE;
1449
+ Func_void_double create_Func_void_double(void* NON_NULL swiftClosureWrapper) noexcept;
1450
+ inline Func_void_double_Wrapper wrap_Func_void_double(Func_void_double value) noexcept {
1451
+ return Func_void_double_Wrapper(std::move(value));
1452
+ }
1453
+
1454
+ // pragma MARK: std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>
1455
+ /**
1456
+ * Specialized version of `std::function<void(const std::vector<TrackItem>&, double)>`.
1457
+ */
1458
+ using Func_void_std__vector_TrackItem__double = std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>;
1459
+ /**
1460
+ * Wrapper class for a `std::function<void(const std::vector<TrackItem>& / * tracks * /, double / * lookahead * /)>`, this can be used from Swift.
1461
+ */
1462
+ class Func_void_std__vector_TrackItem__double_Wrapper final {
1463
+ public:
1464
+ explicit Func_void_std__vector_TrackItem__double_Wrapper(std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>&& func): _function(std::make_unique<std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>>(std::move(func))) {}
1465
+ inline void call(std::vector<TrackItem> tracks, double lookahead) const noexcept {
1466
+ _function->operator()(tracks, lookahead);
1467
+ }
1468
+ private:
1469
+ std::unique_ptr<std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>> _function;
1470
+ } SWIFT_NONCOPYABLE;
1471
+ Func_void_std__vector_TrackItem__double create_Func_void_std__vector_TrackItem__double(void* NON_NULL swiftClosureWrapper) noexcept;
1472
+ inline Func_void_std__vector_TrackItem__double_Wrapper wrap_Func_void_std__vector_TrackItem__double(Func_void_std__vector_TrackItem__double value) noexcept {
1473
+ return Func_void_std__vector_TrackItem__double_Wrapper(std::move(value));
1474
+ }
1475
+
1420
1476
  // pragma MARK: std::shared_ptr<HybridTrackPlayerSpec>
1421
1477
  /**
1422
1478
  * Specialized version of `std::shared_ptr<HybridTrackPlayerSpec>`.
@@ -1464,5 +1520,14 @@ namespace margelo::nitro::nitroplayer::bridge::swift {
1464
1520
  inline Result_RepeatMode_ create_Result_RepeatMode_(const std::exception_ptr& error) noexcept {
1465
1521
  return Result<RepeatMode>::withError(error);
1466
1522
  }
1523
+
1524
+ // pragma MARK: Result<std::shared_ptr<Promise<double>>>
1525
+ using Result_std__shared_ptr_Promise_double___ = Result<std::shared_ptr<Promise<double>>>;
1526
+ inline Result_std__shared_ptr_Promise_double___ create_Result_std__shared_ptr_Promise_double___(const std::shared_ptr<Promise<double>>& value) noexcept {
1527
+ return Result<std::shared_ptr<Promise<double>>>::withValue(value);
1528
+ }
1529
+ inline Result_std__shared_ptr_Promise_double___ create_Result_std__shared_ptr_Promise_double___(const std::exception_ptr& error) noexcept {
1530
+ return Result<std::shared_ptr<Promise<double>>>::withError(error);
1531
+ }
1467
1532
 
1468
1533
  } // namespace margelo::nitro::nitroplayer::bridge::swift
@@ -233,6 +233,68 @@ namespace margelo::nitro::nitroplayer {
233
233
  auto __value = std::move(__result.value());
234
234
  return __value;
235
235
  }
236
+ inline std::shared_ptr<Promise<void>> updateTracks(const std::vector<TrackItem>& tracks) override {
237
+ auto __result = _swiftPart.updateTracks(tracks);
238
+ if (__result.hasError()) [[unlikely]] {
239
+ std::rethrow_exception(__result.error());
240
+ }
241
+ auto __value = std::move(__result.value());
242
+ return __value;
243
+ }
244
+ inline std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksById(const std::vector<std::string>& trackIds) override {
245
+ auto __result = _swiftPart.getTracksById(trackIds);
246
+ if (__result.hasError()) [[unlikely]] {
247
+ std::rethrow_exception(__result.error());
248
+ }
249
+ auto __value = std::move(__result.value());
250
+ return __value;
251
+ }
252
+ inline std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksNeedingUrls() override {
253
+ auto __result = _swiftPart.getTracksNeedingUrls();
254
+ if (__result.hasError()) [[unlikely]] {
255
+ std::rethrow_exception(__result.error());
256
+ }
257
+ auto __value = std::move(__result.value());
258
+ return __value;
259
+ }
260
+ inline std::shared_ptr<Promise<std::vector<TrackItem>>> getNextTracks(double count) override {
261
+ auto __result = _swiftPart.getNextTracks(std::forward<decltype(count)>(count));
262
+ if (__result.hasError()) [[unlikely]] {
263
+ std::rethrow_exception(__result.error());
264
+ }
265
+ auto __value = std::move(__result.value());
266
+ return __value;
267
+ }
268
+ inline std::shared_ptr<Promise<double>> getCurrentTrackIndex() override {
269
+ auto __result = _swiftPart.getCurrentTrackIndex();
270
+ if (__result.hasError()) [[unlikely]] {
271
+ std::rethrow_exception(__result.error());
272
+ }
273
+ auto __value = std::move(__result.value());
274
+ return __value;
275
+ }
276
+ inline void onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) override {
277
+ auto __result = _swiftPart.onTracksNeedUpdate(callback);
278
+ if (__result.hasError()) [[unlikely]] {
279
+ std::rethrow_exception(__result.error());
280
+ }
281
+ }
282
+ inline std::shared_ptr<Promise<void>> setPlaybackSpeed(double speed) override {
283
+ auto __result = _swiftPart.setPlaybackSpeed(std::forward<decltype(speed)>(speed));
284
+ if (__result.hasError()) [[unlikely]] {
285
+ std::rethrow_exception(__result.error());
286
+ }
287
+ auto __value = std::move(__result.value());
288
+ return __value;
289
+ }
290
+ inline std::shared_ptr<Promise<double>> getPlaybackSpeed() override {
291
+ auto __result = _swiftPart.getPlaybackSpeed();
292
+ if (__result.hasError()) [[unlikely]] {
293
+ std::rethrow_exception(__result.error());
294
+ }
295
+ auto __value = std::move(__result.value());
296
+ return __value;
297
+ }
236
298
 
237
299
  private:
238
300
  NitroPlayer::HybridTrackPlayerSpec_cxx _swiftPart;
@@ -0,0 +1,47 @@
1
+ ///
2
+ /// Func_void_double.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import Foundation
9
+ import NitroModules
10
+
11
+ /**
12
+ * Wraps a Swift `(_ value: Double) -> Void` as a class.
13
+ * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`.
14
+ */
15
+ public final class Func_void_double {
16
+ public typealias bridge = margelo.nitro.nitroplayer.bridge.swift
17
+
18
+ private let closure: (_ value: Double) -> Void
19
+
20
+ public init(_ closure: @escaping (_ value: Double) -> Void) {
21
+ self.closure = closure
22
+ }
23
+
24
+ @inline(__always)
25
+ public func call(value: Double) -> Void {
26
+ self.closure(value)
27
+ }
28
+
29
+ /**
30
+ * Casts this instance to a retained unsafe raw pointer.
31
+ * This acquires one additional strong reference on the object!
32
+ */
33
+ @inline(__always)
34
+ public func toUnsafe() -> UnsafeMutableRawPointer {
35
+ return Unmanaged.passRetained(self).toOpaque()
36
+ }
37
+
38
+ /**
39
+ * Casts an unsafe pointer to a `Func_void_double`.
40
+ * The pointer has to be a retained opaque `Unmanaged<Func_void_double>`.
41
+ * This removes one strong reference from the object!
42
+ */
43
+ @inline(__always)
44
+ public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_double {
45
+ return Unmanaged<Func_void_double>.fromOpaque(pointer).takeRetainedValue()
46
+ }
47
+ }
@@ -0,0 +1,47 @@
1
+ ///
2
+ /// Func_void_std__vector_TrackItem__double.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import Foundation
9
+ import NitroModules
10
+
11
+ /**
12
+ * Wraps a Swift `(_ tracks: [TrackItem], _ lookahead: Double) -> Void` as a class.
13
+ * This class can be used from C++, e.g. to wrap the Swift closure as a `std::function`.
14
+ */
15
+ public final class Func_void_std__vector_TrackItem__double {
16
+ public typealias bridge = margelo.nitro.nitroplayer.bridge.swift
17
+
18
+ private let closure: (_ tracks: [TrackItem], _ lookahead: Double) -> Void
19
+
20
+ public init(_ closure: @escaping (_ tracks: [TrackItem], _ lookahead: Double) -> Void) {
21
+ self.closure = closure
22
+ }
23
+
24
+ @inline(__always)
25
+ public func call(tracks: bridge.std__vector_TrackItem_, lookahead: Double) -> Void {
26
+ self.closure(tracks.map({ __item in __item }), lookahead)
27
+ }
28
+
29
+ /**
30
+ * Casts this instance to a retained unsafe raw pointer.
31
+ * This acquires one additional strong reference on the object!
32
+ */
33
+ @inline(__always)
34
+ public func toUnsafe() -> UnsafeMutableRawPointer {
35
+ return Unmanaged.passRetained(self).toOpaque()
36
+ }
37
+
38
+ /**
39
+ * Casts an unsafe pointer to a `Func_void_std__vector_TrackItem__double`.
40
+ * The pointer has to be a retained opaque `Unmanaged<Func_void_std__vector_TrackItem__double>`.
41
+ * This removes one strong reference from the object!
42
+ */
43
+ @inline(__always)
44
+ public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_std__vector_TrackItem__double {
45
+ return Unmanaged<Func_void_std__vector_TrackItem__double>.fromOpaque(pointer).takeRetainedValue()
46
+ }
47
+ }
@@ -35,6 +35,14 @@ public protocol HybridTrackPlayerSpec_protocol: HybridObject {
35
35
  func onAndroidAutoConnectionChange(callback: @escaping (_ connected: Bool) -> Void) throws -> Void
36
36
  func isAndroidAutoConnected() throws -> Bool
37
37
  func setVolume(volume: Double) throws -> Bool
38
+ func updateTracks(tracks: [TrackItem]) throws -> Promise<Void>
39
+ func getTracksById(trackIds: [String]) throws -> Promise<[TrackItem]>
40
+ func getTracksNeedingUrls() throws -> Promise<[TrackItem]>
41
+ func getNextTracks(count: Double) throws -> Promise<[TrackItem]>
42
+ func getCurrentTrackIndex() throws -> Promise<Double>
43
+ func onTracksNeedUpdate(callback: @escaping (_ tracks: [TrackItem], _ lookahead: Double) -> Void) throws -> Void
44
+ func setPlaybackSpeed(speed: Double) throws -> Promise<Void>
45
+ func getPlaybackSpeed() throws -> Promise<Double>
38
46
  }
39
47
 
40
48
  public extension HybridTrackPlayerSpec_protocol {
@@ -455,4 +455,177 @@ open class HybridTrackPlayerSpec_cxx {
455
455
  return bridge.create_Result_bool_(__exceptionPtr)
456
456
  }
457
457
  }
458
+
459
+ @inline(__always)
460
+ public final func updateTracks(tracks: bridge.std__vector_TrackItem_) -> bridge.Result_std__shared_ptr_Promise_void___ {
461
+ do {
462
+ let __result = try self.__implementation.updateTracks(tracks: tracks.map({ __item in __item }))
463
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
464
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
465
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
466
+ __result
467
+ .then({ __result in __promiseHolder.resolve() })
468
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
469
+ return __promise
470
+ }()
471
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
472
+ } catch (let __error) {
473
+ let __exceptionPtr = __error.toCpp()
474
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
475
+ }
476
+ }
477
+
478
+ @inline(__always)
479
+ public final func getTracksById(trackIds: bridge.std__vector_std__string_) -> bridge.Result_std__shared_ptr_Promise_std__vector_TrackItem____ {
480
+ do {
481
+ let __result = try self.__implementation.getTracksById(trackIds: trackIds.map({ __item in String(__item) }))
482
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_TrackItem___ in
483
+ let __promise = bridge.create_std__shared_ptr_Promise_std__vector_TrackItem___()
484
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_TrackItem___(__promise)
485
+ __result
486
+ .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_TrackItem_ in
487
+ var __vector = bridge.create_std__vector_TrackItem_(__result.count)
488
+ for __item in __result {
489
+ __vector.push_back(__item)
490
+ }
491
+ return __vector
492
+ }()) })
493
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
494
+ return __promise
495
+ }()
496
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__resultCpp)
497
+ } catch (let __error) {
498
+ let __exceptionPtr = __error.toCpp()
499
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__exceptionPtr)
500
+ }
501
+ }
502
+
503
+ @inline(__always)
504
+ public final func getTracksNeedingUrls() -> bridge.Result_std__shared_ptr_Promise_std__vector_TrackItem____ {
505
+ do {
506
+ let __result = try self.__implementation.getTracksNeedingUrls()
507
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_TrackItem___ in
508
+ let __promise = bridge.create_std__shared_ptr_Promise_std__vector_TrackItem___()
509
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_TrackItem___(__promise)
510
+ __result
511
+ .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_TrackItem_ in
512
+ var __vector = bridge.create_std__vector_TrackItem_(__result.count)
513
+ for __item in __result {
514
+ __vector.push_back(__item)
515
+ }
516
+ return __vector
517
+ }()) })
518
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
519
+ return __promise
520
+ }()
521
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__resultCpp)
522
+ } catch (let __error) {
523
+ let __exceptionPtr = __error.toCpp()
524
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__exceptionPtr)
525
+ }
526
+ }
527
+
528
+ @inline(__always)
529
+ public final func getNextTracks(count: Double) -> bridge.Result_std__shared_ptr_Promise_std__vector_TrackItem____ {
530
+ do {
531
+ let __result = try self.__implementation.getNextTracks(count: count)
532
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_std__vector_TrackItem___ in
533
+ let __promise = bridge.create_std__shared_ptr_Promise_std__vector_TrackItem___()
534
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_std__vector_TrackItem___(__promise)
535
+ __result
536
+ .then({ __result in __promiseHolder.resolve({ () -> bridge.std__vector_TrackItem_ in
537
+ var __vector = bridge.create_std__vector_TrackItem_(__result.count)
538
+ for __item in __result {
539
+ __vector.push_back(__item)
540
+ }
541
+ return __vector
542
+ }()) })
543
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
544
+ return __promise
545
+ }()
546
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__resultCpp)
547
+ } catch (let __error) {
548
+ let __exceptionPtr = __error.toCpp()
549
+ return bridge.create_Result_std__shared_ptr_Promise_std__vector_TrackItem____(__exceptionPtr)
550
+ }
551
+ }
552
+
553
+ @inline(__always)
554
+ public final func getCurrentTrackIndex() -> bridge.Result_std__shared_ptr_Promise_double___ {
555
+ do {
556
+ let __result = try self.__implementation.getCurrentTrackIndex()
557
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_double__ in
558
+ let __promise = bridge.create_std__shared_ptr_Promise_double__()
559
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_double__(__promise)
560
+ __result
561
+ .then({ __result in __promiseHolder.resolve(__result) })
562
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
563
+ return __promise
564
+ }()
565
+ return bridge.create_Result_std__shared_ptr_Promise_double___(__resultCpp)
566
+ } catch (let __error) {
567
+ let __exceptionPtr = __error.toCpp()
568
+ return bridge.create_Result_std__shared_ptr_Promise_double___(__exceptionPtr)
569
+ }
570
+ }
571
+
572
+ @inline(__always)
573
+ public final func onTracksNeedUpdate(callback: bridge.Func_void_std__vector_TrackItem__double) -> bridge.Result_void_ {
574
+ do {
575
+ try self.__implementation.onTracksNeedUpdate(callback: { () -> ([TrackItem], Double) -> Void in
576
+ let __wrappedFunction = bridge.wrap_Func_void_std__vector_TrackItem__double(callback)
577
+ return { (__tracks: [TrackItem], __lookahead: Double) -> Void in
578
+ __wrappedFunction.call({ () -> bridge.std__vector_TrackItem_ in
579
+ var __vector = bridge.create_std__vector_TrackItem_(__tracks.count)
580
+ for __item in __tracks {
581
+ __vector.push_back(__item)
582
+ }
583
+ return __vector
584
+ }(), __lookahead)
585
+ }
586
+ }())
587
+ return bridge.create_Result_void_()
588
+ } catch (let __error) {
589
+ let __exceptionPtr = __error.toCpp()
590
+ return bridge.create_Result_void_(__exceptionPtr)
591
+ }
592
+ }
593
+
594
+ @inline(__always)
595
+ public final func setPlaybackSpeed(speed: Double) -> bridge.Result_std__shared_ptr_Promise_void___ {
596
+ do {
597
+ let __result = try self.__implementation.setPlaybackSpeed(speed: speed)
598
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
599
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
600
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
601
+ __result
602
+ .then({ __result in __promiseHolder.resolve() })
603
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
604
+ return __promise
605
+ }()
606
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
607
+ } catch (let __error) {
608
+ let __exceptionPtr = __error.toCpp()
609
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
610
+ }
611
+ }
612
+
613
+ @inline(__always)
614
+ public final func getPlaybackSpeed() -> bridge.Result_std__shared_ptr_Promise_double___ {
615
+ do {
616
+ let __result = try self.__implementation.getPlaybackSpeed()
617
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_double__ in
618
+ let __promise = bridge.create_std__shared_ptr_Promise_double__()
619
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_double__(__promise)
620
+ __result
621
+ .then({ __result in __promiseHolder.resolve(__result) })
622
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
623
+ return __promise
624
+ }()
625
+ return bridge.create_Result_std__shared_ptr_Promise_double___(__resultCpp)
626
+ } catch (let __error) {
627
+ let __exceptionPtr = __error.toCpp()
628
+ return bridge.create_Result_std__shared_ptr_Promise_double___(__exceptionPtr)
629
+ }
630
+ }
458
631
  }
@@ -19,7 +19,7 @@ public extension PlayerConfig {
19
19
  /**
20
20
  * Create a new instance of `PlayerConfig`.
21
21
  */
22
- init(androidAutoEnabled: Bool?, carPlayEnabled: Bool?, showInNotification: Bool?) {
22
+ init(androidAutoEnabled: Bool?, carPlayEnabled: Bool?, showInNotification: Bool?, lookaheadCount: Double?) {
23
23
  self.init({ () -> bridge.std__optional_bool_ in
24
24
  if let __unwrappedValue = androidAutoEnabled {
25
25
  return bridge.create_std__optional_bool_(__unwrappedValue)
@@ -38,6 +38,12 @@ public extension PlayerConfig {
38
38
  } else {
39
39
  return .init()
40
40
  }
41
+ }(), { () -> bridge.std__optional_double_ in
42
+ if let __unwrappedValue = lookaheadCount {
43
+ return bridge.create_std__optional_double_(__unwrappedValue)
44
+ } else {
45
+ return .init()
46
+ }
41
47
  }())
42
48
  }
43
49
 
@@ -112,4 +118,21 @@ public extension PlayerConfig {
112
118
  }()
113
119
  }
114
120
  }
121
+
122
+ var lookaheadCount: Double? {
123
+ @inline(__always)
124
+ get {
125
+ return self.__lookaheadCount.value
126
+ }
127
+ @inline(__always)
128
+ set {
129
+ self.__lookaheadCount = { () -> bridge.std__optional_double_ in
130
+ if let __unwrappedValue = newValue {
131
+ return bridge.create_std__optional_double_(__unwrappedValue)
132
+ } else {
133
+ return .init()
134
+ }
135
+ }()
136
+ }
137
+ }
115
138
  }
@@ -35,6 +35,14 @@ namespace margelo::nitro::nitroplayer {
35
35
  prototype.registerHybridMethod("onAndroidAutoConnectionChange", &HybridTrackPlayerSpec::onAndroidAutoConnectionChange);
36
36
  prototype.registerHybridMethod("isAndroidAutoConnected", &HybridTrackPlayerSpec::isAndroidAutoConnected);
37
37
  prototype.registerHybridMethod("setVolume", &HybridTrackPlayerSpec::setVolume);
38
+ prototype.registerHybridMethod("updateTracks", &HybridTrackPlayerSpec::updateTracks);
39
+ prototype.registerHybridMethod("getTracksById", &HybridTrackPlayerSpec::getTracksById);
40
+ prototype.registerHybridMethod("getTracksNeedingUrls", &HybridTrackPlayerSpec::getTracksNeedingUrls);
41
+ prototype.registerHybridMethod("getNextTracks", &HybridTrackPlayerSpec::getNextTracks);
42
+ prototype.registerHybridMethod("getCurrentTrackIndex", &HybridTrackPlayerSpec::getCurrentTrackIndex);
43
+ prototype.registerHybridMethod("onTracksNeedUpdate", &HybridTrackPlayerSpec::onTracksNeedUpdate);
44
+ prototype.registerHybridMethod("setPlaybackSpeed", &HybridTrackPlayerSpec::setPlaybackSpeed);
45
+ prototype.registerHybridMethod("getPlaybackSpeed", &HybridTrackPlayerSpec::getPlaybackSpeed);
38
46
  });
39
47
  }
40
48
 
@@ -90,6 +90,14 @@ namespace margelo::nitro::nitroplayer {
90
90
  virtual void onAndroidAutoConnectionChange(const std::function<void(bool /* connected */)>& callback) = 0;
91
91
  virtual bool isAndroidAutoConnected() = 0;
92
92
  virtual bool setVolume(double volume) = 0;
93
+ virtual std::shared_ptr<Promise<void>> updateTracks(const std::vector<TrackItem>& tracks) = 0;
94
+ virtual std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksById(const std::vector<std::string>& trackIds) = 0;
95
+ virtual std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksNeedingUrls() = 0;
96
+ virtual std::shared_ptr<Promise<std::vector<TrackItem>>> getNextTracks(double count) = 0;
97
+ virtual std::shared_ptr<Promise<double>> getCurrentTrackIndex() = 0;
98
+ virtual void onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) = 0;
99
+ virtual std::shared_ptr<Promise<void>> setPlaybackSpeed(double speed) = 0;
100
+ virtual std::shared_ptr<Promise<double>> getPlaybackSpeed() = 0;
93
101
 
94
102
  protected:
95
103
  // Hybrid Setup
@@ -37,10 +37,11 @@ namespace margelo::nitro::nitroplayer {
37
37
  std::optional<bool> androidAutoEnabled SWIFT_PRIVATE;
38
38
  std::optional<bool> carPlayEnabled SWIFT_PRIVATE;
39
39
  std::optional<bool> showInNotification SWIFT_PRIVATE;
40
+ std::optional<double> lookaheadCount SWIFT_PRIVATE;
40
41
 
41
42
  public:
42
43
  PlayerConfig() = default;
43
- explicit PlayerConfig(std::optional<bool> androidAutoEnabled, std::optional<bool> carPlayEnabled, std::optional<bool> showInNotification): androidAutoEnabled(androidAutoEnabled), carPlayEnabled(carPlayEnabled), showInNotification(showInNotification) {}
44
+ explicit PlayerConfig(std::optional<bool> androidAutoEnabled, std::optional<bool> carPlayEnabled, std::optional<bool> showInNotification, std::optional<double> lookaheadCount): androidAutoEnabled(androidAutoEnabled), carPlayEnabled(carPlayEnabled), showInNotification(showInNotification), lookaheadCount(lookaheadCount) {}
44
45
  };
45
46
 
46
47
  } // namespace margelo::nitro::nitroplayer
@@ -55,7 +56,8 @@ namespace margelo::nitro {
55
56
  return margelo::nitro::nitroplayer::PlayerConfig(
56
57
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "androidAutoEnabled")),
57
58
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "carPlayEnabled")),
58
- JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "showInNotification"))
59
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, "showInNotification")),
60
+ JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, "lookaheadCount"))
59
61
  );
60
62
  }
61
63
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::nitroplayer::PlayerConfig& arg) {
@@ -63,6 +65,7 @@ namespace margelo::nitro {
63
65
  obj.setProperty(runtime, "androidAutoEnabled", JSIConverter<std::optional<bool>>::toJSI(runtime, arg.androidAutoEnabled));
64
66
  obj.setProperty(runtime, "carPlayEnabled", JSIConverter<std::optional<bool>>::toJSI(runtime, arg.carPlayEnabled));
65
67
  obj.setProperty(runtime, "showInNotification", JSIConverter<std::optional<bool>>::toJSI(runtime, arg.showInNotification));
68
+ obj.setProperty(runtime, "lookaheadCount", JSIConverter<std::optional<double>>::toJSI(runtime, arg.lookaheadCount));
66
69
  return obj;
67
70
  }
68
71
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -76,6 +79,7 @@ namespace margelo::nitro {
76
79
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, "androidAutoEnabled"))) return false;
77
80
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, "carPlayEnabled"))) return false;
78
81
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, "showInNotification"))) return false;
82
+ if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, "lookaheadCount"))) return false;
79
83
  return true;
80
84
  }
81
85
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-player",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "A powerful audio player library for React Native with playlist management, playback controls, and support for Android Auto and CarPlay",
5
5
  "main": "lib/index",
6
6
  "module": "lib/index",