react-native-nitro-player 0.6.1 → 0.7.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.
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +9 -13
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +45 -90
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +48 -182
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +21 -77
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +55 -104
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +113 -123
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ExoPlayerCore.kt +82 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/ListenerRegistry.kt +48 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerAndroidAuto.kt +62 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +153 -1887
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +122 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerNotify.kt +44 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +162 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueue.kt +165 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +161 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerSetup.kt +28 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerTempQueue.kt +121 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerUrlLoader.kt +98 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +27 -18
- package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +11 -58
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +13 -30
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +102 -162
- package/ios/HybridDownloadManager.swift +32 -26
- package/ios/HybridEqualizer.swift +48 -35
- package/ios/HybridTrackPlayer.swift +127 -102
- package/ios/core/ListenerRegistry.swift +60 -0
- package/ios/core/TrackPlayerCore.swift +130 -2356
- package/ios/core/TrackPlayerListener.swift +395 -0
- package/ios/core/TrackPlayerNotify.swift +52 -0
- package/ios/core/TrackPlayerPlayback.swift +274 -0
- package/ios/core/TrackPlayerQueue.swift +212 -0
- package/ios/core/TrackPlayerQueueBuild.swift +482 -0
- package/ios/core/TrackPlayerTempQueue.swift +167 -0
- package/ios/core/TrackPlayerUrlLoader.swift +169 -0
- package/ios/equalizer/EqualizerCore.swift +24 -89
- package/ios/media/MediaSessionManager.swift +32 -49
- package/ios/playlist/PlaylistManager.swift +2 -9
- package/ios/queue/HybridPlayerQueue.swift +69 -66
- package/lib/hooks/useDownloadedTracks.js +16 -13
- package/lib/hooks/useEqualizer.d.ts +4 -4
- package/lib/hooks/useEqualizer.js +12 -12
- package/lib/hooks/useEqualizerPresets.d.ts +3 -3
- package/lib/hooks/useEqualizerPresets.js +12 -18
- package/lib/specs/AndroidAutoMediaLibrary.nitro.d.ts +2 -2
- package/lib/specs/AudioDevices.nitro.d.ts +2 -2
- package/lib/specs/DownloadManager.nitro.d.ts +10 -10
- package/lib/specs/Equalizer.nitro.d.ts +9 -9
- package/lib/specs/TrackPlayer.nitro.d.ts +38 -16
- package/nitro.json +44 -11
- package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +63 -24
- package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadConfig.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadError.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadProgress.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadState.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadTask.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +1 -1
- package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +1 -1
- package/nitrogen/generated/android/c++/JEqualizerBand.hpp +1 -1
- package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +1 -1
- package/nitrogen/generated/android/c++/JEqualizerState.hpp +1 -1
- package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_TrackPlayerState_std__optional_Reason_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_double_double_std__optional_bool_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__double.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_TrackItem__std__vector_TrackItem_.hpp +122 -0
- package/nitrogen/generated/android/c++/JGainRange.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.cpp +49 -30
- package/nitrogen/generated/android/c++/JHybridAndroidAutoMediaLibrarySpec.hpp +21 -24
- package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.cpp +35 -28
- package/nitrogen/generated/android/c++/JHybridAudioDevicesSpec.hpp +20 -23
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +197 -93
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +29 -32
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +157 -67
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +28 -31
- package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +138 -53
- package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +27 -30
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +282 -69
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +35 -30
- package/nitrogen/generated/android/c++/JPlaybackSource.hpp +1 -1
- package/nitrogen/generated/android/c++/JPlayerConfig.hpp +1 -1
- package/nitrogen/generated/android/c++/JPlayerState.hpp +1 -1
- package/nitrogen/generated/android/c++/JPlaylist.hpp +1 -1
- package/nitrogen/generated/android/c++/JPresetType.hpp +1 -1
- package/nitrogen/generated/android/c++/JQueueOperation.hpp +1 -1
- package/nitrogen/generated/android/c++/JReason.hpp +1 -1
- package/nitrogen/generated/android/c++/JRepeatMode.hpp +1 -1
- package/nitrogen/generated/android/c++/JStorageLocation.hpp +1 -1
- package/nitrogen/generated/android/c++/JTAudioDevice.hpp +1 -1
- package/nitrogen/generated/android/c++/JTrackItem.hpp +1 -1
- package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +1 -1
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_TrackItem__std__vector_TrackItem_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrarySpec.kt +18 -20
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridAudioDevicesSpec.kt +17 -19
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +25 -28
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +25 -27
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +24 -26
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +60 -26
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Playlist.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_String.kt +0 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_TrackItem.kt +0 -6
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +74 -18
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +380 -151
- package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +10 -10
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +12 -9
- package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +23 -8
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +82 -8
- package/nitrogen/generated/ios/swift/Func_void_EqualizerState.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedPlaylist_.swift +58 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__DownloadedTrack_.swift +58 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__std__string_.swift +58 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedPlaylist_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_DownloadedTrack_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +5 -5
- package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem__std__vector_TrackItem_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +10 -10
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +141 -71
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +9 -9
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +105 -41
- package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec.swift +8 -8
- package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec_cxx.swift +95 -32
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +16 -8
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +267 -32
- package/nitrogen/generated/shared/c++/HybridAndroidAutoMediaLibrarySpec.hpp +3 -2
- package/nitrogen/generated/shared/c++/HybridAudioDevicesSpec.hpp +2 -1
- package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +10 -10
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +10 -9
- package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.hpp +9 -8
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +8 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +16 -8
- package/package.json +3 -3
- package/src/hooks/useDownloadedTracks.ts +17 -13
- package/src/hooks/useEqualizer.ts +16 -16
- package/src/hooks/useEqualizerPresets.ts +15 -21
- package/src/specs/AndroidAutoMediaLibrary.nitro.ts +2 -2
- package/src/specs/AudioDevices.nitro.ts +2 -2
- package/src/specs/DownloadManager.nitro.ts +10 -10
- package/src/specs/Equalizer.nitro.ts +9 -9
- package/src/specs/TrackPlayer.nitro.ts +52 -16
|
@@ -43,21 +43,25 @@ export function useDownloadedTracks(): UseDownloadedTracksResult {
|
|
|
43
43
|
const refresh = useCallback(() => {
|
|
44
44
|
if (!isMounted.current) return
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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) */
|
|
@@ -46,7 +46,7 @@ export function useEqualizer(): UseEqualizerResult {
|
|
|
46
46
|
|
|
47
47
|
const loadState = async () => {
|
|
48
48
|
try {
|
|
49
|
-
const state = Equalizer.getState()
|
|
49
|
+
const state = await Equalizer.getState()
|
|
50
50
|
if (isMounted.current) {
|
|
51
51
|
setIsEnabledState(state.enabled)
|
|
52
52
|
setBands(state.bands)
|
|
@@ -111,9 +111,10 @@ export function useEqualizer(): UseEqualizerResult {
|
|
|
111
111
|
return unsubscribe
|
|
112
112
|
}, [])
|
|
113
113
|
|
|
114
|
-
const setEnabled = useCallback((enabled: boolean): boolean => {
|
|
114
|
+
const setEnabled = useCallback(async (enabled: boolean): Promise<boolean> => {
|
|
115
115
|
try {
|
|
116
|
-
|
|
116
|
+
await Equalizer.setEnabled(enabled)
|
|
117
|
+
return true
|
|
117
118
|
} catch (error) {
|
|
118
119
|
console.error('[useEqualizer] Error setting enabled:', error)
|
|
119
120
|
return false
|
|
@@ -121,13 +122,13 @@ export function useEqualizer(): UseEqualizerResult {
|
|
|
121
122
|
}, [])
|
|
122
123
|
|
|
123
124
|
const setBandGain = useCallback(
|
|
124
|
-
(bandIndex: number, gainDb: number): boolean => {
|
|
125
|
-
// Optimistic update
|
|
125
|
+
async (bandIndex: number, gainDb: number): Promise<boolean> => {
|
|
126
126
|
setBands((prevBands) =>
|
|
127
127
|
prevBands.map((b) => (b.index === bandIndex ? { ...b, gainDb } : b))
|
|
128
128
|
)
|
|
129
129
|
try {
|
|
130
|
-
|
|
130
|
+
await Equalizer.setBandGain(bandIndex, gainDb)
|
|
131
|
+
return true
|
|
131
132
|
} catch (error) {
|
|
132
133
|
console.error('[useEqualizer] Error setting band gain:', error)
|
|
133
134
|
return false
|
|
@@ -136,24 +137,23 @@ export function useEqualizer(): UseEqualizerResult {
|
|
|
136
137
|
[]
|
|
137
138
|
)
|
|
138
139
|
|
|
139
|
-
const setAllBandGains = useCallback((gains: number[]): boolean => {
|
|
140
|
-
// Optimistic update
|
|
140
|
+
const setAllBandGains = useCallback(async (gains: number[]): Promise<boolean> => {
|
|
141
141
|
setBands((prevBands) =>
|
|
142
142
|
prevBands.map((b, i) => ({ ...b, gainDb: gains[i] ?? b.gainDb }))
|
|
143
143
|
)
|
|
144
144
|
try {
|
|
145
|
-
|
|
145
|
+
await Equalizer.setAllBandGains(gains)
|
|
146
|
+
return true
|
|
146
147
|
} catch (error) {
|
|
147
148
|
console.error('[useEqualizer] Error setting all band gains:', error)
|
|
148
149
|
return false
|
|
149
150
|
}
|
|
150
151
|
}, [])
|
|
151
152
|
|
|
152
|
-
const reset = useCallback(() => {
|
|
153
|
-
// Optimistic update
|
|
153
|
+
const reset = useCallback(async () => {
|
|
154
154
|
setBands((prevBands) => prevBands.map((b) => ({ ...b, gainDb: 0 })))
|
|
155
155
|
try {
|
|
156
|
-
Equalizer.reset()
|
|
156
|
+
await Equalizer.reset()
|
|
157
157
|
} catch (error) {
|
|
158
158
|
console.error('[useEqualizer] Error resetting equalizer:', error)
|
|
159
159
|
}
|
|
@@ -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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
22
|
+
* @returns Promise that resolves when the device has been set
|
|
23
23
|
*/
|
|
24
|
-
setAudioDevice(deviceId: number):
|
|
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):
|
|
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):
|
|
23
|
+
setBandGain(bandIndex: number, gainDb: number): Promise<void>
|
|
24
24
|
|
|
25
25
|
/** Set gains for all bands at once (array of 5 values) */
|
|
26
|
-
setAllBandGains(gains: number[]):
|
|
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):
|
|
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):
|
|
48
|
+
saveCustomPreset(name: string): Promise<void>
|
|
49
49
|
|
|
50
50
|
/** Delete a custom preset by name */
|
|
51
|
-
deleteCustomPreset(name: string):
|
|
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):
|
|
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):
|
|
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
|
}
|