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.
- package/README.md +444 -4
- package/android/build.gradle +4 -1
- package/android/src/main/AndroidManifest.xml +16 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +2 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +8 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +225 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +105 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +6 -6
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +37 -12
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +970 -213
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +475 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadFileManager.kt +159 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +489 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +209 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +486 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaBrowserService.kt +3 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +14 -6
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +27 -0
- package/ios/HybridDownloadManager.swift +226 -0
- package/ios/HybridEqualizer.swift +111 -0
- package/ios/HybridTrackPlayer.swift +36 -8
- package/ios/core/TrackPlayerCore.swift +998 -276
- package/ios/download/DownloadDatabase.swift +493 -0
- package/ios/download/DownloadFileManager.swift +241 -0
- package/ios/download/DownloadManagerCore.swift +923 -0
- package/ios/equalizer/EqualizerCore.swift +685 -0
- package/ios/media/MediaSessionManager.swift +40 -28
- package/ios/playlist/PlaylistManager.swift +40 -9
- package/ios/queue/HybridPlayerQueue.swift +33 -13
- package/lib/hooks/downloadCallbackManager.d.ts +36 -0
- package/lib/hooks/downloadCallbackManager.js +108 -0
- package/lib/hooks/equalizerCallbackManager.d.ts +37 -0
- package/lib/hooks/equalizerCallbackManager.js +109 -0
- package/lib/hooks/index.d.ts +16 -0
- package/lib/hooks/index.js +10 -0
- package/lib/hooks/useActualQueue.d.ts +48 -0
- package/lib/hooks/useActualQueue.js +98 -0
- package/lib/hooks/useDownloadActions.d.ts +26 -0
- package/lib/hooks/useDownloadActions.js +117 -0
- package/lib/hooks/useDownloadProgress.d.ts +25 -0
- package/lib/hooks/useDownloadProgress.js +79 -0
- package/lib/hooks/useDownloadStorage.d.ts +19 -0
- package/lib/hooks/useDownloadStorage.js +60 -0
- package/lib/hooks/useDownloadedTracks.d.ts +25 -0
- package/lib/hooks/useDownloadedTracks.js +69 -0
- package/lib/hooks/useEqualizer.d.ts +25 -0
- package/lib/hooks/useEqualizer.js +124 -0
- package/lib/hooks/useEqualizerPresets.d.ts +22 -0
- package/lib/hooks/useEqualizerPresets.js +96 -0
- package/lib/hooks/useNowPlaying.js +3 -2
- package/lib/hooks/useOnChangeTrack.js +15 -12
- package/lib/hooks/useOnPlaybackStateChange.js +16 -13
- package/lib/hooks/usePlaylist.d.ts +48 -0
- package/lib/hooks/usePlaylist.js +136 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/specs/DownloadManager.nitro.d.ts +152 -0
- package/lib/specs/DownloadManager.nitro.js +1 -0
- package/lib/specs/Equalizer.nitro.d.ts +43 -0
- package/lib/specs/Equalizer.nitro.js +1 -0
- package/lib/specs/TrackPlayer.nitro.d.ts +6 -2
- package/lib/types/DownloadTypes.d.ts +110 -0
- package/lib/types/DownloadTypes.js +1 -0
- package/lib/types/EqualizerTypes.d.ts +52 -0
- package/lib/types/EqualizerTypes.js +1 -0
- package/lib/types/PlayerQueue.d.ts +4 -0
- package/nitro.json +8 -0
- package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +10 -1
- package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +32 -2
- package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +65 -0
- package/nitrogen/generated/android/c++/JDownloadConfig.hpp +92 -0
- package/nitrogen/generated/android/c++/JDownloadError.hpp +71 -0
- package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +74 -0
- package/nitrogen/generated/android/c++/JDownloadProgress.hpp +79 -0
- package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +81 -0
- package/nitrogen/generated/android/c++/JDownloadState.hpp +71 -0
- package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +73 -0
- package/nitrogen/generated/android/c++/JDownloadTask.hpp +108 -0
- package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +111 -0
- package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +92 -0
- package/nitrogen/generated/android/c++/JEqualizerBand.hpp +69 -0
- package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +78 -0
- package/nitrogen/generated/android/c++/JEqualizerState.hpp +91 -0
- package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +89 -0
- package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +81 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +83 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +97 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -0
- package/nitrogen/generated/android/c++/JGainRange.hpp +61 -0
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +470 -0
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +99 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +204 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +82 -0
- package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +2 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +117 -15
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +6 -2
- package/nitrogen/generated/android/c++/JPlaybackSource.hpp +62 -0
- package/nitrogen/generated/android/c++/JPlayerState.hpp +11 -3
- package/nitrogen/generated/android/c++/JPlaylist.hpp +2 -0
- package/nitrogen/generated/android/c++/JPresetType.hpp +59 -0
- package/nitrogen/generated/android/c++/JStorageLocation.hpp +59 -0
- package/nitrogen/generated/android/c++/JTrackItem.hpp +9 -3
- package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +74 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +84 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +85 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +80 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +2 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +2 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CurrentPlayingType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadConfig.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadError.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadErrorReason.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadProgress.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadQueueStatus.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadState.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadStorageInfo.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadTask.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedPlaylist.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedTrack.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerBand.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerPreset.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerState.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadProgress.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadedTrack.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_EqualizerBand_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/GainRange.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +210 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +141 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +19 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlaybackSource.kt +22 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerState.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PresetType.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/StorageLocation.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackItem.kt +7 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackPlayerState.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +59 -0
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +138 -8
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +1046 -121
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +66 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +16 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +30 -0
- package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +386 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +223 -0
- package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +1 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +46 -6
- package/nitrogen/generated/ios/swift/CurrentPlayingType.swift +48 -0
- package/nitrogen/generated/ios/swift/DownloadConfig.swift +270 -0
- package/nitrogen/generated/ios/swift/DownloadError.swift +69 -0
- package/nitrogen/generated/ios/swift/DownloadErrorReason.swift +60 -0
- package/nitrogen/generated/ios/swift/DownloadProgress.swift +91 -0
- package/nitrogen/generated/ios/swift/DownloadQueueStatus.swift +102 -0
- package/nitrogen/generated/ios/swift/DownloadState.swift +56 -0
- package/nitrogen/generated/ios/swift/DownloadStorageInfo.swift +80 -0
- package/nitrogen/generated/ios/swift/DownloadTask.swift +315 -0
- package/nitrogen/generated/ios/swift/DownloadedPlaylist.swift +103 -0
- package/nitrogen/generated/ios/swift/DownloadedTrack.swift +147 -0
- package/nitrogen/generated/ios/swift/EqualizerBand.swift +69 -0
- package/nitrogen/generated/ios/swift/EqualizerPreset.swift +70 -0
- package/nitrogen/generated/ios/swift/EqualizerState.swift +115 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadProgress.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadStorageInfo.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadedTrack.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_PlayerState.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__std__string__.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +47 -0
- package/nitrogen/generated/ios/swift/GainRange.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +90 -0
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +705 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +73 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +396 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +6 -2
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +105 -8
- package/nitrogen/generated/ios/swift/PlaybackSource.swift +44 -0
- package/nitrogen/generated/ios/swift/PlayerState.swift +13 -2
- package/nitrogen/generated/ios/swift/PresetType.swift +40 -0
- package/nitrogen/generated/ios/swift/StorageLocation.swift +40 -0
- package/nitrogen/generated/ios/swift/TrackItem.swift +31 -1
- package/nitrogen/generated/ios/swift/TrackPlayerState.swift +4 -4
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadError.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadTask.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedPlaylist.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedTrack.swift +18 -0
- package/nitrogen/generated/shared/c++/CurrentPlayingType.hpp +84 -0
- package/nitrogen/generated/shared/c++/DownloadConfig.hpp +108 -0
- package/nitrogen/generated/shared/c++/DownloadError.hpp +89 -0
- package/nitrogen/generated/shared/c++/DownloadErrorReason.hpp +96 -0
- package/nitrogen/generated/shared/c++/DownloadProgress.hpp +97 -0
- package/nitrogen/generated/shared/c++/DownloadQueueStatus.hpp +99 -0
- package/nitrogen/generated/shared/c++/DownloadState.hpp +92 -0
- package/nitrogen/generated/shared/c++/DownloadStorageInfo.hpp +91 -0
- package/nitrogen/generated/shared/c++/DownloadTask.hpp +122 -0
- package/nitrogen/generated/shared/c++/DownloadedPlaylist.hpp +101 -0
- package/nitrogen/generated/shared/c++/DownloadedTrack.hpp +107 -0
- package/nitrogen/generated/shared/c++/EqualizerBand.hpp +87 -0
- package/nitrogen/generated/shared/c++/EqualizerPreset.hpp +86 -0
- package/nitrogen/generated/shared/c++/EqualizerState.hpp +89 -0
- package/nitrogen/generated/shared/c++/GainRange.hpp +79 -0
- package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp +55 -0
- package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +134 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp +38 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +4 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +11 -5
- package/nitrogen/generated/shared/c++/PlaybackSource.hpp +80 -0
- package/nitrogen/generated/shared/c++/PlayerState.hpp +9 -2
- package/nitrogen/generated/shared/c++/PresetType.hpp +76 -0
- package/nitrogen/generated/shared/c++/StorageLocation.hpp +76 -0
- package/nitrogen/generated/shared/c++/TrackItem.hpp +7 -2
- package/nitrogen/generated/shared/c++/TrackPlayerState.hpp +5 -5
- package/package.json +1 -1
- package/src/hooks/downloadCallbackManager.ts +149 -0
- package/src/hooks/equalizerCallbackManager.ts +138 -0
- package/src/hooks/index.ts +23 -0
- package/src/hooks/useActualQueue.ts +116 -0
- package/src/hooks/useDownloadActions.ts +179 -0
- package/src/hooks/useDownloadProgress.ts +126 -0
- package/src/hooks/useDownloadStorage.ts +84 -0
- package/src/hooks/useDownloadedTracks.ts +138 -0
- package/src/hooks/useEqualizer.ts +173 -0
- package/src/hooks/useEqualizerPresets.ts +140 -0
- package/src/hooks/useNowPlaying.ts +3 -2
- package/src/hooks/useOnChangeTrack.ts +15 -11
- package/src/hooks/useOnPlaybackStateChange.ts +19 -15
- package/src/hooks/usePlaylist.ts +161 -0
- package/src/index.ts +12 -0
- package/src/specs/DownloadManager.nitro.ts +203 -0
- package/src/specs/Equalizer.nitro.ts +69 -0
- package/src/specs/TrackPlayer.nitro.ts +6 -2
- package/src/types/DownloadTypes.ts +135 -0
- package/src/types/EqualizerTypes.ts +72 -0
- package/src/types/PlayerQueue.ts +9 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { DownloadManager } from '../index'
|
|
2
|
+
import type {
|
|
3
|
+
DownloadProgress,
|
|
4
|
+
DownloadState,
|
|
5
|
+
DownloadedTrack,
|
|
6
|
+
DownloadError,
|
|
7
|
+
} from '../types/DownloadTypes'
|
|
8
|
+
|
|
9
|
+
type ProgressCallback = (progress: DownloadProgress) => void
|
|
10
|
+
type StateChangeCallback = (
|
|
11
|
+
downloadId: string,
|
|
12
|
+
trackId: string,
|
|
13
|
+
state: DownloadState,
|
|
14
|
+
error?: DownloadError
|
|
15
|
+
) => void
|
|
16
|
+
type CompleteCallback = (downloadedTrack: DownloadedTrack) => void
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Internal subscription manager for download callbacks.
|
|
20
|
+
* Allows multiple hooks to subscribe to a single native callback.
|
|
21
|
+
*/
|
|
22
|
+
class DownloadCallbackSubscriptionManager {
|
|
23
|
+
private progressSubscribers = new Set<ProgressCallback>()
|
|
24
|
+
private stateChangeSubscribers = new Set<StateChangeCallback>()
|
|
25
|
+
private completeSubscribers = new Set<CompleteCallback>()
|
|
26
|
+
|
|
27
|
+
private isProgressRegistered = false
|
|
28
|
+
private isStateChangeRegistered = false
|
|
29
|
+
private isCompleteRegistered = false
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Subscribe to download progress updates
|
|
33
|
+
* @returns Unsubscribe function
|
|
34
|
+
*/
|
|
35
|
+
subscribeToProgress(callback: ProgressCallback): () => void {
|
|
36
|
+
this.progressSubscribers.add(callback)
|
|
37
|
+
this.ensureProgressRegistered()
|
|
38
|
+
|
|
39
|
+
return () => {
|
|
40
|
+
this.progressSubscribers.delete(callback)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Subscribe to download state changes
|
|
46
|
+
* @returns Unsubscribe function
|
|
47
|
+
*/
|
|
48
|
+
subscribeToStateChange(callback: StateChangeCallback): () => void {
|
|
49
|
+
this.stateChangeSubscribers.add(callback)
|
|
50
|
+
this.ensureStateChangeRegistered()
|
|
51
|
+
|
|
52
|
+
return () => {
|
|
53
|
+
this.stateChangeSubscribers.delete(callback)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Subscribe to download completions
|
|
59
|
+
* @returns Unsubscribe function
|
|
60
|
+
*/
|
|
61
|
+
subscribeToComplete(callback: CompleteCallback): () => void {
|
|
62
|
+
this.completeSubscribers.add(callback)
|
|
63
|
+
this.ensureCompleteRegistered()
|
|
64
|
+
|
|
65
|
+
return () => {
|
|
66
|
+
this.completeSubscribers.delete(callback)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private ensureProgressRegistered(): void {
|
|
71
|
+
if (this.isProgressRegistered) return
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
DownloadManager.onDownloadProgress((progress) => {
|
|
75
|
+
this.progressSubscribers.forEach((subscriber) => {
|
|
76
|
+
try {
|
|
77
|
+
subscriber(progress)
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.error(
|
|
80
|
+
'[DownloadCallbackManager] Error in progress subscriber:',
|
|
81
|
+
error
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
this.isProgressRegistered = true
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.error(
|
|
89
|
+
'[DownloadCallbackManager] Failed to register progress callback:',
|
|
90
|
+
error
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private ensureStateChangeRegistered(): void {
|
|
96
|
+
if (this.isStateChangeRegistered) return
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
DownloadManager.onDownloadStateChange(
|
|
100
|
+
(downloadId, trackId, state, error) => {
|
|
101
|
+
this.stateChangeSubscribers.forEach((subscriber) => {
|
|
102
|
+
try {
|
|
103
|
+
subscriber(downloadId, trackId, state, error)
|
|
104
|
+
} catch (err) {
|
|
105
|
+
console.error(
|
|
106
|
+
'[DownloadCallbackManager] Error in state change subscriber:',
|
|
107
|
+
err
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
this.isStateChangeRegistered = true
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.error(
|
|
116
|
+
'[DownloadCallbackManager] Failed to register state change callback:',
|
|
117
|
+
error
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private ensureCompleteRegistered(): void {
|
|
123
|
+
if (this.isCompleteRegistered) return
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
DownloadManager.onDownloadComplete((downloadedTrack) => {
|
|
127
|
+
this.completeSubscribers.forEach((subscriber) => {
|
|
128
|
+
try {
|
|
129
|
+
subscriber(downloadedTrack)
|
|
130
|
+
} catch (error) {
|
|
131
|
+
console.error(
|
|
132
|
+
'[DownloadCallbackManager] Error in complete subscriber:',
|
|
133
|
+
error
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
this.isCompleteRegistered = true
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error(
|
|
141
|
+
'[DownloadCallbackManager] Failed to register complete callback:',
|
|
142
|
+
error
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Export singleton instance
|
|
149
|
+
export const downloadCallbackManager = new DownloadCallbackSubscriptionManager()
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Equalizer } from '../index'
|
|
2
|
+
import type { EqualizerBand } from '../types/EqualizerTypes'
|
|
3
|
+
|
|
4
|
+
type EnabledChangeCallback = (enabled: boolean) => void
|
|
5
|
+
type BandChangeCallback = (bands: EqualizerBand[]) => void
|
|
6
|
+
type PresetChangeCallback = (presetName: string | null) => void
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal subscription manager that allows multiple hooks to subscribe
|
|
10
|
+
* to equalizer callbacks. This solves the problem where registering
|
|
11
|
+
* a new callback overwrites the previous one.
|
|
12
|
+
*/
|
|
13
|
+
class EqualizerCallbackSubscriptionManager {
|
|
14
|
+
private enabledChangeSubscribers = new Set<EnabledChangeCallback>()
|
|
15
|
+
private bandChangeSubscribers = new Set<BandChangeCallback>()
|
|
16
|
+
private presetChangeSubscribers = new Set<PresetChangeCallback>()
|
|
17
|
+
private isEnabledChangeRegistered = false
|
|
18
|
+
private isBandChangeRegistered = false
|
|
19
|
+
private isPresetChangeRegistered = false
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Subscribe to enabled state changes
|
|
23
|
+
* @returns Unsubscribe function
|
|
24
|
+
*/
|
|
25
|
+
subscribeToEnabledChange(callback: EnabledChangeCallback): () => void {
|
|
26
|
+
this.enabledChangeSubscribers.add(callback)
|
|
27
|
+
this.ensureEnabledChangeRegistered()
|
|
28
|
+
|
|
29
|
+
return () => {
|
|
30
|
+
this.enabledChangeSubscribers.delete(callback)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to band changes
|
|
36
|
+
* @returns Unsubscribe function
|
|
37
|
+
*/
|
|
38
|
+
subscribeToBandChange(callback: BandChangeCallback): () => void {
|
|
39
|
+
this.bandChangeSubscribers.add(callback)
|
|
40
|
+
this.ensureBandChangeRegistered()
|
|
41
|
+
|
|
42
|
+
return () => {
|
|
43
|
+
this.bandChangeSubscribers.delete(callback)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Subscribe to preset changes
|
|
49
|
+
* @returns Unsubscribe function
|
|
50
|
+
*/
|
|
51
|
+
subscribeToPresetChange(callback: PresetChangeCallback): () => void {
|
|
52
|
+
this.presetChangeSubscribers.add(callback)
|
|
53
|
+
this.ensurePresetChangeRegistered()
|
|
54
|
+
|
|
55
|
+
return () => {
|
|
56
|
+
this.presetChangeSubscribers.delete(callback)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private ensureEnabledChangeRegistered(): void {
|
|
61
|
+
if (this.isEnabledChangeRegistered) return
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
Equalizer.onEnabledChange((enabled) => {
|
|
65
|
+
this.enabledChangeSubscribers.forEach((subscriber) => {
|
|
66
|
+
try {
|
|
67
|
+
subscriber(enabled)
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error(
|
|
70
|
+
'[EqualizerCallbackManager] Error in enabled change subscriber:',
|
|
71
|
+
error
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
this.isEnabledChangeRegistered = true
|
|
77
|
+
} catch (error) {
|
|
78
|
+
console.error(
|
|
79
|
+
'[EqualizerCallbackManager] Failed to register enabled change callback:',
|
|
80
|
+
error
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private ensureBandChangeRegistered(): void {
|
|
86
|
+
if (this.isBandChangeRegistered) return
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
Equalizer.onBandChange((bands) => {
|
|
90
|
+
this.bandChangeSubscribers.forEach((subscriber) => {
|
|
91
|
+
try {
|
|
92
|
+
subscriber(bands)
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.error(
|
|
95
|
+
'[EqualizerCallbackManager] Error in band change subscriber:',
|
|
96
|
+
error
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
this.isBandChangeRegistered = true
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(
|
|
104
|
+
'[EqualizerCallbackManager] Failed to register band change callback:',
|
|
105
|
+
error
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private ensurePresetChangeRegistered(): void {
|
|
111
|
+
if (this.isPresetChangeRegistered) return
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
Equalizer.onPresetChange((presetName) => {
|
|
115
|
+
this.presetChangeSubscribers.forEach((subscriber) => {
|
|
116
|
+
try {
|
|
117
|
+
subscriber(presetName)
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error(
|
|
120
|
+
'[EqualizerCallbackManager] Error in preset change subscriber:',
|
|
121
|
+
error
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
})
|
|
126
|
+
this.isPresetChangeRegistered = true
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error(
|
|
129
|
+
'[EqualizerCallbackManager] Failed to register preset change callback:',
|
|
130
|
+
error
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Export singleton instance
|
|
137
|
+
export const equalizerCallbackManager =
|
|
138
|
+
new EqualizerCallbackSubscriptionManager()
|
package/src/hooks/index.ts
CHANGED
|
@@ -7,3 +7,26 @@ export { useOnPlaybackProgressChange } from './useOnPlaybackProgressChange'
|
|
|
7
7
|
export { useAndroidAutoConnection } from './useAndroidAutoConnection'
|
|
8
8
|
export { useAudioDevices } from './useAudioDevices'
|
|
9
9
|
export { useNowPlaying } from './useNowPlaying'
|
|
10
|
+
export { usePlaylist } from './usePlaylist'
|
|
11
|
+
export type { UsePlaylistResult } from './usePlaylist'
|
|
12
|
+
export { useActualQueue } from './useActualQueue'
|
|
13
|
+
export type { UseActualQueueResult } from './useActualQueue'
|
|
14
|
+
|
|
15
|
+
// Download hooks
|
|
16
|
+
export { useDownloadProgress } from './useDownloadProgress'
|
|
17
|
+
export type {
|
|
18
|
+
UseDownloadProgressOptions,
|
|
19
|
+
UseDownloadProgressResult,
|
|
20
|
+
} from './useDownloadProgress'
|
|
21
|
+
export { useDownloadedTracks } from './useDownloadedTracks'
|
|
22
|
+
export type { UseDownloadedTracksResult } from './useDownloadedTracks'
|
|
23
|
+
export { useDownloadActions } from './useDownloadActions'
|
|
24
|
+
export type { UseDownloadActionsResult } from './useDownloadActions'
|
|
25
|
+
export { useDownloadStorage } from './useDownloadStorage'
|
|
26
|
+
export type { UseDownloadStorageResult } from './useDownloadStorage'
|
|
27
|
+
|
|
28
|
+
// Equalizer hooks
|
|
29
|
+
export { useEqualizer } from './useEqualizer'
|
|
30
|
+
export type { UseEqualizerResult } from './useEqualizer'
|
|
31
|
+
export { useEqualizerPresets } from './useEqualizerPresets'
|
|
32
|
+
export type { UseEqualizerPresetsResult } from './useEqualizerPresets'
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { useEffect, useState, useRef, useCallback } from 'react'
|
|
2
|
+
import { TrackPlayer } from '../index'
|
|
3
|
+
import { callbackManager } from './callbackManager'
|
|
4
|
+
import type { TrackItem } from '../types/PlayerQueue'
|
|
5
|
+
|
|
6
|
+
export interface UseActualQueueResult {
|
|
7
|
+
/** The current queue in playback order */
|
|
8
|
+
queue: TrackItem[]
|
|
9
|
+
/** Manually refresh the queue */
|
|
10
|
+
refreshQueue: () => void
|
|
11
|
+
/** Whether the queue is currently loading */
|
|
12
|
+
isLoading: boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Hook to get the actual playback queue including temporary tracks
|
|
17
|
+
*
|
|
18
|
+
* Returns the complete queue in playback order:
|
|
19
|
+
* [tracks_before_current] + [current] + [playNext_stack] + [upNext_queue] + [remaining_tracks]
|
|
20
|
+
*
|
|
21
|
+
* Auto-updates when:
|
|
22
|
+
* - Track changes
|
|
23
|
+
* - Playback state changes
|
|
24
|
+
*
|
|
25
|
+
* Call `refreshQueue()` after adding tracks via `playNext()` or `addToUpNext()`
|
|
26
|
+
* to immediately see the updated queue.
|
|
27
|
+
*
|
|
28
|
+
* @returns Object containing queue array, refresh function, and loading state
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* function QueueView() {
|
|
33
|
+
* const { queue, refreshQueue, isLoading } = useActualQueue();
|
|
34
|
+
*
|
|
35
|
+
* const handleAddToUpNext = (trackId: string) => {
|
|
36
|
+
* TrackPlayer.addToUpNext(trackId);
|
|
37
|
+
* // Refresh queue after adding track
|
|
38
|
+
* setTimeout(refreshQueue, 100);
|
|
39
|
+
* };
|
|
40
|
+
*
|
|
41
|
+
* return (
|
|
42
|
+
* <ScrollView>
|
|
43
|
+
* {queue.map((track, index) => (
|
|
44
|
+
* <Text key={track.id}>
|
|
45
|
+
* {index + 1}. {track.title}
|
|
46
|
+
* </Text>
|
|
47
|
+
* ))}
|
|
48
|
+
* </ScrollView>
|
|
49
|
+
* );
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function useActualQueue(): UseActualQueueResult {
|
|
54
|
+
const [queue, setQueue] = useState<TrackItem[]>([])
|
|
55
|
+
const [isLoading, setIsLoading] = useState(true)
|
|
56
|
+
const isMounted = useRef(true)
|
|
57
|
+
|
|
58
|
+
const updateQueue = useCallback(async () => {
|
|
59
|
+
if (!isMounted.current) return
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
const actualQueue = await TrackPlayer.getActualQueue()
|
|
63
|
+
if (isMounted.current) {
|
|
64
|
+
setQueue(actualQueue)
|
|
65
|
+
setIsLoading(false)
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error('[useActualQueue] Error getting queue:', error)
|
|
69
|
+
if (isMounted.current) {
|
|
70
|
+
setQueue([])
|
|
71
|
+
setIsLoading(false)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}, [])
|
|
75
|
+
|
|
76
|
+
const refreshQueue = useCallback(() => {
|
|
77
|
+
if (!isMounted.current) return
|
|
78
|
+
setIsLoading(true)
|
|
79
|
+
updateQueue()
|
|
80
|
+
}, [updateQueue])
|
|
81
|
+
|
|
82
|
+
// Initialize queue
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
isMounted.current = true
|
|
85
|
+
updateQueue()
|
|
86
|
+
|
|
87
|
+
return () => {
|
|
88
|
+
isMounted.current = false
|
|
89
|
+
}
|
|
90
|
+
}, [updateQueue])
|
|
91
|
+
|
|
92
|
+
// Update queue on track changes (with slight delay to ensure native side has updated)
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
const unsubscribe = callbackManager.subscribeToTrackChange(() => {
|
|
95
|
+
// Small delay to ensure native queue is updated
|
|
96
|
+
setTimeout(updateQueue, 50)
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
return () => {
|
|
100
|
+
unsubscribe()
|
|
101
|
+
}
|
|
102
|
+
}, [updateQueue])
|
|
103
|
+
|
|
104
|
+
// Update queue on playback state changes
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
const unsubscribe = callbackManager.subscribeToPlaybackState(() => {
|
|
107
|
+
updateQueue()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
return () => {
|
|
111
|
+
unsubscribe()
|
|
112
|
+
}
|
|
113
|
+
}, [updateQueue])
|
|
114
|
+
|
|
115
|
+
return { queue, refreshQueue, isLoading }
|
|
116
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react'
|
|
2
|
+
import { DownloadManager } from '../index'
|
|
3
|
+
import type { DownloadConfig, PlaybackSource } from '../types/DownloadTypes'
|
|
4
|
+
import type { TrackItem } from '../types/PlayerQueue'
|
|
5
|
+
|
|
6
|
+
export interface UseDownloadActionsResult {
|
|
7
|
+
// Download actions
|
|
8
|
+
downloadTrack: (track: TrackItem, playlistId?: string) => Promise<string>
|
|
9
|
+
downloadPlaylist: (
|
|
10
|
+
playlistId: string,
|
|
11
|
+
tracks: TrackItem[]
|
|
12
|
+
) => Promise<string[]>
|
|
13
|
+
|
|
14
|
+
// Control actions
|
|
15
|
+
pauseDownload: (downloadId: string) => Promise<void>
|
|
16
|
+
resumeDownload: (downloadId: string) => Promise<void>
|
|
17
|
+
cancelDownload: (downloadId: string) => Promise<void>
|
|
18
|
+
retryDownload: (downloadId: string) => Promise<void>
|
|
19
|
+
|
|
20
|
+
// Bulk control
|
|
21
|
+
pauseAll: () => Promise<void>
|
|
22
|
+
resumeAll: () => Promise<void>
|
|
23
|
+
cancelAll: () => Promise<void>
|
|
24
|
+
|
|
25
|
+
// Delete actions
|
|
26
|
+
deleteTrack: (trackId: string) => Promise<void>
|
|
27
|
+
deletePlaylist: (playlistId: string) => Promise<void>
|
|
28
|
+
deleteAll: () => Promise<void>
|
|
29
|
+
|
|
30
|
+
// Configuration
|
|
31
|
+
configure: (config: DownloadConfig) => void
|
|
32
|
+
setPlaybackSourcePreference: (preference: PlaybackSource) => void
|
|
33
|
+
getPlaybackSourcePreference: () => PlaybackSource
|
|
34
|
+
|
|
35
|
+
// Loading states
|
|
36
|
+
isDownloading: boolean
|
|
37
|
+
isDeleting: boolean
|
|
38
|
+
error: Error | null
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Hook for download actions (download, pause, resume, cancel, delete)
|
|
43
|
+
*/
|
|
44
|
+
export function useDownloadActions(): UseDownloadActionsResult {
|
|
45
|
+
const [isDownloading, setIsDownloading] = useState(false)
|
|
46
|
+
const [isDeleting, setIsDeleting] = useState(false)
|
|
47
|
+
const [error, setError] = useState<Error | null>(null)
|
|
48
|
+
|
|
49
|
+
const downloadTrack = useCallback(
|
|
50
|
+
async (track: TrackItem, playlistId?: string) => {
|
|
51
|
+
setIsDownloading(true)
|
|
52
|
+
setError(null)
|
|
53
|
+
try {
|
|
54
|
+
const downloadId = await DownloadManager.downloadTrack(
|
|
55
|
+
track,
|
|
56
|
+
playlistId
|
|
57
|
+
)
|
|
58
|
+
return downloadId
|
|
59
|
+
} catch (e) {
|
|
60
|
+
setError(e as Error)
|
|
61
|
+
throw e
|
|
62
|
+
} finally {
|
|
63
|
+
setIsDownloading(false)
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[]
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
const downloadPlaylist = useCallback(
|
|
70
|
+
async (playlistId: string, tracks: TrackItem[]) => {
|
|
71
|
+
setIsDownloading(true)
|
|
72
|
+
setError(null)
|
|
73
|
+
try {
|
|
74
|
+
const downloadIds = await DownloadManager.downloadPlaylist(
|
|
75
|
+
playlistId,
|
|
76
|
+
tracks
|
|
77
|
+
)
|
|
78
|
+
return downloadIds
|
|
79
|
+
} catch (e) {
|
|
80
|
+
setError(e as Error)
|
|
81
|
+
throw e
|
|
82
|
+
} finally {
|
|
83
|
+
setIsDownloading(false)
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
[]
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
const pauseDownload = useCallback(async (downloadId: string) => {
|
|
90
|
+
await DownloadManager.pauseDownload(downloadId)
|
|
91
|
+
}, [])
|
|
92
|
+
|
|
93
|
+
const resumeDownload = useCallback(async (downloadId: string) => {
|
|
94
|
+
await DownloadManager.resumeDownload(downloadId)
|
|
95
|
+
}, [])
|
|
96
|
+
|
|
97
|
+
const cancelDownload = useCallback(async (downloadId: string) => {
|
|
98
|
+
await DownloadManager.cancelDownload(downloadId)
|
|
99
|
+
}, [])
|
|
100
|
+
|
|
101
|
+
const retryDownload = useCallback(async (downloadId: string) => {
|
|
102
|
+
await DownloadManager.retryDownload(downloadId)
|
|
103
|
+
}, [])
|
|
104
|
+
|
|
105
|
+
const pauseAll = useCallback(async () => {
|
|
106
|
+
await DownloadManager.pauseAllDownloads()
|
|
107
|
+
}, [])
|
|
108
|
+
|
|
109
|
+
const resumeAll = useCallback(async () => {
|
|
110
|
+
await DownloadManager.resumeAllDownloads()
|
|
111
|
+
}, [])
|
|
112
|
+
|
|
113
|
+
const cancelAll = useCallback(async () => {
|
|
114
|
+
await DownloadManager.cancelAllDownloads()
|
|
115
|
+
}, [])
|
|
116
|
+
|
|
117
|
+
const deleteTrack = useCallback(async (trackId: string) => {
|
|
118
|
+
setIsDeleting(true)
|
|
119
|
+
try {
|
|
120
|
+
await DownloadManager.deleteDownloadedTrack(trackId)
|
|
121
|
+
} finally {
|
|
122
|
+
setIsDeleting(false)
|
|
123
|
+
}
|
|
124
|
+
}, [])
|
|
125
|
+
|
|
126
|
+
const deletePlaylist = useCallback(async (playlistId: string) => {
|
|
127
|
+
setIsDeleting(true)
|
|
128
|
+
try {
|
|
129
|
+
await DownloadManager.deleteDownloadedPlaylist(playlistId)
|
|
130
|
+
} finally {
|
|
131
|
+
setIsDeleting(false)
|
|
132
|
+
}
|
|
133
|
+
}, [])
|
|
134
|
+
|
|
135
|
+
const deleteAll = useCallback(async () => {
|
|
136
|
+
setIsDeleting(true)
|
|
137
|
+
try {
|
|
138
|
+
await DownloadManager.deleteAllDownloads()
|
|
139
|
+
} finally {
|
|
140
|
+
setIsDeleting(false)
|
|
141
|
+
}
|
|
142
|
+
}, [])
|
|
143
|
+
|
|
144
|
+
const configure = useCallback((config: DownloadConfig) => {
|
|
145
|
+
DownloadManager.configure(config)
|
|
146
|
+
}, [])
|
|
147
|
+
|
|
148
|
+
const setPlaybackSourcePreference = useCallback(
|
|
149
|
+
(preference: PlaybackSource) => {
|
|
150
|
+
DownloadManager.setPlaybackSourcePreference(preference)
|
|
151
|
+
},
|
|
152
|
+
[]
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
const getPlaybackSourcePreference = useCallback(() => {
|
|
156
|
+
return DownloadManager.getPlaybackSourcePreference()
|
|
157
|
+
}, [])
|
|
158
|
+
|
|
159
|
+
return {
|
|
160
|
+
downloadTrack,
|
|
161
|
+
downloadPlaylist,
|
|
162
|
+
pauseDownload,
|
|
163
|
+
resumeDownload,
|
|
164
|
+
cancelDownload,
|
|
165
|
+
retryDownload,
|
|
166
|
+
pauseAll,
|
|
167
|
+
resumeAll,
|
|
168
|
+
cancelAll,
|
|
169
|
+
deleteTrack,
|
|
170
|
+
deletePlaylist,
|
|
171
|
+
deleteAll,
|
|
172
|
+
configure,
|
|
173
|
+
setPlaybackSourcePreference,
|
|
174
|
+
getPlaybackSourcePreference,
|
|
175
|
+
isDownloading,
|
|
176
|
+
isDeleting,
|
|
177
|
+
error,
|
|
178
|
+
}
|
|
179
|
+
}
|