react-native-audio-browser 0.2.0-next.10 → 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/build.gradle +6 -5
- package/android/gradle.properties +1 -1
- 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/tls/AiaCertChaser.kt +46 -5
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingExtendedTrustManager.kt +86 -27
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +58 -14
- package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +20 -6
- package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +249 -86
- 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 +69 -30
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +6 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +345 -8
- 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/tls/AiaCertChaserTest.kt +152 -8
- package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +218 -10
- package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherCallSiteTest.kt +322 -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 +64 -23
- 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/QueueManagerTests.swift +4 -4
- 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 +3 -2
- 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 +277 -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
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { getTrackIdentity } from '../../utils/getTrackIdentity';
|
|
3
4
|
import { assertedNotNullish } from '../../utils/validation';
|
|
4
5
|
import { RequestConfigBuilder } from '../http/RequestConfigBuilder';
|
|
5
6
|
import { SimpleRouter } from '../SimpleRouter';
|
|
6
7
|
import { BrowserPathHelper } from '../util/BrowserPathHelper';
|
|
7
8
|
import { assertBrowsePageShape } from './assertBrowsePageShape';
|
|
8
9
|
import { parseSearchResponse } from './parseSearchResponse';
|
|
10
|
+
import { flattenSections, flattenedChildren, normalizePage, sectionContaining } from './sections';
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* Manages browser navigation, route resolution, and content loading.
|
|
@@ -123,14 +125,11 @@ export class BrowserManager {
|
|
|
123
125
|
// Determine initial path
|
|
124
126
|
let initialPath = value.path;
|
|
125
127
|
|
|
126
|
-
// If no path specified, try to get first tab
|
|
128
|
+
// If no path specified, try to get first tab path
|
|
127
129
|
if (!initialPath) {
|
|
128
130
|
const tabsRoute = value.routes?.find(r => r.path === '__tabs__');
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
} else {
|
|
132
|
-
initialPath = '/';
|
|
133
|
-
}
|
|
131
|
+
const staticTabs = tabsRoute?.browseStatic ? flattenedChildren(tabsRoute.browseStatic) : [];
|
|
132
|
+
initialPath = staticTabs[0]?.path ?? '/';
|
|
134
133
|
}
|
|
135
134
|
if (initialPath) {
|
|
136
135
|
void this.navigate(initialPath);
|
|
@@ -146,16 +145,16 @@ export class BrowserManager {
|
|
|
146
145
|
}
|
|
147
146
|
|
|
148
147
|
/**
|
|
149
|
-
* Navigates to a track's
|
|
148
|
+
* Navigates to a track's path.
|
|
150
149
|
*/
|
|
151
150
|
async navigateTrack(track) {
|
|
152
151
|
this.navigationErrorManager.clearNavigationError();
|
|
153
|
-
const
|
|
154
|
-
if (!
|
|
155
|
-
console.warn('Track has no
|
|
152
|
+
const path = track.path;
|
|
153
|
+
if (!path) {
|
|
154
|
+
console.warn('Track has no path to navigate to');
|
|
156
155
|
return;
|
|
157
156
|
}
|
|
158
|
-
await this.navigate(
|
|
157
|
+
await this.navigate(path);
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
/**
|
|
@@ -208,28 +207,15 @@ export class BrowserManager {
|
|
|
208
207
|
return;
|
|
209
208
|
}
|
|
210
209
|
|
|
211
|
-
//
|
|
212
|
-
// search
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
|
|
210
|
+
// Resolution returns canonical sectioned pages; add contextual paths
|
|
211
|
+
// to non-search content (matches Android behavior where search()
|
|
212
|
+
// bypasses the resolve() contextual-path logic). Copies avoid mutating
|
|
213
|
+
// the original config object (e.g., browseStatic from routes), which
|
|
214
|
+
// would break search that reads from the same source.
|
|
215
|
+
if (content?.sections && !isSearchPath) {
|
|
216
216
|
content = {
|
|
217
217
|
...content,
|
|
218
|
-
|
|
219
|
-
// If track has src, always add/update contextual URL with current path context
|
|
220
|
-
// This matches Android's BrowserManager.kt:436-441
|
|
221
|
-
if (track.src) {
|
|
222
|
-
const contextualUrl = `${path}?__trackId=${encodeURIComponent(track.src)}`;
|
|
223
|
-
return {
|
|
224
|
-
...track,
|
|
225
|
-
url: contextualUrl
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
// Return a shallow copy in attempt to avoid mutating original config objects
|
|
229
|
-
return {
|
|
230
|
-
...track
|
|
231
|
-
};
|
|
232
|
-
})
|
|
218
|
+
sections: this.addContextualPaths(path, content.sections)
|
|
233
219
|
};
|
|
234
220
|
}
|
|
235
221
|
|
|
@@ -274,13 +260,42 @@ export class BrowserManager {
|
|
|
274
260
|
}
|
|
275
261
|
}
|
|
276
262
|
|
|
263
|
+
/**
|
|
264
|
+
* Stamps contextual paths onto a page's sections. A playable track gets a
|
|
265
|
+
* contextual path carrying its identity (id ?? src) so the queue can be
|
|
266
|
+
* re-expanded from it later, plus its flat page position (children
|
|
267
|
+
* concatenated in section order — ADR 0009/0010) as a duplicate-identity
|
|
268
|
+
* tie-breaker. Non-playable tracks are shallow-copied to avoid mutating
|
|
269
|
+
* original config objects (e.g., browseStatic from routes).
|
|
270
|
+
*/
|
|
271
|
+
addContextualPaths(path, sections) {
|
|
272
|
+
let index = 0;
|
|
273
|
+
return sections.map(section => ({
|
|
274
|
+
...section,
|
|
275
|
+
children: section.children.map(track => {
|
|
276
|
+
const flatIndex = index++;
|
|
277
|
+
const identity = getTrackIdentity(track);
|
|
278
|
+
if (track.src && identity) {
|
|
279
|
+
return {
|
|
280
|
+
...track,
|
|
281
|
+
path: BrowserPathHelper.build(path, identity, flatIndex)
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
...track
|
|
286
|
+
};
|
|
287
|
+
})
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
290
|
+
|
|
277
291
|
/**
|
|
278
292
|
* Resolves search content from a search path.
|
|
279
|
-
* Returns a
|
|
293
|
+
* Returns a canonical sectioned page — one untitled section of raw search
|
|
294
|
+
* results (no contextual URLs), like the native `makeSearchResult`.
|
|
280
295
|
* Matches Android's BrowserManager.search() which bypasses resolve() entirely.
|
|
281
296
|
*
|
|
282
297
|
* @param searchPath The search path (format: /__search?q=query)
|
|
283
|
-
* @returns ResolvedTrack containing search results as
|
|
298
|
+
* @returns ResolvedTrack containing search results as one untitled section
|
|
284
299
|
*/
|
|
285
300
|
async resolveSearchContent(searchPath) {
|
|
286
301
|
// Extract query from search path
|
|
@@ -318,13 +333,12 @@ export class BrowserManager {
|
|
|
318
333
|
}
|
|
319
334
|
}
|
|
320
335
|
|
|
321
|
-
//
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
url: searchPath,
|
|
336
|
+
// Search callbacks should return fresh tracks without contextual paths (like Android)
|
|
337
|
+
return normalizePage({
|
|
338
|
+
path: searchPath,
|
|
325
339
|
title: `Search: ${query}`,
|
|
326
340
|
children: searchResults
|
|
327
|
-
};
|
|
341
|
+
});
|
|
328
342
|
}
|
|
329
343
|
|
|
330
344
|
/**
|
|
@@ -345,30 +359,35 @@ export class BrowserManager {
|
|
|
345
359
|
// Transform parent artwork
|
|
346
360
|
const parentArtworkSource = await RequestConfigBuilder.resolveArtworkSourceAsync(content, requestConfig, artworkConfig);
|
|
347
361
|
|
|
348
|
-
// Transform children artwork
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
362
|
+
// Transform children artwork, section by section
|
|
363
|
+
const transformTrack = async track => {
|
|
364
|
+
const artworkSource = await RequestConfigBuilder.resolveArtworkSourceAsync(track, requestConfig, artworkConfig);
|
|
365
|
+
if (artworkSource && !track.artworkSource) {
|
|
366
|
+
return {
|
|
367
|
+
...track,
|
|
368
|
+
artworkSource
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
return track;
|
|
372
|
+
};
|
|
373
|
+
let transformedSections;
|
|
374
|
+
if (content.sections) {
|
|
375
|
+
transformedSections = await Promise.all(content.sections.map(async section => ({
|
|
376
|
+
...section,
|
|
377
|
+
children: await Promise.all(section.children.map(transformTrack))
|
|
378
|
+
})));
|
|
361
379
|
}
|
|
362
380
|
return {
|
|
363
381
|
...content,
|
|
364
382
|
artworkSource: parentArtworkSource ?? content.artworkSource,
|
|
365
|
-
|
|
383
|
+
sections: transformedSections ?? content.sections
|
|
366
384
|
};
|
|
367
385
|
}
|
|
368
386
|
|
|
369
387
|
/**
|
|
370
388
|
* Resolves content from a route using browseCallback, browseStatic, or browseConfig.
|
|
371
|
-
* Single source of truth for route resolution logic.
|
|
389
|
+
* Single source of truth for route resolution logic. Returns canonical
|
|
390
|
+
* sectioned pages (normalizePage) — consumers never see authored `children`.
|
|
372
391
|
*
|
|
373
392
|
* @param route The route configuration to resolve
|
|
374
393
|
* @param path The path being navigated to
|
|
@@ -388,19 +407,20 @@ export class BrowserManager {
|
|
|
388
407
|
this.navigationErrorManager.setNavigationError('callback-error', result.error, path);
|
|
389
408
|
return undefined;
|
|
390
409
|
}
|
|
391
|
-
return result;
|
|
410
|
+
return normalizePage(result);
|
|
392
411
|
}
|
|
393
412
|
|
|
394
|
-
// Handle static ResolvedTrack route
|
|
413
|
+
// Handle static ResolvedTrack route (normalizePage also copies, so the
|
|
414
|
+
// config object itself is never handed out)
|
|
395
415
|
if (route.browseStatic) {
|
|
396
|
-
return route.browseStatic;
|
|
416
|
+
return normalizePage(route.browseStatic);
|
|
397
417
|
}
|
|
398
418
|
|
|
399
419
|
// Handle request config-based route via the layered request → browse → route
|
|
400
420
|
// chain (matches native's resolveRouteEntry → resolveFromConfig).
|
|
401
421
|
if (route.browseConfig) {
|
|
402
422
|
try {
|
|
403
|
-
return await this.resolveFromConfig(this._configuration.browse, route.browseConfig, path, routeParams);
|
|
423
|
+
return normalizePage(await this.resolveFromConfig(this._configuration.browse, route.browseConfig, path, routeParams));
|
|
404
424
|
} catch (error) {
|
|
405
425
|
console.error(`Failed to resolve ${errorContext}:`, error);
|
|
406
426
|
this.handleNavigationError(error, path);
|
|
@@ -489,6 +509,8 @@ export class BrowserManager {
|
|
|
489
509
|
|
|
490
510
|
/**
|
|
491
511
|
* Resolves content for a specific path using configured routes.
|
|
512
|
+
* Like the native resolve pipelines, the returned page is canonical
|
|
513
|
+
* sectioned shape — `children` sugar is normalized away at this seam.
|
|
492
514
|
*/
|
|
493
515
|
async resolveContent(path) {
|
|
494
516
|
const routes = this._configuration.routes;
|
|
@@ -530,9 +552,9 @@ export class BrowserManager {
|
|
|
530
552
|
// there's no content.
|
|
531
553
|
if (this._configuration.request || this._configuration.requestResolver || this._configuration.browse || this._configuration.browseResolver) {
|
|
532
554
|
try {
|
|
533
|
-
return await this.resolveFromConfig(this._configuration.browse, undefined, path, {
|
|
555
|
+
return normalizePage(await this.resolveFromConfig(this._configuration.browse, undefined, path, {
|
|
534
556
|
path
|
|
535
|
-
});
|
|
557
|
+
}));
|
|
536
558
|
} catch (error) {
|
|
537
559
|
console.error('Failed to resolve default browse content:', error);
|
|
538
560
|
this.handleNavigationError(error, path);
|
|
@@ -551,7 +573,8 @@ export class BrowserManager {
|
|
|
551
573
|
return [];
|
|
552
574
|
}
|
|
553
575
|
const result = await this.resolveRouteContent(tabsRoute, '/', {}, 'Tabs');
|
|
554
|
-
|
|
576
|
+
// Tabs are a flat list, not a page — a sectioned tabs source flattens.
|
|
577
|
+
const tabs = result ? flattenSections(result.sections) : [];
|
|
555
578
|
|
|
556
579
|
// Transform artwork URLs on tabs via the async resolver so the shared
|
|
557
580
|
// request layer (incl. its transform) applies, matching content/search.
|
|
@@ -582,35 +605,65 @@ export class BrowserManager {
|
|
|
582
605
|
/**
|
|
583
606
|
* Expands a queue from a contextual URL.
|
|
584
607
|
* Resolves the parent container to get all siblings.
|
|
585
|
-
* Matches Android's BrowserManager.
|
|
608
|
+
* Matches Android's BrowserManager.expandQueueFromContextualPath() behavior.
|
|
586
609
|
*
|
|
587
|
-
* @param
|
|
610
|
+
* @param contextualPath The contextual path (format: /path?__trackId=trackSrc)
|
|
588
611
|
* @returns Object with tracks and selectedIndex, or undefined if expansion fails
|
|
589
612
|
*/
|
|
590
|
-
async
|
|
591
|
-
const trackId = BrowserPathHelper.extractTrackId(
|
|
613
|
+
async expandQueueFromContextualPath(contextualPath) {
|
|
614
|
+
const trackId = BrowserPathHelper.extractTrackId(contextualPath);
|
|
592
615
|
if (!trackId) return undefined;
|
|
593
616
|
try {
|
|
594
617
|
// Resolve the parent container to get all siblings
|
|
595
|
-
const parentPath = BrowserPathHelper.stripTrackId(
|
|
618
|
+
const parentPath = BrowserPathHelper.stripTrackId(contextualPath);
|
|
596
619
|
const parentResolvedTrack = await this.resolveContent(parentPath);
|
|
597
|
-
const
|
|
598
|
-
if (!
|
|
620
|
+
const rawSections = parentResolvedTrack?.sections;
|
|
621
|
+
if (!rawSections || rawSections.every(s => s.children.length === 0)) {
|
|
599
622
|
console.warn('Parent has no children, cannot expand queue');
|
|
600
623
|
return undefined;
|
|
601
624
|
}
|
|
602
625
|
|
|
603
|
-
//
|
|
604
|
-
|
|
626
|
+
// Stamp contextual paths so queued tracks carry their own queue context
|
|
627
|
+
// (navigate() stamps the displayed page the same way).
|
|
628
|
+
const sections = this.addContextualPaths(parentPath, rawSections);
|
|
629
|
+
|
|
630
|
+
// Queue scope is the tapped section, not the whole page (ADR 0006).
|
|
631
|
+
// The stamped flat index pins which section (and which copy) was
|
|
632
|
+
// tapped when the same identity appears more than once; a stale index
|
|
633
|
+
// falls back to the first identity match. An identity that no longer
|
|
634
|
+
// appears on the page aborts the expansion — the caller falls back to
|
|
635
|
+
// the single track.
|
|
636
|
+
const tappedIndex = BrowserPathHelper.extractIndex(contextualPath);
|
|
637
|
+
const scoped = sectionContaining(sections, trackId, tappedIndex);
|
|
638
|
+
if (!scoped) {
|
|
639
|
+
console.warn(`Track with identity='${trackId}' not found on parent page`);
|
|
640
|
+
return undefined;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// Filter to only playable tracks (tracks with src). A disabled track is
|
|
644
|
+
// unavailable — queue expansion excludes it, so auto-advance never
|
|
645
|
+
// meets one (Track.disabled).
|
|
646
|
+
const isQueueable = track => track.src != null && track.disabled !== true;
|
|
647
|
+
const playableTracks = scoped.tracks.filter(isQueueable);
|
|
605
648
|
if (playableTracks.length === 0) {
|
|
606
|
-
console.warn('
|
|
649
|
+
console.warn('Section has no playable tracks, cannot expand queue');
|
|
607
650
|
return undefined;
|
|
608
651
|
}
|
|
609
652
|
|
|
610
|
-
//
|
|
611
|
-
|
|
653
|
+
// Selected position: the pinned copy when the stamp survived, else
|
|
654
|
+
// the first identity match.
|
|
655
|
+
let selectedIndex = -1;
|
|
656
|
+
if (scoped.tappedOffset !== undefined) {
|
|
657
|
+
const tapped = scoped.tracks[scoped.tappedOffset];
|
|
658
|
+
if (tapped != null && isQueueable(tapped)) {
|
|
659
|
+
selectedIndex = scoped.tracks.slice(0, scoped.tappedOffset + 1).filter(isQueueable).length - 1;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
if (selectedIndex < 0) {
|
|
663
|
+
selectedIndex = playableTracks.findIndex(track => getTrackIdentity(track) === trackId);
|
|
664
|
+
}
|
|
612
665
|
if (selectedIndex < 0) {
|
|
613
|
-
console.warn(`Track with
|
|
666
|
+
console.warn(`Track with identity='${trackId}' not found in playable children`);
|
|
614
667
|
return undefined;
|
|
615
668
|
}
|
|
616
669
|
|
|
@@ -626,7 +679,7 @@ export class BrowserManager {
|
|
|
626
679
|
selectedIndex
|
|
627
680
|
};
|
|
628
681
|
} catch (error) {
|
|
629
|
-
console.error(`Error expanding queue from contextual
|
|
682
|
+
console.error(`Error expanding queue from contextual path: ${contextualPath}`, error);
|
|
630
683
|
return undefined;
|
|
631
684
|
}
|
|
632
685
|
}
|
|
@@ -643,19 +696,23 @@ export class BrowserManager {
|
|
|
643
696
|
* @returns Object with expanded tracks and starting index
|
|
644
697
|
*/
|
|
645
698
|
async resolveMediaItemsForPlayback(tracks, startIndex, startPositionMs, searchQuery) {
|
|
646
|
-
// Single track: check for search context or contextual
|
|
699
|
+
// Single track: check for search context or contextual path
|
|
647
700
|
if (tracks.length === 1) {
|
|
648
701
|
const track = assertedNotNullish(tracks[0]);
|
|
649
|
-
const
|
|
702
|
+
const trackPath = track.path;
|
|
650
703
|
|
|
651
704
|
// If search query present, expand search results
|
|
652
705
|
if (searchQuery) {
|
|
653
|
-
// Execute search (will hit cache if already performed)
|
|
706
|
+
// Execute search (will hit cache if already performed). Disabled
|
|
707
|
+
// tracks never play, so they never enter a search-built queue
|
|
708
|
+
// (Track.disabled — mirrors both native platforms).
|
|
654
709
|
const searchResults = await this.resolveSearchContent(BrowserPathHelper.createSearchPath(searchQuery));
|
|
655
|
-
const searchTracks = searchResults?.
|
|
656
|
-
if (searchTracks
|
|
657
|
-
// Find the selected track in search results
|
|
658
|
-
|
|
710
|
+
const searchTracks = flattenSections(searchResults?.sections).filter(t => t.disabled !== true);
|
|
711
|
+
if (searchTracks.length > 0) {
|
|
712
|
+
// Find the selected track in search results by path or identity
|
|
713
|
+
// (matches Android's three-way mediaId match)
|
|
714
|
+
const identity = getTrackIdentity(track);
|
|
715
|
+
const selectedIdx = searchTracks.findIndex(t => t.path === trackPath || identity !== undefined && getTrackIdentity(t) === identity);
|
|
659
716
|
if (selectedIdx >= 0) {
|
|
660
717
|
return {
|
|
661
718
|
tracks: searchTracks,
|
|
@@ -666,14 +723,14 @@ export class BrowserManager {
|
|
|
666
723
|
}
|
|
667
724
|
}
|
|
668
725
|
|
|
669
|
-
// Check if contextual
|
|
726
|
+
// Check if contextual path - expand from parent
|
|
670
727
|
// Note: The queueSourcePath optimization is handled by the caller (NativeAudioBrowser.navigateTrackAsync)
|
|
671
728
|
// which has access to the existing queue and can skip to the track directly.
|
|
672
729
|
// This matches Android where MediaSessionCallback handles the optimization before calling
|
|
673
730
|
// BrowserManager.resolveMediaItemsForPlayback.
|
|
674
|
-
if (
|
|
675
|
-
const parentPath = BrowserPathHelper.stripTrackId(
|
|
676
|
-
const expanded = await this.
|
|
731
|
+
if (trackPath && BrowserPathHelper.isContextual(trackPath)) {
|
|
732
|
+
const parentPath = BrowserPathHelper.stripTrackId(trackPath);
|
|
733
|
+
const expanded = await this.expandQueueFromContextualPath(trackPath);
|
|
677
734
|
if (expanded) {
|
|
678
735
|
// Store source path for optimization by caller on next invocation
|
|
679
736
|
this._queueSourcePath = parentPath;
|
|
@@ -695,13 +752,13 @@ export class BrowserManager {
|
|
|
695
752
|
}
|
|
696
753
|
|
|
697
754
|
/**
|
|
698
|
-
* Gets the default navigation path (first tab
|
|
755
|
+
* Gets the default navigation path (first tab path or '/').
|
|
699
756
|
*/
|
|
700
757
|
getDefaultPath() {
|
|
701
758
|
// Try to get first tab as default path
|
|
702
759
|
if (this._tabs && this._tabs.length > 0) {
|
|
703
760
|
const firstTab = this._tabs[0];
|
|
704
|
-
return firstTab?.
|
|
761
|
+
return firstTab?.path ?? '/';
|
|
705
762
|
}
|
|
706
763
|
return '/';
|
|
707
764
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["assertedNotNullish","RequestConfigBuilder","SimpleRouter","BrowserPathHelper","assertBrowsePageShape","parseSearchResponse","BrowserManager","_configuration","router","_layerGeneration","_resolvedLayerGeneration","currentNavigationId","onPathChanged","onContentChanged","onTabsChanged","constructor","httpClient","favoriteManager","navigationErrorManager","handleNavigationError","error","path","message","navError","setNavigationError","code","statusCode","_path","value","hasValidConfiguration","clearNavigationError","pathToNavigate","getDefaultPath","navigate","tabs","_tabs","content","_content","configuration","queueSourcePath","_queueSourcePath","setFormatCallback","formatNavigationError","initialPath","tabsRoute","routes","find","r","browseStatic","children","url","navigatePath","navigateTrack","track","console","warn","notifyContentChanged","invalidateAllContent","navigationId","undefined","isSearchPath","startsWith","SEARCH_PATH_PREFIX","resolveSearchContent","resolveContent","map","src","contextualUrl","encodeURIComponent","hydrateChildren","transformArtworkForContent","queryTabs","searchPath","queryMatch","match","query","decodeURIComponent","searchRoute","searchResults","searchCallback","reference","searchConfig","fetchSearchResults","q","title","artworkConfig","artwork","ensureLayersResolved","requestConfig","_resolvedRequest","parentArtworkSource","resolveArtworkSourceAsync","transformedChildren","Promise","all","artworkSource","resolveRouteContent","route","routeParams","errorContext","browseCallback","result","browseConfig","resolveFromConfig","browse","_layerResolution","generation","promise","cfg","resolvedRequest","requestResolver","request","resolvedBrowse","browseResolver","_resolvedBrowse","catch","err","kindConfig","routeConfig","params","merged","applyLayers","response","executeRequest","queryParams","length","routePatterns","findBestMatch","matchedPattern","routeMatch","matchedRoute","defaultRoute","expandQueueFromContextualUrl","trackId","extractTrackId","parentPath","stripTrackId","parentResolvedTrack","playableTracks","filter","selectedIndex","findIndex","singleTrack","tracks","resolveMediaItemsForPlayback","startIndex","startPositionMs","searchQuery","trackUrl","createSearchPath","searchTracks","selectedIdx","t","isContextual","expanded","firstTab"],"sourceRoot":"../../../../src","sources":["web/browser/BrowserManager.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["getTrackIdentity","assertedNotNullish","RequestConfigBuilder","SimpleRouter","BrowserPathHelper","assertBrowsePageShape","parseSearchResponse","flattenSections","flattenedChildren","normalizePage","sectionContaining","BrowserManager","_configuration","router","_layerGeneration","_resolvedLayerGeneration","currentNavigationId","onPathChanged","onContentChanged","onTabsChanged","constructor","httpClient","favoriteManager","navigationErrorManager","handleNavigationError","error","path","message","navError","setNavigationError","code","statusCode","_path","value","hasValidConfiguration","clearNavigationError","pathToNavigate","getDefaultPath","navigate","tabs","_tabs","content","_content","configuration","queueSourcePath","_queueSourcePath","setFormatCallback","formatNavigationError","initialPath","tabsRoute","routes","find","r","staticTabs","browseStatic","navigatePath","navigateTrack","track","console","warn","notifyContentChanged","invalidateAllContent","navigationId","undefined","isSearchPath","startsWith","SEARCH_PATH_PREFIX","resolveSearchContent","resolveContent","sections","addContextualPaths","hydrateChildren","transformArtworkForContent","queryTabs","index","map","section","children","flatIndex","identity","src","build","searchPath","queryMatch","match","query","decodeURIComponent","searchRoute","searchResults","searchCallback","reference","searchConfig","fetchSearchResults","q","title","artworkConfig","artwork","ensureLayersResolved","requestConfig","_resolvedRequest","parentArtworkSource","resolveArtworkSourceAsync","transformTrack","artworkSource","transformedSections","Promise","all","resolveRouteContent","route","routeParams","errorContext","browseCallback","result","browseConfig","resolveFromConfig","browse","_layerResolution","generation","promise","cfg","resolvedRequest","requestResolver","request","resolvedBrowse","browseResolver","_resolvedBrowse","catch","err","kindConfig","routeConfig","params","merged","applyLayers","response","executeRequest","queryParams","length","routePatterns","findBestMatch","matchedPattern","routeMatch","matchedRoute","defaultRoute","expandQueueFromContextualPath","contextualPath","trackId","extractTrackId","parentPath","stripTrackId","parentResolvedTrack","rawSections","every","s","tappedIndex","extractIndex","scoped","isQueueable","disabled","playableTracks","tracks","filter","selectedIndex","tappedOffset","tapped","slice","findIndex","singleTrack","resolveMediaItemsForPlayback","startIndex","startPositionMs","searchQuery","trackPath","createSearchPath","searchTracks","t","selectedIdx","isContextual","expanded","firstTab"],"sourceRoot":"../../../../src","sources":["web/browser/BrowserManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { getTrackIdentity } from '../../utils/getTrackIdentity';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
|
-
* Manages favorite state for tracks
|
|
6
|
+
* Manages favorite state for tracks, keyed by track identity (`id` when set,
|
|
7
|
+
* falling back to `src` — see getTrackIdentity / ADR 0008).
|
|
5
8
|
* Matches Android's favorite hydration behavior.
|
|
6
9
|
*/
|
|
7
10
|
export class FavoriteManager {
|
|
8
11
|
favorites = new Set();
|
|
9
12
|
|
|
10
13
|
/**
|
|
11
|
-
* Sets the favorites cache from an array of track
|
|
14
|
+
* Sets the favorites cache from an array of track identities.
|
|
12
15
|
* This is typically called when favorites are loaded from storage.
|
|
13
16
|
*/
|
|
14
17
|
setFavorites(favorites) {
|
|
@@ -16,24 +19,27 @@ export class FavoriteManager {
|
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
|
-
* Checks if a track is favorited based on its
|
|
22
|
+
* Checks if a track is favorited based on its identity.
|
|
20
23
|
*/
|
|
21
|
-
isFavorited(
|
|
22
|
-
|
|
24
|
+
isFavorited(track) {
|
|
25
|
+
const identity = getTrackIdentity(track);
|
|
26
|
+
return identity !== undefined && this.favorites.has(identity);
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
/**
|
|
26
|
-
* Adds a track
|
|
30
|
+
* Adds a track to the favorites cache under its identity.
|
|
27
31
|
*/
|
|
28
|
-
addFavorite(
|
|
29
|
-
|
|
32
|
+
addFavorite(track) {
|
|
33
|
+
const identity = getTrackIdentity(track);
|
|
34
|
+
if (identity !== undefined) this.favorites.add(identity);
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
/**
|
|
33
|
-
* Removes a track
|
|
38
|
+
* Removes a track from the favorites cache under its identity.
|
|
34
39
|
*/
|
|
35
|
-
removeFavorite(
|
|
36
|
-
|
|
40
|
+
removeFavorite(track) {
|
|
41
|
+
const identity = getTrackIdentity(track);
|
|
42
|
+
if (identity !== undefined) this.favorites.delete(identity);
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
/**
|
|
@@ -47,8 +53,7 @@ export class FavoriteManager {
|
|
|
47
53
|
// Don't overwrite API-provided favorites
|
|
48
54
|
if (track.favorited !== undefined && track.favorited !== null) return track;
|
|
49
55
|
if (this.favorites.size === 0) return track;
|
|
50
|
-
|
|
51
|
-
if (!isFavorited) return track;
|
|
56
|
+
if (!this.isFavorited(track)) return track;
|
|
52
57
|
return {
|
|
53
58
|
...track,
|
|
54
59
|
favorited: true
|
|
@@ -56,19 +61,24 @@ export class FavoriteManager {
|
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
/**
|
|
59
|
-
* Hydrates favorites on all
|
|
60
|
-
* Matches Android's hydrateChildren behavior.
|
|
64
|
+
* Hydrates favorites on all tracks of a resolved page.
|
|
65
|
+
* Matches Android's hydrateChildren behavior. Pages reach hydration
|
|
66
|
+
* normalized (ADR 0010), so `sections` is the only structure to walk.
|
|
61
67
|
*
|
|
62
|
-
* @param resolvedTrack
|
|
63
|
-
* @returns
|
|
68
|
+
* @param resolvedTrack Resolved page to hydrate
|
|
69
|
+
* @returns Resolved page with favorited properties set on its tracks
|
|
64
70
|
*/
|
|
65
71
|
hydrateChildren(resolvedTrack) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
const {
|
|
73
|
+
sections
|
|
74
|
+
} = resolvedTrack;
|
|
75
|
+
if (!sections) return resolvedTrack;
|
|
69
76
|
return {
|
|
70
77
|
...resolvedTrack,
|
|
71
|
-
|
|
78
|
+
sections: sections.map(section => ({
|
|
79
|
+
...section,
|
|
80
|
+
children: section.children.map(track => this.hydrateFavorite(track))
|
|
81
|
+
}))
|
|
72
82
|
};
|
|
73
83
|
}
|
|
74
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FavoriteManager","favorites","Set","setFavorites","isFavorited","
|
|
1
|
+
{"version":3,"names":["getTrackIdentity","FavoriteManager","favorites","Set","setFavorites","isFavorited","track","identity","undefined","has","addFavorite","add","removeFavorite","delete","hydrateFavorite","favorited","size","hydrateChildren","resolvedTrack","sections","map","section","children"],"sourceRoot":"../../../../src","sources":["web/browser/FavoriteManager.ts"],"mappings":";;AACA,SAASA,gBAAgB,QAAQ,8BAA8B;;AAE/D;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,CAAC;EACnBC,SAAS,GAAG,IAAIC,GAAG,CAAS,CAAC;;EAErC;AACF;AACA;AACA;EACEC,YAAYA,CAACF,SAAmB,EAAQ;IACtC,IAAI,CAACA,SAAS,GAAG,IAAIC,GAAG,CAACD,SAAS,CAAC;EACrC;;EAEA;AACF;AACA;EACEG,WAAWA,CAACC,KAAY,EAAW;IACjC,MAAMC,QAAQ,GAAGP,gBAAgB,CAACM,KAAK,CAAC;IACxC,OAAOC,QAAQ,KAAKC,SAAS,IAAI,IAAI,CAACN,SAAS,CAACO,GAAG,CAACF,QAAQ,CAAC;EAC/D;;EAEA;AACF;AACA;EACEG,WAAWA,CAACJ,KAAY,EAAQ;IAC9B,MAAMC,QAAQ,GAAGP,gBAAgB,CAACM,KAAK,CAAC;IACxC,IAAIC,QAAQ,KAAKC,SAAS,EAAE,IAAI,CAACN,SAAS,CAACS,GAAG,CAACJ,QAAQ,CAAC;EAC1D;;EAEA;AACF;AACA;EACEK,cAAcA,CAACN,KAAY,EAAQ;IACjC,MAAMC,QAAQ,GAAGP,gBAAgB,CAACM,KAAK,CAAC;IACxC,IAAIC,QAAQ,KAAKC,SAAS,EAAE,IAAI,CAACN,SAAS,CAACW,MAAM,CAACN,QAAQ,CAAC;EAC7D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,eAAeA,CAACR,KAAY,EAAS;IACnC;IACA,IAAIA,KAAK,CAACS,SAAS,KAAKP,SAAS,IAAIF,KAAK,CAACS,SAAS,KAAK,IAAI,EAAE,OAAOT,KAAK;IAC3E,IAAI,IAAI,CAACJ,SAAS,CAACc,IAAI,KAAK,CAAC,EAAE,OAAOV,KAAK;IAE3C,IAAI,CAAC,IAAI,CAACD,WAAW,CAACC,KAAK,CAAC,EAAE,OAAOA,KAAK;IAE1C,OAAO;MACL,GAAGA,KAAK;MACRS,SAAS,EAAE;IACb,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,eAAeA,CAACC,aAA4B,EAAiB;IAC3D,MAAM;MAAEC;IAAS,CAAC,GAAGD,aAAa;IAClC,IAAI,CAACC,QAAQ,EAAE,OAAOD,aAAa;IAEnC,OAAO;MACL,GAAGA,aAAa;MAChBC,QAAQ,EAAEA,QAAQ,CAACC,GAAG,CAAEC,OAAO,KAAM;QACnC,GAAGA,OAAO;QACVC,QAAQ,EAAED,OAAO,CAACC,QAAQ,CAACF,GAAG,CAAEd,KAAK,IAAK,IAAI,CAACQ,eAAe,CAACR,KAAK,CAAC;MACvE,CAAC,CAAC;IACJ,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export function assertBrowsePageShape(response, path) {
|
|
10
10
|
if (Array.isArray(response)) {
|
|
11
|
-
throw new Error(`Browse endpoint for "${path}" returned a JSON array; expected a ` + `page object { title, children?: Track[] }. Wrap the rows in a ` +
|
|
11
|
+
throw new Error(`Browse endpoint for "${path}" returned a JSON array; expected a ` + `page object { title, sections?: Section[], children?: Track[] }. ` + `Wrap the rows in a \`children\` array (one untitled section) or ` + `group them into \`sections\`.`);
|
|
12
12
|
}
|
|
13
13
|
if (response === null || typeof response !== 'object') {
|
|
14
|
-
throw new Error(`Browse endpoint for "${path}" returned ${JSON.stringify(response)}; ` + `expected a page object { title, children?: Track[] }.`);
|
|
14
|
+
throw new Error(`Browse endpoint for "${path}" returned ${JSON.stringify(response)}; ` + `expected a page object { title, sections?: Section[], ` + `children?: Track[] }.`);
|
|
15
15
|
}
|
|
16
16
|
return response;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["assertBrowsePageShape","response","path","Array","isArray","Error","JSON","stringify"],"sourceRoot":"../../../../src","sources":["web/browser/assertBrowsePageShape.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CACnCC,QAAiB,EACjBC,IAAY,EACG;EACf,IAAIC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE;IAC3B,MAAM,IAAII,KAAK,CACb,wBAAwBH,IAAI,sCAAsC,GAChE,
|
|
1
|
+
{"version":3,"names":["assertBrowsePageShape","response","path","Array","isArray","Error","JSON","stringify"],"sourceRoot":"../../../../src","sources":["web/browser/assertBrowsePageShape.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CACnCC,QAAiB,EACjBC,IAAY,EACG;EACf,IAAIC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE;IAC3B,MAAM,IAAII,KAAK,CACb,wBAAwBH,IAAI,sCAAsC,GAChE,mEAAmE,GACnE,kEAAkE,GAClE,+BACJ,CAAC;EACH;EACA,IAAID,QAAQ,KAAK,IAAI,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;IACrD,MAAM,IAAII,KAAK,CACb,wBAAwBH,IAAI,cAAcI,IAAI,CAACC,SAAS,CAACN,QAAQ,CAAC,IAAI,GACpE,wDAAwD,GACxD,uBACJ,CAAC;EACH;EACA,OAAOA,QAAQ;AACjB","ignoreList":[]}
|