react-native-nitro-player 1.6.0 → 1.7.0-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.
Files changed (71) hide show
  1. package/README.md +6 -1
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +9 -1
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +23 -3
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +23 -3
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +34 -17
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/connection/AndroidAutoConnectionDetector.kt +22 -22
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +21 -9
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +19 -0
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +33 -19
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +0 -1
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +9 -5
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +96 -56
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +62 -22
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/TrackItemJson.kt +60 -0
  15. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +9 -9
  16. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/AuthAwareHttpDataSourceFactory.kt +12 -3
  17. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/ExoPlayerBuilder.kt +4 -0
  18. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +99 -0
  19. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/PlaybackService.kt +7 -1
  20. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +85 -70
  21. package/android/src/main/res/values/strings.xml +7 -0
  22. package/ios/HybridDownloadManager.swift +13 -3
  23. package/ios/HybridTrackPlayer.swift +4 -2
  24. package/ios/core/TrackPlayerCast.swift +32 -1
  25. package/ios/core/TrackPlayerCore.swift +19 -3
  26. package/ios/core/TrackPlayerListener.swift +15 -16
  27. package/ios/core/TrackPlayerNotify.swift +11 -11
  28. package/ios/core/TrackPlayerPlayback.swift +54 -16
  29. package/ios/core/TrackPlayerQueueBuild.swift +14 -2
  30. package/ios/core/TrackPlayerTempQueue.swift +1 -0
  31. package/ios/core/TrackPlayerUrlLoader.swift +11 -3
  32. package/ios/download/DownloadDatabase.swift +16 -5
  33. package/ios/download/DownloadFileManager.swift +12 -15
  34. package/ios/download/DownloadManagerCore.swift +61 -16
  35. package/ios/equalizer/EqualizerCore.swift +37 -9
  36. package/ios/media/MediaSessionManager.swift +89 -4
  37. package/ios/playlist/PlaylistManager.swift +47 -46
  38. package/ios/queue/HybridPlayerQueue.swift +28 -7
  39. package/lib/hooks/callbackManager.d.ts +9 -0
  40. package/lib/hooks/callbackManager.js +33 -0
  41. package/lib/hooks/useActualQueue.js +18 -6
  42. package/lib/hooks/useAndroidAutoConnection.js +2 -4
  43. package/lib/hooks/useAudioDevices.js +21 -24
  44. package/lib/hooks/useDownloadActions.js +33 -11
  45. package/lib/hooks/useDownloadProgress.js +20 -14
  46. package/lib/hooks/useDownloadStorage.js +1 -1
  47. package/lib/hooks/useNowPlaying.js +32 -6
  48. package/lib/hooks/useOnSeek.js +2 -2
  49. package/lib/hooks/usePlaylist.js +6 -15
  50. package/lib/specs/TrackPlayer.nitro.d.ts +1 -2
  51. package/lib/types/PlayerQueue.d.ts +8 -0
  52. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +9 -1
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerConfig.kt +8 -2
  54. package/nitrogen/generated/ios/swift/PlayerConfig.swift +37 -1
  55. package/nitrogen/generated/shared/c++/PlayerConfig.hpp +9 -1
  56. package/package.json +1 -1
  57. package/src/hooks/callbackManager.ts +44 -0
  58. package/src/hooks/useActualQueue.ts +18 -6
  59. package/src/hooks/useAndroidAutoConnection.ts +6 -6
  60. package/src/hooks/useAudioDevices.ts +23 -24
  61. package/src/hooks/useDownloadActions.ts +35 -11
  62. package/src/hooks/useDownloadProgress.ts +22 -19
  63. package/src/hooks/useDownloadStorage.ts +4 -3
  64. package/src/hooks/useNowPlaying.ts +34 -6
  65. package/src/hooks/useOnSeek.ts +2 -2
  66. package/src/hooks/usePlaylist.ts +6 -14
  67. package/src/specs/TrackPlayer.nitro.ts +1 -2
  68. package/src/types/PlayerQueue.ts +8 -0
  69. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/NitroPlayerNotificationProvider.kt +0 -200
  70. package/android/src/main/java/com/margelo/nitro/nitroplayer/queue/Queue.kt +0 -94
  71. 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
- }