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
|
@@ -55,6 +55,7 @@ namespace margelo::nitro::nitroplayer { enum class Reason; }
|
|
|
55
55
|
#include "JFunc_void_double_double.hpp"
|
|
56
56
|
#include "JFunc_void_double_double_std__optional_bool_.hpp"
|
|
57
57
|
#include "JFunc_void_bool.hpp"
|
|
58
|
+
#include "JFunc_void_std__vector_TrackItem__double.hpp"
|
|
58
59
|
|
|
59
60
|
namespace margelo::nitro::nitroplayer {
|
|
60
61
|
|
|
@@ -254,5 +255,164 @@ namespace margelo::nitro::nitroplayer {
|
|
|
254
255
|
auto __result = method(_javaPart, volume);
|
|
255
256
|
return static_cast<bool>(__result);
|
|
256
257
|
}
|
|
258
|
+
std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::updateTracks(const std::vector<TrackItem>& tracks) {
|
|
259
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("updateTracks");
|
|
260
|
+
auto __result = method(_javaPart, [&]() {
|
|
261
|
+
size_t __size = tracks.size();
|
|
262
|
+
jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
|
|
263
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
264
|
+
const auto& __element = tracks[__i];
|
|
265
|
+
auto __elementJni = JTrackItem::fromCpp(__element);
|
|
266
|
+
__array->setElement(__i, *__elementJni);
|
|
267
|
+
}
|
|
268
|
+
return __array;
|
|
269
|
+
}());
|
|
270
|
+
return [&]() {
|
|
271
|
+
auto __promise = Promise<void>::create();
|
|
272
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
|
|
273
|
+
__promise->resolve();
|
|
274
|
+
});
|
|
275
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
276
|
+
jni::JniException __jniError(__throwable);
|
|
277
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
278
|
+
});
|
|
279
|
+
return __promise;
|
|
280
|
+
}();
|
|
281
|
+
}
|
|
282
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getTracksById(const std::vector<std::string>& trackIds) {
|
|
283
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* trackIds */)>("getTracksById");
|
|
284
|
+
auto __result = method(_javaPart, [&]() {
|
|
285
|
+
size_t __size = trackIds.size();
|
|
286
|
+
jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
|
|
287
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
288
|
+
const auto& __element = trackIds[__i];
|
|
289
|
+
auto __elementJni = jni::make_jstring(__element);
|
|
290
|
+
__array->setElement(__i, *__elementJni);
|
|
291
|
+
}
|
|
292
|
+
return __array;
|
|
293
|
+
}());
|
|
294
|
+
return [&]() {
|
|
295
|
+
auto __promise = Promise<std::vector<TrackItem>>::create();
|
|
296
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
297
|
+
auto __result = jni::static_ref_cast<jni::JArrayClass<JTrackItem>>(__boxedResult);
|
|
298
|
+
__promise->resolve([&]() {
|
|
299
|
+
size_t __size = __result->size();
|
|
300
|
+
std::vector<TrackItem> __vector;
|
|
301
|
+
__vector.reserve(__size);
|
|
302
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
303
|
+
auto __element = __result->getElement(__i);
|
|
304
|
+
__vector.push_back(__element->toCpp());
|
|
305
|
+
}
|
|
306
|
+
return __vector;
|
|
307
|
+
}());
|
|
308
|
+
});
|
|
309
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
310
|
+
jni::JniException __jniError(__throwable);
|
|
311
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
312
|
+
});
|
|
313
|
+
return __promise;
|
|
314
|
+
}();
|
|
315
|
+
}
|
|
316
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getTracksNeedingUrls() {
|
|
317
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getTracksNeedingUrls");
|
|
318
|
+
auto __result = method(_javaPart);
|
|
319
|
+
return [&]() {
|
|
320
|
+
auto __promise = Promise<std::vector<TrackItem>>::create();
|
|
321
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
322
|
+
auto __result = jni::static_ref_cast<jni::JArrayClass<JTrackItem>>(__boxedResult);
|
|
323
|
+
__promise->resolve([&]() {
|
|
324
|
+
size_t __size = __result->size();
|
|
325
|
+
std::vector<TrackItem> __vector;
|
|
326
|
+
__vector.reserve(__size);
|
|
327
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
328
|
+
auto __element = __result->getElement(__i);
|
|
329
|
+
__vector.push_back(__element->toCpp());
|
|
330
|
+
}
|
|
331
|
+
return __vector;
|
|
332
|
+
}());
|
|
333
|
+
});
|
|
334
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
335
|
+
jni::JniException __jniError(__throwable);
|
|
336
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
337
|
+
});
|
|
338
|
+
return __promise;
|
|
339
|
+
}();
|
|
340
|
+
}
|
|
341
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getNextTracks(double count) {
|
|
342
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* count */)>("getNextTracks");
|
|
343
|
+
auto __result = method(_javaPart, count);
|
|
344
|
+
return [&]() {
|
|
345
|
+
auto __promise = Promise<std::vector<TrackItem>>::create();
|
|
346
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
347
|
+
auto __result = jni::static_ref_cast<jni::JArrayClass<JTrackItem>>(__boxedResult);
|
|
348
|
+
__promise->resolve([&]() {
|
|
349
|
+
size_t __size = __result->size();
|
|
350
|
+
std::vector<TrackItem> __vector;
|
|
351
|
+
__vector.reserve(__size);
|
|
352
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
353
|
+
auto __element = __result->getElement(__i);
|
|
354
|
+
__vector.push_back(__element->toCpp());
|
|
355
|
+
}
|
|
356
|
+
return __vector;
|
|
357
|
+
}());
|
|
358
|
+
});
|
|
359
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
360
|
+
jni::JniException __jniError(__throwable);
|
|
361
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
362
|
+
});
|
|
363
|
+
return __promise;
|
|
364
|
+
}();
|
|
365
|
+
}
|
|
366
|
+
std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getCurrentTrackIndex() {
|
|
367
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getCurrentTrackIndex");
|
|
368
|
+
auto __result = method(_javaPart);
|
|
369
|
+
return [&]() {
|
|
370
|
+
auto __promise = Promise<double>::create();
|
|
371
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
372
|
+
auto __result = jni::static_ref_cast<jni::JDouble>(__boxedResult);
|
|
373
|
+
__promise->resolve(__result->value());
|
|
374
|
+
});
|
|
375
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
376
|
+
jni::JniException __jniError(__throwable);
|
|
377
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
378
|
+
});
|
|
379
|
+
return __promise;
|
|
380
|
+
}();
|
|
381
|
+
}
|
|
382
|
+
void JHybridTrackPlayerSpec::onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) {
|
|
383
|
+
static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_TrackItem__double::javaobject> /* callback */)>("onTracksNeedUpdate_cxx");
|
|
384
|
+
method(_javaPart, JFunc_void_std__vector_TrackItem__double_cxx::fromCpp(callback));
|
|
385
|
+
}
|
|
386
|
+
std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::setPlaybackSpeed(double speed) {
|
|
387
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* speed */)>("setPlaybackSpeed");
|
|
388
|
+
auto __result = method(_javaPart, speed);
|
|
389
|
+
return [&]() {
|
|
390
|
+
auto __promise = Promise<void>::create();
|
|
391
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
|
|
392
|
+
__promise->resolve();
|
|
393
|
+
});
|
|
394
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
395
|
+
jni::JniException __jniError(__throwable);
|
|
396
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
397
|
+
});
|
|
398
|
+
return __promise;
|
|
399
|
+
}();
|
|
400
|
+
}
|
|
401
|
+
std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getPlaybackSpeed() {
|
|
402
|
+
static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlaybackSpeed");
|
|
403
|
+
auto __result = method(_javaPart);
|
|
404
|
+
return [&]() {
|
|
405
|
+
auto __promise = Promise<double>::create();
|
|
406
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
407
|
+
auto __result = jni::static_ref_cast<jni::JDouble>(__boxedResult);
|
|
408
|
+
__promise->resolve(__result->value());
|
|
409
|
+
});
|
|
410
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
411
|
+
jni::JniException __jniError(__throwable);
|
|
412
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
413
|
+
});
|
|
414
|
+
return __promise;
|
|
415
|
+
}();
|
|
416
|
+
}
|
|
257
417
|
|
|
258
418
|
} // namespace margelo::nitro::nitroplayer
|
|
@@ -75,6 +75,14 @@ namespace margelo::nitro::nitroplayer {
|
|
|
75
75
|
void onAndroidAutoConnectionChange(const std::function<void(bool /* connected */)>& callback) override;
|
|
76
76
|
bool isAndroidAutoConnected() override;
|
|
77
77
|
bool setVolume(double volume) override;
|
|
78
|
+
std::shared_ptr<Promise<void>> updateTracks(const std::vector<TrackItem>& tracks) override;
|
|
79
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksById(const std::vector<std::string>& trackIds) override;
|
|
80
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksNeedingUrls() override;
|
|
81
|
+
std::shared_ptr<Promise<std::vector<TrackItem>>> getNextTracks(double count) override;
|
|
82
|
+
std::shared_ptr<Promise<double>> getCurrentTrackIndex() override;
|
|
83
|
+
void onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) override;
|
|
84
|
+
std::shared_ptr<Promise<void>> setPlaybackSpeed(double speed) override;
|
|
85
|
+
std::shared_ptr<Promise<double>> getPlaybackSpeed() override;
|
|
78
86
|
|
|
79
87
|
private:
|
|
80
88
|
friend HybridBase;
|
|
@@ -37,10 +37,13 @@ namespace margelo::nitro::nitroplayer {
|
|
|
37
37
|
jni::local_ref<jni::JBoolean> carPlayEnabled = this->getFieldValue(fieldCarPlayEnabled);
|
|
38
38
|
static const auto fieldShowInNotification = clazz->getField<jni::JBoolean>("showInNotification");
|
|
39
39
|
jni::local_ref<jni::JBoolean> showInNotification = this->getFieldValue(fieldShowInNotification);
|
|
40
|
+
static const auto fieldLookaheadCount = clazz->getField<jni::JDouble>("lookaheadCount");
|
|
41
|
+
jni::local_ref<jni::JDouble> lookaheadCount = this->getFieldValue(fieldLookaheadCount);
|
|
40
42
|
return PlayerConfig(
|
|
41
43
|
androidAutoEnabled != nullptr ? std::make_optional(static_cast<bool>(androidAutoEnabled->value())) : std::nullopt,
|
|
42
44
|
carPlayEnabled != nullptr ? std::make_optional(static_cast<bool>(carPlayEnabled->value())) : std::nullopt,
|
|
43
|
-
showInNotification != nullptr ? std::make_optional(static_cast<bool>(showInNotification->value())) : std::nullopt
|
|
45
|
+
showInNotification != nullptr ? std::make_optional(static_cast<bool>(showInNotification->value())) : std::nullopt,
|
|
46
|
+
lookaheadCount != nullptr ? std::make_optional(lookaheadCount->value()) : std::nullopt
|
|
44
47
|
);
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -50,14 +53,15 @@ namespace margelo::nitro::nitroplayer {
|
|
|
50
53
|
*/
|
|
51
54
|
[[maybe_unused]]
|
|
52
55
|
static jni::local_ref<JPlayerConfig::javaobject> fromCpp(const PlayerConfig& value) {
|
|
53
|
-
using JSignature = JPlayerConfig(jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>);
|
|
56
|
+
using JSignature = JPlayerConfig(jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JDouble>);
|
|
54
57
|
static const auto clazz = javaClassStatic();
|
|
55
58
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
56
59
|
return create(
|
|
57
60
|
clazz,
|
|
58
61
|
value.androidAutoEnabled.has_value() ? jni::JBoolean::valueOf(value.androidAutoEnabled.value()) : nullptr,
|
|
59
62
|
value.carPlayEnabled.has_value() ? jni::JBoolean::valueOf(value.carPlayEnabled.value()) : nullptr,
|
|
60
|
-
value.showInNotification.has_value() ? jni::JBoolean::valueOf(value.showInNotification.value()) : nullptr
|
|
63
|
+
value.showInNotification.has_value() ? jni::JBoolean::valueOf(value.showInNotification.value()) : nullptr,
|
|
64
|
+
value.lookaheadCount.has_value() ? jni::JDouble::valueOf(value.lookaheadCount.value()) : nullptr
|
|
61
65
|
);
|
|
62
66
|
}
|
|
63
67
|
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// Func_void_std__vector_TrackItem__double.kt
|
|
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
|
+
package com.margelo.nitro.nitroplayer
|
|
9
|
+
|
|
10
|
+
import androidx.annotation.Keep
|
|
11
|
+
import com.facebook.jni.HybridData
|
|
12
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
13
|
+
import dalvik.annotation.optimization.FastNative
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Represents the JavaScript callback `(tracks: array, lookahead: number) => void`.
|
|
18
|
+
* This can be either implemented in C++ (in which case it might be a callback coming from JS),
|
|
19
|
+
* or in Kotlin/Java (in which case it is a native callback).
|
|
20
|
+
*/
|
|
21
|
+
@DoNotStrip
|
|
22
|
+
@Keep
|
|
23
|
+
@Suppress("ClassName", "RedundantUnitReturnType")
|
|
24
|
+
fun interface Func_void_std__vector_TrackItem__double: (Array<TrackItem>, Double) -> Unit {
|
|
25
|
+
/**
|
|
26
|
+
* Call the given JS callback.
|
|
27
|
+
* @throws Throwable if the JS function itself throws an error, or if the JS function/runtime has already been deleted.
|
|
28
|
+
*/
|
|
29
|
+
@DoNotStrip
|
|
30
|
+
@Keep
|
|
31
|
+
override fun invoke(tracks: Array<TrackItem>, lookahead: Double): Unit
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Represents the JavaScript callback `(tracks: array, lookahead: number) => void`.
|
|
36
|
+
* This is implemented in C++, via a `std::function<...>`.
|
|
37
|
+
* The callback might be coming from JS.
|
|
38
|
+
*/
|
|
39
|
+
@DoNotStrip
|
|
40
|
+
@Keep
|
|
41
|
+
@Suppress(
|
|
42
|
+
"KotlinJniMissingFunction", "unused",
|
|
43
|
+
"RedundantSuppression", "RedundantUnitReturnType", "FunctionName",
|
|
44
|
+
"ConvertSecondaryConstructorToPrimary", "ClassName", "LocalVariableName",
|
|
45
|
+
)
|
|
46
|
+
class Func_void_std__vector_TrackItem__double_cxx: Func_void_std__vector_TrackItem__double {
|
|
47
|
+
@DoNotStrip
|
|
48
|
+
@Keep
|
|
49
|
+
private val mHybridData: HybridData
|
|
50
|
+
|
|
51
|
+
@DoNotStrip
|
|
52
|
+
@Keep
|
|
53
|
+
private constructor(hybridData: HybridData) {
|
|
54
|
+
mHybridData = hybridData
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@DoNotStrip
|
|
58
|
+
@Keep
|
|
59
|
+
override fun invoke(tracks: Array<TrackItem>, lookahead: Double): Unit
|
|
60
|
+
= invoke_cxx(tracks,lookahead)
|
|
61
|
+
|
|
62
|
+
@FastNative
|
|
63
|
+
private external fun invoke_cxx(tracks: Array<TrackItem>, lookahead: Double): Unit
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Represents the JavaScript callback `(tracks: array, lookahead: number) => void`.
|
|
68
|
+
* This is implemented in Java/Kotlin, via a `(Array<TrackItem>, Double) -> Unit`.
|
|
69
|
+
* The callback is always coming from native.
|
|
70
|
+
*/
|
|
71
|
+
@DoNotStrip
|
|
72
|
+
@Keep
|
|
73
|
+
@Suppress("ClassName", "RedundantUnitReturnType", "unused")
|
|
74
|
+
class Func_void_std__vector_TrackItem__double_java(private val function: (Array<TrackItem>, Double) -> Unit): Func_void_std__vector_TrackItem__double {
|
|
75
|
+
@DoNotStrip
|
|
76
|
+
@Keep
|
|
77
|
+
override fun invoke(tracks: Array<TrackItem>, lookahead: Double): Unit {
|
|
78
|
+
return this.function(tracks, lookahead)
|
|
79
|
+
}
|
|
80
|
+
}
|
package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt
CHANGED
|
@@ -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 {
|