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
@@ -1201,6 +1201,20 @@ class TrackPlayerCore private constructor(
1201
1201
  val currentIndex = player.currentMediaItemIndex
1202
1202
  if (currentIndex < 0) return
1203
1203
 
1204
+ // Handle removed-current-track case: if the currently playing media item is no longer
1205
+ // in currentTracks (e.g. the user removed it while it was playing), delegate to
1206
+ // playFromIndexInternal so the player immediately starts the next track.
1207
+ val currentTrackId = player.currentMediaItem?.mediaId?.let { extractTrackId(it) }
1208
+ if (currentTrackId != null && currentTracks.none { it.id == currentTrackId }) {
1209
+ val targetIndex = when {
1210
+ currentTracks.isEmpty() -> return
1211
+ currentTrackIndex < currentTracks.size -> currentTrackIndex
1212
+ else -> currentTracks.size - 1
1213
+ }
1214
+ playFromIndexInternal(targetIndex)
1215
+ return
1216
+ }
1217
+
1204
1218
  val newQueueTracks = ArrayList<TrackItem>(playNextStack.size + upNextQueue.size + currentTracks.size)
1205
1219
 
1206
1220
  // Add playNext stack (LIFO - most recently added plays first)
@@ -1609,6 +1623,35 @@ class TrackPlayerCore private constructor(
1609
1623
  if (currentPlaylistId != null && affectedPlaylists.containsKey(currentPlaylistId)) {
1610
1624
  NitroPlayerLogger.log("TrackPlayerCore") { "🔄 Rebuilding queue - ${affectedPlaylists[currentPlaylistId]} tracks updated in current playlist" }
1611
1625
 
1626
+ // PlaylistManager.updateTracks() creates a new Playlist via .copy(tracks = newTracks),
1627
+ // so our currentTracks reference still points at the old list with empty URLs.
1628
+ // Refresh it now so rebuildQueueFromCurrentPosition builds MediaItems with the
1629
+ // resolved URLs, allowing ExoPlayer to pre-buffer the next track for gapless playback.
1630
+ val refreshedPlaylist = playlistManager.getPlaylist(currentPlaylistId!!)
1631
+ if (refreshedPlaylist != null) {
1632
+ currentTracks = refreshedPlaylist.tracks
1633
+
1634
+ // Also reconcile any queued items that still reference old TrackItem instances
1635
+ // from this playlist, so that gapless pre-buffering uses tracks with resolved URLs.
1636
+ val updatedTrackById = currentTracks.associateBy { it.id }
1637
+
1638
+ // Update playNextStack entries to point at the refreshed TrackItem objects.
1639
+ playNextStack.forEachIndexed { index, track ->
1640
+ val updated = updatedTrackById[track.id]
1641
+ if (updated != null && updated !== track) {
1642
+ playNextStack[index] = updated
1643
+ }
1644
+ }
1645
+
1646
+ // Update upNextQueue entries to point at the refreshed TrackItem objects.
1647
+ upNextQueue.forEachIndexed { index, track ->
1648
+ val updated = updatedTrackById[track.id]
1649
+ if (updated != null && updated !== track) {
1650
+ upNextQueue[index] = updated
1651
+ }
1652
+ }
1653
+ }
1654
+
1612
1655
  // This method preserves current item and gapless buffering
1613
1656
  rebuildQueueFromCurrentPosition()
1614
1657
 
@@ -1931,6 +1931,21 @@ class TrackPlayerCore: NSObject {
1931
1931
  let currentItem = player.currentItem
1932
1932
  let playingItems = player.items()
1933
1933
 
1934
+ // ---- Handle removed-current-track case ----
1935
+ // If the currently playing AVPlayerItem is no longer in currentTracks (e.g. the user
1936
+ // removed it while it was playing), delegate to rebuildQueueFromPlaylistIndex so the
1937
+ // player immediately starts what is now at currentTrackIndex in the updated list.
1938
+ if let playingTrackId = currentItem?.trackId,
1939
+ !currentTracks.contains(where: { $0.id == playingTrackId }) {
1940
+ let targetIndex = currentTrackIndex < currentTracks.count
1941
+ ? currentTrackIndex
1942
+ : currentTracks.count - 1
1943
+ if targetIndex >= 0 {
1944
+ _ = rebuildQueueFromPlaylistIndex(index: targetIndex)
1945
+ }
1946
+ return
1947
+ }
1948
+
1934
1949
  // ---- Build the desired upcoming track list ----
1935
1950
 
1936
1951
  var newQueueTracks: [TrackItem] = []
package/nitro.json CHANGED
@@ -10,29 +10,62 @@
10
10
  },
11
11
  "autolinking": {
12
12
  "PlayerQueue": {
13
- "swift": "HybridPlayerQueue",
14
- "kotlin": "HybridPlayerQueue"
13
+ "ios": {
14
+ "language": "swift",
15
+ "implementationClassName": "HybridPlayerQueue"
16
+ },
17
+ "android": {
18
+ "language": "kotlin",
19
+ "implementationClassName": "HybridPlayerQueue"
20
+ }
15
21
  },
16
22
  "TrackPlayer": {
17
- "swift": "HybridTrackPlayer",
18
- "kotlin": "HybridTrackPlayer"
23
+ "ios": {
24
+ "language": "swift",
25
+ "implementationClassName": "HybridTrackPlayer"
26
+ },
27
+ "android": {
28
+ "language": "kotlin",
29
+ "implementationClassName": "HybridTrackPlayer"
30
+ }
19
31
  },
20
32
  "AndroidAutoMediaLibrary": {
21
- "kotlin": "HybridAndroidAutoMediaLibrary"
33
+ "android": {
34
+ "language": "kotlin",
35
+ "implementationClassName": "HybridAndroidAutoMediaLibrary"
36
+ }
22
37
  },
23
38
  "AudioDevices": {
24
- "kotlin": "HybridAudioDevices"
39
+ "android": {
40
+ "language": "kotlin",
41
+ "implementationClassName": "HybridAudioDevices"
42
+ }
25
43
  },
26
44
  "AudioRoutePicker": {
27
- "swift": "HybridAudioRoutePicker"
45
+ "ios": {
46
+ "language": "swift",
47
+ "implementationClassName": "HybridAudioRoutePicker"
48
+ }
28
49
  },
29
50
  "DownloadManager": {
30
- "swift": "HybridDownloadManager",
31
- "kotlin": "HybridDownloadManager"
51
+ "ios": {
52
+ "language": "swift",
53
+ "implementationClassName": "HybridDownloadManager"
54
+ },
55
+ "android": {
56
+ "language": "kotlin",
57
+ "implementationClassName": "HybridDownloadManager"
58
+ }
32
59
  },
33
60
  "Equalizer": {
34
- "swift": "HybridEqualizer",
35
- "kotlin": "HybridEqualizer"
61
+ "ios": {
62
+ "language": "swift",
63
+ "implementationClassName": "HybridEqualizer"
64
+ },
65
+ "android": {
66
+ "language": "kotlin",
67
+ "implementationClassName": "HybridEqualizer"
68
+ }
36
69
  }
37
70
  },
38
71
  "ignorePaths": ["**/node_modules"]
@@ -44,25 +44,74 @@ int initialize(JavaVM* vm) {
44
44
  });
45
45
  }
46
46
 
47
+ struct JHybridPlayerQueueSpecImpl: public jni::JavaClass<JHybridPlayerQueueSpecImpl, JHybridPlayerQueueSpec::JavaPart> {
48
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridPlayerQueue;";
49
+ static std::shared_ptr<JHybridPlayerQueueSpec> create() {
50
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridPlayerQueueSpecImpl::javaobject()>();
51
+ jni::local_ref<JHybridPlayerQueueSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
52
+ return javaPart->getJHybridPlayerQueueSpec();
53
+ }
54
+ };
55
+ struct JHybridTrackPlayerSpecImpl: public jni::JavaClass<JHybridTrackPlayerSpecImpl, JHybridTrackPlayerSpec::JavaPart> {
56
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridTrackPlayer;";
57
+ static std::shared_ptr<JHybridTrackPlayerSpec> create() {
58
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridTrackPlayerSpecImpl::javaobject()>();
59
+ jni::local_ref<JHybridTrackPlayerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
60
+ return javaPart->getJHybridTrackPlayerSpec();
61
+ }
62
+ };
63
+ struct JHybridAndroidAutoMediaLibrarySpecImpl: public jni::JavaClass<JHybridAndroidAutoMediaLibrarySpecImpl, JHybridAndroidAutoMediaLibrarySpec::JavaPart> {
64
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary;";
65
+ static std::shared_ptr<JHybridAndroidAutoMediaLibrarySpec> create() {
66
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridAndroidAutoMediaLibrarySpecImpl::javaobject()>();
67
+ jni::local_ref<JHybridAndroidAutoMediaLibrarySpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
68
+ return javaPart->getJHybridAndroidAutoMediaLibrarySpec();
69
+ }
70
+ };
71
+ struct JHybridAudioDevicesSpecImpl: public jni::JavaClass<JHybridAudioDevicesSpecImpl, JHybridAudioDevicesSpec::JavaPart> {
72
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridAudioDevices;";
73
+ static std::shared_ptr<JHybridAudioDevicesSpec> create() {
74
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridAudioDevicesSpecImpl::javaobject()>();
75
+ jni::local_ref<JHybridAudioDevicesSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
76
+ return javaPart->getJHybridAudioDevicesSpec();
77
+ }
78
+ };
79
+ struct JHybridDownloadManagerSpecImpl: public jni::JavaClass<JHybridDownloadManagerSpecImpl, JHybridDownloadManagerSpec::JavaPart> {
80
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridDownloadManager;";
81
+ static std::shared_ptr<JHybridDownloadManagerSpec> create() {
82
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridDownloadManagerSpecImpl::javaobject()>();
83
+ jni::local_ref<JHybridDownloadManagerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
84
+ return javaPart->getJHybridDownloadManagerSpec();
85
+ }
86
+ };
87
+ struct JHybridEqualizerSpecImpl: public jni::JavaClass<JHybridEqualizerSpecImpl, JHybridEqualizerSpec::JavaPart> {
88
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/HybridEqualizer;";
89
+ static std::shared_ptr<JHybridEqualizerSpec> create() {
90
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridEqualizerSpecImpl::javaobject()>();
91
+ jni::local_ref<JHybridEqualizerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
92
+ return javaPart->getJHybridEqualizerSpec();
93
+ }
94
+ };
95
+
47
96
  void registerAllNatives() {
48
97
  using namespace margelo::nitro;
49
98
  using namespace margelo::nitro::nitroplayer;
50
99
 
51
100
  // Register native JNI methods
52
- margelo::nitro::nitroplayer::JHybridAndroidAutoMediaLibrarySpec::registerNatives();
53
- margelo::nitro::nitroplayer::JHybridAudioDevicesSpec::registerNatives();
54
- margelo::nitro::nitroplayer::JHybridDownloadManagerSpec::registerNatives();
101
+ margelo::nitro::nitroplayer::JHybridAndroidAutoMediaLibrarySpec::CxxPart::registerNatives();
102
+ margelo::nitro::nitroplayer::JHybridAudioDevicesSpec::CxxPart::registerNatives();
103
+ margelo::nitro::nitroplayer::JHybridDownloadManagerSpec::CxxPart::registerNatives();
55
104
  margelo::nitro::nitroplayer::JFunc_void_DownloadProgress_cxx::registerNatives();
56
105
  margelo::nitro::nitroplayer::JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx::registerNatives();
57
106
  margelo::nitro::nitroplayer::JFunc_void_DownloadedTrack_cxx::registerNatives();
58
- margelo::nitro::nitroplayer::JHybridEqualizerSpec::registerNatives();
107
+ margelo::nitro::nitroplayer::JHybridEqualizerSpec::CxxPart::registerNatives();
59
108
  margelo::nitro::nitroplayer::JFunc_void_bool_cxx::registerNatives();
60
109
  margelo::nitro::nitroplayer::JFunc_void_std__vector_EqualizerBand__cxx::registerNatives();
61
110
  margelo::nitro::nitroplayer::JFunc_void_std__optional_std__variant_nitro__NullType__std__string___cxx::registerNatives();
62
- margelo::nitro::nitroplayer::JHybridPlayerQueueSpec::registerNatives();
111
+ margelo::nitro::nitroplayer::JHybridPlayerQueueSpec::CxxPart::registerNatives();
63
112
  margelo::nitro::nitroplayer::JFunc_void_std__vector_Playlist__std__optional_QueueOperation__cxx::registerNatives();
64
113
  margelo::nitro::nitroplayer::JFunc_void_std__string_Playlist_std__optional_QueueOperation__cxx::registerNatives();
65
- margelo::nitro::nitroplayer::JHybridTrackPlayerSpec::registerNatives();
114
+ margelo::nitro::nitroplayer::JHybridTrackPlayerSpec::CxxPart::registerNatives();
66
115
  margelo::nitro::nitroplayer::JFunc_void_TrackItem_std__optional_Reason__cxx::registerNatives();
67
116
  margelo::nitro::nitroplayer::JFunc_void_TrackPlayerState_std__optional_Reason__cxx::registerNatives();
68
117
  margelo::nitro::nitroplayer::JFunc_void_double_double_cxx::registerNatives();
@@ -73,49 +122,37 @@ void registerAllNatives() {
73
122
  HybridObjectRegistry::registerHybridObjectConstructor(
74
123
  "PlayerQueue",
75
124
  []() -> std::shared_ptr<HybridObject> {
76
- static DefaultConstructableObject<JHybridPlayerQueueSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridPlayerQueue");
77
- auto instance = object.create();
78
- return instance->cthis()->shared();
125
+ return JHybridPlayerQueueSpecImpl::create();
79
126
  }
80
127
  );
81
128
  HybridObjectRegistry::registerHybridObjectConstructor(
82
129
  "TrackPlayer",
83
130
  []() -> std::shared_ptr<HybridObject> {
84
- static DefaultConstructableObject<JHybridTrackPlayerSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridTrackPlayer");
85
- auto instance = object.create();
86
- return instance->cthis()->shared();
131
+ return JHybridTrackPlayerSpecImpl::create();
87
132
  }
88
133
  );
89
134
  HybridObjectRegistry::registerHybridObjectConstructor(
90
135
  "AndroidAutoMediaLibrary",
91
136
  []() -> std::shared_ptr<HybridObject> {
92
- static DefaultConstructableObject<JHybridAndroidAutoMediaLibrarySpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary");
93
- auto instance = object.create();
94
- return instance->cthis()->shared();
137
+ return JHybridAndroidAutoMediaLibrarySpecImpl::create();
95
138
  }
96
139
  );
97
140
  HybridObjectRegistry::registerHybridObjectConstructor(
98
141
  "AudioDevices",
99
142
  []() -> std::shared_ptr<HybridObject> {
100
- static DefaultConstructableObject<JHybridAudioDevicesSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridAudioDevices");
101
- auto instance = object.create();
102
- return instance->cthis()->shared();
143
+ return JHybridAudioDevicesSpecImpl::create();
103
144
  }
104
145
  );
105
146
  HybridObjectRegistry::registerHybridObjectConstructor(
106
147
  "DownloadManager",
107
148
  []() -> std::shared_ptr<HybridObject> {
108
- static DefaultConstructableObject<JHybridDownloadManagerSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridDownloadManager");
109
- auto instance = object.create();
110
- return instance->cthis()->shared();
149
+ return JHybridDownloadManagerSpecImpl::create();
111
150
  }
112
151
  );
113
152
  HybridObjectRegistry::registerHybridObjectConstructor(
114
153
  "Equalizer",
115
154
  []() -> std::shared_ptr<HybridObject> {
116
- static DefaultConstructableObject<JHybridEqualizerSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridEqualizer");
117
- auto instance = object.create();
118
- return instance->cthis()->shared();
155
+ return JHybridEqualizerSpecImpl::create();
119
156
  }
120
157
  );
121
158
  }
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JCurrentPlayingType final: public jni::JavaClass<JCurrentPlayingType> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/CurrentPlayingType;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/CurrentPlayingType;";
23
23
 
24
24
  public:
25
25
  /**
@@ -28,7 +28,7 @@ namespace margelo::nitro::nitroplayer {
28
28
  */
29
29
  struct JDownloadConfig final: public jni::JavaClass<JDownloadConfig> {
30
30
  public:
31
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadConfig;";
31
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadConfig;";
32
32
 
33
33
  public:
34
34
  /**
@@ -23,7 +23,7 @@ namespace margelo::nitro::nitroplayer {
23
23
  */
24
24
  struct JDownloadError final: public jni::JavaClass<JDownloadError> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadError;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadError;";
27
27
 
28
28
  public:
29
29
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JDownloadErrorReason final: public jni::JavaClass<JDownloadErrorReason> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadErrorReason;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadErrorReason;";
23
23
 
24
24
  public:
25
25
  /**
@@ -23,7 +23,7 @@ namespace margelo::nitro::nitroplayer {
23
23
  */
24
24
  struct JDownloadProgress final: public jni::JavaClass<JDownloadProgress> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadProgress;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadProgress;";
27
27
 
28
28
  public:
29
29
  /**
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitroplayer {
21
21
  */
22
22
  struct JDownloadQueueStatus final: public jni::JavaClass<JDownloadQueueStatus> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadQueueStatus;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadQueueStatus;";
25
25
 
26
26
  public:
27
27
  /**
@@ -19,7 +19,7 @@ namespace margelo::nitro::nitroplayer {
19
19
  */
20
20
  struct JDownloadState final: public jni::JavaClass<JDownloadState> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadState;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadState;";
23
23
 
24
24
  public:
25
25
  /**
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitroplayer {
21
21
  */
22
22
  struct JDownloadStorageInfo final: public jni::JavaClass<JDownloadStorageInfo> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadStorageInfo;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadStorageInfo;";
25
25
 
26
26
  public:
27
27
  /**
@@ -36,7 +36,7 @@ namespace margelo::nitro::nitroplayer {
36
36
  */
37
37
  struct JDownloadTask final: public jni::JavaClass<JDownloadTask> {
38
38
  public:
39
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadTask;";
39
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadTask;";
40
40
 
41
41
  public:
42
42
  /**
@@ -37,7 +37,7 @@ namespace margelo::nitro::nitroplayer {
37
37
  */
38
38
  struct JDownloadedPlaylist final: public jni::JavaClass<JDownloadedPlaylist> {
39
39
  public:
40
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadedPlaylist;";
40
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadedPlaylist;";
41
41
 
42
42
  public:
43
43
  /**
@@ -32,7 +32,7 @@ namespace margelo::nitro::nitroplayer {
32
32
  */
33
33
  struct JDownloadedTrack final: public jni::JavaClass<JDownloadedTrack> {
34
34
  public:
35
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadedTrack;";
35
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/DownloadedTrack;";
36
36
 
37
37
  public:
38
38
  /**
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitroplayer {
21
21
  */
22
22
  struct JEqualizerBand final: public jni::JavaClass<JEqualizerBand> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerBand;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerBand;";
25
25
 
26
26
  public:
27
27
  /**
@@ -24,7 +24,7 @@ namespace margelo::nitro::nitroplayer {
24
24
  */
25
25
  struct JEqualizerPreset final: public jni::JavaClass<JEqualizerPreset> {
26
26
  public:
27
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerPreset;";
27
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerPreset;";
28
28
 
29
29
  public:
30
30
  /**
@@ -29,7 +29,7 @@ namespace margelo::nitro::nitroplayer {
29
29
  */
30
30
  struct JEqualizerState final: public jni::JavaClass<JEqualizerState> {
31
31
  public:
32
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerState;";
32
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/EqualizerState;";
33
33
 
34
34
  public:
35
35
  /**
@@ -28,7 +28,7 @@ namespace margelo::nitro::nitroplayer {
28
28
  */
29
29
  struct JFunc_void_DownloadProgress: public jni::JavaClass<JFunc_void_DownloadProgress> {
30
30
  public:
31
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadProgress;";
31
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadProgress;";
32
32
 
33
33
  public:
34
34
  /**
@@ -64,7 +64,7 @@ namespace margelo::nitro::nitroplayer {
64
64
  }
65
65
 
66
66
  public:
67
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadProgress_cxx;";
67
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadProgress_cxx;";
68
68
  static void registerNatives() {
69
69
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_DownloadProgress_cxx::invoke_cxx)});
70
70
  }
@@ -37,7 +37,7 @@ namespace margelo::nitro::nitroplayer {
37
37
  */
38
38
  struct JFunc_void_DownloadedTrack: public jni::JavaClass<JFunc_void_DownloadedTrack> {
39
39
  public:
40
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadedTrack;";
40
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadedTrack;";
41
41
 
42
42
  public:
43
43
  /**
@@ -73,7 +73,7 @@ namespace margelo::nitro::nitroplayer {
73
73
  }
74
74
 
75
75
  public:
76
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadedTrack_cxx;";
76
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_DownloadedTrack_cxx;";
77
77
  static void registerNatives() {
78
78
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_DownloadedTrack_cxx::invoke_cxx)});
79
79
  }
@@ -35,7 +35,7 @@ namespace margelo::nitro::nitroplayer {
35
35
  */
36
36
  struct JFunc_void_TrackItem_std__optional_Reason_: public jni::JavaClass<JFunc_void_TrackItem_std__optional_Reason_> {
37
37
  public:
38
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackItem_std__optional_Reason_;";
38
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackItem_std__optional_Reason_;";
39
39
 
40
40
  public:
41
41
  /**
@@ -71,7 +71,7 @@ namespace margelo::nitro::nitroplayer {
71
71
  }
72
72
 
73
73
  public:
74
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackItem_std__optional_Reason__cxx;";
74
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackItem_std__optional_Reason__cxx;";
75
75
  static void registerNatives() {
76
76
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_TrackItem_std__optional_Reason__cxx::invoke_cxx)});
77
77
  }
@@ -28,7 +28,7 @@ namespace margelo::nitro::nitroplayer {
28
28
  */
29
29
  struct JFunc_void_TrackPlayerState_std__optional_Reason_: public jni::JavaClass<JFunc_void_TrackPlayerState_std__optional_Reason_> {
30
30
  public:
31
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackPlayerState_std__optional_Reason_;";
31
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackPlayerState_std__optional_Reason_;";
32
32
 
33
33
  public:
34
34
  /**
@@ -64,7 +64,7 @@ namespace margelo::nitro::nitroplayer {
64
64
  }
65
65
 
66
66
  public:
67
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackPlayerState_std__optional_Reason__cxx;";
67
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_TrackPlayerState_std__optional_Reason__cxx;";
68
68
  static void registerNatives() {
69
69
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_TrackPlayerState_std__optional_Reason__cxx::invoke_cxx)});
70
70
  }
@@ -23,7 +23,7 @@ namespace margelo::nitro::nitroplayer {
23
23
  */
24
24
  struct JFunc_void_bool: public jni::JavaClass<JFunc_void_bool> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_bool;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_bool;";
27
27
 
28
28
  public:
29
29
  /**
@@ -59,7 +59,7 @@ namespace margelo::nitro::nitroplayer {
59
59
  }
60
60
 
61
61
  public:
62
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_bool_cxx;";
62
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_bool_cxx;";
63
63
  static void registerNatives() {
64
64
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_bool_cxx::invoke_cxx)});
65
65
  }
@@ -23,7 +23,7 @@ namespace margelo::nitro::nitroplayer {
23
23
  */
24
24
  struct JFunc_void_double_double: public jni::JavaClass<JFunc_void_double_double> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double;";
27
27
 
28
28
  public:
29
29
  /**
@@ -59,7 +59,7 @@ namespace margelo::nitro::nitroplayer {
59
59
  }
60
60
 
61
61
  public:
62
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_cxx;";
62
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_cxx;";
63
63
  static void registerNatives() {
64
64
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_double_cxx::invoke_cxx)});
65
65
  }
@@ -24,7 +24,7 @@ namespace margelo::nitro::nitroplayer {
24
24
  */
25
25
  struct JFunc_void_double_double_std__optional_bool_: public jni::JavaClass<JFunc_void_double_double_std__optional_bool_> {
26
26
  public:
27
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_std__optional_bool_;";
27
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_std__optional_bool_;";
28
28
 
29
29
  public:
30
30
  /**
@@ -60,7 +60,7 @@ namespace margelo::nitro::nitroplayer {
60
60
  }
61
61
 
62
62
  public:
63
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_std__optional_bool__cxx;";
63
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_double_double_std__optional_bool__cxx;";
64
64
  static void registerNatives() {
65
65
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_double_std__optional_bool__cxx::invoke_cxx)});
66
66
  }
@@ -29,7 +29,7 @@ namespace margelo::nitro::nitroplayer {
29
29
  */
30
30
  struct JFunc_void_std__optional_std__variant_nitro__NullType__std__string__: public jni::JavaClass<JFunc_void_std__optional_std__variant_nitro__NullType__std__string__> {
31
31
  public:
32
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__;";
32
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__;";
33
33
 
34
34
  public:
35
35
  /**
@@ -65,7 +65,7 @@ namespace margelo::nitro::nitroplayer {
65
65
  }
66
66
 
67
67
  public:
68
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string___cxx;";
68
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string___cxx;";
69
69
  static void registerNatives() {
70
70
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__optional_std__variant_nitro__NullType__std__string___cxx::invoke_cxx)});
71
71
  }
@@ -38,7 +38,7 @@ namespace margelo::nitro::nitroplayer {
38
38
  */
39
39
  struct JFunc_void_std__string_Playlist_std__optional_QueueOperation_: public jni::JavaClass<JFunc_void_std__string_Playlist_std__optional_QueueOperation_> {
40
40
  public:
41
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_Playlist_std__optional_QueueOperation_;";
41
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_Playlist_std__optional_QueueOperation_;";
42
42
 
43
43
  public:
44
44
  /**
@@ -74,7 +74,7 @@ namespace margelo::nitro::nitroplayer {
74
74
  }
75
75
 
76
76
  public:
77
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_Playlist_std__optional_QueueOperation__cxx;";
77
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_Playlist_std__optional_QueueOperation__cxx;";
78
78
  static void registerNatives() {
79
79
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_Playlist_std__optional_QueueOperation__cxx::invoke_cxx)});
80
80
  }
@@ -31,7 +31,7 @@ namespace margelo::nitro::nitroplayer {
31
31
  */
32
32
  struct JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_: public jni::JavaClass<JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_> {
33
33
  public:
34
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_;";
34
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_;";
35
35
 
36
36
  public:
37
37
  /**
@@ -67,7 +67,7 @@ namespace margelo::nitro::nitroplayer {
67
67
  }
68
68
 
69
69
  public:
70
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx;";
70
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx;";
71
71
  static void registerNatives() {
72
72
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx::invoke_cxx)});
73
73
  }