@5stones/react-native-audio-browser 0.1.6 → 0.2.0
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/android/src/main/java/com/audiobrowser/AudioBrowser.kt +34 -9
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +57 -17
- package/android/src/main/java/com/audiobrowser/player/TransformingDataSource.kt +33 -11
- package/ios/Browser/BrowserManager.swift +2 -17
- package/ios/CarPlay/CarPlayController.swift +75 -27
- package/ios/HybridAudioBrowser.swift +42 -12
- package/ios/TrackPlayer.swift +39 -32
- package/lib/commonjs/features/remoteControls.js +24 -1
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/web/NativeAudioBrowser.js +34 -5
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/features/remoteControls.js +22 -0
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/web/NativeAudioBrowser.js +34 -5
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/typescript/src/features/remoteControls.d.ts +26 -0
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts +3 -1
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -1
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts +11 -1
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -1
- package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_RemoteLoadEvent.hpp +89 -0
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +39 -0
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +4 -0
- package/nitrogen/generated/android/c++/JRemoteLoadEvent.hpp +94 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteLoadEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteLoadEvent.kt +44 -0
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +8 -0
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +40 -0
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +3 -0
- package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +17 -0
- package/nitrogen/generated/ios/swift/Func_void_RemoteLoadEvent.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +2 -0
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +51 -0
- package/nitrogen/generated/ios/swift/RemoteLoadEvent.swift +70 -0
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +4 -0
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +7 -0
- package/nitrogen/generated/shared/c++/RemoteLoadEvent.hpp +85 -0
- package/package.json +1 -1
- package/src/features/remoteControls.ts +35 -0
- package/src/specs/audio-browser.nitro.ts +3 -0
- package/src/web/NativeAudioBrowser.ts +34 -5
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// Func_void_RemoteLoadEvent.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.audiobrowser
|
|
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 `(event: struct) => 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_RemoteLoadEvent: (RemoteLoadEvent) -> 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(event: RemoteLoadEvent): Unit
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Represents the JavaScript callback `(event: struct) => 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_RemoteLoadEvent_cxx: Func_void_RemoteLoadEvent {
|
|
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(event: RemoteLoadEvent): Unit
|
|
60
|
+
= invoke_cxx(event)
|
|
61
|
+
|
|
62
|
+
@FastNative
|
|
63
|
+
private external fun invoke_cxx(event: RemoteLoadEvent): Unit
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Represents the JavaScript callback `(event: struct) => void`.
|
|
68
|
+
* This is implemented in Java/Kotlin, via a `(RemoteLoadEvent) -> Unit`.
|
|
69
|
+
* The callback is always coming from native.
|
|
70
|
+
*/
|
|
71
|
+
@DoNotStrip
|
|
72
|
+
@Keep
|
|
73
|
+
@Suppress("ClassName", "RedundantUnitReturnType", "unused")
|
|
74
|
+
class Func_void_RemoteLoadEvent_java(private val function: (RemoteLoadEvent) -> Unit): Func_void_RemoteLoadEvent {
|
|
75
|
+
@DoNotStrip
|
|
76
|
+
@Keep
|
|
77
|
+
override fun invoke(event: RemoteLoadEvent): Unit {
|
|
78
|
+
return this.function(event)
|
|
79
|
+
}
|
|
80
|
+
}
|
package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt
CHANGED
|
@@ -398,6 +398,20 @@ abstract class HybridAudioBrowserSpec: HybridObject() {
|
|
|
398
398
|
onRemoteLike = value
|
|
399
399
|
}
|
|
400
400
|
|
|
401
|
+
abstract var onRemoteLoad: (event: RemoteLoadEvent) -> Unit
|
|
402
|
+
|
|
403
|
+
private var onRemoteLoad_cxx: Func_void_RemoteLoadEvent
|
|
404
|
+
@Keep
|
|
405
|
+
@DoNotStrip
|
|
406
|
+
get() {
|
|
407
|
+
return Func_void_RemoteLoadEvent_java(onRemoteLoad)
|
|
408
|
+
}
|
|
409
|
+
@Keep
|
|
410
|
+
@DoNotStrip
|
|
411
|
+
set(value) {
|
|
412
|
+
onRemoteLoad = value
|
|
413
|
+
}
|
|
414
|
+
|
|
401
415
|
abstract var onRemoteNext: () -> Unit
|
|
402
416
|
|
|
403
417
|
private var onRemoteNext_cxx: Func_void
|
|
@@ -650,6 +664,20 @@ abstract class HybridAudioBrowserSpec: HybridObject() {
|
|
|
650
664
|
handleRemoteLike = value?.let { it }
|
|
651
665
|
}
|
|
652
666
|
|
|
667
|
+
abstract var handleRemoteLoad: ((event: RemoteLoadEvent) -> Unit)?
|
|
668
|
+
|
|
669
|
+
private var handleRemoteLoad_cxx: Func_void_RemoteLoadEvent?
|
|
670
|
+
@Keep
|
|
671
|
+
@DoNotStrip
|
|
672
|
+
get() {
|
|
673
|
+
return handleRemoteLoad?.let { Func_void_RemoteLoadEvent_java(it) }
|
|
674
|
+
}
|
|
675
|
+
@Keep
|
|
676
|
+
@DoNotStrip
|
|
677
|
+
set(value) {
|
|
678
|
+
handleRemoteLoad = value?.let { it }
|
|
679
|
+
}
|
|
680
|
+
|
|
653
681
|
abstract var handleRemoteNext: (() -> Unit)?
|
|
654
682
|
|
|
655
683
|
private var handleRemoteNext_cxx: Func_void?
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// RemoteLoadEvent.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.audiobrowser
|
|
9
|
+
|
|
10
|
+
import androidx.annotation.Keep
|
|
11
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Represents the JavaScript object/struct "RemoteLoadEvent".
|
|
16
|
+
*/
|
|
17
|
+
@DoNotStrip
|
|
18
|
+
@Keep
|
|
19
|
+
data class RemoteLoadEvent(
|
|
20
|
+
@DoNotStrip
|
|
21
|
+
@Keep
|
|
22
|
+
val track: Track,
|
|
23
|
+
@DoNotStrip
|
|
24
|
+
@Keep
|
|
25
|
+
val queue: Array<Track>,
|
|
26
|
+
@DoNotStrip
|
|
27
|
+
@Keep
|
|
28
|
+
val startIndex: Double
|
|
29
|
+
) {
|
|
30
|
+
/* primary constructor */
|
|
31
|
+
|
|
32
|
+
private companion object {
|
|
33
|
+
/**
|
|
34
|
+
* Constructor called from C++
|
|
35
|
+
*/
|
|
36
|
+
@DoNotStrip
|
|
37
|
+
@Keep
|
|
38
|
+
@Suppress("unused")
|
|
39
|
+
@JvmStatic
|
|
40
|
+
private fun fromCpp(track: Track, queue: Array<Track>, startIndex: Double): RemoteLoadEvent {
|
|
41
|
+
return RemoteLoadEvent(track, queue, startIndex)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -284,6 +284,14 @@ namespace margelo::nitro::audiobrowser::bridge::swift {
|
|
|
284
284
|
};
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
// pragma MARK: std::function<void(const RemoteLoadEvent& /* event */)>
|
|
288
|
+
Func_void_RemoteLoadEvent create_Func_void_RemoteLoadEvent(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
289
|
+
auto swiftClosure = AudioBrowser::Func_void_RemoteLoadEvent::fromUnsafe(swiftClosureWrapper);
|
|
290
|
+
return [swiftClosure = std::move(swiftClosure)](const RemoteLoadEvent& event) mutable -> void {
|
|
291
|
+
swiftClosure.call(event);
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
287
295
|
// pragma MARK: std::function<void(const RemotePlayIdEvent& /* event */)>
|
|
288
296
|
Func_void_RemotePlayIdEvent create_Func_void_RemotePlayIdEvent(void* NON_NULL swiftClosureWrapper) noexcept {
|
|
289
297
|
auto swiftClosure = AudioBrowser::Func_void_RemotePlayIdEvent::fromUnsafe(swiftClosureWrapper);
|
|
@@ -116,6 +116,8 @@ namespace margelo::nitro::audiobrowser { enum class RatingType; }
|
|
|
116
116
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpBackwardEvent; }
|
|
117
117
|
// Forward declaration of `RemoteJumpForwardEvent` to properly resolve imports.
|
|
118
118
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpForwardEvent; }
|
|
119
|
+
// Forward declaration of `RemoteLoadEvent` to properly resolve imports.
|
|
120
|
+
namespace margelo::nitro::audiobrowser { struct RemoteLoadEvent; }
|
|
119
121
|
// Forward declaration of `RemotePlayIdEvent` to properly resolve imports.
|
|
120
122
|
namespace margelo::nitro::audiobrowser { struct RemotePlayIdEvent; }
|
|
121
123
|
// Forward declaration of `RemotePlaySearchEvent` to properly resolve imports.
|
|
@@ -220,6 +222,7 @@ namespace AudioBrowser { class HybridAudioBrowserSpec_cxx; }
|
|
|
220
222
|
#include "RatingType.hpp"
|
|
221
223
|
#include "RemoteJumpBackwardEvent.hpp"
|
|
222
224
|
#include "RemoteJumpForwardEvent.hpp"
|
|
225
|
+
#include "RemoteLoadEvent.hpp"
|
|
223
226
|
#include "RemotePlayIdEvent.hpp"
|
|
224
227
|
#include "RemotePlaySearchEvent.hpp"
|
|
225
228
|
#include "RemoteSeekEvent.hpp"
|
|
@@ -2102,6 +2105,28 @@ namespace margelo::nitro::audiobrowser::bridge::swift {
|
|
|
2102
2105
|
return Func_void_RemoteJumpForwardEvent_Wrapper(std::move(value));
|
|
2103
2106
|
}
|
|
2104
2107
|
|
|
2108
|
+
// pragma MARK: std::function<void(const RemoteLoadEvent& /* event */)>
|
|
2109
|
+
/**
|
|
2110
|
+
* Specialized version of `std::function<void(const RemoteLoadEvent&)>`.
|
|
2111
|
+
*/
|
|
2112
|
+
using Func_void_RemoteLoadEvent = std::function<void(const RemoteLoadEvent& /* event */)>;
|
|
2113
|
+
/**
|
|
2114
|
+
* Wrapper class for a `std::function<void(const RemoteLoadEvent& / * event * /)>`, this can be used from Swift.
|
|
2115
|
+
*/
|
|
2116
|
+
class Func_void_RemoteLoadEvent_Wrapper final {
|
|
2117
|
+
public:
|
|
2118
|
+
explicit Func_void_RemoteLoadEvent_Wrapper(std::function<void(const RemoteLoadEvent& /* event */)>&& func): _function(std::make_unique<std::function<void(const RemoteLoadEvent& /* event */)>>(std::move(func))) {}
|
|
2119
|
+
inline void call(RemoteLoadEvent event) const noexcept {
|
|
2120
|
+
_function->operator()(event);
|
|
2121
|
+
}
|
|
2122
|
+
private:
|
|
2123
|
+
std::unique_ptr<std::function<void(const RemoteLoadEvent& /* event */)>> _function;
|
|
2124
|
+
} SWIFT_NONCOPYABLE;
|
|
2125
|
+
Func_void_RemoteLoadEvent create_Func_void_RemoteLoadEvent(void* NON_NULL swiftClosureWrapper) noexcept;
|
|
2126
|
+
inline Func_void_RemoteLoadEvent_Wrapper wrap_Func_void_RemoteLoadEvent(Func_void_RemoteLoadEvent value) noexcept {
|
|
2127
|
+
return Func_void_RemoteLoadEvent_Wrapper(std::move(value));
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2105
2130
|
// pragma MARK: std::function<void(const RemotePlayIdEvent& /* event */)>
|
|
2106
2131
|
/**
|
|
2107
2132
|
* Specialized version of `std::function<void(const RemotePlayIdEvent&)>`.
|
|
@@ -2394,6 +2419,21 @@ namespace margelo::nitro::audiobrowser::bridge::swift {
|
|
|
2394
2419
|
return *optional;
|
|
2395
2420
|
}
|
|
2396
2421
|
|
|
2422
|
+
// pragma MARK: std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>
|
|
2423
|
+
/**
|
|
2424
|
+
* Specialized version of `std::optional<std::function<void(const RemoteLoadEvent& / * event * /)>>`.
|
|
2425
|
+
*/
|
|
2426
|
+
using std__optional_std__function_void_const_RemoteLoadEvent_____event______ = std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>;
|
|
2427
|
+
inline std::optional<std::function<void(const RemoteLoadEvent& /* event */)>> create_std__optional_std__function_void_const_RemoteLoadEvent_____event______(const std::function<void(const RemoteLoadEvent& /* event */)>& value) noexcept {
|
|
2428
|
+
return std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>(value);
|
|
2429
|
+
}
|
|
2430
|
+
inline bool has_value_std__optional_std__function_void_const_RemoteLoadEvent_____event______(const std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>& optional) noexcept {
|
|
2431
|
+
return optional.has_value();
|
|
2432
|
+
}
|
|
2433
|
+
inline std::function<void(const RemoteLoadEvent& /* event */)> get_std__optional_std__function_void_const_RemoteLoadEvent_____event______(const std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>& optional) noexcept {
|
|
2434
|
+
return *optional;
|
|
2435
|
+
}
|
|
2436
|
+
|
|
2397
2437
|
// pragma MARK: std::optional<std::function<void(const RemotePlayIdEvent& /* event */)>>
|
|
2398
2438
|
/**
|
|
2399
2439
|
* Specialized version of `std::optional<std::function<void(const RemotePlayIdEvent& / * event * /)>>`.
|
|
@@ -132,6 +132,8 @@ namespace margelo::nitro::audiobrowser { enum class RatingType; }
|
|
|
132
132
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpBackwardEvent; }
|
|
133
133
|
// Forward declaration of `RemoteJumpForwardEvent` to properly resolve imports.
|
|
134
134
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpForwardEvent; }
|
|
135
|
+
// Forward declaration of `RemoteLoadEvent` to properly resolve imports.
|
|
136
|
+
namespace margelo::nitro::audiobrowser { struct RemoteLoadEvent; }
|
|
135
137
|
// Forward declaration of `RemotePlayIdEvent` to properly resolve imports.
|
|
136
138
|
namespace margelo::nitro::audiobrowser { struct RemotePlayIdEvent; }
|
|
137
139
|
// Forward declaration of `RemotePlaySearchEvent` to properly resolve imports.
|
|
@@ -240,6 +242,7 @@ namespace margelo::nitro::audiobrowser { struct UpdateOptions; }
|
|
|
240
242
|
#include "RatingType.hpp"
|
|
241
243
|
#include "RemoteJumpBackwardEvent.hpp"
|
|
242
244
|
#include "RemoteJumpForwardEvent.hpp"
|
|
245
|
+
#include "RemoteLoadEvent.hpp"
|
|
243
246
|
#include "RemotePlayIdEvent.hpp"
|
|
244
247
|
#include "RemotePlaySearchEvent.hpp"
|
|
245
248
|
#include "RemoteSeekEvent.hpp"
|
|
@@ -94,6 +94,8 @@ namespace margelo::nitro::audiobrowser { enum class PlaybackState; }
|
|
|
94
94
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpBackwardEvent; }
|
|
95
95
|
// Forward declaration of `RemoteJumpForwardEvent` to properly resolve imports.
|
|
96
96
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpForwardEvent; }
|
|
97
|
+
// Forward declaration of `RemoteLoadEvent` to properly resolve imports.
|
|
98
|
+
namespace margelo::nitro::audiobrowser { struct RemoteLoadEvent; }
|
|
97
99
|
// Forward declaration of `RemotePlayIdEvent` to properly resolve imports.
|
|
98
100
|
namespace margelo::nitro::audiobrowser { struct RemotePlayIdEvent; }
|
|
99
101
|
// Forward declaration of `RemotePlaySearchEvent` to properly resolve imports.
|
|
@@ -222,6 +224,7 @@ namespace margelo::nitro::audiobrowser { struct NowPlayingUpdate; }
|
|
|
222
224
|
#include "PlaybackState.hpp"
|
|
223
225
|
#include "RemoteJumpBackwardEvent.hpp"
|
|
224
226
|
#include "RemoteJumpForwardEvent.hpp"
|
|
227
|
+
#include "RemoteLoadEvent.hpp"
|
|
225
228
|
#include "RemotePlayIdEvent.hpp"
|
|
226
229
|
#include "RemotePlaySearchEvent.hpp"
|
|
227
230
|
#include "RemoteSeekEvent.hpp"
|
|
@@ -490,6 +493,13 @@ namespace margelo::nitro::audiobrowser {
|
|
|
490
493
|
inline void setOnRemoteLike(const std::function<void()>& onRemoteLike) noexcept override {
|
|
491
494
|
_swiftPart.setOnRemoteLike(onRemoteLike);
|
|
492
495
|
}
|
|
496
|
+
inline std::function<void(const RemoteLoadEvent& /* event */)> getOnRemoteLoad() noexcept override {
|
|
497
|
+
auto __result = _swiftPart.getOnRemoteLoad();
|
|
498
|
+
return __result;
|
|
499
|
+
}
|
|
500
|
+
inline void setOnRemoteLoad(const std::function<void(const RemoteLoadEvent& /* event */)>& onRemoteLoad) noexcept override {
|
|
501
|
+
_swiftPart.setOnRemoteLoad(onRemoteLoad);
|
|
502
|
+
}
|
|
493
503
|
inline std::function<void()> getOnRemoteNext() noexcept override {
|
|
494
504
|
auto __result = _swiftPart.getOnRemoteNext();
|
|
495
505
|
return __result;
|
|
@@ -616,6 +626,13 @@ namespace margelo::nitro::audiobrowser {
|
|
|
616
626
|
inline void setHandleRemoteLike(const std::optional<std::function<void()>>& handleRemoteLike) noexcept override {
|
|
617
627
|
_swiftPart.setHandleRemoteLike(handleRemoteLike);
|
|
618
628
|
}
|
|
629
|
+
inline std::optional<std::function<void(const RemoteLoadEvent& /* event */)>> getHandleRemoteLoad() noexcept override {
|
|
630
|
+
auto __result = _swiftPart.getHandleRemoteLoad();
|
|
631
|
+
return __result;
|
|
632
|
+
}
|
|
633
|
+
inline void setHandleRemoteLoad(const std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>& handleRemoteLoad) noexcept override {
|
|
634
|
+
_swiftPart.setHandleRemoteLoad(handleRemoteLoad);
|
|
635
|
+
}
|
|
619
636
|
inline std::optional<std::function<void()>> getHandleRemoteNext() noexcept override {
|
|
620
637
|
auto __result = _swiftPart.getHandleRemoteNext();
|
|
621
638
|
return __result;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// Func_void_RemoteLoadEvent.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 `(_ event: RemoteLoadEvent) -> 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_RemoteLoadEvent {
|
|
16
|
+
public typealias bridge = margelo.nitro.audiobrowser.bridge.swift
|
|
17
|
+
|
|
18
|
+
private let closure: (_ event: RemoteLoadEvent) -> Void
|
|
19
|
+
|
|
20
|
+
public init(_ closure: @escaping (_ event: RemoteLoadEvent) -> Void) {
|
|
21
|
+
self.closure = closure
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@inline(__always)
|
|
25
|
+
public func call(event: RemoteLoadEvent) -> Void {
|
|
26
|
+
self.closure(event)
|
|
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_RemoteLoadEvent`.
|
|
40
|
+
* The pointer has to be a retained opaque `Unmanaged<Func_void_RemoteLoadEvent>`.
|
|
41
|
+
* This removes one strong reference from the object!
|
|
42
|
+
*/
|
|
43
|
+
@inline(__always)
|
|
44
|
+
public static func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> Func_void_RemoteLoadEvent {
|
|
45
|
+
return Unmanaged<Func_void_RemoteLoadEvent>.fromOpaque(pointer).takeRetainedValue()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -38,6 +38,7 @@ public protocol HybridAudioBrowserSpec_protocol: HybridObject {
|
|
|
38
38
|
var onRemoteJumpBackward: (_ event: RemoteJumpBackwardEvent) -> Void { get set }
|
|
39
39
|
var onRemoteJumpForward: (_ event: RemoteJumpForwardEvent) -> Void { get set }
|
|
40
40
|
var onRemoteLike: () -> Void { get set }
|
|
41
|
+
var onRemoteLoad: (_ event: RemoteLoadEvent) -> Void { get set }
|
|
41
42
|
var onRemoteNext: () -> Void { get set }
|
|
42
43
|
var onRemotePause: () -> Void { get set }
|
|
43
44
|
var onRemotePlay: () -> Void { get set }
|
|
@@ -56,6 +57,7 @@ public protocol HybridAudioBrowserSpec_protocol: HybridObject {
|
|
|
56
57
|
var handleRemoteJumpBackward: ((_ event: RemoteJumpBackwardEvent) -> Void)? { get set }
|
|
57
58
|
var handleRemoteJumpForward: ((_ event: RemoteJumpForwardEvent) -> Void)? { get set }
|
|
58
59
|
var handleRemoteLike: (() -> Void)? { get set }
|
|
60
|
+
var handleRemoteLoad: ((_ event: RemoteLoadEvent) -> Void)? { get set }
|
|
59
61
|
var handleRemoteNext: (() -> Void)? { get set }
|
|
60
62
|
var handleRemotePause: (() -> Void)? { get set }
|
|
61
63
|
var handleRemotePlay: (() -> Void)? { get set }
|
|
@@ -680,6 +680,25 @@ open class HybridAudioBrowserSpec_cxx {
|
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
682
|
|
|
683
|
+
public final var onRemoteLoad: bridge.Func_void_RemoteLoadEvent {
|
|
684
|
+
@inline(__always)
|
|
685
|
+
get {
|
|
686
|
+
return { () -> bridge.Func_void_RemoteLoadEvent in
|
|
687
|
+
let __closureWrapper = Func_void_RemoteLoadEvent(self.__implementation.onRemoteLoad)
|
|
688
|
+
return bridge.create_Func_void_RemoteLoadEvent(__closureWrapper.toUnsafe())
|
|
689
|
+
}()
|
|
690
|
+
}
|
|
691
|
+
@inline(__always)
|
|
692
|
+
set {
|
|
693
|
+
self.__implementation.onRemoteLoad = { () -> (RemoteLoadEvent) -> Void in
|
|
694
|
+
let __wrappedFunction = bridge.wrap_Func_void_RemoteLoadEvent(newValue)
|
|
695
|
+
return { (__event: RemoteLoadEvent) -> Void in
|
|
696
|
+
__wrappedFunction.call(__event)
|
|
697
|
+
}
|
|
698
|
+
}()
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
683
702
|
public final var onRemoteNext: bridge.Func_void {
|
|
684
703
|
@inline(__always)
|
|
685
704
|
get {
|
|
@@ -1087,6 +1106,38 @@ open class HybridAudioBrowserSpec_cxx {
|
|
|
1087
1106
|
}
|
|
1088
1107
|
}
|
|
1089
1108
|
|
|
1109
|
+
public final var handleRemoteLoad: bridge.std__optional_std__function_void_const_RemoteLoadEvent_____event______ {
|
|
1110
|
+
@inline(__always)
|
|
1111
|
+
get {
|
|
1112
|
+
return { () -> bridge.std__optional_std__function_void_const_RemoteLoadEvent_____event______ in
|
|
1113
|
+
if let __unwrappedValue = self.__implementation.handleRemoteLoad {
|
|
1114
|
+
return bridge.create_std__optional_std__function_void_const_RemoteLoadEvent_____event______({ () -> bridge.Func_void_RemoteLoadEvent in
|
|
1115
|
+
let __closureWrapper = Func_void_RemoteLoadEvent(__unwrappedValue)
|
|
1116
|
+
return bridge.create_Func_void_RemoteLoadEvent(__closureWrapper.toUnsafe())
|
|
1117
|
+
}())
|
|
1118
|
+
} else {
|
|
1119
|
+
return .init()
|
|
1120
|
+
}
|
|
1121
|
+
}()
|
|
1122
|
+
}
|
|
1123
|
+
@inline(__always)
|
|
1124
|
+
set {
|
|
1125
|
+
self.__implementation.handleRemoteLoad = { () -> ((_ event: RemoteLoadEvent) -> Void)? in
|
|
1126
|
+
if bridge.has_value_std__optional_std__function_void_const_RemoteLoadEvent_____event______(newValue) {
|
|
1127
|
+
let __unwrapped = bridge.get_std__optional_std__function_void_const_RemoteLoadEvent_____event______(newValue)
|
|
1128
|
+
return { () -> (RemoteLoadEvent) -> Void in
|
|
1129
|
+
let __wrappedFunction = bridge.wrap_Func_void_RemoteLoadEvent(__unwrapped)
|
|
1130
|
+
return { (__event: RemoteLoadEvent) -> Void in
|
|
1131
|
+
__wrappedFunction.call(__event)
|
|
1132
|
+
}
|
|
1133
|
+
}()
|
|
1134
|
+
} else {
|
|
1135
|
+
return nil
|
|
1136
|
+
}
|
|
1137
|
+
}()
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1090
1141
|
public final var handleRemoteNext: bridge.std__optional_std__function_void____ {
|
|
1091
1142
|
@inline(__always)
|
|
1092
1143
|
get {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// RemoteLoadEvent.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
|
+
* Represents an instance of `RemoteLoadEvent`, backed by a C++ struct.
|
|
13
|
+
*/
|
|
14
|
+
public typealias RemoteLoadEvent = margelo.nitro.audiobrowser.RemoteLoadEvent
|
|
15
|
+
|
|
16
|
+
public extension RemoteLoadEvent {
|
|
17
|
+
private typealias bridge = margelo.nitro.audiobrowser.bridge.swift
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Create a new instance of `RemoteLoadEvent`.
|
|
21
|
+
*/
|
|
22
|
+
init(track: Track, queue: [Track], startIndex: Double) {
|
|
23
|
+
self.init(track, { () -> bridge.std__vector_Track_ in
|
|
24
|
+
var __vector = bridge.create_std__vector_Track_(queue.count)
|
|
25
|
+
for __item in queue {
|
|
26
|
+
__vector.push_back(__item)
|
|
27
|
+
}
|
|
28
|
+
return __vector
|
|
29
|
+
}(), startIndex)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var track: Track {
|
|
33
|
+
@inline(__always)
|
|
34
|
+
get {
|
|
35
|
+
return self.__track
|
|
36
|
+
}
|
|
37
|
+
@inline(__always)
|
|
38
|
+
set {
|
|
39
|
+
self.__track = newValue
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var queue: [Track] {
|
|
44
|
+
@inline(__always)
|
|
45
|
+
get {
|
|
46
|
+
return self.__queue.map({ __item in __item })
|
|
47
|
+
}
|
|
48
|
+
@inline(__always)
|
|
49
|
+
set {
|
|
50
|
+
self.__queue = { () -> bridge.std__vector_Track_ in
|
|
51
|
+
var __vector = bridge.create_std__vector_Track_(newValue.count)
|
|
52
|
+
for __item in newValue {
|
|
53
|
+
__vector.push_back(__item)
|
|
54
|
+
}
|
|
55
|
+
return __vector
|
|
56
|
+
}()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
var startIndex: Double {
|
|
61
|
+
@inline(__always)
|
|
62
|
+
get {
|
|
63
|
+
return self.__startIndex
|
|
64
|
+
}
|
|
65
|
+
@inline(__always)
|
|
66
|
+
set {
|
|
67
|
+
self.__startIndex = newValue
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -68,6 +68,8 @@ namespace margelo::nitro::audiobrowser {
|
|
|
68
68
|
prototype.registerHybridSetter("onRemoteJumpForward", &HybridAudioBrowserSpec::setOnRemoteJumpForward);
|
|
69
69
|
prototype.registerHybridGetter("onRemoteLike", &HybridAudioBrowserSpec::getOnRemoteLike);
|
|
70
70
|
prototype.registerHybridSetter("onRemoteLike", &HybridAudioBrowserSpec::setOnRemoteLike);
|
|
71
|
+
prototype.registerHybridGetter("onRemoteLoad", &HybridAudioBrowserSpec::getOnRemoteLoad);
|
|
72
|
+
prototype.registerHybridSetter("onRemoteLoad", &HybridAudioBrowserSpec::setOnRemoteLoad);
|
|
71
73
|
prototype.registerHybridGetter("onRemoteNext", &HybridAudioBrowserSpec::getOnRemoteNext);
|
|
72
74
|
prototype.registerHybridSetter("onRemoteNext", &HybridAudioBrowserSpec::setOnRemoteNext);
|
|
73
75
|
prototype.registerHybridGetter("onRemotePause", &HybridAudioBrowserSpec::getOnRemotePause);
|
|
@@ -104,6 +106,8 @@ namespace margelo::nitro::audiobrowser {
|
|
|
104
106
|
prototype.registerHybridSetter("handleRemoteJumpForward", &HybridAudioBrowserSpec::setHandleRemoteJumpForward);
|
|
105
107
|
prototype.registerHybridGetter("handleRemoteLike", &HybridAudioBrowserSpec::getHandleRemoteLike);
|
|
106
108
|
prototype.registerHybridSetter("handleRemoteLike", &HybridAudioBrowserSpec::setHandleRemoteLike);
|
|
109
|
+
prototype.registerHybridGetter("handleRemoteLoad", &HybridAudioBrowserSpec::getHandleRemoteLoad);
|
|
110
|
+
prototype.registerHybridSetter("handleRemoteLoad", &HybridAudioBrowserSpec::setHandleRemoteLoad);
|
|
107
111
|
prototype.registerHybridGetter("handleRemoteNext", &HybridAudioBrowserSpec::getHandleRemoteNext);
|
|
108
112
|
prototype.registerHybridSetter("handleRemoteNext", &HybridAudioBrowserSpec::setHandleRemoteNext);
|
|
109
113
|
prototype.registerHybridGetter("handleRemotePause", &HybridAudioBrowserSpec::getHandleRemotePause);
|
|
@@ -53,6 +53,8 @@ namespace margelo::nitro::audiobrowser { struct Playback; }
|
|
|
53
53
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpBackwardEvent; }
|
|
54
54
|
// Forward declaration of `RemoteJumpForwardEvent` to properly resolve imports.
|
|
55
55
|
namespace margelo::nitro::audiobrowser { struct RemoteJumpForwardEvent; }
|
|
56
|
+
// Forward declaration of `RemoteLoadEvent` to properly resolve imports.
|
|
57
|
+
namespace margelo::nitro::audiobrowser { struct RemoteLoadEvent; }
|
|
56
58
|
// Forward declaration of `RemotePlayIdEvent` to properly resolve imports.
|
|
57
59
|
namespace margelo::nitro::audiobrowser { struct RemotePlayIdEvent; }
|
|
58
60
|
// Forward declaration of `RemotePlaySearchEvent` to properly resolve imports.
|
|
@@ -122,6 +124,7 @@ namespace margelo::nitro::audiobrowser { enum class BatteryOptimizationStatus; }
|
|
|
122
124
|
#include "Playback.hpp"
|
|
123
125
|
#include "RemoteJumpBackwardEvent.hpp"
|
|
124
126
|
#include "RemoteJumpForwardEvent.hpp"
|
|
127
|
+
#include "RemoteLoadEvent.hpp"
|
|
125
128
|
#include "RemotePlayIdEvent.hpp"
|
|
126
129
|
#include "RemotePlaySearchEvent.hpp"
|
|
127
130
|
#include "RemoteSeekEvent.hpp"
|
|
@@ -226,6 +229,8 @@ namespace margelo::nitro::audiobrowser {
|
|
|
226
229
|
virtual void setOnRemoteJumpForward(const std::function<void(const RemoteJumpForwardEvent& /* event */)>& onRemoteJumpForward) = 0;
|
|
227
230
|
virtual std::function<void()> getOnRemoteLike() = 0;
|
|
228
231
|
virtual void setOnRemoteLike(const std::function<void()>& onRemoteLike) = 0;
|
|
232
|
+
virtual std::function<void(const RemoteLoadEvent& /* event */)> getOnRemoteLoad() = 0;
|
|
233
|
+
virtual void setOnRemoteLoad(const std::function<void(const RemoteLoadEvent& /* event */)>& onRemoteLoad) = 0;
|
|
229
234
|
virtual std::function<void()> getOnRemoteNext() = 0;
|
|
230
235
|
virtual void setOnRemoteNext(const std::function<void()>& onRemoteNext) = 0;
|
|
231
236
|
virtual std::function<void()> getOnRemotePause() = 0;
|
|
@@ -262,6 +267,8 @@ namespace margelo::nitro::audiobrowser {
|
|
|
262
267
|
virtual void setHandleRemoteJumpForward(const std::optional<std::function<void(const RemoteJumpForwardEvent& /* event */)>>& handleRemoteJumpForward) = 0;
|
|
263
268
|
virtual std::optional<std::function<void()>> getHandleRemoteLike() = 0;
|
|
264
269
|
virtual void setHandleRemoteLike(const std::optional<std::function<void()>>& handleRemoteLike) = 0;
|
|
270
|
+
virtual std::optional<std::function<void(const RemoteLoadEvent& /* event */)>> getHandleRemoteLoad() = 0;
|
|
271
|
+
virtual void setHandleRemoteLoad(const std::optional<std::function<void(const RemoteLoadEvent& /* event */)>>& handleRemoteLoad) = 0;
|
|
265
272
|
virtual std::optional<std::function<void()>> getHandleRemoteNext() = 0;
|
|
266
273
|
virtual void setHandleRemoteNext(const std::optional<std::function<void()>>& handleRemoteNext) = 0;
|
|
267
274
|
virtual std::optional<std::function<void()>> getHandleRemotePause() = 0;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// RemoteLoadEvent.hpp
|
|
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
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#if __has_include(<NitroModules/JSIConverter.hpp>)
|
|
11
|
+
#include <NitroModules/JSIConverter.hpp>
|
|
12
|
+
#else
|
|
13
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
14
|
+
#endif
|
|
15
|
+
#if __has_include(<NitroModules/NitroDefines.hpp>)
|
|
16
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
17
|
+
#else
|
|
18
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
19
|
+
#endif
|
|
20
|
+
#if __has_include(<NitroModules/JSIHelpers.hpp>)
|
|
21
|
+
#include <NitroModules/JSIHelpers.hpp>
|
|
22
|
+
#else
|
|
23
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
// Forward declaration of `Track` to properly resolve imports.
|
|
27
|
+
namespace margelo::nitro::audiobrowser { struct Track; }
|
|
28
|
+
|
|
29
|
+
#include "Track.hpp"
|
|
30
|
+
#include <vector>
|
|
31
|
+
|
|
32
|
+
namespace margelo::nitro::audiobrowser {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A struct which can be represented as a JavaScript object (RemoteLoadEvent).
|
|
36
|
+
*/
|
|
37
|
+
struct RemoteLoadEvent {
|
|
38
|
+
public:
|
|
39
|
+
Track track SWIFT_PRIVATE;
|
|
40
|
+
std::vector<Track> queue SWIFT_PRIVATE;
|
|
41
|
+
double startIndex SWIFT_PRIVATE;
|
|
42
|
+
|
|
43
|
+
public:
|
|
44
|
+
RemoteLoadEvent() = default;
|
|
45
|
+
explicit RemoteLoadEvent(Track track, std::vector<Track> queue, double startIndex): track(track), queue(queue), startIndex(startIndex) {}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
} // namespace margelo::nitro::audiobrowser
|
|
49
|
+
|
|
50
|
+
namespace margelo::nitro {
|
|
51
|
+
|
|
52
|
+
// C++ RemoteLoadEvent <> JS RemoteLoadEvent (object)
|
|
53
|
+
template <>
|
|
54
|
+
struct JSIConverter<margelo::nitro::audiobrowser::RemoteLoadEvent> final {
|
|
55
|
+
static inline margelo::nitro::audiobrowser::RemoteLoadEvent fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
|
|
56
|
+
jsi::Object obj = arg.asObject(runtime);
|
|
57
|
+
return margelo::nitro::audiobrowser::RemoteLoadEvent(
|
|
58
|
+
JSIConverter<margelo::nitro::audiobrowser::Track>::fromJSI(runtime, obj.getProperty(runtime, "track")),
|
|
59
|
+
JSIConverter<std::vector<margelo::nitro::audiobrowser::Track>>::fromJSI(runtime, obj.getProperty(runtime, "queue")),
|
|
60
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "startIndex"))
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::audiobrowser::RemoteLoadEvent& arg) {
|
|
64
|
+
jsi::Object obj(runtime);
|
|
65
|
+
obj.setProperty(runtime, "track", JSIConverter<margelo::nitro::audiobrowser::Track>::toJSI(runtime, arg.track));
|
|
66
|
+
obj.setProperty(runtime, "queue", JSIConverter<std::vector<margelo::nitro::audiobrowser::Track>>::toJSI(runtime, arg.queue));
|
|
67
|
+
obj.setProperty(runtime, "startIndex", JSIConverter<double>::toJSI(runtime, arg.startIndex));
|
|
68
|
+
return obj;
|
|
69
|
+
}
|
|
70
|
+
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
71
|
+
if (!value.isObject()) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
jsi::Object obj = value.getObject(runtime);
|
|
75
|
+
if (!nitro::isPlainObject(runtime, obj)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (!JSIConverter<margelo::nitro::audiobrowser::Track>::canConvert(runtime, obj.getProperty(runtime, "track"))) return false;
|
|
79
|
+
if (!JSIConverter<std::vector<margelo::nitro::audiobrowser::Track>>::canConvert(runtime, obj.getProperty(runtime, "queue"))) return false;
|
|
80
|
+
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "startIndex"))) return false;
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
} // namespace margelo::nitro
|