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
@@ -3,6 +3,12 @@ import type { TrackItem, TrackPlayerState, Reason } from '../types/PlayerQueue'
3
3
 
4
4
  type PlaybackStateCallback = (state: TrackPlayerState, reason?: Reason) => void
5
5
  type TrackChangeCallback = (track: TrackItem, reason?: Reason) => void
6
+ type PlaybackProgressCallback = (
7
+ position: number,
8
+ totalDuration: number,
9
+ isManuallySeeked?: boolean
10
+ ) => void
11
+ type SeekCallback = (position: number, totalDuration: number) => void
6
12
 
7
13
  /**
8
14
  * Internal subscription manager that allows multiple hooks to subscribe
@@ -12,8 +18,12 @@ type TrackChangeCallback = (track: TrackItem, reason?: Reason) => void
12
18
  class CallbackSubscriptionManager {
13
19
  private playbackStateSubscribers = new Set<PlaybackStateCallback>()
14
20
  private trackChangeSubscribers = new Set<TrackChangeCallback>()
21
+ private playbackProgressSubscribers = new Set<PlaybackProgressCallback>()
22
+ private seekSubscribers = new Set<SeekCallback>()
15
23
  private isPlaybackStateRegistered = false
16
24
  private isTrackChangeRegistered = false
25
+ private isPlaybackProgressRegistered = false
26
+ private isSeekRegistered = false
17
27
 
18
28
  /**
19
29
  * Subscribe to playback state changes
@@ -90,6 +100,83 @@ class CallbackSubscriptionManager {
90
100
  )
91
101
  }
92
102
  }
103
+
104
+ /**
105
+ * Subscribe to playback progress changes
106
+ * @returns Unsubscribe function
107
+ */
108
+ subscribeToPlaybackProgressChange(
109
+ callback: PlaybackProgressCallback
110
+ ): () => void {
111
+ this.playbackProgressSubscribers.add(callback)
112
+ this.ensurePlaybackProgressRegistered()
113
+
114
+ return () => {
115
+ this.playbackProgressSubscribers.delete(callback)
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Subscribe to seek events
121
+ * @returns Unsubscribe function
122
+ */
123
+ subscribeToSeek(callback: SeekCallback): () => void {
124
+ this.seekSubscribers.add(callback)
125
+ this.ensureSeekRegistered()
126
+
127
+ return () => {
128
+ this.seekSubscribers.delete(callback)
129
+ }
130
+ }
131
+
132
+ private ensurePlaybackProgressRegistered(): void {
133
+ if (this.isPlaybackProgressRegistered) return
134
+
135
+ try {
136
+ TrackPlayer.onPlaybackProgressChange(
137
+ (position, totalDuration, isManuallySeeked) => {
138
+ this.playbackProgressSubscribers.forEach((subscriber) => {
139
+ try {
140
+ subscriber(position, totalDuration, isManuallySeeked)
141
+ } catch (error) {
142
+ console.error(
143
+ '[CallbackManager] Error in playback progress subscriber:',
144
+ error
145
+ )
146
+ }
147
+ })
148
+ }
149
+ )
150
+ this.isPlaybackProgressRegistered = true
151
+ } catch (error) {
152
+ console.error(
153
+ '[CallbackManager] Failed to register playback progress callback:',
154
+ error
155
+ )
156
+ }
157
+ }
158
+
159
+ private ensureSeekRegistered(): void {
160
+ if (this.isSeekRegistered) return
161
+
162
+ try {
163
+ TrackPlayer.onSeek((position, totalDuration) => {
164
+ this.seekSubscribers.forEach((subscriber) => {
165
+ try {
166
+ subscriber(position, totalDuration)
167
+ } catch (error) {
168
+ console.error('[CallbackManager] Error in seek subscriber:', error)
169
+ }
170
+ })
171
+ })
172
+ this.isSeekRegistered = true
173
+ } catch (error) {
174
+ console.error(
175
+ '[CallbackManager] Failed to register seek callback:',
176
+ error
177
+ )
178
+ }
179
+ }
93
180
  }
94
181
 
95
182
  // Export singleton instance
@@ -0,0 +1,149 @@
1
+ import { DownloadManager } from '../index'
2
+ import type {
3
+ DownloadProgress,
4
+ DownloadState,
5
+ DownloadedTrack,
6
+ DownloadError,
7
+ } from '../types/DownloadTypes'
8
+
9
+ type ProgressCallback = (progress: DownloadProgress) => void
10
+ type StateChangeCallback = (
11
+ downloadId: string,
12
+ trackId: string,
13
+ state: DownloadState,
14
+ error?: DownloadError
15
+ ) => void
16
+ type CompleteCallback = (downloadedTrack: DownloadedTrack) => void
17
+
18
+ /**
19
+ * Internal subscription manager for download callbacks.
20
+ * Allows multiple hooks to subscribe to a single native callback.
21
+ */
22
+ class DownloadCallbackSubscriptionManager {
23
+ private progressSubscribers = new Set<ProgressCallback>()
24
+ private stateChangeSubscribers = new Set<StateChangeCallback>()
25
+ private completeSubscribers = new Set<CompleteCallback>()
26
+
27
+ private isProgressRegistered = false
28
+ private isStateChangeRegistered = false
29
+ private isCompleteRegistered = false
30
+
31
+ /**
32
+ * Subscribe to download progress updates
33
+ * @returns Unsubscribe function
34
+ */
35
+ subscribeToProgress(callback: ProgressCallback): () => void {
36
+ this.progressSubscribers.add(callback)
37
+ this.ensureProgressRegistered()
38
+
39
+ return () => {
40
+ this.progressSubscribers.delete(callback)
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Subscribe to download state changes
46
+ * @returns Unsubscribe function
47
+ */
48
+ subscribeToStateChange(callback: StateChangeCallback): () => void {
49
+ this.stateChangeSubscribers.add(callback)
50
+ this.ensureStateChangeRegistered()
51
+
52
+ return () => {
53
+ this.stateChangeSubscribers.delete(callback)
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Subscribe to download completions
59
+ * @returns Unsubscribe function
60
+ */
61
+ subscribeToComplete(callback: CompleteCallback): () => void {
62
+ this.completeSubscribers.add(callback)
63
+ this.ensureCompleteRegistered()
64
+
65
+ return () => {
66
+ this.completeSubscribers.delete(callback)
67
+ }
68
+ }
69
+
70
+ private ensureProgressRegistered(): void {
71
+ if (this.isProgressRegistered) return
72
+
73
+ try {
74
+ DownloadManager.onDownloadProgress((progress) => {
75
+ this.progressSubscribers.forEach((subscriber) => {
76
+ try {
77
+ subscriber(progress)
78
+ } catch (error) {
79
+ console.error(
80
+ '[DownloadCallbackManager] Error in progress subscriber:',
81
+ error
82
+ )
83
+ }
84
+ })
85
+ })
86
+ this.isProgressRegistered = true
87
+ } catch (error) {
88
+ console.error(
89
+ '[DownloadCallbackManager] Failed to register progress callback:',
90
+ error
91
+ )
92
+ }
93
+ }
94
+
95
+ private ensureStateChangeRegistered(): void {
96
+ if (this.isStateChangeRegistered) return
97
+
98
+ try {
99
+ DownloadManager.onDownloadStateChange(
100
+ (downloadId, trackId, state, error) => {
101
+ this.stateChangeSubscribers.forEach((subscriber) => {
102
+ try {
103
+ subscriber(downloadId, trackId, state, error)
104
+ } catch (err) {
105
+ console.error(
106
+ '[DownloadCallbackManager] Error in state change subscriber:',
107
+ err
108
+ )
109
+ }
110
+ })
111
+ }
112
+ )
113
+ this.isStateChangeRegistered = true
114
+ } catch (error) {
115
+ console.error(
116
+ '[DownloadCallbackManager] Failed to register state change callback:',
117
+ error
118
+ )
119
+ }
120
+ }
121
+
122
+ private ensureCompleteRegistered(): void {
123
+ if (this.isCompleteRegistered) return
124
+
125
+ try {
126
+ DownloadManager.onDownloadComplete((downloadedTrack) => {
127
+ this.completeSubscribers.forEach((subscriber) => {
128
+ try {
129
+ subscriber(downloadedTrack)
130
+ } catch (error) {
131
+ console.error(
132
+ '[DownloadCallbackManager] Error in complete subscriber:',
133
+ error
134
+ )
135
+ }
136
+ })
137
+ })
138
+ this.isCompleteRegistered = true
139
+ } catch (error) {
140
+ console.error(
141
+ '[DownloadCallbackManager] Failed to register complete callback:',
142
+ error
143
+ )
144
+ }
145
+ }
146
+ }
147
+
148
+ // Export singleton instance
149
+ export const downloadCallbackManager = new DownloadCallbackSubscriptionManager()
@@ -0,0 +1,138 @@
1
+ import { Equalizer } from '../index'
2
+ import type { EqualizerBand } from '../types/EqualizerTypes'
3
+
4
+ type EnabledChangeCallback = (enabled: boolean) => void
5
+ type BandChangeCallback = (bands: EqualizerBand[]) => void
6
+ type PresetChangeCallback = (presetName: string | null) => void
7
+
8
+ /**
9
+ * Internal subscription manager that allows multiple hooks to subscribe
10
+ * to equalizer callbacks. This solves the problem where registering
11
+ * a new callback overwrites the previous one.
12
+ */
13
+ class EqualizerCallbackSubscriptionManager {
14
+ private enabledChangeSubscribers = new Set<EnabledChangeCallback>()
15
+ private bandChangeSubscribers = new Set<BandChangeCallback>()
16
+ private presetChangeSubscribers = new Set<PresetChangeCallback>()
17
+ private isEnabledChangeRegistered = false
18
+ private isBandChangeRegistered = false
19
+ private isPresetChangeRegistered = false
20
+
21
+ /**
22
+ * Subscribe to enabled state changes
23
+ * @returns Unsubscribe function
24
+ */
25
+ subscribeToEnabledChange(callback: EnabledChangeCallback): () => void {
26
+ this.enabledChangeSubscribers.add(callback)
27
+ this.ensureEnabledChangeRegistered()
28
+
29
+ return () => {
30
+ this.enabledChangeSubscribers.delete(callback)
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Subscribe to band changes
36
+ * @returns Unsubscribe function
37
+ */
38
+ subscribeToBandChange(callback: BandChangeCallback): () => void {
39
+ this.bandChangeSubscribers.add(callback)
40
+ this.ensureBandChangeRegistered()
41
+
42
+ return () => {
43
+ this.bandChangeSubscribers.delete(callback)
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Subscribe to preset changes
49
+ * @returns Unsubscribe function
50
+ */
51
+ subscribeToPresetChange(callback: PresetChangeCallback): () => void {
52
+ this.presetChangeSubscribers.add(callback)
53
+ this.ensurePresetChangeRegistered()
54
+
55
+ return () => {
56
+ this.presetChangeSubscribers.delete(callback)
57
+ }
58
+ }
59
+
60
+ private ensureEnabledChangeRegistered(): void {
61
+ if (this.isEnabledChangeRegistered) return
62
+
63
+ try {
64
+ Equalizer.onEnabledChange((enabled) => {
65
+ this.enabledChangeSubscribers.forEach((subscriber) => {
66
+ try {
67
+ subscriber(enabled)
68
+ } catch (error) {
69
+ console.error(
70
+ '[EqualizerCallbackManager] Error in enabled change subscriber:',
71
+ error
72
+ )
73
+ }
74
+ })
75
+ })
76
+ this.isEnabledChangeRegistered = true
77
+ } catch (error) {
78
+ console.error(
79
+ '[EqualizerCallbackManager] Failed to register enabled change callback:',
80
+ error
81
+ )
82
+ }
83
+ }
84
+
85
+ private ensureBandChangeRegistered(): void {
86
+ if (this.isBandChangeRegistered) return
87
+
88
+ try {
89
+ Equalizer.onBandChange((bands) => {
90
+ this.bandChangeSubscribers.forEach((subscriber) => {
91
+ try {
92
+ subscriber(bands)
93
+ } catch (error) {
94
+ console.error(
95
+ '[EqualizerCallbackManager] Error in band change subscriber:',
96
+ error
97
+ )
98
+ }
99
+ })
100
+ })
101
+ this.isBandChangeRegistered = true
102
+ } catch (error) {
103
+ console.error(
104
+ '[EqualizerCallbackManager] Failed to register band change callback:',
105
+ error
106
+ )
107
+ }
108
+ }
109
+
110
+ private ensurePresetChangeRegistered(): void {
111
+ if (this.isPresetChangeRegistered) return
112
+
113
+ try {
114
+ Equalizer.onPresetChange((presetName) => {
115
+ this.presetChangeSubscribers.forEach((subscriber) => {
116
+ try {
117
+ subscriber(presetName)
118
+ } catch (error) {
119
+ console.error(
120
+ '[EqualizerCallbackManager] Error in preset change subscriber:',
121
+ error
122
+ )
123
+ }
124
+ })
125
+ })
126
+ this.isPresetChangeRegistered = true
127
+ } catch (error) {
128
+ console.error(
129
+ '[EqualizerCallbackManager] Failed to register preset change callback:',
130
+ error
131
+ )
132
+ }
133
+ }
134
+ }
135
+
136
+ // Export singleton instance
137
+ export const equalizerCallbackManager =
138
+ new EqualizerCallbackSubscriptionManager()
@@ -7,3 +7,26 @@ export { useOnPlaybackProgressChange } from './useOnPlaybackProgressChange'
7
7
  export { useAndroidAutoConnection } from './useAndroidAutoConnection'
8
8
  export { useAudioDevices } from './useAudioDevices'
9
9
  export { useNowPlaying } from './useNowPlaying'
10
+ export { usePlaylist } from './usePlaylist'
11
+ export type { UsePlaylistResult } from './usePlaylist'
12
+ export { useActualQueue } from './useActualQueue'
13
+ export type { UseActualQueueResult } from './useActualQueue'
14
+
15
+ // Download hooks
16
+ export { useDownloadProgress } from './useDownloadProgress'
17
+ export type {
18
+ UseDownloadProgressOptions,
19
+ UseDownloadProgressResult,
20
+ } from './useDownloadProgress'
21
+ export { useDownloadedTracks } from './useDownloadedTracks'
22
+ export type { UseDownloadedTracksResult } from './useDownloadedTracks'
23
+ export { useDownloadActions } from './useDownloadActions'
24
+ export type { UseDownloadActionsResult } from './useDownloadActions'
25
+ export { useDownloadStorage } from './useDownloadStorage'
26
+ export type { UseDownloadStorageResult } from './useDownloadStorage'
27
+
28
+ // Equalizer hooks
29
+ export { useEqualizer } from './useEqualizer'
30
+ export type { UseEqualizerResult } from './useEqualizer'
31
+ export { useEqualizerPresets } from './useEqualizerPresets'
32
+ export type { UseEqualizerPresetsResult } from './useEqualizerPresets'
@@ -0,0 +1,116 @@
1
+ import { useEffect, useState, useRef, useCallback } from 'react'
2
+ import { TrackPlayer } from '../index'
3
+ import { callbackManager } from './callbackManager'
4
+ import type { TrackItem } from '../types/PlayerQueue'
5
+
6
+ export interface UseActualQueueResult {
7
+ /** The current queue in playback order */
8
+ queue: TrackItem[]
9
+ /** Manually refresh the queue */
10
+ refreshQueue: () => void
11
+ /** Whether the queue is currently loading */
12
+ isLoading: boolean
13
+ }
14
+
15
+ /**
16
+ * Hook to get the actual playback queue including temporary tracks
17
+ *
18
+ * Returns the complete queue in playback order:
19
+ * [tracks_before_current] + [current] + [playNext_stack] + [upNext_queue] + [remaining_tracks]
20
+ *
21
+ * Auto-updates when:
22
+ * - Track changes
23
+ * - Playback state changes
24
+ *
25
+ * Call `refreshQueue()` after adding tracks via `playNext()` or `addToUpNext()`
26
+ * to immediately see the updated queue.
27
+ *
28
+ * @returns Object containing queue array, refresh function, and loading state
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * function QueueView() {
33
+ * const { queue, refreshQueue, isLoading } = useActualQueue();
34
+ *
35
+ * const handleAddToUpNext = (trackId: string) => {
36
+ * TrackPlayer.addToUpNext(trackId);
37
+ * // Refresh queue after adding track
38
+ * setTimeout(refreshQueue, 100);
39
+ * };
40
+ *
41
+ * return (
42
+ * <ScrollView>
43
+ * {queue.map((track, index) => (
44
+ * <Text key={track.id}>
45
+ * {index + 1}. {track.title}
46
+ * </Text>
47
+ * ))}
48
+ * </ScrollView>
49
+ * );
50
+ * }
51
+ * ```
52
+ */
53
+ export function useActualQueue(): UseActualQueueResult {
54
+ const [queue, setQueue] = useState<TrackItem[]>([])
55
+ const [isLoading, setIsLoading] = useState(true)
56
+ const isMounted = useRef(true)
57
+
58
+ const updateQueue = useCallback(async () => {
59
+ if (!isMounted.current) return
60
+
61
+ try {
62
+ const actualQueue = await TrackPlayer.getActualQueue()
63
+ if (isMounted.current) {
64
+ setQueue(actualQueue)
65
+ setIsLoading(false)
66
+ }
67
+ } catch (error) {
68
+ console.error('[useActualQueue] Error getting queue:', error)
69
+ if (isMounted.current) {
70
+ setQueue([])
71
+ setIsLoading(false)
72
+ }
73
+ }
74
+ }, [])
75
+
76
+ const refreshQueue = useCallback(() => {
77
+ if (!isMounted.current) return
78
+ setIsLoading(true)
79
+ updateQueue()
80
+ }, [updateQueue])
81
+
82
+ // Initialize queue
83
+ useEffect(() => {
84
+ isMounted.current = true
85
+ updateQueue()
86
+
87
+ return () => {
88
+ isMounted.current = false
89
+ }
90
+ }, [updateQueue])
91
+
92
+ // Update queue on track changes (with slight delay to ensure native side has updated)
93
+ useEffect(() => {
94
+ const unsubscribe = callbackManager.subscribeToTrackChange(() => {
95
+ // Small delay to ensure native queue is updated
96
+ setTimeout(updateQueue, 50)
97
+ })
98
+
99
+ return () => {
100
+ unsubscribe()
101
+ }
102
+ }, [updateQueue])
103
+
104
+ // Update queue on playback state changes
105
+ useEffect(() => {
106
+ const unsubscribe = callbackManager.subscribeToPlaybackState(() => {
107
+ updateQueue()
108
+ })
109
+
110
+ return () => {
111
+ unsubscribe()
112
+ }
113
+ }, [updateQueue])
114
+
115
+ return { queue, refreshQueue, isLoading }
116
+ }