react-native-audio-browser 0.2.0-next.2 → 0.2.0-next.20

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 (660) hide show
  1. package/README.md +35 -21
  2. package/android/build.gradle +35 -12
  3. package/android/gradle.properties +2 -2
  4. package/android/src/main/AndroidManifest.xml +3 -1
  5. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +389 -164
  6. package/android/src/main/java/com/audiobrowser/AudioBrowserLifecycleModule.kt +38 -0
  7. package/android/src/main/java/com/audiobrowser/AudioBrowserPackage.kt +18 -2
  8. package/android/src/main/java/com/audiobrowser/ServiceBinding.kt +48 -0
  9. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +315 -213
  10. package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +24 -5
  11. package/android/src/main/java/com/audiobrowser/browser/InertStyleDiagnostic.kt +267 -0
  12. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +97 -58
  13. package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +70 -29
  14. package/android/src/main/java/com/audiobrowser/browser/StyleResolver.kt +60 -0
  15. package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +20 -7
  16. package/android/src/main/java/com/audiobrowser/extension/TappedTrack.kt +20 -0
  17. package/android/src/main/java/com/audiobrowser/extension/TrackIdentity.kt +15 -0
  18. package/android/src/main/java/com/audiobrowser/http/HttpClient.kt +20 -3
  19. package/android/src/main/java/com/audiobrowser/model/IcyTitle.kt +24 -0
  20. package/android/src/main/java/com/audiobrowser/model/PlaybackMetadata.kt +10 -6
  21. package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +12 -12
  22. package/android/src/main/java/com/audiobrowser/player/CapabilityControls.kt +111 -58
  23. package/android/src/main/java/com/audiobrowser/player/CrossOriginHeaderStripper.kt +77 -0
  24. package/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +28 -10
  25. package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +509 -230
  26. package/android/src/main/java/com/audiobrowser/player/MediaSessionCommandManager.kt +218 -252
  27. package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -25
  28. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +113 -78
  29. package/android/src/main/java/com/audiobrowser/player/Player.kt +81 -38
  30. package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
  31. package/android/src/main/java/com/audiobrowser/player/PlayerListener.kt +1 -1
  32. package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +2 -1
  33. package/android/src/main/java/com/audiobrowser/player/ShuffleOrderLedBy.kt +30 -0
  34. package/android/src/main/java/com/audiobrowser/tls/AiaCertChaser.kt +67 -11
  35. package/android/src/main/java/com/audiobrowser/tls/AiaChasingExtendedTrustManager.kt +168 -0
  36. package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +58 -14
  37. package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +35 -7
  38. package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +278 -59
  39. package/android/src/main/java/com/audiobrowser/util/ArtworkVariant.kt +7 -9
  40. package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +56 -40
  41. package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
  42. package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +108 -0
  43. package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +56 -52
  44. package/android/src/main/res/values/strings.xml +25 -5
  45. package/android/src/test/java/com/audiobrowser/ServiceBindingTest.kt +87 -0
  46. package/android/src/test/java/com/audiobrowser/TestFixtures.kt +119 -33
  47. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
  48. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +15 -0
  49. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +346 -8
  50. package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
  51. package/android/src/test/java/com/audiobrowser/browser/InertStyleDiagnosticTest.kt +277 -0
  52. package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +3 -2
  53. package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +147 -0
  54. package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -55
  55. package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +154 -0
  56. package/android/src/test/java/com/audiobrowser/extension/TappedTrackTest.kt +43 -0
  57. package/android/src/test/java/com/audiobrowser/extension/TrackIdentityTest.kt +41 -0
  58. package/android/src/test/java/com/audiobrowser/model/IcyTitleTest.kt +49 -0
  59. package/android/src/test/java/com/audiobrowser/player/BrowseTilesTest.kt +385 -0
  60. package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +101 -58
  61. package/android/src/test/java/com/audiobrowser/player/CrossOriginHeaderStripperTest.kt +94 -0
  62. package/android/src/test/java/com/audiobrowser/player/MediaSessionSlotMappingTest.kt +45 -0
  63. package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
  64. package/android/src/test/java/com/audiobrowser/player/PlaybackErrorClassifierTest.kt +3 -4
  65. package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
  66. package/android/src/test/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicyTest.kt +3 -3
  67. package/android/src/test/java/com/audiobrowser/player/ShuffleOrderLedByTest.kt +79 -0
  68. package/android/src/test/java/com/audiobrowser/tls/AiaCertChaserTest.kt +197 -7
  69. package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +325 -4
  70. package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherCallSiteTest.kt +322 -0
  71. package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherTest.kt +83 -0
  72. package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
  73. package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +162 -0
  74. package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +7 -7
  75. package/ios/Browser/BrowserConfig.swift +102 -5
  76. package/ios/Browser/BrowserManager+URLResolution.swift +18 -14
  77. package/ios/Browser/BrowserManager.swift +230 -205
  78. package/ios/Browser/BrowserPathHelper.swift +44 -44
  79. package/ios/Browser/InertStyleDiagnostic.swift +279 -0
  80. package/ios/Browser/JsonModels.swift +264 -106
  81. package/ios/Browser/SearchDrillIn.swift +7 -7
  82. package/ios/Browser/SectionPresentation.swift +64 -0
  83. package/ios/Browser/SectionScope.swift +58 -24
  84. package/ios/Browser/StyleResolver.swift +58 -0
  85. package/ios/Browser/TabBarEntries.swift +9 -3
  86. package/ios/Browser/TrackIdTemplate.swift +37 -0
  87. package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
  88. package/ios/CarPlay/CarPlayController.swift +227 -85
  89. package/ios/CarPlay/CarPlayImageLoader.swift +42 -20
  90. package/ios/CarPlay/CarPlayListItemFactory.swift +289 -84
  91. package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
  92. package/ios/CarPlay/RNABMediaAddHandler.swift +6 -6
  93. package/ios/CarPlay/RNABMediaAffinityHandler.swift +2 -2
  94. package/ios/CarPlay/RNABMediaIntentHandler.swift +16 -16
  95. package/ios/Extension/Capability+RemoteCommand.swift +1 -1
  96. package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
  97. package/ios/Extension/ResolvedTrack+Copying.swift +13 -15
  98. package/ios/Extension/Section+Copying.swift +29 -0
  99. package/ios/Extension/String+IcyCharset.swift +21 -0
  100. package/ios/Extension/TimedMetadata+AVFoundation.swift +6 -4
  101. package/ios/Extension/Track+Copying.swift +8 -12
  102. package/ios/Extension/Track+Identity.swift +18 -0
  103. package/ios/Extension/UIApplication+ActiveScene.swift +27 -0
  104. package/ios/Http/HttpClient.swift +8 -2
  105. package/ios/HybridAudioBrowser.swift +253 -100
  106. package/ios/Model/NitroTypeStubs.swift +125 -23
  107. package/ios/Model/PlayerUpdateOptions.swift +7 -0
  108. package/ios/Model/RemoteCommand.swift +18 -0
  109. package/ios/Model/TrackPlayerError.swift +2 -2
  110. package/ios/Option/SessionCategories.swift +3 -2
  111. package/ios/Player/MediaIntentCriteria.swift +17 -9
  112. package/ios/Player/MediaLoader.swift +33 -9
  113. package/ios/Player/NowPlayingUpdater.swift +54 -6
  114. package/ios/Player/PlaybackCoordinator.swift +13 -6
  115. package/ios/Player/PlaybackErrorHandler.swift +4 -4
  116. package/ios/Player/PlaybackTimer.swift +8 -2
  117. package/ios/Player/QueueManager.swift +46 -13
  118. package/ios/Player/RetryManager.swift +80 -18
  119. package/ios/Player/SeekCompletionHandler.swift +3 -1
  120. package/ios/Player/ShuffleOrder.swift +33 -0
  121. package/ios/Player/SleepTimerHandling.swift +13 -0
  122. package/ios/RemoteCommand/RemoteCommandCallbacks.swift +47 -0
  123. package/ios/RemoteCommand/RemoteCommandController.swift +62 -24
  124. package/ios/Tests/BrowserPathHelperTests.swift +50 -20
  125. package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
  126. package/ios/Tests/InertStyleDiagnosticTests.swift +200 -0
  127. package/ios/Tests/JsonModelsTests.swift +150 -1
  128. package/ios/Tests/LRUCacheTests.swift +111 -0
  129. package/ios/Tests/LoadSeekCoordinatorTests.swift +3 -1
  130. package/ios/Tests/MediaIntentCriteriaTests.swift +2 -2
  131. package/ios/Tests/PlaybackCoordinatorTests.swift +1 -1
  132. package/ios/Tests/PlaybackErrorHandlerTests.swift +3 -1
  133. package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
  134. package/ios/Tests/PlayerTimeObserverTests.swift +37 -0
  135. package/ios/Tests/QueueManagerTests.swift +122 -10
  136. package/ios/Tests/RemoteCommandControllerTests.swift +172 -0
  137. package/ios/Tests/RemoteCommandTests.swift +67 -0
  138. package/ios/Tests/ResolvedTrackCopyingTests.swift +39 -35
  139. package/ios/Tests/RetryManagerTests.swift +89 -0
  140. package/ios/Tests/SearchDrillInTests.swift +16 -16
  141. package/ios/Tests/SectionPresentationTests.swift +90 -0
  142. package/ios/Tests/SectionScopeTests.swift +87 -55
  143. package/ios/Tests/StyleResolverTests.swift +127 -0
  144. package/ios/Tests/Support/TestTypes.swift +8 -1
  145. package/ios/Tests/TabBarEntriesTests.swift +19 -19
  146. package/ios/Tests/TimedMetadataAVFoundationTests.swift +42 -0
  147. package/ios/Tests/TrackIdTemplateTests.swift +67 -0
  148. package/ios/Tests/TrackIdentityTests.swift +20 -0
  149. package/ios/Tests/TrackSelectorTests.swift +168 -33
  150. package/ios/TrackPlayer.swift +63 -35
  151. package/ios/TrackPlayerCallbacks.swift +5 -38
  152. package/ios/TrackSelector.swift +45 -30
  153. package/ios/Util/ArtworkImageFetcher.swift +16 -1
  154. package/ios/Util/LRUCache.swift +4 -1
  155. package/ios/Util/NetworkMonitor.swift +43 -26
  156. package/ios/Util/SFSymbolRenderer.swift +24 -2
  157. package/ios/Util/SVGProcessor.swift +9 -2
  158. package/lib/commonjs/AudioBrowser.js +8 -8
  159. package/lib/commonjs/AudioBrowser.js.map +1 -1
  160. package/lib/commonjs/CLAUDE.md +52 -0
  161. package/lib/commonjs/features/browser-config.js +12 -8
  162. package/lib/commonjs/features/browser-config.js.map +1 -1
  163. package/lib/commonjs/features/browser.js +11 -3
  164. package/lib/commonjs/features/browser.js.map +1 -1
  165. package/lib/commonjs/features/carConnection.js +1 -1
  166. package/lib/commonjs/features/equalizer.js +1 -1
  167. package/lib/commonjs/features/errors.js +3 -3
  168. package/lib/commonjs/features/favorites.js +14 -11
  169. package/lib/commonjs/features/favorites.js.map +1 -1
  170. package/lib/commonjs/features/gate.js +16 -1
  171. package/lib/commonjs/features/gate.js.map +1 -1
  172. package/lib/commonjs/features/metadata.js +20 -3
  173. package/lib/commonjs/features/metadata.js.map +1 -1
  174. package/lib/commonjs/features/network.js +1 -1
  175. package/lib/commonjs/features/nowPlaying.js +1 -1
  176. package/lib/commonjs/features/output.js +1 -1
  177. package/lib/commonjs/features/playback/controls.js +4 -2
  178. package/lib/commonjs/features/playback/controls.js.map +1 -1
  179. package/lib/commonjs/features/playback/playWhenReady.js +1 -1
  180. package/lib/commonjs/features/playback/playing.js +1 -1
  181. package/lib/commonjs/features/playback/progress.js +3 -2
  182. package/lib/commonjs/features/playback/progress.js.map +1 -1
  183. package/lib/commonjs/features/playback/rate.js +8 -1
  184. package/lib/commonjs/features/playback/rate.js.map +1 -1
  185. package/lib/commonjs/features/playback/state.js +3 -4
  186. package/lib/commonjs/features/playback/state.js.map +1 -1
  187. package/lib/commonjs/features/playback/trackPlaybackTime.js +0 -6
  188. package/lib/commonjs/features/playback/trackPlaybackTime.js.map +1 -1
  189. package/lib/commonjs/features/playback/volume.js +1 -1
  190. package/lib/commonjs/features/player/options.js +48 -34
  191. package/lib/commonjs/features/player/options.js.map +1 -1
  192. package/lib/commonjs/features/player/setup.js +18 -9
  193. package/lib/commonjs/features/player/setup.js.map +1 -1
  194. package/lib/commonjs/features/player/validateOptions.js +23 -0
  195. package/lib/commonjs/features/player/validateOptions.js.map +1 -0
  196. package/lib/commonjs/features/queue/activeTrack.js +15 -4
  197. package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
  198. package/lib/commonjs/features/queue/queue.js +13 -6
  199. package/lib/commonjs/features/queue/queue.js.map +1 -1
  200. package/lib/commonjs/features/queue/repeatMode.js +1 -1
  201. package/lib/commonjs/features/queue/shuffle.js +1 -1
  202. package/lib/commonjs/features/remoteControls.js +13 -92
  203. package/lib/commonjs/features/remoteControls.js.map +1 -1
  204. package/lib/commonjs/features/sleepTimer.js +13 -1
  205. package/lib/commonjs/features/sleepTimer.js.map +1 -1
  206. package/lib/commonjs/test-utils/reactNativeStub.js +65 -0
  207. package/lib/commonjs/test-utils/reactNativeStub.js.map +1 -0
  208. package/lib/commonjs/utils/LazyNativeEmitter.js +28 -14
  209. package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
  210. package/lib/commonjs/utils/NativeUpdatedValue.js +31 -13
  211. package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
  212. package/lib/commonjs/utils/getTrackIdentity.js +24 -0
  213. package/lib/commonjs/utils/getTrackIdentity.js.map +1 -0
  214. package/lib/commonjs/utils/useNativeValueRefreshedBy.js +33 -0
  215. package/lib/commonjs/utils/useNativeValueRefreshedBy.js.map +1 -0
  216. package/lib/commonjs/web/NativeAudioBrowser.js +200 -75
  217. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  218. package/lib/commonjs/web/TrackPlayer/LoadAttempt.js +37 -0
  219. package/lib/commonjs/web/TrackPlayer/LoadAttempt.js.map +1 -0
  220. package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js +18 -2
  221. package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js.map +1 -1
  222. package/lib/commonjs/web/TrackPlayer/Player.js +254 -39
  223. package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -1
  224. package/lib/commonjs/web/TrackPlayer/QueueManager.js +14 -0
  225. package/lib/commonjs/web/TrackPlayer/QueueManager.js.map +1 -1
  226. package/lib/commonjs/web/TrackPlayer/QueuePlayer.js +33 -12
  227. package/lib/commonjs/web/TrackPlayer/QueuePlayer.js.map +1 -1
  228. package/lib/commonjs/web/browser/BrowserManager.js +175 -100
  229. package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
  230. package/lib/commonjs/web/browser/FavoriteManager.js +30 -21
  231. package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
  232. package/lib/commonjs/web/browser/SearchManager.js +18 -23
  233. package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
  234. package/lib/commonjs/web/browser/assertBrowsePageShape.js +2 -2
  235. package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -1
  236. package/lib/commonjs/web/browser/classifyTrackNavigation.js +9 -9
  237. package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -1
  238. package/lib/commonjs/web/browser/sections.js +89 -0
  239. package/lib/commonjs/web/browser/sections.js.map +1 -0
  240. package/lib/commonjs/web/http/RequestConfigBuilder.js +110 -27
  241. package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -1
  242. package/lib/commonjs/web/http/followMediaRedirect.js +219 -0
  243. package/lib/commonjs/web/http/followMediaRedirect.js.map +1 -0
  244. package/lib/commonjs/web/player/NowPlayingManager.js +4 -3
  245. package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
  246. package/lib/commonjs/web/util/BrowserPathHelper.js +56 -11
  247. package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
  248. package/lib/module/AudioBrowser.js +2 -1
  249. package/lib/module/AudioBrowser.js.map +1 -1
  250. package/lib/module/CLAUDE.md +52 -0
  251. package/lib/module/features/browser-config.js +12 -8
  252. package/lib/module/features/browser-config.js.map +1 -1
  253. package/lib/module/features/browser.js +11 -3
  254. package/lib/module/features/browser.js.map +1 -1
  255. package/lib/module/features/carConnection.js +1 -1
  256. package/lib/module/features/equalizer.js +1 -1
  257. package/lib/module/features/errors.js +3 -3
  258. package/lib/module/features/favorites.js +14 -11
  259. package/lib/module/features/favorites.js.map +1 -1
  260. package/lib/module/features/gate.js +16 -1
  261. package/lib/module/features/gate.js.map +1 -1
  262. package/lib/module/features/metadata.js +20 -3
  263. package/lib/module/features/metadata.js.map +1 -1
  264. package/lib/module/features/network.js +1 -1
  265. package/lib/module/features/nowPlaying.js +1 -1
  266. package/lib/module/features/output.js +1 -1
  267. package/lib/module/features/playback/controls.js +4 -2
  268. package/lib/module/features/playback/controls.js.map +1 -1
  269. package/lib/module/features/playback/playWhenReady.js +1 -1
  270. package/lib/module/features/playback/playing.js +1 -1
  271. package/lib/module/features/playback/progress.js +3 -2
  272. package/lib/module/features/playback/progress.js.map +1 -1
  273. package/lib/module/features/playback/rate.js +8 -1
  274. package/lib/module/features/playback/rate.js.map +1 -1
  275. package/lib/module/features/playback/state.js +3 -4
  276. package/lib/module/features/playback/state.js.map +1 -1
  277. package/lib/module/features/playback/trackPlaybackTime.js +0 -5
  278. package/lib/module/features/playback/trackPlaybackTime.js.map +1 -1
  279. package/lib/module/features/playback/volume.js +1 -1
  280. package/lib/module/features/player/options.js +47 -32
  281. package/lib/module/features/player/options.js.map +1 -1
  282. package/lib/module/features/player/setup.js +17 -8
  283. package/lib/module/features/player/setup.js.map +1 -1
  284. package/lib/module/features/player/validateOptions.js +19 -0
  285. package/lib/module/features/player/validateOptions.js.map +1 -0
  286. package/lib/module/features/queue/activeTrack.js +15 -4
  287. package/lib/module/features/queue/activeTrack.js.map +1 -1
  288. package/lib/module/features/queue/queue.js +13 -6
  289. package/lib/module/features/queue/queue.js.map +1 -1
  290. package/lib/module/features/queue/repeatMode.js +1 -1
  291. package/lib/module/features/queue/shuffle.js +1 -1
  292. package/lib/module/features/remoteControls.js +13 -92
  293. package/lib/module/features/remoteControls.js.map +1 -1
  294. package/lib/module/features/sleepTimer.js +13 -1
  295. package/lib/module/features/sleepTimer.js.map +1 -1
  296. package/lib/module/test-utils/reactNativeStub.js +58 -0
  297. package/lib/module/test-utils/reactNativeStub.js.map +1 -0
  298. package/lib/module/utils/LazyNativeEmitter.js +28 -14
  299. package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
  300. package/lib/module/utils/NativeUpdatedValue.js +31 -13
  301. package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
  302. package/lib/module/utils/getTrackIdentity.js +20 -0
  303. package/lib/module/utils/getTrackIdentity.js.map +1 -0
  304. package/lib/module/utils/useNativeValueRefreshedBy.js +29 -0
  305. package/lib/module/utils/useNativeValueRefreshedBy.js.map +1 -0
  306. package/lib/module/web/NativeAudioBrowser.js +200 -75
  307. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  308. package/lib/module/web/TrackPlayer/LoadAttempt.js +32 -0
  309. package/lib/module/web/TrackPlayer/LoadAttempt.js.map +1 -0
  310. package/lib/module/web/TrackPlayer/PlaybackStateMachine.js +18 -2
  311. package/lib/module/web/TrackPlayer/PlaybackStateMachine.js.map +1 -1
  312. package/lib/module/web/TrackPlayer/Player.js +254 -39
  313. package/lib/module/web/TrackPlayer/Player.js.map +1 -1
  314. package/lib/module/web/TrackPlayer/QueueManager.js +14 -0
  315. package/lib/module/web/TrackPlayer/QueueManager.js.map +1 -1
  316. package/lib/module/web/TrackPlayer/QueuePlayer.js +33 -12
  317. package/lib/module/web/TrackPlayer/QueuePlayer.js.map +1 -1
  318. package/lib/module/web/browser/BrowserManager.js +175 -100
  319. package/lib/module/web/browser/BrowserManager.js.map +1 -1
  320. package/lib/module/web/browser/FavoriteManager.js +31 -21
  321. package/lib/module/web/browser/FavoriteManager.js.map +1 -1
  322. package/lib/module/web/browser/SearchManager.js +18 -23
  323. package/lib/module/web/browser/SearchManager.js.map +1 -1
  324. package/lib/module/web/browser/assertBrowsePageShape.js +2 -2
  325. package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -1
  326. package/lib/module/web/browser/classifyTrackNavigation.js +9 -9
  327. package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -1
  328. package/lib/module/web/browser/sections.js +83 -0
  329. package/lib/module/web/browser/sections.js.map +1 -0
  330. package/lib/module/web/http/RequestConfigBuilder.js +110 -27
  331. package/lib/module/web/http/RequestConfigBuilder.js.map +1 -1
  332. package/lib/module/web/http/followMediaRedirect.js +215 -0
  333. package/lib/module/web/http/followMediaRedirect.js.map +1 -0
  334. package/lib/module/web/player/NowPlayingManager.js +4 -3
  335. package/lib/module/web/player/NowPlayingManager.js.map +1 -1
  336. package/lib/module/web/util/BrowserPathHelper.js +56 -11
  337. package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
  338. package/lib/typescript/package.json +1 -0
  339. package/lib/typescript/src/AudioBrowser.d.ts +1 -1
  340. package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
  341. package/lib/typescript/src/features/browser-config.d.ts.map +1 -1
  342. package/lib/typescript/src/features/browser.d.ts +10 -2
  343. package/lib/typescript/src/features/browser.d.ts.map +1 -1
  344. package/lib/typescript/src/features/carConnection.d.ts +1 -1
  345. package/lib/typescript/src/features/equalizer.d.ts +1 -1
  346. package/lib/typescript/src/features/errors.d.ts +3 -3
  347. package/lib/typescript/src/features/favorites.d.ts +14 -11
  348. package/lib/typescript/src/features/favorites.d.ts.map +1 -1
  349. package/lib/typescript/src/features/gate.d.ts +18 -2
  350. package/lib/typescript/src/features/gate.d.ts.map +1 -1
  351. package/lib/typescript/src/features/metadata.d.ts +20 -3
  352. package/lib/typescript/src/features/metadata.d.ts.map +1 -1
  353. package/lib/typescript/src/features/network.d.ts +1 -1
  354. package/lib/typescript/src/features/nowPlaying.d.ts +1 -1
  355. package/lib/typescript/src/features/output.d.ts +1 -1
  356. package/lib/typescript/src/features/playback/controls.d.ts +4 -2
  357. package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
  358. package/lib/typescript/src/features/playback/playWhenReady.d.ts +1 -1
  359. package/lib/typescript/src/features/playback/playing.d.ts +1 -1
  360. package/lib/typescript/src/features/playback/progress.d.ts +1 -1
  361. package/lib/typescript/src/features/playback/progress.d.ts.map +1 -1
  362. package/lib/typescript/src/features/playback/rate.d.ts +8 -1
  363. package/lib/typescript/src/features/playback/rate.d.ts.map +1 -1
  364. package/lib/typescript/src/features/playback/state.d.ts +3 -4
  365. package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
  366. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +1 -1
  367. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -1
  368. package/lib/typescript/src/features/playback/volume.d.ts +1 -1
  369. package/lib/typescript/src/features/player/options.d.ts +108 -56
  370. package/lib/typescript/src/features/player/options.d.ts.map +1 -1
  371. package/lib/typescript/src/features/player/setup.d.ts +14 -4
  372. package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
  373. package/lib/typescript/src/features/player/validateOptions.d.ts +2 -0
  374. package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -0
  375. package/lib/typescript/src/features/queue/activeTrack.d.ts +9 -2
  376. package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
  377. package/lib/typescript/src/features/queue/queue.d.ts +7 -4
  378. package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
  379. package/lib/typescript/src/features/queue/repeatMode.d.ts +1 -1
  380. package/lib/typescript/src/features/queue/shuffle.d.ts +1 -1
  381. package/lib/typescript/src/features/remoteControls.d.ts +23 -22
  382. package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
  383. package/lib/typescript/src/features/sleepTimer.d.ts +1 -1
  384. package/lib/typescript/src/features/sleepTimer.d.ts.map +1 -1
  385. package/lib/typescript/src/test-utils/reactNativeStub.d.ts +36 -0
  386. package/lib/typescript/src/test-utils/reactNativeStub.d.ts.map +1 -0
  387. package/lib/typescript/src/types/browser-native.d.ts +3 -2
  388. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  389. package/lib/typescript/src/types/browser-nodes.d.ts +380 -126
  390. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  391. package/lib/typescript/src/types/browser.d.ts +82 -57
  392. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  393. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +19 -16
  394. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
  395. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +24 -19
  396. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
  397. package/lib/typescript/src/utils/getTrackIdentity.d.ts +18 -0
  398. package/lib/typescript/src/utils/getTrackIdentity.d.ts.map +1 -0
  399. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts +21 -0
  400. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts.map +1 -0
  401. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +1 -2
  402. package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +2 -0
  403. package/nitrogen/generated/android/c++/JAndroidOptions.hpp +10 -10
  404. package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
  405. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +8 -3
  406. package/nitrogen/generated/android/c++/JBrowseResult.hpp +16 -4
  407. package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
  408. package/nitrogen/generated/android/c++/JCardImage.hpp +58 -0
  409. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +8 -3
  410. package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +8 -3
  411. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +8 -3
  412. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +8 -3
  413. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +8 -3
  414. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +8 -3
  415. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +8 -2
  416. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +8 -2
  417. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__string__.hpp +102 -0
  418. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +16 -4
  419. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +8 -3
  420. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +7 -10
  421. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +8 -3
  422. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +15 -3
  423. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +8 -2
  424. package/nitrogen/generated/android/c++/JGridTile.hpp +61 -0
  425. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +45 -25
  426. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +1 -1
  427. package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
  428. package/nitrogen/generated/android/c++/JImageShape.hpp +58 -0
  429. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +8 -3
  430. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +36 -11
  431. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +14 -2
  432. package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +15 -12
  433. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +7 -10
  434. package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +10 -10
  435. package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
  436. package/nitrogen/generated/android/c++/JOptions.hpp +7 -10
  437. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +8 -3
  438. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
  439. package/nitrogen/generated/android/c++/{JNotificationButton.hpp → JRemoteButton.hpp} +19 -19
  440. package/nitrogen/generated/android/c++/JRemoteButtonLayout.hpp +86 -0
  441. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +57 -49
  442. package/nitrogen/generated/android/c++/JSection.hpp +116 -0
  443. package/nitrogen/generated/android/c++/JSectionStyle.hpp +96 -0
  444. package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
  445. package/nitrogen/generated/android/c++/JTrack.hpp +25 -46
  446. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +8 -2
  447. package/nitrogen/generated/android/c++/JTrackStyle.hpp +46 -18
  448. package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.cpp +26 -0
  449. package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.hpp +75 -0
  450. package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +16 -4
  451. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +3 -3
  452. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → ArtworkRendering.kt} +5 -5
  453. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation.kt +23 -0
  454. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CardImage.kt +23 -0
  455. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__string__.kt +80 -0
  456. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/GridTile.kt +24 -0
  457. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +1 -1
  458. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +6 -3
  459. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageShape.kt +23 -0
  460. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +8 -5
  461. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +3 -3
  462. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +6 -3
  463. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  464. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{NotificationButton.kt → RemoteButton.kt} +3 -3
  465. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteButtonLayout.kt +44 -0
  466. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -15
  467. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → Section.kt} +15 -6
  468. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SectionStyle.kt +59 -0
  469. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StyleDisplay.kt +23 -0
  470. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +6 -12
  471. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +35 -5
  472. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Variant_NullType_NotificationButtonLayout.kt → Variant_NullType_RemoteButtonLayout.kt} +9 -9
  473. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +9 -0
  474. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +244 -133
  475. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +31 -16
  476. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +33 -18
  477. package/nitrogen/generated/ios/swift/AndroidOptions.swift +12 -12
  478. package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
  479. package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
  480. package/nitrogen/generated/ios/swift/CardImage.swift +40 -0
  481. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__string__.swift +54 -0
  482. package/nitrogen/generated/ios/swift/GridTile.swift +44 -0
  483. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +1 -1
  484. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +2 -2
  485. package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
  486. package/nitrogen/generated/ios/swift/ImageShape.swift +40 -0
  487. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +52 -5
  488. package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +12 -12
  489. package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
  490. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
  491. package/nitrogen/generated/ios/swift/{NotificationButton.swift → RemoteButton.swift} +6 -6
  492. package/nitrogen/generated/ios/swift/RemoteButtonLayout.swift +57 -0
  493. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +62 -73
  494. package/nitrogen/generated/ios/swift/Section.swift +82 -0
  495. package/nitrogen/generated/ios/swift/SectionStyle.swift +133 -0
  496. package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
  497. package/nitrogen/generated/ios/swift/Track.swift +28 -63
  498. package/nitrogen/generated/ios/swift/TrackStyle.swift +86 -22
  499. package/nitrogen/generated/ios/swift/{Variant_NullType_NotificationButtonLayout.swift → Variant_NullType_RemoteButtonLayout.swift} +3 -3
  500. package/nitrogen/generated/shared/c++/AndroidOptions.hpp +8 -8
  501. package/nitrogen/generated/shared/c++/{FavoritesMatchMode.hpp → ArtworkRendering.hpp} +17 -17
  502. package/nitrogen/generated/shared/c++/CarPlayPlayingIndicatorLocation.hpp +76 -0
  503. package/nitrogen/generated/shared/c++/CardImage.hpp +76 -0
  504. package/nitrogen/generated/shared/c++/GridTile.hpp +80 -0
  505. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +1 -1
  506. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +1 -1
  507. package/nitrogen/generated/shared/c++/IOSOptions.hpp +9 -2
  508. package/nitrogen/generated/shared/c++/ImageShape.hpp +76 -0
  509. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +10 -6
  510. package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +8 -8
  511. package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
  512. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
  513. package/nitrogen/generated/shared/c++/{NotificationButton.hpp → RemoteButton.hpp} +19 -19
  514. package/nitrogen/generated/shared/c++/RemoteButtonLayout.hpp +94 -0
  515. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +33 -37
  516. package/nitrogen/generated/shared/c++/Section.hpp +102 -0
  517. package/nitrogen/generated/shared/c++/SectionStyle.hpp +126 -0
  518. package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
  519. package/nitrogen/generated/shared/c++/Track.hpp +18 -30
  520. package/nitrogen/generated/shared/c++/TrackStyle.hpp +73 -34
  521. package/package.json +24 -11
  522. package/src/AudioBrowser.ts +2 -1
  523. package/src/CLAUDE.md +52 -0
  524. package/src/features/battery.test.ts +79 -0
  525. package/src/features/browser-config.test.ts +21 -6
  526. package/src/features/browser-config.ts +12 -8
  527. package/src/features/browser.test.ts +1 -1
  528. package/src/features/browser.ts +11 -3
  529. package/src/features/carConnection.ts +1 -1
  530. package/src/features/equalizer.ts +1 -1
  531. package/src/features/errors.ts +3 -3
  532. package/src/features/favorites.ts +14 -11
  533. package/src/features/gate.ts +16 -1
  534. package/src/features/hook-wiring.test.ts +302 -0
  535. package/src/features/metadata.ts +20 -3
  536. package/src/features/network.ts +1 -1
  537. package/src/features/nowPlaying.ts +1 -1
  538. package/src/features/output.ts +1 -1
  539. package/src/features/playback/controls.ts +4 -2
  540. package/src/features/playback/playWhenReady.ts +1 -1
  541. package/src/features/playback/playing.ts +1 -1
  542. package/src/features/playback/progress.test.ts +169 -0
  543. package/src/features/playback/progress.ts +3 -2
  544. package/src/features/playback/rate.ts +8 -1
  545. package/src/features/playback/state.ts +3 -4
  546. package/src/features/playback/trackPlaybackTime.test.ts +16 -6
  547. package/src/features/playback/trackPlaybackTime.ts +1 -6
  548. package/src/features/playback/volume.ts +1 -1
  549. package/src/features/player/options.ts +126 -76
  550. package/src/features/player/setup.test.ts +24 -7
  551. package/src/features/player/setup.ts +22 -10
  552. package/src/features/player/validateOptions.ts +21 -0
  553. package/src/features/queue/activeTrack.ts +15 -4
  554. package/src/features/queue/queue.ts +13 -6
  555. package/src/features/queue/repeatMode.ts +1 -1
  556. package/src/features/queue/shuffle.ts +1 -1
  557. package/src/features/remoteControls.ts +13 -92
  558. package/src/features/sleepTimer.test.ts +172 -0
  559. package/src/features/sleepTimer.ts +9 -1
  560. package/src/nitro-stub-drift.test.ts +277 -0
  561. package/src/public-surface.test.ts +147 -0
  562. package/src/specs/audio-browser.nitro.ts +5 -4
  563. package/src/style-resolution.test.ts +210 -0
  564. package/src/test-utils/reactNativeStub.ts +60 -0
  565. package/src/types/browser-native.ts +7 -3
  566. package/src/types/browser-nodes.ts +396 -134
  567. package/src/types/browser.ts +85 -59
  568. package/src/utils/LazyNativeEmitter.ts +28 -15
  569. package/src/utils/NativeUpdatedValue.ts +29 -13
  570. package/src/utils/getTrackIdentity.ts +20 -0
  571. package/src/utils/useDebug.test.ts +182 -0
  572. package/src/utils/useNativeUpdatedValue.test.ts +103 -0
  573. package/src/utils/useNativeValueRefreshedBy.ts +38 -0
  574. package/src/web/NativeAudioBrowser.playWhenReady.test.ts +232 -2
  575. package/src/web/NativeAudioBrowser.ts +239 -82
  576. package/src/web/TrackPlayer/LoadAttempt.ts +29 -0
  577. package/src/web/TrackPlayer/PlaybackStateMachine.test.ts +60 -13
  578. package/src/web/TrackPlayer/PlaybackStateMachine.ts +22 -6
  579. package/src/web/TrackPlayer/Player.dispatch.test.ts +5 -3
  580. package/src/web/TrackPlayer/Player.load.test.ts +137 -1
  581. package/src/web/TrackPlayer/Player.ts +284 -37
  582. package/src/web/TrackPlayer/QueueManager.test.ts +29 -0
  583. package/src/web/TrackPlayer/QueueManager.ts +14 -0
  584. package/src/web/TrackPlayer/QueuePlayer.ts +33 -14
  585. package/src/web/__tests__/lifecycle.test.ts +345 -0
  586. package/src/web/__tests__/lifecycleHarness.ts +351 -0
  587. package/src/web/__tests__/loadEdgeCases.test.ts +246 -0
  588. package/src/web/__tests__/loadSupersession.test.ts +175 -0
  589. package/src/web/__tests__/retry.test.ts +169 -0
  590. package/src/web/browser/BrowserManager.ts +209 -111
  591. package/src/web/browser/FavoriteManager.test.ts +84 -0
  592. package/src/web/browser/FavoriteManager.ts +28 -23
  593. package/src/web/browser/SearchManager.test.ts +75 -0
  594. package/src/web/browser/SearchManager.ts +25 -28
  595. package/src/web/browser/__tests__/artwork-resolution.test.ts +117 -0
  596. package/src/web/browser/__tests__/layer-resolver.test.ts +35 -0
  597. package/src/web/browser/__tests__/search-artwork.test.ts +46 -0
  598. package/src/web/browser/__tests__/search-navigation.test.ts +76 -0
  599. package/src/web/browser/assertBrowsePageShape.test.ts +1 -1
  600. package/src/web/browser/assertBrowsePageShape.ts +5 -3
  601. package/src/web/browser/classifyTrackNavigation.test.ts +10 -8
  602. package/src/web/browser/classifyTrackNavigation.ts +9 -9
  603. package/src/web/browser/parseSearchResponse.test.ts +8 -2
  604. package/src/web/browser/sections.test.ts +91 -0
  605. package/src/web/browser/sections.ts +72 -0
  606. package/src/web/http/RequestConfigBuilder.test.ts +241 -1
  607. package/src/web/http/RequestConfigBuilder.ts +140 -33
  608. package/src/web/http/followMediaRedirect.test.ts +289 -0
  609. package/src/web/http/followMediaRedirect.ts +253 -0
  610. package/src/web/player/NowPlayingManager.ts +4 -3
  611. package/src/web/util/BrowserPathHelper.test.ts +52 -0
  612. package/src/web/util/BrowserPathHelper.ts +61 -13
  613. package/website/guide/android-auto.md +114 -0
  614. package/website/guide/android-certificates.md +409 -0
  615. package/website/guide/artwork.md +255 -0
  616. package/website/guide/audio-output.md +135 -0
  617. package/website/guide/automotive.md +86 -0
  618. package/website/guide/basic-usage.md +151 -0
  619. package/website/guide/battery.md +115 -0
  620. package/website/guide/browser.md +581 -0
  621. package/website/guide/carplay.md +620 -0
  622. package/website/guide/configuration.md +173 -0
  623. package/website/guide/equalizer.md +231 -0
  624. package/website/guide/errors.md +310 -0
  625. package/website/guide/favorites.md +154 -0
  626. package/website/guide/gate.md +143 -0
  627. package/website/guide/getting-started.md +46 -0
  628. package/website/guide/hooks.md +238 -0
  629. package/website/guide/live-streams.md +125 -0
  630. package/website/guide/metadata.md +239 -0
  631. package/website/guide/migrating-from-track-player.md +244 -0
  632. package/website/guide/native-callback-fetch.md +127 -0
  633. package/website/guide/network.md +86 -0
  634. package/website/guide/now-playing.md +175 -0
  635. package/website/guide/playback.md +328 -0
  636. package/website/guide/queue.md +300 -0
  637. package/website/guide/remote-controls.md +256 -0
  638. package/website/guide/search.md +255 -0
  639. package/website/guide/sleep-timer.md +268 -0
  640. package/website/guide/track.md +247 -0
  641. package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
  642. package/ios/Model/MediaURL.swift +0 -67
  643. package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
  644. package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
  645. package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +0 -94
  646. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
  647. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
  648. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +0 -26
  649. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +0 -75
  650. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
  651. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +0 -50
  652. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
  653. package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
  654. package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
  655. package/nitrogen/generated/ios/swift/ImageRowItem.swift +0 -195
  656. package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +0 -92
  657. package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
  658. package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
  659. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
  660. package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +0 -102
@@ -15,6 +15,12 @@
15
15
  * | `paused` | element `pause` |
16
16
  * | `trackEndedNaturally`| element `ended` |
17
17
  *
18
+ * `trackLoading` is left to Shaka rather than also dispatched when `load()` is
19
+ * called. Dispatching it up front would give the URL-resolution window a state
20
+ * to report, but it would put `loading` ahead of
21
+ * `onPlaybackActiveTrackChanged`, and native emits those the other way round —
22
+ * see the note in `NativeAudioBrowser.load`.
23
+ *
18
24
  * Deliberate *commands* (stop, error) set their terminal state directly rather
19
25
  * than flowing through here — they are intentions, not observations. The two
20
26
  * iOS-only events `trackUnloaded` and `audioFrameDecoded` are omitted: web has
@@ -45,7 +51,12 @@ export function nextPlaybackState(current, event) {
45
51
  return 'playing';
46
52
  case 'loadSeekCompleted':
47
53
  // The settle after a load; meaningless from anything but a fresh load.
48
- return current === 'loading' ? 'ready' : null;
54
+ // `buffering` counts as one: a load now always passes through it.
55
+ if (current !== 'loading' && current !== 'buffering') return null;
56
+ // Suppressed while the intent is to play, as Android suppresses
57
+ // STATE_READY there — it is a transient before `playing`, and emitting it
58
+ // flashes a settled, non-loading state mid-startup.
59
+ return event.playWhenReady ? null : 'ready';
49
60
  case 'paused':
50
61
  // A stopped player owns its state; a stray pause must not disturb it.
51
62
  if (current === 'stopped') return null;
@@ -61,7 +72,12 @@ export function nextPlaybackState(current, event) {
61
72
  // it would silently clear the error the UI is rendering (Shaka's
62
73
  // post-error unload emits buffering events without the stopped dispatch
63
74
  // gate); ended/stopped own their state until an explicit load or play.
64
- return current === 'playing' || current === 'ended' || current === 'stopped' || current === 'error' ? null : 'ready';
75
+ if (current === 'playing' || current === 'ended' || current === 'stopped' || current === 'error') {
76
+ return null;
77
+ }
78
+ // Same suppression as `loadSeekCompleted`: while the intent is to play,
79
+ // `playing` is the next state worth reporting.
80
+ return event.playWhenReady ? null : 'ready';
65
81
  }
66
82
  }
67
83
  //# sourceMappingURL=PlaybackStateMachine.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["nextPlaybackState","current","event","type","hasAsset"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/PlaybackStateMachine.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAC/BC,OAAsB,EACtBC,KAAoB,EACE;EACtB,QAAQA,KAAK,CAACC,IAAI;IAChB,KAAK,cAAc;MACjB,OAAO,SAAS;IAClB,KAAK,qBAAqB;MACxB,OAAO,OAAO;IAChB,KAAK,SAAS;MACZ,OAAO,WAAW;IACpB,KAAK,SAAS;MACZ,OAAO,SAAS;IAClB,KAAK,mBAAmB;MACtB;MACA,OAAOF,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,IAAI;IAC/C,KAAK,QAAQ;MACX;MACA,IAAIA,OAAO,KAAK,SAAS,EAAE,OAAO,IAAI;MACtC;MACA,IAAI,CAACC,KAAK,CAACE,QAAQ,EAAE,OAAO,MAAM;MAClC;MACA;MACA,IAAIH,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;MACpC,OAAO,QAAQ;IACjB,KAAK,qBAAqB;MACxB;MACA;MACA;MACA;MACA;MACA,OAAOA,OAAO,KAAK,SAAS,IAC1BA,OAAO,KAAK,OAAO,IACnBA,OAAO,KAAK,SAAS,IACrBA,OAAO,KAAK,OAAO,GACjB,IAAI,GACJ,OAAO;EACf;AACF","ignoreList":[]}
1
+ {"version":3,"names":["nextPlaybackState","current","event","type","playWhenReady","hasAsset"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/PlaybackStateMachine.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAC/BC,OAAsB,EACtBC,KAAoB,EACE;EACtB,QAAQA,KAAK,CAACC,IAAI;IAChB,KAAK,cAAc;MACjB,OAAO,SAAS;IAClB,KAAK,qBAAqB;MACxB,OAAO,OAAO;IAChB,KAAK,SAAS;MACZ,OAAO,WAAW;IACpB,KAAK,SAAS;MACZ,OAAO,SAAS;IAClB,KAAK,mBAAmB;MACtB;MACA;MACA,IAAIF,OAAO,KAAK,SAAS,IAAIA,OAAO,KAAK,WAAW,EAAE,OAAO,IAAI;MACjE;MACA;MACA;MACA,OAAOC,KAAK,CAACE,aAAa,GAAG,IAAI,GAAG,OAAO;IAC7C,KAAK,QAAQ;MACX;MACA,IAAIH,OAAO,KAAK,SAAS,EAAE,OAAO,IAAI;MACtC;MACA,IAAI,CAACC,KAAK,CAACG,QAAQ,EAAE,OAAO,MAAM;MAClC;MACA;MACA,IAAIJ,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;MACpC,OAAO,QAAQ;IACjB,KAAK,qBAAqB;MACxB;MACA;MACA;MACA;MACA;MACA,IACEA,OAAO,KAAK,SAAS,IACrBA,OAAO,KAAK,OAAO,IACnBA,OAAO,KAAK,SAAS,IACrBA,OAAO,KAAK,OAAO,EACnB;QACA,OAAO,IAAI;MACb;MACA;MACA;MACA,OAAOC,KAAK,CAACE,aAAa,GAAG,IAAI,GAAG,OAAO;EAC/C;AACF","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { playbackErrorKind } from '../playbackErrorKind';
4
+ import { LoadAttempt } from './LoadAttempt';
4
5
  import { nextPlaybackState } from './PlaybackStateMachine';
5
6
  import { SetupNotCalledError } from './SetupNotCalledError';
6
7
  import { State } from './State';
@@ -9,6 +10,15 @@ import { State } from './State';
9
10
 
10
11
  // Shaka event type definitions
11
12
 
13
+ /** Per-load overrides that don't belong on the track itself. */
14
+
15
+ /** The mutable request Shaka hands to a networking-engine request filter. */
16
+
17
+ /**
18
+ * `shaka.util.Error.Code.LOAD_INTERRUPTED`. Inlined because shaka is imported
19
+ * for types only here, as the codes in `playbackErrorKind.ts` are.
20
+ */
21
+ const LOAD_INTERRUPTED = 7000;
12
22
  export class Player {
13
23
  hasInitialized = false;
14
24
  _current = undefined;
@@ -18,6 +28,13 @@ export class Player {
18
28
  };
19
29
  _isStopped = false;
20
30
  _loadInProgress = false;
31
+
32
+ /**
33
+ * Headers for the track currently loaded, applied by the request filter
34
+ * installed in `setupPlayer`. On the instance rather than per request so the
35
+ * manifest, its segments and any key requests all carry them.
36
+ */
37
+
21
38
  // current getter/setter
22
39
  get current() {
23
40
  return this._current;
@@ -91,6 +108,18 @@ export class Player {
91
108
  await player.attach(element);
92
109
  this.player = player;
93
110
 
111
+ // Apply the media config's headers to Shaka's requests, as native does to
112
+ // the AVURLAsset / ExoPlayer DataSpec. Without this they resolve and are
113
+ // then dropped, and authenticated media 401s on web alone.
114
+ player.getNetworkingEngine()?.registerRequestFilter((_type, request) => {
115
+ const headers = this.mediaHeaders;
116
+ if (!headers) return;
117
+ request.headers = {
118
+ ...request.headers,
119
+ ...headers
120
+ };
121
+ });
122
+
94
123
  // Listen for relevant events
95
124
  player.addEventListener('error', event => {
96
125
  const errorEvent = event;
@@ -102,22 +131,39 @@ export class Player {
102
131
  element.addEventListener('playing', () => this.dispatch({
103
132
  type: 'playing'
104
133
  }));
105
- element.addEventListener('pause', () => this.dispatch({
106
- type: 'paused',
107
- hasAsset: this.current !== undefined
108
- }));
109
- player.addEventListener('loading', () => this.dispatch({
110
- type: 'trackLoading'
111
- }));
134
+ element.addEventListener('pause', () => {
135
+ // A track playing out fires `pause` and then `ended`. Only the `ended`
136
+ // is meaningful — reporting `paused` first flashes a state Android never
137
+ // reports, mid-queue or at the true end.
138
+ if (element.ended) return;
139
+ this.dispatch({
140
+ type: 'paused',
141
+ hasAsset: this.current !== undefined
142
+ });
143
+ });
144
+ player.addEventListener('loading', () => {
145
+ this.dispatch({
146
+ type: 'trackLoading'
147
+ });
148
+ // Every load passes through `buffering`, as ExoPlayer's always does via
149
+ // STATE_BUFFERING. Shaka only fires its own `buffering` event when a load
150
+ // actually stalls, so a load served from cache would otherwise skip a
151
+ // state native always reports.
152
+ this.dispatch({
153
+ type: 'waiting'
154
+ });
155
+ });
112
156
  player.addEventListener('loaded', () => this.dispatch({
113
- type: 'loadSeekCompleted'
157
+ type: 'loadSeekCompleted',
158
+ playWhenReady: this.playWhenReady
114
159
  }));
115
160
  player.addEventListener('buffering', event => {
116
161
  const bufferingEvent = event;
117
162
  this.dispatch(bufferingEvent.detail.buffering === true ? {
118
163
  type: 'waiting'
119
164
  } : {
120
- type: 'bufferingSufficient'
165
+ type: 'bufferingSufficient',
166
+ playWhenReady: this.playWhenReady
121
167
  });
122
168
  });
123
169
 
@@ -168,6 +214,24 @@ export class Player {
168
214
  };
169
215
  }
170
216
  onError(shakaError) {
217
+ // An interrupted load is not a failure. Shaka raises it when a `load()` is
218
+ // cut short by a newer `load()` or an `unload()` — always something we
219
+ // asked for — and names it accordingly: `createAbortLoadError_()`. Its own
220
+ // code skips its cleanup unload for this code too (player.js:2010).
221
+ //
222
+ // Recognising it here rather than pre-emptively invalidating the load keeps
223
+ // the two independent: any teardown, in any order, can abort a load without
224
+ // the abort reaching a consumer as an error. Eagerly unloading to stop the
225
+ // outgoing track used to flash an error banner on every fast track switch.
226
+ if (shakaError.code === LOAD_INTERRUPTED) {
227
+ console.debug('Load interrupted by a newer load or an unload');
228
+ return;
229
+ }
230
+
231
+ // Before the unload below resets it: a retry resumes from where playback
232
+ // failed, as native does.
233
+ this.rememberResumePosition();
234
+
171
235
  // unload the current track to allow for clean playback on other
172
236
  this.player?.unload().catch(err => {
173
237
  console.error(`Error unloading player on 'onError'`, err);
@@ -191,16 +255,52 @@ export class Player {
191
255
  console.debug('Error code', shakaError.code, 'object', shakaError);
192
256
  }
193
257
 
194
- /** Invalidates the .then/.catch of superseded loads — a Shaka load
195
- * interrupted by stop() or a newer load() rejects, and only the active load
196
- * may surface that (or run its onLoaded side effects). */
197
- _loadGeneration = 0;
198
- load(track, onLoaded) {
258
+ /**
259
+ * The load attempt that owns the player, or none. See {@link LoadAttempt}.
260
+ */
261
+
262
+ /**
263
+ * Starts an attempt, superseding whatever was in flight.
264
+ *
265
+ * Called by the outermost `load()` so supersession is registered when the
266
+ * caller asks for it, not when some inner stage happens to reach it.
267
+ */
268
+ beginLoadAttempt() {
269
+ this._attempt?.cancel();
270
+ const attempt = new LoadAttempt();
271
+ this._attempt = attempt;
272
+ return attempt;
273
+ }
274
+
275
+ /** Abandons the attempt in flight without starting another — `stop()`. */
276
+ cancelLoadAttempt() {
277
+ this._attempt?.cancel();
278
+ this._attempt = undefined;
279
+ }
280
+ load(track, onLoaded, options) {
199
281
  const player = this.requirePlayer();
200
282
  this._isStopped = false;
201
283
  this._loadInProgress = true;
202
- const generation = ++this._loadGeneration;
203
- if (!track.src) {
284
+ const headers = options?.headers;
285
+ this.mediaHeaders = headers && Object.keys(headers).length > 0 ? headers : undefined;
286
+ // What Shaka plays may differ from what the caller queued; `track` is left
287
+ // alone so `current` and `getActiveTrack()` keep the caller's identity for
288
+ // it rather than a transport detail.
289
+ const playbackSrc = options?.src ?? track.src;
290
+ // Current on the attempt, not on success — native derives the active track
291
+ // from the queue, so a failed load is still the active track there and its
292
+ // error has somewhere to show. `getActiveTrackIndex()` already reported the
293
+ // queue's index either way; this makes the pair agree.
294
+ this.current = track;
295
+ // Only a re-prepare carries the remembered position, and `reprepare()`
296
+ // has already read it by now.
297
+ if (!(options?.reprepare ?? this._repreparing)) this._resume = undefined;
298
+ // The attempt a subclass began before resolving the URL, so its resolution
299
+ // stage and both continuations below share one token. Passed rather than
300
+ // read off the instance: a direct `load()` is itself the outermost call and
301
+ // must start a fresh attempt, superseding whatever was in flight.
302
+ const attempt = options?.attempt ?? this.beginLoadAttempt();
303
+ if (!playbackSrc) {
204
304
  this._loadInProgress = false;
205
305
  this._pendingSeek = undefined;
206
306
  const error = {
@@ -214,10 +314,9 @@ export class Player {
214
314
  };
215
315
  return;
216
316
  }
217
- player.load(track.src).then(() => {
218
- if (generation !== this._loadGeneration || this._isStopped) return;
317
+ player.load(playbackSrc).then(() => {
318
+ if (!attempt.isCurrent) return;
219
319
  this._loadInProgress = false;
220
- this.current = track;
221
320
  onLoaded?.(track);
222
321
 
223
322
  // Execute any pending seek that arrived during loading
@@ -231,7 +330,7 @@ export class Player {
231
330
  this.play();
232
331
  }
233
332
  }).catch(err => {
234
- if (generation !== this._loadGeneration || this._isStopped) return;
333
+ if (!attempt.isCurrent) return;
235
334
  this._loadInProgress = false;
236
335
  this._pendingSeek = undefined;
237
336
  this.onError(this.toNormalizedError(err));
@@ -240,8 +339,14 @@ export class Player {
240
339
  stop(onComplete) {
241
340
  const player = this.requirePlayer();
242
341
 
342
+ // Whatever was loading no longer owns the player: its continuations, at
343
+ // either boundary, must not revive it.
344
+ this.cancelLoadAttempt();
345
+
243
346
  // Match Android: stop sets playWhenReady=false and state=stopped,
244
- // but keeps the current track so play() can resume.
347
+ // but keeps the current track so play() can resume — from where it
348
+ // stopped, which ExoPlayer preserves across its own stop/prepare pair.
349
+ this.rememberResumePosition();
245
350
  this._isStopped = true;
246
351
  this._loadInProgress = false;
247
352
  this._pendingSeek = undefined;
@@ -254,34 +359,144 @@ export class Player {
254
359
  onComplete?.(); // Still call onComplete so callers aren't left hanging
255
360
  });
256
361
  }
362
+
363
+ /**
364
+ * Where playback was when it failed or was stopped, so a re-prepare can
365
+ * resume rather than restart.
366
+ *
367
+ * Kept against the track it belongs to rather than as a bare number, so it
368
+ * self-invalidates when a different track becomes current and cannot be
369
+ * applied to the wrong one. A fresh `load()` clears it; a re-prepare keeps
370
+ * it, so a retry that fails still knows where the next one resumes.
371
+ */
372
+
373
+ /**
374
+ * Whether the load in progress is a re-prepare of the current item rather
375
+ * than a new one — set by {@link reloadCurrent} for the duration of its
376
+ * `load()` call. A re-prepare keeps the remembered position; every other
377
+ * load resets it.
378
+ */
379
+ _repreparing = false;
380
+
381
+ /**
382
+ * Records the current position, when there is one worth recording.
383
+ *
384
+ * A zero is never recorded: `onError` runs for a *load* failure too, where
385
+ * the element has just been torn down and reads 0, and overwriting a good
386
+ * position with that made a failed retry lose the place a successful one
387
+ * would have resumed from.
388
+ */
389
+ rememberResumePosition() {
390
+ const position = this.element?.currentTime;
391
+ const track = this.current;
392
+ if (!track || typeof position !== 'number' || position <= 0) return;
393
+ this._resume = {
394
+ track,
395
+ position
396
+ };
397
+ }
398
+
399
+ /**
400
+ * Android's `prepare()`, which both `play()` and `retry()` call.
401
+ *
402
+ * It early-returns unless ExoPlayer is STATE_IDLE, so it reconnects after an
403
+ * error or a stop and never re-buffers a healthy stream; `error`/`_isStopped`
404
+ * is web's equivalent of idle. Re-preparing re-resolves the URL, which is the
405
+ * whole point — a signed URL or token may have expired since the failure, and
406
+ * replaying the cached one just fails again. iOS says the same thing in its
407
+ * own `retry()`: "Re-resolve rather than replay the cached URL".
408
+ *
409
+ * Returns whether it handled the call, so `play()` knows not to also poke the
410
+ * element.
411
+ */
412
+ reprepare() {
413
+ if (!this.current) return false;
414
+ if (this.state.state !== State.Error && !this._isStopped) return false;
415
+
416
+ // Not for live: `currentTime` there is elapsed time on a connection that no
417
+ // longer exists, and a fresh connection already *is* the live edge. Seeking
418
+ // to the old value asks for a point the new stream does not have. The
419
+ // track's own `live` declaration is the gate, as it is in `seekToLiveEdge`
420
+ // and on both native platforms.
421
+ const remembered = this._resume?.track === this.current ? this._resume.position : undefined;
422
+ const resume = this.current.live === true ? undefined : remembered;
423
+ this.reloadCurrent(resume);
424
+ return true;
425
+ }
257
426
  play() {
258
427
  const element = this.requireElement();
259
428
  this.playWhenReady = true;
260
- if (this.state.state === State.Error && this.current) {
261
- this.reloadCurrent();
262
- return;
263
- }
264
429
 
265
- // Match Android: play() after stop() re-prepares the current track
266
- if (this._isStopped && this.current) {
267
- this.reloadCurrent();
268
- return;
269
- }
270
- element.play().catch(err => console.error(err));
430
+ // Matches Android's play(): set the intent, then prepare — which does
431
+ // something only when idle, i.e. after an error or a stop.
432
+ if (this.reprepare()) return;
433
+ element.play().catch(err => this.onPlayRejected(err));
271
434
  }
272
435
 
273
436
  /**
274
- * Reloads the current track. `current` holds the *resolved* track, so
275
- * subclasses that resolve media URLs override this to reload from the
276
- * original source instead — re-feeding `current` into `load()` would
277
- * re-resolve an already-resolved URL and leak it into the queue.
437
+ * A rejected `element.play()`. Web-only: neither native platform can refuse
438
+ * a play intent, so there is no parity target here.
439
+ *
440
+ * `AbortError` means a newer load interrupted this one — that load owns the
441
+ * state and the intent stands. So does a rejection while a load is still in
442
+ * flight: `load()` then `play()` is the library's own sequence, and until
443
+ * Shaka has a source the element may refuse (Firefox rejects a source-less
444
+ * element with `NotSupportedError`; Chrome leaves it pending). The load
445
+ * calls `play()` again on success, and a real refusal repeats there.
446
+ * Anything else, autoplay policy above all, is the browser refusing: the
447
+ * intent cannot be honoured, so it is cleared and the state settles rather
448
+ * than stranding on `loading`/`buffering`, which is where suppressing
449
+ * `ready` under `playWhenReady` would otherwise leave it.
278
450
  */
279
- reloadCurrent() {
280
- if (this.current) this.load(this.current);
451
+ onPlayRejected(err) {
452
+ console.error(err);
453
+ const name = typeof err === 'object' && err !== null && 'name' in err ? err.name : undefined;
454
+ if (name === 'AbortError' || this._loadInProgress) return;
455
+ this.playWhenReady = false;
456
+ this.dispatch({
457
+ type: 'paused',
458
+ hasAsset: this.current !== undefined
459
+ });
281
460
  }
461
+
462
+ /**
463
+ * The track a reload re-feeds. `current` holds it as the caller queued it —
464
+ * `load()` takes the resolved URL separately, via `LoadOptions.src` — so
465
+ * re-feeding it is safe.
466
+ *
467
+ * The overridable part of {@link reloadCurrent}, rather than the whole
468
+ * method: a subclass backed by a queue changes only where the track comes
469
+ * from, and the reload itself stays in one place.
470
+ */
471
+ trackToReload() {
472
+ return this.current;
473
+ }
474
+
475
+ /** Reloads the track {@link trackToReload} names, resuming if asked to. */
476
+ reloadCurrent(resumePosition) {
477
+ const track = this.trackToReload();
478
+ if (!track) return;
479
+ this._repreparing = true;
480
+ try {
481
+ this.load(track, resumePosition === undefined ? undefined : () => this.seekTo(resumePosition));
482
+ } finally {
483
+ this._repreparing = false;
484
+ }
485
+ }
486
+
487
+ /**
488
+ * Android's `retry()` is `player.prepare()` — the same call `play()` makes,
489
+ * without setting the intent. So this is `play()` minus the intent.
490
+ *
491
+ * It is emphatically not `shaka.Player.retryStreaming()`, which this used to
492
+ * call: that returns false and does nothing at all unless the load mode is
493
+ * MEDIA_SOURCE, so for a progressive file — the case a signed URL is for — it
494
+ * was a silent no-op, while the `play()` the same docs offer as the
495
+ * alternative recovered properly.
496
+ */
282
497
  retry() {
283
- const player = this.requirePlayer();
284
- player.retryStreaming();
498
+ this.requirePlayer();
499
+ this.reprepare();
285
500
  }
286
501
  pause() {
287
502
  const element = this.requireElement();
@@ -1 +1 @@
1
- {"version":3,"names":["playbackErrorKind","nextPlaybackState","SetupNotCalledError","State","Player","hasInitialized","_current","undefined","_playWhenReady","_state","state","None","_isStopped","_loadInProgress","current","cur","newState","playWhenReady","pwr","requireElement","element","requirePlayer","player","setupPlayer","_options","window","shaka","default","polyfill","installAll","isBrowserSupported","Error","error","kind","code","message","document","createElement","setAttribute","body","appendChild","attach","addEventListener","event","errorEvent","onError","detail","dispatch","type","hasAsset","bufferingEvent","buffering","__DEV__","rnab","next","applyState","toNormalizedError","err","e","data","String","shakaError","unload","catch","console","status","httpStatus","navigator","onLine","toString","statusCode","debug","_loadGeneration","load","track","onLoaded","generation","src","_pendingSeek","then","currentTime","play","stop","onComplete","Stopped","reloadCurrent","retry","retryStreaming","pause","togglePlayback","setRate","rate","defaultPlaybackRate","playbackRate","getRate","seekBy","offset","seekTo","seconds","seekToLiveEdge","live","seekable","end","length","setVolume","volume","getVolume","getProgress","buffered","position","duration"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/Player.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["playbackErrorKind","LoadAttempt","nextPlaybackState","SetupNotCalledError","State","LOAD_INTERRUPTED","Player","hasInitialized","_current","undefined","_playWhenReady","_state","state","None","_isStopped","_loadInProgress","current","cur","newState","playWhenReady","pwr","requireElement","element","requirePlayer","player","setupPlayer","_options","window","shaka","default","polyfill","installAll","isBrowserSupported","Error","error","kind","code","message","document","createElement","setAttribute","body","appendChild","attach","getNetworkingEngine","registerRequestFilter","_type","request","headers","mediaHeaders","addEventListener","event","errorEvent","onError","detail","dispatch","type","ended","hasAsset","bufferingEvent","buffering","__DEV__","rnab","next","applyState","toNormalizedError","err","e","data","String","shakaError","console","debug","rememberResumePosition","unload","catch","status","httpStatus","navigator","onLine","toString","statusCode","beginLoadAttempt","_attempt","cancel","attempt","cancelLoadAttempt","load","track","onLoaded","options","Object","keys","length","playbackSrc","src","reprepare","_repreparing","_resume","_pendingSeek","then","isCurrent","currentTime","play","stop","onComplete","Stopped","position","remembered","resume","live","reloadCurrent","onPlayRejected","name","trackToReload","resumePosition","seekTo","retry","pause","togglePlayback","setRate","rate","defaultPlaybackRate","playbackRate","getRate","seekBy","offset","seconds","seekToLiveEdge","seekable","end","setVolume","volume","getVolume","getProgress","buffered","duration"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/Player.ts"],"mappings":"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","ignoreList":[]}
@@ -55,8 +55,22 @@ export class QueueManager {
55
55
  return this._currentIndex;
56
56
  }
57
57
  set currentIndex(index) {
58
+ const hadNoCurrent = this._currentIndex === undefined;
58
59
  this._lastIndex = this._currentIndex;
59
60
  this._currentIndex = index;
61
+
62
+ // A queue with no current track has an order that was shuffled with nothing
63
+ // to lead it — `setTracks` clears the index before regenerating, and
64
+ // `insert` drops new indices at random positions — so the track that then
65
+ // becomes current can sit anywhere, including last. That reads as
66
+ // end-of-queue immediately: `nextIndex` is undefined from the first track,
67
+ // so auto-advance fires onQueueEnded after one track. Re-pin at the moment
68
+ // the queue gains a current track. Safe as a setter hook here because the
69
+ // tracks are always in place before the index is assigned (both `setTracks`
70
+ // and `insert` run first).
71
+ if (hadNoCurrent && index !== undefined && this._shuffleEnabled) {
72
+ this.regenerateShuffleOrder();
73
+ }
60
74
  }
61
75
  get lastIndex() {
62
76
  return this._lastIndex;
@@ -1 +1 @@
1
- {"version":3,"names":["assertedNotNullish","fisherYatesShuffle","RepeatMode","QueueManager","_tracks","_repeatMode","Off","_shuffleEnabled","shuffleOrder","tracks","length","getTrack","index","setTracks","_currentIndex","undefined","_lastIndex","regenerateShuffleOrder","replaceTrack","track","currentIndex","lastIndex","repeatMode","mode","shuffleEnabled","setShuffleEnabled","enabled","Array","from","_","i","currentPos","indexOf","first","shuffleOrderInsert","at","count","map","idx","pos","Math","floor","random","splice","shuffleOrderRemove","removed","size","sorted","sort","a","b","filter","has","r","shuffleOrderMove","fromIndex","toIndex","adjusted","nextIndex","next","nextPos","previousIndex","prev","prevPos","wrapAroundFirstIndex","Queue","wrapAroundLastIndex","insert","insertBeforeIndex","Error","push","remove","indexes","idxSet","Set","current","removedBeforeCurrent","removedCurrent","_track","kind","move","item","removeUpcoming","dropped","add","slice","clear"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/QueueManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["assertedNotNullish","fisherYatesShuffle","RepeatMode","QueueManager","_tracks","_repeatMode","Off","_shuffleEnabled","shuffleOrder","tracks","length","getTrack","index","setTracks","_currentIndex","undefined","_lastIndex","regenerateShuffleOrder","replaceTrack","track","currentIndex","hadNoCurrent","lastIndex","repeatMode","mode","shuffleEnabled","setShuffleEnabled","enabled","Array","from","_","i","currentPos","indexOf","first","shuffleOrderInsert","at","count","map","idx","pos","Math","floor","random","splice","shuffleOrderRemove","removed","size","sorted","sort","a","b","filter","has","r","shuffleOrderMove","fromIndex","toIndex","adjusted","nextIndex","next","nextPos","previousIndex","prev","prevPos","wrapAroundFirstIndex","Queue","wrapAroundLastIndex","insert","insertBeforeIndex","Error","push","remove","indexes","idxSet","Set","current","removedBeforeCurrent","removedCurrent","_track","kind","move","item","removeUpcoming","dropped","add","slice","clear"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/QueueManager.ts"],"mappings":"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","ignoreList":[]}
@@ -18,35 +18,56 @@ export class QueuePlayer extends Player {
18
18
  // was a silent pause) and armed load()'s auto-play with phantom intent.
19
19
  // Cleared before the state lands so consumers observe the native order
20
20
  // (intent → state → queueEnded), independent of onQueueEnded overrides.
21
- // Per-track ends that advance the queue keep the intent.
22
- if (state === State.Ended && this.endsQueue()) {
23
- this.playWhenReady = false;
21
+ if (state !== State.Ended) {
22
+ super.applyState(state);
23
+ return;
24
24
  }
25
- super.applyState(state);
26
25
 
27
- // dispatch() already gates on _isStopped before reaching applyState, so a
28
- // natural end while stopped never advances the queue.
29
- if (state === State.Ended) {
26
+ // A track ending mid-queue is not an `ended` playback state: ExoPlayer
27
+ // reaches STATE_ENDED only at the end of the *playlist*, and an advance
28
+ // between items stays READY/BUFFERING. Web loads one track at a time, so
29
+ // the element's own `ended` arrives every time — reporting it flashed a
30
+ // terminal state, and dropped `PlayingState.playing` to false, between
31
+ // every pair of tracks. Repeat-one counts as mid-queue for the same
32
+ // reason: native reports nothing there either.
33
+ if (this.endsQueue()) {
34
+ // The real end: the intent goes with it, and the state is genuinely ended.
35
+ this.playWhenReady = false;
36
+ super.applyState(state);
37
+ // dispatch() already gates on _isStopped before reaching applyState, so a
38
+ // natural end while stopped never advances the queue.
30
39
  this.onTrackEnded();
40
+ return;
31
41
  }
42
+
43
+ // Suppressing `ended` is only safe when something takes over the state. A
44
+ // handler that declines to advance — the sleep timer set to end-of-track —
45
+ // leaves nothing to move it, and the player would sit reporting `playing`
46
+ // with nothing playing. Report the end in that case, as before.
47
+ if (!this.onTrackEnded()) super.applyState(state);
32
48
  }
33
49
 
34
50
  /** True when a natural end has nowhere to go: not repeating, no next track. */
35
51
  endsQueue() {
36
52
  return this.queue.repeatMode !== RepeatMode.Track && this.queue.repeatMode !== RepeatMode.Queue && this.queue.nextIndex() === undefined;
37
53
  }
54
+
55
+ /**
56
+ * @returns whether it started another load, and so owns the playback state
57
+ * from here. `false` means the caller still has to report the end itself.
58
+ */
38
59
  onTrackEnded() {
39
60
  if (this.queue.repeatMode === RepeatMode.Track) {
40
- if (this.queue.currentIndex !== undefined) {
41
- this.goToIndex(this.queue.currentIndex);
42
- }
43
- return;
61
+ if (this.queue.currentIndex === undefined) return false;
62
+ this.goToIndex(this.queue.currentIndex);
63
+ return true;
44
64
  }
45
65
  if (this.endsQueue()) {
46
66
  this.onQueueEnded();
47
- return;
67
+ return false;
48
68
  }
49
69
  this.skipToNext();
70
+ return true;
50
71
  }
51
72
 
52
73
  /**