@rntp/player 5.0.0-beta.3 → 5.0.0-beta.4
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/doublesymmetry/trackplayer/TrackPlayerPlaybackService.kt +8 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/models/BrowseTree.kt +51 -20
- package/ios/CarPlay/RNTPCarPlaySceneDelegate.swift +43 -14
- package/lib/commonjs/audio.js +20 -4
- package/lib/commonjs/audio.js.map +1 -1
- package/lib/module/audio.js +20 -4
- package/lib/module/audio.js.map +1 -1
- package/lib/typescript/src/audio.d.ts +4 -3
- package/lib/typescript/src/audio.d.ts.map +1 -1
- package/lib/typescript/src/interfaces/BrowseTree.d.ts +35 -5
- package/lib/typescript/src/interfaces/BrowseTree.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/audio.ts +19 -4
- package/src/interfaces/BrowseTree.ts +40 -5
|
@@ -465,12 +465,20 @@ class TrackPlayerPlaybackService: MediaLibraryService(), MediaLibraryService.Med
|
|
|
465
465
|
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.copyOf(categoryItems), params))
|
|
466
466
|
}
|
|
467
467
|
|
|
468
|
+
// Check if it's a category
|
|
468
469
|
val category = browseTree.findCategory(parentId)
|
|
469
470
|
if (category != null) {
|
|
470
471
|
val mediaItems = category.items.map { it.toMediaItem() }
|
|
471
472
|
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.copyOf(mediaItems), params))
|
|
472
473
|
}
|
|
473
474
|
|
|
475
|
+
// Check if it's a browsable item with children
|
|
476
|
+
val browseItem = browseTree.findItem(parentId)
|
|
477
|
+
if (browseItem != null && browseItem.children != null) {
|
|
478
|
+
val mediaItems = browseItem.children.map { it.toMediaItem() }
|
|
479
|
+
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.copyOf(mediaItems), params))
|
|
480
|
+
}
|
|
481
|
+
|
|
474
482
|
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE))
|
|
475
483
|
}
|
|
476
484
|
|
|
@@ -26,14 +26,18 @@ data class BrowseCategory(
|
|
|
26
26
|
@Serializable
|
|
27
27
|
data class BrowseMediaItem(
|
|
28
28
|
val mediaId: String,
|
|
29
|
-
val url: String,
|
|
29
|
+
val url: String? = null,
|
|
30
30
|
val title: String? = null,
|
|
31
31
|
val artist: String? = null,
|
|
32
32
|
val albumTitle: String? = null,
|
|
33
33
|
val artworkUrl: String? = null,
|
|
34
34
|
val duration: Double? = null,
|
|
35
35
|
val isLive: Boolean? = null,
|
|
36
|
+
val children: List<BrowseMediaItem>? = null,
|
|
36
37
|
) {
|
|
38
|
+
val isPlayable: Boolean get() = url != null
|
|
39
|
+
val isBrowsable: Boolean get() = children != null && url == null
|
|
40
|
+
|
|
37
41
|
fun toMediaItem(): MediaItem {
|
|
38
42
|
val extras = Bundle()
|
|
39
43
|
duration?.let { extras.putDouble("duration", it) }
|
|
@@ -44,16 +48,20 @@ data class BrowseMediaItem(
|
|
|
44
48
|
.setArtist(artist)
|
|
45
49
|
.setAlbumTitle(albumTitle)
|
|
46
50
|
.setArtworkUri(artworkUrl?.let { Uri.parse(it) })
|
|
47
|
-
.setIsBrowsable(
|
|
48
|
-
.setIsPlayable(
|
|
51
|
+
.setIsBrowsable(isBrowsable)
|
|
52
|
+
.setIsPlayable(isPlayable)
|
|
53
|
+
.setMediaType(if (isBrowsable) MediaMetadata.MEDIA_TYPE_FOLDER_MIXED else MediaMetadata.MEDIA_TYPE_MUSIC)
|
|
49
54
|
.setExtras(extras)
|
|
50
55
|
.build()
|
|
51
56
|
|
|
52
57
|
val builder = MediaItem.Builder()
|
|
53
58
|
.setMediaId(mediaId)
|
|
54
|
-
.setUri(url)
|
|
55
59
|
.setMediaMetadata(metadata)
|
|
56
60
|
|
|
61
|
+
if (url != null) {
|
|
62
|
+
builder.setUri(url)
|
|
63
|
+
}
|
|
64
|
+
|
|
57
65
|
if (isLive == true) {
|
|
58
66
|
builder.setLiveConfiguration(MediaItem.LiveConfiguration.Builder().build())
|
|
59
67
|
}
|
|
@@ -75,7 +83,7 @@ data class BrowseTree(
|
|
|
75
83
|
categories.find { it.mediaId == mediaId }
|
|
76
84
|
|
|
77
85
|
fun findItem(mediaId: String): BrowseMediaItem? =
|
|
78
|
-
categories.flatMap { it.items
|
|
86
|
+
categories.flatMap { findItemRecursive(it.items, mediaId) }.firstOrNull()
|
|
79
87
|
|
|
80
88
|
companion object {
|
|
81
89
|
private const val BROWSE_TREE_KEY = "browse_tree"
|
|
@@ -98,24 +106,47 @@ data class BrowseTree(
|
|
|
98
106
|
val title = catMap.getString("title") ?: continue
|
|
99
107
|
val itemsArray = catMap.getArray("items") ?: continue
|
|
100
108
|
|
|
101
|
-
val items =
|
|
102
|
-
for (j in 0 until itemsArray.size()) {
|
|
103
|
-
val itemMap = itemsArray.getMap(j) ?: continue
|
|
104
|
-
items.add(BrowseMediaItem(
|
|
105
|
-
mediaId = itemMap.getString("mediaId") ?: continue,
|
|
106
|
-
url = itemMap.getString("url") as? String ?: continue,
|
|
107
|
-
title = if (itemMap.hasKey("title")) itemMap.getString("title") else null,
|
|
108
|
-
artist = if (itemMap.hasKey("artist")) itemMap.getString("artist") else null,
|
|
109
|
-
albumTitle = if (itemMap.hasKey("albumTitle")) itemMap.getString("albumTitle") else null,
|
|
110
|
-
artworkUrl = if (itemMap.hasKey("artworkUrl")) itemMap.getString("artworkUrl") else null,
|
|
111
|
-
duration = if (itemMap.hasKey("duration")) itemMap.getDouble("duration") else null,
|
|
112
|
-
isLive = if (itemMap.hasKey("isLive")) itemMap.getBoolean("isLive") else null,
|
|
113
|
-
))
|
|
114
|
-
}
|
|
115
|
-
|
|
109
|
+
val items = parseItems(itemsArray)
|
|
116
110
|
categories.add(BrowseCategory(mediaId = mediaId, title = title, items = items))
|
|
117
111
|
}
|
|
118
112
|
return BrowseTree(categories)
|
|
119
113
|
}
|
|
114
|
+
|
|
115
|
+
private fun parseItems(data: ReadableArray): List<BrowseMediaItem> {
|
|
116
|
+
val items = mutableListOf<BrowseMediaItem>()
|
|
117
|
+
for (i in 0 until data.size()) {
|
|
118
|
+
val itemMap = data.getMap(i) ?: continue
|
|
119
|
+
val mediaId = itemMap.getString("mediaId") ?: continue
|
|
120
|
+
|
|
121
|
+
val children = if (itemMap.hasKey("children")) {
|
|
122
|
+
itemMap.getArray("children")?.let { parseItems(it) }
|
|
123
|
+
} else null
|
|
124
|
+
|
|
125
|
+
items.add(BrowseMediaItem(
|
|
126
|
+
mediaId = mediaId,
|
|
127
|
+
url = if (itemMap.hasKey("url")) itemMap.getString("url") else null,
|
|
128
|
+
title = if (itemMap.hasKey("title")) itemMap.getString("title") else null,
|
|
129
|
+
artist = if (itemMap.hasKey("artist")) itemMap.getString("artist") else null,
|
|
130
|
+
albumTitle = if (itemMap.hasKey("albumTitle")) itemMap.getString("albumTitle") else null,
|
|
131
|
+
artworkUrl = if (itemMap.hasKey("artworkUrl")) itemMap.getString("artworkUrl") else null,
|
|
132
|
+
duration = if (itemMap.hasKey("duration")) itemMap.getDouble("duration") else null,
|
|
133
|
+
isLive = if (itemMap.hasKey("isLive")) itemMap.getBoolean("isLive") else null,
|
|
134
|
+
children = children,
|
|
135
|
+
))
|
|
136
|
+
}
|
|
137
|
+
return items
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private fun findItemRecursive(items: List<BrowseMediaItem>, mediaId: String): List<BrowseMediaItem> {
|
|
141
|
+
for (item in items) {
|
|
142
|
+
if (item.mediaId == mediaId) return listOf(item)
|
|
143
|
+
val children = item.children
|
|
144
|
+
if (children != null) {
|
|
145
|
+
val found = findItemRecursive(children, mediaId)
|
|
146
|
+
if (found.isNotEmpty()) return found
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return emptyList()
|
|
150
|
+
}
|
|
120
151
|
}
|
|
121
152
|
}
|
|
@@ -115,7 +115,7 @@ class RNTPCarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate
|
|
|
115
115
|
let truncated = maxItems > 0 ? Array(items.prefix(maxItems)) : items
|
|
116
116
|
|
|
117
117
|
let listItems: [CPListItem] = truncated.enumerated().map { (itemIndex, item) in
|
|
118
|
-
buildListItem(item: item,
|
|
118
|
+
buildListItem(item: item, parentItems: items, itemIndex: itemIndex)
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
let section = CPListSection(items: listItems)
|
|
@@ -151,15 +151,26 @@ class RNTPCarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate
|
|
|
151
151
|
|
|
152
152
|
// MARK: - List Item Builder
|
|
153
153
|
|
|
154
|
-
private func buildListItem(item: [String: Any],
|
|
154
|
+
private func buildListItem(item: [String: Any], parentItems: [[String: Any]], itemIndex: Int) -> CPListItem {
|
|
155
155
|
let title = item["title"] as? String ?? "Untitled"
|
|
156
156
|
let artist = item["artist"] as? String
|
|
157
157
|
let listItem = CPListItem(text: title, detailText: artist)
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
159
|
+
let hasUrl = item["url"] != nil
|
|
160
|
+
let children = item["children"] as? [[String: Any]]
|
|
161
|
+
let isBrowsable = children != nil && !hasUrl
|
|
162
|
+
|
|
163
|
+
if isBrowsable {
|
|
164
|
+
listItem.accessoryType = .disclosureIndicator
|
|
165
|
+
listItem.handler = { [weak self] _, completion in
|
|
166
|
+
self?.handleBrowsableSelected(item: item)
|
|
167
|
+
completion()
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
listItem.handler = { [weak self] _, completion in
|
|
171
|
+
self?.handlePlayableSelected(parentItems: parentItems, itemIndex: itemIndex)
|
|
172
|
+
completion()
|
|
173
|
+
}
|
|
163
174
|
}
|
|
164
175
|
|
|
165
176
|
// Track by mediaId for now-playing state updates
|
|
@@ -184,6 +195,22 @@ class RNTPCarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate
|
|
|
184
195
|
return listItem
|
|
185
196
|
}
|
|
186
197
|
|
|
198
|
+
private func handleBrowsableSelected(item: [String: Any]) {
|
|
199
|
+
let title = item["title"] as? String ?? "Untitled"
|
|
200
|
+
let children = item["children"] as? [[String: Any]] ?? []
|
|
201
|
+
|
|
202
|
+
let maxItems = CPListTemplate.maximumItemCount
|
|
203
|
+
let truncated = maxItems > 0 ? Array(children.prefix(maxItems)) : children
|
|
204
|
+
|
|
205
|
+
let listItems = truncated.enumerated().map { (idx, child) in
|
|
206
|
+
buildListItem(item: child, parentItems: children, itemIndex: idx)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
let section = CPListSection(items: listItems)
|
|
210
|
+
let template = CPListTemplate(title: title, sections: [section])
|
|
211
|
+
interfaceController?.pushTemplate(template, animated: true, completion: nil)
|
|
212
|
+
}
|
|
213
|
+
|
|
187
214
|
// MARK: - Now Playing State
|
|
188
215
|
|
|
189
216
|
private func updateNowPlayingState() {
|
|
@@ -198,20 +225,22 @@ class RNTPCarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate
|
|
|
198
225
|
|
|
199
226
|
// MARK: - Playback
|
|
200
227
|
|
|
201
|
-
private func
|
|
228
|
+
private func handlePlayableSelected(parentItems: [[String: Any]], itemIndex: Int) {
|
|
202
229
|
guard let player = BrowseTreeStore.shared.player else { return }
|
|
203
|
-
let categories = BrowseTreeStore.shared.categories
|
|
204
|
-
guard categoryIndex < categories.count,
|
|
205
|
-
let items = categories[categoryIndex]["items"] as? [[String: Any]] else { return }
|
|
206
230
|
|
|
207
|
-
|
|
231
|
+
// Collect only playable siblings (items with a url)
|
|
232
|
+
let playableItems = parentItems.filter { $0["url"] != nil }
|
|
233
|
+
let mediaItems = playableItems.compactMap { MediaItem(data: $0) }
|
|
208
234
|
guard !mediaItems.isEmpty else { return }
|
|
209
235
|
|
|
236
|
+
// Find the index of the selected item among playable siblings
|
|
237
|
+
let selectedMediaId = parentItems[itemIndex]["mediaId"] as? String
|
|
238
|
+
let playableIndex = playableItems.firstIndex { ($0["mediaId"] as? String) == selectedMediaId } ?? 0
|
|
239
|
+
|
|
210
240
|
player.clear()
|
|
211
241
|
player.add(items: mediaItems)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
player.skipTo(index: idx)
|
|
242
|
+
if playableIndex > 0 {
|
|
243
|
+
player.skipTo(index: playableIndex)
|
|
215
244
|
}
|
|
216
245
|
player.play()
|
|
217
246
|
}
|
package/lib/commonjs/audio.js
CHANGED
|
@@ -403,23 +403,39 @@ function updateProgressSyncHeaders(headers) {
|
|
|
403
403
|
|
|
404
404
|
// ─── Browse Tree ─────────────────────────────────────
|
|
405
405
|
|
|
406
|
+
function resolveBrowseItem(item) {
|
|
407
|
+
return {
|
|
408
|
+
...item,
|
|
409
|
+
...(item.url != null ? {
|
|
410
|
+
url: resolveUrl(item.url)
|
|
411
|
+
} : {}),
|
|
412
|
+
...(item.artworkUrl != null ? {
|
|
413
|
+
artworkUrl: resolveUrl(item.artworkUrl)
|
|
414
|
+
} : {}),
|
|
415
|
+
...(item.children != null ? {
|
|
416
|
+
children: item.children.map(resolveBrowseItem)
|
|
417
|
+
} : {})
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
|
|
406
421
|
/**
|
|
407
422
|
* Set the media browse tree for Android Auto and CarPlay.
|
|
408
423
|
* Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
|
|
409
|
-
* its items
|
|
424
|
+
* its items can be playable tracks or browsable containers with children.
|
|
410
425
|
*
|
|
411
|
-
* When a user selects
|
|
412
|
-
* without JS intervention.
|
|
426
|
+
* When a user selects a playable item, the native player loads its siblings
|
|
427
|
+
* as the queue and starts playback without JS intervention.
|
|
413
428
|
*
|
|
414
429
|
* @remarks
|
|
415
430
|
* - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
|
|
416
431
|
* the first 3 become tabs and the rest are grouped under a "More" tab.
|
|
432
|
+
* - Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
417
433
|
* - Call again to update the tree (e.g. after loading new content)
|
|
418
434
|
*/
|
|
419
435
|
function setBrowseTree(categories) {
|
|
420
436
|
const resolved = categories.map(cat => ({
|
|
421
437
|
...cat,
|
|
422
|
-
items: cat.items.map(
|
|
438
|
+
items: cat.items.map(resolveBrowseItem)
|
|
423
439
|
}));
|
|
424
440
|
TrackPlayer.setBrowseTree(resolved);
|
|
425
441
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_index","_index2","isTurboModuleEnabled","global","__turboModuleProxy","TrackPlayerModule","default","NativeModules","TrackPlayer","Proxy","get","Error","Platform","select","ios","NativeModule","OS","emitter","NativeEventEmitter","isPlayerSetup","resolveUrl","url","resolved","Image","resolveAssetSource","uri","resolveMediaItem","item","artworkUrl","normalizePlayerConfig","options","android","DEFAULT_ANDROID_PLAYER_CONFIG","cache","DEFAULT_CACHE_CONFIG","undefined","DEFAULT_PLAYER_CONFIG","contentType","handleAudioBecomingNoisy","progressSync","setupPlayer","registerBackgroundEventHandler","factory","AppRegistry","registerHeadlessTask","type","Event","QueueChanged","setImmediate","addEventListener","event","listener","addListener","play","pause","stop","seekTo","position","seekBy","offset","skipToNext","skipToPrevious","skipToIndex","index","retry","setPlaybackSpeed","speed","setVolume","volume","setMediaItem","mediaItem","setMediaItems","mediaItems","startIndex","map","addMediaItem","addMediaItems","insertMediaItem","insertMediaItems","removeMediaItem","removeMediaItems","fromIndex","toIndex","clear","clearCache","replaceMediaItem","moveMediaItem","updateMetadata","metadata","getPlaybackState","isPlaying","getProgress","result","duration","buffered","cached","getPlaybackSpeed","getVolume","getActiveMediaItem","getActiveMediaItemIndex","getQueue","getRepeatMode","isShuffleEnabled","setCommands","commands","setRepeatMode","mode","setShuffleEnabled","enabled","updateProgressSyncHeaders","headers","setBrowseTree","categories","cat","items","sleepAfterTime","seconds","fadeOutSeconds","sleepAfterMediaItemAtIndex","resolvedIndex","getSleepTimer","cancelSleepTimer","destroy"],"sourceRoot":"../../src","sources":["audio.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAAA,YAAA,GAAAC,OAAA;AASA,IAAAC,MAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_index","_index2","isTurboModuleEnabled","global","__turboModuleProxy","TrackPlayerModule","default","NativeModules","TrackPlayer","Proxy","get","Error","Platform","select","ios","NativeModule","OS","emitter","NativeEventEmitter","isPlayerSetup","resolveUrl","url","resolved","Image","resolveAssetSource","uri","resolveMediaItem","item","artworkUrl","normalizePlayerConfig","options","android","DEFAULT_ANDROID_PLAYER_CONFIG","cache","DEFAULT_CACHE_CONFIG","undefined","DEFAULT_PLAYER_CONFIG","contentType","handleAudioBecomingNoisy","progressSync","setupPlayer","registerBackgroundEventHandler","factory","AppRegistry","registerHeadlessTask","type","Event","QueueChanged","setImmediate","addEventListener","event","listener","addListener","play","pause","stop","seekTo","position","seekBy","offset","skipToNext","skipToPrevious","skipToIndex","index","retry","setPlaybackSpeed","speed","setVolume","volume","setMediaItem","mediaItem","setMediaItems","mediaItems","startIndex","map","addMediaItem","addMediaItems","insertMediaItem","insertMediaItems","removeMediaItem","removeMediaItems","fromIndex","toIndex","clear","clearCache","replaceMediaItem","moveMediaItem","updateMetadata","metadata","getPlaybackState","isPlaying","getProgress","result","duration","buffered","cached","getPlaybackSpeed","getVolume","getActiveMediaItem","getActiveMediaItemIndex","getQueue","getRepeatMode","isShuffleEnabled","setCommands","commands","setRepeatMode","mode","setShuffleEnabled","enabled","updateProgressSyncHeaders","headers","resolveBrowseItem","children","setBrowseTree","categories","cat","items","sleepAfterTime","seconds","fadeOutSeconds","sleepAfterMediaItemAtIndex","resolvedIndex","getSleepTimer","cancelSleepTimer","destroy"],"sourceRoot":"../../src","sources":["audio.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/audio.js
CHANGED
|
@@ -353,23 +353,39 @@ export function updateProgressSyncHeaders(headers) {
|
|
|
353
353
|
|
|
354
354
|
// ─── Browse Tree ─────────────────────────────────────
|
|
355
355
|
|
|
356
|
+
function resolveBrowseItem(item) {
|
|
357
|
+
return {
|
|
358
|
+
...item,
|
|
359
|
+
...(item.url != null ? {
|
|
360
|
+
url: resolveUrl(item.url)
|
|
361
|
+
} : {}),
|
|
362
|
+
...(item.artworkUrl != null ? {
|
|
363
|
+
artworkUrl: resolveUrl(item.artworkUrl)
|
|
364
|
+
} : {}),
|
|
365
|
+
...(item.children != null ? {
|
|
366
|
+
children: item.children.map(resolveBrowseItem)
|
|
367
|
+
} : {})
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
356
371
|
/**
|
|
357
372
|
* Set the media browse tree for Android Auto and CarPlay.
|
|
358
373
|
* Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
|
|
359
|
-
* its items
|
|
374
|
+
* its items can be playable tracks or browsable containers with children.
|
|
360
375
|
*
|
|
361
|
-
* When a user selects
|
|
362
|
-
* without JS intervention.
|
|
376
|
+
* When a user selects a playable item, the native player loads its siblings
|
|
377
|
+
* as the queue and starts playback without JS intervention.
|
|
363
378
|
*
|
|
364
379
|
* @remarks
|
|
365
380
|
* - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
|
|
366
381
|
* the first 3 become tabs and the rest are grouped under a "More" tab.
|
|
382
|
+
* - Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
367
383
|
* - Call again to update the tree (e.g. after loading new content)
|
|
368
384
|
*/
|
|
369
385
|
export function setBrowseTree(categories) {
|
|
370
386
|
const resolved = categories.map(cat => ({
|
|
371
387
|
...cat,
|
|
372
|
-
items: cat.items.map(
|
|
388
|
+
items: cat.items.map(resolveBrowseItem)
|
|
373
389
|
}));
|
|
374
390
|
TrackPlayer.setBrowseTree(resolved);
|
|
375
391
|
}
|
package/lib/module/audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AppRegistry","Image","NativeEventEmitter","NativeModules","Platform","DEFAULT_PLAYER_CONFIG","DEFAULT_ANDROID_PLAYER_CONFIG","DEFAULT_CACHE_CONFIG","Event","isTurboModuleEnabled","global","__turboModuleProxy","TrackPlayerModule","require","default","TrackPlayer","Proxy","get","Error","select","ios","NativeModule","OS","emitter","isPlayerSetup","resolveUrl","url","resolved","resolveAssetSource","uri","resolveMediaItem","item","artworkUrl","normalizePlayerConfig","options","android","cache","undefined","contentType","handleAudioBecomingNoisy","progressSync","setupPlayer","registerBackgroundEventHandler","factory","registerHeadlessTask","type","QueueChanged","setImmediate","addEventListener","event","listener","addListener","play","pause","stop","seekTo","position","seekBy","offset","skipToNext","skipToPrevious","skipToIndex","index","retry","setPlaybackSpeed","speed","setVolume","volume","setMediaItem","mediaItem","setMediaItems","mediaItems","startIndex","map","addMediaItem","addMediaItems","insertMediaItem","insertMediaItems","removeMediaItem","removeMediaItems","fromIndex","toIndex","clear","clearCache","replaceMediaItem","moveMediaItem","updateMetadata","metadata","getPlaybackState","isPlaying","getProgress","result","duration","buffered","cached","getPlaybackSpeed","getVolume","getActiveMediaItem","getActiveMediaItemIndex","getQueue","getRepeatMode","isShuffleEnabled","setCommands","commands","setRepeatMode","mode","setShuffleEnabled","enabled","updateProgressSyncHeaders","headers","setBrowseTree","categories","cat","items","sleepAfterTime","seconds","fadeOutSeconds","sleepAfterMediaItemAtIndex","resolvedIndex","getSleepTimer","cancelSleepTimer","destroy"],"sourceRoot":"../../src","sources":["audio.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["AppRegistry","Image","NativeEventEmitter","NativeModules","Platform","DEFAULT_PLAYER_CONFIG","DEFAULT_ANDROID_PLAYER_CONFIG","DEFAULT_CACHE_CONFIG","Event","isTurboModuleEnabled","global","__turboModuleProxy","TrackPlayerModule","require","default","TrackPlayer","Proxy","get","Error","select","ios","NativeModule","OS","emitter","isPlayerSetup","resolveUrl","url","resolved","resolveAssetSource","uri","resolveMediaItem","item","artworkUrl","normalizePlayerConfig","options","android","cache","undefined","contentType","handleAudioBecomingNoisy","progressSync","setupPlayer","registerBackgroundEventHandler","factory","registerHeadlessTask","type","QueueChanged","setImmediate","addEventListener","event","listener","addListener","play","pause","stop","seekTo","position","seekBy","offset","skipToNext","skipToPrevious","skipToIndex","index","retry","setPlaybackSpeed","speed","setVolume","volume","setMediaItem","mediaItem","setMediaItems","mediaItems","startIndex","map","addMediaItem","addMediaItems","insertMediaItem","insertMediaItems","removeMediaItem","removeMediaItems","fromIndex","toIndex","clear","clearCache","replaceMediaItem","moveMediaItem","updateMetadata","metadata","getPlaybackState","isPlaying","getProgress","result","duration","buffered","cached","getPlaybackSpeed","getVolume","getActiveMediaItem","getActiveMediaItemIndex","getQueue","getRepeatMode","isShuffleEnabled","setCommands","commands","setRepeatMode","mode","setShuffleEnabled","enabled","updateProgressSyncHeaders","headers","resolveBrowseItem","children","setBrowseTree","categories","cat","items","sleepAfterTime","seconds","fadeOutSeconds","sleepAfterMediaItemAtIndex","resolvedIndex","getSleepTimer","cancelSleepTimer","destroy"],"sourceRoot":"../../src","sources":["audio.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -139,14 +139,15 @@ export declare function updateProgressSyncHeaders(headers: Record<string, string
|
|
|
139
139
|
/**
|
|
140
140
|
* Set the media browse tree for Android Auto and CarPlay.
|
|
141
141
|
* Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
|
|
142
|
-
* its items
|
|
142
|
+
* its items can be playable tracks or browsable containers with children.
|
|
143
143
|
*
|
|
144
|
-
* When a user selects
|
|
145
|
-
* without JS intervention.
|
|
144
|
+
* When a user selects a playable item, the native player loads its siblings
|
|
145
|
+
* as the queue and starts playback without JS intervention.
|
|
146
146
|
*
|
|
147
147
|
* @remarks
|
|
148
148
|
* - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
|
|
149
149
|
* the first 3 become tabs and the rest are grouped under a "More" tab.
|
|
150
|
+
* - Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
150
151
|
* - Call again to update the tree (e.g. after loading new content)
|
|
151
152
|
*/
|
|
152
153
|
export declare function setBrowseTree(categories: BrowseCategory[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../src/audio.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../src/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,47 @@
|
|
|
2
2
|
* Copyright (c) Double Symmetry GmbH
|
|
3
3
|
* Commercial use requires a license. See https://rntp.dev/pricing
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { MediaUrl } from './MediaItem';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* An item in the browse tree — either a playable track or a browsable container.
|
|
8
|
+
*
|
|
9
|
+
* - `url` present → playable track (leaf node)
|
|
10
|
+
* - `children` present (no `url`) → browsable container (tapping drills down)
|
|
11
|
+
* - `url` takes precedence if both are present
|
|
12
|
+
*
|
|
13
|
+
* Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
14
|
+
*/
|
|
15
|
+
export interface BrowseItem {
|
|
16
|
+
/** Unique identifier for this item. */
|
|
17
|
+
mediaId: string;
|
|
18
|
+
/** Display title. */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Artist or subtitle. */
|
|
21
|
+
artist?: string;
|
|
22
|
+
/** Artwork image URL. */
|
|
23
|
+
artworkUrl?: MediaUrl;
|
|
24
|
+
/** Audio source URL. If present, this item is playable. */
|
|
25
|
+
url?: MediaUrl;
|
|
26
|
+
/** Duration hint in seconds. */
|
|
27
|
+
duration?: number;
|
|
28
|
+
/** Whether this is a live stream. */
|
|
29
|
+
isLive?: boolean;
|
|
30
|
+
/** MIME type hint for format detection. */
|
|
31
|
+
mimeType?: string;
|
|
32
|
+
/** Child items. If present (and no `url`), this item is browsable. */
|
|
33
|
+
children?: BrowseItem[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A top-level category in the browse tree.
|
|
37
|
+
* On Android Auto, each category is a browsable folder.
|
|
38
|
+
* On CarPlay, each category is a tab (max 4; overflow creates a "More" tab).
|
|
9
39
|
*/
|
|
10
40
|
export interface BrowseCategory {
|
|
11
41
|
/** Unique identifier for this category. */
|
|
12
42
|
mediaId: string;
|
|
13
43
|
/** Display title for the category (e.g. "Albums", "Podcasts"). */
|
|
14
44
|
title: string;
|
|
15
|
-
/**
|
|
16
|
-
items:
|
|
45
|
+
/** Items within this category — can be playable tracks or browsable containers. */
|
|
46
|
+
items: BrowseItem[];
|
|
17
47
|
}
|
|
18
48
|
//# sourceMappingURL=BrowseTree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTree.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/BrowseTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"BrowseTree.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/BrowseTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;IAGtB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB"}
|
package/package.json
CHANGED
package/src/audio.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
type PlayerConfig,
|
|
17
17
|
type RemoteControlConfig,
|
|
18
18
|
type BrowseCategory,
|
|
19
|
+
type BrowseItem,
|
|
19
20
|
type MediaItem,
|
|
20
21
|
type MediaUrl,
|
|
21
22
|
type Progress,
|
|
@@ -412,23 +413,37 @@ export function updateProgressSyncHeaders(
|
|
|
412
413
|
|
|
413
414
|
// ─── Browse Tree ─────────────────────────────────────
|
|
414
415
|
|
|
416
|
+
function resolveBrowseItem(item: BrowseItem): BrowseItem {
|
|
417
|
+
return {
|
|
418
|
+
...item,
|
|
419
|
+
...(item.url != null ? { url: resolveUrl(item.url) } : {}),
|
|
420
|
+
...(item.artworkUrl != null
|
|
421
|
+
? { artworkUrl: resolveUrl(item.artworkUrl) }
|
|
422
|
+
: {}),
|
|
423
|
+
...(item.children != null
|
|
424
|
+
? { children: item.children.map(resolveBrowseItem) }
|
|
425
|
+
: {}),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
415
429
|
/**
|
|
416
430
|
* Set the media browse tree for Android Auto and CarPlay.
|
|
417
431
|
* Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
|
|
418
|
-
* its items
|
|
432
|
+
* its items can be playable tracks or browsable containers with children.
|
|
419
433
|
*
|
|
420
|
-
* When a user selects
|
|
421
|
-
* without JS intervention.
|
|
434
|
+
* When a user selects a playable item, the native player loads its siblings
|
|
435
|
+
* as the queue and starts playback without JS intervention.
|
|
422
436
|
*
|
|
423
437
|
* @remarks
|
|
424
438
|
* - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
|
|
425
439
|
* the first 3 become tabs and the rest are grouped under a "More" tab.
|
|
440
|
+
* - Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
426
441
|
* - Call again to update the tree (e.g. after loading new content)
|
|
427
442
|
*/
|
|
428
443
|
export function setBrowseTree(categories: BrowseCategory[]): void {
|
|
429
444
|
const resolved = categories.map((cat) => ({
|
|
430
445
|
...cat,
|
|
431
|
-
items: cat.items.map(
|
|
446
|
+
items: cat.items.map(resolveBrowseItem),
|
|
432
447
|
}));
|
|
433
448
|
TrackPlayer.setBrowseTree(resolved);
|
|
434
449
|
}
|
|
@@ -3,17 +3,52 @@
|
|
|
3
3
|
* Commercial use requires a license. See https://rntp.dev/pricing
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { MediaUrl } from './MediaItem';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* An item in the browse tree — either a playable track or a browsable container.
|
|
10
|
+
*
|
|
11
|
+
* - `url` present → playable track (leaf node)
|
|
12
|
+
* - `children` present (no `url`) → browsable container (tapping drills down)
|
|
13
|
+
* - `url` takes precedence if both are present
|
|
14
|
+
*
|
|
15
|
+
* Maximum nesting depth: 4 levels (matching CarPlay's navigation stack limit).
|
|
16
|
+
*/
|
|
17
|
+
export interface BrowseItem {
|
|
18
|
+
/** Unique identifier for this item. */
|
|
19
|
+
mediaId: string;
|
|
20
|
+
/** Display title. */
|
|
21
|
+
title: string;
|
|
22
|
+
/** Artist or subtitle. */
|
|
23
|
+
artist?: string;
|
|
24
|
+
/** Artwork image URL. */
|
|
25
|
+
artworkUrl?: MediaUrl;
|
|
26
|
+
|
|
27
|
+
// Playable fields
|
|
28
|
+
/** Audio source URL. If present, this item is playable. */
|
|
29
|
+
url?: MediaUrl;
|
|
30
|
+
/** Duration hint in seconds. */
|
|
31
|
+
duration?: number;
|
|
32
|
+
/** Whether this is a live stream. */
|
|
33
|
+
isLive?: boolean;
|
|
34
|
+
/** MIME type hint for format detection. */
|
|
35
|
+
mimeType?: string;
|
|
36
|
+
|
|
37
|
+
// Browsable fields
|
|
38
|
+
/** Child items. If present (and no `url`), this item is browsable. */
|
|
39
|
+
children?: BrowseItem[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A top-level category in the browse tree.
|
|
44
|
+
* On Android Auto, each category is a browsable folder.
|
|
45
|
+
* On CarPlay, each category is a tab (max 4; overflow creates a "More" tab).
|
|
11
46
|
*/
|
|
12
47
|
export interface BrowseCategory {
|
|
13
48
|
/** Unique identifier for this category. */
|
|
14
49
|
mediaId: string;
|
|
15
50
|
/** Display title for the category (e.g. "Albums", "Podcasts"). */
|
|
16
51
|
title: string;
|
|
17
|
-
/**
|
|
18
|
-
items:
|
|
52
|
+
/** Items within this category — can be playable tracks or browsable containers. */
|
|
53
|
+
items: BrowseItem[];
|
|
19
54
|
}
|