react-native-audio-browser 0.2.0-next.11 → 0.2.0-next.12
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 +4 -4
- package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +110 -25
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +254 -188
- package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +23 -3
- package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +77 -58
- package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +68 -26
- package/android/src/main/java/com/audiobrowser/browser/StyleResolver.kt +49 -0
- package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +9 -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/player/MediaSessionCallback.kt +120 -67
- package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -24
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +93 -73
- package/android/src/main/java/com/audiobrowser/player/Player.kt +48 -30
- package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
- package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +44 -40
- package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
- package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +35 -0
- package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +45 -53
- package/android/src/test/java/com/audiobrowser/TestFixtures.kt +26 -39
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +228 -50
- package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
- package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +1 -1
- package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +91 -0
- package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -53
- package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +87 -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/player/CapabilityControlsTest.kt +1 -2
- package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
- package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
- package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
- package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +161 -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 +131 -143
- package/ios/Browser/BrowserPathHelper.swift +44 -44
- package/ios/Browser/JsonModels.swift +187 -106
- package/ios/Browser/SearchDrillIn.swift +6 -6
- package/ios/Browser/SectionPresentation.swift +34 -0
- package/ios/Browser/SectionScope.swift +58 -24
- package/ios/Browser/StyleResolver.swift +47 -0
- package/ios/Browser/TabBarEntries.swift +2 -2
- package/ios/Browser/TrackIdTemplate.swift +37 -0
- package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
- package/ios/CarPlay/CarPlayController.swift +105 -67
- package/ios/CarPlay/CarPlayImageLoader.swift +38 -18
- package/ios/CarPlay/CarPlayListItemFactory.swift +217 -84
- package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
- package/ios/Extension/Capability+RemoteCommand.swift +1 -1
- package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
- package/ios/Extension/ResolvedTrack+Copying.swift +11 -15
- package/ios/Extension/Section+Copying.swift +31 -0
- package/ios/Extension/Track+Copying.swift +6 -12
- package/ios/Extension/Track+Identity.swift +18 -0
- package/ios/HybridAudioBrowser.swift +113 -35
- package/ios/Model/NitroTypeStubs.swift +46 -21
- package/ios/Model/PlayerUpdateOptions.swift +7 -0
- package/ios/Player/NowPlayingUpdater.swift +1 -1
- package/ios/Player/PlaybackCoordinator.swift +2 -2
- package/ios/Player/RetryManager.swift +4 -3
- package/ios/Tests/BrowserPathHelperTests.swift +50 -20
- package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
- package/ios/Tests/JsonModelsTests.swift +75 -1
- package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
- package/ios/Tests/ResolvedTrackCopyingTests.swift +37 -35
- package/ios/Tests/SearchDrillInTests.swift +16 -16
- package/ios/Tests/SectionPresentationTests.swift +61 -0
- package/ios/Tests/SectionScopeTests.swift +87 -55
- package/ios/Tests/StyleResolverTests.swift +67 -0
- package/ios/Tests/TabBarEntriesTests.swift +18 -18
- package/ios/Tests/TrackIdTemplateTests.swift +67 -0
- package/ios/Tests/TrackIdentityTests.swift +20 -0
- package/ios/Tests/TrackSelectorTests.swift +168 -33
- package/ios/TrackSelector.swift +45 -30
- package/ios/Util/ArtworkImageFetcher.swift +16 -1
- package/lib/commonjs/AudioBrowser.js +11 -0
- package/lib/commonjs/AudioBrowser.js.map +1 -1
- package/lib/commonjs/features/browser-config.js +11 -8
- package/lib/commonjs/features/browser-config.js.map +1 -1
- package/lib/commonjs/features/browser.js +2 -2
- package/lib/commonjs/features/favorites.js +13 -10
- package/lib/commonjs/features/favorites.js.map +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/state.js +2 -3
- package/lib/commonjs/features/playback/state.js.map +1 -1
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/player/setup.js +3 -1
- package/lib/commonjs/features/player/setup.js.map +1 -1
- package/lib/commonjs/features/player/validateOptions.js +2 -0
- package/lib/commonjs/features/player/validateOptions.js.map +1 -1
- package/lib/commonjs/features/queue/activeTrack.js +14 -3
- package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
- package/lib/commonjs/features/queue/queue.js +11 -4
- package/lib/commonjs/features/queue/queue.js.map +1 -1
- package/lib/commonjs/utils/LazyNativeEmitter.js +21 -10
- 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 +32 -24
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +144 -87
- 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/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/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 +1 -0
- package/lib/module/AudioBrowser.js.map +1 -1
- package/lib/module/features/browser-config.js +11 -8
- package/lib/module/features/browser-config.js.map +1 -1
- package/lib/module/features/browser.js +2 -2
- package/lib/module/features/favorites.js +13 -10
- package/lib/module/features/favorites.js.map +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/state.js +2 -3
- package/lib/module/features/playback/state.js.map +1 -1
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/player/setup.js +3 -1
- package/lib/module/features/player/setup.js.map +1 -1
- package/lib/module/features/player/validateOptions.js +2 -0
- package/lib/module/features/player/validateOptions.js.map +1 -1
- package/lib/module/features/queue/activeTrack.js +14 -3
- package/lib/module/features/queue/activeTrack.js.map +1 -1
- package/lib/module/features/queue/queue.js +11 -4
- package/lib/module/features/queue/queue.js.map +1 -1
- package/lib/module/utils/LazyNativeEmitter.js +21 -10
- 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 +32 -24
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +144 -87
- 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/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/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/src/AudioBrowser.d.ts +1 -0
- 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 +2 -2
- package/lib/typescript/src/features/favorites.d.ts +13 -10
- package/lib/typescript/src/features/favorites.d.ts.map +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/state.d.ts +2 -3
- 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/player/options.d.ts +21 -19
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
- package/lib/typescript/src/features/player/validateOptions.d.ts +1 -8
- package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/activeTrack.d.ts +8 -1
- package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts +5 -2
- package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-native.d.ts +2 -2
- package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-nodes.d.ts +260 -127
- package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
- package/lib/typescript/src/types/browser.d.ts +33 -53
- package/lib/typescript/src/types/browser.d.ts.map +1 -1
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +16 -17
- 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 +0 -1
- package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
- package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +4 -3
- package/nitrogen/generated/android/c++/JBrowseResult.hpp +10 -4
- package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
- package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +4 -3
- package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +4 -2
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +4 -2
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +10 -4
- package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +2 -5
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +4 -3
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +9 -3
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +4 -2
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +21 -14
- package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
- package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +4 -3
- package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +16 -10
- package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +8 -2
- package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +6 -7
- package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +2 -5
- package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
- package/nitrogen/generated/android/c++/JOptions.hpp +2 -5
- package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +4 -3
- package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
- package/nitrogen/generated/android/c++/JResolvedTrack.hpp +49 -51
- package/nitrogen/generated/android/c++/JSection.hpp +114 -0
- package/nitrogen/generated/android/c++/JSectionStyle.hpp +69 -0
- package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
- package/nitrogen/generated/android/c++/JTrack.hpp +19 -48
- package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +4 -2
- package/nitrogen/generated/android/c++/JTrackStyle.hpp +25 -18
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +10 -4
- 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/IOSOptions.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +5 -5
- 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/ResolvedTrack.kt +12 -18
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Section.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → SectionStyle.kt} +12 -6
- 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 -15
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +23 -5
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +104 -82
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +16 -10
- package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +16 -10
- package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
- package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
- package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
- package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +5 -5
- package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
- package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
- package/nitrogen/generated/ios/swift/ResolvedTrack.swift +54 -83
- package/nitrogen/generated/ios/swift/Section.swift +100 -0
- package/nitrogen/generated/ios/swift/SectionStyle.swift +64 -0
- package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
- package/nitrogen/generated/ios/swift/Track.swift +20 -73
- package/nitrogen/generated/ios/swift/TrackStyle.swift +28 -22
- 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++/IOSOptions.hpp +9 -2
- package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +6 -6
- package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
- package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
- package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +30 -38
- package/nitrogen/generated/shared/c++/Section.hpp +106 -0
- package/nitrogen/generated/shared/c++/SectionStyle.hpp +96 -0
- package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
- package/nitrogen/generated/shared/c++/Track.hpp +15 -31
- package/nitrogen/generated/shared/c++/TrackStyle.hpp +50 -34
- package/package.json +1 -1
- package/src/AudioBrowser.ts +1 -0
- package/src/features/browser-config.test.ts +21 -6
- package/src/features/browser-config.ts +11 -8
- package/src/features/browser.test.ts +1 -1
- package/src/features/browser.ts +2 -2
- package/src/features/favorites.ts +13 -10
- package/src/features/hook-wiring.test.ts +63 -15
- package/src/features/playback/controls.ts +4 -2
- package/src/features/playback/state.ts +2 -3
- package/src/features/playback/trackPlaybackTime.ts +1 -1
- package/src/features/player/options.ts +27 -19
- package/src/features/player/setup.test.ts +12 -3
- package/src/features/player/setup.ts +3 -1
- package/src/features/player/validateOptions.ts +2 -0
- package/src/features/queue/activeTrack.ts +14 -3
- package/src/features/queue/queue.ts +11 -4
- package/src/nitro-stub-drift.test.ts +40 -0
- package/src/public-surface.test.ts +40 -0
- package/src/specs/audio-browser.nitro.ts +4 -3
- package/src/style-resolution.test.ts +139 -0
- package/src/types/browser-native.ts +2 -2
- package/src/types/browser-nodes.ts +268 -136
- package/src/types/browser.ts +34 -55
- package/src/utils/LazyNativeEmitter.ts +20 -10
- package/src/utils/NativeUpdatedValue.ts +29 -13
- package/src/utils/getTrackIdentity.ts +20 -0
- package/src/utils/useNativeValueRefreshedBy.ts +38 -0
- package/src/web/NativeAudioBrowser.ts +37 -22
- package/src/web/browser/BrowserManager.ts +176 -95
- package/src/web/browser/FavoriteManager.test.ts +84 -0
- package/src/web/browser/FavoriteManager.ts +28 -23
- 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/player/NowPlayingManager.ts +4 -3
- package/src/web/util/BrowserPathHelper.test.ts +52 -0
- package/src/web/util/BrowserPathHelper.ts +61 -13
- package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
- package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
- package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
- 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/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
- 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/Variant_Bool_FavoriteConfig.swift +0 -18
- package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
- package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
|
@@ -5,10 +5,10 @@ import { BrowserPathHelper } from '../util/BrowserPathHelper';
|
|
|
5
5
|
/**
|
|
6
6
|
* How a selected track should be navigated, decided purely from its shape:
|
|
7
7
|
* - `contextual` — a playable track carrying its parent queue context in a
|
|
8
|
-
* contextual
|
|
9
|
-
* - `browse` — a browsable track (has a `
|
|
10
|
-
* - `playable` — a bare playable track (`src`, no `
|
|
11
|
-
* - `invalid` — neither `
|
|
8
|
+
* contextual path (`{parentPath}?__trackId={src}`); expand/skip within that queue.
|
|
9
|
+
* - `browse` — a browsable track (has a `path` that isn't contextual); drill in.
|
|
10
|
+
* - `playable` — a bare playable track (`src`, no `path`); load and play it alone.
|
|
11
|
+
* - `invalid` — neither `path` nor `src`; nothing to do.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -17,15 +17,15 @@ import { BrowserPathHelper } from '../util/BrowserPathHelper';
|
|
|
17
17
|
* caller; this only decides which action applies.
|
|
18
18
|
*/
|
|
19
19
|
export function classifyTrackNavigation(track) {
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
20
|
+
const path = track.path;
|
|
21
|
+
if (path && BrowserPathHelper.isContextual(path)) {
|
|
22
22
|
return {
|
|
23
23
|
kind: 'contextual',
|
|
24
|
-
parentPath: BrowserPathHelper.stripTrackId(
|
|
25
|
-
trackId: BrowserPathHelper.extractTrackId(
|
|
24
|
+
parentPath: BrowserPathHelper.stripTrackId(path),
|
|
25
|
+
trackId: BrowserPathHelper.extractTrackId(path)
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
if (
|
|
28
|
+
if (path) return {
|
|
29
29
|
kind: 'browse'
|
|
30
30
|
};
|
|
31
31
|
if (track.src) return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserPathHelper","classifyTrackNavigation","track","
|
|
1
|
+
{"version":3,"names":["BrowserPathHelper","classifyTrackNavigation","track","path","isContextual","kind","parentPath","stripTrackId","trackId","extractTrackId","src"],"sourceRoot":"../../../../src","sources":["web/browser/classifyTrackNavigation.ts"],"mappings":";;AACA,SAASA,iBAAiB,QAAQ,2BAA2B;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAACC,KAAY,EAAmB;EACrE,MAAMC,IAAI,GAAGD,KAAK,CAACC,IAAI;EACvB,IAAIA,IAAI,IAAIH,iBAAiB,CAACI,YAAY,CAACD,IAAI,CAAC,EAAE;IAChD,OAAO;MACLE,IAAI,EAAE,YAAY;MAClBC,UAAU,EAAEN,iBAAiB,CAACO,YAAY,CAACJ,IAAI,CAAC;MAChDK,OAAO,EAAER,iBAAiB,CAACS,cAAc,CAACN,IAAI;IAChD,CAAC;EACH;EACA,IAAIA,IAAI,EAAE,OAAO;IAAEE,IAAI,EAAE;EAAS,CAAC;EACnC,IAAIH,KAAK,CAACQ,GAAG,EAAE,OAAO;IAAEL,IAAI,EAAE;EAAW,CAAC;EAC1C,OAAO;IAAEA,IAAI,EAAE;EAAU,CAAC;AAC5B","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { getTrackIdentity } from '../../utils/getTrackIdentity';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes a resolved page to the canonical sectioned shape (ADR 0010):
|
|
7
|
+
* `sections` wins when present; plain `children` is authoring sugar for one
|
|
8
|
+
* untitled section. The output never carries `children` — there is exactly
|
|
9
|
+
* one structure downstream code hydrates, transforms, and scopes against.
|
|
10
|
+
*/
|
|
11
|
+
export function normalizePage(content) {
|
|
12
|
+
const {
|
|
13
|
+
children,
|
|
14
|
+
sections,
|
|
15
|
+
...rest
|
|
16
|
+
} = content;
|
|
17
|
+
const normalized = sections ?? (children !== undefined ? [{
|
|
18
|
+
children
|
|
19
|
+
}] : undefined);
|
|
20
|
+
return {
|
|
21
|
+
...rest,
|
|
22
|
+
sections: normalized
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The page's children concatenated in section order — the flattening that
|
|
28
|
+
* defines the contextual `__index` positions (ADR 0009/0010) and the flat
|
|
29
|
+
* views (tabs, search) of a sectioned page.
|
|
30
|
+
*/
|
|
31
|
+
export function flattenSections(sections) {
|
|
32
|
+
return sections?.flatMap(section => section.children) ?? [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The page's tracks as one flat list, normalizing first — the flat view
|
|
37
|
+
* (tabs, search) of a page in either authored shape. Mirrors the native
|
|
38
|
+
* `flattenedChildren` accessors.
|
|
39
|
+
*/
|
|
40
|
+
export function flattenedChildren(page) {
|
|
41
|
+
return flattenSections(normalizePage(page).sections);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The section of the page containing the playable `trackId` (a track
|
|
46
|
+
* identity: id when non-blank, else src), or undefined when not found.
|
|
47
|
+
*
|
|
48
|
+
* `tappedIndex` — the flat page position stamped into the contextual URL —
|
|
49
|
+
* is a tie-breaker, never an identifier: when the child at that position
|
|
50
|
+
* still carries the tapped identity, it pins which section (and which copy,
|
|
51
|
+
* via `tappedOffset`) was tapped; when it doesn't (the list shifted),
|
|
52
|
+
* resolution falls back to the first section containing the identity. A
|
|
53
|
+
* stale index can therefore never select a different track — at worst a
|
|
54
|
+
* different copy of the same one.
|
|
55
|
+
*/
|
|
56
|
+
export function sectionContaining(sections, trackId, tappedIndex) {
|
|
57
|
+
if (tappedIndex !== undefined && tappedIndex >= 0) {
|
|
58
|
+
let start = 0;
|
|
59
|
+
for (const section of sections) {
|
|
60
|
+
const offset = tappedIndex - start;
|
|
61
|
+
if (offset < section.children.length) {
|
|
62
|
+
const tapped = section.children[offset];
|
|
63
|
+
if (tapped && getTrackIdentity(tapped) === trackId) {
|
|
64
|
+
return {
|
|
65
|
+
tracks: section.children,
|
|
66
|
+
tappedOffset: offset
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
start += section.children.length;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const section of sections) {
|
|
75
|
+
if (section.children.some(track => getTrackIdentity(track) === trackId)) {
|
|
76
|
+
return {
|
|
77
|
+
tracks: section.children
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=sections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getTrackIdentity","normalizePage","content","children","sections","rest","normalized","undefined","flattenSections","flatMap","section","flattenedChildren","page","sectionContaining","trackId","tappedIndex","start","offset","length","tapped","tracks","tappedOffset","some","track"],"sourceRoot":"../../../../src","sources":["web/browser/sections.ts"],"mappings":";;AACA,SAASA,gBAAgB,QAAQ,8BAA8B;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,OAAsB,EAAiB;EACnE,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,GAAGH,OAAO;EAC/C,MAAMI,UAAU,GACdF,QAAQ,KAAKD,QAAQ,KAAKI,SAAS,GAAG,CAAC;IAAEJ;EAAS,CAAC,CAAC,GAAGI,SAAS,CAAC;EACnE,OAAO;IAAE,GAAGF,IAAI;IAAED,QAAQ,EAAEE;EAAW,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAACJ,QAA+B,EAAW;EACxE,OAAOA,QAAQ,EAAEK,OAAO,CAAEC,OAAO,IAAKA,OAAO,CAACP,QAAQ,CAAC,IAAI,EAAE;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,iBAAiBA,CAACC,IAAmB,EAAW;EAC9D,OAAOJ,eAAe,CAACP,aAAa,CAACW,IAAI,CAAC,CAACR,QAAQ,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,iBAAiBA,CAC/BT,QAAmB,EACnBU,OAAe,EACfC,WAA+B,EACyB;EACxD,IAAIA,WAAW,KAAKR,SAAS,IAAIQ,WAAW,IAAI,CAAC,EAAE;IACjD,IAAIC,KAAK,GAAG,CAAC;IACb,KAAK,MAAMN,OAAO,IAAIN,QAAQ,EAAE;MAC9B,MAAMa,MAAM,GAAGF,WAAW,GAAGC,KAAK;MAClC,IAAIC,MAAM,GAAGP,OAAO,CAACP,QAAQ,CAACe,MAAM,EAAE;QACpC,MAAMC,MAAM,GAAGT,OAAO,CAACP,QAAQ,CAACc,MAAM,CAAC;QACvC,IAAIE,MAAM,IAAInB,gBAAgB,CAACmB,MAAM,CAAC,KAAKL,OAAO,EAAE;UAClD,OAAO;YAAEM,MAAM,EAAEV,OAAO,CAACP,QAAQ;YAAEkB,YAAY,EAAEJ;UAAO,CAAC;QAC3D;QACA;MACF;MACAD,KAAK,IAAIN,OAAO,CAACP,QAAQ,CAACe,MAAM;IAClC;EACF;EACA,KAAK,MAAMR,OAAO,IAAIN,QAAQ,EAAE;IAC9B,IAAIM,OAAO,CAACP,QAAQ,CAACmB,IAAI,CAAEC,KAAK,IAAKvB,gBAAgB,CAACuB,KAAK,CAAC,KAAKT,OAAO,CAAC,EAAE;MACzE,OAAO;QAAEM,MAAM,EAAEV,OAAO,CAACP;MAAS,CAAC;IACrC;EACF;EACA,OAAOI,SAAS;AAClB","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { artworkUrl } from '../../utils/artwork';
|
|
4
|
+
import { getTrackIdentity } from '../../utils/getTrackIdentity';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Manages now playing metadata overrides.
|
|
@@ -28,7 +29,7 @@ export class NowPlayingManager {
|
|
|
28
29
|
album: update.album ?? currentTrack.album,
|
|
29
30
|
artwork: artworkUrl(currentTrack.artwork),
|
|
30
31
|
description: currentTrack.description,
|
|
31
|
-
mediaId: currentTrack
|
|
32
|
+
mediaId: getTrackIdentity(currentTrack) ?? currentTrack.path,
|
|
32
33
|
genre: currentTrack.genre,
|
|
33
34
|
duration
|
|
34
35
|
} : {
|
|
@@ -37,7 +38,7 @@ export class NowPlayingManager {
|
|
|
37
38
|
album: currentTrack.album,
|
|
38
39
|
artwork: artworkUrl(currentTrack.artwork),
|
|
39
40
|
description: currentTrack.description,
|
|
40
|
-
mediaId: currentTrack
|
|
41
|
+
mediaId: getTrackIdentity(currentTrack) ?? currentTrack.path,
|
|
41
42
|
genre: currentTrack.genre,
|
|
42
43
|
duration
|
|
43
44
|
};
|
|
@@ -59,7 +60,7 @@ export class NowPlayingManager {
|
|
|
59
60
|
album: this.override?.album ?? currentTrack.album,
|
|
60
61
|
artwork: artworkUrl(currentTrack.artwork),
|
|
61
62
|
description: currentTrack.description,
|
|
62
|
-
mediaId: currentTrack
|
|
63
|
+
mediaId: getTrackIdentity(currentTrack) ?? currentTrack.path,
|
|
63
64
|
genre: currentTrack.genre,
|
|
64
65
|
duration
|
|
65
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["artworkUrl","NowPlayingManager","onNowPlayingChanged","updateNowPlaying","update","currentTrack","duration","override","metadata","title","artist","album","artwork","description","mediaId","
|
|
1
|
+
{"version":3,"names":["artworkUrl","getTrackIdentity","NowPlayingManager","onNowPlayingChanged","updateNowPlaying","update","currentTrack","duration","override","metadata","title","artist","album","artwork","description","mediaId","path","genre","getNowPlaying","undefined","clearNowPlayingOverride"],"sourceRoot":"../../../../src","sources":["web/player/NowPlayingManager.ts"],"mappings":";;AAEA,SAASA,UAAU,QAAQ,qBAAqB;AAChD,SAASC,gBAAgB,QAAQ,8BAA8B;;AAE/D;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,CAAC;EAG7B;EACAC,mBAAmB,GAA2CA,CAAA,KAAM,CAAC,CAAC;;EAEtE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,gBAAgBA,CACdC,MAAoC,EACpCC,YAA+B,EAC/BC,QAAgB,EACV;IACN,IAAI,CAACC,QAAQ,GAAGH,MAAM;IAEtB,IAAI,CAACC,YAAY,EAAE;IAEnB,MAAMG,QAA4B,GAAGJ,MAAM,GACvC;MACEK,KAAK,EAAEL,MAAM,CAACK,KAAK,IAAIJ,YAAY,CAACI,KAAK;MACzCC,MAAM,EAAEN,MAAM,CAACM,MAAM,IAAIL,YAAY,CAACK,MAAM;MAC5CC,KAAK,EAAEP,MAAM,CAACO,KAAK,IAAIN,YAAY,CAACM,KAAK;MACzCC,OAAO,EAAEb,UAAU,CAACM,YAAY,CAACO,OAAO,CAAC;MACzCC,WAAW,EAAER,YAAY,CAACQ,WAAW;MACrCC,OAAO,EAAEd,gBAAgB,CAACK,YAAY,CAAC,IAAIA,YAAY,CAACU,IAAI;MAC5DC,KAAK,EAAEX,YAAY,CAACW,KAAK;MACzBV;IACF,CAAC,GACD;MACEG,KAAK,EAAEJ,YAAY,CAACI,KAAK;MACzBC,MAAM,EAAEL,YAAY,CAACK,MAAM;MAC3BC,KAAK,EAAEN,YAAY,CAACM,KAAK;MACzBC,OAAO,EAAEb,UAAU,CAACM,YAAY,CAACO,OAAO,CAAC;MACzCC,WAAW,EAAER,YAAY,CAACQ,WAAW;MACrCC,OAAO,EAAEd,gBAAgB,CAACK,YAAY,CAAC,IAAIA,YAAY,CAACU,IAAI;MAC5DC,KAAK,EAAEX,YAAY,CAACW,KAAK;MACzBV;IACF,CAAC;IAEL,IAAI,CAACJ,mBAAmB,CAACM,QAAQ,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACES,aAAaA,CACXZ,YAA+B,EAC/BC,QAAgB,EACgB;IAChC,IAAI,CAACD,YAAY,EAAE,OAAOa,SAAS;IAEnC,OAAO;MACLT,KAAK,EAAE,IAAI,CAACF,QAAQ,EAAEE,KAAK,IAAIJ,YAAY,CAACI,KAAK;MACjDC,MAAM,EAAE,IAAI,CAACH,QAAQ,EAAEG,MAAM,IAAIL,YAAY,CAACK,MAAM;MACpDC,KAAK,EAAE,IAAI,CAACJ,QAAQ,EAAEI,KAAK,IAAIN,YAAY,CAACM,KAAK;MACjDC,OAAO,EAAEb,UAAU,CAACM,YAAY,CAACO,OAAO,CAAC;MACzCC,WAAW,EAAER,YAAY,CAACQ,WAAW;MACrCC,OAAO,EAAEd,gBAAgB,CAACK,YAAY,CAAC,IAAIA,YAAY,CAACU,IAAI;MAC5DC,KAAK,EAAEX,YAAY,CAACW,KAAK;MACzBV;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACEa,uBAAuBA,CAAA,EAAS;IAC9B,IAAI,CAACZ,QAAQ,GAAGW,SAAS;EAC3B;AACF","ignoreList":[]}
|
|
@@ -8,8 +8,12 @@
|
|
|
8
8
|
* 1. System paths (prefixed with `/__`): Root, recent, and search paths
|
|
9
9
|
* 2. Contextual URLs: Embed parent context in track identifiers for Media3 integration
|
|
10
10
|
*
|
|
11
|
-
* Contextual URL format: `{parentPath}?__trackId={
|
|
12
|
-
* Example: "/library/radio?__trackId=song.mp3"
|
|
11
|
+
* Contextual URL format: `{parentPath}?__trackId={trackIdentity}&__index={childIndex}`
|
|
12
|
+
* Example: "/library/radio?__trackId=song.mp3&__index=2"
|
|
13
|
+
*
|
|
14
|
+
* `__trackId` is the identity check; `__index` (the child's position on the
|
|
15
|
+
* page at stamp time) is only a tie-breaker between surfaces that carry the
|
|
16
|
+
* same identity — a stale index never selects a different track.
|
|
13
17
|
*
|
|
14
18
|
* This allows:
|
|
15
19
|
* - Media3 to reference playable-only tracks (tracks with `src` but no `url`)
|
|
@@ -21,6 +25,8 @@ export const BrowserPathHelper = {
|
|
|
21
25
|
SEARCH_PATH_PREFIX: '/__search',
|
|
22
26
|
/** Query parameter name for contextual track identifiers */
|
|
23
27
|
CONTEXTUAL_TRACK_PARAM: '__trackId',
|
|
28
|
+
/** Query parameter name for the tapped child's page position (tie-breaker) */
|
|
29
|
+
CONTEXTUAL_INDEX_PARAM: '__index',
|
|
24
30
|
/**
|
|
25
31
|
* Create a search path for a given query
|
|
26
32
|
*/
|
|
@@ -38,13 +44,13 @@ export const BrowserPathHelper = {
|
|
|
38
44
|
return path.includes(`?${this.CONTEXTUAL_TRACK_PARAM}=`) || path.includes(`&${this.CONTEXTUAL_TRACK_PARAM}=`);
|
|
39
45
|
},
|
|
40
46
|
/**
|
|
41
|
-
* Strips the __trackId
|
|
42
|
-
* If the URL is not contextual, returns it unchanged.
|
|
47
|
+
* Strips the contextual parameters (__trackId and __index) from a contextual
|
|
48
|
+
* URL to get the parent path. If the URL is not contextual, returns it unchanged.
|
|
43
49
|
*
|
|
44
50
|
* @param url The URL to process
|
|
45
|
-
* @returns The URL without the
|
|
51
|
+
* @returns The URL without the contextual parameters
|
|
46
52
|
*
|
|
47
|
-
* Example: "/library/radio?__trackId=song.mp3" → "/library/radio"
|
|
53
|
+
* Example: "/library/radio?__trackId=song.mp3&__index=2" → "/library/radio"
|
|
48
54
|
* Example: "/search?q=jazz&__trackId=song.mp3" → "/search?q=jazz"
|
|
49
55
|
*/
|
|
50
56
|
stripTrackId(url) {
|
|
@@ -56,8 +62,9 @@ export const BrowserPathHelper = {
|
|
|
56
62
|
const isFullUrl = url.startsWith('http://') || url.startsWith('https://');
|
|
57
63
|
const urlObj = new URL(url, isFullUrl ? undefined : 'http://placeholder');
|
|
58
64
|
|
|
59
|
-
// Remove the
|
|
65
|
+
// Remove the contextual parameters
|
|
60
66
|
urlObj.searchParams.delete(this.CONTEXTUAL_TRACK_PARAM);
|
|
67
|
+
urlObj.searchParams.delete(this.CONTEXTUAL_INDEX_PARAM);
|
|
61
68
|
|
|
62
69
|
// Return the appropriate format
|
|
63
70
|
if (isFullUrl) {
|
|
@@ -68,7 +75,7 @@ export const BrowserPathHelper = {
|
|
|
68
75
|
}
|
|
69
76
|
} catch {
|
|
70
77
|
// Fallback: simple string manipulation
|
|
71
|
-
const paramPattern = new RegExp(`[?&]
|
|
78
|
+
const paramPattern = new RegExp(`[?&](?:${this.CONTEXTUAL_TRACK_PARAM}|${this.CONTEXTUAL_INDEX_PARAM})=[^&]*`, 'g');
|
|
72
79
|
let result = url.replace(paramPattern, '');
|
|
73
80
|
// Clean up any trailing ? or &
|
|
74
81
|
result = result.replace(/[?&]$/, '');
|
|
@@ -77,6 +84,22 @@ export const BrowserPathHelper = {
|
|
|
77
84
|
return result;
|
|
78
85
|
}
|
|
79
86
|
},
|
|
87
|
+
/**
|
|
88
|
+
* Builds a contextual URL by appending a track identifier — and optionally
|
|
89
|
+
* the tapped child's page position — to a parent path.
|
|
90
|
+
*
|
|
91
|
+
* @param parentPath The parent container path
|
|
92
|
+
* @param trackId The track identity (`id` when non-blank, else `src`)
|
|
93
|
+
* @param index The child's position on the page at stamp time (tie-breaker)
|
|
94
|
+
* @returns A contextual URL combining parent path, track ID, and index
|
|
95
|
+
*
|
|
96
|
+
* Example: build("/library", "song.mp3", 2) → "/library?__trackId=song.mp3&__index=2"
|
|
97
|
+
*/
|
|
98
|
+
build(parentPath, trackId, index) {
|
|
99
|
+
const separator = parentPath.includes('?') ? '&' : '?';
|
|
100
|
+
const indexParam = index === undefined ? '' : `&${this.CONTEXTUAL_INDEX_PARAM}=${index}`;
|
|
101
|
+
return `${parentPath}${separator}${this.CONTEXTUAL_TRACK_PARAM}=${encodeURIComponent(trackId)}${indexParam}`;
|
|
102
|
+
},
|
|
80
103
|
/**
|
|
81
104
|
* Extracts the track ID from a contextual URL.
|
|
82
105
|
* Returns undefined if the URL is not contextual or doesn't contain the track ID parameter.
|
|
@@ -90,14 +113,36 @@ export const BrowserPathHelper = {
|
|
|
90
113
|
if (!this.isContextual(path)) {
|
|
91
114
|
return undefined;
|
|
92
115
|
}
|
|
116
|
+
return this.extractParam(path, this.CONTEXTUAL_TRACK_PARAM);
|
|
117
|
+
},
|
|
118
|
+
/**
|
|
119
|
+
* Extracts the stamped page index from a contextual URL, or undefined when
|
|
120
|
+
* the URL is not contextual or carries no (valid, non-negative) index.
|
|
121
|
+
*
|
|
122
|
+
* Example: "/library/radio?__trackId=song.mp3&__index=2" → 2
|
|
123
|
+
*/
|
|
124
|
+
extractIndex(path) {
|
|
125
|
+
if (!this.isContextual(path)) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
const raw = this.extractParam(path, this.CONTEXTUAL_INDEX_PARAM);
|
|
129
|
+
if (raw === undefined || !/^\d+$/.test(raw)) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
return Number.parseInt(raw, 10);
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Extracts a single query parameter, handling both full URLs and paths,
|
|
136
|
+
* with a regex fallback for input the URL parser rejects.
|
|
137
|
+
*/
|
|
138
|
+
extractParam(path, param) {
|
|
93
139
|
try {
|
|
94
|
-
// Parse the URL - handle both full URLs and paths
|
|
95
140
|
const isFullUrl = path.startsWith('http://') || path.startsWith('https://');
|
|
96
141
|
const urlObj = new URL(path, isFullUrl ? undefined : 'http://placeholder');
|
|
97
|
-
return urlObj.searchParams.get(
|
|
142
|
+
return urlObj.searchParams.get(param) ?? undefined;
|
|
98
143
|
} catch {
|
|
99
144
|
// Fallback: regex extraction
|
|
100
|
-
const match = path.match(new RegExp(`[?&]${
|
|
145
|
+
const match = path.match(new RegExp(`[?&]${param}=([^&]*)`));
|
|
101
146
|
return match?.[1] ? decodeURIComponent(match[1]) : undefined;
|
|
102
147
|
}
|
|
103
148
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserPathHelper","SEARCH_PATH_PREFIX","CONTEXTUAL_TRACK_PARAM","createSearchPath","query","encodedQuery","encodeURIComponent","isContextual","path","includes","stripTrackId","url","isFullUrl","startsWith","urlObj","URL","undefined","searchParams","delete","toString","search","pathname","paramPattern","RegExp","result","replace","extractTrackId","get","match","decodeURIComponent","buildUrl","baseUrl","normalizedBase","normalizedPath"],"sourceRoot":"../../../../src","sources":["web/util/BrowserPathHelper.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,iBAAiB,GAAG;EAC/B;EACAC,kBAAkB,EAAE,WAAW;EAE/B;EACAC,sBAAsB,EAAE,WAAW;EAEnC;AACF;AACA;EACEC,gBAAgBA,CAACC,KAAa,EAAU;IACtC,MAAMC,YAAY,GAAGC,kBAAkB,CAACF,KAAK,CAAC;IAC9C,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"names":["BrowserPathHelper","SEARCH_PATH_PREFIX","CONTEXTUAL_TRACK_PARAM","CONTEXTUAL_INDEX_PARAM","createSearchPath","query","encodedQuery","encodeURIComponent","isContextual","path","includes","stripTrackId","url","isFullUrl","startsWith","urlObj","URL","undefined","searchParams","delete","toString","search","pathname","paramPattern","RegExp","result","replace","build","parentPath","trackId","index","separator","indexParam","extractTrackId","extractParam","extractIndex","raw","test","Number","parseInt","param","get","match","decodeURIComponent","buildUrl","baseUrl","normalizedBase","normalizedPath"],"sourceRoot":"../../../../src","sources":["web/util/BrowserPathHelper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioBrowser.d.ts","sourceRoot":"","sources":["../../../src/AudioBrowser.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"AudioBrowser.d.ts","sourceRoot":"","sources":["../../../src/AudioBrowser.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-config.d.ts","sourceRoot":"","sources":["../../../../src/features/browser-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAWrB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"browser-config.d.ts","sourceRoot":"","sources":["../../../../src/features/browser-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAWrB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,yBAAyB,CAAA;AA2KhC,eAAO,MAAM,iBAAiB,eAAe,CAAA;AAqC7C;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,IAAI,CAuCN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,GAC3B,0BAA0B,CAoB5B"}
|
|
@@ -33,8 +33,8 @@ import { NativeUpdatedValue } from '../utils/NativeUpdatedValue';
|
|
|
33
33
|
* }
|
|
34
34
|
* },
|
|
35
35
|
* tabs: [
|
|
36
|
-
* { title: 'Home',
|
|
37
|
-
* { title: 'Search',
|
|
36
|
+
* { title: 'Home', path: '/' },
|
|
37
|
+
* { title: 'Search', path: '/search' }
|
|
38
38
|
* ]
|
|
39
39
|
* })
|
|
40
40
|
* ```
|
|
@@ -27,26 +27,29 @@ export declare function setActiveTrackFavorited(favorited: boolean): void;
|
|
|
27
27
|
*/
|
|
28
28
|
export declare function toggleActiveTrackFavorited(): void;
|
|
29
29
|
/**
|
|
30
|
-
* Sets the list of favorited track
|
|
30
|
+
* Sets the list of favorited track identifiers.
|
|
31
31
|
*
|
|
32
32
|
* This syncs your app's favorites with the native favorites cache, enabling
|
|
33
33
|
* the heart button in media controllers (notification, Android Auto, CarPlay)
|
|
34
34
|
* to show the correct state.
|
|
35
35
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
36
|
+
* Each identifier is matched **exactly** against a track's *identity* — its
|
|
37
|
+
* `id` when set, falling back to `src`. Store favorites as the same stable
|
|
38
|
+
* identifier you put in `Track.id` (or as the full `src` for id-less tracks).
|
|
39
39
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* A track whose response already carries `favorited` keeps that value on
|
|
41
|
+
* display surfaces — a caller-set flag wins over cache hydration. The cache
|
|
42
|
+
* itself is written only by this call and by heart toggles
|
|
43
|
+
* (`setActiveTrackFavorited()` / media-controller taps), so you only need to
|
|
44
|
+
* call this on app launch — and again whenever the collection changes outside
|
|
45
|
+
* the player (a sync from another device, say).
|
|
43
46
|
*
|
|
44
|
-
* @param favorites - Array of favorited track `src`
|
|
47
|
+
* @param favorites - Array of favorited track identities (`id`, or `src` for id-less tracks)
|
|
45
48
|
*
|
|
46
49
|
* @example
|
|
47
50
|
* ```ts
|
|
48
|
-
* const
|
|
49
|
-
* setFavorites(
|
|
51
|
+
* const favoriteIds = await loadFavoritesFromStorage()
|
|
52
|
+
* setFavorites(favoriteIds)
|
|
50
53
|
* ```
|
|
51
54
|
*/
|
|
52
55
|
export declare function setFavorites(favorites: string[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favorites.d.ts","sourceRoot":"","sources":["../../../../src/features/favorites.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAIhE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAEhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED
|
|
1
|
+
{"version":3,"file":"favorites.d.ts","sourceRoot":"","sources":["../../../../src/features/favorites.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAIhE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAEhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAEtD;AAID;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAA;IACZ,8BAA8B;IAC9B,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB,0CAG3B,CAAA"}
|
|
@@ -33,8 +33,10 @@ export declare function retry(): void;
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function seekTo(position: number): void;
|
|
35
35
|
/**
|
|
36
|
-
* Jump to the live edge of the current track
|
|
37
|
-
* live
|
|
36
|
+
* Jump to the live edge of the current track; no-op unless the track
|
|
37
|
+
* declares `live: true`. A stream with a seekable live window (HLS) seeks
|
|
38
|
+
* to the window's edge; a non-seekable stream (e.g. ICY radio) reconnects
|
|
39
|
+
* to rejoin live — an expired URL re-resolves through `media.resolve`.
|
|
38
40
|
*/
|
|
39
41
|
export declare function seekToLiveEdge(): void;
|
|
40
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/controls.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED
|
|
1
|
+
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/controls.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3C"}
|
|
@@ -13,9 +13,8 @@ import { NativeUpdatedValue } from '../../utils/NativeUpdatedValue';
|
|
|
13
13
|
* - `'buffering'`: Indicates that the player is currently loading more data
|
|
14
14
|
* before it can continue playing or is ready to start playing.
|
|
15
15
|
* - `'error'`: Indicates that playback of the current item failed. Call
|
|
16
|
-
* `
|
|
17
|
-
*
|
|
18
|
-
* the item again.
|
|
16
|
+
* `getPlaybackError()` (or subscribe via `usePlaybackError()`) for the
|
|
17
|
+
* error details. Call `retry()` or `play()` to try to play the item again.
|
|
19
18
|
* - `'ended'`: Indicates that playback stopped due to the end of the queue
|
|
20
19
|
* being reached.
|
|
21
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAKnE
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAKnE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,GACT,SAAS,GACT,WAAW,GACX,OAAO,GACP,OAAO,CAAA;AAEX,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,CAAA;AAID;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAID;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8BAE7B,CAAA;AAID;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC"}
|
|
@@ -4,7 +4,7 @@ export interface PlaybackElapsed {
|
|
|
4
4
|
total: number;
|
|
5
5
|
/** Seconds played since the previous callback (≈ `period`). */
|
|
6
6
|
sinceLast: number;
|
|
7
|
-
/** The currently playing track (id / src /
|
|
7
|
+
/** The currently playing track (id / src / path / title …), if any. */
|
|
8
8
|
track?: Track;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackPlaybackTime.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/trackPlaybackTime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAMtD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"trackPlaybackTime.d.ts","sourceRoot":"","sources":["../../../../../src/features/playback/trackPlaybackTime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAMtD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AA4CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,EAC5C,MAAM,EAAE,MAAM,GACb,MAAM,IAAI,CAiBZ"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { CarPlayNowPlayingButton } from '../../types/browser';
|
|
1
|
+
import type { CarPlayNowPlayingButton, CarPlayPlayingIndicatorLocation } from '../../types/browser';
|
|
3
2
|
import { NativeUpdatedValue } from '../../utils/NativeUpdatedValue';
|
|
4
3
|
/**
|
|
5
4
|
* Player capabilities control which media controls are available to the user.
|
|
@@ -69,31 +68,22 @@ export interface PlayerCapabilities {
|
|
|
69
68
|
* Android Auto and the Android 13+ system media controls — and an
|
|
70
69
|
* (empty or filled) heart on playable browse rows.
|
|
71
70
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* - `false` / omitted: favoriting off everywhere.
|
|
77
|
-
* - `true`: on, with `'exact'` id matching.
|
|
78
|
-
* - `{ match }`: on, with the given match mode.
|
|
71
|
+
* The ids passed to `setFavorites` are matched exactly against a track's
|
|
72
|
+
* *identity* — its `id` when set, falling back to `src`. Store favorites as
|
|
73
|
+
* the same stable identifier you put in `Track.id` (or as the full `src`
|
|
74
|
+
* for tracks without an id).
|
|
79
75
|
*
|
|
80
76
|
* @example
|
|
81
77
|
* ```ts
|
|
82
|
-
*
|
|
83
|
-
* favorite: { match: 'exact' }
|
|
84
|
-
* setFavorites(['https://cdn.example.com/audio/track-42.mp3'])
|
|
85
|
-
* // → favorited when src === 'https://cdn.example.com/audio/track-42.mp3'
|
|
86
|
-
*
|
|
87
|
-
* // 'partial': a favorite id matches when it is a full path segment of src.
|
|
88
|
-
* favorite: { match: 'partial' }
|
|
78
|
+
* favorite: true
|
|
89
79
|
* setFavorites(['track-42'])
|
|
90
|
-
* // → favorited when
|
|
91
|
-
* //
|
|
80
|
+
* // → favorited when track.id === 'track-42'
|
|
81
|
+
* // (or, for id-less tracks, when track.src === 'track-42')
|
|
92
82
|
* ```
|
|
93
83
|
*
|
|
94
84
|
* @default false
|
|
95
85
|
*/
|
|
96
|
-
favorite?: boolean
|
|
86
|
+
favorite?: boolean;
|
|
97
87
|
/**
|
|
98
88
|
* Enable shuffle mode toggle.
|
|
99
89
|
* @default true
|
|
@@ -269,6 +259,12 @@ export interface IOSOptions {
|
|
|
269
259
|
* @default []
|
|
270
260
|
*/
|
|
271
261
|
carPlayNowPlayingButtons: CarPlayNowPlayingButton[];
|
|
262
|
+
/**
|
|
263
|
+
* Where the now-playing indicator draws on CarPlay list rows.
|
|
264
|
+
* See {@link CarPlayPlayingIndicatorLocation}.
|
|
265
|
+
* @default 'leading'
|
|
266
|
+
*/
|
|
267
|
+
carPlayPlayingIndicatorLocation: CarPlayPlayingIndicatorLocation;
|
|
272
268
|
}
|
|
273
269
|
export interface AndroidOptions {
|
|
274
270
|
/**
|
|
@@ -346,6 +342,12 @@ export interface IOSUpdateOptions {
|
|
|
346
342
|
* @default []
|
|
347
343
|
*/
|
|
348
344
|
carPlayNowPlayingButtons?: CarPlayNowPlayingButton[];
|
|
345
|
+
/**
|
|
346
|
+
* Where the now-playing indicator draws on CarPlay list rows.
|
|
347
|
+
* See {@link CarPlayPlayingIndicatorLocation}.
|
|
348
|
+
* @default 'leading'
|
|
349
|
+
*/
|
|
350
|
+
carPlayPlayingIndicatorLocation?: CarPlayPlayingIndicatorLocation;
|
|
349
351
|
}
|
|
350
352
|
/**
|
|
351
353
|
* Partial options for updating player configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Warns when more CarPlay now-playing buttons are configured than CarPlay renders.
|
|
4
|
-
* Shared by `updateOptions` and `setupPlayer` (both can carry `ios` options).
|
|
5
|
-
* Kept out of `options.ts`, which the barrel re-exports — see
|
|
6
|
-
* public-surface.test.ts.
|
|
7
|
-
*/
|
|
8
|
-
export declare function validateIOSUpdateOptions(ios?: IOSUpdateOptions): void;
|
|
1
|
+
export {};
|
|
9
2
|
//# sourceMappingURL=validateOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateOptions.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/validateOptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateOptions.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/validateOptions.ts"],"names":[],"mappings":""}
|
|
@@ -26,12 +26,19 @@ export declare function getActiveTrack(): Track | undefined;
|
|
|
26
26
|
export declare function getActiveTrackIndex(): number | undefined;
|
|
27
27
|
/**
|
|
28
28
|
* Subscribes to active track change events.
|
|
29
|
+
*
|
|
30
|
+
* Fires on **transitions only** — selection, queue advance, skip. In-place
|
|
31
|
+
* metadata mutations of the active track (a favorite toggle) emit
|
|
32
|
+
* {@link onFavoriteChanged} instead; {@link useActiveTrack} subscribes to
|
|
33
|
+
* both, so UI bound through the hook still re-renders on a heart toggle.
|
|
34
|
+
*
|
|
29
35
|
* @param callback - Called when the active track changes
|
|
30
36
|
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
31
37
|
*/
|
|
32
38
|
export declare const onActiveTrackChanged: NativeUpdatedValue<PlaybackActiveTrackChangedEvent>;
|
|
33
39
|
/**
|
|
34
|
-
* Hook that returns the current active track
|
|
40
|
+
* Hook that returns the current active track, updating on transitions AND on
|
|
41
|
+
* in-place mutations of the active track (favorite toggles).
|
|
35
42
|
* @returns The current active track or undefined
|
|
36
43
|
*/
|
|
37
44
|
export declare function useActiveTrack(): Track | undefined;
|