react-native-nitro-player 0.6.0 → 0.7.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 (79) hide show
  1. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +43 -0
  2. package/ios/core/TrackPlayerCore.swift +15 -0
  3. package/nitro.json +44 -11
  4. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +61 -24
  5. package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +1 -1
  6. package/nitrogen/generated/android/c++/JDownloadConfig.hpp +1 -1
  7. package/nitrogen/generated/android/c++/JDownloadError.hpp +1 -1
  8. package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +1 -1
  9. package/nitrogen/generated/android/c++/JDownloadProgress.hpp +1 -1
  10. package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +1 -1
  11. package/nitrogen/generated/android/c++/JDownloadState.hpp +1 -1
  12. package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +1 -1
  13. package/nitrogen/generated/android/c++/JDownloadTask.hpp +1 -1
  14. package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +1 -1
  15. package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +1 -1
  16. package/nitrogen/generated/android/c++/JEqualizerBand.hpp +1 -1
  17. package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +1 -1
  18. package/nitrogen/generated/android/c++/JEqualizerState.hpp +1 -1
  19. package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +2 -2
  20. package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +2 -2
  21. package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -2
  22. package/nitrogen/generated/android/c++/JFunc_void_TrackPlayerState_std__optional_Reason_.hpp +2 -2
  23. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +2 -2
  24. package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +2 -2
  25. package/nitrogen/generated/android/c++/JFunc_void_double_double_std__optional_bool_.hpp +2 -2
  26. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +2 -2
  27. package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -2
  28. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +2 -2
  29. package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +2 -2
  30. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -2
  31. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__double.hpp +2 -2
  32. package/nitrogen/generated/android/c++/JGainRange.hpp +1 -1
  33. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp +20 -26
  34. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.hpp +19 -22
  35. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp +20 -26
  36. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.hpp +19 -22
  37. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +53 -59
  38. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +19 -22
  39. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +36 -42
  40. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +19 -22
  41. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +31 -37
  42. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +19 -22
  43. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +47 -53
  44. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +19 -22
  45. package/nitrogen/generated/android/c++/JPlaybackSource.hpp +1 -1
  46. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +1 -1
  47. package/nitrogen/generated/android/c++/JPlayerState.hpp +1 -1
  48. package/nitrogen/generated/android/c++/JPlaylist.hpp +1 -1
  49. package/nitrogen/generated/android/c++/JPresetType.hpp +1 -1
  50. package/nitrogen/generated/android/c++/JQueueOperation.hpp +1 -1
  51. package/nitrogen/generated/android/c++/JReason.hpp +1 -1
  52. package/nitrogen/generated/android/c++/JRepeatMode.hpp +1 -1
  53. package/nitrogen/generated/android/c++/JStorageLocation.hpp +1 -1
  54. package/nitrogen/generated/android/c++/JTAudioDevice.hpp +1 -1
  55. package/nitrogen/generated/android/c++/JTrackItem.hpp +1 -1
  56. package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +1 -1
  57. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
  58. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +3 -3
  59. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +3 -3
  60. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +3 -3
  61. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +3 -3
  62. package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +3 -3
  63. package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +3 -3
  64. package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +3 -3
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrarySpec.kt +15 -18
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAudioDevicesSpec.kt +15 -18
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +15 -18
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +15 -18
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +15 -18
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +15 -18
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +0 -6
  72. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +0 -6
  73. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +0 -6
  74. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +0 -6
  75. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +0 -6
  76. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Playlist.kt +0 -6
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_String.kt +0 -6
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_TrackItem.kt +0 -6
  79. package/package.json +3 -3
@@ -89,37 +89,31 @@ namespace margelo::nitro::nitroplayer { enum class PlaybackSource; }
89
89
 
90
90
  namespace margelo::nitro::nitroplayer {
91
91
 
92
- jni::local_ref<JHybridDownloadManagerSpec::jhybriddata> JHybridDownloadManagerSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
93
- return makeCxxInstance(jThis);
94
- }
95
-
96
- void JHybridDownloadManagerSpec::registerNatives() {
97
- registerHybrid({
98
- makeNativeMethod("initHybrid", JHybridDownloadManagerSpec::initHybrid),
99
- });
92
+ std::shared_ptr<JHybridDownloadManagerSpec> JHybridDownloadManagerSpec::JavaPart::getJHybridDownloadManagerSpec() {
93
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
94
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridDownloadManagerSpec>(hybridObject);
95
+ if (castHybridObject == nullptr) [[unlikely]] {
96
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridDownloadManagerSpec!");
97
+ }
98
+ return castHybridObject;
100
99
  }
101
100
 
102
- size_t JHybridDownloadManagerSpec::getExternalMemorySize() noexcept {
103
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
104
- return method(_javaPart);
101
+ jni::local_ref<JHybridDownloadManagerSpec::CxxPart::jhybriddata> JHybridDownloadManagerSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
102
+ return makeCxxInstance(jThis);
105
103
  }
106
104
 
107
- bool JHybridDownloadManagerSpec::equals(const std::shared_ptr<HybridObject>& other) {
108
- if (auto otherCast = std::dynamic_pointer_cast<JHybridDownloadManagerSpec>(other)) {
109
- return _javaPart == otherCast->_javaPart;
105
+ std::shared_ptr<JHybridObject> JHybridDownloadManagerSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
106
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridDownloadManagerSpec::JavaPart>(javaPart);
107
+ if (castJavaPart == nullptr) [[unlikely]] {
108
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridDownloadManagerSpec::JavaPart!");
110
109
  }
111
- return false;
112
- }
113
-
114
- void JHybridDownloadManagerSpec::dispose() noexcept {
115
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
116
- method(_javaPart);
110
+ return std::make_shared<JHybridDownloadManagerSpec>(castJavaPart);
117
111
  }
118
112
 
119
- std::string JHybridDownloadManagerSpec::toString() {
120
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
121
- auto javaString = method(_javaPart);
122
- return javaString->toStdString();
113
+ void JHybridDownloadManagerSpec::CxxPart::registerNatives() {
114
+ registerHybrid({
115
+ makeNativeMethod("initHybrid", JHybridDownloadManagerSpec::CxxPart::initHybrid),
116
+ });
123
117
  }
124
118
 
125
119
  // Properties
@@ -127,16 +121,16 @@ namespace margelo::nitro::nitroplayer {
127
121
 
128
122
  // Methods
129
123
  void JHybridDownloadManagerSpec::configure(const DownloadConfig& config) {
130
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JDownloadConfig> /* config */)>("configure");
124
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JDownloadConfig> /* config */)>("configure");
131
125
  method(_javaPart, JDownloadConfig::fromCpp(config));
132
126
  }
133
127
  DownloadConfig JHybridDownloadManagerSpec::getConfig() {
134
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JDownloadConfig>()>("getConfig");
128
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JDownloadConfig>()>("getConfig");
135
129
  auto __result = method(_javaPart);
136
130
  return __result->toCpp();
137
131
  }
138
132
  std::shared_ptr<Promise<std::string>> JHybridDownloadManagerSpec::downloadTrack(const TrackItem& track, const std::optional<std::string>& playlistId) {
139
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JTrackItem> /* track */, jni::alias_ref<jni::JString> /* playlistId */)>("downloadTrack");
133
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JTrackItem> /* track */, jni::alias_ref<jni::JString> /* playlistId */)>("downloadTrack");
140
134
  auto __result = method(_javaPart, JTrackItem::fromCpp(track), playlistId.has_value() ? jni::make_jstring(playlistId.value()) : nullptr);
141
135
  return [&]() {
142
136
  auto __promise = Promise<std::string>::create();
@@ -152,7 +146,7 @@ namespace margelo::nitro::nitroplayer {
152
146
  }();
153
147
  }
154
148
  std::shared_ptr<Promise<std::vector<std::string>>> JHybridDownloadManagerSpec::downloadPlaylist(const std::string& playlistId, const std::vector<TrackItem>& tracks) {
155
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("downloadPlaylist");
149
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("downloadPlaylist");
156
150
  auto __result = method(_javaPart, jni::make_jstring(playlistId), [&]() {
157
151
  size_t __size = tracks.size();
158
152
  jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
@@ -186,7 +180,7 @@ namespace margelo::nitro::nitroplayer {
186
180
  }();
187
181
  }
188
182
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::pauseDownload(const std::string& downloadId) {
189
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("pauseDownload");
183
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("pauseDownload");
190
184
  auto __result = method(_javaPart, jni::make_jstring(downloadId));
191
185
  return [&]() {
192
186
  auto __promise = Promise<void>::create();
@@ -201,7 +195,7 @@ namespace margelo::nitro::nitroplayer {
201
195
  }();
202
196
  }
203
197
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::resumeDownload(const std::string& downloadId) {
204
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("resumeDownload");
198
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("resumeDownload");
205
199
  auto __result = method(_javaPart, jni::make_jstring(downloadId));
206
200
  return [&]() {
207
201
  auto __promise = Promise<void>::create();
@@ -216,7 +210,7 @@ namespace margelo::nitro::nitroplayer {
216
210
  }();
217
211
  }
218
212
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::cancelDownload(const std::string& downloadId) {
219
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("cancelDownload");
213
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("cancelDownload");
220
214
  auto __result = method(_javaPart, jni::make_jstring(downloadId));
221
215
  return [&]() {
222
216
  auto __promise = Promise<void>::create();
@@ -231,7 +225,7 @@ namespace margelo::nitro::nitroplayer {
231
225
  }();
232
226
  }
233
227
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::retryDownload(const std::string& downloadId) {
234
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("retryDownload");
228
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* downloadId */)>("retryDownload");
235
229
  auto __result = method(_javaPart, jni::make_jstring(downloadId));
236
230
  return [&]() {
237
231
  auto __promise = Promise<void>::create();
@@ -246,7 +240,7 @@ namespace margelo::nitro::nitroplayer {
246
240
  }();
247
241
  }
248
242
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::pauseAllDownloads() {
249
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("pauseAllDownloads");
243
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("pauseAllDownloads");
250
244
  auto __result = method(_javaPart);
251
245
  return [&]() {
252
246
  auto __promise = Promise<void>::create();
@@ -261,7 +255,7 @@ namespace margelo::nitro::nitroplayer {
261
255
  }();
262
256
  }
263
257
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::resumeAllDownloads() {
264
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("resumeAllDownloads");
258
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("resumeAllDownloads");
265
259
  auto __result = method(_javaPart);
266
260
  return [&]() {
267
261
  auto __promise = Promise<void>::create();
@@ -276,7 +270,7 @@ namespace margelo::nitro::nitroplayer {
276
270
  }();
277
271
  }
278
272
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::cancelAllDownloads() {
279
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("cancelAllDownloads");
273
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("cancelAllDownloads");
280
274
  auto __result = method(_javaPart);
281
275
  return [&]() {
282
276
  auto __promise = Promise<void>::create();
@@ -291,12 +285,12 @@ namespace margelo::nitro::nitroplayer {
291
285
  }();
292
286
  }
293
287
  std::variant<nitro::NullType, DownloadTask> JHybridDownloadManagerSpec::getDownloadTask(const std::string& downloadId) {
294
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadTask>(jni::alias_ref<jni::JString> /* downloadId */)>("getDownloadTask");
288
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadTask>(jni::alias_ref<jni::JString> /* downloadId */)>("getDownloadTask");
295
289
  auto __result = method(_javaPart, jni::make_jstring(downloadId));
296
290
  return __result->toCpp();
297
291
  }
298
292
  std::vector<DownloadTask> JHybridDownloadManagerSpec::getActiveDownloads() {
299
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadTask>>()>("getActiveDownloads");
293
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadTask>>()>("getActiveDownloads");
300
294
  auto __result = method(_javaPart);
301
295
  return [&]() {
302
296
  size_t __size = __result->size();
@@ -310,42 +304,42 @@ namespace margelo::nitro::nitroplayer {
310
304
  }();
311
305
  }
312
306
  DownloadQueueStatus JHybridDownloadManagerSpec::getQueueStatus() {
313
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JDownloadQueueStatus>()>("getQueueStatus");
307
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JDownloadQueueStatus>()>("getQueueStatus");
314
308
  auto __result = method(_javaPart);
315
309
  return __result->toCpp();
316
310
  }
317
311
  bool JHybridDownloadManagerSpec::isDownloading(const std::string& trackId) {
318
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* trackId */)>("isDownloading");
312
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* trackId */)>("isDownloading");
319
313
  auto __result = method(_javaPart, jni::make_jstring(trackId));
320
314
  return static_cast<bool>(__result);
321
315
  }
322
316
  DownloadState JHybridDownloadManagerSpec::getDownloadState(const std::string& trackId) {
323
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JDownloadState>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadState");
317
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JDownloadState>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadState");
324
318
  auto __result = method(_javaPart, jni::make_jstring(trackId));
325
319
  return __result->toCpp();
326
320
  }
327
321
  bool JHybridDownloadManagerSpec::isTrackDownloaded(const std::string& trackId) {
328
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* trackId */)>("isTrackDownloaded");
322
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* trackId */)>("isTrackDownloaded");
329
323
  auto __result = method(_javaPart, jni::make_jstring(trackId));
330
324
  return static_cast<bool>(__result);
331
325
  }
332
326
  bool JHybridDownloadManagerSpec::isPlaylistDownloaded(const std::string& playlistId) {
333
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistDownloaded");
327
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistDownloaded");
334
328
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
335
329
  return static_cast<bool>(__result);
336
330
  }
337
331
  bool JHybridDownloadManagerSpec::isPlaylistPartiallyDownloaded(const std::string& playlistId) {
338
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistPartiallyDownloaded");
332
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* playlistId */)>("isPlaylistPartiallyDownloaded");
339
333
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
340
334
  return static_cast<bool>(__result);
341
335
  }
342
336
  std::variant<nitro::NullType, DownloadedTrack> JHybridDownloadManagerSpec::getDownloadedTrack(const std::string& trackId) {
343
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedTrack>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadedTrack");
337
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedTrack>(jni::alias_ref<jni::JString> /* trackId */)>("getDownloadedTrack");
344
338
  auto __result = method(_javaPart, jni::make_jstring(trackId));
345
339
  return __result->toCpp();
346
340
  }
347
341
  std::vector<DownloadedTrack> JHybridDownloadManagerSpec::getAllDownloadedTracks() {
348
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedTrack>>()>("getAllDownloadedTracks");
342
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedTrack>>()>("getAllDownloadedTracks");
349
343
  auto __result = method(_javaPart);
350
344
  return [&]() {
351
345
  size_t __size = __result->size();
@@ -359,12 +353,12 @@ namespace margelo::nitro::nitroplayer {
359
353
  }();
360
354
  }
361
355
  std::variant<nitro::NullType, DownloadedPlaylist> JHybridDownloadManagerSpec::getDownloadedPlaylist(const std::string& playlistId) {
362
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedPlaylist>(jni::alias_ref<jni::JString> /* playlistId */)>("getDownloadedPlaylist");
356
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_DownloadedPlaylist>(jni::alias_ref<jni::JString> /* playlistId */)>("getDownloadedPlaylist");
363
357
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
364
358
  return __result->toCpp();
365
359
  }
366
360
  std::vector<DownloadedPlaylist> JHybridDownloadManagerSpec::getAllDownloadedPlaylists() {
367
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedPlaylist>>()>("getAllDownloadedPlaylists");
361
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JDownloadedPlaylist>>()>("getAllDownloadedPlaylists");
368
362
  auto __result = method(_javaPart);
369
363
  return [&]() {
370
364
  size_t __size = __result->size();
@@ -378,12 +372,12 @@ namespace margelo::nitro::nitroplayer {
378
372
  }();
379
373
  }
380
374
  std::variant<nitro::NullType, std::string> JHybridDownloadManagerSpec::getLocalPath(const std::string& trackId) {
381
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>(jni::alias_ref<jni::JString> /* trackId */)>("getLocalPath");
375
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>(jni::alias_ref<jni::JString> /* trackId */)>("getLocalPath");
382
376
  auto __result = method(_javaPart, jni::make_jstring(trackId));
383
377
  return __result->toCpp();
384
378
  }
385
379
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::deleteDownloadedTrack(const std::string& trackId) {
386
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("deleteDownloadedTrack");
380
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("deleteDownloadedTrack");
387
381
  auto __result = method(_javaPart, jni::make_jstring(trackId));
388
382
  return [&]() {
389
383
  auto __promise = Promise<void>::create();
@@ -398,7 +392,7 @@ namespace margelo::nitro::nitroplayer {
398
392
  }();
399
393
  }
400
394
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::deleteDownloadedPlaylist(const std::string& playlistId) {
401
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */)>("deleteDownloadedPlaylist");
395
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* playlistId */)>("deleteDownloadedPlaylist");
402
396
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
403
397
  return [&]() {
404
398
  auto __promise = Promise<void>::create();
@@ -413,7 +407,7 @@ namespace margelo::nitro::nitroplayer {
413
407
  }();
414
408
  }
415
409
  std::shared_ptr<Promise<void>> JHybridDownloadManagerSpec::deleteAllDownloads() {
416
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("deleteAllDownloads");
410
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("deleteAllDownloads");
417
411
  auto __result = method(_javaPart);
418
412
  return [&]() {
419
413
  auto __promise = Promise<void>::create();
@@ -428,7 +422,7 @@ namespace margelo::nitro::nitroplayer {
428
422
  }();
429
423
  }
430
424
  std::shared_ptr<Promise<DownloadStorageInfo>> JHybridDownloadManagerSpec::getStorageInfo() {
431
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getStorageInfo");
425
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getStorageInfo");
432
426
  auto __result = method(_javaPart);
433
427
  return [&]() {
434
428
  auto __promise = Promise<DownloadStorageInfo>::create();
@@ -444,34 +438,34 @@ namespace margelo::nitro::nitroplayer {
444
438
  }();
445
439
  }
446
440
  double JHybridDownloadManagerSpec::syncDownloads() {
447
- static const auto method = javaClassStatic()->getMethod<double()>("syncDownloads");
441
+ static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("syncDownloads");
448
442
  auto __result = method(_javaPart);
449
443
  return __result;
450
444
  }
451
445
  void JHybridDownloadManagerSpec::setPlaybackSourcePreference(PlaybackSource preference) {
452
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JPlaybackSource> /* preference */)>("setPlaybackSourcePreference");
446
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JPlaybackSource> /* preference */)>("setPlaybackSourcePreference");
453
447
  method(_javaPart, JPlaybackSource::fromCpp(preference));
454
448
  }
455
449
  PlaybackSource JHybridDownloadManagerSpec::getPlaybackSourcePreference() {
456
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPlaybackSource>()>("getPlaybackSourcePreference");
450
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPlaybackSource>()>("getPlaybackSourcePreference");
457
451
  auto __result = method(_javaPart);
458
452
  return __result->toCpp();
459
453
  }
460
454
  std::string JHybridDownloadManagerSpec::getEffectiveUrl(const TrackItem& track) {
461
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<JTrackItem> /* track */)>("getEffectiveUrl");
455
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<JTrackItem> /* track */)>("getEffectiveUrl");
462
456
  auto __result = method(_javaPart, JTrackItem::fromCpp(track));
463
457
  return __result->toStdString();
464
458
  }
465
459
  void JHybridDownloadManagerSpec::onDownloadProgress(const std::function<void(const DownloadProgress& /* progress */)>& callback) {
466
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_DownloadProgress::javaobject> /* callback */)>("onDownloadProgress_cxx");
460
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_DownloadProgress::javaobject> /* callback */)>("onDownloadProgress_cxx");
467
461
  method(_javaPart, JFunc_void_DownloadProgress_cxx::fromCpp(callback));
468
462
  }
469
463
  void JHybridDownloadManagerSpec::onDownloadStateChange(const std::function<void(const std::string& /* downloadId */, const std::string& /* trackId */, DownloadState /* state */, const std::optional<DownloadError>& /* error */)>& callback) {
470
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_::javaobject> /* callback */)>("onDownloadStateChange_cxx");
464
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_::javaobject> /* callback */)>("onDownloadStateChange_cxx");
471
465
  method(_javaPart, JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx::fromCpp(callback));
472
466
  }
473
467
  void JHybridDownloadManagerSpec::onDownloadComplete(const std::function<void(const DownloadedTrack& /* downloadedTrack */)>& callback) {
474
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_DownloadedTrack::javaobject> /* callback */)>("onDownloadComplete_cxx");
468
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_DownloadedTrack::javaobject> /* callback */)>("onDownloadComplete_cxx");
475
469
  method(_javaPart, JFunc_void_DownloadedTrack_cxx::fromCpp(callback));
476
470
  }
477
471
 
@@ -18,34 +18,33 @@ namespace margelo::nitro::nitroplayer {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridDownloadManagerSpec: public jni::HybridClass<JHybridDownloadManagerSpec, JHybridObject>,
22
- public virtual HybridDownloadManagerSpec {
21
+ class JHybridDownloadManagerSpec: public virtual HybridDownloadManagerSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridDownloadManagerSpec;";
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 JHybridDownloadManagerSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridDownloadManagerSpec::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/HybridDownloadManagerSpec;";
25
+ std::shared_ptr<JHybridDownloadManagerSpec> getJHybridDownloadManagerSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridDownloadManagerSpec$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 JHybridDownloadManagerSpec(const jni::local_ref<JHybridDownloadManagerSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridDownloadManagerSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridDownloadManagerSpec() 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<JHybridDownloadManagerSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridDownloadManagerSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -92,9 +91,7 @@ namespace margelo::nitro::nitroplayer {
92
91
  void onDownloadComplete(const std::function<void(const DownloadedTrack& /* downloadedTrack */)>& callback) override;
93
92
 
94
93
  private:
95
- friend HybridBase;
96
- using HybridBase::HybridBase;
97
- jni::global_ref<JHybridDownloadManagerSpec::javaobject> _javaPart;
94
+ jni::global_ref<JHybridDownloadManagerSpec::JavaPart> _javaPart;
98
95
  };
99
96
 
100
97
  } // namespace margelo::nitro::nitroplayer
@@ -43,37 +43,31 @@ namespace margelo::nitro::nitroplayer { struct EqualizerState; }
43
43
 
44
44
  namespace margelo::nitro::nitroplayer {
45
45
 
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
- });
46
+ std::shared_ptr<JHybridEqualizerSpec> JHybridEqualizerSpec::JavaPart::getJHybridEqualizerSpec() {
47
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
48
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridEqualizerSpec>(hybridObject);
49
+ if (castHybridObject == nullptr) [[unlikely]] {
50
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridEqualizerSpec!");
51
+ }
52
+ return castHybridObject;
54
53
  }
55
54
 
56
- size_t JHybridEqualizerSpec::getExternalMemorySize() noexcept {
57
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
58
- return method(_javaPart);
55
+ jni::local_ref<JHybridEqualizerSpec::CxxPart::jhybriddata> JHybridEqualizerSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
56
+ return makeCxxInstance(jThis);
59
57
  }
60
58
 
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;
59
+ std::shared_ptr<JHybridObject> JHybridEqualizerSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
60
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridEqualizerSpec::JavaPart>(javaPart);
61
+ if (castJavaPart == nullptr) [[unlikely]] {
62
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridEqualizerSpec::JavaPart!");
64
63
  }
65
- return false;
66
- }
67
-
68
- void JHybridEqualizerSpec::dispose() noexcept {
69
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
70
- method(_javaPart);
64
+ return std::make_shared<JHybridEqualizerSpec>(castJavaPart);
71
65
  }
72
66
 
73
- std::string JHybridEqualizerSpec::toString() {
74
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
75
- auto javaString = method(_javaPart);
76
- return javaString->toStdString();
67
+ void JHybridEqualizerSpec::CxxPart::registerNatives() {
68
+ registerHybrid({
69
+ makeNativeMethod("initHybrid", JHybridEqualizerSpec::CxxPart::initHybrid),
70
+ });
77
71
  }
78
72
 
79
73
  // Properties
@@ -81,17 +75,17 @@ namespace margelo::nitro::nitroplayer {
81
75
 
82
76
  // Methods
83
77
  bool JHybridEqualizerSpec::setEnabled(bool enabled) {
84
- static const auto method = javaClassStatic()->getMethod<jboolean(jboolean /* enabled */)>("setEnabled");
78
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jboolean /* enabled */)>("setEnabled");
85
79
  auto __result = method(_javaPart, enabled);
86
80
  return static_cast<bool>(__result);
87
81
  }
88
82
  bool JHybridEqualizerSpec::isEnabled() {
89
- static const auto method = javaClassStatic()->getMethod<jboolean()>("isEnabled");
83
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isEnabled");
90
84
  auto __result = method(_javaPart);
91
85
  return static_cast<bool>(__result);
92
86
  }
93
87
  std::vector<EqualizerBand> JHybridEqualizerSpec::getBands() {
94
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerBand>>()>("getBands");
88
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerBand>>()>("getBands");
95
89
  auto __result = method(_javaPart);
96
90
  return [&]() {
97
91
  size_t __size = __result->size();
@@ -105,12 +99,12 @@ namespace margelo::nitro::nitroplayer {
105
99
  }();
106
100
  }
107
101
  bool JHybridEqualizerSpec::setBandGain(double bandIndex, double gainDb) {
108
- static const auto method = javaClassStatic()->getMethod<jboolean(double /* bandIndex */, double /* gainDb */)>("setBandGain");
102
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(double /* bandIndex */, double /* gainDb */)>("setBandGain");
109
103
  auto __result = method(_javaPart, bandIndex, gainDb);
110
104
  return static_cast<bool>(__result);
111
105
  }
112
106
  bool JHybridEqualizerSpec::setAllBandGains(const std::vector<double>& gains) {
113
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JArrayDouble> /* gains */)>("setAllBandGains");
107
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JArrayDouble> /* gains */)>("setAllBandGains");
114
108
  auto __result = method(_javaPart, [&]() {
115
109
  size_t __size = gains.size();
116
110
  jni::local_ref<jni::JArrayDouble> __array = jni::JArrayDouble::newArray(__size);
@@ -120,12 +114,12 @@ namespace margelo::nitro::nitroplayer {
120
114
  return static_cast<bool>(__result);
121
115
  }
122
116
  GainRange JHybridEqualizerSpec::getBandRange() {
123
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JGainRange>()>("getBandRange");
117
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JGainRange>()>("getBandRange");
124
118
  auto __result = method(_javaPart);
125
119
  return __result->toCpp();
126
120
  }
127
121
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getPresets() {
128
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getPresets");
122
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getPresets");
129
123
  auto __result = method(_javaPart);
130
124
  return [&]() {
131
125
  size_t __size = __result->size();
@@ -139,7 +133,7 @@ namespace margelo::nitro::nitroplayer {
139
133
  }();
140
134
  }
141
135
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getBuiltInPresets() {
142
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getBuiltInPresets");
136
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getBuiltInPresets");
143
137
  auto __result = method(_javaPart);
144
138
  return [&]() {
145
139
  size_t __size = __result->size();
@@ -153,7 +147,7 @@ namespace margelo::nitro::nitroplayer {
153
147
  }();
154
148
  }
155
149
  std::vector<EqualizerPreset> JHybridEqualizerSpec::getCustomPresets() {
156
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getCustomPresets");
150
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JEqualizerPreset>>()>("getCustomPresets");
157
151
  auto __result = method(_javaPart);
158
152
  return [&]() {
159
153
  size_t __size = __result->size();
@@ -167,44 +161,44 @@ namespace margelo::nitro::nitroplayer {
167
161
  }();
168
162
  }
169
163
  bool JHybridEqualizerSpec::applyPreset(const std::string& presetName) {
170
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* presetName */)>("applyPreset");
164
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* presetName */)>("applyPreset");
171
165
  auto __result = method(_javaPart, jni::make_jstring(presetName));
172
166
  return static_cast<bool>(__result);
173
167
  }
174
168
  std::variant<nitro::NullType, std::string> JHybridEqualizerSpec::getCurrentPresetName() {
175
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPresetName");
169
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPresetName");
176
170
  auto __result = method(_javaPart);
177
171
  return __result->toCpp();
178
172
  }
179
173
  bool JHybridEqualizerSpec::saveCustomPreset(const std::string& name) {
180
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("saveCustomPreset");
174
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("saveCustomPreset");
181
175
  auto __result = method(_javaPart, jni::make_jstring(name));
182
176
  return static_cast<bool>(__result);
183
177
  }
184
178
  bool JHybridEqualizerSpec::deleteCustomPreset(const std::string& name) {
185
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("deleteCustomPreset");
179
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */)>("deleteCustomPreset");
186
180
  auto __result = method(_javaPart, jni::make_jstring(name));
187
181
  return static_cast<bool>(__result);
188
182
  }
189
183
  EqualizerState JHybridEqualizerSpec::getState() {
190
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JEqualizerState>()>("getState");
184
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JEqualizerState>()>("getState");
191
185
  auto __result = method(_javaPart);
192
186
  return __result->toCpp();
193
187
  }
194
188
  void JHybridEqualizerSpec::reset() {
195
- static const auto method = javaClassStatic()->getMethod<void()>("reset");
189
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("reset");
196
190
  method(_javaPart);
197
191
  }
198
192
  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");
193
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onEnabledChange_cxx");
200
194
  method(_javaPart, JFunc_void_bool_cxx::fromCpp(callback));
201
195
  }
202
196
  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");
197
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_EqualizerBand_::javaobject> /* callback */)>("onBandChange_cxx");
204
198
  method(_javaPart, JFunc_void_std__vector_EqualizerBand__cxx::fromCpp(callback));
205
199
  }
206
200
  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");
201
+ 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
202
  method(_javaPart, JFunc_void_std__optional_std__variant_nitro__NullType__std__string___cxx::fromCpp(callback));
209
203
  }
210
204
 
@@ -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
 
@@ -75,9 +74,7 @@ namespace margelo::nitro::nitroplayer {
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