react-native-nitro-player 0.6.1 → 0.7.1-alpha.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.
Files changed (164) hide show
  1. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +9 -13
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +45 -90
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +48 -182
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +21 -77
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +55 -104
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +113 -123
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +82 -0
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ListenerRegistry.kt +48 -0
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerAndroidAuto.kt +62 -0
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +153 -1887
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +122 -0
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerNotify.kt +44 -0
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +162 -0
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueue.kt +165 -0
  15. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +161 -0
  16. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +28 -0
  17. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerTempQueue.kt +121 -0
  18. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerUrlLoader.kt +98 -0
  19. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +27 -18
  20. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +11 -58
  21. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +13 -30
  22. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +102 -162
  23. package/ios/HybridDownloadManager.swift +32 -26
  24. package/ios/HybridEqualizer.swift +48 -35
  25. package/ios/HybridTrackPlayer.swift +127 -102
  26. package/ios/core/ListenerRegistry.swift +60 -0
  27. package/ios/core/TrackPlayerCore.swift +130 -2356
  28. package/ios/core/TrackPlayerListener.swift +395 -0
  29. package/ios/core/TrackPlayerNotify.swift +52 -0
  30. package/ios/core/TrackPlayerPlayback.swift +274 -0
  31. package/ios/core/TrackPlayerQueue.swift +212 -0
  32. package/ios/core/TrackPlayerQueueBuild.swift +482 -0
  33. package/ios/core/TrackPlayerTempQueue.swift +167 -0
  34. package/ios/core/TrackPlayerUrlLoader.swift +169 -0
  35. package/ios/equalizer/EqualizerCore.swift +24 -89
  36. package/ios/media/MediaSessionManager.swift +32 -49
  37. package/ios/playlist/PlaylistManager.swift +2 -9
  38. package/ios/queue/HybridPlayerQueue.swift +69 -66
  39. package/lib/hooks/useDownloadedTracks.js +16 -13
  40. package/lib/hooks/useEqualizer.d.ts +4 -4
  41. package/lib/hooks/useEqualizer.js +12 -12
  42. package/lib/hooks/useEqualizerPresets.d.ts +3 -3
  43. package/lib/hooks/useEqualizerPresets.js +12 -18
  44. package/lib/specs/AndroidAutoMediaLibrary.nitro.d.ts +2 -2
  45. package/lib/specs/AudioDevices.nitro.d.ts +2 -2
  46. package/lib/specs/DownloadManager.nitro.d.ts +10 -10
  47. package/lib/specs/Equalizer.nitro.d.ts +9 -9
  48. package/lib/specs/TrackPlayer.nitro.d.ts +38 -16
  49. package/nitro.json +44 -11
  50. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +63 -24
  51. package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +1 -1
  52. package/nitrogen/generated/android/c++/JDownloadConfig.hpp +1 -1
  53. package/nitrogen/generated/android/c++/JDownloadError.hpp +1 -1
  54. package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +1 -1
  55. package/nitrogen/generated/android/c++/JDownloadProgress.hpp +1 -1
  56. package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +1 -1
  57. package/nitrogen/generated/android/c++/JDownloadState.hpp +1 -1
  58. package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +1 -1
  59. package/nitrogen/generated/android/c++/JDownloadTask.hpp +1 -1
  60. package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +1 -1
  61. package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +1 -1
  62. package/nitrogen/generated/android/c++/JEqualizerBand.hpp +1 -1
  63. package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +1 -1
  64. package/nitrogen/generated/android/c++/JEqualizerState.hpp +1 -1
  65. package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +2 -2
  66. package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +2 -2
  67. package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -2
  68. package/nitrogen/generated/android/c++/JFunc_void_TrackPlayerState_std__optional_Reason_.hpp +2 -2
  69. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +2 -2
  70. package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +2 -2
  71. package/nitrogen/generated/android/c++/JFunc_void_double_double_std__optional_bool_.hpp +2 -2
  72. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +2 -2
  73. package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -2
  74. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +2 -2
  75. package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +2 -2
  76. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -2
  77. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__double.hpp +2 -2
  78. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp +122 -0
  79. package/nitrogen/generated/android/c++/JGainRange.hpp +1 -1
  80. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp +49 -30
  81. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.hpp +21 -24
  82. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp +35 -28
  83. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.hpp +20 -23
  84. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +197 -93
  85. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +29 -32
  86. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +157 -67
  87. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +28 -31
  88. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +138 -53
  89. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +27 -30
  90. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +282 -69
  91. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +35 -30
  92. package/nitrogen/generated/android/c++/JPlaybackSource.hpp +1 -1
  93. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +1 -1
  94. package/nitrogen/generated/android/c++/JPlayerState.hpp +1 -1
  95. package/nitrogen/generated/android/c++/JPlaylist.hpp +1 -1
  96. package/nitrogen/generated/android/c++/JPresetType.hpp +1 -1
  97. package/nitrogen/generated/android/c++/JQueueOperation.hpp +1 -1
  98. package/nitrogen/generated/android/c++/JReason.hpp +1 -1
  99. package/nitrogen/generated/android/c++/JRepeatMode.hpp +1 -1
  100. package/nitrogen/generated/android/c++/JStorageLocation.hpp +1 -1
  101. package/nitrogen/generated/android/c++/JTAudioDevice.hpp +1 -1
  102. package/nitrogen/generated/android/c++/JTrackItem.hpp +1 -1
  103. package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +1 -1
  104. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
  105. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +3 -3
  106. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +3 -3
  107. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +3 -3
  108. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +3 -3
  109. package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +3 -3
  110. package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +3 -3
  111. package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +3 -3
  112. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem_.kt +80 -0
  113. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrarySpec.kt +18 -20
  114. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAudioDevicesSpec.kt +17 -19
  115. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +25 -28
  116. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +25 -27
  117. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +24 -26
  118. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +60 -26
  119. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +0 -6
  120. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +0 -6
  121. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +0 -6
  122. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +0 -6
  123. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +0 -6
  124. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Playlist.kt +0 -6
  125. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_String.kt +0 -6
  126. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_TrackItem.kt +0 -6
  127. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +74 -18
  128. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +380 -151
  129. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +10 -10
  130. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +12 -9
  131. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +23 -8
  132. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +82 -8
  133. package/nitrogen/generated/ios/swift/Func_void_EqualizerState.swift +46 -0
  134. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedPlaylist_.swift +58 -0
  135. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedTrack_.swift +58 -0
  136. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__std__string_.swift +58 -0
  137. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedPlaylist_.swift +46 -0
  138. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedTrack_.swift +46 -0
  139. package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +5 -5
  140. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__std__vector_TrackItem_.swift +46 -0
  141. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +10 -10
  142. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +141 -71
  143. package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +9 -9
  144. package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +105 -41
  145. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec.swift +8 -8
  146. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec_cxx.swift +95 -32
  147. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +16 -8
  148. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +267 -32
  149. package/nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.hpp +3 -2
  150. package/nitrogen/generated/shared/c++/HybridAudioDevicesSpec.hpp +2 -1
  151. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +10 -10
  152. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +10 -9
  153. package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.hpp +9 -8
  154. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
  155. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +16 -8
  156. package/package.json +3 -3
  157. package/src/hooks/useDownloadedTracks.ts +17 -13
  158. package/src/hooks/useEqualizer.ts +16 -16
  159. package/src/hooks/useEqualizerPresets.ts +15 -21
  160. package/src/specs/AndroidAutoMediaLibrary.nitro.ts +2 -2
  161. package/src/specs/AudioDevices.nitro.ts +2 -2
  162. package/src/specs/DownloadManager.nitro.ts +10 -10
  163. package/src/specs/Equalizer.nitro.ts +9 -9
  164. package/src/specs/TrackPlayer.nitro.ts +52 -16
@@ -18,6 +18,9 @@ namespace margelo::nitro::nitroplayer { enum class PresetType; }
18
18
  // Forward declaration of `EqualizerState` to properly resolve imports.
19
19
  namespace margelo::nitro::nitroplayer { struct EqualizerState; }
20
20
 
21
+ #include <NitroModules/Promise.hpp>
22
+ #include <NitroModules/JPromise.hpp>
23
+ #include <NitroModules/JUnit.hpp>
21
24
  #include "EqualizerBand.hpp"
22
25
  #include <vector>
23
26
  #include "JEqualizerBand.hpp"
@@ -43,89 +46,124 @@ namespace margelo::nitro::nitroplayer { struct EqualizerState; }
43
46
 
44
47
  namespace margelo::nitro::nitroplayer {
45
48
 
46
- jni::local_ref<JHybridEqualizerSpec::jhybriddata> JHybridEqualizerSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
47
- return makeCxxInstance(jThis);
48
- }
49
-
50
- void JHybridEqualizerSpec::registerNatives() {
51
- registerHybrid({
52
- makeNativeMethod("initHybrid", JHybridEqualizerSpec::initHybrid),
53
- });
49
+ std::shared_ptr<JHybridEqualizerSpec> JHybridEqualizerSpec::JavaPart::getJHybridEqualizerSpec() {
50
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
51
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridEqualizerSpec>(hybridObject);
52
+ if (castHybridObject == nullptr) [[unlikely]] {
53
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridEqualizerSpec!");
54
+ }
55
+ return castHybridObject;
54
56
  }
55
57
 
56
- size_t JHybridEqualizerSpec::getExternalMemorySize() noexcept {
57
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
58
- return method(_javaPart);
58
+ jni::local_ref<JHybridEqualizerSpec::CxxPart::jhybriddata> JHybridEqualizerSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
59
+ return makeCxxInstance(jThis);
59
60
  }
60
61
 
61
- bool JHybridEqualizerSpec::equals(const std::shared_ptr<HybridObject>& other) {
62
- if (auto otherCast = std::dynamic_pointer_cast<JHybridEqualizerSpec>(other)) {
63
- return _javaPart == otherCast->_javaPart;
62
+ std::shared_ptr<JHybridObject> JHybridEqualizerSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
63
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridEqualizerSpec::JavaPart>(javaPart);
64
+ if (castJavaPart == nullptr) [[unlikely]] {
65
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridEqualizerSpec::JavaPart!");
64
66
  }
65
- return false;
66
- }
67
-
68
- void JHybridEqualizerSpec::dispose() noexcept {
69
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
70
- method(_javaPart);
67
+ return std::make_shared<JHybridEqualizerSpec>(castJavaPart);
71
68
  }
72
69
 
73
- std::string JHybridEqualizerSpec::toString() {
74
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
75
- auto javaString = method(_javaPart);
76
- return javaString->toStdString();
70
+ void JHybridEqualizerSpec::CxxPart::registerNatives() {
71
+ registerHybrid({
72
+ makeNativeMethod("initHybrid", JHybridEqualizerSpec::CxxPart::initHybrid),
73
+ });
77
74
  }
78
75
 
79
76
  // Properties
80
77
 
81
78
 
82
79
  // Methods
83
- bool JHybridEqualizerSpec::setEnabled(bool enabled) {
84
- static const auto method = javaClassStatic()->getMethod<jboolean(jboolean /* enabled */)>("setEnabled");
80
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::setEnabled(bool enabled) {
81
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jboolean /* enabled */)>("setEnabled");
85
82
  auto __result = method(_javaPart, enabled);
86
- return static_cast<bool>(__result);
83
+ return [&]() {
84
+ auto __promise = Promise<void>::create();
85
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
86
+ __promise->resolve();
87
+ });
88
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
89
+ jni::JniException __jniError(__throwable);
90
+ __promise->reject(std::make_exception_ptr(__jniError));
91
+ });
92
+ return __promise;
93
+ }();
87
94
  }
88
95
  bool JHybridEqualizerSpec::isEnabled() {
89
- static const auto method = javaClassStatic()->getMethod<jboolean()>("isEnabled");
96
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isEnabled");
90
97
  auto __result = method(_javaPart);
91
98
  return static_cast<bool>(__result);
92
99
  }
93
- std::vector<EqualizerBand> JHybridEqualizerSpec::getBands() {
94
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerBand>>()>("getBands");
100
+ std::shared_ptr<Promise<std::vector<EqualizerBand>>> JHybridEqualizerSpec::getBands() {
101
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getBands");
95
102
  auto __result = method(_javaPart);
96
103
  return [&]() {
97
- size_t __size = __result->size();
98
- std::vector<EqualizerBand> __vector;
99
- __vector.reserve(__size);
100
- for (size_t __i = 0; __i < __size; __i++) {
101
- auto __element = __result->getElement(__i);
102
- __vector.push_back(__element->toCpp());
103
- }
104
- return __vector;
104
+ auto __promise = Promise<std::vector<EqualizerBand>>::create();
105
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
106
+ auto __result = jni::static_ref_cast<jni::JArrayClass<JEqualizerBand>>(__boxedResult);
107
+ __promise->resolve([&]() {
108
+ size_t __size = __result->size();
109
+ std::vector<EqualizerBand> __vector;
110
+ __vector.reserve(__size);
111
+ for (size_t __i = 0; __i < __size; __i++) {
112
+ auto __element = __result->getElement(__i);
113
+ __vector.push_back(__element->toCpp());
114
+ }
115
+ return __vector;
116
+ }());
117
+ });
118
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
119
+ jni::JniException __jniError(__throwable);
120
+ __promise->reject(std::make_exception_ptr(__jniError));
121
+ });
122
+ return __promise;
105
123
  }();
106
124
  }
107
- bool JHybridEqualizerSpec::setBandGain(double bandIndex, double gainDb) {
108
- static const auto method = javaClassStatic()->getMethod<jboolean(double /* bandIndex */, double /* gainDb */)>("setBandGain");
125
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::setBandGain(double bandIndex, double gainDb) {
126
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* bandIndex */, double /* gainDb */)>("setBandGain");
109
127
  auto __result = method(_javaPart, bandIndex, gainDb);
110
- return static_cast<bool>(__result);
128
+ return [&]() {
129
+ auto __promise = Promise<void>::create();
130
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
131
+ __promise->resolve();
132
+ });
133
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
134
+ jni::JniException __jniError(__throwable);
135
+ __promise->reject(std::make_exception_ptr(__jniError));
136
+ });
137
+ return __promise;
138
+ }();
111
139
  }
112
- bool JHybridEqualizerSpec::setAllBandGains(const std::vector<double>& gains) {
113
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JArrayDouble> /* gains */)>("setAllBandGains");
140
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::setAllBandGains(const std::vector<double>& gains) {
141
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayDouble> /* gains */)>("setAllBandGains");
114
142
  auto __result = method(_javaPart, [&]() {
115
143
  size_t __size = gains.size();
116
144
  jni::local_ref<jni::JArrayDouble> __array = jni::JArrayDouble::newArray(__size);
117
145
  __array->setRegion(0, __size, gains.data());
118
146
  return __array;
119
147
  }());
120
- return static_cast<bool>(__result);
148
+ return [&]() {
149
+ auto __promise = Promise<void>::create();
150
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
151
+ __promise->resolve();
152
+ });
153
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
154
+ jni::JniException __jniError(__throwable);
155
+ __promise->reject(std::make_exception_ptr(__jniError));
156
+ });
157
+ return __promise;
158
+ }();
121
159
  }
122
160
  GainRange JHybridEqualizerSpec::getBandRange() {
123
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JGainRange>()>("getBandRange");
161
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JGainRange>()>("getBandRange");
124
162
  auto __result = method(_javaPart);
125
163
  return __result->toCpp();
126
164
  }
127
165
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getPresets() {
128
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getPresets");
166
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getPresets");
129
167
  auto __result = method(_javaPart);
130
168
  return [&]() {
131
169
  size_t __size = __result->size();
@@ -139,7 +177,7 @@ namespace margelo::nitro::nitroplayer {
139
177
  }();
140
178
  }
141
179
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getBuiltInPresets() {
142
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getBuiltInPresets");
180
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getBuiltInPresets");
143
181
  auto __result = method(_javaPart);
144
182
  return [&]() {
145
183
  size_t __size = __result->size();
@@ -153,7 +191,7 @@ namespace margelo::nitro::nitroplayer {
153
191
  }();
154
192
  }
155
193
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getCustomPresets() {
156
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getCustomPresets");
194
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getCustomPresets");
157
195
  auto __result = method(_javaPart);
158
196
  return [&]() {
159
197
  size_t __size = __result->size();
@@ -166,45 +204,97 @@ namespace margelo::nitro::nitroplayer {
166
204
  return __vector;
167
205
  }();
168
206
  }
169
- bool JHybridEqualizerSpec::applyPreset(const std::string& presetName) {
170
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* presetName */)>("applyPreset");
207
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::applyPreset(const std::string& presetName) {
208
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* presetName */)>("applyPreset");
171
209
  auto __result = method(_javaPart, jni::make_jstring(presetName));
172
- return static_cast<bool>(__result);
210
+ return [&]() {
211
+ auto __promise = Promise<void>::create();
212
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
213
+ __promise->resolve();
214
+ });
215
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
216
+ jni::JniException __jniError(__throwable);
217
+ __promise->reject(std::make_exception_ptr(__jniError));
218
+ });
219
+ return __promise;
220
+ }();
173
221
  }
174
222
  std::variant<nitro::NullType, std::string> JHybridEqualizerSpec::getCurrentPresetName() {
175
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPresetName");
223
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPresetName");
176
224
  auto __result = method(_javaPart);
177
225
  return __result->toCpp();
178
226
  }
179
- bool JHybridEqualizerSpec::saveCustomPreset(const std::string& name) {
180
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("saveCustomPreset");
227
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::saveCustomPreset(const std::string& name) {
228
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* name */)>("saveCustomPreset");
181
229
  auto __result = method(_javaPart, jni::make_jstring(name));
182
- return static_cast<bool>(__result);
230
+ return [&]() {
231
+ auto __promise = Promise<void>::create();
232
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
233
+ __promise->resolve();
234
+ });
235
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
236
+ jni::JniException __jniError(__throwable);
237
+ __promise->reject(std::make_exception_ptr(__jniError));
238
+ });
239
+ return __promise;
240
+ }();
183
241
  }
184
- bool JHybridEqualizerSpec::deleteCustomPreset(const std::string& name) {
185
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("deleteCustomPreset");
242
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::deleteCustomPreset(const std::string& name) {
243
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* name */)>("deleteCustomPreset");
186
244
  auto __result = method(_javaPart, jni::make_jstring(name));
187
- return static_cast<bool>(__result);
245
+ return [&]() {
246
+ auto __promise = Promise<void>::create();
247
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
248
+ __promise->resolve();
249
+ });
250
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
251
+ jni::JniException __jniError(__throwable);
252
+ __promise->reject(std::make_exception_ptr(__jniError));
253
+ });
254
+ return __promise;
255
+ }();
188
256
  }
189
- EqualizerState JHybridEqualizerSpec::getState() {
190
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JEqualizerState>()>("getState");
257
+ std::shared_ptr<Promise<EqualizerState>> JHybridEqualizerSpec::getState() {
258
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getState");
191
259
  auto __result = method(_javaPart);
192
- return __result->toCpp();
260
+ return [&]() {
261
+ auto __promise = Promise<EqualizerState>::create();
262
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
263
+ auto __result = jni::static_ref_cast<JEqualizerState>(__boxedResult);
264
+ __promise->resolve(__result->toCpp());
265
+ });
266
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
267
+ jni::JniException __jniError(__throwable);
268
+ __promise->reject(std::make_exception_ptr(__jniError));
269
+ });
270
+ return __promise;
271
+ }();
193
272
  }
194
- void JHybridEqualizerSpec::reset() {
195
- static const auto method = javaClassStatic()->getMethod<void()>("reset");
196
- method(_javaPart);
273
+ std::shared_ptr<Promise<void>> JHybridEqualizerSpec::reset() {
274
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("reset");
275
+ auto __result = method(_javaPart);
276
+ return [&]() {
277
+ auto __promise = Promise<void>::create();
278
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
279
+ __promise->resolve();
280
+ });
281
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
282
+ jni::JniException __jniError(__throwable);
283
+ __promise->reject(std::make_exception_ptr(__jniError));
284
+ });
285
+ return __promise;
286
+ }();
197
287
  }
198
288
  void JHybridEqualizerSpec::onEnabledChange(const std::function<void(bool /* enabled */)>& callback) {
199
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onEnabledChange_cxx");
289
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onEnabledChange_cxx");
200
290
  method(_javaPart, JFunc_void_bool_cxx::fromCpp(callback));
201
291
  }
202
292
  void JHybridEqualizerSpec::onBandChange(const std::function<void(const std::vector<EqualizerBand>& /* bands */)>& callback) {
203
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_EqualizerBand_::javaobject> /* callback */)>("onBandChange_cxx");
293
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_EqualizerBand_::javaobject> /* callback */)>("onBandChange_cxx");
204
294
  method(_javaPart, JFunc_void_std__vector_EqualizerBand__cxx::fromCpp(callback));
205
295
  }
206
296
  void JHybridEqualizerSpec::onPresetChange(const std::function<void(const std::optional<std::variant<nitro::NullType, std::string>>& /* presetName */)>& callback) {
207
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__optional_std__variant_nitro__NullType__std__string__::javaobject> /* callback */)>("onPresetChange_cxx");
297
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__optional_std__variant_nitro__NullType__std__string__::javaobject> /* callback */)>("onPresetChange_cxx");
208
298
  method(_javaPart, JFunc_void_std__optional_std__variant_nitro__NullType__std__string___cxx::fromCpp(callback));
209
299
  }
210
300
 
@@ -18,34 +18,33 @@ namespace margelo::nitro::nitroplayer {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridEqualizerSpec: public jni::HybridClass<JHybridEqualizerSpec, JHybridObject>,
22
- public virtual HybridEqualizerSpec {
21
+ class JHybridEqualizerSpec: public virtual HybridEqualizerSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridEqualizerSpec;";
25
- static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
- static void registerNatives();
27
-
28
- protected:
29
- // C++ constructor (called from Java via `initHybrid()`)
30
- explicit JHybridEqualizerSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridEqualizerSpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridEqualizerSpec;";
25
+ std::shared_ptr<JHybridEqualizerSpec> getJHybridEqualizerSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridEqualizerSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
34
35
 
35
36
  public:
37
+ explicit JHybridEqualizerSpec(const jni::local_ref<JHybridEqualizerSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridEqualizerSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridEqualizerSpec() override {
37
42
  // Hermes GC can destroy JS objects on a non-JNI Thread.
38
43
  jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
44
  }
40
45
 
41
46
  public:
42
- size_t getExternalMemorySize() noexcept override;
43
- bool equals(const std::shared_ptr<HybridObject>& other) override;
44
- void dispose() noexcept override;
45
- std::string toString() override;
46
-
47
- public:
48
- inline const jni::global_ref<JHybridEqualizerSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridEqualizerSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -55,29 +54,27 @@ namespace margelo::nitro::nitroplayer {
55
54
 
56
55
  public:
57
56
  // Methods
58
- bool setEnabled(bool enabled) override;
57
+ std::shared_ptr<Promise<void>> setEnabled(bool enabled) override;
59
58
  bool isEnabled() override;
60
- std::vector<EqualizerBand> getBands() override;
61
- bool setBandGain(double bandIndex, double gainDb) override;
62
- bool setAllBandGains(const std::vector<double>& gains) override;
59
+ std::shared_ptr<Promise<std::vector<EqualizerBand>>> getBands() override;
60
+ std::shared_ptr<Promise<void>> setBandGain(double bandIndex, double gainDb) override;
61
+ std::shared_ptr<Promise<void>> setAllBandGains(const std::vector<double>& gains) override;
63
62
  GainRange getBandRange() override;
64
63
  std::vector<EqualizerPreset> getPresets() override;
65
64
  std::vector<EqualizerPreset> getBuiltInPresets() override;
66
65
  std::vector<EqualizerPreset> getCustomPresets() override;
67
- bool applyPreset(const std::string& presetName) override;
66
+ std::shared_ptr<Promise<void>> applyPreset(const std::string& presetName) override;
68
67
  std::variant<nitro::NullType, std::string> getCurrentPresetName() override;
69
- bool saveCustomPreset(const std::string& name) override;
70
- bool deleteCustomPreset(const std::string& name) override;
71
- EqualizerState getState() override;
72
- void reset() override;
68
+ std::shared_ptr<Promise<void>> saveCustomPreset(const std::string& name) override;
69
+ std::shared_ptr<Promise<void>> deleteCustomPreset(const std::string& name) override;
70
+ std::shared_ptr<Promise<EqualizerState>> getState() override;
71
+ std::shared_ptr<Promise<void>> reset() override;
73
72
  void onEnabledChange(const std::function<void(bool /* enabled */)>& callback) override;
74
73
  void onBandChange(const std::function<void(const std::vector<EqualizerBand>& /* bands */)>& callback) override;
75
74
  void onPresetChange(const std::function<void(const std::optional<std::variant<nitro::NullType, std::string>>& /* presetName */)>& callback) override;
76
75
 
77
76
  private:
78
- friend HybridBase;
79
- using HybridBase::HybridBase;
80
- jni::global_ref<JHybridEqualizerSpec::javaobject> _javaPart;
77
+ jni::global_ref<JHybridEqualizerSpec::JavaPart> _javaPart;
81
78
  };
82
79
 
83
80
  } // namespace margelo::nitro::nitroplayer