react-native-nitro-player 0.5.6 → 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.
- package/README.md +2 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +43 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +340 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +60 -0
- package/ios/HybridTrackPlayer.swift +54 -1
- package/ios/core/TrackPlayerCore.swift +254 -2
- package/ios/playlist/PlaylistManager.swift +68 -0
- package/lib/specs/TrackPlayer.nitro.d.ts +47 -0
- package/lib/types/PlayerQueue.d.ts +5 -0
- package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__double.hpp +104 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +160 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +8 -0
- package/nitrogen/generated/android/c++/JPlayerConfig.hpp +7 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__double.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +37 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerConfig.kt +6 -3
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +16 -0
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +65 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +62 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__double.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +8 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +173 -0
- package/nitrogen/generated/ios/swift/PlayerConfig.swift +24 -1
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +8 -0
- package/nitrogen/generated/shared/c++/PlayerConfig.hpp +6 -2
- package/package.json +1 -1
- package/src/specs/TrackPlayer.nitro.ts +57 -0
- package/src/types/PlayerQueue.ts +5 -0
|
@@ -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.
|
|
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",
|
|
@@ -87,4 +87,61 @@ export interface TrackPlayer
|
|
|
87
87
|
onAndroidAutoConnectionChange(callback: (connected: boolean) => void): void
|
|
88
88
|
isAndroidAutoConnected(): boolean
|
|
89
89
|
setVolume(volume: number): boolean
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Update entire track objects across all playlists
|
|
93
|
+
* Matches by track.id and updates all properties (url, artwork, title, etc.)
|
|
94
|
+
* Note: Empty string "" is valid for TrackItem.url to support lazy loading
|
|
95
|
+
* @param tracks Array of full TrackItem objects to update
|
|
96
|
+
* @returns Promise that resolves when updates complete
|
|
97
|
+
*/
|
|
98
|
+
updateTracks(tracks: TrackItem[]): Promise<void>
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get tracks by IDs from all playlists
|
|
102
|
+
* @param trackIds Array of track IDs to fetch
|
|
103
|
+
* @returns Promise resolving to array of matching tracks
|
|
104
|
+
*/
|
|
105
|
+
getTracksById(trackIds: string[]): Promise<TrackItem[]>
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get tracks with missing/empty URLs from current playlist
|
|
109
|
+
* @returns Promise resolving to array of tracks needing URLs
|
|
110
|
+
*/
|
|
111
|
+
getTracksNeedingUrls(): Promise<TrackItem[]>
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get next N tracks from current position in playlist
|
|
115
|
+
* Useful for preloading URLs before they're needed
|
|
116
|
+
* @param count Number of upcoming tracks to return
|
|
117
|
+
* @returns Promise resolving to array of next tracks
|
|
118
|
+
*/
|
|
119
|
+
getNextTracks(count: number): Promise<TrackItem[]>
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get current track index in the active playlist
|
|
123
|
+
* @returns Promise resolving to 0-based index, or -1 if no track playing
|
|
124
|
+
*/
|
|
125
|
+
getCurrentTrackIndex(): Promise<number>
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Register callback that fires when tracks will be needed soon
|
|
129
|
+
* Useful for proactive URL resolution in Android Auto/CarPlay
|
|
130
|
+
* @param callback Function called with tracks needing URLs and lookahead count
|
|
131
|
+
*/
|
|
132
|
+
onTracksNeedUpdate(
|
|
133
|
+
callback: (tracks: TrackItem[], lookahead: number) => void
|
|
134
|
+
): void
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Get the current track index in the active playlist
|
|
138
|
+
* @returns Promise resolving to 0-based index, or -1 if no track playing
|
|
139
|
+
*/
|
|
140
|
+
setPlaybackSpeed(speed: number): Promise<void>
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get the current playback speed
|
|
144
|
+
* @returns Promise resolving to playback speed
|
|
145
|
+
*/
|
|
146
|
+
getPlaybackSpeed(): Promise<number>
|
|
90
147
|
}
|
package/src/types/PlayerQueue.ts
CHANGED
|
@@ -44,4 +44,9 @@ export interface PlayerConfig {
|
|
|
44
44
|
androidAutoEnabled?: boolean
|
|
45
45
|
carPlayEnabled?: boolean
|
|
46
46
|
showInNotification?: boolean
|
|
47
|
+
/**
|
|
48
|
+
* Number of upcoming tracks to preload URLs for (default: 5)
|
|
49
|
+
* Higher values = more proactive loading, but more network requests
|
|
50
|
+
*/
|
|
51
|
+
lookaheadCount?: number
|
|
47
52
|
}
|