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
@@ -37,37 +37,31 @@ namespace margelo::nitro::nitroplayer { enum class QueueOperation; }
37
37
 
38
38
  namespace margelo::nitro::nitroplayer {
39
39
 
40
- jni::local_ref<JHybridPlayerQueueSpec::jhybriddata> JHybridPlayerQueueSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
41
- return makeCxxInstance(jThis);
42
- }
43
-
44
- void JHybridPlayerQueueSpec::registerNatives() {
45
- registerHybrid({
46
- makeNativeMethod("initHybrid", JHybridPlayerQueueSpec::initHybrid),
47
- });
40
+ std::shared_ptr<JHybridPlayerQueueSpec> JHybridPlayerQueueSpec::JavaPart::getJHybridPlayerQueueSpec() {
41
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
42
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridPlayerQueueSpec>(hybridObject);
43
+ if (castHybridObject == nullptr) [[unlikely]] {
44
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridPlayerQueueSpec!");
45
+ }
46
+ return castHybridObject;
48
47
  }
49
48
 
50
- size_t JHybridPlayerQueueSpec::getExternalMemorySize() noexcept {
51
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
52
- return method(_javaPart);
49
+ jni::local_ref<JHybridPlayerQueueSpec::CxxPart::jhybriddata> JHybridPlayerQueueSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
50
+ return makeCxxInstance(jThis);
53
51
  }
54
52
 
55
- bool JHybridPlayerQueueSpec::equals(const std::shared_ptr<HybridObject>& other) {
56
- if (auto otherCast = std::dynamic_pointer_cast<JHybridPlayerQueueSpec>(other)) {
57
- return _javaPart == otherCast->_javaPart;
53
+ std::shared_ptr<JHybridObject> JHybridPlayerQueueSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
54
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridPlayerQueueSpec::JavaPart>(javaPart);
55
+ if (castJavaPart == nullptr) [[unlikely]] {
56
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridPlayerQueueSpec::JavaPart!");
58
57
  }
59
- return false;
60
- }
61
-
62
- void JHybridPlayerQueueSpec::dispose() noexcept {
63
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
64
- method(_javaPart);
58
+ return std::make_shared<JHybridPlayerQueueSpec>(castJavaPart);
65
59
  }
66
60
 
67
- std::string JHybridPlayerQueueSpec::toString() {
68
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
69
- auto javaString = method(_javaPart);
70
- return javaString->toStdString();
61
+ void JHybridPlayerQueueSpec::CxxPart::registerNatives() {
62
+ registerHybrid({
63
+ makeNativeMethod("initHybrid", JHybridPlayerQueueSpec::CxxPart::initHybrid),
64
+ });
71
65
  }
72
66
 
73
67
  // Properties
@@ -75,25 +69,25 @@ namespace margelo::nitro::nitroplayer {
75
69
 
76
70
  // Methods
77
71
  std::string JHybridPlayerQueueSpec::createPlaylist(const std::string& name, const std::optional<std::string>& description, const std::optional<std::string>& artwork) {
78
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<jni::JString> /* name */, jni::alias_ref<jni::JString> /* description */, jni::alias_ref<jni::JString> /* artwork */)>("createPlaylist");
72
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<jni::JString> /* name */, jni::alias_ref<jni::JString> /* description */, jni::alias_ref<jni::JString> /* artwork */)>("createPlaylist");
79
73
  auto __result = method(_javaPart, jni::make_jstring(name), description.has_value() ? jni::make_jstring(description.value()) : nullptr, artwork.has_value() ? jni::make_jstring(artwork.value()) : nullptr);
80
74
  return __result->toStdString();
81
75
  }
82
76
  void JHybridPlayerQueueSpec::deletePlaylist(const std::string& playlistId) {
83
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */)>("deletePlaylist");
77
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */)>("deletePlaylist");
84
78
  method(_javaPart, jni::make_jstring(playlistId));
85
79
  }
86
80
  void JHybridPlayerQueueSpec::updatePlaylist(const std::string& playlistId, const std::optional<std::string>& name, const std::optional<std::string>& description, const std::optional<std::string>& artwork) {
87
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* name */, jni::alias_ref<jni::JString> /* description */, jni::alias_ref<jni::JString> /* artwork */)>("updatePlaylist");
81
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* name */, jni::alias_ref<jni::JString> /* description */, jni::alias_ref<jni::JString> /* artwork */)>("updatePlaylist");
88
82
  method(_javaPart, jni::make_jstring(playlistId), name.has_value() ? jni::make_jstring(name.value()) : nullptr, description.has_value() ? jni::make_jstring(description.value()) : nullptr, artwork.has_value() ? jni::make_jstring(artwork.value()) : nullptr);
89
83
  }
90
84
  std::variant<nitro::NullType, Playlist> JHybridPlayerQueueSpec::getPlaylist(const std::string& playlistId) {
91
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_Playlist>(jni::alias_ref<jni::JString> /* playlistId */)>("getPlaylist");
85
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_Playlist>(jni::alias_ref<jni::JString> /* playlistId */)>("getPlaylist");
92
86
  auto __result = method(_javaPart, jni::make_jstring(playlistId));
93
87
  return __result->toCpp();
94
88
  }
95
89
  std::vector<Playlist> JHybridPlayerQueueSpec::getAllPlaylists() {
96
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JPlaylist>>()>("getAllPlaylists");
90
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JPlaylist>>()>("getAllPlaylists");
97
91
  auto __result = method(_javaPart);
98
92
  return [&]() {
99
93
  size_t __size = __result->size();
@@ -107,11 +101,11 @@ namespace margelo::nitro::nitroplayer {
107
101
  }();
108
102
  }
109
103
  void JHybridPlayerQueueSpec::addTrackToPlaylist(const std::string& playlistId, const TrackItem& track, std::optional<double> index) {
110
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<JTrackItem> /* track */, jni::alias_ref<jni::JDouble> /* index */)>("addTrackToPlaylist");
104
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<JTrackItem> /* track */, jni::alias_ref<jni::JDouble> /* index */)>("addTrackToPlaylist");
111
105
  method(_javaPart, jni::make_jstring(playlistId), JTrackItem::fromCpp(track), index.has_value() ? jni::JDouble::valueOf(index.value()) : nullptr);
112
106
  }
113
107
  void JHybridPlayerQueueSpec::addTracksToPlaylist(const std::string& playlistId, const std::vector<TrackItem>& tracks, std::optional<double> index) {
114
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */, jni::alias_ref<jni::JDouble> /* index */)>("addTracksToPlaylist");
108
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */, jni::alias_ref<jni::JDouble> /* index */)>("addTracksToPlaylist");
115
109
  method(_javaPart, jni::make_jstring(playlistId), [&]() {
116
110
  size_t __size = tracks.size();
117
111
  jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
@@ -124,28 +118,28 @@ namespace margelo::nitro::nitroplayer {
124
118
  }(), index.has_value() ? jni::JDouble::valueOf(index.value()) : nullptr);
125
119
  }
126
120
  void JHybridPlayerQueueSpec::removeTrackFromPlaylist(const std::string& playlistId, const std::string& trackId) {
127
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* trackId */)>("removeTrackFromPlaylist");
121
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* trackId */)>("removeTrackFromPlaylist");
128
122
  method(_javaPart, jni::make_jstring(playlistId), jni::make_jstring(trackId));
129
123
  }
130
124
  void JHybridPlayerQueueSpec::reorderTrackInPlaylist(const std::string& playlistId, const std::string& trackId, double newIndex) {
131
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* trackId */, double /* newIndex */)>("reorderTrackInPlaylist");
125
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */, jni::alias_ref<jni::JString> /* trackId */, double /* newIndex */)>("reorderTrackInPlaylist");
132
126
  method(_javaPart, jni::make_jstring(playlistId), jni::make_jstring(trackId), newIndex);
133
127
  }
134
128
  void JHybridPlayerQueueSpec::loadPlaylist(const std::string& playlistId) {
135
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */)>("loadPlaylist");
129
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* playlistId */)>("loadPlaylist");
136
130
  method(_javaPart, jni::make_jstring(playlistId));
137
131
  }
138
132
  std::variant<nitro::NullType, std::string> JHybridPlayerQueueSpec::getCurrentPlaylistId() {
139
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPlaylistId");
133
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>()>("getCurrentPlaylistId");
140
134
  auto __result = method(_javaPart);
141
135
  return __result->toCpp();
142
136
  }
143
137
  void JHybridPlayerQueueSpec::onPlaylistsChanged(const std::function<void(const std::vector<Playlist>& /* playlists */, std::optional<QueueOperation> /* operation */)>& callback) {
144
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_Playlist__std__optional_QueueOperation_::javaobject> /* callback */)>("onPlaylistsChanged_cxx");
138
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_Playlist__std__optional_QueueOperation_::javaobject> /* callback */)>("onPlaylistsChanged_cxx");
145
139
  method(_javaPart, JFunc_void_std__vector_Playlist__std__optional_QueueOperation__cxx::fromCpp(callback));
146
140
  }
147
141
  void JHybridPlayerQueueSpec::onPlaylistChanged(const std::function<void(const std::string& /* playlistId */, const Playlist& /* playlist */, std::optional<QueueOperation> /* operation */)>& callback) {
148
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__string_Playlist_std__optional_QueueOperation_::javaobject> /* callback */)>("onPlaylistChanged_cxx");
142
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__string_Playlist_std__optional_QueueOperation_::javaobject> /* callback */)>("onPlaylistChanged_cxx");
149
143
  method(_javaPart, JFunc_void_std__string_Playlist_std__optional_QueueOperation__cxx::fromCpp(callback));
150
144
  }
151
145
 
@@ -18,34 +18,33 @@ namespace margelo::nitro::nitroplayer {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridPlayerQueueSpec: public jni::HybridClass<JHybridPlayerQueueSpec, JHybridObject>,
22
- public virtual HybridPlayerQueueSpec {
21
+ class JHybridPlayerQueueSpec: public virtual HybridPlayerQueueSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridPlayerQueueSpec;";
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 JHybridPlayerQueueSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridPlayerQueueSpec::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/HybridPlayerQueueSpec;";
25
+ std::shared_ptr<JHybridPlayerQueueSpec> getJHybridPlayerQueueSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridPlayerQueueSpec$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 JHybridPlayerQueueSpec(const jni::local_ref<JHybridPlayerQueueSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridPlayerQueueSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridPlayerQueueSpec() 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<JHybridPlayerQueueSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridPlayerQueueSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -70,9 +69,7 @@ namespace margelo::nitro::nitroplayer {
70
69
  void onPlaylistChanged(const std::function<void(const std::string& /* playlistId */, const Playlist& /* playlist */, std::optional<QueueOperation> /* operation */)>& callback) override;
71
70
 
72
71
  private:
73
- friend HybridBase;
74
- using HybridBase::HybridBase;
75
- jni::global_ref<JHybridPlayerQueueSpec::javaobject> _javaPart;
72
+ jni::global_ref<JHybridPlayerQueueSpec::JavaPart> _javaPart;
76
73
  };
77
74
 
78
75
  } // namespace margelo::nitro::nitroplayer
@@ -60,37 +60,31 @@ namespace margelo::nitro::nitroplayer { enum class Reason; }
60
60
 
61
61
  namespace margelo::nitro::nitroplayer {
62
62
 
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
- });
63
+ std::shared_ptr<JHybridTrackPlayerSpec> JHybridTrackPlayerSpec::JavaPart::getJHybridTrackPlayerSpec() {
64
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
65
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridTrackPlayerSpec>(hybridObject);
66
+ if (castHybridObject == nullptr) [[unlikely]] {
67
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridTrackPlayerSpec!");
68
+ }
69
+ return castHybridObject;
71
70
  }
72
71
 
73
- size_t JHybridTrackPlayerSpec::getExternalMemorySize() noexcept {
74
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
75
- return method(_javaPart);
72
+ jni::local_ref<JHybridTrackPlayerSpec::CxxPart::jhybriddata> JHybridTrackPlayerSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
73
+ return makeCxxInstance(jThis);
76
74
  }
77
75
 
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;
76
+ std::shared_ptr<JHybridObject> JHybridTrackPlayerSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
77
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridTrackPlayerSpec::JavaPart>(javaPart);
78
+ if (castJavaPart == nullptr) [[unlikely]] {
79
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridTrackPlayerSpec::JavaPart!");
81
80
  }
82
- return false;
83
- }
84
-
85
- void JHybridTrackPlayerSpec::dispose() noexcept {
86
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
87
- method(_javaPart);
81
+ return std::make_shared<JHybridTrackPlayerSpec>(castJavaPart);
88
82
  }
89
83
 
90
- std::string JHybridTrackPlayerSpec::toString() {
91
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
92
- auto javaString = method(_javaPart);
93
- return javaString->toStdString();
84
+ void JHybridTrackPlayerSpec::CxxPart::registerNatives() {
85
+ registerHybrid({
86
+ makeNativeMethod("initHybrid", JHybridTrackPlayerSpec::CxxPart::initHybrid),
87
+ });
94
88
  }
95
89
 
96
90
  // Properties
@@ -98,15 +92,15 @@ namespace margelo::nitro::nitroplayer {
98
92
 
99
93
  // Methods
100
94
  void JHybridTrackPlayerSpec::play() {
101
- static const auto method = javaClassStatic()->getMethod<void()>("play");
95
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("play");
102
96
  method(_javaPart);
103
97
  }
104
98
  void JHybridTrackPlayerSpec::pause() {
105
- static const auto method = javaClassStatic()->getMethod<void()>("pause");
99
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("pause");
106
100
  method(_javaPart);
107
101
  }
108
102
  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");
103
+ 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
104
  auto __result = method(_javaPart, jni::make_jstring(songId), fromPlaylist.has_value() ? jni::make_jstring(fromPlaylist.value()) : nullptr);
111
105
  return [&]() {
112
106
  auto __promise = Promise<void>::create();
@@ -121,11 +115,11 @@ namespace margelo::nitro::nitroplayer {
121
115
  }();
122
116
  }
123
117
  void JHybridTrackPlayerSpec::skipToNext() {
124
- static const auto method = javaClassStatic()->getMethod<void()>("skipToNext");
118
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("skipToNext");
125
119
  method(_javaPart);
126
120
  }
127
121
  std::shared_ptr<Promise<bool>> JHybridTrackPlayerSpec::skipToIndex(double index) {
128
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* index */)>("skipToIndex");
122
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* index */)>("skipToIndex");
129
123
  auto __result = method(_javaPart, index);
130
124
  return [&]() {
131
125
  auto __promise = Promise<bool>::create();
@@ -141,15 +135,15 @@ namespace margelo::nitro::nitroplayer {
141
135
  }();
142
136
  }
143
137
  void JHybridTrackPlayerSpec::skipToPrevious() {
144
- static const auto method = javaClassStatic()->getMethod<void()>("skipToPrevious");
138
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("skipToPrevious");
145
139
  method(_javaPart);
146
140
  }
147
141
  void JHybridTrackPlayerSpec::seek(double position) {
148
- static const auto method = javaClassStatic()->getMethod<void(double /* position */)>("seek");
142
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* position */)>("seek");
149
143
  method(_javaPart, position);
150
144
  }
151
145
  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");
146
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("addToUpNext");
153
147
  auto __result = method(_javaPart, jni::make_jstring(trackId));
154
148
  return [&]() {
155
149
  auto __promise = Promise<void>::create();
@@ -164,7 +158,7 @@ namespace margelo::nitro::nitroplayer {
164
158
  }();
165
159
  }
166
160
  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");
161
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* trackId */)>("playNext");
168
162
  auto __result = method(_javaPart, jni::make_jstring(trackId));
169
163
  return [&]() {
170
164
  auto __promise = Promise<void>::create();
@@ -179,7 +173,7 @@ namespace margelo::nitro::nitroplayer {
179
173
  }();
180
174
  }
181
175
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getActualQueue() {
182
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getActualQueue");
176
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getActualQueue");
183
177
  auto __result = method(_javaPart);
184
178
  return [&]() {
185
179
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -204,7 +198,7 @@ namespace margelo::nitro::nitroplayer {
204
198
  }();
205
199
  }
206
200
  std::shared_ptr<Promise<PlayerState>> JHybridTrackPlayerSpec::getState() {
207
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getState");
201
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getState");
208
202
  auto __result = method(_javaPart);
209
203
  return [&]() {
210
204
  auto __promise = Promise<PlayerState>::create();
@@ -220,51 +214,51 @@ namespace margelo::nitro::nitroplayer {
220
214
  }();
221
215
  }
222
216
  bool JHybridTrackPlayerSpec::setRepeatMode(RepeatMode mode) {
223
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<JRepeatMode> /* mode */)>("setRepeatMode");
217
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<JRepeatMode> /* mode */)>("setRepeatMode");
224
218
  auto __result = method(_javaPart, JRepeatMode::fromCpp(mode));
225
219
  return static_cast<bool>(__result);
226
220
  }
227
221
  RepeatMode JHybridTrackPlayerSpec::getRepeatMode() {
228
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JRepeatMode>()>("getRepeatMode");
222
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JRepeatMode>()>("getRepeatMode");
229
223
  auto __result = method(_javaPart);
230
224
  return __result->toCpp();
231
225
  }
232
226
  void JHybridTrackPlayerSpec::configure(const PlayerConfig& config) {
233
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JPlayerConfig> /* config */)>("configure");
227
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JPlayerConfig> /* config */)>("configure");
234
228
  method(_javaPart, JPlayerConfig::fromCpp(config));
235
229
  }
236
230
  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");
231
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackItem_std__optional_Reason_::javaobject> /* callback */)>("onChangeTrack_cxx");
238
232
  method(_javaPart, JFunc_void_TrackItem_std__optional_Reason__cxx::fromCpp(callback));
239
233
  }
240
234
  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");
235
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_TrackPlayerState_std__optional_Reason_::javaobject> /* callback */)>("onPlaybackStateChange_cxx");
242
236
  method(_javaPart, JFunc_void_TrackPlayerState_std__optional_Reason__cxx::fromCpp(callback));
243
237
  }
244
238
  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");
239
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double::javaobject> /* callback */)>("onSeek_cxx");
246
240
  method(_javaPart, JFunc_void_double_double_cxx::fromCpp(callback));
247
241
  }
248
242
  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");
243
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double_double_std__optional_bool_::javaobject> /* callback */)>("onPlaybackProgressChange_cxx");
250
244
  method(_javaPart, JFunc_void_double_double_std__optional_bool__cxx::fromCpp(callback));
251
245
  }
252
246
  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");
247
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool::javaobject> /* callback */)>("onAndroidAutoConnectionChange_cxx");
254
248
  method(_javaPart, JFunc_void_bool_cxx::fromCpp(callback));
255
249
  }
256
250
  bool JHybridTrackPlayerSpec::isAndroidAutoConnected() {
257
- static const auto method = javaClassStatic()->getMethod<jboolean()>("isAndroidAutoConnected");
251
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isAndroidAutoConnected");
258
252
  auto __result = method(_javaPart);
259
253
  return static_cast<bool>(__result);
260
254
  }
261
255
  bool JHybridTrackPlayerSpec::setVolume(double volume) {
262
- static const auto method = javaClassStatic()->getMethod<jboolean(double /* volume */)>("setVolume");
256
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(double /* volume */)>("setVolume");
263
257
  auto __result = method(_javaPart, volume);
264
258
  return static_cast<bool>(__result);
265
259
  }
266
260
  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");
261
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<JTrackItem>> /* tracks */)>("updateTracks");
268
262
  auto __result = method(_javaPart, [&]() {
269
263
  size_t __size = tracks.size();
270
264
  jni::local_ref<jni::JArrayClass<JTrackItem>> __array = jni::JArrayClass<JTrackItem>::newArray(__size);
@@ -288,7 +282,7 @@ namespace margelo::nitro::nitroplayer {
288
282
  }();
289
283
  }
290
284
  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");
285
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* trackIds */)>("getTracksById");
292
286
  auto __result = method(_javaPart, [&]() {
293
287
  size_t __size = trackIds.size();
294
288
  jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
@@ -322,7 +316,7 @@ namespace margelo::nitro::nitroplayer {
322
316
  }();
323
317
  }
324
318
  std::shared_ptr<Promise<std::vector<TrackItem>>> JHybridTrackPlayerSpec::getTracksNeedingUrls() {
325
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getTracksNeedingUrls");
319
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getTracksNeedingUrls");
326
320
  auto __result = method(_javaPart);
327
321
  return [&]() {
328
322
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -347,7 +341,7 @@ namespace margelo::nitro::nitroplayer {
347
341
  }();
348
342
  }
349
343
  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");
344
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* count */)>("getNextTracks");
351
345
  auto __result = method(_javaPart, count);
352
346
  return [&]() {
353
347
  auto __promise = Promise<std::vector<TrackItem>>::create();
@@ -372,7 +366,7 @@ namespace margelo::nitro::nitroplayer {
372
366
  }();
373
367
  }
374
368
  std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getCurrentTrackIndex() {
375
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getCurrentTrackIndex");
369
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getCurrentTrackIndex");
376
370
  auto __result = method(_javaPart);
377
371
  return [&]() {
378
372
  auto __promise = Promise<double>::create();
@@ -388,11 +382,11 @@ namespace margelo::nitro::nitroplayer {
388
382
  }();
389
383
  }
390
384
  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");
385
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_TrackItem__double::javaobject> /* callback */)>("onTracksNeedUpdate_cxx");
392
386
  method(_javaPart, JFunc_void_std__vector_TrackItem__double_cxx::fromCpp(callback));
393
387
  }
394
388
  std::shared_ptr<Promise<void>> JHybridTrackPlayerSpec::setPlaybackSpeed(double speed) {
395
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* speed */)>("setPlaybackSpeed");
389
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(double /* speed */)>("setPlaybackSpeed");
396
390
  auto __result = method(_javaPart, speed);
397
391
  return [&]() {
398
392
  auto __promise = Promise<void>::create();
@@ -407,7 +401,7 @@ namespace margelo::nitro::nitroplayer {
407
401
  }();
408
402
  }
409
403
  std::shared_ptr<Promise<double>> JHybridTrackPlayerSpec::getPlaybackSpeed() {
410
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlaybackSpeed");
404
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getPlaybackSpeed");
411
405
  auto __result = method(_javaPart);
412
406
  return [&]() {
413
407
  auto __promise = Promise<double>::create();
@@ -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
 
@@ -86,9 +85,7 @@ namespace margelo::nitro::nitroplayer {
86
85
  std::shared_ptr<Promise<double>> getPlaybackSpeed() override;
87
86
 
88
87
  private:
89
- friend HybridBase;
90
- using HybridBase::HybridBase;
91
- jni::global_ref<JHybridTrackPlayerSpec::javaobject> _javaPart;
88
+ jni::global_ref<JHybridTrackPlayerSpec::JavaPart> _javaPart;
92
89
  };
93
90
 
94
91
  } // 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
  /**
@@ -35,7 +35,7 @@ namespace margelo::nitro::nitroplayer {
35
35
  */
36
36
  struct JPlayerState final: public jni::JavaClass<JPlayerState> {
37
37
  public:
38
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlayerState;";
38
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PlayerState;";
39
39
 
40
40
  public:
41
41
  /**
@@ -31,7 +31,7 @@ namespace margelo::nitro::nitroplayer {
31
31
  */
32
32
  struct JPlaylist final: public jni::JavaClass<JPlaylist> {
33
33
  public:
34
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Playlist;";
34
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Playlist;";
35
35
 
36
36
  public:
37
37
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JPresetType final: public jni::JavaClass<JPresetType> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PresetType;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/PresetType;";
23
23
 
24
24
  public:
25
25
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JQueueOperation final: public jni::JavaClass<JQueueOperation> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/QueueOperation;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/QueueOperation;";
23
23
 
24
24
  public:
25
25
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JReason final: public jni::JavaClass<JReason> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Reason;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Reason;";
23
23
 
24
24
  public:
25
25
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JRepeatMode final: public jni::JavaClass<JRepeatMode> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/RepeatMode;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/RepeatMode;";
23
23
 
24
24
  public:
25
25
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JStorageLocation final: public jni::JavaClass<JStorageLocation> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/StorageLocation;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/StorageLocation;";
23
23
 
24
24
  public:
25
25
  /**