react-native-nitro-player 0.3.0-alpha.9 → 0.4.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 (257) 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 +970 -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 +998 -276
  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/downloadCallbackManager.d.ts +36 -0
  31. package/lib/hooks/downloadCallbackManager.js +108 -0
  32. package/lib/hooks/equalizerCallbackManager.d.ts +37 -0
  33. package/lib/hooks/equalizerCallbackManager.js +109 -0
  34. package/lib/hooks/index.d.ts +16 -0
  35. package/lib/hooks/index.js +10 -0
  36. package/lib/hooks/useActualQueue.d.ts +48 -0
  37. package/lib/hooks/useActualQueue.js +98 -0
  38. package/lib/hooks/useDownloadActions.d.ts +26 -0
  39. package/lib/hooks/useDownloadActions.js +117 -0
  40. package/lib/hooks/useDownloadProgress.d.ts +25 -0
  41. package/lib/hooks/useDownloadProgress.js +79 -0
  42. package/lib/hooks/useDownloadStorage.d.ts +19 -0
  43. package/lib/hooks/useDownloadStorage.js +60 -0
  44. package/lib/hooks/useDownloadedTracks.d.ts +25 -0
  45. package/lib/hooks/useDownloadedTracks.js +69 -0
  46. package/lib/hooks/useEqualizer.d.ts +25 -0
  47. package/lib/hooks/useEqualizer.js +124 -0
  48. package/lib/hooks/useEqualizerPresets.d.ts +22 -0
  49. package/lib/hooks/useEqualizerPresets.js +96 -0
  50. package/lib/hooks/useNowPlaying.js +3 -2
  51. package/lib/hooks/useOnChangeTrack.js +15 -12
  52. package/lib/hooks/useOnPlaybackStateChange.js +16 -13
  53. package/lib/hooks/usePlaylist.d.ts +48 -0
  54. package/lib/hooks/usePlaylist.js +136 -0
  55. package/lib/index.d.ts +6 -0
  56. package/lib/index.js +6 -0
  57. package/lib/specs/DownloadManager.nitro.d.ts +152 -0
  58. package/lib/specs/DownloadManager.nitro.js +1 -0
  59. package/lib/specs/Equalizer.nitro.d.ts +43 -0
  60. package/lib/specs/Equalizer.nitro.js +1 -0
  61. package/lib/specs/TrackPlayer.nitro.d.ts +6 -2
  62. package/lib/types/DownloadTypes.d.ts +110 -0
  63. package/lib/types/DownloadTypes.js +1 -0
  64. package/lib/types/EqualizerTypes.d.ts +52 -0
  65. package/lib/types/EqualizerTypes.js +1 -0
  66. package/lib/types/PlayerQueue.d.ts +4 -0
  67. package/nitro.json +8 -0
  68. package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +10 -1
  69. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +32 -2
  70. package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +65 -0
  71. package/nitrogen/generated/android/c++/JDownloadConfig.hpp +92 -0
  72. package/nitrogen/generated/android/c++/JDownloadError.hpp +71 -0
  73. package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +74 -0
  74. package/nitrogen/generated/android/c++/JDownloadProgress.hpp +79 -0
  75. package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +81 -0
  76. package/nitrogen/generated/android/c++/JDownloadState.hpp +71 -0
  77. package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +73 -0
  78. package/nitrogen/generated/android/c++/JDownloadTask.hpp +108 -0
  79. package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +111 -0
  80. package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +92 -0
  81. package/nitrogen/generated/android/c++/JEqualizerBand.hpp +69 -0
  82. package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +78 -0
  83. package/nitrogen/generated/android/c++/JEqualizerState.hpp +91 -0
  84. package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +80 -0
  85. package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +89 -0
  86. package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -0
  87. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +81 -0
  88. package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -0
  89. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +83 -0
  90. package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +97 -0
  91. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -0
  92. package/nitrogen/generated/android/c++/JGainRange.hpp +61 -0
  93. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +470 -0
  94. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +99 -0
  95. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +204 -0
  96. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +82 -0
  97. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +2 -0
  98. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +117 -15
  99. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +6 -2
  100. package/nitrogen/generated/android/c++/JPlaybackSource.hpp +62 -0
  101. package/nitrogen/generated/android/c++/JPlayerState.hpp +11 -3
  102. package/nitrogen/generated/android/c++/JPlaylist.hpp +2 -0
  103. package/nitrogen/generated/android/c++/JPresetType.hpp +59 -0
  104. package/nitrogen/generated/android/c++/JStorageLocation.hpp +59 -0
  105. package/nitrogen/generated/android/c++/JTrackItem.hpp +9 -3
  106. package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +3 -3
  107. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
  108. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
  109. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp +26 -0
  110. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +74 -0
  111. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp +26 -0
  112. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +84 -0
  113. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.cpp +26 -0
  114. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +85 -0
  115. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.cpp +26 -0
  116. package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +80 -0
  117. package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +2 -0
  118. package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +2 -0
  119. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CurrentPlayingType.kt +23 -0
  120. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadConfig.kt +59 -0
  121. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadError.kt +47 -0
  122. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadErrorReason.kt +26 -0
  123. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadProgress.kt +53 -0
  124. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadQueueStatus.kt +56 -0
  125. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadState.kt +25 -0
  126. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadStorageInfo.kt +50 -0
  127. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadTask.kt +65 -0
  128. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedPlaylist.kt +53 -0
  129. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedTrack.kt +56 -0
  130. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerBand.kt +47 -0
  131. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerPreset.kt +44 -0
  132. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerState.kt +44 -0
  133. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadProgress.kt +80 -0
  134. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadedTrack.kt +80 -0
  135. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
  136. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.kt +80 -0
  137. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_EqualizerBand_.kt +80 -0
  138. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/GainRange.kt +41 -0
  139. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +210 -0
  140. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +141 -0
  141. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +19 -2
  142. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlaybackSource.kt +22 -0
  143. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerState.kt +6 -3
  144. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PresetType.kt +21 -0
  145. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/StorageLocation.kt +21 -0
  146. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackItem.kt +7 -3
  147. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackPlayerState.kt +2 -2
  148. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +59 -0
  149. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +59 -0
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +59 -0
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +59 -0
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +59 -0
  153. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +138 -8
  154. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +1046 -121
  155. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +66 -0
  156. package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +16 -0
  157. package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +30 -0
  158. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.cpp +11 -0
  159. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +386 -0
  160. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.cpp +11 -0
  161. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +223 -0
  162. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +1 -0
  163. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +46 -6
  164. package/nitrogen/generated/ios/swift/CurrentPlayingType.swift +48 -0
  165. package/nitrogen/generated/ios/swift/DownloadConfig.swift +270 -0
  166. package/nitrogen/generated/ios/swift/DownloadError.swift +69 -0
  167. package/nitrogen/generated/ios/swift/DownloadErrorReason.swift +60 -0
  168. package/nitrogen/generated/ios/swift/DownloadProgress.swift +91 -0
  169. package/nitrogen/generated/ios/swift/DownloadQueueStatus.swift +102 -0
  170. package/nitrogen/generated/ios/swift/DownloadState.swift +56 -0
  171. package/nitrogen/generated/ios/swift/DownloadStorageInfo.swift +80 -0
  172. package/nitrogen/generated/ios/swift/DownloadTask.swift +315 -0
  173. package/nitrogen/generated/ios/swift/DownloadedPlaylist.swift +103 -0
  174. package/nitrogen/generated/ios/swift/DownloadedTrack.swift +147 -0
  175. package/nitrogen/generated/ios/swift/EqualizerBand.swift +69 -0
  176. package/nitrogen/generated/ios/swift/EqualizerPreset.swift +70 -0
  177. package/nitrogen/generated/ios/swift/EqualizerState.swift +115 -0
  178. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  179. package/nitrogen/generated/ios/swift/Func_void_DownloadProgress.swift +47 -0
  180. package/nitrogen/generated/ios/swift/Func_void_DownloadStorageInfo.swift +47 -0
  181. package/nitrogen/generated/ios/swift/Func_void_DownloadedTrack.swift +47 -0
  182. package/nitrogen/generated/ios/swift/Func_void_PlayerState.swift +47 -0
  183. package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
  184. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  185. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__std__string__.swift +66 -0
  186. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  187. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.swift +47 -0
  188. package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +47 -0
  189. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem_.swift +47 -0
  190. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +47 -0
  191. package/nitrogen/generated/ios/swift/GainRange.swift +47 -0
  192. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +90 -0
  193. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +705 -0
  194. package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +73 -0
  195. package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +396 -0
  196. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +6 -2
  197. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +105 -8
  198. package/nitrogen/generated/ios/swift/PlaybackSource.swift +44 -0
  199. package/nitrogen/generated/ios/swift/PlayerState.swift +13 -2
  200. package/nitrogen/generated/ios/swift/PresetType.swift +40 -0
  201. package/nitrogen/generated/ios/swift/StorageLocation.swift +40 -0
  202. package/nitrogen/generated/ios/swift/TrackItem.swift +31 -1
  203. package/nitrogen/generated/ios/swift/TrackPlayerState.swift +4 -4
  204. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +18 -0
  205. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadError.swift +18 -0
  206. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadTask.swift +18 -0
  207. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedPlaylist.swift +18 -0
  208. package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedTrack.swift +18 -0
  209. package/nitrogen/generated/shared/c++/CurrentPlayingType.hpp +84 -0
  210. package/nitrogen/generated/shared/c++/DownloadConfig.hpp +108 -0
  211. package/nitrogen/generated/shared/c++/DownloadError.hpp +89 -0
  212. package/nitrogen/generated/shared/c++/DownloadErrorReason.hpp +96 -0
  213. package/nitrogen/generated/shared/c++/DownloadProgress.hpp +97 -0
  214. package/nitrogen/generated/shared/c++/DownloadQueueStatus.hpp +99 -0
  215. package/nitrogen/generated/shared/c++/DownloadState.hpp +92 -0
  216. package/nitrogen/generated/shared/c++/DownloadStorageInfo.hpp +91 -0
  217. package/nitrogen/generated/shared/c++/DownloadTask.hpp +122 -0
  218. package/nitrogen/generated/shared/c++/DownloadedPlaylist.hpp +101 -0
  219. package/nitrogen/generated/shared/c++/DownloadedTrack.hpp +107 -0
  220. package/nitrogen/generated/shared/c++/EqualizerBand.hpp +87 -0
  221. package/nitrogen/generated/shared/c++/EqualizerPreset.hpp +86 -0
  222. package/nitrogen/generated/shared/c++/EqualizerState.hpp +89 -0
  223. package/nitrogen/generated/shared/c++/GainRange.hpp +79 -0
  224. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp +55 -0
  225. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +134 -0
  226. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp +38 -0
  227. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +95 -0
  228. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +4 -0
  229. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +11 -5
  230. package/nitrogen/generated/shared/c++/PlaybackSource.hpp +80 -0
  231. package/nitrogen/generated/shared/c++/PlayerState.hpp +9 -2
  232. package/nitrogen/generated/shared/c++/PresetType.hpp +76 -0
  233. package/nitrogen/generated/shared/c++/StorageLocation.hpp +76 -0
  234. package/nitrogen/generated/shared/c++/TrackItem.hpp +7 -2
  235. package/nitrogen/generated/shared/c++/TrackPlayerState.hpp +5 -5
  236. package/package.json +1 -1
  237. package/src/hooks/downloadCallbackManager.ts +149 -0
  238. package/src/hooks/equalizerCallbackManager.ts +138 -0
  239. package/src/hooks/index.ts +23 -0
  240. package/src/hooks/useActualQueue.ts +116 -0
  241. package/src/hooks/useDownloadActions.ts +179 -0
  242. package/src/hooks/useDownloadProgress.ts +126 -0
  243. package/src/hooks/useDownloadStorage.ts +84 -0
  244. package/src/hooks/useDownloadedTracks.ts +138 -0
  245. package/src/hooks/useEqualizer.ts +173 -0
  246. package/src/hooks/useEqualizerPresets.ts +140 -0
  247. package/src/hooks/useNowPlaying.ts +3 -2
  248. package/src/hooks/useOnChangeTrack.ts +15 -11
  249. package/src/hooks/useOnPlaybackStateChange.ts +19 -15
  250. package/src/hooks/usePlaylist.ts +161 -0
  251. package/src/index.ts +12 -0
  252. package/src/specs/DownloadManager.nitro.ts +203 -0
  253. package/src/specs/Equalizer.nitro.ts +69 -0
  254. package/src/specs/TrackPlayer.nitro.ts +6 -2
  255. package/src/types/DownloadTypes.ts +135 -0
  256. package/src/types/EqualizerTypes.ts +72 -0
  257. package/src/types/PlayerQueue.ts +9 -0
@@ -0,0 +1,22 @@
1
+ import type { EqualizerPreset } from '../types/EqualizerTypes';
2
+ export interface UseEqualizerPresetsResult {
3
+ /** All available presets */
4
+ presets: EqualizerPreset[];
5
+ /** Built-in presets only */
6
+ builtInPresets: EqualizerPreset[];
7
+ /** Custom user presets */
8
+ customPresets: EqualizerPreset[];
9
+ /** Apply a preset by name */
10
+ applyPreset: (name: string) => boolean;
11
+ /** Save current settings as custom preset */
12
+ saveCustomPreset: (name: string) => boolean;
13
+ /** Delete a custom preset */
14
+ deleteCustomPreset: (name: string) => boolean;
15
+ /** Currently applied preset name */
16
+ currentPreset: string | null;
17
+ /** Whether presets are loading */
18
+ isLoading: boolean;
19
+ /** Refresh presets from native */
20
+ refreshPresets: () => void;
21
+ }
22
+ export declare function useEqualizerPresets(): UseEqualizerPresetsResult;
@@ -0,0 +1,96 @@
1
+ import { useEffect, useState, useCallback, useRef } from 'react';
2
+ import { Equalizer } from '../index';
3
+ import { equalizerCallbackManager } from './equalizerCallbackManager';
4
+ export function useEqualizerPresets() {
5
+ const [presets, setPresets] = useState([]);
6
+ const [builtInPresets, setBuiltInPresets] = useState([]);
7
+ const [customPresets, setCustomPresets] = useState([]);
8
+ const [currentPreset, setCurrentPreset] = useState(null);
9
+ const [isLoading, setIsLoading] = useState(true);
10
+ const isMounted = useRef(true);
11
+ const refreshPresets = useCallback(() => {
12
+ try {
13
+ const allPresets = Equalizer.getPresets();
14
+ const builtIn = Equalizer.getBuiltInPresets();
15
+ const custom = Equalizer.getCustomPresets();
16
+ const current = Equalizer.getCurrentPresetName();
17
+ if (isMounted.current) {
18
+ setPresets(allPresets);
19
+ setBuiltInPresets(builtIn);
20
+ setCustomPresets(custom);
21
+ setCurrentPreset(current);
22
+ }
23
+ }
24
+ catch (error) {
25
+ console.error('[useEqualizerPresets] Error refreshing presets:', error);
26
+ }
27
+ }, []);
28
+ // Load initial presets
29
+ useEffect(() => {
30
+ isMounted.current = true;
31
+ refreshPresets();
32
+ setIsLoading(false);
33
+ return () => {
34
+ isMounted.current = false;
35
+ };
36
+ }, [refreshPresets]);
37
+ // Subscribe to preset changes
38
+ useEffect(() => {
39
+ const unsubscribe = equalizerCallbackManager.subscribeToPresetChange((presetName) => {
40
+ if (isMounted.current) {
41
+ setCurrentPreset(presetName);
42
+ }
43
+ });
44
+ return unsubscribe;
45
+ }, []);
46
+ const applyPreset = useCallback((name) => {
47
+ try {
48
+ const success = Equalizer.applyPreset(name);
49
+ if (success) {
50
+ setCurrentPreset(name);
51
+ }
52
+ return success;
53
+ }
54
+ catch (error) {
55
+ console.error('[useEqualizerPresets] Error applying preset:', error);
56
+ return false;
57
+ }
58
+ }, []);
59
+ const saveCustomPreset = useCallback((name) => {
60
+ try {
61
+ const success = Equalizer.saveCustomPreset(name);
62
+ if (success) {
63
+ refreshPresets();
64
+ }
65
+ return success;
66
+ }
67
+ catch (error) {
68
+ console.error('[useEqualizerPresets] Error saving custom preset:', error);
69
+ return false;
70
+ }
71
+ }, [refreshPresets]);
72
+ const deleteCustomPreset = useCallback((name) => {
73
+ try {
74
+ const success = Equalizer.deleteCustomPreset(name);
75
+ if (success) {
76
+ refreshPresets();
77
+ }
78
+ return success;
79
+ }
80
+ catch (error) {
81
+ console.error('[useEqualizerPresets] Error deleting custom preset:', error);
82
+ return false;
83
+ }
84
+ }, [refreshPresets]);
85
+ return {
86
+ presets,
87
+ builtInPresets,
88
+ customPresets,
89
+ applyPreset,
90
+ saveCustomPreset,
91
+ deleteCustomPreset,
92
+ currentPreset,
93
+ isLoading,
94
+ refreshPresets,
95
+ };
96
+ }
@@ -8,6 +8,7 @@ const DEFAULT_STATE = {
8
8
  currentState: 'stopped',
9
9
  currentPlaylistId: null,
10
10
  currentIndex: -1,
11
+ currentPlayingType: 'not-playing',
11
12
  };
12
13
  /**
13
14
  * Hook to get the current player state (same as TrackPlayer.getState())
@@ -46,11 +47,11 @@ const DEFAULT_STATE = {
46
47
  export function useNowPlaying() {
47
48
  const [state, setState] = useState(DEFAULT_STATE);
48
49
  const isMounted = useRef(true);
49
- const updateState = useCallback(() => {
50
+ const updateState = useCallback(async () => {
50
51
  if (!isMounted.current)
51
52
  return;
52
53
  try {
53
- const newState = TrackPlayer.getState();
54
+ const newState = await TrackPlayer.getState();
54
55
  setState(newState);
55
56
  }
56
57
  catch (error) {
@@ -38,20 +38,23 @@ export function useOnChangeTrack() {
38
38
  // Initialize with current track from the player
39
39
  useEffect(() => {
40
40
  isMounted.current = true;
41
- try {
42
- const playerState = TrackPlayer.getState();
43
- if (isMounted.current) {
44
- setTrack(playerState.currentTrack);
45
- setIsReady(true);
41
+ const initializeTrack = async () => {
42
+ try {
43
+ const playerState = await TrackPlayer.getState();
44
+ if (isMounted.current) {
45
+ setTrack(playerState.currentTrack);
46
+ setIsReady(true);
47
+ }
46
48
  }
47
- }
48
- catch (error) {
49
- console.error('[useOnChangeTrack] Failed to get initial state:', error);
50
- if (isMounted.current) {
51
- setTrack(null);
52
- setIsReady(true);
49
+ catch (error) {
50
+ console.error('[useOnChangeTrack] Failed to get initial state:', error);
51
+ if (isMounted.current) {
52
+ setTrack(null);
53
+ setIsReady(true);
54
+ }
53
55
  }
54
- }
56
+ };
57
+ initializeTrack();
55
58
  return () => {
56
59
  isMounted.current = false;
57
60
  };
@@ -37,21 +37,24 @@ export function useOnPlaybackStateChange() {
37
37
  // Initialize with current state from the player
38
38
  useEffect(() => {
39
39
  isMounted.current = true;
40
- // Get initial state synchronously
41
- try {
42
- const playerState = TrackPlayer.getState();
43
- if (isMounted.current) {
44
- setState(playerState.currentState);
45
- setIsReady(true);
40
+ // Get initial state asynchronously
41
+ const initializeState = async () => {
42
+ try {
43
+ const playerState = await TrackPlayer.getState();
44
+ if (isMounted.current) {
45
+ setState(playerState.currentState);
46
+ setIsReady(true);
47
+ }
46
48
  }
47
- }
48
- catch (error) {
49
- console.error('[useOnPlaybackStateChange] Failed to get initial state:', error);
50
- if (isMounted.current) {
51
- setState('stopped');
52
- setIsReady(true);
49
+ catch (error) {
50
+ console.error('[useOnPlaybackStateChange] Failed to get initial state:', error);
51
+ if (isMounted.current) {
52
+ setState('stopped');
53
+ setIsReady(true);
54
+ }
53
55
  }
54
- }
56
+ };
57
+ initializeState();
55
58
  return () => {
56
59
  isMounted.current = false;
57
60
  };
@@ -0,0 +1,48 @@
1
+ import type { Playlist, TrackItem } from '../types/PlayerQueue';
2
+ export interface UsePlaylistResult {
3
+ /** The currently loaded playlist */
4
+ currentPlaylist: Playlist | null;
5
+ /** ID of the currently loaded playlist */
6
+ currentPlaylistId: string | null;
7
+ /** All available playlists */
8
+ allPlaylists: Playlist[];
9
+ /** All tracks from all playlists (flattened) */
10
+ allTracks: TrackItem[];
11
+ /** Whether the playlists are currently loading */
12
+ isLoading: boolean;
13
+ /** Manually refresh playlist data */
14
+ refreshPlaylists: () => void;
15
+ }
16
+ /**
17
+ * Hook to manage playlist state
18
+ *
19
+ * Provides current playlist, all playlists, and all tracks across playlists.
20
+ * Automatically refreshes when:
21
+ * - Component mounts
22
+ * - Track changes (to update currentPlaylistId)
23
+ * - Playlists are modified via PlayerQueue methods
24
+ *
25
+ * Call `refreshPlaylists()` after creating/deleting playlists to update the state.
26
+ *
27
+ * @returns Object containing playlist state and refresh function
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * function MyComponent() {
32
+ * const { currentPlaylist, allTracks, refreshPlaylists } = usePlaylist();
33
+ *
34
+ * const handleCreatePlaylist = () => {
35
+ * PlayerQueue.createPlaylist('New Playlist');
36
+ * refreshPlaylists(); // Refresh to see the new playlist
37
+ * };
38
+ *
39
+ * return (
40
+ * <View>
41
+ * <Text>{currentPlaylist?.name}</Text>
42
+ * <Text>Total tracks: {allTracks.length}</Text>
43
+ * </View>
44
+ * );
45
+ * }
46
+ * ```
47
+ */
48
+ export declare function usePlaylist(): UsePlaylistResult;
@@ -0,0 +1,136 @@
1
+ import { useEffect, useState, useRef, useCallback } from 'react';
2
+ import { PlayerQueue } from '../index';
3
+ import { callbackManager } from './callbackManager';
4
+ /**
5
+ * Hook to manage playlist state
6
+ *
7
+ * Provides current playlist, all playlists, and all tracks across playlists.
8
+ * Automatically refreshes when:
9
+ * - Component mounts
10
+ * - Track changes (to update currentPlaylistId)
11
+ * - Playlists are modified via PlayerQueue methods
12
+ *
13
+ * Call `refreshPlaylists()` after creating/deleting playlists to update the state.
14
+ *
15
+ * @returns Object containing playlist state and refresh function
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function MyComponent() {
20
+ * const { currentPlaylist, allTracks, refreshPlaylists } = usePlaylist();
21
+ *
22
+ * const handleCreatePlaylist = () => {
23
+ * PlayerQueue.createPlaylist('New Playlist');
24
+ * refreshPlaylists(); // Refresh to see the new playlist
25
+ * };
26
+ *
27
+ * return (
28
+ * <View>
29
+ * <Text>{currentPlaylist?.name}</Text>
30
+ * <Text>Total tracks: {allTracks.length}</Text>
31
+ * </View>
32
+ * );
33
+ * }
34
+ * ```
35
+ */
36
+ export function usePlaylist() {
37
+ const [currentPlaylist, setCurrentPlaylist] = useState(null);
38
+ const [currentPlaylistId, setCurrentPlaylistId] = useState(null);
39
+ const [allPlaylists, setAllPlaylists] = useState([]);
40
+ const [allTracks, setAllTracks] = useState([]);
41
+ const [isLoading, setIsLoading] = useState(true);
42
+ const isMounted = useRef(true);
43
+ const hasSubscribed = useRef(false);
44
+ const refreshPlaylists = useCallback(() => {
45
+ if (!isMounted.current)
46
+ return;
47
+ try {
48
+ // Get current playlist ID
49
+ const playlistId = PlayerQueue.getCurrentPlaylistId();
50
+ if (!isMounted.current)
51
+ return;
52
+ setCurrentPlaylistId(playlistId);
53
+ // Get current playlist details
54
+ if (playlistId) {
55
+ const playlist = PlayerQueue.getPlaylist(playlistId);
56
+ if (isMounted.current) {
57
+ setCurrentPlaylist(playlist);
58
+ }
59
+ }
60
+ else {
61
+ if (isMounted.current) {
62
+ setCurrentPlaylist(null);
63
+ }
64
+ }
65
+ // Get all playlists
66
+ const playlists = PlayerQueue.getAllPlaylists();
67
+ if (!isMounted.current)
68
+ return;
69
+ setAllPlaylists(playlists);
70
+ // Get all tracks from all playlists (deduplicated by id)
71
+ const trackMap = new Map();
72
+ playlists.forEach((playlist) => {
73
+ playlist.tracks.forEach((track) => {
74
+ if (!trackMap.has(track.id)) {
75
+ trackMap.set(track.id, track);
76
+ }
77
+ });
78
+ });
79
+ if (isMounted.current) {
80
+ setAllTracks(Array.from(trackMap.values()));
81
+ setIsLoading(false);
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error('[usePlaylist] Error refreshing playlists:', error);
86
+ if (isMounted.current) {
87
+ setIsLoading(false);
88
+ }
89
+ }
90
+ }, []);
91
+ // Initialize and setup mounted ref
92
+ useEffect(() => {
93
+ isMounted.current = true;
94
+ // Initial load
95
+ refreshPlaylists();
96
+ return () => {
97
+ isMounted.current = false;
98
+ };
99
+ }, [refreshPlaylists]);
100
+ // Subscribe to native playlist changes (only once)
101
+ useEffect(() => {
102
+ if (hasSubscribed.current)
103
+ return;
104
+ hasSubscribed.current = true;
105
+ try {
106
+ PlayerQueue.onPlaylistsChanged(() => {
107
+ if (isMounted.current) {
108
+ refreshPlaylists();
109
+ }
110
+ });
111
+ }
112
+ catch (error) {
113
+ console.error('[usePlaylist] Error setting up playlist listener:', error);
114
+ }
115
+ }, [refreshPlaylists]);
116
+ // Also refresh when track changes (as it might indicate playlist loaded)
117
+ useEffect(() => {
118
+ const unsubscribe = callbackManager.subscribeToTrackChange(() => {
119
+ // Refresh to update currentPlaylistId when track changes
120
+ if (isMounted.current) {
121
+ refreshPlaylists();
122
+ }
123
+ });
124
+ return () => {
125
+ unsubscribe();
126
+ };
127
+ }, [refreshPlaylists]);
128
+ return {
129
+ currentPlaylist,
130
+ currentPlaylistId,
131
+ allPlaylists,
132
+ allTracks,
133
+ isLoading,
134
+ refreshPlaylists,
135
+ };
136
+ }
package/lib/index.d.ts CHANGED
@@ -2,14 +2,20 @@ import type { PlayerQueue as PlayerQueueType, TrackPlayer as TrackPlayerType } f
2
2
  import type { AndroidAutoMediaLibrary as AndroidAutoMediaLibraryType } from './specs/AndroidAutoMediaLibrary.nitro';
3
3
  import type { AudioDevices as AudioDevicesType } from './specs/AudioDevices.nitro';
4
4
  import type { AudioRoutePicker as AudioRoutePickerType } from './specs/AudioRoutePicker.nitro';
5
+ import type { DownloadManager as DownloadManagerType } from './specs/DownloadManager.nitro';
6
+ import type { Equalizer as EqualizerType } from './specs/Equalizer.nitro';
5
7
  export declare const PlayerQueue: PlayerQueueType;
6
8
  export declare const TrackPlayer: TrackPlayerType;
7
9
  export declare const AndroidAutoMediaLibrary: AndroidAutoMediaLibraryType | null;
8
10
  export declare const AudioDevices: AudioDevicesType | null;
9
11
  export declare const AudioRoutePicker: AudioRoutePickerType | null;
12
+ export declare const DownloadManager: DownloadManagerType;
13
+ export declare const Equalizer: EqualizerType;
10
14
  export * from './hooks';
11
15
  export * from './types/PlayerQueue';
12
16
  export * from './types/AndroidAutoMediaLibrary';
17
+ export * from './types/DownloadTypes';
18
+ export * from './types/EqualizerTypes';
13
19
  export type { TAudioDevice } from './specs/AudioDevices.nitro';
14
20
  export type { RepeatMode } from './specs/TrackPlayer.nitro';
15
21
  export { AndroidAutoMediaLibraryHelper } from './utils/androidAutoMediaLibrary';
package/lib/index.js CHANGED
@@ -15,10 +15,16 @@ export const AudioDevices = Platform.OS === 'android'
15
15
  export const AudioRoutePicker = Platform.OS === 'ios'
16
16
  ? NitroModules.createHybridObject('AudioRoutePicker')
17
17
  : null;
18
+ // Download Manager
19
+ export const DownloadManager = NitroModules.createHybridObject('DownloadManager');
20
+ // Equalizer
21
+ export const Equalizer = NitroModules.createHybridObject('Equalizer');
18
22
  // Export hooks
19
23
  export * from './hooks';
20
24
  // Export types
21
25
  export * from './types/PlayerQueue';
22
26
  export * from './types/AndroidAutoMediaLibrary';
27
+ export * from './types/DownloadTypes';
28
+ export * from './types/EqualizerTypes';
23
29
  // Export utilities
24
30
  export { AndroidAutoMediaLibraryHelper } from './utils/androidAutoMediaLibrary';
@@ -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;