react-native-nitro-player 0.7.0 → 0.7.1-alpha.1

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 (110) hide show
  1. package/README.md +47 -46
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +9 -13
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +45 -90
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +48 -182
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +21 -77
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +55 -104
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +113 -123
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +82 -0
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ListenerRegistry.kt +48 -0
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerAndroidAuto.kt +62 -0
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +153 -1887
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +122 -0
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerNotify.kt +44 -0
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +162 -0
  15. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueue.kt +179 -0
  16. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +170 -0
  17. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +28 -0
  18. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerTempQueue.kt +121 -0
  19. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerUrlLoader.kt +98 -0
  20. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +27 -18
  21. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +150 -135
  22. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +13 -30
  23. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +102 -162
  24. package/ios/HybridDownloadManager.swift +32 -26
  25. package/ios/HybridEqualizer.swift +48 -35
  26. package/ios/HybridTrackPlayer.swift +127 -102
  27. package/ios/core/ListenerRegistry.swift +60 -0
  28. package/ios/core/TrackPlayerCore.swift +130 -2356
  29. package/ios/core/TrackPlayerListener.swift +395 -0
  30. package/ios/core/TrackPlayerNotify.swift +52 -0
  31. package/ios/core/TrackPlayerPlayback.swift +274 -0
  32. package/ios/core/TrackPlayerQueue.swift +221 -0
  33. package/ios/core/TrackPlayerQueueBuild.swift +493 -0
  34. package/ios/core/TrackPlayerTempQueue.swift +167 -0
  35. package/ios/core/TrackPlayerUrlLoader.swift +169 -0
  36. package/ios/equalizer/EqualizerCore.swift +63 -123
  37. package/ios/media/MediaSessionManager.swift +32 -49
  38. package/ios/playlist/PlaylistManager.swift +2 -9
  39. package/ios/queue/HybridPlayerQueue.swift +69 -66
  40. package/lib/hooks/useDownloadedTracks.js +16 -13
  41. package/lib/hooks/useEqualizer.d.ts +4 -4
  42. package/lib/hooks/useEqualizer.js +22 -17
  43. package/lib/hooks/useEqualizerPresets.d.ts +3 -3
  44. package/lib/hooks/useEqualizerPresets.js +12 -18
  45. package/lib/specs/AndroidAutoMediaLibrary.nitro.d.ts +2 -2
  46. package/lib/specs/AudioDevices.nitro.d.ts +2 -2
  47. package/lib/specs/DownloadManager.nitro.d.ts +10 -10
  48. package/lib/specs/Equalizer.nitro.d.ts +10 -10
  49. package/lib/specs/TrackPlayer.nitro.d.ts +38 -16
  50. package/lib/types/EqualizerTypes.d.ts +3 -3
  51. package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +2 -0
  52. package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp +122 -0
  53. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp +31 -6
  54. package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.hpp +2 -2
  55. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp +16 -3
  56. package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.hpp +1 -1
  57. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +154 -44
  58. package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +10 -10
  59. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +130 -34
  60. package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +9 -9
  61. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +115 -24
  62. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +8 -8
  63. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +243 -24
  64. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +16 -8
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem_.kt +80 -0
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrarySpec.kt +3 -2
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAudioDevicesSpec.kt +2 -1
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +10 -10
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +10 -9
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +9 -8
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +45 -8
  72. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +74 -18
  73. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +380 -151
  74. package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +10 -10
  75. package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +12 -9
  76. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +23 -8
  77. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +82 -8
  78. package/nitrogen/generated/ios/swift/Func_void_EqualizerState.swift +46 -0
  79. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedPlaylist_.swift +58 -0
  80. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedTrack_.swift +58 -0
  81. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__std__string_.swift +58 -0
  82. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedPlaylist_.swift +46 -0
  83. package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedTrack_.swift +46 -0
  84. package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +5 -5
  85. package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__std__vector_TrackItem_.swift +46 -0
  86. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +10 -10
  87. package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +141 -71
  88. package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +9 -9
  89. package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +105 -41
  90. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec.swift +8 -8
  91. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec_cxx.swift +95 -32
  92. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +16 -8
  93. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +267 -32
  94. package/nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.hpp +3 -2
  95. package/nitrogen/generated/shared/c++/HybridAudioDevicesSpec.hpp +2 -1
  96. package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +10 -10
  97. package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +10 -9
  98. package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.hpp +9 -8
  99. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
  100. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +16 -8
  101. package/package.json +5 -5
  102. package/src/hooks/useDownloadedTracks.ts +17 -13
  103. package/src/hooks/useEqualizer.ts +26 -21
  104. package/src/hooks/useEqualizerPresets.ts +15 -21
  105. package/src/specs/AndroidAutoMediaLibrary.nitro.ts +2 -2
  106. package/src/specs/AudioDevices.nitro.ts +2 -2
  107. package/src/specs/DownloadManager.nitro.ts +10 -10
  108. package/src/specs/Equalizer.nitro.ts +10 -10
  109. package/src/specs/TrackPlayer.nitro.ts +52 -16
  110. package/src/types/EqualizerTypes.ts +17 -13
@@ -43,21 +43,25 @@ export function useDownloadedTracks(): UseDownloadedTracksResult {
43
43
  const refresh = useCallback(() => {
44
44
  if (!isMounted.current) return
45
45
 
46
- try {
47
- const tracks = DownloadManager.getAllDownloadedTracks()
48
- const playlists = DownloadManager.getAllDownloadedPlaylists()
49
-
50
- if (isMounted.current) {
51
- setDownloadedTracks(tracks)
52
- setDownloadedPlaylists(playlists)
53
- setIsLoading(false)
54
- }
55
- } catch (error) {
56
- console.error('[useDownloadedTracks] Error refreshing:', error)
57
- if (isMounted.current) {
58
- setIsLoading(false)
46
+ const run = async () => {
47
+ try {
48
+ const tracks = await DownloadManager.getAllDownloadedTracks()
49
+ const playlists = await DownloadManager.getAllDownloadedPlaylists()
50
+
51
+ if (isMounted.current) {
52
+ setDownloadedTracks(tracks)
53
+ setDownloadedPlaylists(playlists)
54
+ setIsLoading(false)
55
+ }
56
+ } catch (error) {
57
+ console.error('[useDownloadedTracks] Error refreshing:', error)
58
+ if (isMounted.current) {
59
+ setIsLoading(false)
60
+ }
59
61
  }
60
62
  }
63
+
64
+ void run()
61
65
  }, [])
62
66
 
63
67
  useEffect(() => {
@@ -11,13 +11,13 @@ export interface UseEqualizerResult {
11
11
  /** Currently applied preset name */
12
12
  currentPreset: string | null
13
13
  /** Toggle equalizer on/off */
14
- setEnabled: (enabled: boolean) => boolean
14
+ setEnabled: (enabled: boolean) => Promise<boolean>
15
15
  /** Set gain for a specific band */
16
- setBandGain: (bandIndex: number, gainDb: number) => boolean
16
+ setBandGain: (bandIndex: number, gainDb: number) => Promise<boolean>
17
17
  /** Set all band gains at once */
18
- setAllBandGains: (gains: number[]) => boolean
18
+ setAllBandGains: (gains: number[]) => Promise<boolean>
19
19
  /** Reset to flat response */
20
- reset: () => void
20
+ reset: () => Promise<void>
21
21
  /** Whether equalizer is loading */
22
22
  isLoading: boolean
23
23
  /** Gain range (min/max in dB) */
@@ -25,11 +25,16 @@ export interface UseEqualizerResult {
25
25
  }
26
26
 
27
27
  const DEFAULT_BANDS: EqualizerBand[] = [
28
- { index: 0, centerFrequency: 60, gainDb: 0, frequencyLabel: '60 Hz' },
29
- { index: 1, centerFrequency: 230, gainDb: 0, frequencyLabel: '230 Hz' },
30
- { index: 2, centerFrequency: 910, gainDb: 0, frequencyLabel: '910 Hz' },
31
- { index: 3, centerFrequency: 3600, gainDb: 0, frequencyLabel: '3.6 kHz' },
32
- { index: 4, centerFrequency: 14000, gainDb: 0, frequencyLabel: '14 kHz' },
28
+ { index: 0, centerFrequency: 31, gainDb: 0, frequencyLabel: '31 Hz' },
29
+ { index: 1, centerFrequency: 63, gainDb: 0, frequencyLabel: '63 Hz' },
30
+ { index: 2, centerFrequency: 125, gainDb: 0, frequencyLabel: '125 Hz' },
31
+ { index: 3, centerFrequency: 250, gainDb: 0, frequencyLabel: '250 Hz' },
32
+ { index: 4, centerFrequency: 500, gainDb: 0, frequencyLabel: '500 Hz' },
33
+ { index: 5, centerFrequency: 1000, gainDb: 0, frequencyLabel: '1 kHz' },
34
+ { index: 6, centerFrequency: 2000, gainDb: 0, frequencyLabel: '2 kHz' },
35
+ { index: 7, centerFrequency: 4000, gainDb: 0, frequencyLabel: '4 kHz' },
36
+ { index: 8, centerFrequency: 8000, gainDb: 0, frequencyLabel: '8 kHz' },
37
+ { index: 9, centerFrequency: 16000, gainDb: 0, frequencyLabel: '16 kHz' },
33
38
  ]
34
39
 
35
40
  export function useEqualizer(): UseEqualizerResult {
@@ -46,7 +51,7 @@ export function useEqualizer(): UseEqualizerResult {
46
51
 
47
52
  const loadState = async () => {
48
53
  try {
49
- const state = Equalizer.getState()
54
+ const state = await Equalizer.getState()
50
55
  if (isMounted.current) {
51
56
  setIsEnabledState(state.enabled)
52
57
  setBands(state.bands)
@@ -111,9 +116,10 @@ export function useEqualizer(): UseEqualizerResult {
111
116
  return unsubscribe
112
117
  }, [])
113
118
 
114
- const setEnabled = useCallback((enabled: boolean): boolean => {
119
+ const setEnabled = useCallback(async (enabled: boolean): Promise<boolean> => {
115
120
  try {
116
- return Equalizer.setEnabled(enabled)
121
+ await Equalizer.setEnabled(enabled)
122
+ return true
117
123
  } catch (error) {
118
124
  console.error('[useEqualizer] Error setting enabled:', error)
119
125
  return false
@@ -121,13 +127,13 @@ export function useEqualizer(): UseEqualizerResult {
121
127
  }, [])
122
128
 
123
129
  const setBandGain = useCallback(
124
- (bandIndex: number, gainDb: number): boolean => {
125
- // Optimistic update
130
+ async (bandIndex: number, gainDb: number): Promise<boolean> => {
126
131
  setBands((prevBands) =>
127
132
  prevBands.map((b) => (b.index === bandIndex ? { ...b, gainDb } : b))
128
133
  )
129
134
  try {
130
- return Equalizer.setBandGain(bandIndex, gainDb)
135
+ await Equalizer.setBandGain(bandIndex, gainDb)
136
+ return true
131
137
  } catch (error) {
132
138
  console.error('[useEqualizer] Error setting band gain:', error)
133
139
  return false
@@ -136,24 +142,23 @@ export function useEqualizer(): UseEqualizerResult {
136
142
  []
137
143
  )
138
144
 
139
- const setAllBandGains = useCallback((gains: number[]): boolean => {
140
- // Optimistic update
145
+ const setAllBandGains = useCallback(async (gains: number[]): Promise<boolean> => {
141
146
  setBands((prevBands) =>
142
147
  prevBands.map((b, i) => ({ ...b, gainDb: gains[i] ?? b.gainDb }))
143
148
  )
144
149
  try {
145
- return Equalizer.setAllBandGains(gains)
150
+ await Equalizer.setAllBandGains(gains)
151
+ return true
146
152
  } catch (error) {
147
153
  console.error('[useEqualizer] Error setting all band gains:', error)
148
154
  return false
149
155
  }
150
156
  }, [])
151
157
 
152
- const reset = useCallback(() => {
153
- // Optimistic update
158
+ const reset = useCallback(async () => {
154
159
  setBands((prevBands) => prevBands.map((b) => ({ ...b, gainDb: 0 })))
155
160
  try {
156
- Equalizer.reset()
161
+ await Equalizer.reset()
157
162
  } catch (error) {
158
163
  console.error('[useEqualizer] Error resetting equalizer:', error)
159
164
  }
@@ -11,11 +11,11 @@ export interface UseEqualizerPresetsResult {
11
11
  /** Custom user presets */
12
12
  customPresets: EqualizerPreset[]
13
13
  /** Apply a preset by name */
14
- applyPreset: (name: string) => boolean
14
+ applyPreset: (name: string) => Promise<boolean>
15
15
  /** Save current settings as custom preset */
16
- saveCustomPreset: (name: string) => boolean
16
+ saveCustomPreset: (name: string) => Promise<boolean>
17
17
  /** Delete a custom preset */
18
- deleteCustomPreset: (name: string) => boolean
18
+ deleteCustomPreset: (name: string) => Promise<boolean>
19
19
  /** Currently applied preset name */
20
20
  currentPreset: string | null
21
21
  /** Whether presets are loading */
@@ -75,13 +75,11 @@ export function useEqualizerPresets(): UseEqualizerPresetsResult {
75
75
  return unsubscribe
76
76
  }, [])
77
77
 
78
- const applyPreset = useCallback((name: string): boolean => {
78
+ const applyPreset = useCallback(async (name: string): Promise<boolean> => {
79
79
  try {
80
- const success = Equalizer.applyPreset(name)
81
- if (success) {
82
- setCurrentPreset(name)
83
- }
84
- return success
80
+ await Equalizer.applyPreset(name)
81
+ setCurrentPreset(name)
82
+ return true
85
83
  } catch (error) {
86
84
  console.error('[useEqualizerPresets] Error applying preset:', error)
87
85
  return false
@@ -89,13 +87,11 @@ export function useEqualizerPresets(): UseEqualizerPresetsResult {
89
87
  }, [])
90
88
 
91
89
  const saveCustomPreset = useCallback(
92
- (name: string): boolean => {
90
+ async (name: string): Promise<boolean> => {
93
91
  try {
94
- const success = Equalizer.saveCustomPreset(name)
95
- if (success) {
96
- refreshPresets()
97
- }
98
- return success
92
+ await Equalizer.saveCustomPreset(name)
93
+ refreshPresets()
94
+ return true
99
95
  } catch (error) {
100
96
  console.error(
101
97
  '[useEqualizerPresets] Error saving custom preset:',
@@ -108,13 +104,11 @@ export function useEqualizerPresets(): UseEqualizerPresetsResult {
108
104
  )
109
105
 
110
106
  const deleteCustomPreset = useCallback(
111
- (name: string): boolean => {
107
+ async (name: string): Promise<boolean> => {
112
108
  try {
113
- const success = Equalizer.deleteCustomPreset(name)
114
- if (success) {
115
- refreshPresets()
116
- }
117
- return success
109
+ await Equalizer.deleteCustomPreset(name)
110
+ refreshPresets()
111
+ return true
118
112
  } catch (error) {
119
113
  console.error(
120
114
  '[useEqualizerPresets] Error deleting custom preset:',
@@ -12,11 +12,11 @@ export interface AndroidAutoMediaLibrary
12
12
  *
13
13
  * @param libraryJson - JSON string of the MediaLibrary structure
14
14
  */
15
- setMediaLibrary(libraryJson: string): void
15
+ setMediaLibrary(libraryJson: string): Promise<void>
16
16
 
17
17
  /**
18
18
  * Clear the Android Auto media library
19
19
  * Falls back to showing all playlists
20
20
  */
21
- clearMediaLibrary(): void
21
+ clearMediaLibrary(): Promise<void>
22
22
  }
@@ -19,7 +19,7 @@ export interface AudioDevices extends HybridObject<{ android: 'kotlin' }> {
19
19
  * Set the audio device
20
20
  *
21
21
  * @param deviceId - The ID of the audio device
22
- * @returns True if the audio device was set successfully, false otherwise
22
+ * @returns Promise that resolves when the device has been set
23
23
  */
24
- setAudioDevice(deviceId: number): boolean
24
+ setAudioDevice(deviceId: number): Promise<void>
25
25
  }
@@ -102,42 +102,42 @@ export interface DownloadManager
102
102
  /**
103
103
  * Check if a track is downloaded
104
104
  */
105
- isTrackDownloaded(trackId: string): boolean
105
+ isTrackDownloaded(trackId: string): Promise<boolean>
106
106
 
107
107
  /**
108
108
  * Check if a playlist is fully downloaded
109
109
  */
110
- isPlaylistDownloaded(playlistId: string): boolean
110
+ isPlaylistDownloaded(playlistId: string): Promise<boolean>
111
111
 
112
112
  /**
113
113
  * Check if a playlist is partially downloaded
114
114
  */
115
- isPlaylistPartiallyDownloaded(playlistId: string): boolean
115
+ isPlaylistPartiallyDownloaded(playlistId: string): Promise<boolean>
116
116
 
117
117
  /**
118
118
  * Get downloaded track by track ID
119
119
  */
120
- getDownloadedTrack(trackId: string): DownloadedTrack | null
120
+ getDownloadedTrack(trackId: string): Promise<DownloadedTrack | null>
121
121
 
122
122
  /**
123
123
  * Get all downloaded tracks
124
124
  */
125
- getAllDownloadedTracks(): DownloadedTrack[]
125
+ getAllDownloadedTracks(): Promise<DownloadedTrack[]>
126
126
 
127
127
  /**
128
128
  * Get downloaded playlist by playlist ID
129
129
  */
130
- getDownloadedPlaylist(playlistId: string): DownloadedPlaylist | null
130
+ getDownloadedPlaylist(playlistId: string): Promise<DownloadedPlaylist | null>
131
131
 
132
132
  /**
133
133
  * Get all downloaded playlists
134
134
  */
135
- getAllDownloadedPlaylists(): DownloadedPlaylist[]
135
+ getAllDownloadedPlaylists(): Promise<DownloadedPlaylist[]>
136
136
 
137
137
  /**
138
138
  * Get local file path for a downloaded track
139
139
  */
140
- getLocalPath(trackId: string): string | null
140
+ getLocalPath(trackId: string): Promise<string | null>
141
141
 
142
142
  /**
143
143
  * Delete a downloaded track
@@ -163,7 +163,7 @@ export interface DownloadManager
163
163
  * Call this to clean up after manual file deletion
164
164
  * @returns number of orphaned records that were cleaned up
165
165
  */
166
- syncDownloads(): number
166
+ syncDownloads(): Promise<number>
167
167
  /**
168
168
  * Set playback source preference
169
169
  */
@@ -177,7 +177,7 @@ export interface DownloadManager
177
177
  /**
178
178
  * Get the effective URL for a track (local or network based on preference)
179
179
  */
180
- getEffectiveUrl(track: TrackItem): string
180
+ getEffectiveUrl(track: TrackItem): Promise<string>
181
181
 
182
182
  /**
183
183
  * Called when download progress updates
@@ -10,20 +10,20 @@ export interface Equalizer
10
10
  extends HybridObject<{ android: 'kotlin'; ios: 'swift' }> {
11
11
  // === Enable/Disable ===
12
12
  /** Enable or disable the equalizer */
13
- setEnabled(enabled: boolean): boolean
13
+ setEnabled(enabled: boolean): Promise<void>
14
14
 
15
15
  /** Check if equalizer is currently enabled */
16
16
  isEnabled(): boolean
17
17
 
18
18
  // === Band Control ===
19
19
  /** Get all equalizer bands with current gain values */
20
- getBands(): EqualizerBand[]
20
+ getBands(): Promise<EqualizerBand[]>
21
21
 
22
22
  /** Set gain for a specific band index (-12 to +12 dB) */
23
- setBandGain(bandIndex: number, gainDb: number): boolean
23
+ setBandGain(bandIndex: number, gainDb: number): Promise<void>
24
24
 
25
- /** Set gains for all bands at once (array of 5 values) */
26
- setAllBandGains(gains: number[]): boolean
25
+ /** Set gains for all bands at once (array of 10 values) */
26
+ setAllBandGains(gains: number[]): Promise<void>
27
27
 
28
28
  /** Get the valid gain range for bands */
29
29
  getBandRange(): GainRange
@@ -39,23 +39,23 @@ export interface Equalizer
39
39
  getCustomPresets(): EqualizerPreset[]
40
40
 
41
41
  /** Apply a preset by name */
42
- applyPreset(presetName: string): boolean
42
+ applyPreset(presetName: string): Promise<void>
43
43
 
44
44
  /** Get currently applied preset name (null if custom values) */
45
45
  getCurrentPresetName(): string | null
46
46
 
47
47
  /** Save current settings as a custom preset */
48
- saveCustomPreset(name: string): boolean
48
+ saveCustomPreset(name: string): Promise<void>
49
49
 
50
50
  /** Delete a custom preset by name */
51
- deleteCustomPreset(name: string): boolean
51
+ deleteCustomPreset(name: string): Promise<void>
52
52
 
53
53
  // === State ===
54
54
  /** Get complete equalizer state */
55
- getState(): EqualizerState
55
+ getState(): Promise<EqualizerState>
56
56
 
57
57
  /** Reset to flat response (all bands at 0 dB) */
58
- reset(): void
58
+ reset(): Promise<void>
59
59
 
60
60
  // === Events ===
61
61
  /** Called when equalizer enabled state changes */
@@ -12,33 +12,33 @@ import type {
12
12
  export interface PlayerQueue
13
13
  extends HybridObject<{ android: 'kotlin'; ios: 'swift' }> {
14
14
  // Playlist management
15
- createPlaylist(name: string, description?: string, artwork?: string): string
16
- deletePlaylist(playlistId: string): void
15
+ createPlaylist(name: string, description?: string, artwork?: string): Promise<string>
16
+ deletePlaylist(playlistId: string): Promise<void>
17
17
  updatePlaylist(
18
18
  playlistId: string,
19
19
  name?: string,
20
20
  description?: string,
21
21
  artwork?: string
22
- ): void
22
+ ): Promise<void>
23
23
  getPlaylist(playlistId: string): Playlist | null
24
24
  getAllPlaylists(): Playlist[]
25
25
 
26
26
  // Track management within playlists
27
- addTrackToPlaylist(playlistId: string, track: TrackItem, index?: number): void
27
+ addTrackToPlaylist(playlistId: string, track: TrackItem, index?: number): Promise<void>
28
28
  addTracksToPlaylist(
29
29
  playlistId: string,
30
30
  tracks: TrackItem[],
31
31
  index?: number
32
- ): void
33
- removeTrackFromPlaylist(playlistId: string, trackId: string): void
32
+ ): Promise<void>
33
+ removeTrackFromPlaylist(playlistId: string, trackId: string): Promise<void>
34
34
  reorderTrackInPlaylist(
35
35
  playlistId: string,
36
36
  trackId: string,
37
37
  newIndex: number
38
- ): void
38
+ ): Promise<void>
39
39
 
40
40
  // Playback control
41
- loadPlaylist(playlistId: string): void
41
+ loadPlaylist(playlistId: string): Promise<void>
42
42
  getCurrentPlaylistId(): string | null
43
43
 
44
44
  // Events
@@ -58,20 +58,20 @@ export type RepeatMode = 'off' | 'Playlist' | 'track'
58
58
 
59
59
  export interface TrackPlayer
60
60
  extends HybridObject<{ android: 'kotlin'; ios: 'swift' }> {
61
- play(): void
62
- pause(): void
61
+ play(): Promise<void>
62
+ pause(): Promise<void>
63
63
  playSong(songId: string, fromPlaylist?: string): Promise<void>
64
- skipToNext(): void
64
+ skipToNext(): Promise<void>
65
65
  skipToIndex(index: number): Promise<boolean>
66
- skipToPrevious(): void
67
- seek(position: number): void
66
+ skipToPrevious(): Promise<void>
67
+ seek(position: number): Promise<void>
68
68
  addToUpNext(trackId: string): Promise<void>
69
69
  playNext(trackId: string): Promise<void>
70
70
  getActualQueue(): Promise<TrackItem[]>
71
71
  getState(): Promise<PlayerState>
72
- setRepeatMode(mode: RepeatMode): boolean
72
+ setRepeatMode(mode: RepeatMode): Promise<void>
73
73
  getRepeatMode(): RepeatMode
74
- configure(config: PlayerConfig): void
74
+ configure(config: PlayerConfig): Promise<void>
75
75
  onChangeTrack(callback: (track: TrackItem, reason?: Reason) => void): void
76
76
  onPlaybackStateChange(
77
77
  callback: (state: TrackPlayerState, reason?: Reason) => void
@@ -86,7 +86,7 @@ export interface TrackPlayer
86
86
  ): void
87
87
  onAndroidAutoConnectionChange(callback: (connected: boolean) => void): void
88
88
  isAndroidAutoConnected(): boolean
89
- setVolume(volume: number): boolean
89
+ setVolume(volume: number): Promise<void>
90
90
 
91
91
  /**
92
92
  * Update entire track objects across all playlists
@@ -144,4 +144,40 @@ export interface TrackPlayer
144
144
  * @returns Promise resolving to playback speed
145
145
  */
146
146
  getPlaybackSpeed(): Promise<number>
147
+
148
+ // =========================================================
149
+ // Temporary queue management (v2)
150
+ // =========================================================
151
+
152
+ /** Remove a track from the playNext stack by ID. Returns true if found and removed. */
153
+ removeFromPlayNext(trackId: string): Promise<boolean>
154
+
155
+ /** Remove a track from the upNext queue by ID. Returns true if found and removed. */
156
+ removeFromUpNext(trackId: string): Promise<boolean>
157
+
158
+ /** Clear the entire playNext stack */
159
+ clearPlayNext(): Promise<void>
160
+
161
+ /** Clear the entire upNext queue */
162
+ clearUpNext(): Promise<void>
163
+
164
+ /**
165
+ * Reorder a temporary track within the combined virtual queue
166
+ * (playNextStack + upNextQueue). newIndex is 0-based within that combined list.
167
+ * Returns true if the track was found and moved.
168
+ */
169
+ reorderTemporaryTrack(trackId: string, newIndex: number): Promise<boolean>
170
+
171
+ /** Get the current playNext stack (LIFO order, index 0 plays first) */
172
+ getPlayNextQueue(): Promise<TrackItem[]>
173
+
174
+ /** Get the current upNext queue (FIFO order, index 0 plays first) */
175
+ getUpNextQueue(): Promise<TrackItem[]>
176
+
177
+ /**
178
+ * Register callback that fires whenever the temporary queue (playNext or upNext) changes.
179
+ */
180
+ onTemporaryQueueChange(
181
+ callback: (playNextQueue: TrackItem[], upNextQueue: TrackItem[]) => void
182
+ ): void
147
183
  }
@@ -2,7 +2,7 @@
2
2
  * Represents a single equalizer frequency band
3
3
  */
4
4
  export interface EqualizerBand {
5
- /** Band index (0-4) */
5
+ /** Band index (0-9) */
6
6
  index: number
7
7
  /** Center frequency in Hz */
8
8
  centerFrequency: number
@@ -23,7 +23,7 @@ export type PresetType = 'built-in' | 'custom'
23
23
  export interface EqualizerPreset {
24
24
  /** Unique preset name */
25
25
  name: string
26
- /** Array of 5 gain values in dB for each band */
26
+ /** Array of 10 gain values in dB for each band */
27
27
  gains: number[]
28
28
  /** Whether this is a built-in or custom preset */
29
29
  type: PresetType
@@ -56,17 +56,21 @@ export interface GainRange {
56
56
  */
57
57
  export type BuiltInPresetName =
58
58
  | 'Flat'
59
- | 'Bass Boost'
60
- | 'Bass Reducer'
61
- | 'Treble Boost'
62
- | 'Treble Reducer'
63
- | 'Vocal Boost'
64
59
  | 'Rock'
65
60
  | 'Pop'
66
- | 'Jazz'
67
61
  | 'Classical'
68
- | 'Hip Hop'
69
- | 'Electronic'
70
- | 'Acoustic'
71
- | 'R&B'
72
- | 'Loudness'
62
+ | 'Dance'
63
+ | 'Techno'
64
+ | 'Club'
65
+ | 'Live'
66
+ | 'Reggae'
67
+ | 'Full Bass'
68
+ | 'Full Treble'
69
+ | 'Full Bass & Treble'
70
+ | 'Large Hall'
71
+ | 'Party'
72
+ | 'Ska'
73
+ | 'Soft'
74
+ | 'Soft Rock'
75
+ | 'Headphones'
76
+ | 'Laptop Speakers'