react-native-nitro-player 0.3.0-alpha.9 → 0.4.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +444 -4
  2. package/android/build.gradle +4 -1
  3. package/android/src/main/AndroidManifest.xml +16 -1
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +2 -0
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +8 -0
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +225 -0
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +105 -0
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +6 -6
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +37 -12
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +944 -213
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +475 -0
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadFileManager.kt +159 -0
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +489 -0
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +209 -0
  15. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +486 -0
  16. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaBrowserService.kt +3 -1
  17. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +14 -6
  18. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +27 -0
  19. package/ios/HybridDownloadManager.swift +226 -0
  20. package/ios/HybridEqualizer.swift +111 -0
  21. package/ios/HybridTrackPlayer.swift +36 -8
  22. package/ios/core/TrackPlayerCore.swift +996 -288
  23. package/ios/download/DownloadDatabase.swift +493 -0
  24. package/ios/download/DownloadFileManager.swift +241 -0
  25. package/ios/download/DownloadManagerCore.swift +923 -0
  26. package/ios/equalizer/EqualizerCore.swift +685 -0
  27. package/ios/media/MediaSessionManager.swift +40 -28
  28. package/ios/playlist/PlaylistManager.swift +40 -9
  29. package/ios/queue/HybridPlayerQueue.swift +33 -13
  30. package/lib/hooks/callbackManager.d.ts +18 -0
  31. package/lib/hooks/callbackManager.js +66 -0
  32. package/lib/hooks/downloadCallbackManager.d.ts +36 -0
  33. package/lib/hooks/downloadCallbackManager.js +108 -0
  34. package/lib/hooks/equalizerCallbackManager.d.ts +37 -0
  35. package/lib/hooks/equalizerCallbackManager.js +109 -0
  36. package/lib/hooks/index.d.ts +16 -0
  37. package/lib/hooks/index.js +10 -0
  38. package/lib/hooks/useActualQueue.d.ts +48 -0
  39. package/lib/hooks/useActualQueue.js +98 -0
  40. package/lib/hooks/useDownloadActions.d.ts +26 -0
  41. package/lib/hooks/useDownloadActions.js +117 -0
  42. package/lib/hooks/useDownloadProgress.d.ts +25 -0
  43. package/lib/hooks/useDownloadProgress.js +79 -0
  44. package/lib/hooks/useDownloadStorage.d.ts +19 -0
  45. package/lib/hooks/useDownloadStorage.js +60 -0
  46. package/lib/hooks/useDownloadedTracks.d.ts +25 -0
  47. package/lib/hooks/useDownloadedTracks.js +69 -0
  48. package/lib/hooks/useEqualizer.d.ts +25 -0
  49. package/lib/hooks/useEqualizer.js +124 -0
  50. package/lib/hooks/useEqualizerPresets.d.ts +22 -0
  51. package/lib/hooks/useEqualizerPresets.js +96 -0
  52. package/lib/hooks/useNowPlaying.js +32 -19
  53. package/lib/hooks/useOnChangeTrack.js +15 -12
  54. package/lib/hooks/useOnPlaybackProgressChange.js +2 -2
  55. package/lib/hooks/useOnPlaybackStateChange.js +16 -13
  56. package/lib/hooks/usePlaylist.d.ts +48 -0
  57. package/lib/hooks/usePlaylist.js +136 -0
  58. package/lib/index.d.ts +6 -0
  59. package/lib/index.js +6 -0
  60. package/lib/specs/DownloadManager.nitro.d.ts +152 -0
  61. package/lib/specs/DownloadManager.nitro.js +1 -0
  62. package/lib/specs/Equalizer.nitro.d.ts +43 -0
  63. package/lib/specs/Equalizer.nitro.js +1 -0
  64. package/lib/specs/TrackPlayer.nitro.d.ts +6 -2
  65. package/lib/types/DownloadTypes.d.ts +110 -0
  66. package/lib/types/DownloadTypes.js +1 -0
  67. package/lib/types/EqualizerTypes.d.ts +52 -0
  68. package/lib/types/EqualizerTypes.js +1 -0
  69. package/lib/types/PlayerQueue.d.ts +4 -0
  70. package/nitro.json +8 -0
  71. package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +10 -1
  72. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +32 -2
  73. package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +65 -0
  74. package/nitrogen/generated/android/c++/JDownloadConfig.hpp +92 -0
  75. package/nitrogen/generated/android/c++/JDownloadError.hpp +71 -0
  76. package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +74 -0
  77. package/nitrogen/generated/android/c++/JDownloadProgress.hpp +79 -0
  78. package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +81 -0
  79. package/nitrogen/generated/android/c++/JDownloadState.hpp +71 -0
  80. package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +73 -0
  81. package/nitrogen/generated/android/c++/JDownloadTask.hpp +108 -0
  82. package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +111 -0
  83. package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +92 -0
  84. package/nitrogen/generated/android/c++/JEqualizerBand.hpp +69 -0
  85. package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +78 -0
  86. package/nitrogen/generated/android/c++/JEqualizerState.hpp +91 -0
  87. package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +80 -0
  88. package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +89 -0
  89. package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -0
  90. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +81 -0
  91. package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -0
  92. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +83 -0
  93. package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +97 -0
  94. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -0
  95. package/nitrogen/generated/android/c++/JGainRange.hpp +61 -0
  96. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +470 -0
  97. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +99 -0
  98. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +204 -0
  99. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +82 -0
  100. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +2 -0
  101. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +117 -15
  102. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +6 -2
  103. package/nitrogen/generated/android/c++/JPlaybackSource.hpp +62 -0
  104. package/nitrogen/generated/android/c++/JPlayerState.hpp +11 -3
  105. package/nitrogen/generated/android/c++/JPlaylist.hpp +2 -0
  106. package/nitrogen/generated/android/c++/JPresetType.hpp +59 -0
  107. package/nitrogen/generated/android/c++/JStorageLocation.hpp +59 -0
  108. package/nitrogen/generated/android/c++/JTrackItem.hpp +9 -3
  109. package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +3 -3
  110. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
  111. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
  112. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp +26 -0
  113. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +74 -0
  114. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp +26 -0
  115. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +84 -0
  116. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.cpp +26 -0
  117. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +85 -0
  118. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.cpp +26 -0
  119. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +80 -0
  120. package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +2 -0
  121. package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +2 -0
  122. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CurrentPlayingType.kt +23 -0
  123. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadConfig.kt +59 -0
  124. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadError.kt +47 -0
  125. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadErrorReason.kt +26 -0
  126. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadProgress.kt +53 -0
  127. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadQueueStatus.kt +56 -0
  128. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadState.kt +25 -0
  129. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadStorageInfo.kt +50 -0
  130. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadTask.kt +65 -0
  131. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedPlaylist.kt +53 -0
  132. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedTrack.kt +56 -0
  133. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerBand.kt +47 -0
  134. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerPreset.kt +44 -0
  135. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerState.kt +44 -0
  136. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadProgress.kt +80 -0
  137. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadedTrack.kt +80 -0
  138. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
  139. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.kt +80 -0
  140. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_EqualizerBand_.kt +80 -0
  141. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/GainRange.kt +41 -0
  142. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +210 -0
  143. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +141 -0
  144. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +19 -2
  145. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlaybackSource.kt +22 -0
  146. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerState.kt +6 -3
  147. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PresetType.kt +21 -0
  148. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/StorageLocation.kt +21 -0
  149. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackItem.kt +7 -3
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackPlayerState.kt +2 -2
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +59 -0
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +59 -0
  153. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +59 -0
  154. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +59 -0
  155. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +59 -0
  156. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +138 -8
  157. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +1046 -121
  158. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +66 -0
  159. package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +16 -0
  160. package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +30 -0
  161. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.cpp +11 -0
  162. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +386 -0
  163. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.cpp +11 -0
  164. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +223 -0
  165. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +1 -0
  166. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +46 -6
  167. package/nitrogen/generated/ios/swift/CurrentPlayingType.swift +48 -0
  168. package/nitrogen/generated/ios/swift/DownloadConfig.swift +270 -0
  169. package/nitrogen/generated/ios/swift/DownloadError.swift +69 -0
  170. package/nitrogen/generated/ios/swift/DownloadErrorReason.swift +60 -0
  171. package/nitrogen/generated/ios/swift/DownloadProgress.swift +91 -0
  172. package/nitrogen/generated/ios/swift/DownloadQueueStatus.swift +102 -0
  173. package/nitrogen/generated/ios/swift/DownloadState.swift +56 -0
  174. package/nitrogen/generated/ios/swift/DownloadStorageInfo.swift +80 -0
  175. package/nitrogen/generated/ios/swift/DownloadTask.swift +315 -0
  176. package/nitrogen/generated/ios/swift/DownloadedPlaylist.swift +103 -0
  177. package/nitrogen/generated/ios/swift/DownloadedTrack.swift +147 -0
  178. package/nitrogen/generated/ios/swift/EqualizerBand.swift +69 -0
  179. package/nitrogen/generated/ios/swift/EqualizerPreset.swift +70 -0
  180. package/nitrogen/generated/ios/swift/EqualizerState.swift +115 -0
  181. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  182. package/nitrogen/generated/ios/swift/Func_void_DownloadProgress.swift +47 -0
  183. package/nitrogen/generated/ios/swift/Func_void_DownloadStorageInfo.swift +47 -0
  184. package/nitrogen/generated/ios/swift/Func_void_DownloadedTrack.swift +47 -0
  185. package/nitrogen/generated/ios/swift/Func_void_PlayerState.swift +47 -0
  186. package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
  187. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  188. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__std__string__.swift +66 -0
  189. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  190. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.swift +47 -0
  191. package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +47 -0
  192. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem_.swift +47 -0
  193. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +47 -0
  194. package/nitrogen/generated/ios/swift/GainRange.swift +47 -0
  195. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +90 -0
  196. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +705 -0
  197. package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +73 -0
  198. package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +396 -0
  199. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +6 -2
  200. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +105 -8
  201. package/nitrogen/generated/ios/swift/PlaybackSource.swift +44 -0
  202. package/nitrogen/generated/ios/swift/PlayerState.swift +13 -2
  203. package/nitrogen/generated/ios/swift/PresetType.swift +40 -0
  204. package/nitrogen/generated/ios/swift/StorageLocation.swift +40 -0
  205. package/nitrogen/generated/ios/swift/TrackItem.swift +31 -1
  206. package/nitrogen/generated/ios/swift/TrackPlayerState.swift +4 -4
  207. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +18 -0
  208. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadError.swift +18 -0
  209. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadTask.swift +18 -0
  210. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedPlaylist.swift +18 -0
  211. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedTrack.swift +18 -0
  212. package/nitrogen/generated/shared/c++/CurrentPlayingType.hpp +84 -0
  213. package/nitrogen/generated/shared/c++/DownloadConfig.hpp +108 -0
  214. package/nitrogen/generated/shared/c++/DownloadError.hpp +89 -0
  215. package/nitrogen/generated/shared/c++/DownloadErrorReason.hpp +96 -0
  216. package/nitrogen/generated/shared/c++/DownloadProgress.hpp +97 -0
  217. package/nitrogen/generated/shared/c++/DownloadQueueStatus.hpp +99 -0
  218. package/nitrogen/generated/shared/c++/DownloadState.hpp +92 -0
  219. package/nitrogen/generated/shared/c++/DownloadStorageInfo.hpp +91 -0
  220. package/nitrogen/generated/shared/c++/DownloadTask.hpp +122 -0
  221. package/nitrogen/generated/shared/c++/DownloadedPlaylist.hpp +101 -0
  222. package/nitrogen/generated/shared/c++/DownloadedTrack.hpp +107 -0
  223. package/nitrogen/generated/shared/c++/EqualizerBand.hpp +87 -0
  224. package/nitrogen/generated/shared/c++/EqualizerPreset.hpp +86 -0
  225. package/nitrogen/generated/shared/c++/EqualizerState.hpp +89 -0
  226. package/nitrogen/generated/shared/c++/GainRange.hpp +79 -0
  227. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp +55 -0
  228. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +134 -0
  229. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp +38 -0
  230. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +95 -0
  231. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +4 -0
  232. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +11 -5
  233. package/nitrogen/generated/shared/c++/PlaybackSource.hpp +80 -0
  234. package/nitrogen/generated/shared/c++/PlayerState.hpp +9 -2
  235. package/nitrogen/generated/shared/c++/PresetType.hpp +76 -0
  236. package/nitrogen/generated/shared/c++/StorageLocation.hpp +76 -0
  237. package/nitrogen/generated/shared/c++/TrackItem.hpp +7 -2
  238. package/nitrogen/generated/shared/c++/TrackPlayerState.hpp +5 -5
  239. package/package.json +1 -1
  240. package/src/hooks/callbackManager.ts +87 -0
  241. package/src/hooks/downloadCallbackManager.ts +149 -0
  242. package/src/hooks/equalizerCallbackManager.ts +138 -0
  243. package/src/hooks/index.ts +23 -0
  244. package/src/hooks/useActualQueue.ts +116 -0
  245. package/src/hooks/useDownloadActions.ts +179 -0
  246. package/src/hooks/useDownloadProgress.ts +126 -0
  247. package/src/hooks/useDownloadStorage.ts +84 -0
  248. package/src/hooks/useDownloadedTracks.ts +138 -0
  249. package/src/hooks/useEqualizer.ts +173 -0
  250. package/src/hooks/useEqualizerPresets.ts +140 -0
  251. package/src/hooks/useNowPlaying.ts +33 -20
  252. package/src/hooks/useOnChangeTrack.ts +15 -11
  253. package/src/hooks/useOnPlaybackProgressChange.ts +2 -2
  254. package/src/hooks/useOnPlaybackStateChange.ts +19 -15
  255. package/src/hooks/usePlaylist.ts +161 -0
  256. package/src/index.ts +12 -0
  257. package/src/specs/DownloadManager.nitro.ts +203 -0
  258. package/src/specs/Equalizer.nitro.ts +69 -0
  259. package/src/specs/TrackPlayer.nitro.ts +6 -2
  260. package/src/types/DownloadTypes.ts +135 -0
  261. package/src/types/EqualizerTypes.ts +72 -0
  262. package/src/types/PlayerQueue.ts +9 -0
@@ -0,0 +1,152 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+ import type { TrackItem } from '../types/PlayerQueue';
3
+ import type { DownloadConfig, DownloadTask, DownloadProgress, DownloadedTrack, DownloadedPlaylist, DownloadState, DownloadStorageInfo, DownloadQueueStatus, DownloadError, PlaybackSource } from '../types/DownloadTypes';
4
+ export interface DownloadManager extends HybridObject<{
5
+ android: 'kotlin';
6
+ ios: 'swift';
7
+ }> {
8
+ /**
9
+ * Configure the download manager
10
+ */
11
+ configure(config: DownloadConfig): void;
12
+ /**
13
+ * Get current configuration
14
+ */
15
+ getConfig(): DownloadConfig;
16
+ /**
17
+ * Download a single track
18
+ * @returns downloadId for tracking
19
+ */
20
+ downloadTrack(track: TrackItem, playlistId?: string): Promise<string>;
21
+ /**
22
+ * Download an entire playlist
23
+ * @returns downloadId array for each track
24
+ */
25
+ downloadPlaylist(playlistId: string, tracks: TrackItem[]): Promise<string[]>;
26
+ /**
27
+ * Pause a download
28
+ */
29
+ pauseDownload(downloadId: string): Promise<void>;
30
+ /**
31
+ * Resume a paused download
32
+ */
33
+ resumeDownload(downloadId: string): Promise<void>;
34
+ /**
35
+ * Cancel a download
36
+ */
37
+ cancelDownload(downloadId: string): Promise<void>;
38
+ /**
39
+ * Retry a failed download
40
+ */
41
+ retryDownload(downloadId: string): Promise<void>;
42
+ /**
43
+ * Pause all downloads
44
+ */
45
+ pauseAllDownloads(): Promise<void>;
46
+ /**
47
+ * Resume all paused downloads
48
+ */
49
+ resumeAllDownloads(): Promise<void>;
50
+ /**
51
+ * Cancel all downloads
52
+ */
53
+ cancelAllDownloads(): Promise<void>;
54
+ /**
55
+ * Get download task by ID
56
+ */
57
+ getDownloadTask(downloadId: string): DownloadTask | null;
58
+ /**
59
+ * Get all active download tasks
60
+ */
61
+ getActiveDownloads(): DownloadTask[];
62
+ /**
63
+ * Get download queue status
64
+ */
65
+ getQueueStatus(): DownloadQueueStatus;
66
+ /**
67
+ * Check if a track is currently downloading
68
+ */
69
+ isDownloading(trackId: string): boolean;
70
+ /**
71
+ * Get download state for a track
72
+ */
73
+ getDownloadState(trackId: string): DownloadState | null;
74
+ /**
75
+ * Check if a track is downloaded
76
+ */
77
+ isTrackDownloaded(trackId: string): boolean;
78
+ /**
79
+ * Check if a playlist is fully downloaded
80
+ */
81
+ isPlaylistDownloaded(playlistId: string): boolean;
82
+ /**
83
+ * Check if a playlist is partially downloaded
84
+ */
85
+ isPlaylistPartiallyDownloaded(playlistId: string): boolean;
86
+ /**
87
+ * Get downloaded track by track ID
88
+ */
89
+ getDownloadedTrack(trackId: string): DownloadedTrack | null;
90
+ /**
91
+ * Get all downloaded tracks
92
+ */
93
+ getAllDownloadedTracks(): DownloadedTrack[];
94
+ /**
95
+ * Get downloaded playlist by playlist ID
96
+ */
97
+ getDownloadedPlaylist(playlistId: string): DownloadedPlaylist | null;
98
+ /**
99
+ * Get all downloaded playlists
100
+ */
101
+ getAllDownloadedPlaylists(): DownloadedPlaylist[];
102
+ /**
103
+ * Get local file path for a downloaded track
104
+ */
105
+ getLocalPath(trackId: string): string | null;
106
+ /**
107
+ * Delete a downloaded track
108
+ */
109
+ deleteDownloadedTrack(trackId: string): Promise<void>;
110
+ /**
111
+ * Delete a downloaded playlist (all its tracks)
112
+ */
113
+ deleteDownloadedPlaylist(playlistId: string): Promise<void>;
114
+ /**
115
+ * Delete all downloaded content
116
+ */
117
+ deleteAllDownloads(): Promise<void>;
118
+ /**
119
+ * Get storage information
120
+ */
121
+ getStorageInfo(): Promise<DownloadStorageInfo>;
122
+ /**
123
+ * Sync downloads - validates all downloads and removes orphaned records
124
+ * Call this to clean up after manual file deletion
125
+ * @returns number of orphaned records that were cleaned up
126
+ */
127
+ syncDownloads(): number;
128
+ /**
129
+ * Set playback source preference
130
+ */
131
+ setPlaybackSourcePreference(preference: PlaybackSource): void;
132
+ /**
133
+ * Get current playback source preference
134
+ */
135
+ getPlaybackSourcePreference(): PlaybackSource;
136
+ /**
137
+ * Get the effective URL for a track (local or network based on preference)
138
+ */
139
+ getEffectiveUrl(track: TrackItem): string;
140
+ /**
141
+ * Called when download progress updates
142
+ */
143
+ onDownloadProgress(callback: (progress: DownloadProgress) => void): void;
144
+ /**
145
+ * Called when download state changes
146
+ */
147
+ onDownloadStateChange(callback: (downloadId: string, trackId: string, state: DownloadState, error?: DownloadError) => void): void;
148
+ /**
149
+ * Called when a download completes
150
+ */
151
+ onDownloadComplete(callback: (downloadedTrack: DownloadedTrack) => void): void;
152
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+ import type { EqualizerBand, EqualizerPreset, EqualizerState, GainRange } from '../types/EqualizerTypes';
3
+ export interface Equalizer extends HybridObject<{
4
+ android: 'kotlin';
5
+ ios: 'swift';
6
+ }> {
7
+ /** Enable or disable the equalizer */
8
+ setEnabled(enabled: boolean): boolean;
9
+ /** Check if equalizer is currently enabled */
10
+ isEnabled(): boolean;
11
+ /** Get all equalizer bands with current gain values */
12
+ getBands(): EqualizerBand[];
13
+ /** Set gain for a specific band index (-12 to +12 dB) */
14
+ setBandGain(bandIndex: number, gainDb: number): boolean;
15
+ /** Set gains for all bands at once (array of 5 values) */
16
+ setAllBandGains(gains: number[]): boolean;
17
+ /** Get the valid gain range for bands */
18
+ getBandRange(): GainRange;
19
+ /** Get all available presets (built-in + custom) */
20
+ getPresets(): EqualizerPreset[];
21
+ /** Get built-in presets only */
22
+ getBuiltInPresets(): EqualizerPreset[];
23
+ /** Get custom user presets only */
24
+ getCustomPresets(): EqualizerPreset[];
25
+ /** Apply a preset by name */
26
+ applyPreset(presetName: string): boolean;
27
+ /** Get currently applied preset name (null if custom values) */
28
+ getCurrentPresetName(): string | null;
29
+ /** Save current settings as a custom preset */
30
+ saveCustomPreset(name: string): boolean;
31
+ /** Delete a custom preset by name */
32
+ deleteCustomPreset(name: string): boolean;
33
+ /** Get complete equalizer state */
34
+ getState(): EqualizerState;
35
+ /** Reset to flat response (all bands at 0 dB) */
36
+ reset(): void;
37
+ /** Called when equalizer enabled state changes */
38
+ onEnabledChange(callback: (enabled: boolean) => void): void;
39
+ /** Called when any band gain changes */
40
+ onBandChange(callback: (bands: EqualizerBand[]) => void): void;
41
+ /** Called when preset changes */
42
+ onPresetChange(callback: (presetName: string | null) => void): void;
43
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -25,11 +25,15 @@ export interface TrackPlayer extends HybridObject<{
25
25
  }> {
26
26
  play(): void;
27
27
  pause(): void;
28
- playSong(songId: string, fromPlaylist?: string): void;
28
+ playSong(songId: string, fromPlaylist?: string): Promise<void>;
29
29
  skipToNext(): void;
30
+ skipToIndex(index: number): Promise<boolean>;
30
31
  skipToPrevious(): void;
31
32
  seek(position: number): void;
32
- getState(): PlayerState;
33
+ addToUpNext(trackId: string): Promise<void>;
34
+ playNext(trackId: string): Promise<void>;
35
+ getActualQueue(): Promise<TrackItem[]>;
36
+ getState(): Promise<PlayerState>;
33
37
  setRepeatMode(mode: RepeatMode): boolean;
34
38
  configure(config: PlayerConfig): void;
35
39
  onChangeTrack(callback: (track: TrackItem, reason?: Reason) => void): void;
@@ -0,0 +1,110 @@
1
+ import type { TrackItem, Playlist } from './PlayerQueue';
2
+ /**
3
+ * Storage location options for downloads
4
+ */
5
+ export type StorageLocation = 'private' | 'public';
6
+ /**
7
+ * Current state of a download task
8
+ */
9
+ export type DownloadState = 'pending' | 'downloading' | 'paused' | 'completed' | 'failed' | 'cancelled';
10
+ /**
11
+ * Reason for download failure
12
+ */
13
+ export type DownloadErrorReason = 'network_error' | 'storage_full' | 'file_not_found' | 'permission_denied' | 'invalid_url' | 'timeout' | 'unknown';
14
+ /**
15
+ * Source preference for playback
16
+ */
17
+ export type PlaybackSource = 'auto' | 'download' | 'network';
18
+ /**
19
+ * Progress information for a download
20
+ */
21
+ export interface DownloadProgress {
22
+ trackId: string;
23
+ downloadId: string;
24
+ bytesDownloaded: number;
25
+ totalBytes: number;
26
+ progress: number;
27
+ state: DownloadState;
28
+ }
29
+ /**
30
+ * Download error information
31
+ */
32
+ export interface DownloadError {
33
+ code: string;
34
+ message: string;
35
+ reason: DownloadErrorReason;
36
+ isRetryable: boolean;
37
+ }
38
+ /**
39
+ * A downloaded track with local file information
40
+ */
41
+ export interface DownloadedTrack {
42
+ trackId: string;
43
+ originalTrack: TrackItem;
44
+ localPath: string;
45
+ localArtworkPath?: string | null;
46
+ downloadedAt: number;
47
+ fileSize: number;
48
+ storageLocation: StorageLocation;
49
+ }
50
+ /**
51
+ * A playlist with download information
52
+ */
53
+ export interface DownloadedPlaylist {
54
+ playlistId: string;
55
+ originalPlaylist: Playlist;
56
+ downloadedTracks: DownloadedTrack[];
57
+ totalSize: number;
58
+ downloadedAt: number;
59
+ isComplete: boolean;
60
+ }
61
+ /**
62
+ * Download task information
63
+ */
64
+ export interface DownloadTask {
65
+ downloadId: string;
66
+ trackId: string;
67
+ playlistId?: string | null;
68
+ state: DownloadState;
69
+ progress: DownloadProgress;
70
+ createdAt: number;
71
+ startedAt?: number | null;
72
+ completedAt?: number | null;
73
+ error?: DownloadError | null;
74
+ retryCount: number;
75
+ }
76
+ /**
77
+ * Configuration for the DownloadManager
78
+ */
79
+ export interface DownloadConfig {
80
+ storageLocation?: StorageLocation;
81
+ maxConcurrentDownloads?: number;
82
+ autoRetry?: boolean;
83
+ maxRetryAttempts?: number;
84
+ backgroundDownloadsEnabled?: boolean;
85
+ downloadArtwork?: boolean;
86
+ customDownloadPath?: string | null;
87
+ wifiOnlyDownloads?: boolean;
88
+ }
89
+ /**
90
+ * Summary of download storage usage
91
+ */
92
+ export interface DownloadStorageInfo {
93
+ totalDownloadedSize: number;
94
+ trackCount: number;
95
+ playlistCount: number;
96
+ availableSpace: number;
97
+ totalSpace: number;
98
+ }
99
+ /**
100
+ * Download queue status
101
+ */
102
+ export interface DownloadQueueStatus {
103
+ pendingCount: number;
104
+ activeCount: number;
105
+ completedCount: number;
106
+ failedCount: number;
107
+ totalBytesToDownload: number;
108
+ totalBytesDownloaded: number;
109
+ overallProgress: number;
110
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Represents a single equalizer frequency band
3
+ */
4
+ export interface EqualizerBand {
5
+ /** Band index (0-4) */
6
+ index: number;
7
+ /** Center frequency in Hz */
8
+ centerFrequency: number;
9
+ /** Current gain in dB (-12 to +12) */
10
+ gainDb: number;
11
+ /** Human-readable frequency label (e.g., "60 Hz", "3.6 kHz") */
12
+ frequencyLabel: string;
13
+ }
14
+ /**
15
+ * Preset type identifier
16
+ */
17
+ export type PresetType = 'built-in' | 'custom';
18
+ /**
19
+ * Represents an equalizer preset (built-in or custom)
20
+ */
21
+ export interface EqualizerPreset {
22
+ /** Unique preset name */
23
+ name: string;
24
+ /** Array of 5 gain values in dB for each band */
25
+ gains: number[];
26
+ /** Whether this is a built-in or custom preset */
27
+ type: PresetType;
28
+ }
29
+ /**
30
+ * Complete equalizer state
31
+ */
32
+ export interface EqualizerState {
33
+ /** Whether equalizer is enabled */
34
+ enabled: boolean;
35
+ /** Current band settings */
36
+ bands: EqualizerBand[];
37
+ /** Currently applied preset name (null if custom values) */
38
+ currentPreset: string | null;
39
+ }
40
+ /**
41
+ * Gain range for equalizer bands
42
+ */
43
+ export interface GainRange {
44
+ /** Minimum gain in dB */
45
+ min: number;
46
+ /** Maximum gain in dB */
47
+ max: number;
48
+ }
49
+ /**
50
+ * Built-in preset names
51
+ */
52
+ export type BuiltInPresetName = 'Flat' | 'Bass Boost' | 'Bass Reducer' | 'Treble Boost' | 'Treble Reducer' | 'Vocal Boost' | 'Rock' | 'Pop' | 'Jazz' | 'Classical' | 'Hip Hop' | 'Electronic' | 'Acoustic' | 'R&B' | 'Loudness';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,5 @@
1
+ import type { AnyMap } from 'react-native-nitro-modules';
2
+ export type CurrentPlayingType = 'playlist' | 'up-next' | 'play-next' | 'not-playing';
1
3
  export interface TrackItem {
2
4
  id: string;
3
5
  title: string;
@@ -6,6 +8,7 @@ export interface TrackItem {
6
8
  duration: number;
7
9
  url: string;
8
10
  artwork?: string | null;
11
+ extraPayload?: AnyMap;
9
12
  }
10
13
  export interface Playlist {
11
14
  id: string;
@@ -24,6 +27,7 @@ export interface PlayerState {
24
27
  currentState: TrackPlayerState;
25
28
  currentPlaylistId: string | null;
26
29
  currentIndex: number;
30
+ currentPlayingType: CurrentPlayingType;
27
31
  }
28
32
  export interface PlayerConfig {
29
33
  androidAutoEnabled?: boolean;
package/nitro.json CHANGED
@@ -25,6 +25,14 @@
25
25
  },
26
26
  "AudioRoutePicker": {
27
27
  "swift": "HybridAudioRoutePicker"
28
+ },
29
+ "DownloadManager": {
30
+ "swift": "HybridDownloadManager",
31
+ "kotlin": "HybridDownloadManager"
32
+ },
33
+ "Equalizer": {
34
+ "swift": "HybridEqualizer",
35
+ "kotlin": "HybridEqualizer"
28
36
  }
29
37
  },
30
38
  "ignorePaths": ["**/node_modules"]
@@ -36,14 +36,23 @@ target_sources(
36
36
  ../nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.cpp
37
37
  ../nitrogen/generated/shared/c++/HybridAudioDevicesSpec.cpp
38
38
  ../nitrogen/generated/shared/c++/HybridAudioRoutePickerSpec.cpp
39
+ ../nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp
40
+ ../nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp
39
41
  ../nitrogen/generated/shared/c++/HybridPlayerQueueSpec.cpp
40
42
  ../nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp
41
43
  # Android-specific Nitrogen C++ sources
42
44
  ../nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp
43
45
  ../nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp
46
+ ../nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp
47
+ ../nitrogen/generated/android/c++/JVariant_NullType_String.cpp
48
+ ../nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp
49
+ ../nitrogen/generated/android/c++/JVariant_NullType_Double.cpp
50
+ ../nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp
51
+ ../nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.cpp
52
+ ../nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.cpp
53
+ ../nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp
44
54
  ../nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp
45
55
  ../nitrogen/generated/android/c++/JVariant_NullType_Playlist.cpp
46
- ../nitrogen/generated/android/c++/JVariant_NullType_String.cpp
47
56
  ../nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp
48
57
  ../nitrogen/generated/android/c++/JVariant_NullType_TrackItem.cpp
49
58
  )
@@ -17,6 +17,14 @@
17
17
 
18
18
  #include "JHybridAndroidAutoMediaLibrarySpec.hpp"
19
19
  #include "JHybridAudioDevicesSpec.hpp"
20
+ #include "JHybridDownloadManagerSpec.hpp"
21
+ #include "JFunc_void_DownloadProgress.hpp"
22
+ #include "JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp"
23
+ #include "JFunc_void_DownloadedTrack.hpp"
24
+ #include "JHybridEqualizerSpec.hpp"
25
+ #include "JFunc_void_bool.hpp"
26
+ #include "JFunc_void_std__vector_EqualizerBand_.hpp"
27
+ #include "JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp"
20
28
  #include "JHybridPlayerQueueSpec.hpp"
21
29
  #include "JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp"
22
30
  #include "JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp"
@@ -25,7 +33,6 @@
25
33
  #include "JFunc_void_TrackPlayerState_std__optional_Reason_.hpp"
26
34
  #include "JFunc_void_double_double.hpp"
27
35
  #include "JFunc_void_double_double_std__optional_bool_.hpp"
28
- #include "JFunc_void_bool.hpp"
29
36
  #include <NitroModules/DefaultConstructableObject.hpp>
30
37
 
31
38
  namespace margelo::nitro::nitroplayer {
@@ -39,6 +46,14 @@ int initialize(JavaVM* vm) {
39
46
  // Register native JNI methods
40
47
  margelo::nitro::nitroplayer::JHybridAndroidAutoMediaLibrarySpec::registerNatives();
41
48
  margelo::nitro::nitroplayer::JHybridAudioDevicesSpec::registerNatives();
49
+ margelo::nitro::nitroplayer::JHybridDownloadManagerSpec::registerNatives();
50
+ margelo::nitro::nitroplayer::JFunc_void_DownloadProgress_cxx::registerNatives();
51
+ margelo::nitro::nitroplayer::JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError__cxx::registerNatives();
52
+ margelo::nitro::nitroplayer::JFunc_void_DownloadedTrack_cxx::registerNatives();
53
+ margelo::nitro::nitroplayer::JHybridEqualizerSpec::registerNatives();
54
+ margelo::nitro::nitroplayer::JFunc_void_bool_cxx::registerNatives();
55
+ margelo::nitro::nitroplayer::JFunc_void_std__vector_EqualizerBand__cxx::registerNatives();
56
+ margelo::nitro::nitroplayer::JFunc_void_std__optional_std__variant_nitro__NullType__std__string___cxx::registerNatives();
42
57
  margelo::nitro::nitroplayer::JHybridPlayerQueueSpec::registerNatives();
43
58
  margelo::nitro::nitroplayer::JFunc_void_std__vector_Playlist__std__optional_QueueOperation__cxx::registerNatives();
44
59
  margelo::nitro::nitroplayer::JFunc_void_std__string_Playlist_std__optional_QueueOperation__cxx::registerNatives();
@@ -47,7 +62,6 @@ int initialize(JavaVM* vm) {
47
62
  margelo::nitro::nitroplayer::JFunc_void_TrackPlayerState_std__optional_Reason__cxx::registerNatives();
48
63
  margelo::nitro::nitroplayer::JFunc_void_double_double_cxx::registerNatives();
49
64
  margelo::nitro::nitroplayer::JFunc_void_double_double_std__optional_bool__cxx::registerNatives();
50
- margelo::nitro::nitroplayer::JFunc_void_bool_cxx::registerNatives();
51
65
 
52
66
  // Register Nitro Hybrid Objects
53
67
  HybridObjectRegistry::registerHybridObjectConstructor(
@@ -82,6 +96,22 @@ int initialize(JavaVM* vm) {
82
96
  return instance->cthis()->shared();
83
97
  }
84
98
  );
99
+ HybridObjectRegistry::registerHybridObjectConstructor(
100
+ "DownloadManager",
101
+ []() -> std::shared_ptr<HybridObject> {
102
+ static DefaultConstructableObject<JHybridDownloadManagerSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridDownloadManager");
103
+ auto instance = object.create();
104
+ return instance->cthis()->shared();
105
+ }
106
+ );
107
+ HybridObjectRegistry::registerHybridObjectConstructor(
108
+ "Equalizer",
109
+ []() -> std::shared_ptr<HybridObject> {
110
+ static DefaultConstructableObject<JHybridEqualizerSpec::javaobject> object("com/margelo/nitro/nitroplayer/HybridEqualizer");
111
+ auto instance = object.create();
112
+ return instance->cthis()->shared();
113
+ }
114
+ );
85
115
  });
86
116
  }
87
117
 
@@ -0,0 +1,65 @@
1
+ ///
2
+ /// JCurrentPlayingType.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "CurrentPlayingType.hpp"
12
+
13
+ namespace margelo::nitro::nitroplayer {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "CurrentPlayingType" and the the Kotlin enum "CurrentPlayingType".
19
+ */
20
+ struct JCurrentPlayingType final: public jni::JavaClass<JCurrentPlayingType> {
21
+ public:
22
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroplayer/CurrentPlayingType;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum CurrentPlayingType.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ CurrentPlayingType toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<CurrentPlayingType>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JCurrentPlayingType> fromCpp(CurrentPlayingType value) {
43
+ static const auto clazz = javaClassStatic();
44
+ static const auto fieldPLAYLIST = clazz->getStaticField<JCurrentPlayingType>("PLAYLIST");
45
+ static const auto fieldUP_NEXT = clazz->getStaticField<JCurrentPlayingType>("UP_NEXT");
46
+ static const auto fieldPLAY_NEXT = clazz->getStaticField<JCurrentPlayingType>("PLAY_NEXT");
47
+ static const auto fieldNOT_PLAYING = clazz->getStaticField<JCurrentPlayingType>("NOT_PLAYING");
48
+
49
+ switch (value) {
50
+ case CurrentPlayingType::PLAYLIST:
51
+ return clazz->getStaticFieldValue(fieldPLAYLIST);
52
+ case CurrentPlayingType::UP_NEXT:
53
+ return clazz->getStaticFieldValue(fieldUP_NEXT);
54
+ case CurrentPlayingType::PLAY_NEXT:
55
+ return clazz->getStaticFieldValue(fieldPLAY_NEXT);
56
+ case CurrentPlayingType::NOT_PLAYING:
57
+ return clazz->getStaticFieldValue(fieldNOT_PLAYING);
58
+ default:
59
+ std::string stringValue = std::to_string(static_cast<int>(value));
60
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
61
+ }
62
+ }
63
+ };
64
+
65
+ } // namespace margelo::nitro::nitroplayer