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.
- package/README.md +35 -21
- package/android/build.gradle +35 -12
- package/android/gradle.properties +2 -2
- package/android/src/main/AndroidManifest.xml +3 -1
- package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +389 -164
- package/android/src/main/java/com/audiobrowser/AudioBrowserLifecycleModule.kt +38 -0
- package/android/src/main/java/com/audiobrowser/AudioBrowserPackage.kt +18 -2
- package/android/src/main/java/com/audiobrowser/ServiceBinding.kt +48 -0
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +315 -213
- package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +24 -5
- package/android/src/main/java/com/audiobrowser/browser/InertStyleDiagnostic.kt +267 -0
- package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +97 -58
- package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +70 -29
- package/android/src/main/java/com/audiobrowser/browser/StyleResolver.kt +60 -0
- package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +20 -7
- package/android/src/main/java/com/audiobrowser/extension/TappedTrack.kt +20 -0
- package/android/src/main/java/com/audiobrowser/extension/TrackIdentity.kt +15 -0
- package/android/src/main/java/com/audiobrowser/http/HttpClient.kt +20 -3
- package/android/src/main/java/com/audiobrowser/model/IcyTitle.kt +24 -0
- package/android/src/main/java/com/audiobrowser/model/PlaybackMetadata.kt +10 -6
- package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +12 -12
- package/android/src/main/java/com/audiobrowser/player/CapabilityControls.kt +111 -58
- package/android/src/main/java/com/audiobrowser/player/CrossOriginHeaderStripper.kt +77 -0
- package/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +28 -10
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +509 -230
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCommandManager.kt +218 -252
- package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -25
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +113 -78
- package/android/src/main/java/com/audiobrowser/player/Player.kt +81 -38
- package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
- package/android/src/main/java/com/audiobrowser/player/PlayerListener.kt +1 -1
- package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +2 -1
- package/android/src/main/java/com/audiobrowser/player/ShuffleOrderLedBy.kt +30 -0
- package/android/src/main/java/com/audiobrowser/tls/AiaCertChaser.kt +67 -11
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingExtendedTrustManager.kt +168 -0
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +58 -14
- package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +35 -7
- package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +278 -59
- package/android/src/main/java/com/audiobrowser/util/ArtworkVariant.kt +7 -9
- package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +56 -40
- package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
- package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +108 -0
- package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +56 -52
- package/android/src/main/res/values/strings.xml +25 -5
- package/android/src/test/java/com/audiobrowser/ServiceBindingTest.kt +87 -0
- package/android/src/test/java/com/audiobrowser/TestFixtures.kt +119 -33
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +15 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +346 -8
- package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
- package/android/src/test/java/com/audiobrowser/browser/InertStyleDiagnosticTest.kt +277 -0
- package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +3 -2
- package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +147 -0
- package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -55
- package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +154 -0
- package/android/src/test/java/com/audiobrowser/extension/TappedTrackTest.kt +43 -0
- package/android/src/test/java/com/audiobrowser/extension/TrackIdentityTest.kt +41 -0
- package/android/src/test/java/com/audiobrowser/model/IcyTitleTest.kt +49 -0
- package/android/src/test/java/com/audiobrowser/player/BrowseTilesTest.kt +385 -0
- package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +101 -58
- package/android/src/test/java/com/audiobrowser/player/CrossOriginHeaderStripperTest.kt +94 -0
- package/android/src/test/java/com/audiobrowser/player/MediaSessionSlotMappingTest.kt +45 -0
- package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
- package/android/src/test/java/com/audiobrowser/player/PlaybackErrorClassifierTest.kt +3 -4
- package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
- package/android/src/test/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicyTest.kt +3 -3
- package/android/src/test/java/com/audiobrowser/player/ShuffleOrderLedByTest.kt +79 -0
- package/android/src/test/java/com/audiobrowser/tls/AiaCertChaserTest.kt +197 -7
- package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +325 -4
- package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherCallSiteTest.kt +322 -0
- package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherTest.kt +83 -0
- package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
- package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +162 -0
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +7 -7
- package/ios/Browser/BrowserConfig.swift +102 -5
- package/ios/Browser/BrowserManager+URLResolution.swift +18 -14
- package/ios/Browser/BrowserManager.swift +230 -205
- package/ios/Browser/BrowserPathHelper.swift +44 -44
- package/ios/Browser/InertStyleDiagnostic.swift +279 -0
- package/ios/Browser/JsonModels.swift +264 -106
- package/ios/Browser/SearchDrillIn.swift +7 -7
- package/ios/Browser/SectionPresentation.swift +64 -0
- package/ios/Browser/SectionScope.swift +58 -24
- package/ios/Browser/StyleResolver.swift +58 -0
- package/ios/Browser/TabBarEntries.swift +9 -3
- package/ios/Browser/TrackIdTemplate.swift +37 -0
- package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
- package/ios/CarPlay/CarPlayController.swift +227 -85
- package/ios/CarPlay/CarPlayImageLoader.swift +42 -20
- package/ios/CarPlay/CarPlayListItemFactory.swift +289 -84
- package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
- package/ios/CarPlay/RNABMediaAddHandler.swift +6 -6
- package/ios/CarPlay/RNABMediaAffinityHandler.swift +2 -2
- package/ios/CarPlay/RNABMediaIntentHandler.swift +16 -16
- package/ios/Extension/Capability+RemoteCommand.swift +1 -1
- package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
- package/ios/Extension/ResolvedTrack+Copying.swift +13 -15
- package/ios/Extension/Section+Copying.swift +29 -0
- package/ios/Extension/String+IcyCharset.swift +21 -0
- package/ios/Extension/TimedMetadata+AVFoundation.swift +6 -4
- package/ios/Extension/Track+Copying.swift +8 -12
- package/ios/Extension/Track+Identity.swift +18 -0
- package/ios/Extension/UIApplication+ActiveScene.swift +27 -0
- package/ios/Http/HttpClient.swift +8 -2
- package/ios/HybridAudioBrowser.swift +253 -100
- package/ios/Model/NitroTypeStubs.swift +125 -23
- package/ios/Model/PlayerUpdateOptions.swift +7 -0
- package/ios/Model/RemoteCommand.swift +18 -0
- package/ios/Model/TrackPlayerError.swift +2 -2
- package/ios/Option/SessionCategories.swift +3 -2
- package/ios/Player/MediaIntentCriteria.swift +17 -9
- package/ios/Player/MediaLoader.swift +33 -9
- package/ios/Player/NowPlayingUpdater.swift +54 -6
- package/ios/Player/PlaybackCoordinator.swift +13 -6
- package/ios/Player/PlaybackErrorHandler.swift +4 -4
- package/ios/Player/PlaybackTimer.swift +8 -2
- package/ios/Player/QueueManager.swift +46 -13
- package/ios/Player/RetryManager.swift +80 -18
- package/ios/Player/SeekCompletionHandler.swift +3 -1
- package/ios/Player/ShuffleOrder.swift +33 -0
- package/ios/Player/SleepTimerHandling.swift +13 -0
- package/ios/RemoteCommand/RemoteCommandCallbacks.swift +47 -0
- package/ios/RemoteCommand/RemoteCommandController.swift +62 -24
- package/ios/Tests/BrowserPathHelperTests.swift +50 -20
- package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
- package/ios/Tests/InertStyleDiagnosticTests.swift +200 -0
- package/ios/Tests/JsonModelsTests.swift +150 -1
- package/ios/Tests/LRUCacheTests.swift +111 -0
- package/ios/Tests/LoadSeekCoordinatorTests.swift +3 -1
- package/ios/Tests/MediaIntentCriteriaTests.swift +2 -2
- package/ios/Tests/PlaybackCoordinatorTests.swift +1 -1
- package/ios/Tests/PlaybackErrorHandlerTests.swift +3 -1
- package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
- package/ios/Tests/PlayerTimeObserverTests.swift +37 -0
- package/ios/Tests/QueueManagerTests.swift +122 -10
- package/ios/Tests/RemoteCommandControllerTests.swift +172 -0
- package/ios/Tests/RemoteCommandTests.swift +67 -0
- package/ios/Tests/ResolvedTrackCopyingTests.swift +39 -35
- package/ios/Tests/RetryManagerTests.swift +89 -0
- package/ios/Tests/SearchDrillInTests.swift +16 -16
- package/ios/Tests/SectionPresentationTests.swift +90 -0
- package/ios/Tests/SectionScopeTests.swift +87 -55
- package/ios/Tests/StyleResolverTests.swift +127 -0
- package/ios/Tests/Support/TestTypes.swift +8 -1
- package/ios/Tests/TabBarEntriesTests.swift +19 -19
- package/ios/Tests/TimedMetadataAVFoundationTests.swift +42 -0
- package/ios/Tests/TrackIdTemplateTests.swift +67 -0
- package/ios/Tests/TrackIdentityTests.swift +20 -0
- package/ios/Tests/TrackSelectorTests.swift +168 -33
- package/ios/TrackPlayer.swift +63 -35
- package/ios/TrackPlayerCallbacks.swift +5 -38
- package/ios/TrackSelector.swift +45 -30
- package/ios/Util/ArtworkImageFetcher.swift +16 -1
- package/ios/Util/LRUCache.swift +4 -1
- package/ios/Util/NetworkMonitor.swift +43 -26
- package/ios/Util/SFSymbolRenderer.swift +24 -2
- package/ios/Util/SVGProcessor.swift +9 -2
- package/lib/commonjs/AudioBrowser.js +8 -8
- package/lib/commonjs/AudioBrowser.js.map +1 -1
- package/lib/commonjs/CLAUDE.md +52 -0
- package/lib/commonjs/features/browser-config.js +12 -8
- package/lib/commonjs/features/browser-config.js.map +1 -1
- package/lib/commonjs/features/browser.js +11 -3
- package/lib/commonjs/features/browser.js.map +1 -1
- package/lib/commonjs/features/carConnection.js +1 -1
- package/lib/commonjs/features/equalizer.js +1 -1
- package/lib/commonjs/features/errors.js +3 -3
- package/lib/commonjs/features/favorites.js +14 -11
- package/lib/commonjs/features/favorites.js.map +1 -1
- package/lib/commonjs/features/gate.js +16 -1
- package/lib/commonjs/features/gate.js.map +1 -1
- package/lib/commonjs/features/metadata.js +20 -3
- package/lib/commonjs/features/metadata.js.map +1 -1
- package/lib/commonjs/features/network.js +1 -1
- package/lib/commonjs/features/nowPlaying.js +1 -1
- package/lib/commonjs/features/output.js +1 -1
- package/lib/commonjs/features/playback/controls.js +4 -2
- package/lib/commonjs/features/playback/controls.js.map +1 -1
- package/lib/commonjs/features/playback/playWhenReady.js +1 -1
- package/lib/commonjs/features/playback/playing.js +1 -1
- package/lib/commonjs/features/playback/progress.js +3 -2
- package/lib/commonjs/features/playback/progress.js.map +1 -1
- package/lib/commonjs/features/playback/rate.js +8 -1
- package/lib/commonjs/features/playback/rate.js.map +1 -1
- package/lib/commonjs/features/playback/state.js +3 -4
- package/lib/commonjs/features/playback/state.js.map +1 -1
- package/lib/commonjs/features/playback/trackPlaybackTime.js +0 -6
- package/lib/commonjs/features/playback/trackPlaybackTime.js.map +1 -1
- package/lib/commonjs/features/playback/volume.js +1 -1
- package/lib/commonjs/features/player/options.js +48 -34
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/player/setup.js +18 -9
- package/lib/commonjs/features/player/setup.js.map +1 -1
- package/lib/commonjs/features/player/validateOptions.js +23 -0
- package/lib/commonjs/features/player/validateOptions.js.map +1 -0
- package/lib/commonjs/features/queue/activeTrack.js +15 -4
- package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
- package/lib/commonjs/features/queue/queue.js +13 -6
- package/lib/commonjs/features/queue/queue.js.map +1 -1
- package/lib/commonjs/features/queue/repeatMode.js +1 -1
- package/lib/commonjs/features/queue/shuffle.js +1 -1
- package/lib/commonjs/features/remoteControls.js +13 -92
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/features/sleepTimer.js +13 -1
- package/lib/commonjs/features/sleepTimer.js.map +1 -1
- package/lib/commonjs/test-utils/reactNativeStub.js +65 -0
- package/lib/commonjs/test-utils/reactNativeStub.js.map +1 -0
- package/lib/commonjs/utils/LazyNativeEmitter.js +28 -14
- package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/commonjs/utils/NativeUpdatedValue.js +31 -13
- package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/commonjs/utils/getTrackIdentity.js +24 -0
- package/lib/commonjs/utils/getTrackIdentity.js.map +1 -0
- package/lib/commonjs/utils/useNativeValueRefreshedBy.js +33 -0
- package/lib/commonjs/utils/useNativeValueRefreshedBy.js.map +1 -0
- package/lib/commonjs/web/NativeAudioBrowser.js +200 -75
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/LoadAttempt.js +37 -0
- package/lib/commonjs/web/TrackPlayer/LoadAttempt.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js +18 -2
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/Player.js +254 -39
- package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/QueueManager.js +14 -0
- package/lib/commonjs/web/TrackPlayer/QueueManager.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js +33 -12
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +175 -100
- package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
- package/lib/commonjs/web/browser/FavoriteManager.js +30 -21
- package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
- package/lib/commonjs/web/browser/SearchManager.js +18 -23
- package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
- package/lib/commonjs/web/browser/assertBrowsePageShape.js +2 -2
- package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -1
- package/lib/commonjs/web/browser/classifyTrackNavigation.js +9 -9
- package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -1
- package/lib/commonjs/web/browser/sections.js +89 -0
- package/lib/commonjs/web/browser/sections.js.map +1 -0
- package/lib/commonjs/web/http/RequestConfigBuilder.js +110 -27
- package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/commonjs/web/http/followMediaRedirect.js +219 -0
- package/lib/commonjs/web/http/followMediaRedirect.js.map +1 -0
- package/lib/commonjs/web/player/NowPlayingManager.js +4 -3
- package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
- package/lib/commonjs/web/util/BrowserPathHelper.js +56 -11
- package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
- package/lib/module/AudioBrowser.js +2 -1
- package/lib/module/AudioBrowser.js.map +1 -1
- package/lib/module/CLAUDE.md +52 -0
- package/lib/module/features/browser-config.js +12 -8
- package/lib/module/features/browser-config.js.map +1 -1
- package/lib/module/features/browser.js +11 -3
- package/lib/module/features/browser.js.map +1 -1
- package/lib/module/features/carConnection.js +1 -1
- package/lib/module/features/equalizer.js +1 -1
- package/lib/module/features/errors.js +3 -3
- package/lib/module/features/favorites.js +14 -11
- package/lib/module/features/favorites.js.map +1 -1
- package/lib/module/features/gate.js +16 -1
- package/lib/module/features/gate.js.map +1 -1
- package/lib/module/features/metadata.js +20 -3
- package/lib/module/features/metadata.js.map +1 -1
- package/lib/module/features/network.js +1 -1
- package/lib/module/features/nowPlaying.js +1 -1
- package/lib/module/features/output.js +1 -1
- package/lib/module/features/playback/controls.js +4 -2
- package/lib/module/features/playback/controls.js.map +1 -1
- package/lib/module/features/playback/playWhenReady.js +1 -1
- package/lib/module/features/playback/playing.js +1 -1
- package/lib/module/features/playback/progress.js +3 -2
- package/lib/module/features/playback/progress.js.map +1 -1
- package/lib/module/features/playback/rate.js +8 -1
- package/lib/module/features/playback/rate.js.map +1 -1
- package/lib/module/features/playback/state.js +3 -4
- package/lib/module/features/playback/state.js.map +1 -1
- package/lib/module/features/playback/trackPlaybackTime.js +0 -5
- package/lib/module/features/playback/trackPlaybackTime.js.map +1 -1
- package/lib/module/features/playback/volume.js +1 -1
- package/lib/module/features/player/options.js +47 -32
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/player/setup.js +17 -8
- package/lib/module/features/player/setup.js.map +1 -1
- package/lib/module/features/player/validateOptions.js +19 -0
- package/lib/module/features/player/validateOptions.js.map +1 -0
- package/lib/module/features/queue/activeTrack.js +15 -4
- package/lib/module/features/queue/activeTrack.js.map +1 -1
- package/lib/module/features/queue/queue.js +13 -6
- package/lib/module/features/queue/queue.js.map +1 -1
- package/lib/module/features/queue/repeatMode.js +1 -1
- package/lib/module/features/queue/shuffle.js +1 -1
- package/lib/module/features/remoteControls.js +13 -92
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/features/sleepTimer.js +13 -1
- package/lib/module/features/sleepTimer.js.map +1 -1
- package/lib/module/test-utils/reactNativeStub.js +58 -0
- package/lib/module/test-utils/reactNativeStub.js.map +1 -0
- package/lib/module/utils/LazyNativeEmitter.js +28 -14
- package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/module/utils/NativeUpdatedValue.js +31 -13
- package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/module/utils/getTrackIdentity.js +20 -0
- package/lib/module/utils/getTrackIdentity.js.map +1 -0
- package/lib/module/utils/useNativeValueRefreshedBy.js +29 -0
- package/lib/module/utils/useNativeValueRefreshedBy.js.map +1 -0
- package/lib/module/web/NativeAudioBrowser.js +200 -75
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/web/TrackPlayer/LoadAttempt.js +32 -0
- package/lib/module/web/TrackPlayer/LoadAttempt.js.map +1 -0
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js +18 -2
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js.map +1 -1
- package/lib/module/web/TrackPlayer/Player.js +254 -39
- package/lib/module/web/TrackPlayer/Player.js.map +1 -1
- package/lib/module/web/TrackPlayer/QueueManager.js +14 -0
- package/lib/module/web/TrackPlayer/QueueManager.js.map +1 -1
- package/lib/module/web/TrackPlayer/QueuePlayer.js +33 -12
- package/lib/module/web/TrackPlayer/QueuePlayer.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +175 -100
- package/lib/module/web/browser/BrowserManager.js.map +1 -1
- package/lib/module/web/browser/FavoriteManager.js +31 -21
- package/lib/module/web/browser/FavoriteManager.js.map +1 -1
- package/lib/module/web/browser/SearchManager.js +18 -23
- package/lib/module/web/browser/SearchManager.js.map +1 -1
- package/lib/module/web/browser/assertBrowsePageShape.js +2 -2
- package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -1
- package/lib/module/web/browser/classifyTrackNavigation.js +9 -9
- package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -1
- package/lib/module/web/browser/sections.js +83 -0
- package/lib/module/web/browser/sections.js.map +1 -0
- package/lib/module/web/http/RequestConfigBuilder.js +110 -27
- package/lib/module/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/module/web/http/followMediaRedirect.js +215 -0
- package/lib/module/web/http/followMediaRedirect.js.map +1 -0
- package/lib/module/web/player/NowPlayingManager.js +4 -3
- package/lib/module/web/player/NowPlayingManager.js.map +1 -1
- package/lib/module/web/util/BrowserPathHelper.js +56 -11
- package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/AudioBrowser.d.ts +1 -1
- package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
- package/lib/typescript/src/features/browser-config.d.ts.map +1 -1
- package/lib/typescript/src/features/browser.d.ts +10 -2
- package/lib/typescript/src/features/browser.d.ts.map +1 -1
- package/lib/typescript/src/features/carConnection.d.ts +1 -1
- package/lib/typescript/src/features/equalizer.d.ts +1 -1
- package/lib/typescript/src/features/errors.d.ts +3 -3
- package/lib/typescript/src/features/favorites.d.ts +14 -11
- package/lib/typescript/src/features/favorites.d.ts.map +1 -1
- package/lib/typescript/src/features/gate.d.ts +18 -2
- package/lib/typescript/src/features/gate.d.ts.map +1 -1
- package/lib/typescript/src/features/metadata.d.ts +20 -3
- package/lib/typescript/src/features/metadata.d.ts.map +1 -1
- package/lib/typescript/src/features/network.d.ts +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts +1 -1
- package/lib/typescript/src/features/output.d.ts +1 -1
- package/lib/typescript/src/features/playback/controls.d.ts +4 -2
- package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/playWhenReady.d.ts +1 -1
- package/lib/typescript/src/features/playback/playing.d.ts +1 -1
- package/lib/typescript/src/features/playback/progress.d.ts +1 -1
- package/lib/typescript/src/features/playback/progress.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/rate.d.ts +8 -1
- package/lib/typescript/src/features/playback/rate.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/state.d.ts +3 -4
- package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +1 -1
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/volume.d.ts +1 -1
- package/lib/typescript/src/features/player/options.d.ts +108 -56
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/player/setup.d.ts +14 -4
- package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
- package/lib/typescript/src/features/player/validateOptions.d.ts +2 -0
- package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -0
- package/lib/typescript/src/features/queue/activeTrack.d.ts +9 -2
- package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts +7 -4
- package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/repeatMode.d.ts +1 -1
- package/lib/typescript/src/features/queue/shuffle.d.ts +1 -1
- package/lib/typescript/src/features/remoteControls.d.ts +23 -22
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/features/sleepTimer.d.ts +1 -1
- package/lib/typescript/src/features/sleepTimer.d.ts.map +1 -1
- package/lib/typescript/src/test-utils/reactNativeStub.d.ts +36 -0
- package/lib/typescript/src/test-utils/reactNativeStub.d.ts.map +1 -0
- package/lib/typescript/src/types/browser-native.d.ts +3 -2
- package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-nodes.d.ts +380 -126
- package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
- package/lib/typescript/src/types/browser.d.ts +82 -57
- package/lib/typescript/src/types/browser.d.ts.map +1 -1
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +19 -16
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +24 -19
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
- package/lib/typescript/src/utils/getTrackIdentity.d.ts +18 -0
- package/lib/typescript/src/utils/getTrackIdentity.d.ts.map +1 -0
- package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts +21 -0
- package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts.map +1 -0
- package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +1 -2
- package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +2 -0
- package/nitrogen/generated/android/c++/JAndroidOptions.hpp +10 -10
- package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
- package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +8 -3
- package/nitrogen/generated/android/c++/JBrowseResult.hpp +16 -4
- package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
- package/nitrogen/generated/android/c++/JCardImage.hpp +58 -0
- package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +8 -3
- package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +8 -2
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +8 -2
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__string__.hpp +102 -0
- 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
- package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +7 -10
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +8 -3
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +15 -3
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +8 -2
- package/nitrogen/generated/android/c++/JGridTile.hpp +61 -0
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +45 -25
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
- package/nitrogen/generated/android/c++/JImageShape.hpp +58 -0
- package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +8 -3
- package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +36 -11
- package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +14 -2
- package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +15 -12
- package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +7 -10
- package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +10 -10
- package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
- package/nitrogen/generated/android/c++/JOptions.hpp +7 -10
- package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +8 -3
- package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
- package/nitrogen/generated/android/c++/{JNotificationButton.hpp → JRemoteButton.hpp} +19 -19
- package/nitrogen/generated/android/c++/JRemoteButtonLayout.hpp +86 -0
- package/nitrogen/generated/android/c++/JResolvedTrack.hpp +57 -49
- package/nitrogen/generated/android/c++/JSection.hpp +116 -0
- package/nitrogen/generated/android/c++/JSectionStyle.hpp +96 -0
- package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
- package/nitrogen/generated/android/c++/JTrack.hpp +25 -46
- package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +8 -2
- package/nitrogen/generated/android/c++/JTrackStyle.hpp +46 -18
- package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.hpp +75 -0
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +16 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → ArtworkRendering.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CardImage.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__string__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/GridTile.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageShape.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +8 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{NotificationButton.kt → RemoteButton.kt} +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteButtonLayout.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -15
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → Section.kt} +15 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SectionStyle.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StyleDisplay.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +6 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +35 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Variant_NullType_NotificationButtonLayout.kt → Variant_NullType_RemoteButtonLayout.kt} +9 -9
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +9 -0
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +244 -133
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +31 -16
- package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +33 -18
- package/nitrogen/generated/ios/swift/AndroidOptions.swift +12 -12
- package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
- package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
- package/nitrogen/generated/ios/swift/CardImage.swift +40 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__string__.swift +54 -0
- package/nitrogen/generated/ios/swift/GridTile.swift +44 -0
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +2 -2
- package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
- package/nitrogen/generated/ios/swift/ImageShape.swift +40 -0
- package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +52 -5
- package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +12 -12
- package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
- package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
- package/nitrogen/generated/ios/swift/{NotificationButton.swift → RemoteButton.swift} +6 -6
- package/nitrogen/generated/ios/swift/RemoteButtonLayout.swift +57 -0
- package/nitrogen/generated/ios/swift/ResolvedTrack.swift +62 -73
- package/nitrogen/generated/ios/swift/Section.swift +82 -0
- package/nitrogen/generated/ios/swift/SectionStyle.swift +133 -0
- package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
- package/nitrogen/generated/ios/swift/Track.swift +28 -63
- package/nitrogen/generated/ios/swift/TrackStyle.swift +86 -22
- package/nitrogen/generated/ios/swift/{Variant_NullType_NotificationButtonLayout.swift → Variant_NullType_RemoteButtonLayout.swift} +3 -3
- package/nitrogen/generated/shared/c++/AndroidOptions.hpp +8 -8
- package/nitrogen/generated/shared/c++/{FavoritesMatchMode.hpp → ArtworkRendering.hpp} +17 -17
- package/nitrogen/generated/shared/c++/CarPlayPlayingIndicatorLocation.hpp +76 -0
- package/nitrogen/generated/shared/c++/CardImage.hpp +76 -0
- package/nitrogen/generated/shared/c++/GridTile.hpp +80 -0
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/IOSOptions.hpp +9 -2
- package/nitrogen/generated/shared/c++/ImageShape.hpp +76 -0
- package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +10 -6
- package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +8 -8
- package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
- package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
- package/nitrogen/generated/shared/c++/{NotificationButton.hpp → RemoteButton.hpp} +19 -19
- package/nitrogen/generated/shared/c++/RemoteButtonLayout.hpp +94 -0
- package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +33 -37
- package/nitrogen/generated/shared/c++/Section.hpp +102 -0
- package/nitrogen/generated/shared/c++/SectionStyle.hpp +126 -0
- package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
- package/nitrogen/generated/shared/c++/Track.hpp +18 -30
- package/nitrogen/generated/shared/c++/TrackStyle.hpp +73 -34
- package/package.json +24 -11
- package/src/AudioBrowser.ts +2 -1
- package/src/CLAUDE.md +52 -0
- package/src/features/battery.test.ts +79 -0
- package/src/features/browser-config.test.ts +21 -6
- package/src/features/browser-config.ts +12 -8
- package/src/features/browser.test.ts +1 -1
- package/src/features/browser.ts +11 -3
- package/src/features/carConnection.ts +1 -1
- package/src/features/equalizer.ts +1 -1
- package/src/features/errors.ts +3 -3
- package/src/features/favorites.ts +14 -11
- package/src/features/gate.ts +16 -1
- package/src/features/hook-wiring.test.ts +302 -0
- package/src/features/metadata.ts +20 -3
- package/src/features/network.ts +1 -1
- package/src/features/nowPlaying.ts +1 -1
- package/src/features/output.ts +1 -1
- package/src/features/playback/controls.ts +4 -2
- package/src/features/playback/playWhenReady.ts +1 -1
- package/src/features/playback/playing.ts +1 -1
- package/src/features/playback/progress.test.ts +169 -0
- package/src/features/playback/progress.ts +3 -2
- package/src/features/playback/rate.ts +8 -1
- package/src/features/playback/state.ts +3 -4
- package/src/features/playback/trackPlaybackTime.test.ts +16 -6
- package/src/features/playback/trackPlaybackTime.ts +1 -6
- package/src/features/playback/volume.ts +1 -1
- package/src/features/player/options.ts +126 -76
- package/src/features/player/setup.test.ts +24 -7
- package/src/features/player/setup.ts +22 -10
- package/src/features/player/validateOptions.ts +21 -0
- package/src/features/queue/activeTrack.ts +15 -4
- package/src/features/queue/queue.ts +13 -6
- package/src/features/queue/repeatMode.ts +1 -1
- package/src/features/queue/shuffle.ts +1 -1
- package/src/features/remoteControls.ts +13 -92
- package/src/features/sleepTimer.test.ts +172 -0
- package/src/features/sleepTimer.ts +9 -1
- package/src/nitro-stub-drift.test.ts +277 -0
- package/src/public-surface.test.ts +147 -0
- package/src/specs/audio-browser.nitro.ts +5 -4
- package/src/style-resolution.test.ts +210 -0
- package/src/test-utils/reactNativeStub.ts +60 -0
- package/src/types/browser-native.ts +7 -3
- package/src/types/browser-nodes.ts +396 -134
- package/src/types/browser.ts +85 -59
- package/src/utils/LazyNativeEmitter.ts +28 -15
- package/src/utils/NativeUpdatedValue.ts +29 -13
- package/src/utils/getTrackIdentity.ts +20 -0
- package/src/utils/useDebug.test.ts +182 -0
- package/src/utils/useNativeUpdatedValue.test.ts +103 -0
- package/src/utils/useNativeValueRefreshedBy.ts +38 -0
- package/src/web/NativeAudioBrowser.playWhenReady.test.ts +232 -2
- package/src/web/NativeAudioBrowser.ts +239 -82
- package/src/web/TrackPlayer/LoadAttempt.ts +29 -0
- package/src/web/TrackPlayer/PlaybackStateMachine.test.ts +60 -13
- package/src/web/TrackPlayer/PlaybackStateMachine.ts +22 -6
- package/src/web/TrackPlayer/Player.dispatch.test.ts +5 -3
- package/src/web/TrackPlayer/Player.load.test.ts +137 -1
- package/src/web/TrackPlayer/Player.ts +284 -37
- package/src/web/TrackPlayer/QueueManager.test.ts +29 -0
- package/src/web/TrackPlayer/QueueManager.ts +14 -0
- package/src/web/TrackPlayer/QueuePlayer.ts +33 -14
- package/src/web/__tests__/lifecycle.test.ts +345 -0
- package/src/web/__tests__/lifecycleHarness.ts +351 -0
- package/src/web/__tests__/loadEdgeCases.test.ts +246 -0
- package/src/web/__tests__/loadSupersession.test.ts +175 -0
- package/src/web/__tests__/retry.test.ts +169 -0
- package/src/web/browser/BrowserManager.ts +209 -111
- package/src/web/browser/FavoriteManager.test.ts +84 -0
- package/src/web/browser/FavoriteManager.ts +28 -23
- package/src/web/browser/SearchManager.test.ts +75 -0
- package/src/web/browser/SearchManager.ts +25 -28
- package/src/web/browser/__tests__/artwork-resolution.test.ts +117 -0
- package/src/web/browser/__tests__/layer-resolver.test.ts +35 -0
- package/src/web/browser/__tests__/search-artwork.test.ts +46 -0
- package/src/web/browser/__tests__/search-navigation.test.ts +76 -0
- package/src/web/browser/assertBrowsePageShape.test.ts +1 -1
- package/src/web/browser/assertBrowsePageShape.ts +5 -3
- package/src/web/browser/classifyTrackNavigation.test.ts +10 -8
- package/src/web/browser/classifyTrackNavigation.ts +9 -9
- package/src/web/browser/parseSearchResponse.test.ts +8 -2
- package/src/web/browser/sections.test.ts +91 -0
- package/src/web/browser/sections.ts +72 -0
- package/src/web/http/RequestConfigBuilder.test.ts +241 -1
- package/src/web/http/RequestConfigBuilder.ts +140 -33
- package/src/web/http/followMediaRedirect.test.ts +289 -0
- package/src/web/http/followMediaRedirect.ts +253 -0
- package/src/web/player/NowPlayingManager.ts +4 -3
- package/src/web/util/BrowserPathHelper.test.ts +52 -0
- package/src/web/util/BrowserPathHelper.ts +61 -13
- package/website/guide/android-auto.md +114 -0
- package/website/guide/android-certificates.md +409 -0
- package/website/guide/artwork.md +255 -0
- package/website/guide/audio-output.md +135 -0
- package/website/guide/automotive.md +86 -0
- package/website/guide/basic-usage.md +151 -0
- package/website/guide/battery.md +115 -0
- package/website/guide/browser.md +581 -0
- package/website/guide/carplay.md +620 -0
- package/website/guide/configuration.md +173 -0
- package/website/guide/equalizer.md +231 -0
- package/website/guide/errors.md +310 -0
- package/website/guide/favorites.md +154 -0
- package/website/guide/gate.md +143 -0
- package/website/guide/getting-started.md +46 -0
- package/website/guide/hooks.md +238 -0
- package/website/guide/live-streams.md +125 -0
- package/website/guide/metadata.md +239 -0
- package/website/guide/migrating-from-track-player.md +244 -0
- package/website/guide/native-callback-fetch.md +127 -0
- package/website/guide/network.md +86 -0
- package/website/guide/now-playing.md +175 -0
- package/website/guide/playback.md +328 -0
- package/website/guide/queue.md +300 -0
- package/website/guide/remote-controls.md +256 -0
- package/website/guide/search.md +255 -0
- package/website/guide/sleep-timer.md +268 -0
- package/website/guide/track.md +247 -0
- package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
- package/ios/Model/MediaURL.swift +0 -67
- package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
- package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
- package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +0 -94
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
- package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +0 -75
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +0 -50
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
- package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
- package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
- package/nitrogen/generated/ios/swift/ImageRowItem.swift +0 -195
- package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +0 -92
- package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
- package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
- package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
- package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +0 -102
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","
|
|
1
|
+
{"version":3,"names":["_native","require","_validateOptions","resolveNowPlaying","value","autoUpdateNowPlayingMetadata","nowPlayingMetadataFormatter","wrapNowPlayingFormatter","undefined","formatter","params","definedFields","obj","out","key","nonEmpty","Object","keys","length","setupPlayer","options","nowPlaying","capabilities","forwardJumpInterval","backwardJumpInterval","progressUpdateEventInterval","android","ios","nativeSetup","appKilledPlaybackBehavior","skipSilence","remoteButtonLayout","androidSetup","playbackRates","carPlayUpNextButton","carPlayNowPlayingButtons","carPlayPlayingIndicatorLocation","iosSetup","iosUpdate","validateIOSUpdateOptions","updates","nativeBrowser"],"sourceRoot":"../../../../src","sources":["features/player/setup.ts"],"mappings":";;;;;;AAYA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAbA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;;AAGA;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;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;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;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;AACA;AACA;;AAYA;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;;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AA2GA;;AA4CA;AACA;AACA;AACA;AACA;;AAgCA;;AAEA;AACA;AACA;AACA;;AAMA;AACA;AA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","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.validateIOSUpdateOptions = validateIOSUpdateOptions;
|
|
7
|
+
const MAX_CARPLAY_NOW_PLAYING_BUTTONS = 5;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Warns when more CarPlay now-playing buttons are configured than CarPlay renders.
|
|
11
|
+
* Shared by `updateOptions` and `setupPlayer` (both can carry `ios` options).
|
|
12
|
+
* Kept out of `options.ts`, which the barrel re-exports — see
|
|
13
|
+
* public-surface.test.ts.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
function validateIOSUpdateOptions(ios) {
|
|
18
|
+
const buttons = ios?.carPlayNowPlayingButtons;
|
|
19
|
+
if (buttons && buttons.length > MAX_CARPLAY_NOW_PLAYING_BUTTONS) {
|
|
20
|
+
console.warn(`[react-native-audio-browser] ${buttons.length} CarPlay now-playing ` + `buttons configured; CarPlay shows at most ${MAX_CARPLAY_NOW_PLAYING_BUTTONS}.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=validateOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAX_CARPLAY_NOW_PLAYING_BUTTONS","validateIOSUpdateOptions","ios","buttons","carPlayNowPlayingButtons","length","console","warn"],"sourceRoot":"../../../../src","sources":["features/player/validateOptions.ts"],"mappings":";;;;;;AAEA,MAAMA,+BAA+B,GAAG,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,wBAAwBA,CAACC,GAAsB,EAAQ;EACrE,MAAMC,OAAO,GAAGD,GAAG,EAAEE,wBAAwB;EAC7C,IAAID,OAAO,IAAIA,OAAO,CAACE,MAAM,GAAGL,+BAA+B,EAAE;IAC/DM,OAAO,CAACC,IAAI,CACV,gCAAgCJ,OAAO,CAACE,MAAM,uBAAuB,GACnE,6CAA6CL,+BAA+B,GAChF,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -9,7 +9,8 @@ exports.onActiveTrackChanged = void 0;
|
|
|
9
9
|
exports.useActiveTrack = useActiveTrack;
|
|
10
10
|
var _native = require("../../native");
|
|
11
11
|
var _NativeUpdatedValue = require("../../utils/NativeUpdatedValue");
|
|
12
|
-
var
|
|
12
|
+
var _useNativeValueRefreshedBy = require("../../utils/useNativeValueRefreshedBy");
|
|
13
|
+
var _favorites = require("../favorites");
|
|
13
14
|
/**
|
|
14
15
|
* Event data for when the active track changes.
|
|
15
16
|
*/
|
|
@@ -35,18 +36,28 @@ function getActiveTrackIndex() {
|
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
38
|
* Subscribes to active track change events.
|
|
39
|
+
*
|
|
40
|
+
* Fires on **transitions only** — selection, queue advance, skip. In-place
|
|
41
|
+
* metadata mutations of the active track (a favorite toggle) emit
|
|
42
|
+
* {@link onFavoriteChanged} instead; {@link useActiveTrack} subscribes to
|
|
43
|
+
* both, so UI bound through the hook still re-renders on a heart toggle.
|
|
44
|
+
*
|
|
38
45
|
* @param callback - Called when the active track changes
|
|
39
|
-
* @returns
|
|
46
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
40
47
|
*/
|
|
41
48
|
const onActiveTrackChanged = exports.onActiveTrackChanged = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onPlaybackActiveTrackChanged = cb);
|
|
42
49
|
|
|
43
50
|
// MARK: - Hooks
|
|
44
51
|
|
|
52
|
+
// Module-level so the hook's subscription identity is stable across renders.
|
|
53
|
+
const activeTrackInvalidators = [onActiveTrackChanged, _favorites.onFavoriteChanged];
|
|
54
|
+
|
|
45
55
|
/**
|
|
46
|
-
* Hook that returns the current active track
|
|
56
|
+
* Hook that returns the current active track, updating on transitions AND on
|
|
57
|
+
* in-place mutations of the active track (favorite toggles).
|
|
47
58
|
* @returns The current active track or undefined
|
|
48
59
|
*/
|
|
49
60
|
function useActiveTrack() {
|
|
50
|
-
return (0,
|
|
61
|
+
return (0, _useNativeValueRefreshedBy.useNativeValueRefreshedBy)(getActiveTrack, activeTrackInvalidators);
|
|
51
62
|
}
|
|
52
63
|
//# sourceMappingURL=activeTrack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","_NativeUpdatedValue","
|
|
1
|
+
{"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeValueRefreshedBy","_favorites","getActiveTrack","nativeBrowser","undefined","getActiveTrackIndex","onActiveTrackChanged","exports","NativeUpdatedValue","emitterize","cb","onPlaybackActiveTrackChanged","activeTrackInvalidators","onFavoriteChanged","useActiveTrack","useNativeValueRefreshedBy"],"sourceRoot":"../../../../src","sources":["features/queue/activeTrack.ts"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,0BAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAEA;AACA;AACA;;AAcA;;AAEA;AACA;AACA;AACO,SAASI,cAAcA,CAAA,EAAsB;EAClD,OAAOC,qBAAa,CAACD,cAAc,CAAC,CAAC,IAAIE,SAAS;AACpD;;AAEA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAAA,EAAuB;EACxD,OAAOF,qBAAa,CAACE,mBAAmB,CAAC,CAAC,IAAID,SAAS;AACzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAC/BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAMP,qBAAa,CAACQ,4BAA4B,GAAGD,EACxD,CAAC;;AAEH;;AAEA;AACA,MAAME,uBAAuB,GAAG,CAACN,oBAAoB,EAAEO,4BAAiB,CAAC;;AAEzE;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAsB;EAClD,OAAO,IAAAC,oDAAyB,EAACb,cAAc,EAAEU,uBAAuB,CAAC;AAC3E","ignoreList":[]}
|
|
@@ -18,7 +18,8 @@ exports.skipToPrevious = skipToPrevious;
|
|
|
18
18
|
exports.useQueue = useQueue;
|
|
19
19
|
var _native = require("../../native");
|
|
20
20
|
var _NativeUpdatedValue = require("../../utils/NativeUpdatedValue");
|
|
21
|
-
var
|
|
21
|
+
var _useNativeValueRefreshedBy = require("../../utils/useNativeValueRefreshedBy");
|
|
22
|
+
var _favorites = require("../favorites");
|
|
22
23
|
// MARK: - Types
|
|
23
24
|
|
|
24
25
|
/**
|
|
@@ -160,25 +161,31 @@ function getQueue() {
|
|
|
160
161
|
/**
|
|
161
162
|
* Subscribes to playback queue ended events.
|
|
162
163
|
* @param callback - Called when playback has paused due to reaching the end of the queue
|
|
163
|
-
* @returns
|
|
164
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
164
165
|
*/
|
|
165
166
|
const onQueueEnded = exports.onQueueEnded = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onPlaybackQueueEnded = cb);
|
|
166
167
|
|
|
167
168
|
/**
|
|
168
169
|
* Subscribes to queue change events.
|
|
169
|
-
* Called when tracks are added, removed, reordered
|
|
170
|
+
* Called when tracks are added, removed, or reordered. An in-place mutation of
|
|
171
|
+
* a queued track's metadata (a favorite toggle) emits `onFavoriteChanged`
|
|
172
|
+
* instead; {@link useQueue} subscribes to both.
|
|
170
173
|
* @param callback - Called with the updated queue
|
|
171
|
-
* @returns
|
|
174
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
172
175
|
*/
|
|
173
176
|
const onQueueChanged = exports.onQueueChanged = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onPlaybackQueueChanged = cb);
|
|
174
177
|
|
|
175
178
|
// MARK: - Hooks
|
|
176
179
|
|
|
180
|
+
// Module-level so the hook's subscription identity is stable across renders.
|
|
181
|
+
const queueInvalidators = [onQueueChanged, _favorites.onFavoriteChanged];
|
|
182
|
+
|
|
177
183
|
/**
|
|
178
|
-
* Hook that returns the current queue
|
|
184
|
+
* Hook that returns the current queue, updating on queue changes AND on
|
|
185
|
+
* in-place mutations of queued tracks (favorite toggles).
|
|
179
186
|
* @returns The current queue
|
|
180
187
|
*/
|
|
181
188
|
function useQueue() {
|
|
182
|
-
return (0,
|
|
189
|
+
return (0, _useNativeValueRefreshedBy.useNativeValueRefreshedBy)(getQueue, queueInvalidators);
|
|
183
190
|
}
|
|
184
191
|
//# sourceMappingURL=queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","_NativeUpdatedValue","
|
|
1
|
+
{"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeValueRefreshedBy","_favorites","add","tracks","insertBeforeIndex","addTracks","Array","isArray","length","nativeBrowser","load","track","move","fromIndex","toIndex","remove","indexOrIndexes","removeUpcomingTracks","skip","index","initialPosition","skipToNext","skipToPrevious","setQueue","startIndex","startPosition","getTrack","getQueue","onQueueEnded","exports","NativeUpdatedValue","emitterize","cb","onPlaybackQueueEnded","onQueueChanged","onPlaybackQueueChanged","queueInvalidators","onFavoriteChanged","useQueue","useNativeValueRefreshedBy"],"sourceRoot":"../../../../src","sources":["features/queue/queue.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -42,7 +42,7 @@ function setRepeatMode(repeatMode) {
|
|
|
42
42
|
/**
|
|
43
43
|
* Subscribes to repeat mode changes.
|
|
44
44
|
* @param callback - Called when repeat mode changes
|
|
45
|
-
* @returns
|
|
45
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
46
46
|
*/
|
|
47
47
|
const onRepeatModeChanged = exports.onRepeatModeChanged = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onPlaybackRepeatModeChanged = cb);
|
|
48
48
|
|
|
@@ -41,7 +41,7 @@ function toggleShuffle() {
|
|
|
41
41
|
/**
|
|
42
42
|
* Subscribes to shuffle mode changes.
|
|
43
43
|
* @param callback - Called when shuffle mode changes
|
|
44
|
-
* @returns
|
|
44
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
45
45
|
*/
|
|
46
46
|
const onShuffleChanged = exports.onShuffleChanged = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onPlaybackShuffleModeChanged = cb);
|
|
47
47
|
|
|
@@ -40,90 +40,11 @@ var _LazyNativeEmitter = require("../utils/LazyNativeEmitter");
|
|
|
40
40
|
* Remote skip event (Android only).
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
-
// MARK: - Default Handlers
|
|
44
|
-
|
|
45
|
-
// Install remote control handlers with default behavior immediately when module loads
|
|
46
|
-
// Custom handlers can override the defaults using handleRemote* functions
|
|
47
|
-
|
|
48
|
-
// Basic playback controls
|
|
49
|
-
// AudioBrowser.onRemotePlay(() => {
|
|
50
|
-
// const customHandler = customHandlers.get('play')
|
|
51
|
-
// if (customHandler) {
|
|
52
|
-
// customHandler()
|
|
53
|
-
// } else {
|
|
54
|
-
// play()
|
|
55
|
-
// }
|
|
56
|
-
// })
|
|
57
|
-
|
|
58
|
-
// AudioBrowser.onRemotePause(() => {
|
|
59
|
-
// const customHandler = customHandlers.get('pause')
|
|
60
|
-
// if (customHandler) {
|
|
61
|
-
// customHandler()
|
|
62
|
-
// } else {
|
|
63
|
-
// pause()
|
|
64
|
-
// }
|
|
65
|
-
// })
|
|
66
|
-
|
|
67
|
-
// AudioBrowser.onRemoteNext(() => {
|
|
68
|
-
// const customHandler = customHandlers.get('next')
|
|
69
|
-
// if (customHandler) {
|
|
70
|
-
// customHandler()
|
|
71
|
-
// } else {
|
|
72
|
-
// skipToNext()
|
|
73
|
-
// }
|
|
74
|
-
// })
|
|
75
|
-
|
|
76
|
-
// AudioBrowser.onRemotePrevious(() => {
|
|
77
|
-
// const customHandler = customHandlers.get('previous')
|
|
78
|
-
// if (customHandler) {
|
|
79
|
-
// customHandler()
|
|
80
|
-
// } else {
|
|
81
|
-
// skipToPrevious()
|
|
82
|
-
// }
|
|
83
|
-
// })
|
|
84
|
-
|
|
85
|
-
// AudioBrowser.onRemoteStop(() => {
|
|
86
|
-
// const customHandler = customHandlers.get('stop')
|
|
87
|
-
// if (customHandler) {
|
|
88
|
-
// customHandler()
|
|
89
|
-
// } else {
|
|
90
|
-
// stop()
|
|
91
|
-
// }
|
|
92
|
-
// })
|
|
93
|
-
|
|
94
|
-
// // Seek controls
|
|
95
|
-
// AudioBrowser.onRemoteSeek((event: any) => {
|
|
96
|
-
// const customHandler = customHandlers.get('seek')
|
|
97
|
-
// if (customHandler) {
|
|
98
|
-
// customHandler(event)
|
|
99
|
-
// } else {
|
|
100
|
-
// seekTo(event.position)
|
|
101
|
-
// }
|
|
102
|
-
// })
|
|
103
|
-
|
|
104
|
-
// AudioBrowser.onRemoteJumpForward((event: any) => {
|
|
105
|
-
// const customHandler = customHandlers.get('jumpForward')
|
|
106
|
-
// if (customHandler) {
|
|
107
|
-
// customHandler(event)
|
|
108
|
-
// } else {
|
|
109
|
-
// seekBy(event.interval)
|
|
110
|
-
// }
|
|
111
|
-
// })
|
|
112
|
-
|
|
113
|
-
// AudioBrowser.onRemoteJumpBackward((event: any) => {
|
|
114
|
-
// const customHandler = customHandlers.get('jumpBackward')
|
|
115
|
-
// if (customHandler) {
|
|
116
|
-
// customHandler(event)
|
|
117
|
-
// } else {
|
|
118
|
-
// seekBy(-event.interval)
|
|
119
|
-
// }
|
|
120
|
-
// })
|
|
121
|
-
|
|
122
43
|
// MARK: - Handler Override Functions
|
|
123
44
|
//
|
|
124
45
|
// Use these functions when you want to OVERRIDE the default remote control behavior.
|
|
125
46
|
// These will replace the default handlers with your custom logic.
|
|
126
|
-
// If you just want to listen to events for debugging/logging, use the onRemote*
|
|
47
|
+
// If you just want to listen to events for debugging/logging, use the onRemote* emitters below.
|
|
127
48
|
|
|
128
49
|
/**
|
|
129
50
|
* Sets a custom handler for remote play events, overriding the default behavior.
|
|
@@ -191,7 +112,7 @@ function handleRemoteJumpBackward(callback) {
|
|
|
191
112
|
|
|
192
113
|
// MARK: - Event Callbacks (for listening/debugging only)
|
|
193
114
|
//
|
|
194
|
-
// Use these
|
|
115
|
+
// Use these emitters when you want to LISTEN to remote control events without overriding
|
|
195
116
|
// the default behavior. These are perfect for logging, analytics, or debugging.
|
|
196
117
|
// Multiple listeners can be registered for the same event.
|
|
197
118
|
// To override the default behavior, use the handleRemote* functions above.
|
|
@@ -199,77 +120,77 @@ function handleRemoteJumpBackward(callback) {
|
|
|
199
120
|
/**
|
|
200
121
|
* Subscribes to remote jump backward events.
|
|
201
122
|
* @param callback - Called when the user presses the jump backward button
|
|
202
|
-
* @returns
|
|
123
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
203
124
|
*/
|
|
204
125
|
const onRemoteJumpBackward = exports.onRemoteJumpBackward = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteJumpBackward = cb);
|
|
205
126
|
|
|
206
127
|
/**
|
|
207
128
|
* Subscribes to remote jump forward events.
|
|
208
129
|
* @param callback - Called when the user presses the jump forward button
|
|
209
|
-
* @returns
|
|
130
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
210
131
|
*/
|
|
211
132
|
const onRemoteJumpForward = exports.onRemoteJumpForward = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteJumpForward = cb);
|
|
212
133
|
|
|
213
134
|
/**
|
|
214
135
|
* Subscribes to remote next events.
|
|
215
136
|
* @param callback - Called when the user presses the next track button
|
|
216
|
-
* @returns
|
|
137
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
217
138
|
*/
|
|
218
139
|
const onRemoteNext = exports.onRemoteNext = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteNext = cb);
|
|
219
140
|
|
|
220
141
|
/**
|
|
221
142
|
* Subscribes to remote pause events.
|
|
222
143
|
* @param callback - Called when the user presses the pause button
|
|
223
|
-
* @returns
|
|
144
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
224
145
|
*/
|
|
225
146
|
const onRemotePause = exports.onRemotePause = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemotePause = cb);
|
|
226
147
|
|
|
227
148
|
/**
|
|
228
149
|
* Subscribes to remote play events.
|
|
229
150
|
* @param callback - Called when the user presses the play button
|
|
230
|
-
* @returns
|
|
151
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
231
152
|
*/
|
|
232
153
|
const onRemotePlay = exports.onRemotePlay = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemotePlay = cb);
|
|
233
154
|
|
|
234
155
|
/**
|
|
235
156
|
* Subscribes to remote play ID events (Android only).
|
|
236
157
|
* @param callback - Called when the user selects a track from an external device
|
|
237
|
-
* @returns
|
|
158
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
238
159
|
*/
|
|
239
160
|
const onRemotePlayId = exports.onRemotePlayId = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemotePlayId = cb);
|
|
240
161
|
|
|
241
162
|
/**
|
|
242
163
|
* Subscribes to remote play search events (Android only).
|
|
243
164
|
* @param callback - Called when the user searches for a track (usually voice search)
|
|
244
|
-
* @returns
|
|
165
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
245
166
|
*/
|
|
246
167
|
const onRemotePlaySearch = exports.onRemotePlaySearch = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemotePlaySearch = cb);
|
|
247
168
|
|
|
248
169
|
/**
|
|
249
170
|
* Subscribes to remote previous events.
|
|
250
171
|
* @param callback - Called when the user presses the previous track button
|
|
251
|
-
* @returns
|
|
172
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
252
173
|
*/
|
|
253
174
|
const onRemotePrevious = exports.onRemotePrevious = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemotePrevious = cb);
|
|
254
175
|
|
|
255
176
|
/**
|
|
256
177
|
* Subscribes to remote seek events.
|
|
257
178
|
* @param callback - Called when the user changes the position of the timeline
|
|
258
|
-
* @returns
|
|
179
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
259
180
|
*/
|
|
260
181
|
const onRemoteSeek = exports.onRemoteSeek = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteSeek = cb);
|
|
261
182
|
|
|
262
183
|
/**
|
|
263
184
|
* Subscribes to remote skip events (Android only).
|
|
264
185
|
* @param callback - Called when the user presses the skip button
|
|
265
|
-
* @returns
|
|
186
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
266
187
|
*/
|
|
267
188
|
const onRemoteSkip = exports.onRemoteSkip = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteSkip = cb);
|
|
268
189
|
|
|
269
190
|
/**
|
|
270
191
|
* Subscribes to remote stop events.
|
|
271
192
|
* @param callback - Called when the user presses the stop button
|
|
272
|
-
* @returns
|
|
193
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
273
194
|
*/
|
|
274
195
|
const onRemoteStop = exports.onRemoteStop = _LazyNativeEmitter.LazyNativeEmitter.emitterize(cb => _native.nativeBrowser.onRemoteStop = cb);
|
|
275
196
|
//# sourceMappingURL=remoteControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","_LazyNativeEmitter","handleRemotePlay","callback","nativeBrowser","handleRemotePause","handleRemoteNext","handleRemotePrevious","handleRemoteStop","handleRemoteSeek","handleRemoteJumpForward","handleRemoteJumpBackward","onRemoteJumpBackward","exports","LazyNativeEmitter","emitterize","cb","onRemoteJumpForward","onRemoteNext","onRemotePause","onRemotePlay","onRemotePlayId","onRemotePlaySearch","onRemotePrevious","onRemoteSeek","onRemoteSkip","onRemoteStop"],"sourceRoot":"../../../src","sources":["features/remoteControls.ts"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAEA;;AAEA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAQA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAMA
|
|
1
|
+
{"version":3,"names":["_native","require","_LazyNativeEmitter","handleRemotePlay","callback","nativeBrowser","handleRemotePause","handleRemoteNext","handleRemotePrevious","handleRemoteStop","handleRemoteSeek","handleRemoteJumpForward","handleRemoteJumpBackward","onRemoteJumpBackward","exports","LazyNativeEmitter","emitterize","cb","onRemoteJumpForward","onRemoteNext","onRemotePause","onRemotePlay","onRemotePlayId","onRemotePlaySearch","onRemotePrevious","onRemoteSeek","onRemoteSkip","onRemoteStop"],"sourceRoot":"../../../src","sources":["features/remoteControls.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -72,7 +72,7 @@ function clearSleepTimer() {
|
|
|
72
72
|
/**
|
|
73
73
|
* Subscribes to sleep timer changes.
|
|
74
74
|
* @param callback - Called when the sleep timer state changes
|
|
75
|
-
* @returns
|
|
75
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
76
76
|
*/
|
|
77
77
|
const onSleepTimerChanged = exports.onSleepTimerChanged = _NativeUpdatedValue.NativeUpdatedValue.emitterize(cb => _native.nativeBrowser.onSleepTimerChanged = cb);
|
|
78
78
|
|
|
@@ -87,6 +87,13 @@ const onSleepTimerChanged = exports.onSleepTimerChanged = _NativeUpdatedValue.Na
|
|
|
87
87
|
function useSleepTimerActive() {
|
|
88
88
|
const [isActive, setIsActive] = (0, _react.useState)(() => getSleepTimer() !== null);
|
|
89
89
|
(0, _react.useEffect)(() => {
|
|
90
|
+
// Re-sync before subscribing: a change between the initial read above and this effect would
|
|
91
|
+
// otherwise be missed for good. `undefined` means nothing has fired yet, whereas `null` is a
|
|
92
|
+
// real value — the timer being cleared — so it has to re-sync too.
|
|
93
|
+
const {
|
|
94
|
+
lastValue
|
|
95
|
+
} = onSleepTimerChanged;
|
|
96
|
+
if (lastValue !== undefined) setIsActive(lastValue !== null);
|
|
90
97
|
return onSleepTimerChanged.addListener(timer => {
|
|
91
98
|
setIsActive(timer !== null);
|
|
92
99
|
});
|
|
@@ -113,6 +120,11 @@ function useSleepTimer(params) {
|
|
|
113
120
|
});
|
|
114
121
|
const time = state && 'time' in state ? state.time : undefined;
|
|
115
122
|
(0, _react.useEffect)(() => {
|
|
123
|
+
// Re-sync before subscribing — see useSleepTimerActive.
|
|
124
|
+
const {
|
|
125
|
+
lastValue
|
|
126
|
+
} = onSleepTimerChanged;
|
|
127
|
+
if (lastValue !== undefined) setState(addSecondsLeft(lastValue));
|
|
116
128
|
return onSleepTimerChanged.addListener(event => {
|
|
117
129
|
setState(addSecondsLeft(event));
|
|
118
130
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_native","_NativeUpdatedValue","getSleepTimer","nativeBrowser","setSleepTimer","seconds","options","fadeDuration","setSleepTimerToEndOfTrack","clearSleepTimer","onSleepTimerChanged","exports","NativeUpdatedValue","emitterize","cb","useSleepTimerActive","isActive","setIsActive","useState","useEffect","addListener","timer","useSleepTimer","params","updateInterval","inactive","state","setState","timerState","addSecondsLeft","time","
|
|
1
|
+
{"version":3,"names":["_react","require","_native","_NativeUpdatedValue","getSleepTimer","nativeBrowser","setSleepTimer","seconds","options","fadeDuration","setSleepTimerToEndOfTrack","clearSleepTimer","onSleepTimerChanged","exports","NativeUpdatedValue","emitterize","cb","useSleepTimerActive","isActive","setIsActive","useState","useEffect","lastValue","undefined","addListener","timer","useSleepTimer","params","updateInterval","inactive","state","setState","timerState","addSecondsLeft","time","event","update","sleepTimer","result","secondsLeft","clear","initialTimeoutId","setTimeout","intervalId","setInterval","clearTimeout","clearInterval","Math","max","round","Date","now"],"sourceRoot":"../../../src","sources":["features/sleepTimer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Image = exports.AppState = void 0;
|
|
7
|
+
exports.appStateListenerCount = appStateListenerCount;
|
|
8
|
+
exports.resetAppState = resetAppState;
|
|
9
|
+
exports.setAppState = setAppState;
|
|
10
|
+
/**
|
|
11
|
+
* Stands in for `react-native` under vitest, via the alias in `vitest.config.ts`.
|
|
12
|
+
*
|
|
13
|
+
* Not a convenience: `react-native/index.js` is Flow-typed (`import typeof ...`)
|
|
14
|
+
* and Rollup cannot parse it, so any test that reaches a module importing from
|
|
15
|
+
* `'react-native'` fails to load at all. Jest consumers get this from
|
|
16
|
+
* `@react-native/jest-preset`; vitest has no equivalent.
|
|
17
|
+
*
|
|
18
|
+
* Keep it to the surface the library actually touches. Two symbols so far —
|
|
19
|
+
* `AppState` (usePolledProgress) and `Image.resolveAssetSource`. Anything a test
|
|
20
|
+
* needs to drive should get an explicit control here rather than a cast at the
|
|
21
|
+
* call site.
|
|
22
|
+
*
|
|
23
|
+
* @internal — never imported by production code, only aliased in by the runner.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const changeListeners = new Set();
|
|
27
|
+
const AppState = exports.AppState = {
|
|
28
|
+
currentState: 'active',
|
|
29
|
+
// `type` is widened to string so the guard stays live: real AppState also
|
|
30
|
+
// emits 'memoryWarning' and 'focus', and silently treating one of those as a
|
|
31
|
+
// 'change' subscription would be a confusing way to find out this stub is thin.
|
|
32
|
+
addEventListener(type, listener) {
|
|
33
|
+
if (type !== 'change') throw new Error(`AppState stub: unhandled "${type}"`);
|
|
34
|
+
changeListeners.add(listener);
|
|
35
|
+
return {
|
|
36
|
+
remove: () => changeListeners.delete(listener)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/** Move the app to the foreground or background and notify subscribers. */
|
|
42
|
+
function setAppState(status) {
|
|
43
|
+
AppState.currentState = status;
|
|
44
|
+
// Deleting from a Set mid-iteration is safe, so a listener that removes itself
|
|
45
|
+
// during the callback needs no defensive copy.
|
|
46
|
+
for (const listener of changeListeners) listener(status);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Drop every subscription and return to the foreground. Call between tests —
|
|
51
|
+
* the stub is a module singleton, so state outlives an individual test.
|
|
52
|
+
*/
|
|
53
|
+
function resetAppState() {
|
|
54
|
+
changeListeners.clear();
|
|
55
|
+
AppState.currentState = 'active';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Number of live `change` subscriptions, for asserting cleanup. */
|
|
59
|
+
function appStateListenerCount() {
|
|
60
|
+
return changeListeners.size;
|
|
61
|
+
}
|
|
62
|
+
const Image = exports.Image = {
|
|
63
|
+
resolveAssetSource: source => source
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=reactNativeStub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["changeListeners","Set","AppState","exports","currentState","addEventListener","type","listener","Error","add","remove","delete","setAppState","status","resetAppState","clear","appStateListenerCount","size","Image","resolveAssetSource","source"],"sourceRoot":"../../../src","sources":["test-utils/reactNativeStub.ts"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,MAAMA,eAAe,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAE1C,MAAMC,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG;EACtBE,YAAY,EAAE,QAA0B;EAExC;EACA;EACA;EACAC,gBAAgBA,CAACC,IAAY,EAAEC,QAAwB,EAAE;IACvD,IAAID,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIE,KAAK,CAAC,6BAA6BF,IAAI,GAAG,CAAC;IAC5EN,eAAe,CAACS,GAAG,CAACF,QAAQ,CAAC;IAC7B,OAAO;MAAEG,MAAM,EAAEA,CAAA,KAAMV,eAAe,CAACW,MAAM,CAACJ,QAAQ;IAAE,CAAC;EAC3D;AACF,CAAC;;AAED;AACO,SAASK,WAAWA,CAACC,MAAsB,EAAQ;EACxDX,QAAQ,CAACE,YAAY,GAAGS,MAAM;EAC9B;EACA;EACA,KAAK,MAAMN,QAAQ,IAAIP,eAAe,EAAEO,QAAQ,CAACM,MAAM,CAAC;AAC1D;;AAEA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAA,EAAS;EACpCd,eAAe,CAACe,KAAK,CAAC,CAAC;EACvBb,QAAQ,CAACE,YAAY,GAAG,QAAQ;AAClC;;AAEA;AACO,SAASY,qBAAqBA,CAAA,EAAW;EAC9C,OAAOhB,eAAe,CAACiB,IAAI;AAC7B;AAEO,MAAMC,KAAK,GAAAf,OAAA,CAAAe,KAAA,GAAG;EACnBC,kBAAkB,EAAGC,MAAe,IAAKA;AAC3C,CAAC","ignoreList":[]}
|
|
@@ -5,23 +5,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.LazyNativeEmitter = void 0;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* The subscription object behind the library's **discrete** events — the
|
|
9
|
+
* remote-control exports (`onRemotePlay`, `onRemoteSeek`, …) and other
|
|
10
|
+
* one-shot signals with no "current value" to cache. Subscribe with
|
|
11
|
+
* {@link addListener}; the returned function unsubscribes. The emitter is
|
|
12
|
+
* not callable itself.
|
|
9
13
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* For critical state changes (playback, progress, etc.), use NativeEmitter instead to ensure
|
|
15
|
-
* no events are missed.
|
|
14
|
+
* "Lazy" is an implementation detail you may notice in timing: the native
|
|
15
|
+
* side only starts delivering the event once the first listener is added.
|
|
16
|
+
* State that always has a current reading uses `NativeUpdatedValue`
|
|
17
|
+
* instead.
|
|
16
18
|
*
|
|
17
19
|
* @example
|
|
18
20
|
* ```typescript
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* )
|
|
21
|
+
* import { onRemotePlay } from 'react-native-audio-browser'
|
|
22
|
+
*
|
|
23
|
+
* const unsubscribe = onRemotePlay.addListener(() => console.log('play'))
|
|
24
|
+
* // later:
|
|
25
|
+
* unsubscribe()
|
|
22
26
|
* ```
|
|
23
27
|
*/
|
|
24
28
|
class LazyNativeEmitter {
|
|
29
|
+
/** @internal */
|
|
25
30
|
constructor(setter) {
|
|
26
31
|
this.setter = setter;
|
|
27
32
|
}
|
|
@@ -35,6 +40,13 @@ class LazyNativeEmitter {
|
|
|
35
40
|
});
|
|
36
41
|
return listeners;
|
|
37
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Subscribes to the event.
|
|
46
|
+
*
|
|
47
|
+
* @param callback - Invoked with each event
|
|
48
|
+
* @returns A function that removes the listener
|
|
49
|
+
*/
|
|
38
50
|
addListener(callback) {
|
|
39
51
|
const listeners = this.getListeners();
|
|
40
52
|
listeners.add(callback);
|
|
@@ -42,13 +54,15 @@ class LazyNativeEmitter {
|
|
|
42
54
|
}
|
|
43
55
|
|
|
44
56
|
/**
|
|
45
|
-
* Creates a lazy emitter
|
|
57
|
+
* Creates a lazy emitter for a native callback.
|
|
58
|
+
*
|
|
46
59
|
* @param setter - Function that sets the native callback property
|
|
47
|
-
* @returns
|
|
60
|
+
* @returns The emitter instance — subscribe with `addListener`, which returns
|
|
61
|
+
* an unsubscribe function
|
|
62
|
+
* @internal
|
|
48
63
|
*/
|
|
49
64
|
static emitterize(setter) {
|
|
50
|
-
|
|
51
|
-
return callback => emitter.addListener(callback);
|
|
65
|
+
return new LazyNativeEmitter(setter);
|
|
52
66
|
}
|
|
53
67
|
}
|
|
54
68
|
exports.LazyNativeEmitter = LazyNativeEmitter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LazyNativeEmitter","constructor","setter","getListeners","listeners","Set","data","listener","addListener","callback","add","delete","emitterize","
|
|
1
|
+
{"version":3,"names":["LazyNativeEmitter","constructor","setter","getListeners","listeners","Set","data","listener","addListener","callback","add","delete","emitterize","exports"],"sourceRoot":"../../../src","sources":["utils/LazyNativeEmitter.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,iBAAiB,CAAI;EAIhC;EACAC,WAAWA,CAACC,MAA6C,EAAE;IACzD,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEQC,YAAYA,CAAA,EAAqB;IACvC,IAAI,IAAI,CAACC,SAAS,EAAE,OAAO,IAAI,CAACA,SAAS;IACzC,MAAMA,SAAS,GAAI,IAAI,CAACA,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAE;IAC9C,IAAI,CAACH,MAAM,CAAEI,IAAO,IAAK;MACvB,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;QAChCG,QAAQ,CAACD,IAAI,CAAC;MAChB;IACF,CAAC,CAAC;IACF,OAAOF,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEI,WAAWA,CAACC,QAAqB,EAAc;IAC7C,MAAML,SAAS,GAAG,IAAI,CAACD,YAAY,CAAC,CAAC;IACrCC,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC;IACvB,OAAO,MAAML,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC;EACzC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOG,UAAUA,CACfV,MAA6C,EACvB;IACtB,OAAO,IAAIF,iBAAiB,CAACE,MAAM,CAAC;EACtC;AACF;AAACW,OAAA,CAAAb,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|