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
@@ -57,56 +57,73 @@ namespace margelo::nitro::nitroplayer { enum class Reason; }
57
57
  #include "JFunc_void_double_double_std__optional_bool_.hpp"
58
58
  #include "JFunc_void_bool.hpp"
59
59
  #include "JFunc_void_std__vector_TrackItem__double.hpp"
60
+ #include "JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp"
60
61
 
61
62
  namespace margelo::nitro::nitroplayer {
62
63
 
63
- jni::local_ref<JHybridTrackPlayerSpec::jhybriddata> JHybridTrackPlayerSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
64
- return makeCxxInstance(jThis);
65
- }
66
-
67
- void JHybridTrackPlayerSpec::registerNatives() {
68
- registerHybrid({
69
- makeNativeMethod("initHybrid", JHybridTrackPlayerSpec::initHybrid),
70
- });
64
+ std::shared_ptr<JHybridTrackPlayerSpec> JHybridTrackPlayerSpec::JavaPart::getJHybridTrackPlayerSpec() {
65
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
66
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridTrackPlayerSpec>(hybridObject);
67
+ if (castHybridObject == nullptr) [[unlikely]] {
68
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridTrackPlayerSpec!");
69
+ }
70
+ return castHybridObject;
71
71
  }
72
72
 
73
- size_t JHybridTrackPlayerSpec::getExternalMemorySize() noexcept {
74
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
75
- return method(_javaPart);
73
+ jni::local_ref<JHybridTrackPlayerSpec::CxxPart::jhybriddata> JHybridTrackPlayerSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
74
+ return makeCxxInstance(jThis);
76
75
  }
77
76
 
78
- bool JHybridTrackPlayerSpec::equals(const std::shared_ptr<HybridObject>& other) {
79
- if (auto otherCast = std::dynamic_pointer_cast<JHybridTrackPlayerSpec>(other)) {
80
- return _javaPart == otherCast->_javaPart;
77
+ std::shared_ptr<JHybridObject> JHybridTrackPlayerSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
78
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridTrackPlayerSpec::JavaPart>(javaPart);
79
+ if (castJavaPart == nullptr) [[unlikely]] {
80
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridTrackPlayerSpec::JavaPart!");
81
81
  }
82
- return false;
82
+ return std::make_shared<JHybridTrackPlayerSpec>(castJavaPart);
83
83
  }
84
84
 
85
- void JHybridTrackPlayerSpec::dispose() noexcept {
86
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
87
- method(_javaPart);
88
- }
89
-
90
- std::string JHybridTrackPlayerSpec::toString() {
91
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
92
- auto javaString = method(_javaPart);
93
- return javaString->toStdString();
85
+ void JHybridTrackPlayerSpec::CxxPart::registerNatives() {
86
+ registerHybrid({
87
+ makeNativeMethod("initHybrid", JHybridTrackPlayerSpec::CxxPart::initHybrid),
88
+ });
94
89
  }
95
90
 
96
91
  // Properties
97
92
 
98
93
 
99
94
  // Methods
100
- void JHybridTrackPlayerSpec::play() {
101
- static const auto method = javaClassStatic()->getMethod<void()>("play");
102
- method(_javaPart);
95
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::play() {
96
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("play");
97
+ auto __result = method(_javaPart);
98
+ return [&]() {
99
+ auto __promise = Promise<void>::create();
100
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
101
+ __promise->resolve();
102
+ });
103
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
104
+ jni::JniException __jniError(__throwable);
105
+ __promise->reject(std::make_exception_ptr(__jniError));
106
+ });
107
+ return __promise;
108
+ }();
103
109
  }
104
- void JHybridTrackPlayerSpec::pause() {
105
- static const auto method = javaClassStatic()->getMethod<void()>("pause");
106
- method(_javaPart);
110
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::pause() {
111
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("pause");
112
+ auto __result = method(_javaPart);
113
+ return [&]() {
114
+ auto __promise = Promise<void>::create();
115
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
116
+ __promise->resolve();
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;
123
+ }();
107
124
  }
108
125
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::playSong(const std::string& songId, const std::optional<std::string>& fromPlaylist) {
109
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* songId */, jni::alias_ref<jni::JString> /* fromPlaylist */)>("playSong");
126
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* songId */, jni::alias_ref<jni::JString> /* fromPlaylist */)>("playSong");
110
127
  auto __result = method(_javaPart, jni::make_jstring(songId), fromPlaylist.has_value() ? jni::make_jstring(fromPlaylist.value()) : nullptr);
111
128
  return [&]() {
112
129
  auto __promise = Promise<void>::create();
@@ -120,12 +137,23 @@ namespace margelo::nitro::nitroplayer {
120
137
  return __promise;
121
138
  }();
122
139
  }
123
- void JHybridTrackPlayerSpec::skipToNext() {
124
- static const auto method = javaClassStatic()->getMethod<void()>("skipToNext");
125
- method(_javaPart);
140
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::skipToNext() {
141
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("skipToNext");
142
+ auto __result = method(_javaPart);
143
+ return [&]() {
144
+ auto __promise = Promise<void>::create();
145
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
146
+ __promise->resolve();
147
+ });
148
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
149
+ jni::JniException __jniError(__throwable);
150
+ __promise->reject(std::make_exception_ptr(__jniError));
151
+ });
152
+ return __promise;
153
+ }();
126
154
  }
127
155
  std::shared_ptr<Promise<bool>> JHybridTrackPlayerSpec::skipToIndex(double index) {
128
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* index */)>("skipToIndex");
156
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* index */)>("skipToIndex");
129
157
  auto __result = method(_javaPart, index);
130
158
  return [&]() {
131
159
  auto __promise = Promise<bool>::create();
@@ -140,16 +168,38 @@ namespace margelo::nitro::nitroplayer {
140
168
  return __promise;
141
169
  }();
142
170
  }
143
- void JHybridTrackPlayerSpec::skipToPrevious() {
144
- static const auto method = javaClassStatic()->getMethod<void()>("skipToPrevious");
145
- method(_javaPart);
171
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::skipToPrevious() {
172
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("skipToPrevious");
173
+ auto __result = method(_javaPart);
174
+ return [&]() {
175
+ auto __promise = Promise<void>::create();
176
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
177
+ __promise->resolve();
178
+ });
179
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
180
+ jni::JniException __jniError(__throwable);
181
+ __promise->reject(std::make_exception_ptr(__jniError));
182
+ });
183
+ return __promise;
184
+ }();
146
185
  }
147
- void JHybridTrackPlayerSpec::seek(double position) {
148
- static const auto method = javaClassStatic()->getMethod<void(double /* position */)>("seek");
149
- method(_javaPart, position);
186
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::seek(double position) {
187
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* position */)>("seek");
188
+ auto __result = method(_javaPart, position);
189
+ return [&]() {
190
+ auto __promise = Promise<void>::create();
191
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
192
+ __promise->resolve();
193
+ });
194
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
195
+ jni::JniException __jniError(__throwable);
196
+ __promise->reject(std::make_exception_ptr(__jniError));
197
+ });
198
+ return __promise;
199
+ }();
150
200
  }
151
201
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::addToUpNext(const std::string& trackId) {
152
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("addToUpNext");
202
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("addToUpNext");
153
203
  auto __result = method(_javaPart, jni::make_jstring(trackId));
154
204
  return [&]() {
155
205
  auto __promise = Promise<void>::create();
@@ -164,7 +214,7 @@ namespace margelo::nitro::nitroplayer {
164
214
  }();
165
215
  }
166
216
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::playNext(const std::string& trackId) {
167
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("playNext");
217
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("playNext");
168
218
  auto __result = method(_javaPart, jni::make_jstring(trackId));
169
219
  return [&]() {
170
220
  auto __promise = Promise<void>::create();
@@ -179,7 +229,7 @@ namespace margelo::nitro::nitroplayer {
179
229
  }();
180
230
  }
181
231
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getActualQueue() {
182
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getActualQueue");
232
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getActualQueue");
183
233
  auto __result = method(_javaPart);
184
234
  return [&]() {
185
235
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -204,7 +254,7 @@ namespace margelo::nitro::nitroplayer {
204
254
  }();
205
255
  }
206
256
  std::shared_ptr<Promise<PlayerState>> JHybridTrackPlayerSpec::getState() {
207
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getState");
257
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getState");
208
258
  auto __result = method(_javaPart);
209
259
  return [&]() {
210
260
  auto __promise = Promise<PlayerState>::create();
@@ -219,52 +269,83 @@ namespace margelo::nitro::nitroplayer {
219
269
  return __promise;
220
270
  }();
221
271
  }
222
- bool JHybridTrackPlayerSpec::setRepeatMode(RepeatMode mode) {
223
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<JRepeatMode> /* mode */)>("setRepeatMode");
272
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::setRepeatMode(RepeatMode mode) {
273
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JRepeatMode> /* mode */)>("setRepeatMode");
224
274
  auto __result = method(_javaPart, JRepeatMode::fromCpp(mode));
225
- return static_cast<bool>(__result);
275
+ return [&]() {
276
+ auto __promise = Promise<void>::create();
277
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
278
+ __promise->resolve();
279
+ });
280
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
281
+ jni::JniException __jniError(__throwable);
282
+ __promise->reject(std::make_exception_ptr(__jniError));
283
+ });
284
+ return __promise;
285
+ }();
226
286
  }
227
287
  RepeatMode JHybridTrackPlayerSpec::getRepeatMode() {
228
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JRepeatMode>()>("getRepeatMode");
288
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JRepeatMode>()>("getRepeatMode");
229
289
  auto __result = method(_javaPart);
230
290
  return __result->toCpp();
231
291
  }
232
- void JHybridTrackPlayerSpec::configure(const PlayerConfig& config) {
233
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JPlayerConfig> /* config */)>("configure");
234
- method(_javaPart, JPlayerConfig::fromCpp(config));
292
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::configure(const PlayerConfig& config) {
293
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JPlayerConfig> /* config */)>("configure");
294
+ auto __result = method(_javaPart, JPlayerConfig::fromCpp(config));
295
+ return [&]() {
296
+ auto __promise = Promise<void>::create();
297
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
298
+ __promise->resolve();
299
+ });
300
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
301
+ jni::JniException __jniError(__throwable);
302
+ __promise->reject(std::make_exception_ptr(__jniError));
303
+ });
304
+ return __promise;
305
+ }();
235
306
  }
236
307
  void JHybridTrackPlayerSpec::onChangeTrack(const std::function<void(const TrackItem& /* track */, std::optional<Reason> /* reason */)>& callback) {
237
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackItem_std__optional_Reason_::javaobject> /* callback */)>("onChangeTrack_cxx");
308
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackItem_std__optional_Reason_::javaobject> /* callback */)>("onChangeTrack_cxx");
238
309
  method(_javaPart, JFunc_void_TrackItem_std__optional_Reason__cxx::fromCpp(callback));
239
310
  }
240
311
  void JHybridTrackPlayerSpec::onPlaybackStateChange(const std::function<void(TrackPlayerState /* state */, std::optional<Reason> /* reason */)>& callback) {
241
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackPlayerState_std__optional_Reason_::javaobject> /* callback */)>("onPlaybackStateChange_cxx");
312
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackPlayerState_std__optional_Reason_::javaobject> /* callback */)>("onPlaybackStateChange_cxx");
242
313
  method(_javaPart, JFunc_void_TrackPlayerState_std__optional_Reason__cxx::fromCpp(callback));
243
314
  }
244
315
  void JHybridTrackPlayerSpec::onSeek(const std::function<void(double /* position */, double /* totalDuration */)>& callback) {
245
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double::javaobject> /* callback */)>("onSeek_cxx");
316
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double::javaobject> /* callback */)>("onSeek_cxx");
246
317
  method(_javaPart, JFunc_void_double_double_cxx::fromCpp(callback));
247
318
  }
248
319
  void JHybridTrackPlayerSpec::onPlaybackProgressChange(const std::function<void(double /* position */, double /* totalDuration */, std::optional<bool> /* isManuallySeeked */)>& callback) {
249
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double_std__optional_bool_::javaobject> /* callback */)>("onPlaybackProgressChange_cxx");
320
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double_std__optional_bool_::javaobject> /* callback */)>("onPlaybackProgressChange_cxx");
250
321
  method(_javaPart, JFunc_void_double_double_std__optional_bool__cxx::fromCpp(callback));
251
322
  }
252
323
  void JHybridTrackPlayerSpec::onAndroidAutoConnectionChange(const std::function<void(bool /* connected */)>& callback) {
253
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onAndroidAutoConnectionChange_cxx");
324
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onAndroidAutoConnectionChange_cxx");
254
325
  method(_javaPart, JFunc_void_bool_cxx::fromCpp(callback));
255
326
  }
256
327
  bool JHybridTrackPlayerSpec::isAndroidAutoConnected() {
257
- static const auto method = javaClassStatic()->getMethod<jboolean()>("isAndroidAutoConnected");
328
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isAndroidAutoConnected");
258
329
  auto __result = method(_javaPart);
259
330
  return static_cast<bool>(__result);
260
331
  }
261
- bool JHybridTrackPlayerSpec::setVolume(double volume) {
262
- static const auto method = javaClassStatic()->getMethod<jboolean(double /* volume */)>("setVolume");
332
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::setVolume(double volume) {
333
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* volume */)>("setVolume");
263
334
  auto __result = method(_javaPart, volume);
264
- return static_cast<bool>(__result);
335
+ return [&]() {
336
+ auto __promise = Promise<void>::create();
337
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
338
+ __promise->resolve();
339
+ });
340
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
341
+ jni::JniException __jniError(__throwable);
342
+ __promise->reject(std::make_exception_ptr(__jniError));
343
+ });
344
+ return __promise;
345
+ }();
265
346
  }
266
347
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::updateTracks(const std::vector<TrackItem>& tracks) {
267
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("updateTracks");
348
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("updateTracks");
268
349
  auto __result = method(_javaPart, [&]() {
269
350
  size_t __size = tracks.size();
270
351
  jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
@@ -288,7 +369,7 @@ namespace margelo::nitro::nitroplayer {
288
369
  }();
289
370
  }
290
371
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getTracksById(const std::vector<std::string>& trackIds) {
291
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* trackIds */)>("getTracksById");
372
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* trackIds */)>("getTracksById");
292
373
  auto __result = method(_javaPart, [&]() {
293
374
  size_t __size = trackIds.size();
294
375
  jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
@@ -322,7 +403,7 @@ namespace margelo::nitro::nitroplayer {
322
403
  }();
323
404
  }
324
405
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getTracksNeedingUrls() {
325
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getTracksNeedingUrls");
406
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getTracksNeedingUrls");
326
407
  auto __result = method(_javaPart);
327
408
  return [&]() {
328
409
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -347,7 +428,7 @@ namespace margelo::nitro::nitroplayer {
347
428
  }();
348
429
  }
349
430
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getNextTracks(double count) {
350
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* count */)>("getNextTracks");
431
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* count */)>("getNextTracks");
351
432
  auto __result = method(_javaPart, count);
352
433
  return [&]() {
353
434
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -372,7 +453,7 @@ namespace margelo::nitro::nitroplayer {
372
453
  }();
373
454
  }
374
455
  std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getCurrentTrackIndex() {
375
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getCurrentTrackIndex");
456
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getCurrentTrackIndex");
376
457
  auto __result = method(_javaPart);
377
458
  return [&]() {
378
459
  auto __promise = Promise<double>::create();
@@ -388,11 +469,11 @@ namespace margelo::nitro::nitroplayer {
388
469
  }();
389
470
  }
390
471
  void JHybridTrackPlayerSpec::onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) {
391
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_TrackItem__double::javaobject> /* callback */)>("onTracksNeedUpdate_cxx");
472
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_TrackItem__double::javaobject> /* callback */)>("onTracksNeedUpdate_cxx");
392
473
  method(_javaPart, JFunc_void_std__vector_TrackItem__double_cxx::fromCpp(callback));
393
474
  }
394
475
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::setPlaybackSpeed(double speed) {
395
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* speed */)>("setPlaybackSpeed");
476
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* speed */)>("setPlaybackSpeed");
396
477
  auto __result = method(_javaPart, speed);
397
478
  return [&]() {
398
479
  auto __promise = Promise<void>::create();
@@ -407,7 +488,7 @@ namespace margelo::nitro::nitroplayer {
407
488
  }();
408
489
  }
409
490
  std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getPlaybackSpeed() {
410
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlaybackSpeed");
491
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlaybackSpeed");
411
492
  auto __result = method(_javaPart);
412
493
  return [&]() {
413
494
  auto __promise = Promise<double>::create();
@@ -422,5 +503,137 @@ namespace margelo::nitro::nitroplayer {
422
503
  return __promise;
423
504
  }();
424
505
  }
506
+ std::shared_ptr<Promise<bool>> JHybridTrackPlayerSpec::removeFromPlayNext(const std::string& trackId) {
507
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("removeFromPlayNext");
508
+ auto __result = method(_javaPart, jni::make_jstring(trackId));
509
+ return [&]() {
510
+ auto __promise = Promise<bool>::create();
511
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
512
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
513
+ __promise->resolve(static_cast<bool>(__result->value()));
514
+ });
515
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
516
+ jni::JniException __jniError(__throwable);
517
+ __promise->reject(std::make_exception_ptr(__jniError));
518
+ });
519
+ return __promise;
520
+ }();
521
+ }
522
+ std::shared_ptr<Promise<bool>> JHybridTrackPlayerSpec::removeFromUpNext(const std::string& trackId) {
523
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("removeFromUpNext");
524
+ auto __result = method(_javaPart, jni::make_jstring(trackId));
525
+ return [&]() {
526
+ auto __promise = Promise<bool>::create();
527
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
528
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
529
+ __promise->resolve(static_cast<bool>(__result->value()));
530
+ });
531
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
532
+ jni::JniException __jniError(__throwable);
533
+ __promise->reject(std::make_exception_ptr(__jniError));
534
+ });
535
+ return __promise;
536
+ }();
537
+ }
538
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::clearPlayNext() {
539
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("clearPlayNext");
540
+ auto __result = method(_javaPart);
541
+ return [&]() {
542
+ auto __promise = Promise<void>::create();
543
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
544
+ __promise->resolve();
545
+ });
546
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
547
+ jni::JniException __jniError(__throwable);
548
+ __promise->reject(std::make_exception_ptr(__jniError));
549
+ });
550
+ return __promise;
551
+ }();
552
+ }
553
+ std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::clearUpNext() {
554
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("clearUpNext");
555
+ auto __result = method(_javaPart);
556
+ return [&]() {
557
+ auto __promise = Promise<void>::create();
558
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& /* unit */) {
559
+ __promise->resolve();
560
+ });
561
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
562
+ jni::JniException __jniError(__throwable);
563
+ __promise->reject(std::make_exception_ptr(__jniError));
564
+ });
565
+ return __promise;
566
+ }();
567
+ }
568
+ std::shared_ptr<Promise<bool>> JHybridTrackPlayerSpec::reorderTemporaryTrack(const std::string& trackId, double newIndex) {
569
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */, double /* newIndex */)>("reorderTemporaryTrack");
570
+ auto __result = method(_javaPart, jni::make_jstring(trackId), newIndex);
571
+ return [&]() {
572
+ auto __promise = Promise<bool>::create();
573
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
574
+ auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
575
+ __promise->resolve(static_cast<bool>(__result->value()));
576
+ });
577
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
578
+ jni::JniException __jniError(__throwable);
579
+ __promise->reject(std::make_exception_ptr(__jniError));
580
+ });
581
+ return __promise;
582
+ }();
583
+ }
584
+ std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getPlayNextQueue() {
585
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlayNextQueue");
586
+ auto __result = method(_javaPart);
587
+ return [&]() {
588
+ auto __promise = Promise<std::vector<TrackItem>>::create();
589
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
590
+ auto __result = jni::static_ref_cast<jni::JArrayClass<JTrackItem>>(__boxedResult);
591
+ __promise->resolve([&]() {
592
+ size_t __size = __result->size();
593
+ std::vector<TrackItem> __vector;
594
+ __vector.reserve(__size);
595
+ for (size_t __i = 0; __i < __size; __i++) {
596
+ auto __element = __result->getElement(__i);
597
+ __vector.push_back(__element->toCpp());
598
+ }
599
+ return __vector;
600
+ }());
601
+ });
602
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
603
+ jni::JniException __jniError(__throwable);
604
+ __promise->reject(std::make_exception_ptr(__jniError));
605
+ });
606
+ return __promise;
607
+ }();
608
+ }
609
+ std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getUpNextQueue() {
610
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getUpNextQueue");
611
+ auto __result = method(_javaPart);
612
+ return [&]() {
613
+ auto __promise = Promise<std::vector<TrackItem>>::create();
614
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
615
+ auto __result = jni::static_ref_cast<jni::JArrayClass<JTrackItem>>(__boxedResult);
616
+ __promise->resolve([&]() {
617
+ size_t __size = __result->size();
618
+ std::vector<TrackItem> __vector;
619
+ __vector.reserve(__size);
620
+ for (size_t __i = 0; __i < __size; __i++) {
621
+ auto __element = __result->getElement(__i);
622
+ __vector.push_back(__element->toCpp());
623
+ }
624
+ return __vector;
625
+ }());
626
+ });
627
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
628
+ jni::JniException __jniError(__throwable);
629
+ __promise->reject(std::make_exception_ptr(__jniError));
630
+ });
631
+ return __promise;
632
+ }();
633
+ }
634
+ void JHybridTrackPlayerSpec::onTemporaryQueueChange(const std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)>& callback) {
635
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_TrackItem__std__vector_TrackItem_::javaobject> /* callback */)>("onTemporaryQueueChange_cxx");
636
+ method(_javaPart, JFunc_void_std__vector_TrackItem__std__vector_TrackItem__cxx::fromCpp(callback));
637
+ }
425
638
 
426
639
  } // namespace margelo::nitro::nitroplayer
@@ -18,34 +18,33 @@ namespace margelo::nitro::nitroplayer {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridTrackPlayerSpec: public jni::HybridClass<JHybridTrackPlayerSpec, JHybridObject>,
22
- public virtual HybridTrackPlayerSpec {
21
+ class JHybridTrackPlayerSpec: public virtual HybridTrackPlayerSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridTrackPlayerSpec;";
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 JHybridTrackPlayerSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridTrackPlayerSpec::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/HybridTrackPlayerSpec;";
25
+ std::shared_ptr<JHybridTrackPlayerSpec> getJHybridTrackPlayerSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridTrackPlayerSpec$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 JHybridTrackPlayerSpec(const jni::local_ref<JHybridTrackPlayerSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridTrackPlayerSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridTrackPlayerSpec() 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<JHybridTrackPlayerSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridTrackPlayerSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -55,27 +54,27 @@ namespace margelo::nitro::nitroplayer {
55
54
 
56
55
  public:
57
56
  // Methods
58
- void play() override;
59
- void pause() override;
57
+ std::shared_ptr<Promise<void>> play() override;
58
+ std::shared_ptr<Promise<void>> pause() override;
60
59
  std::shared_ptr<Promise<void>> playSong(const std::string& songId, const std::optional<std::string>& fromPlaylist) override;
61
- void skipToNext() override;
60
+ std::shared_ptr<Promise<void>> skipToNext() override;
62
61
  std::shared_ptr<Promise<bool>> skipToIndex(double index) override;
63
- void skipToPrevious() override;
64
- void seek(double position) override;
62
+ std::shared_ptr<Promise<void>> skipToPrevious() override;
63
+ std::shared_ptr<Promise<void>> seek(double position) override;
65
64
  std::shared_ptr<Promise<void>> addToUpNext(const std::string& trackId) override;
66
65
  std::shared_ptr<Promise<void>> playNext(const std::string& trackId) override;
67
66
  std::shared_ptr<Promise<std::vector<TrackItem>>> getActualQueue() override;
68
67
  std::shared_ptr<Promise<PlayerState>> getState() override;
69
- bool setRepeatMode(RepeatMode mode) override;
68
+ std::shared_ptr<Promise<void>> setRepeatMode(RepeatMode mode) override;
70
69
  RepeatMode getRepeatMode() override;
71
- void configure(const PlayerConfig& config) override;
70
+ std::shared_ptr<Promise<void>> configure(const PlayerConfig& config) override;
72
71
  void onChangeTrack(const std::function<void(const TrackItem& /* track */, std::optional<Reason> /* reason */)>& callback) override;
73
72
  void onPlaybackStateChange(const std::function<void(TrackPlayerState /* state */, std::optional<Reason> /* reason */)>& callback) override;
74
73
  void onSeek(const std::function<void(double /* position */, double /* totalDuration */)>& callback) override;
75
74
  void onPlaybackProgressChange(const std::function<void(double /* position */, double /* totalDuration */, std::optional<bool> /* isManuallySeeked */)>& callback) override;
76
75
  void onAndroidAutoConnectionChange(const std::function<void(bool /* connected */)>& callback) override;
77
76
  bool isAndroidAutoConnected() override;
78
- bool setVolume(double volume) override;
77
+ std::shared_ptr<Promise<void>> setVolume(double volume) override;
79
78
  std::shared_ptr<Promise<void>> updateTracks(const std::vector<TrackItem>& tracks) override;
80
79
  std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksById(const std::vector<std::string>& trackIds) override;
81
80
  std::shared_ptr<Promise<std::vector<TrackItem>>> getTracksNeedingUrls() override;
@@ -84,11 +83,17 @@ namespace margelo::nitro::nitroplayer {
84
83
  void onTracksNeedUpdate(const std::function<void(const std::vector<TrackItem>& /* tracks */, double /* lookahead */)>& callback) override;
85
84
  std::shared_ptr<Promise<void>> setPlaybackSpeed(double speed) override;
86
85
  std::shared_ptr<Promise<double>> getPlaybackSpeed() override;
86
+ std::shared_ptr<Promise<bool>> removeFromPlayNext(const std::string& trackId) override;
87
+ std::shared_ptr<Promise<bool>> removeFromUpNext(const std::string& trackId) override;
88
+ std::shared_ptr<Promise<void>> clearPlayNext() override;
89
+ std::shared_ptr<Promise<void>> clearUpNext() override;
90
+ std::shared_ptr<Promise<bool>> reorderTemporaryTrack(const std::string& trackId, double newIndex) override;
91
+ std::shared_ptr<Promise<std::vector<TrackItem>>> getPlayNextQueue() override;
92
+ std::shared_ptr<Promise<std::vector<TrackItem>>> getUpNextQueue() override;
93
+ void onTemporaryQueueChange(const std::function<void(const std::vector<TrackItem>& /* playNextQueue */, const std::vector<TrackItem>& /* upNextQueue */)>& callback) override;
87
94
 
88
95
  private:
89
- friend HybridBase;
90
- using HybridBase::HybridBase;
91
- jni::global_ref<JHybridTrackPlayerSpec::javaobject> _javaPart;
96
+ jni::global_ref<JHybridTrackPlayerSpec::JavaPart> _javaPart;
92
97
  };
93
98
 
94
99
  } // namespace margelo::nitro::nitroplayer
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JPlaybackSource final: public jni::JavaClass<JPlaybackSource> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlaybackSource;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlaybackSource;";
23
23
 
24
24
  public:
25
25
  /**
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitroplayer {
21
21
  */
22
22
  struct JPlayerConfig final: public jni::JavaClass<JPlayerConfig> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlayerConfig;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlayerConfig;";
25
25
 
26
26
  public:
27
27
  /**