react-native-nitro-player 1.6.0 → 1.7.0-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.
- package/README.md +6 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +9 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +23 -3
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +23 -3
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +34 -17
- package/android/src/main/java/com/margelo/nitro/nitroplayer/connection/AndroidAutoConnectionDetector.kt +22 -22
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +21 -9
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +19 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +33 -19
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +0 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +9 -5
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +96 -56
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +62 -22
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/TrackItemJson.kt +60 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +9 -9
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/AuthAwareHttpDataSourceFactory.kt +12 -3
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/ExoPlayerBuilder.kt +4 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +99 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/PlaybackService.kt +7 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +85 -70
- package/android/src/main/res/values/strings.xml +7 -0
- package/ios/HybridDownloadManager.swift +13 -3
- package/ios/HybridTrackPlayer.swift +4 -2
- package/ios/core/TrackPlayerCast.swift +32 -1
- package/ios/core/TrackPlayerCore.swift +19 -3
- package/ios/core/TrackPlayerListener.swift +15 -16
- package/ios/core/TrackPlayerNotify.swift +11 -11
- package/ios/core/TrackPlayerPlayback.swift +54 -16
- package/ios/core/TrackPlayerQueueBuild.swift +14 -2
- package/ios/core/TrackPlayerTempQueue.swift +1 -0
- package/ios/core/TrackPlayerUrlLoader.swift +11 -3
- package/ios/download/DownloadDatabase.swift +16 -5
- package/ios/download/DownloadFileManager.swift +12 -15
- package/ios/download/DownloadManagerCore.swift +61 -16
- package/ios/equalizer/EqualizerCore.swift +37 -9
- package/ios/media/MediaSessionManager.swift +89 -4
- package/ios/playlist/PlaylistManager.swift +47 -46
- package/ios/queue/HybridPlayerQueue.swift +28 -7
- package/lib/hooks/callbackManager.d.ts +9 -0
- package/lib/hooks/callbackManager.js +33 -0
- package/lib/hooks/useActualQueue.js +18 -6
- package/lib/hooks/useAndroidAutoConnection.js +2 -4
- package/lib/hooks/useAudioDevices.js +21 -24
- package/lib/hooks/useDownloadActions.js +38 -16
- package/lib/hooks/useDownloadProgress.js +20 -14
- package/lib/hooks/useDownloadStorage.js +1 -1
- package/lib/hooks/useNowPlaying.js +32 -6
- package/lib/hooks/useOnSeek.js +2 -2
- package/lib/hooks/usePlaylist.js +6 -15
- package/lib/specs/TrackPlayer.nitro.d.ts +1 -2
- package/lib/types/PlayerQueue.d.ts +8 -0
- package/nitrogen/generated/android/c++/JPlayerConfig.hpp +9 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerConfig.kt +8 -2
- package/nitrogen/generated/ios/swift/PlayerConfig.swift +37 -1
- package/nitrogen/generated/shared/c++/PlayerConfig.hpp +9 -1
- package/package.json +1 -1
- package/src/hooks/callbackManager.ts +44 -0
- package/src/hooks/useActualQueue.ts +18 -6
- package/src/hooks/useAndroidAutoConnection.ts +6 -6
- package/src/hooks/useAudioDevices.ts +21 -24
- package/src/hooks/useDownloadActions.ts +56 -26
- package/src/hooks/useDownloadProgress.ts +22 -19
- package/src/hooks/useDownloadStorage.ts +4 -3
- package/src/hooks/useNowPlaying.ts +34 -6
- package/src/hooks/useOnSeek.ts +2 -2
- package/src/hooks/usePlaylist.ts +6 -14
- package/src/specs/TrackPlayer.nitro.ts +1 -2
- package/src/types/PlayerQueue.ts +8 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroPlayerNotificationProvider.kt +0 -200
- package/android/src/main/java/com/margelo/nitro/nitroplayer/queue/Queue.kt +0 -94
- package/android/src/main/java/com/margelo/nitro/nitroplayer/queue/QueueManager.kt +0 -143
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
package com.margelo.nitro.nitroplayer.queue
|
|
2
|
-
|
|
3
|
-
import com.margelo.nitro.nitroplayer.TrackItem
|
|
4
|
-
import java.util.concurrent.CopyOnWriteArrayList
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Queue class that manages a list of tracks.
|
|
8
|
-
* Thread-safe implementation using CopyOnWriteArrayList.
|
|
9
|
-
*/
|
|
10
|
-
class Queue {
|
|
11
|
-
private val tracks: MutableList<TrackItem> = CopyOnWriteArrayList()
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Get all tracks in the queue
|
|
15
|
-
*/
|
|
16
|
-
fun getTracks(): List<TrackItem> = ArrayList(tracks)
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Get tracks as an array (for compatibility with existing API)
|
|
20
|
-
*/
|
|
21
|
-
fun getTracksArray(): Array<TrackItem> = tracks.toTypedArray()
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Add a single track to the queue
|
|
25
|
-
*/
|
|
26
|
-
fun addTrack(track: TrackItem) {
|
|
27
|
-
tracks.add(track)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Add a track at a specific index
|
|
32
|
-
*/
|
|
33
|
-
fun addTrackAtIndex(
|
|
34
|
-
track: TrackItem,
|
|
35
|
-
index: Int,
|
|
36
|
-
) {
|
|
37
|
-
if (index < 0 || index > tracks.size) {
|
|
38
|
-
tracks.add(track)
|
|
39
|
-
} else {
|
|
40
|
-
tracks.add(index, track)
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Load multiple tracks into the queue (replaces existing queue)
|
|
46
|
-
*/
|
|
47
|
-
fun loadTracks(newTracks: List<TrackItem>) {
|
|
48
|
-
tracks.clear()
|
|
49
|
-
tracks.addAll(newTracks)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Remove a track by ID
|
|
54
|
-
* @return true if track was found and removed, false otherwise
|
|
55
|
-
*/
|
|
56
|
-
fun removeTrack(id: String): Boolean = tracks.removeAll { it.id == id }
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Clear all tracks from the queue
|
|
60
|
-
*/
|
|
61
|
-
fun clear() {
|
|
62
|
-
tracks.clear()
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Get the size of the queue
|
|
67
|
-
*/
|
|
68
|
-
fun size(): Int = tracks.size
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Check if the queue is empty
|
|
72
|
-
*/
|
|
73
|
-
fun isEmpty(): Boolean = tracks.isEmpty()
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Get a track by index
|
|
77
|
-
*/
|
|
78
|
-
fun getTrack(index: Int): TrackItem? =
|
|
79
|
-
if (index >= 0 && index < tracks.size) {
|
|
80
|
-
tracks[index]
|
|
81
|
-
} else {
|
|
82
|
-
null
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Get a track by ID
|
|
87
|
-
*/
|
|
88
|
-
fun getTrackById(id: String): TrackItem? = tracks.find { it.id == id }
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Get the index of a track by ID
|
|
92
|
-
*/
|
|
93
|
-
fun getTrackIndex(id: String): Int = tracks.indexOfFirst { it.id == id }
|
|
94
|
-
}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
package com.margelo.nitro.nitroplayer.queue
|
|
2
|
-
|
|
3
|
-
import com.margelo.nitro.nitroplayer.QueueOperation
|
|
4
|
-
import com.margelo.nitro.nitroplayer.TrackItem
|
|
5
|
-
import java.util.concurrent.CopyOnWriteArrayList
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* QueueManager is a singleton that manages the queue state across the app session.
|
|
9
|
-
* It provides thread-safe access to the queue and notifies listeners of queue changes.
|
|
10
|
-
*/
|
|
11
|
-
class QueueManager private constructor() {
|
|
12
|
-
private val queue = Queue()
|
|
13
|
-
private val listeners = CopyOnWriteArrayList<(List<TrackItem>, QueueOperation?) -> Unit>()
|
|
14
|
-
|
|
15
|
-
companion object {
|
|
16
|
-
@Volatile
|
|
17
|
-
@Suppress("ktlint:standard:property-naming")
|
|
18
|
-
private var INSTANCE: QueueManager? = null
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Get the singleton instance of QueueManager
|
|
22
|
-
*/
|
|
23
|
-
@JvmStatic
|
|
24
|
-
fun getInstance(): QueueManager =
|
|
25
|
-
INSTANCE ?: synchronized(this) {
|
|
26
|
-
INSTANCE ?: QueueManager().also { INSTANCE = it }
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Get the current queue
|
|
32
|
-
*/
|
|
33
|
-
fun getQueue(): Queue = queue
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Get all tracks in the queue
|
|
37
|
-
*/
|
|
38
|
-
fun getTracks(): List<TrackItem> = queue.getTracks()
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Get tracks as an array
|
|
42
|
-
*/
|
|
43
|
-
fun getTracksArray(): Array<TrackItem> = queue.getTracksArray()
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Load multiple tracks into the queue (replaces existing queue)
|
|
47
|
-
*/
|
|
48
|
-
fun loadQueue(tracks: Array<TrackItem>) {
|
|
49
|
-
queue.loadTracks(tracks.toList())
|
|
50
|
-
notifyListeners(QueueOperation.ADD)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Load a single track at a specific index
|
|
55
|
-
*/
|
|
56
|
-
fun loadSingleTrack(
|
|
57
|
-
track: TrackItem,
|
|
58
|
-
index: Double?,
|
|
59
|
-
) {
|
|
60
|
-
val insertIndex = index?.toInt()
|
|
61
|
-
if (insertIndex != null && insertIndex >= 0) {
|
|
62
|
-
queue.addTrackAtIndex(track, insertIndex)
|
|
63
|
-
} else {
|
|
64
|
-
queue.addTrack(track)
|
|
65
|
-
}
|
|
66
|
-
notifyListeners(QueueOperation.ADD)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Delete a track by ID
|
|
71
|
-
*/
|
|
72
|
-
fun deleteTrack(id: String) {
|
|
73
|
-
val removed = queue.removeTrack(id)
|
|
74
|
-
if (removed) {
|
|
75
|
-
notifyListeners(QueueOperation.REMOVE)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Clear all tracks from the queue
|
|
81
|
-
*/
|
|
82
|
-
fun clearQueue() {
|
|
83
|
-
queue.clear()
|
|
84
|
-
notifyListeners(QueueOperation.CLEAR)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Add a listener for queue changes
|
|
89
|
-
* @param listener Callback that receives (queue, operation)
|
|
90
|
-
* @return A function to remove the listener
|
|
91
|
-
*/
|
|
92
|
-
fun addQueueChangeListener(listener: (List<TrackItem>, QueueOperation?) -> Unit): () -> Unit {
|
|
93
|
-
listeners.add(listener)
|
|
94
|
-
return { listeners.remove(listener) }
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Remove a queue change listener
|
|
99
|
-
*/
|
|
100
|
-
fun removeQueueChangeListener(listener: (List<TrackItem>, QueueOperation?) -> Unit) {
|
|
101
|
-
listeners.remove(listener)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Notify all listeners of queue changes
|
|
106
|
-
*/
|
|
107
|
-
private fun notifyListeners(operation: QueueOperation?) {
|
|
108
|
-
val currentTracks = queue.getTracks()
|
|
109
|
-
listeners.forEach { listener ->
|
|
110
|
-
try {
|
|
111
|
-
listener(currentTracks, operation)
|
|
112
|
-
} catch (e: Exception) {
|
|
113
|
-
// Log error but don't break other listeners
|
|
114
|
-
e.printStackTrace()
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Get queue size
|
|
121
|
-
*/
|
|
122
|
-
fun getQueueSize(): Int = queue.size()
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Check if queue is empty
|
|
126
|
-
*/
|
|
127
|
-
fun isQueueEmpty(): Boolean = queue.isEmpty()
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Get a track by index
|
|
131
|
-
*/
|
|
132
|
-
fun getTrack(index: Int): TrackItem? = queue.getTrack(index)
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Get a track by ID
|
|
136
|
-
*/
|
|
137
|
-
fun getTrackById(id: String): TrackItem? = queue.getTrackById(id)
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Get the index of a track by ID
|
|
141
|
-
*/
|
|
142
|
-
fun getTrackIndex(id: String): Int = queue.getTrackIndex(id)
|
|
143
|
-
}
|