react-native-nitro-player 0.7.0 → 0.7.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +47 -46
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +9 -13
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +45 -90
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +48 -182
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +21 -77
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +55 -104
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +113 -123
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +82 -0
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ListenerRegistry.kt +48 -0
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerAndroidAuto.kt +62 -0
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +153 -1887
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +122 -0
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerNotify.kt +44 -0
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +162 -0
  15. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueue.kt +179 -0
  16. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +170 -0
  17. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +28 -0
  18. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerTempQueue.kt +121 -0
  19. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerUrlLoader.kt +98 -0
  20. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +27 -18
  21. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +150 -135
  22. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +13 -30
  23. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +102 -162
  24. package/ios/HybridDownloadManager.swift +32 -26
  25. package/ios/HybridEqualizer.swift +48 -35
  26. package/ios/HybridTrackPlayer.swift +127 -102
  27. package/ios/core/ListenerRegistry.swift +60 -0
  28. package/ios/core/TrackPlayerCore.swift +130 -2356
  29. package/ios/core/TrackPlayerListener.swift +395 -0
  30. package/ios/core/TrackPlayerNotify.swift +52 -0
  31. package/ios/core/TrackPlayerPlayback.swift +274 -0
  32. package/ios/core/TrackPlayerQueue.swift +221 -0
  33. package/ios/core/TrackPlayerQueueBuild.swift +493 -0
  34. package/ios/core/TrackPlayerTempQueue.swift +167 -0
  35. package/ios/core/TrackPlayerUrlLoader.swift +169 -0
  36. package/ios/equalizer/EqualizerCore.swift +63 -123
  37. package/ios/media/MediaSessionManager.swift +32 -49
  38. package/ios/playlist/PlaylistManager.swift +2 -9
  39. package/ios/queue/HybridPlayerQueue.swift +69 -66
  40. package/lib/hooks/useDownloadedTracks.js +16 -13
  41. package/lib/hooks/useEqualizer.d.ts +4 -4
  42. package/lib/hooks/useEqualizer.js +22 -17
  43. package/lib/hooks/useEqualizerPresets.d.ts +3 -3
  44. package/lib/hooks/useEqualizerPresets.js +12 -18
  45. package/lib/specs/AndroidAutoMediaLibrary.nitro.d.ts +2 -2
  46. package/lib/specs/AudioDevices.nitro.d.ts +2 -2
  47. package/lib/specs/DownloadManager.nitro.d.ts +10 -10
  48. package/lib/specs/Equalizer.nitro.d.ts +10 -10
  49. package/lib/specs/TrackPlayer.nitro.d.ts +38 -16
  50. package/lib/types/EqualizerTypes.d.ts +3 -3
  51. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +2 -0
  52. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp +122 -0
  53. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp +31 -6
  54. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.hpp +2 -2
  55. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp +16 -3
  56. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.hpp +1 -1
  57. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +154 -44
  58. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +10 -10
  59. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +130 -34
  60. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +9 -9
  61. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +115 -24
  62. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +8 -8
  63. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +243 -24
  64. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +16 -8
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem_.kt +80 -0
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrarySpec.kt +3 -2
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAudioDevicesSpec.kt +2 -1
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +10 -10
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +10 -9
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +9 -8
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +45 -8
  72. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +74 -18
  73. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +380 -151
  74. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +10 -10
  75. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +12 -9
  76. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +23 -8
  77. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +82 -8
  78. package/nitrogen/generated/ios/swift/Func_void_EqualizerState.swift +46 -0
  79. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedPlaylist_.swift +58 -0
  80. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedTrack_.swift +58 -0
  81. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__std__string_.swift +58 -0
  82. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedPlaylist_.swift +46 -0
  83. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedTrack_.swift +46 -0
  84. package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +5 -5
  85. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__std__vector_TrackItem_.swift +46 -0
  86. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +10 -10
  87. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +141 -71
  88. package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +9 -9
  89. package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +105 -41
  90. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec.swift +8 -8
  91. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec_cxx.swift +95 -32
  92. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +16 -8
  93. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +267 -32
  94. package/nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.hpp +3 -2
  95. package/nitrogen/generated/shared/c++/HybridAudioDevicesSpec.hpp +2 -1
  96. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +10 -10
  97. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +10 -9
  98. package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.hpp +9 -8
  99. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
  100. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +16 -8
  101. package/package.json +5 -5
  102. package/src/hooks/useDownloadedTracks.ts +17 -13
  103. package/src/hooks/useEqualizer.ts +26 -21
  104. package/src/hooks/useEqualizerPresets.ts +15 -21
  105. package/src/specs/AndroidAutoMediaLibrary.nitro.ts +2 -2
  106. package/src/specs/AudioDevices.nitro.ts +2 -2
  107. package/src/specs/DownloadManager.nitro.ts +10 -10
  108. package/src/specs/Equalizer.nitro.ts +10 -10
  109. package/src/specs/TrackPlayer.nitro.ts +52 -16
  110. package/src/types/EqualizerTypes.ts +17 -13
@@ -2,7 +2,7 @@
2
2
  * Represents a single equalizer frequency band
3
3
  */
4
4
  export interface EqualizerBand {
5
- /** Band index (0-4) */
5
+ /** Band index (0-9) */
6
6
  index: number;
7
7
  /** Center frequency in Hz */
8
8
  centerFrequency: number;
@@ -21,7 +21,7 @@ export type PresetType = 'built-in' | 'custom';
21
21
  export interface EqualizerPreset {
22
22
  /** Unique preset name */
23
23
  name: string;
24
- /** Array of 5 gain values in dB for each band */
24
+ /** Array of 10 gain values in dB for each band */
25
25
  gains: number[];
26
26
  /** Whether this is a built-in or custom preset */
27
27
  type: PresetType;
@@ -49,4 +49,4 @@ export interface GainRange {
49
49
  /**
50
50
  * Built-in preset names
51
51
  */
52
- export type BuiltInPresetName = 'Flat' | 'Bass Boost' | 'Bass Reducer' | 'Treble Boost' | 'Treble Reducer' | 'Vocal Boost' | 'Rock' | 'Pop' | 'Jazz' | 'Classical' | 'Hip Hop' | 'Electronic' | 'Acoustic' | 'R&B' | 'Loudness';
52
+ export type BuiltInPresetName = 'Flat' | 'Rock' | 'Pop' | 'Classical' | 'Dance' | 'Techno' | 'Club' | 'Live' | 'Reggae' | 'Full Bass' | 'Full Treble' | 'Full Bass & Treble' | 'Large Hall' | 'Party' | 'Ska' | 'Soft' | 'Soft Rock' | 'Headphones' | 'Laptop Speakers';
@@ -34,6 +34,7 @@
34
34
  #include "JFunc_void_double_double.hpp"
35
35
  #include "JFunc_void_double_double_std__optional_bool_.hpp"
36
36
  #include "JFunc_void_std__vector_TrackItem__double.hpp"
37
+ #include "JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp"
37
38
  #include <NitroModules/DefaultConstructableObject.hpp>
38
39
 
39
40
  namespace margelo::nitro::nitroplayer {
@@ -117,6 +118,7 @@ void registerAllNatives() {
117
118
  margelo::nitro::nitroplayer::JFunc_void_double_double_cxx::registerNatives();
118
119
  margelo::nitro::nitroplayer::JFunc_void_double_double_std__optional_bool__cxx::registerNatives();
119
120
  margelo::nitro::nitroplayer::JFunc_void_std__vector_TrackItem__double_cxx::registerNatives();
121
+ margelo::nitro::nitroplayer::JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx::registerNatives();
120
122
 
121
123
  // Register Nitro Hybrid Objects
122
124
  HybridObjectRegistry::registerHybridObjectConstructor(
@@ -0,0 +1,122 @@
1
+ ///
2
+ /// JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include "TrackItem.hpp"
14
+ #include <vector>
15
+ #include <functional>
16
+ #include <NitroModules/JNICallable.hpp>
17
+ #include "JTrackItem.hpp"
18
+ #include <string>
19
+ #include <NitroModules/Null.hpp>
20
+ #include <variant>
21
+ #include <optional>
22
+ #include "JVariant_NullType_String.hpp"
23
+ #include <NitroModules/JNull.hpp>
24
+ #include <NitroModules/AnyMap.hpp>
25
+ #include <NitroModules/JAnyMap.hpp>
26
+
27
+ namespace margelo::nitro::nitroplayer {
28
+
29
+ using namespace facebook;
30
+
31
+ /**
32
+ * Represents the Java/Kotlin callback `(playNextQueue: Array<TrackItem>, upNextQueue: Array<TrackItem>) -> Unit`.
33
+ * This can be passed around between C++ and Java/Kotlin.
34
+ */
35
+ struct JFunc_void_std__vector_TrackItem__std__vector_TrackItem_: public jni::JavaClass<JFunc_void_std__vector_TrackItem__std__vector_TrackItem_> {
36
+ public:
37
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem_;";
38
+
39
+ public:
40
+ /**
41
+ * Invokes the function this `JFunc_void_std__vector_TrackItem__std__vector_TrackItem_` instance holds through JNI.
42
+ */
43
+ void invoke(const std::vector<TrackItem>& playNextQueue, const std::vector<TrackItem>& upNextQueue) const {
44
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JArrayClass<JTrackItem>> /* playNextQueue */, jni::alias_ref<jni::JArrayClass<JTrackItem>> /* upNextQueue */)>("invoke");
45
+ method(self(), [&]() {
46
+ size_t __size = playNextQueue.size();
47
+ jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
48
+ for (size_t __i = 0; __i < __size; __i++) {
49
+ const auto& __element = playNextQueue[__i];
50
+ auto __elementJni = JTrackItem::fromCpp(__element);
51
+ __array->setElement(__i, *__elementJni);
52
+ }
53
+ return __array;
54
+ }(), [&]() {
55
+ size_t __size = upNextQueue.size();
56
+ jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
57
+ for (size_t __i = 0; __i < __size; __i++) {
58
+ const auto& __element = upNextQueue[__i];
59
+ auto __elementJni = JTrackItem::fromCpp(__element);
60
+ __array->setElement(__i, *__elementJni);
61
+ }
62
+ return __array;
63
+ }());
64
+ }
65
+ };
66
+
67
+ /**
68
+ * An implementation of Func_void_std__vector_TrackItem__std__vector_TrackItem_ that is backed by a C++ implementation (using `std::function<...>`)
69
+ */
70
+ class JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx final: public jni::HybridClass<JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx, JFunc_void_std__vector_TrackItem__std__vector_TrackItem_> {
71
+ public:
72
+ static jni::local_ref<JFunc_void_std__vector_TrackItem__std__vector_TrackItem_::javaobject> fromCpp(const std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)>& func) {
73
+ return JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx::newObjectCxxArgs(func);
74
+ }
75
+
76
+ public:
77
+ /**
78
+ * Invokes the C++ `std::function<...>` this `JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx` instance holds.
79
+ */
80
+ void invoke_cxx(jni::alias_ref<jni::JArrayClass<JTrackItem>> playNextQueue, jni::alias_ref<jni::JArrayClass<JTrackItem>> upNextQueue) {
81
+ _func([&]() {
82
+ size_t __size = playNextQueue->size();
83
+ std::vector<TrackItem> __vector;
84
+ __vector.reserve(__size);
85
+ for (size_t __i = 0; __i < __size; __i++) {
86
+ auto __element = playNextQueue->getElement(__i);
87
+ __vector.push_back(__element->toCpp());
88
+ }
89
+ return __vector;
90
+ }(), [&]() {
91
+ size_t __size = upNextQueue->size();
92
+ std::vector<TrackItem> __vector;
93
+ __vector.reserve(__size);
94
+ for (size_t __i = 0; __i < __size; __i++) {
95
+ auto __element = upNextQueue->getElement(__i);
96
+ __vector.push_back(__element->toCpp());
97
+ }
98
+ return __vector;
99
+ }());
100
+ }
101
+
102
+ public:
103
+ [[nodiscard]]
104
+ inline const std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)>& getFunction() const {
105
+ return _func;
106
+ }
107
+
108
+ public:
109
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem__cxx;";
110
+ static void registerNatives() {
111
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx::invoke_cxx)});
112
+ }
113
+
114
+ private:
115
+ explicit JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx(const std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)>& func): _func(func) { }
116
+
117
+ private:
118
+ friend HybridBase;
119
+ std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)> _func;
120
+ };
121
+
122
+ } // namespace margelo::nitro::nitroplayer
@@ -9,6 +9,9 @@
9
9
 
10
10
 
11
11
 
12
+ #include <NitroModules/Promise.hpp>
13
+ #include <NitroModules/JPromise.hpp>
14
+ #include <NitroModules/JUnit.hpp>
12
15
  #include <string>
13
16
 
14
17
  namespace margelo::nitro::nitroplayer {
@@ -44,13 +47,35 @@ namespace margelo::nitro::nitroplayer {
44
47
 
45
48
 
46
49
  // Methods
47
- void JHybridAndroidAutoMediaLibrarySpec::setMediaLibrary(const std::string& libraryJson) {
48
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* libraryJson */)>("setMediaLibrary");
49
- method(_javaPart, jni::make_jstring(libraryJson));
50
+ std::shared_ptr<Promise<void>> JHybridAndroidAutoMediaLibrarySpec::setMediaLibrary(const std::string& libraryJson) {
51
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* libraryJson */)>("setMediaLibrary");
52
+ auto __result = method(_javaPart, jni::make_jstring(libraryJson));
53
+ return [&]() {
54
+ auto __promise = Promise<void>::create();
55
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
56
+ __promise->resolve();
57
+ });
58
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
59
+ jni::JniException __jniError(__throwable);
60
+ __promise->reject(std::make_exception_ptr(__jniError));
61
+ });
62
+ return __promise;
63
+ }();
50
64
  }
51
- void JHybridAndroidAutoMediaLibrarySpec::clearMediaLibrary() {
52
- static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("clearMediaLibrary");
53
- method(_javaPart);
65
+ std::shared_ptr<Promise<void>> JHybridAndroidAutoMediaLibrarySpec::clearMediaLibrary() {
66
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("clearMediaLibrary");
67
+ auto __result = method(_javaPart);
68
+ return [&]() {
69
+ auto __promise = Promise<void>::create();
70
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
71
+ __promise->resolve();
72
+ });
73
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
74
+ jni::JniException __jniError(__throwable);
75
+ __promise->reject(std::make_exception_ptr(__jniError));
76
+ });
77
+ return __promise;
78
+ }();
54
79
  }
55
80
 
56
81
  } // namespace margelo::nitro::nitroplayer
@@ -54,8 +54,8 @@ namespace margelo::nitro::nitroplayer {
54
54
 
55
55
  public:
56
56
  // Methods
57
- void setMediaLibrary(const std::string& libraryJson) override;
58
- void clearMediaLibrary() override;
57
+ std::shared_ptr<Promise<void>> setMediaLibrary(const std::string& libraryJson) override;
58
+ std::shared_ptr<Promise<void>> clearMediaLibrary() override;
59
59
 
60
60
  private:
61
61
  jni::global_ref<JHybridAndroidAutoMediaLibrarySpec::JavaPart> _javaPart;
@@ -14,6 +14,9 @@ namespace margelo::nitro::nitroplayer { struct TAudioDevice; }
14
14
  #include <vector>
15
15
  #include "JTAudioDevice.hpp"
16
16
  #include <string>
17
+ #include <NitroModules/Promise.hpp>
18
+ #include <NitroModules/JPromise.hpp>
19
+ #include <NitroModules/JUnit.hpp>
17
20
 
18
21
  namespace margelo::nitro::nitroplayer {
19
22
 
@@ -62,10 +65,20 @@ namespace margelo::nitro::nitroplayer {
62
65
  return __vector;
63
66
  }();
64
67
  }
65
- bool JHybridAudioDevicesSpec::setAudioDevice(double deviceId) {
66
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(double /* deviceId */)>("setAudioDevice");
68
+ std::shared_ptr<Promise<void>> JHybridAudioDevicesSpec::setAudioDevice(double deviceId) {
69
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* deviceId */)>("setAudioDevice");
67
70
  auto __result = method(_javaPart, deviceId);
68
- return static_cast<bool>(__result);
71
+ return [&]() {
72
+ auto __promise = Promise<void>::create();
73
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
74
+ __promise->resolve();
75
+ });
76
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
77
+ jni::JniException __jniError(__throwable);
78
+ __promise->reject(std::make_exception_ptr(__jniError));
79
+ });
80
+ return __promise;
81
+ }();
69
82
  }
70
83
 
71
84
  } // namespace margelo::nitro::nitroplayer
@@ -55,7 +55,7 @@ namespace margelo::nitro::nitroplayer {
55
55
  public:
56
56
  // Methods
57
57
  std::vector<TAudioDevice> getAudioDevices() override;
58
- bool setAudioDevice(double deviceId) override;
58
+ std::shared_ptr<Promise<void>> setAudioDevice(double deviceId) override;
59
59
 
60
60
  private:
61
61
  jni::global_ref<JHybridAudioDevicesSpec::JavaPart> _javaPart;
@@ -318,63 +318,151 @@ namespace margelo::nitro::nitroplayer {
318
318
  auto __result = method(_javaPart, jni::make_jstring(trackId));
319
319
  return __result->toCpp();
320
320
  }
321
- bool JHybridDownloadManagerSpec::isTrackDownloaded(const std::string& trackId) {
322
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* trackId */)>("isTrackDownloaded");
321
+ std::shared_ptr<Promise<bool>> JHybridDownloadManagerSpec::isTrackDownloaded(const std::string& trackId) {
322
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("isTrackDownloaded");
323
323
  auto __result = method(_javaPart, jni::make_jstring(trackId));
324
- return static_cast<bool>(__result);
324
+ return [&]() {
325
+ auto __promise = Promise<bool>::create();
326
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
327
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
328
+ __promise->resolve(static_cast<bool>(__result->value()));
329
+ });
330
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
331
+ jni::JniException __jniError(__throwable);
332
+ __promise->reject(std::make_exception_ptr(__jniError));
333
+ });
334
+ return __promise;
335
+ }();
325
336
  }
326
- bool JHybridDownloadManagerSpec::isPlaylistDownloaded(const std::string& playlistId) {
327
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistDownloaded");
337
+ std::shared_ptr<Promise<bool>> JHybridDownloadManagerSpec::isPlaylistDownloaded(const std::string& playlistId) {
338
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistDownloaded");
328
339
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
329
- return static_cast<bool>(__result);
340
+ return [&]() {
341
+ auto __promise = Promise<bool>::create();
342
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
343
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
344
+ __promise->resolve(static_cast<bool>(__result->value()));
345
+ });
346
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
347
+ jni::JniException __jniError(__throwable);
348
+ __promise->reject(std::make_exception_ptr(__jniError));
349
+ });
350
+ return __promise;
351
+ }();
330
352
  }
331
- bool JHybridDownloadManagerSpec::isPlaylistPartiallyDownloaded(const std::string& playlistId) {
332
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistPartiallyDownloaded");
353
+ std::shared_ptr<Promise<bool>> JHybridDownloadManagerSpec::isPlaylistPartiallyDownloaded(const std::string& playlistId) {
354
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistPartiallyDownloaded");
333
355
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
334
- return static_cast<bool>(__result);
356
+ return [&]() {
357
+ auto __promise = Promise<bool>::create();
358
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
359
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
360
+ __promise->resolve(static_cast<bool>(__result->value()));
361
+ });
362
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
363
+ jni::JniException __jniError(__throwable);
364
+ __promise->reject(std::make_exception_ptr(__jniError));
365
+ });
366
+ return __promise;
367
+ }();
335
368
  }
336
- std::variant<nitro::NullType, DownloadedTrack> JHybridDownloadManagerSpec::getDownloadedTrack(const std::string& trackId) {
337
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedTrack>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadedTrack");
369
+ std::shared_ptr<Promise<std::variant<nitro::NullType, DownloadedTrack>>> JHybridDownloadManagerSpec::getDownloadedTrack(const std::string& trackId) {
370
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadedTrack");
338
371
  auto __result = method(_javaPart, jni::make_jstring(trackId));
339
- return __result->toCpp();
372
+ return [&]() {
373
+ auto __promise = Promise<std::variant<nitro::NullType, DownloadedTrack>>::create();
374
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
375
+ auto __result = jni::static_ref_cast<JVariant_NullType_DownloadedTrack>(__boxedResult);
376
+ __promise->resolve(__result->toCpp());
377
+ });
378
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
379
+ jni::JniException __jniError(__throwable);
380
+ __promise->reject(std::make_exception_ptr(__jniError));
381
+ });
382
+ return __promise;
383
+ }();
340
384
  }
341
- std::vector<DownloadedTrack> JHybridDownloadManagerSpec::getAllDownloadedTracks() {
342
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedTrack>>()>("getAllDownloadedTracks");
385
+ std::shared_ptr<Promise<std::vector<DownloadedTrack>>> JHybridDownloadManagerSpec::getAllDownloadedTracks() {
386
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getAllDownloadedTracks");
343
387
  auto __result = method(_javaPart);
344
388
  return [&]() {
345
- size_t __size = __result->size();
346
- std::vector<DownloadedTrack> __vector;
347
- __vector.reserve(__size);
348
- for (size_t __i = 0; __i < __size; __i++) {
349
- auto __element = __result->getElement(__i);
350
- __vector.push_back(__element->toCpp());
351
- }
352
- return __vector;
389
+ auto __promise = Promise<std::vector<DownloadedTrack>>::create();
390
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
391
+ auto __result = jni::static_ref_cast<jni::JArrayClass<JDownloadedTrack>>(__boxedResult);
392
+ __promise->resolve([&]() {
393
+ size_t __size = __result->size();
394
+ std::vector<DownloadedTrack> __vector;
395
+ __vector.reserve(__size);
396
+ for (size_t __i = 0; __i < __size; __i++) {
397
+ auto __element = __result->getElement(__i);
398
+ __vector.push_back(__element->toCpp());
399
+ }
400
+ return __vector;
401
+ }());
402
+ });
403
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
404
+ jni::JniException __jniError(__throwable);
405
+ __promise->reject(std::make_exception_ptr(__jniError));
406
+ });
407
+ return __promise;
353
408
  }();
354
409
  }
355
- std::variant<nitro::NullType, DownloadedPlaylist> JHybridDownloadManagerSpec::getDownloadedPlaylist(const std::string& playlistId) {
356
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedPlaylist>(jni::alias_ref<jni::JString> /* playlistId */)>("getDownloadedPlaylist");
410
+ std::shared_ptr<Promise<std::variant<nitro::NullType, DownloadedPlaylist>>> JHybridDownloadManagerSpec::getDownloadedPlaylist(const std::string& playlistId) {
411
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */)>("getDownloadedPlaylist");
357
412
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
358
- return __result->toCpp();
413
+ return [&]() {
414
+ auto __promise = Promise<std::variant<nitro::NullType, DownloadedPlaylist>>::create();
415
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
416
+ auto __result = jni::static_ref_cast<JVariant_NullType_DownloadedPlaylist>(__boxedResult);
417
+ __promise->resolve(__result->toCpp());
418
+ });
419
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
420
+ jni::JniException __jniError(__throwable);
421
+ __promise->reject(std::make_exception_ptr(__jniError));
422
+ });
423
+ return __promise;
424
+ }();
359
425
  }
360
- std::vector<DownloadedPlaylist> JHybridDownloadManagerSpec::getAllDownloadedPlaylists() {
361
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedPlaylist>>()>("getAllDownloadedPlaylists");
426
+ std::shared_ptr<Promise<std::vector<DownloadedPlaylist>>> JHybridDownloadManagerSpec::getAllDownloadedPlaylists() {
427
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getAllDownloadedPlaylists");
362
428
  auto __result = method(_javaPart);
363
429
  return [&]() {
364
- size_t __size = __result->size();
365
- std::vector<DownloadedPlaylist> __vector;
366
- __vector.reserve(__size);
367
- for (size_t __i = 0; __i < __size; __i++) {
368
- auto __element = __result->getElement(__i);
369
- __vector.push_back(__element->toCpp());
370
- }
371
- return __vector;
430
+ auto __promise = Promise<std::vector<DownloadedPlaylist>>::create();
431
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
432
+ auto __result = jni::static_ref_cast<jni::JArrayClass<JDownloadedPlaylist>>(__boxedResult);
433
+ __promise->resolve([&]() {
434
+ size_t __size = __result->size();
435
+ std::vector<DownloadedPlaylist> __vector;
436
+ __vector.reserve(__size);
437
+ for (size_t __i = 0; __i < __size; __i++) {
438
+ auto __element = __result->getElement(__i);
439
+ __vector.push_back(__element->toCpp());
440
+ }
441
+ return __vector;
442
+ }());
443
+ });
444
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
445
+ jni::JniException __jniError(__throwable);
446
+ __promise->reject(std::make_exception_ptr(__jniError));
447
+ });
448
+ return __promise;
372
449
  }();
373
450
  }
374
- std::variant<nitro::NullType, std::string> JHybridDownloadManagerSpec::getLocalPath(const std::string& trackId) {
375
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>(jni::alias_ref<jni::JString> /* trackId */)>("getLocalPath");
451
+ std::shared_ptr<Promise<std::variant<nitro::NullType, std::string>>> JHybridDownloadManagerSpec::getLocalPath(const std::string& trackId) {
452
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("getLocalPath");
376
453
  auto __result = method(_javaPart, jni::make_jstring(trackId));
377
- return __result->toCpp();
454
+ return [&]() {
455
+ auto __promise = Promise<std::variant<nitro::NullType, std::string>>::create();
456
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
457
+ auto __result = jni::static_ref_cast<JVariant_NullType_String>(__boxedResult);
458
+ __promise->resolve(__result->toCpp());
459
+ });
460
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
461
+ jni::JniException __jniError(__throwable);
462
+ __promise->reject(std::make_exception_ptr(__jniError));
463
+ });
464
+ return __promise;
465
+ }();
378
466
  }
379
467
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::deleteDownloadedTrack(const std::string& trackId) {
380
468
  static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("deleteDownloadedTrack");
@@ -437,10 +525,21 @@ namespace margelo::nitro::nitroplayer {
437
525
  return __promise;
438
526
  }();
439
527
  }
440
- double JHybridDownloadManagerSpec::syncDownloads() {
441
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("syncDownloads");
528
+ std::shared_ptr<Promise<double>> JHybridDownloadManagerSpec::syncDownloads() {
529
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("syncDownloads");
442
530
  auto __result = method(_javaPart);
443
- return __result;
531
+ return [&]() {
532
+ auto __promise = Promise<double>::create();
533
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
534
+ auto __result = jni::static_ref_cast<jni::JDouble>(__boxedResult);
535
+ __promise->resolve(__result->value());
536
+ });
537
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
538
+ jni::JniException __jniError(__throwable);
539
+ __promise->reject(std::make_exception_ptr(__jniError));
540
+ });
541
+ return __promise;
542
+ }();
444
543
  }
445
544
  void JHybridDownloadManagerSpec::setPlaybackSourcePreference(PlaybackSource preference) {
446
545
  static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JPlaybackSource> /* preference */)>("setPlaybackSourcePreference");
@@ -451,10 +550,21 @@ namespace margelo::nitro::nitroplayer {
451
550
  auto __result = method(_javaPart);
452
551
  return __result->toCpp();
453
552
  }
454
- std::string JHybridDownloadManagerSpec::getEffectiveUrl(const TrackItem& track) {
455
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<JTrackItem> /* track */)>("getEffectiveUrl");
553
+ std::shared_ptr<Promise<std::string>> JHybridDownloadManagerSpec::getEffectiveUrl(const TrackItem& track) {
554
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JTrackItem> /* track */)>("getEffectiveUrl");
456
555
  auto __result = method(_javaPart, JTrackItem::fromCpp(track));
457
- return __result->toStdString();
556
+ return [&]() {
557
+ auto __promise = Promise<std::string>::create();
558
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
559
+ auto __result = jni::static_ref_cast<jni::JString>(__boxedResult);
560
+ __promise->resolve(__result->toStdString());
561
+ });
562
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
563
+ jni::JniException __jniError(__throwable);
564
+ __promise->reject(std::make_exception_ptr(__jniError));
565
+ });
566
+ return __promise;
567
+ }();
458
568
  }
459
569
  void JHybridDownloadManagerSpec::onDownloadProgress(const std::function<void(const DownloadProgress& /* progress */)>& callback) {
460
570
  static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_DownloadProgress::javaobject> /* callback */)>("onDownloadProgress_cxx");
@@ -70,22 +70,22 @@ namespace margelo::nitro::nitroplayer {
70
70
  DownloadQueueStatus getQueueStatus() override;
71
71
  bool isDownloading(const std::string& trackId) override;
72
72
  DownloadState getDownloadState(const std::string& trackId) override;
73
- bool isTrackDownloaded(const std::string& trackId) override;
74
- bool isPlaylistDownloaded(const std::string& playlistId) override;
75
- bool isPlaylistPartiallyDownloaded(const std::string& playlistId) override;
76
- std::variant<nitro::NullType, DownloadedTrack> getDownloadedTrack(const std::string& trackId) override;
77
- std::vector<DownloadedTrack> getAllDownloadedTracks() override;
78
- std::variant<nitro::NullType, DownloadedPlaylist> getDownloadedPlaylist(const std::string& playlistId) override;
79
- std::vector<DownloadedPlaylist> getAllDownloadedPlaylists() override;
80
- std::variant<nitro::NullType, std::string> getLocalPath(const std::string& trackId) override;
73
+ std::shared_ptr<Promise<bool>> isTrackDownloaded(const std::string& trackId) override;
74
+ std::shared_ptr<Promise<bool>> isPlaylistDownloaded(const std::string& playlistId) override;
75
+ std::shared_ptr<Promise<bool>> isPlaylistPartiallyDownloaded(const std::string& playlistId) override;
76
+ std::shared_ptr<Promise<std::variant<nitro::NullType, DownloadedTrack>>> getDownloadedTrack(const std::string& trackId) override;
77
+ std::shared_ptr<Promise<std::vector<DownloadedTrack>>> getAllDownloadedTracks() override;
78
+ std::shared_ptr<Promise<std::variant<nitro::NullType, DownloadedPlaylist>>> getDownloadedPlaylist(const std::string& playlistId) override;
79
+ std::shared_ptr<Promise<std::vector<DownloadedPlaylist>>> getAllDownloadedPlaylists() override;
80
+ std::shared_ptr<Promise<std::variant<nitro::NullType, std::string>>> getLocalPath(const std::string& trackId) override;
81
81
  std::shared_ptr<Promise<void>> deleteDownloadedTrack(const std::string& trackId) override;
82
82
  std::shared_ptr<Promise<void>> deleteDownloadedPlaylist(const std::string& playlistId) override;
83
83
  std::shared_ptr<Promise<void>> deleteAllDownloads() override;
84
84
  std::shared_ptr<Promise<DownloadStorageInfo>> getStorageInfo() override;
85
- double syncDownloads() override;
85
+ std::shared_ptr<Promise<double>> syncDownloads() override;
86
86
  void setPlaybackSourcePreference(PlaybackSource preference) override;
87
87
  PlaybackSource getPlaybackSourcePreference() override;
88
- std::string getEffectiveUrl(const TrackItem& track) override;
88
+ std::shared_ptr<Promise<std::string>> getEffectiveUrl(const TrackItem& track) override;
89
89
  void onDownloadProgress(const std::function<void(const DownloadProgress& /* progress */)>& callback) override;
90
90
  void onDownloadStateChange(const std::function<void(const std::string& /* downloadId */, const std::string& /* trackId */, DownloadState /* state */, const std::optional<DownloadError>& /* error */)>& callback) override;
91
91
  void onDownloadComplete(const std::function<void(const DownloadedTrack& /* downloadedTrack */)>& callback) override;