react-native-audio-browser 0.2.0-next.8 → 0.2.0
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/AudioBrowser.podspec +1 -1
- package/README.md +2 -180
- package/android/build.gradle +1 -17
- package/android/gradle.properties +1 -1
- package/android/src/main/AndroidManifest.xml +0 -15
- package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +141 -401
- package/android/src/main/java/com/audiobrowser/Callbacks.kt +6 -4
- package/android/src/main/java/com/audiobrowser/Service.kt +18 -67
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +178 -442
- package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +4 -41
- package/android/src/main/java/com/audiobrowser/browser/TrackLoadHandler.kt +4 -4
- package/android/src/main/java/com/audiobrowser/http/RequestConfigBuilder.kt +97 -109
- package/android/src/main/java/com/audiobrowser/model/PlaybackMetadata.kt +10 -6
- package/android/src/main/java/com/audiobrowser/model/PlayerSetupOptions.kt +8 -40
- package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +46 -40
- package/android/src/main/java/com/audiobrowser/player/AutomaticBufferManager.kt +1 -4
- package/android/src/main/java/com/audiobrowser/player/DynamicLoadControl.kt +1 -18
- package/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +3 -15
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +134 -422
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCommandManager.kt +404 -248
- package/android/src/main/java/com/audiobrowser/player/PlaybackProgressUpdateManager.kt +59 -0
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +5 -25
- package/android/src/main/java/com/audiobrowser/player/Player.kt +582 -469
- package/android/src/main/java/com/audiobrowser/player/PlayerListener.kt +67 -190
- package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +53 -118
- package/android/src/main/java/com/audiobrowser/player/SleepTimer.kt +3 -37
- package/android/src/main/java/com/audiobrowser/player/TransformingDataSource.kt +40 -85
- package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +0 -24
- package/android/src/main/java/com/audiobrowser/util/CoilBitmapLoader.kt +300 -23
- package/android/src/main/java/com/audiobrowser/util/EqualizerManager.kt +23 -13
- package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +2 -2
- package/android/src/main/java/com/audiobrowser/util/MetadataAdapter.kt +3 -4
- package/android/src/main/java/com/audiobrowser/util/PlayingStateFactory.kt +1 -2
- package/android/src/main/java/com/audiobrowser/util/RatingFactory.kt +72 -0
- package/android/src/main/java/com/audiobrowser/util/ResolvedTrackFactory.kt +36 -0
- package/android/src/main/java/com/audiobrowser/util/SvgArtworkRenderer.kt +111 -6
- package/android/src/main/java/com/audiobrowser/util/SystemVolumeMonitor.kt +8 -22
- package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +80 -112
- package/android/src/main/res/values/strings.xml +0 -4
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +0 -4
- package/android/src/test/java/com/audiobrowser/browser/SimpleRouterTest.kt +2 -1
- package/android/src/test/java/com/audiobrowser/http/RequestConfigBuilderTest.kt +0 -72
- package/android/src/test/java/com/audiobrowser/player/PlaybackProgressUpdateManagerTest.kt +146 -0
- package/ios/Browser/BrowserConfig.swift +11 -41
- package/ios/Browser/BrowserManager+URLResolution.swift +93 -213
- package/ios/Browser/BrowserManager.swift +110 -303
- package/ios/Browser/BrowserPathHelper.swift +3 -32
- package/ios/Browser/JsonModels.swift +66 -287
- package/ios/CarPlay/CarPlayArtworkResolver.swift +6 -6
- package/ios/CarPlay/CarPlayController.swift +149 -739
- package/ios/CarPlay/CarPlayImageLoader.swift +8 -57
- package/ios/CarPlay/CarPlayListItemFactory.swift +35 -44
- package/ios/CarPlay/CarPlayNowPlayingManager.swift +36 -180
- package/ios/CarPlay/RNABAudioBrowser.h +10 -15
- package/ios/CarPlay/RNABAudioBrowser.m +14 -15
- package/ios/CarPlay/RNABCarPlaySceneDelegate.m +0 -2
- package/ios/CarPlay/RNABMediaIntentHandler.swift +43 -53
- package/ios/CarPlay/Track+CarPlay.swift +63 -0
- package/ios/Extension/Capability+RemoteCommand.swift +9 -7
- package/ios/Extension/ChapterMetadata+AVFoundation.swift +1 -1
- package/ios/Extension/NavigationError+Conversion.swift +1 -8
- package/ios/Extension/ResolvedTrack+Copying.swift +4 -10
- package/ios/Extension/TimedMetadata+AVFoundation.swift +1 -1
- package/ios/Extension/Track+AVPlayer.swift +4 -4
- package/ios/Extension/Track+Copying.swift +3 -9
- package/ios/Extension/TrackMetadata+AVFoundation.swift +1 -1
- package/ios/HybridAudioBrowser.swift +173 -751
- package/ios/Model/NitroTypeStubs.swift +224 -299
- package/ios/Model/PlayerUpdateOptions.swift +23 -23
- package/ios/Model/RemoteCommand.swift +6 -24
- package/ios/Model/TrackPlayerError.swift +18 -82
- package/ios/NowPlayingInfo/NowPlayingInfoCenter.swift +9 -0
- package/ios/NowPlayingInfo/NowPlayingInfoController.swift +121 -99
- package/ios/Observer/PlayerItemNotificationObserver.swift +5 -45
- package/ios/Observer/PlayerItemPropertyObserver.swift +4 -27
- package/ios/Observer/PlayerTimeObserver.swift +53 -3
- package/ios/Option/SessionCategories.swift +11 -34
- package/ios/Player/LoadSeekCoordinator.swift +1 -16
- package/ios/Player/MediaLoader.swift +11 -31
- package/ios/Player/NowPlayingUpdater.swift +26 -119
- package/ios/Player/PlaybackCoordinator.swift +51 -285
- package/ios/Player/PlaybackCoordinatorCallbacks.swift +1 -6
- package/ios/Player/PlaybackEffectHandler.swift +9 -19
- package/ios/Player/PlaybackErrorHandler.swift +13 -97
- package/ios/Player/PlaybackProgressUpdateManager.swift +68 -0
- package/ios/Player/PlaybackStateMachine.swift +13 -18
- package/ios/Player/PlayingStateManager.swift +2 -3
- package/ios/Player/QueueManager.swift +61 -67
- package/ios/Player/RetryManager.swift +21 -98
- package/ios/Player/SleepTimerHandling.swift +0 -8
- package/ios/Player/SleepTimerManager.swift +11 -72
- package/ios/RemoteCommand/RemoteCommandController.swift +21 -40
- package/ios/Tests/BrowserPathHelperTests.swift +0 -28
- package/ios/Tests/CarPlayArtworkResolverTests.swift +39 -39
- package/ios/Tests/ChapterMetadataAVFoundationTests.swift +2 -2
- package/ios/Tests/LoadSeekCoordinatorTests.swift +7 -40
- package/ios/Tests/MediaLoaderTests.swift +20 -32
- package/ios/Tests/PlaybackCoordinatorTests.swift +13 -787
- package/ios/Tests/PlaybackErrorHandlerTests.swift +46 -380
- package/ios/Tests/PlaybackProgressUpdateManagerTests.swift +166 -0
- package/ios/Tests/PlaybackStateMachineTests.swift +8 -33
- package/ios/Tests/QueueManagerTests.swift +18 -149
- package/ios/Tests/ResolvedTrackCopyingTests.swift +8 -15
- package/ios/Tests/Support/TestTypes.swift +20 -61
- package/ios/Tests/TrackSelectorTests.swift +15 -15
- package/ios/TrackPlayer.swift +58 -380
- package/ios/TrackPlayerCallbacks.swift +44 -5
- package/ios/TrackSelector.swift +5 -5
- package/ios/Util/ArtworkImageFetcher.swift +2 -4
- package/ios/Util/NetworkMonitor.swift +3 -7
- package/ios/Util/OnceValue.swift +0 -34
- package/lib/commonjs/AudioBrowser.js +11 -0
- package/lib/commonjs/AudioBrowser.js.map +1 -1
- package/lib/commonjs/features/browser.js +158 -59
- package/lib/commonjs/features/browser.js.map +1 -1
- package/lib/commonjs/features/equalizer.js +1 -1
- package/lib/commonjs/features/errors.js +5 -37
- package/lib/commonjs/features/errors.js.map +1 -1
- package/lib/commonjs/features/favorites.js +1 -1
- package/lib/commonjs/features/index.js +0 -22
- package/lib/commonjs/features/index.js.map +1 -1
- package/lib/commonjs/features/metadata.js +3 -3
- package/lib/commonjs/features/metadata.js.map +1 -1
- package/lib/commonjs/features/network.js +1 -1
- package/lib/commonjs/features/nowPlaying.js +1 -36
- package/lib/commonjs/features/nowPlaying.js.map +1 -1
- package/lib/commonjs/features/output.js +23 -37
- package/lib/commonjs/features/output.js.map +1 -1
- package/lib/commonjs/features/playback/controls.js +0 -9
- package/lib/commonjs/features/playback/controls.js.map +1 -1
- package/lib/commonjs/features/playback/index.js +0 -11
- package/lib/commonjs/features/playback/index.js.map +1 -1
- package/lib/commonjs/features/playback/playWhenReady.js +1 -1
- package/lib/commonjs/features/playback/playing.js +1 -1
- package/lib/commonjs/features/playback/progress.js +13 -29
- package/lib/commonjs/features/playback/progress.js.map +1 -1
- package/lib/commonjs/features/playback/state.js +1 -1
- package/lib/commonjs/features/playback/volume.js +2 -2
- package/lib/commonjs/features/player/options.js +29 -79
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/player/setup.js +3 -256
- package/lib/commonjs/features/player/setup.js.map +1 -1
- package/lib/commonjs/features/queue/activeTrack.js +1 -1
- package/lib/commonjs/features/queue/queue.js +5 -12
- package/lib/commonjs/features/queue/queue.js.map +1 -1
- package/lib/commonjs/features/queue/repeatMode.js +1 -1
- package/lib/commonjs/features/queue/shuffle.js +1 -1
- package/lib/commonjs/features/rating.js +2 -0
- package/lib/commonjs/features/rating.js.map +1 -0
- package/lib/commonjs/features/remoteControls.js +104 -14
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/features/sleepTimer.js +5 -10
- package/lib/commonjs/features/sleepTimer.js.map +1 -1
- package/lib/commonjs/native.js +0 -5
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.web.js +1 -4
- package/lib/commonjs/native.web.js.map +1 -1
- package/lib/commonjs/types/player.js +2 -0
- package/lib/commonjs/types/player.js.map +1 -0
- package/lib/commonjs/utils/LazyNativeEmitter.js +8 -8
- package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/commonjs/utils/NativeUpdatedValue.js +3 -0
- package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/commonjs/web/NativeAudioBrowser.js +124 -301
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/commonjs/web/SimpleRouter.test.js +174 -0
- package/lib/commonjs/web/SimpleRouter.test.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/Player.js +26 -90
- package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js +293 -0
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/RepeatMode.js +1 -1
- package/lib/commonjs/web/TrackPlayer/RepeatMode.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/SleepTimer.js +3 -34
- package/lib/commonjs/web/TrackPlayer/SleepTimer.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/index.js +5 -13
- package/lib/commonjs/web/TrackPlayer/index.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +50 -176
- package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
- package/lib/commonjs/web/browser/NavigationErrorManager.js +1 -3
- package/lib/commonjs/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/commonjs/web/browser/SearchManager.js +9 -11
- package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
- package/lib/commonjs/web/http/HttpClient.js +23 -4
- package/lib/commonjs/web/http/HttpClient.js.map +1 -1
- package/lib/commonjs/web/http/RequestConfigBuilder.js +58 -107
- package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/commonjs/web/player/NowPlayingManager.js +5 -6
- package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
- package/lib/commonjs/web/player/OptionsManager.js +17 -9
- package/lib/commonjs/web/player/OptionsManager.js.map +1 -1
- package/lib/module/AudioBrowser.js +1 -4
- package/lib/module/AudioBrowser.js.map +1 -1
- package/lib/module/features/browser.js +156 -53
- package/lib/module/features/browser.js.map +1 -1
- package/lib/module/features/equalizer.js +1 -1
- package/lib/module/features/errors.js +5 -37
- package/lib/module/features/errors.js.map +1 -1
- package/lib/module/features/favorites.js +1 -1
- package/lib/module/features/index.js +0 -2
- package/lib/module/features/index.js.map +1 -1
- package/lib/module/features/metadata.js +3 -3
- package/lib/module/features/metadata.js.map +1 -1
- package/lib/module/features/network.js +1 -1
- package/lib/module/features/nowPlaying.js +1 -34
- package/lib/module/features/nowPlaying.js.map +1 -1
- package/lib/module/features/output.js +19 -32
- package/lib/module/features/output.js.map +1 -1
- package/lib/module/features/playback/controls.js +0 -8
- package/lib/module/features/playback/controls.js.map +1 -1
- package/lib/module/features/playback/index.js +0 -1
- package/lib/module/features/playback/index.js.map +1 -1
- package/lib/module/features/playback/playWhenReady.js +1 -1
- package/lib/module/features/playback/playing.js +1 -1
- package/lib/module/features/playback/progress.js +13 -29
- package/lib/module/features/playback/progress.js.map +1 -1
- package/lib/module/features/playback/state.js +1 -1
- package/lib/module/features/playback/volume.js +2 -2
- package/lib/module/features/player/options.js +29 -79
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/player/setup.js +3 -256
- package/lib/module/features/player/setup.js.map +1 -1
- package/lib/module/features/queue/activeTrack.js +1 -1
- package/lib/module/features/queue/queue.js +5 -12
- package/lib/module/features/queue/queue.js.map +1 -1
- package/lib/module/features/queue/repeatMode.js +1 -1
- package/lib/module/features/queue/shuffle.js +1 -1
- package/lib/module/features/rating.js +2 -0
- package/lib/module/features/rating.js.map +1 -0
- package/lib/module/features/remoteControls.js +103 -13
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/features/sleepTimer.js +5 -10
- package/lib/module/features/sleepTimer.js.map +1 -1
- package/lib/module/native.js +0 -5
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.web.js +1 -4
- package/lib/module/native.web.js.map +1 -1
- package/lib/module/types/player.js +2 -0
- package/lib/module/types/player.js.map +1 -0
- package/lib/module/utils/LazyNativeEmitter.js +8 -8
- package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/module/utils/NativeUpdatedValue.js +3 -0
- package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/module/web/NativeAudioBrowser.js +125 -302
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/web/SimpleRouter.test.js +174 -0
- package/lib/module/web/SimpleRouter.test.js.map +1 -0
- package/lib/module/web/TrackPlayer/Player.js +26 -90
- package/lib/module/web/TrackPlayer/Player.js.map +1 -1
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js +288 -0
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js.map +1 -0
- package/lib/module/web/TrackPlayer/RepeatMode.js +1 -1
- package/lib/module/web/TrackPlayer/RepeatMode.js.map +1 -1
- package/lib/module/web/TrackPlayer/SleepTimer.js +3 -34
- package/lib/module/web/TrackPlayer/SleepTimer.js.map +1 -1
- package/lib/module/web/TrackPlayer/index.js +1 -2
- package/lib/module/web/TrackPlayer/index.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +50 -176
- package/lib/module/web/browser/BrowserManager.js.map +1 -1
- package/lib/module/web/browser/NavigationErrorManager.js +1 -3
- package/lib/module/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/module/web/browser/SearchManager.js +9 -11
- package/lib/module/web/browser/SearchManager.js.map +1 -1
- package/lib/module/web/http/HttpClient.js +23 -4
- package/lib/module/web/http/HttpClient.js.map +1 -1
- package/lib/module/web/http/RequestConfigBuilder.js +58 -107
- package/lib/module/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/module/web/player/NowPlayingManager.js +5 -7
- package/lib/module/web/player/NowPlayingManager.js.map +1 -1
- package/lib/module/web/player/OptionsManager.js +17 -9
- package/lib/module/web/player/OptionsManager.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.d.ts +1 -40
- package/lib/typescript/src/features/browser.d.ts.map +1 -1
- package/lib/typescript/src/features/equalizer.d.ts +1 -1
- package/lib/typescript/src/features/errors.d.ts +6 -61
- package/lib/typescript/src/features/errors.d.ts.map +1 -1
- package/lib/typescript/src/features/favorites.d.ts +1 -1
- package/lib/typescript/src/features/index.d.ts +0 -2
- package/lib/typescript/src/features/index.d.ts.map +1 -1
- package/lib/typescript/src/features/metadata.d.ts +7 -9
- package/lib/typescript/src/features/metadata.d.ts.map +1 -1
- package/lib/typescript/src/features/network.d.ts +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts +1 -28
- package/lib/typescript/src/features/nowPlaying.d.ts.map +1 -1
- package/lib/typescript/src/features/output.d.ts +18 -28
- package/lib/typescript/src/features/output.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/controls.d.ts +0 -5
- package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/index.d.ts +0 -1
- package/lib/typescript/src/features/playback/index.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/playWhenReady.d.ts +1 -1
- package/lib/typescript/src/features/playback/playing.d.ts +1 -1
- package/lib/typescript/src/features/playback/progress.d.ts +1 -4
- package/lib/typescript/src/features/playback/progress.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/state.d.ts +1 -1
- package/lib/typescript/src/features/playback/volume.d.ts +2 -2
- package/lib/typescript/src/features/player/options.d.ts +127 -176
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/player/setup.d.ts +167 -213
- package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/activeTrack.d.ts +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts +4 -11
- package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/repeatMode.d.ts +1 -1
- package/lib/typescript/src/features/queue/shuffle.d.ts +1 -1
- package/lib/typescript/src/features/rating.d.ts +14 -0
- package/lib/typescript/src/features/rating.d.ts.map +1 -0
- package/lib/typescript/src/features/remoteControls.d.ts +35 -23
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/features/sleepTimer.d.ts +4 -19
- package/lib/typescript/src/features/sleepTimer.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/native.d.ts +2 -1
- package/lib/typescript/src/native.d.ts.map +1 -1
- package/lib/typescript/src/native.web.d.ts +3 -0
- package/lib/typescript/src/native.web.d.ts.map +1 -0
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts +225 -17
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-native.d.ts +3 -9
- package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-nodes.d.ts +13 -145
- package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
- package/lib/typescript/src/types/browser.d.ts +85 -349
- package/lib/typescript/src/types/browser.d.ts.map +1 -1
- package/lib/typescript/src/types/player.d.ts +64 -0
- package/lib/typescript/src/types/player.d.ts.map +1 -0
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +6 -8
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +2 -0
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
- package/lib/typescript/src/utils/resolveAssetSource.d.ts.map +1 -1
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts +188 -0
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -0
- package/lib/typescript/src/web/SimpleRouter.d.ts +40 -0
- package/lib/typescript/src/web/SimpleRouter.d.ts.map +1 -0
- package/lib/typescript/src/web/SimpleRouter.test.d.ts +2 -0
- package/lib/typescript/src/web/SimpleRouter.test.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/Event.d.ts +11 -0
- package/lib/typescript/src/web/TrackPlayer/Event.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts +59 -0
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts +39 -0
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts +6 -0
- package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts +4 -0
- package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts +34 -0
- package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/State.d.ts +13 -0
- package/lib/typescript/src/web/TrackPlayer/State.d.ts.map +1 -0
- package/lib/typescript/src/web/TrackPlayer/index.d.ts +5 -0
- package/lib/typescript/src/web/TrackPlayer/index.d.ts.map +1 -0
- package/lib/typescript/src/web/browser/BrowserManager.d.ts +154 -0
- package/lib/typescript/src/web/browser/BrowserManager.d.ts.map +1 -0
- package/lib/typescript/src/web/browser/FavoriteManager.d.ts +42 -0
- package/lib/typescript/src/web/browser/FavoriteManager.d.ts.map +1 -0
- package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts +40 -0
- package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts.map +1 -0
- package/lib/typescript/src/web/browser/SearchManager.d.ts +22 -0
- package/lib/typescript/src/web/browser/SearchManager.d.ts.map +1 -0
- package/lib/typescript/src/web/http/HttpClient.d.ts +25 -0
- package/lib/typescript/src/web/http/HttpClient.d.ts.map +1 -0
- package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts +98 -0
- package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts.map +1 -0
- package/lib/typescript/src/web/player/NowPlayingManager.d.ts +34 -0
- package/lib/typescript/src/web/player/NowPlayingManager.d.ts.map +1 -0
- package/lib/typescript/src/web/player/OptionsManager.d.ts +32 -0
- package/lib/typescript/src/web/player/OptionsManager.d.ts.map +1 -0
- package/lib/typescript/src/web/util/BrowserPathHelper.d.ts +69 -0
- package/lib/typescript/src/web/util/BrowserPathHelper.d.ts.map +1 -0
- package/lib/typescript/src/web/util/shuffle.d.ts +8 -0
- package/lib/typescript/src/web/util/shuffle.d.ts.map +1 -0
- package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +2 -4
- package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +10 -24
- package/nitrogen/generated/android/c++/JAndroidAudioContentType.hpp +6 -6
- package/nitrogen/generated/android/c++/JAndroidOptions.hpp +20 -10
- package/nitrogen/generated/android/c++/JAndroidUpdateOptions.hpp +86 -0
- package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +1 -33
- package/nitrogen/generated/android/c++/JBrowseResult.hpp +0 -5
- package/nitrogen/generated/android/c++/JCarPlayNowPlayingButton.hpp +3 -3
- package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JFormattedNavigationError.hpp +2 -3
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +0 -6
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.hpp +147 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +0 -8
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JFunc_void_IosOutput.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_NowPlayingMetadata.hpp +10 -0
- package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +9 -14
- package/nitrogen/generated/android/c++/JFunc_void_Playback.hpp +0 -2
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackErrorEvent.hpp +0 -2
- package/nitrogen/generated/android/c++/JFunc_void_RemoteSetRatingEvent.hpp +87 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +10 -10
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +0 -6
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +0 -6
- package/nitrogen/generated/android/c++/JHeartRating.hpp +57 -0
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +221 -245
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +22 -25
- package/nitrogen/generated/android/c++/JImageRowItem.hpp +3 -33
- package/nitrogen/generated/android/c++/{JOutput.hpp → JIosOutput.hpp} +15 -15
- package/nitrogen/generated/android/c++/JIosOutputType.hpp +85 -0
- package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +1 -33
- package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +28 -61
- package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +9 -20
- package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +24 -21
- package/nitrogen/generated/android/c++/JNavigationErrorType.hpp +0 -6
- package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +20 -10
- package/nitrogen/generated/android/c++/{JRemoteButton.hpp → JNotificationButton.hpp} +20 -20
- package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +94 -0
- package/nitrogen/generated/android/c++/JNowPlayingMetadata.hpp +17 -3
- package/nitrogen/generated/android/c++/JNowPlayingUpdate.hpp +3 -7
- package/nitrogen/generated/android/c++/JOptions.hpp +14 -19
- package/nitrogen/generated/android/c++/{JNativeAndroidSetupOptions.hpp → JPartialAndroidSetupPlayerOptions.hpp} +10 -10
- package/nitrogen/generated/android/c++/{JNativeIOSSetupOptions.hpp → JPartialIOSSetupPlayerOptions.hpp} +10 -10
- package/nitrogen/generated/android/c++/JPartialSetupPlayerOptions.hpp +96 -0
- package/nitrogen/generated/android/c++/JPercentageRating.hpp +57 -0
- package/nitrogen/generated/android/c++/JPlayback.hpp +0 -2
- package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JPlaybackError.hpp +3 -18
- package/nitrogen/generated/android/c++/JPlaybackErrorEvent.hpp +0 -2
- package/nitrogen/generated/android/c++/JPlaybackState.hpp +3 -3
- package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
- package/nitrogen/generated/android/c++/JRatingType.hpp +73 -0
- package/nitrogen/generated/android/c++/JRemoteSetRatingEvent.hpp +66 -0
- package/nitrogen/generated/android/c++/JResolvedTrack.hpp +5 -23
- package/nitrogen/generated/android/c++/JRetryConfig.hpp +7 -11
- package/nitrogen/generated/android/c++/JSearchMode.hpp +9 -27
- package/nitrogen/generated/android/c++/JSearchParams.hpp +3 -9
- package/nitrogen/generated/android/c++/JStarRating.hpp +57 -0
- package/nitrogen/generated/android/c++/{JGateEvent.hpp → JThumbsRating.hpp} +15 -16
- package/nitrogen/generated/android/c++/JTrack.hpp +5 -23
- package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +0 -6
- package/nitrogen/generated/android/c++/JTransformableRequestConfig.hpp +1 -14
- package/nitrogen/generated/android/c++/JUpdateOptions.hpp +105 -0
- package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.cpp +34 -0
- package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.hpp +105 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +75 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioContentType.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +9 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidUpdateOptions.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkRequestConfig.kt +4 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayNowPlayingButton.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormattedNavigationError.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.kt → Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.kt} +12 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_void_Output.kt → Func_void_IosOutput.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_void_GateEvent.kt → Func_void_RemoteSetRatingEvent.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_bool.kt +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Gate.kt → HeartRating.kt} +6 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +109 -103
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +3 -24
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Output.kt → IosOutput.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutputType.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaRequestConfig.kt +4 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +6 -18
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeRouteEntry.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeUpdateOptions.kt +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorType.kt +1 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +9 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → NotificationButton.kt} +8 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingMetadata.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingUpdate.kt +3 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Options.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{NativeAndroidSetupOptions.kt → PartialAndroidSetupPlayerOptions.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{NativeIOSSetupOptions.kt → PartialIOSSetupPlayerOptions.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialSetupPlayerOptions.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{GateDecision.kt → PercentageRating.kt} +6 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackError.kt +3 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackState.kt +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{GateReason.kt → RatingType.kt} +10 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{ArtworkVariants.kt → RemoteSetRatingEvent.kt} +6 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +3 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RetryConfig.kt +4 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchMode.kt +6 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchParams.kt +3 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{GateEvent.kt → StarRating.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → ThumbsRating.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +3 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TransformableRequestConfig.kt +4 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/UpdateOptions.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.kt +77 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Variant_NullType_RemoteButtonLayout.kt → Variant_NullType_NotificationButtonLayout.kt} +9 -9
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +28 -139
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +489 -1125
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +45 -66
- package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +118 -176
- package/nitrogen/generated/ios/swift/AndroidAudioContentType.swift +8 -8
- package/nitrogen/generated/ios/swift/AndroidOptions.swift +22 -12
- package/nitrogen/generated/ios/swift/AndroidUpdateOptions.swift +119 -0
- package/nitrogen/generated/ios/swift/ArtworkRequestConfig.swift +1 -95
- package/nitrogen/generated/ios/swift/CarPlayNowPlayingButton.swift +4 -4
- package/nitrogen/generated/ios/swift/FormattedNavigationError.swift +4 -17
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.swift +68 -0
- package/nitrogen/generated/ios/swift/{Func_void_Output.swift → Func_void_IosOutput.swift} +10 -10
- package/nitrogen/generated/ios/swift/{Func_void_GateEvent.swift → Func_void_RemoteSetRatingEvent.swift} +10 -10
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
- package/nitrogen/generated/ios/swift/{Func_void_std__shared_ptr_Promise_GateDecision__.swift → Func_void_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError___.swift} +17 -17
- package/nitrogen/generated/ios/swift/HeartRating.swift +29 -0
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +14 -20
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +197 -230
- package/nitrogen/generated/ios/swift/ImageRowItem.swift +2 -121
- package/nitrogen/generated/ios/swift/{Output.swift → IosOutput.swift} +7 -7
- package/nitrogen/generated/ios/swift/IosOutputType.swift +76 -0
- package/nitrogen/generated/ios/swift/MediaRequestConfig.swift +1 -107
- package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +22 -161
- package/nitrogen/generated/ios/swift/NativeRouteEntry.swift +19 -19
- package/nitrogen/generated/ios/swift/NativeUpdateOptions.swift +25 -12
- package/nitrogen/generated/ios/swift/NavigationErrorType.swift +0 -8
- package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +41 -12
- package/nitrogen/generated/ios/swift/{RemoteButton.swift → NotificationButton.swift} +10 -10
- package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +92 -0
- package/nitrogen/generated/ios/swift/NowPlayingMetadata.swift +48 -1
- package/nitrogen/generated/ios/swift/NowPlayingUpdate.swift +1 -19
- package/nitrogen/generated/ios/swift/Options.swift +4 -10
- package/nitrogen/generated/ios/swift/{NativeAndroidSetupOptions.swift → PartialAndroidSetupPlayerOptions.swift} +5 -5
- package/nitrogen/generated/ios/swift/{NativeIOSSetupOptions.swift → PartialIOSSetupPlayerOptions.swift} +5 -5
- package/nitrogen/generated/ios/swift/PartialSetupPlayerOptions.swift +101 -0
- package/nitrogen/generated/ios/swift/PercentageRating.swift +29 -0
- package/nitrogen/generated/ios/swift/PlaybackError.swift +2 -43
- package/nitrogen/generated/ios/swift/PlaybackState.swift +4 -4
- package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
- package/nitrogen/generated/ios/swift/RatingType.swift +60 -0
- package/nitrogen/generated/ios/swift/RemoteSetRatingEvent.swift +58 -0
- package/nitrogen/generated/ios/swift/ResolvedTrack.swift +8 -74
- package/nitrogen/generated/ios/swift/RetryConfig.swift +4 -35
- package/nitrogen/generated/ios/swift/SearchMode.swift +12 -36
- package/nitrogen/generated/ios/swift/SearchParams.swift +2 -7
- package/nitrogen/generated/ios/swift/StarRating.swift +29 -0
- package/nitrogen/generated/ios/swift/ThumbsRating.swift +29 -0
- package/nitrogen/generated/ios/swift/Track.swift +8 -74
- package/nitrogen/generated/ios/swift/TransformableRequestConfig.swift +1 -60
- package/nitrogen/generated/ios/swift/UpdateOptions.swift +143 -0
- package/nitrogen/generated/ios/swift/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.swift +20 -0
- package/nitrogen/generated/ios/swift/{Variant_NullType_RemoteButtonLayout.swift → Variant_NullType_NotificationButtonLayout.swift} +3 -3
- package/nitrogen/generated/shared/c++/AndroidAudioContentType.hpp +10 -10
- package/nitrogen/generated/shared/c++/AndroidOptions.hpp +19 -8
- package/nitrogen/generated/shared/c++/AndroidUpdateOptions.hpp +109 -0
- package/nitrogen/generated/shared/c++/ArtworkRequestConfig.hpp +2 -10
- package/nitrogen/generated/shared/c++/CarPlayNowPlayingButton.hpp +6 -6
- package/nitrogen/generated/shared/c++/EqualizerSettings.hpp +2 -0
- package/nitrogen/generated/shared/c++/FormattedNavigationError.hpp +5 -6
- package/nitrogen/generated/shared/c++/{GateEvent.hpp → HeartRating.hpp} +17 -18
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +18 -21
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +35 -44
- package/nitrogen/generated/shared/c++/ImageRowItem.hpp +2 -33
- package/nitrogen/generated/shared/c++/{Output.hpp → IosOutput.hpp} +18 -18
- package/nitrogen/generated/shared/c++/IosOutputType.hpp +112 -0
- package/nitrogen/generated/shared/c++/MediaRequestConfig.hpp +2 -10
- package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +15 -31
- package/nitrogen/generated/shared/c++/NativeRouteEntry.hpp +5 -5
- package/nitrogen/generated/shared/c++/NativeUpdateOptions.hpp +7 -9
- package/nitrogen/generated/shared/c++/NavigationErrorType.hpp +0 -8
- package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +19 -8
- package/nitrogen/generated/shared/c++/{RemoteButton.hpp → NotificationButton.hpp} +25 -25
- package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +102 -0
- package/nitrogen/generated/shared/c++/NowPlayingMetadata.hpp +19 -3
- package/nitrogen/generated/shared/c++/NowPlayingUpdate.hpp +2 -6
- package/nitrogen/generated/shared/c++/Options.hpp +8 -8
- package/nitrogen/generated/shared/c++/{NativeAndroidSetupOptions.hpp → PartialAndroidSetupPlayerOptions.hpp} +11 -11
- package/nitrogen/generated/shared/c++/{NativeIOSSetupOptions.hpp → PartialIOSSetupPlayerOptions.hpp} +11 -11
- package/nitrogen/generated/shared/c++/PartialSetupPlayerOptions.hpp +104 -0
- package/nitrogen/generated/shared/c++/{FavoriteConfig.hpp → PercentageRating.hpp} +17 -18
- package/nitrogen/generated/shared/c++/PlaybackError.hpp +3 -18
- package/nitrogen/generated/shared/c++/PlaybackState.hpp +9 -9
- package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
- package/nitrogen/generated/shared/c++/RatingType.hpp +96 -0
- package/nitrogen/generated/shared/c++/RemoteSetRatingEvent.hpp +94 -0
- package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +5 -24
- package/nitrogen/generated/shared/c++/RetryConfig.hpp +6 -10
- package/nitrogen/generated/shared/c++/SearchMode.hpp +15 -39
- package/nitrogen/generated/shared/c++/SearchParams.hpp +2 -9
- package/nitrogen/generated/shared/c++/{Gate.hpp → StarRating.hpp} +16 -21
- package/nitrogen/generated/shared/c++/{GateDecision.hpp → ThumbsRating.hpp} +17 -23
- package/nitrogen/generated/shared/c++/Track.hpp +5 -24
- package/nitrogen/generated/shared/c++/TransformableRequestConfig.hpp +2 -6
- package/nitrogen/generated/shared/c++/UpdateOptions.hpp +111 -0
- package/package.json +5 -12
- package/src/AudioBrowser.ts +1 -4
- package/src/features/browser.ts +201 -58
- package/src/features/equalizer.ts +1 -1
- package/src/features/errors.ts +5 -71
- package/src/features/favorites.ts +1 -1
- package/src/features/index.ts +0 -2
- package/src/features/metadata.ts +15 -9
- package/src/features/network.ts +1 -1
- package/src/features/nowPlaying.ts +1 -37
- package/src/features/output.ts +22 -35
- package/src/features/playback/controls.ts +0 -8
- package/src/features/playback/index.ts +0 -1
- package/src/features/playback/playWhenReady.ts +1 -1
- package/src/features/playback/playing.ts +1 -1
- package/src/features/playback/progress.ts +13 -32
- package/src/features/playback/state.ts +1 -1
- package/src/features/playback/volume.ts +2 -2
- package/src/features/player/options.ts +110 -217
- package/src/features/player/setup.ts +175 -397
- package/src/features/queue/activeTrack.ts +1 -1
- package/src/features/queue/queue.ts +6 -17
- package/src/features/queue/repeatMode.ts +1 -1
- package/src/features/queue/shuffle.ts +1 -1
- package/src/features/rating.ts +17 -0
- package/src/features/remoteControls.ts +115 -13
- package/src/features/sleepTimer.ts +5 -24
- package/src/native.ts +0 -5
- package/src/native.web.ts +1 -4
- package/src/specs/audio-browser.nitro.ts +41 -131
- package/src/types/browser-native.ts +6 -19
- package/src/types/browser-nodes.ts +13 -160
- package/src/types/browser.ts +89 -377
- package/src/types/player.ts +69 -0
- package/src/utils/LazyNativeEmitter.ts +8 -9
- package/src/utils/NativeUpdatedValue.ts +2 -0
- package/src/web/NativeAudioBrowser.ts +158 -365
- package/src/web/TrackPlayer/Player.ts +39 -113
- package/src/web/TrackPlayer/PlaylistPlayer.ts +346 -0
- package/src/web/TrackPlayer/RepeatMode.ts +1 -1
- package/src/web/TrackPlayer/SleepTimer.ts +3 -38
- package/src/web/TrackPlayer/index.ts +1 -2
- package/src/web/browser/BrowserManager.ts +62 -231
- package/src/web/browser/NavigationErrorManager.ts +1 -3
- package/src/web/browser/SearchManager.ts +15 -11
- package/src/web/http/HttpClient.ts +35 -5
- package/src/web/http/RequestConfigBuilder.ts +63 -120
- package/src/web/player/NowPlayingManager.ts +5 -6
- package/src/web/player/OptionsManager.ts +18 -12
- package/android/src/main/java/com/audiobrowser/browser/ArtworkResolutionRegistry.kt +0 -37
- package/android/src/main/java/com/audiobrowser/browser/BrowseArtworkRegistry.kt +0 -34
- package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +0 -299
- package/android/src/main/java/com/audiobrowser/browser/JsonArtwork.kt +0 -79
- package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +0 -42
- package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +0 -35
- package/android/src/main/java/com/audiobrowser/player/CapabilityControls.kt +0 -172
- package/android/src/main/java/com/audiobrowser/player/EqualizerController.kt +0 -153
- package/android/src/main/java/com/audiobrowser/player/InterceptingPlayer.kt +0 -141
- package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +0 -347
- package/android/src/main/java/com/audiobrowser/player/PlaybackErrorClassifier.kt +0 -129
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateMachine.kt +0 -85
- package/android/src/main/java/com/audiobrowser/player/PlaybackTimer.kt +0 -56
- package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +0 -20
- package/android/src/main/java/com/audiobrowser/player/PlayerEngineFactory.kt +0 -130
- package/android/src/main/java/com/audiobrowser/player/SleepTimerManager.kt +0 -80
- package/android/src/main/java/com/audiobrowser/player/StuckRecoveryPolicy.kt +0 -50
- package/android/src/main/java/com/audiobrowser/player/VolumeFader.kt +0 -81
- package/android/src/main/java/com/audiobrowser/tls/AiaCertChaser.kt +0 -141
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +0 -37
- package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +0 -41
- package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +0 -209
- package/android/src/main/java/com/audiobrowser/util/ArtworkContentProvider.kt +0 -161
- package/android/src/main/java/com/audiobrowser/util/ArtworkUris.kt +0 -28
- package/android/src/main/java/com/audiobrowser/util/ArtworkVariant.kt +0 -24
- package/android/src/main/java/com/audiobrowser/util/CoilArtworkLoader.kt +0 -49
- package/android/src/main/java/com/audiobrowser/util/CoilArtworkLoaderHolder.kt +0 -36
- package/android/src/main/java/com/audiobrowser/util/OutputMonitor.kt +0 -211
- package/android/src/main/java/com/audiobrowser/util/OutputSwitcher.kt +0 -58
- package/android/src/main/java/com/audiobrowser/util/RatingFavorites.kt +0 -14
- package/android/src/test/java/com/audiobrowser/TestFixtures.kt +0 -165
- package/android/src/test/java/com/audiobrowser/browser/ArtworkResolutionRegistryTest.kt +0 -46
- package/android/src/test/java/com/audiobrowser/browser/BrowseArtworkRegistryTest.kt +0 -39
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerBuildApiRequestTest.kt +0 -114
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +0 -141
- package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +0 -177
- package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +0 -55
- package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +0 -94
- package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +0 -203
- package/android/src/test/java/com/audiobrowser/player/DynamicLoadControlTest.kt +0 -56
- package/android/src/test/java/com/audiobrowser/player/EqualizerControllerTest.kt +0 -216
- package/android/src/test/java/com/audiobrowser/player/MediaSessionSlotMappingTest.kt +0 -45
- package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +0 -442
- package/android/src/test/java/com/audiobrowser/player/PlaybackErrorClassifierTest.kt +0 -190
- package/android/src/test/java/com/audiobrowser/player/PlaybackStateMachineTest.kt +0 -198
- package/android/src/test/java/com/audiobrowser/player/PlaybackTimerTest.kt +0 -137
- package/android/src/test/java/com/audiobrowser/player/PlayerEngineFactoryTest.kt +0 -36
- package/android/src/test/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicyTest.kt +0 -268
- package/android/src/test/java/com/audiobrowser/player/SessionErrorMaskTest.kt +0 -68
- package/android/src/test/java/com/audiobrowser/player/StuckRecoveryPolicyTest.kt +0 -40
- package/android/src/test/java/com/audiobrowser/player/TransformingDataSourceTest.kt +0 -193
- package/android/src/test/java/com/audiobrowser/tls/AiaCertChaserTest.kt +0 -107
- package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +0 -73
- package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherTest.kt +0 -75
- package/android/src/test/java/com/audiobrowser/tls/CertFixtures.kt +0 -18
- package/android/src/test/java/com/audiobrowser/util/ArtworkContentProviderTest.kt +0 -163
- package/android/src/test/java/com/audiobrowser/util/ArtworkUrisTest.kt +0 -34
- package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +0 -28
- package/android/src/test/java/com/audiobrowser/util/CoilArtworkLoaderHolderTest.kt +0 -53
- package/android/src/test/java/com/audiobrowser/util/CoilArtworkLoaderTest.kt +0 -58
- package/android/src/test/java/com/audiobrowser/util/FakeImageLoader.kt +0 -57
- package/android/src/test/java/com/audiobrowser/util/PlayingStateFactoryTest.kt +0 -40
- package/android/src/test/java/com/audiobrowser/util/RatingFavoritesTest.kt +0 -34
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryBrowseTest.kt +0 -50
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +0 -63
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryRatingTest.kt +0 -35
- package/android/src/test/resources/certs/isrg-root-x1.pem +0 -31
- package/android/src/test/resources/certs/letsencrypt-r13.der +0 -0
- package/android/src/test/resources/certs/letsencrypt-r13.pem +0 -29
- package/android/src/test/resources/certs/stationplaylist-leaf.pem +0 -34
- package/ios/Browser/MediaResolveComposer.swift +0 -114
- package/ios/Browser/SearchDrillIn.swift +0 -44
- package/ios/Browser/SectionScope.swift +0 -35
- package/ios/Browser/TabBarEntries.swift +0 -15
- package/ios/CarPlay/CPInterfaceController+Safe.swift +0 -126
- package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
- package/ios/CarPlay/RNABMediaAddHandler.swift +0 -75
- package/ios/CarPlay/RNABMediaAffinityHandler.swift +0 -69
- package/ios/Extension/PlayerCapabilities+Favorite.swift +0 -20
- package/ios/Extension/RequestConfig+Copying.swift +0 -31
- package/ios/Extension/Variant+Artwork.swift +0 -49
- package/ios/NowPlayingInfo/SilentAudioPrimer.swift +0 -73
- package/ios/Player/AirPlayStallJudgement.swift +0 -25
- package/ios/Player/EndOfTrackJudgement.swift +0 -32
- package/ios/Player/MediaIntentCriteria.swift +0 -139
- package/ios/Player/PersistedPlaybackState.swift +0 -11
- package/ios/Player/PlaybackStateStore.swift +0 -27
- package/ios/Player/PlaybackTimer.swift +0 -61
- package/ios/Player/VolumeFader.swift +0 -77
- package/ios/RemoteCommand/RemoteCommandCallbacks.swift +0 -47
- package/ios/Tests/AirPlayStallJudgementTests.swift +0 -52
- package/ios/Tests/EndOfTrackJudgementTests.swift +0 -35
- package/ios/Tests/JsonModelsTests.swift +0 -58
- package/ios/Tests/MediaIntentCriteriaTests.swift +0 -170
- package/ios/Tests/MediaLoaderAssetOptionsTests.swift +0 -46
- package/ios/Tests/MediaResolveTests.swift +0 -126
- package/ios/Tests/OnceValueTests.swift +0 -79
- package/ios/Tests/PlaybackStateStoreTests.swift +0 -48
- package/ios/Tests/PlaybackTimerTests.swift +0 -55
- package/ios/Tests/PlayingStateManagerTests.swift +0 -57
- package/ios/Tests/RemoteCommandControllerTests.swift +0 -156
- package/ios/Tests/RemoteCommandTests.swift +0 -67
- package/ios/Tests/RetryManagerTests.swift +0 -89
- package/ios/Tests/SearchDrillInTests.swift +0 -63
- package/ios/Tests/SectionScopeTests.swift +0 -82
- package/ios/Tests/SleepTimerManagerTests.swift +0 -107
- package/ios/Tests/Support/ManualSleepTimerScheduler.swift +0 -47
- package/ios/Tests/TabBarEntriesTests.swift +0 -71
- package/lib/commonjs/features/browser-config.js +0 -227
- package/lib/commonjs/features/browser-config.js.map +0 -1
- package/lib/commonjs/features/carConnection.js +0 -42
- package/lib/commonjs/features/carConnection.js.map +0 -1
- package/lib/commonjs/features/gate.js +0 -149
- package/lib/commonjs/features/gate.js.map +0 -1
- package/lib/commonjs/features/playback/trackPlaybackTime.js +0 -86
- package/lib/commonjs/features/playback/trackPlaybackTime.js.map +0 -1
- package/lib/commonjs/features/player/validateOptions.js +0 -24
- package/lib/commonjs/features/player/validateOptions.js.map +0 -1
- package/lib/commonjs/utils/artwork.js +0 -31
- package/lib/commonjs/utils/artwork.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js +0 -71
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/PlaybackTimer.js +0 -34
- package/lib/commonjs/web/TrackPlayer/PlaybackTimer.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/PlayingStateFactory.js +0 -21
- package/lib/commonjs/web/TrackPlayer/PlayingStateFactory.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/QueueManager.js +0 -273
- package/lib/commonjs/web/TrackPlayer/QueueManager.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js +0 -158
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/VolumeFader.js +0 -75
- package/lib/commonjs/web/TrackPlayer/VolumeFader.js.map +0 -1
- package/lib/commonjs/web/browser/assertBrowsePageShape.js +0 -22
- package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +0 -1
- package/lib/commonjs/web/browser/classifyTrackNavigation.js +0 -41
- package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +0 -1
- package/lib/commonjs/web/browser/parseSearchResponse.js +0 -20
- package/lib/commonjs/web/browser/parseSearchResponse.js.map +0 -1
- package/lib/commonjs/web/playbackErrorKind.js +0 -57
- package/lib/commonjs/web/playbackErrorKind.js.map +0 -1
- package/lib/commonjs/web/player/MediaSessionManager.js +0 -121
- package/lib/commonjs/web/player/MediaSessionManager.js.map +0 -1
- package/lib/commonjs/web/player/RemoteCommandController.js +0 -96
- package/lib/commonjs/web/player/RemoteCommandController.js.map +0 -1
- package/lib/module/features/browser-config.js +0 -221
- package/lib/module/features/browser-config.js.map +0 -1
- package/lib/module/features/carConnection.js +0 -37
- package/lib/module/features/carConnection.js.map +0 -1
- package/lib/module/features/gate.js +0 -144
- package/lib/module/features/gate.js.map +0 -1
- package/lib/module/features/playback/trackPlaybackTime.js +0 -83
- package/lib/module/features/playback/trackPlaybackTime.js.map +0 -1
- package/lib/module/features/player/validateOptions.js +0 -20
- package/lib/module/features/player/validateOptions.js.map +0 -1
- package/lib/module/utils/artwork.js +0 -26
- package/lib/module/utils/artwork.js.map +0 -1
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js +0 -67
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js.map +0 -1
- package/lib/module/web/TrackPlayer/PlaybackTimer.js +0 -29
- package/lib/module/web/TrackPlayer/PlaybackTimer.js.map +0 -1
- package/lib/module/web/TrackPlayer/PlayingStateFactory.js +0 -17
- package/lib/module/web/TrackPlayer/PlayingStateFactory.js.map +0 -1
- package/lib/module/web/TrackPlayer/QueueManager.js +0 -269
- package/lib/module/web/TrackPlayer/QueueManager.js.map +0 -1
- package/lib/module/web/TrackPlayer/QueuePlayer.js +0 -154
- package/lib/module/web/TrackPlayer/QueuePlayer.js.map +0 -1
- package/lib/module/web/TrackPlayer/VolumeFader.js +0 -70
- package/lib/module/web/TrackPlayer/VolumeFader.js.map +0 -1
- package/lib/module/web/browser/assertBrowsePageShape.js +0 -18
- package/lib/module/web/browser/assertBrowsePageShape.js.map +0 -1
- package/lib/module/web/browser/classifyTrackNavigation.js +0 -38
- package/lib/module/web/browser/classifyTrackNavigation.js.map +0 -1
- package/lib/module/web/browser/parseSearchResponse.js +0 -16
- package/lib/module/web/browser/parseSearchResponse.js.map +0 -1
- package/lib/module/web/playbackErrorKind.js +0 -52
- package/lib/module/web/playbackErrorKind.js.map +0 -1
- package/lib/module/web/player/MediaSessionManager.js +0 -116
- package/lib/module/web/player/MediaSessionManager.js.map +0 -1
- package/lib/module/web/player/RemoteCommandController.js +0 -92
- package/lib/module/web/player/RemoteCommandController.js.map +0 -1
- package/lib/typescript/src/features/browser-config.d.ts +0 -12
- package/lib/typescript/src/features/browser-config.d.ts.map +0 -1
- package/lib/typescript/src/features/carConnection.d.ts +0 -20
- package/lib/typescript/src/features/carConnection.d.ts.map +0 -1
- package/lib/typescript/src/features/gate.d.ts +0 -78
- package/lib/typescript/src/features/gate.d.ts.map +0 -1
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +0 -34
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +0 -1
- package/lib/typescript/src/features/player/validateOptions.d.ts +0 -2
- package/lib/typescript/src/features/player/validateOptions.d.ts.map +0 -1
- package/lib/typescript/src/utils/artwork.d.ts +0 -19
- package/lib/typescript/src/utils/artwork.d.ts.map +0 -1
- package/nitrogen/generated/android/c++/JArtworkVariants.hpp +0 -61
- package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
- package/nitrogen/generated/android/c++/JFavoritesMatchMode.hpp +0 -58
- package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +0 -100
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.hpp +0 -112
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.hpp +0 -121
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +0 -123
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +0 -133
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +0 -121
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.hpp +0 -139
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.hpp +0 -134
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +0 -131
- package/nitrogen/generated/android/c++/JFunc_void_GateEvent.hpp +0 -79
- package/nitrogen/generated/android/c++/JFunc_void_Output.hpp +0 -80
- package/nitrogen/generated/android/c++/JGate.hpp +0 -62
- package/nitrogen/generated/android/c++/JGateDecision.hpp +0 -64
- package/nitrogen/generated/android/c++/JGateReason.hpp +0 -58
- package/nitrogen/generated/android/c++/JIOSOptions.hpp +0 -95
- package/nitrogen/generated/android/c++/JMediaReference.hpp +0 -58
- package/nitrogen/generated/android/c++/JNativeGateRequest.hpp +0 -74
- package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +0 -182
- package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +0 -96
- package/nitrogen/generated/android/c++/JOutputType.hpp +0 -82
- package/nitrogen/generated/android/c++/JPlaybackErrorKind.hpp +0 -76
- package/nitrogen/generated/android/c++/JRemoteButtonLayout.hpp +0 -86
- package/nitrogen/generated/android/c++/JStallReason.hpp +0 -58
- package/nitrogen/generated/android/c++/JTrackRequest.hpp +0 -93
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
- package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.hpp +0 -75
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.cpp +0 -41
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +0 -121
- package/nitrogen/generated/android/c++/JVariant_String_ArtworkVariants.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_String_ArtworkVariants.hpp +0 -70
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormatNowPlayingParams.kt +0 -50
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___Track.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_std__string____Track.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.kt +0 -80
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +0 -44
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaReference.kt +0 -23
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeGateRequest.kt +0 -44
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeSetupPlayerOptions.kt +0 -66
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +0 -44
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/OutputType.kt +0 -31
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackErrorKind.kt +0 -29
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteButton.kt +0 -26
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteButtonLayout.kt +0 -44
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StallReason.kt +0 -23
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackRequest.kt +0 -44
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_ResolvedTrack_BrowseError_Promise_BrowseResult_.kt +0 -65
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_String_ArtworkVariants.kt +0 -53
- package/nitrogen/generated/ios/swift/ArtworkVariants.swift +0 -34
- package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
- package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
- package/nitrogen/generated/ios/swift/FormatNowPlayingParams.swift +0 -67
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.swift +0 -54
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.swift +0 -69
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___Track.swift +0 -54
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.swift +0 -60
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_std__string____Track.swift +0 -60
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.swift +0 -61
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.swift +0 -61
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.swift +0 -77
- package/nitrogen/generated/ios/swift/Func_void_GateDecision.swift +0 -46
- package/nitrogen/generated/ios/swift/Func_void_TransformableRequestConfig.swift +0 -46
- package/nitrogen/generated/ios/swift/Func_void_std__optional_NowPlayingUpdate_.swift +0 -46
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +0 -53
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_TransformableRequestConfig__.swift +0 -66
- package/nitrogen/generated/ios/swift/Func_void_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError____.swift +0 -81
- package/nitrogen/generated/ios/swift/Gate.swift +0 -47
- package/nitrogen/generated/ios/swift/GateDecision.swift +0 -40
- package/nitrogen/generated/ios/swift/GateEvent.swift +0 -29
- package/nitrogen/generated/ios/swift/GateReason.swift +0 -40
- package/nitrogen/generated/ios/swift/IOSOptions.swift +0 -51
- package/nitrogen/generated/ios/swift/MediaReference.swift +0 -40
- package/nitrogen/generated/ios/swift/NativeGateRequest.swift +0 -58
- package/nitrogen/generated/ios/swift/NativeSetupPlayerOptions.swift +0 -206
- package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +0 -90
- package/nitrogen/generated/ios/swift/OutputType.swift +0 -72
- package/nitrogen/generated/ios/swift/PlaybackErrorKind.swift +0 -64
- package/nitrogen/generated/ios/swift/RemoteButtonLayout.swift +0 -57
- package/nitrogen/generated/ios/swift/StallReason.swift +0 -40
- package/nitrogen/generated/ios/swift/TrackRequest.swift +0 -106
- package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
- package/nitrogen/generated/ios/swift/Variant_ResolvedTrack_BrowseError_Promise_BrowseResult_.swift +0 -19
- package/nitrogen/generated/ios/swift/Variant_String_ArtworkVariants.swift +0 -18
- package/nitrogen/generated/shared/c++/ArtworkVariants.hpp +0 -87
- package/nitrogen/generated/shared/c++/FavoritesMatchMode.hpp +0 -76
- package/nitrogen/generated/shared/c++/FormatNowPlayingParams.hpp +0 -110
- package/nitrogen/generated/shared/c++/GateReason.hpp +0 -76
- package/nitrogen/generated/shared/c++/IOSOptions.hpp +0 -91
- package/nitrogen/generated/shared/c++/MediaReference.hpp +0 -76
- package/nitrogen/generated/shared/c++/NativeGateRequest.hpp +0 -97
- package/nitrogen/generated/shared/c++/NativeSetupPlayerOptions.hpp +0 -138
- package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +0 -92
- package/nitrogen/generated/shared/c++/OutputType.hpp +0 -108
- package/nitrogen/generated/shared/c++/PlaybackErrorKind.hpp +0 -100
- package/nitrogen/generated/shared/c++/RemoteButtonLayout.hpp +0 -94
- package/nitrogen/generated/shared/c++/StallReason.hpp +0 -76
- package/nitrogen/generated/shared/c++/TrackRequest.hpp +0 -93
- package/src/codegen-no-config-variant.test.ts +0 -70
- package/src/features/browser-config.test.ts +0 -110
- package/src/features/browser-config.ts +0 -293
- package/src/features/browser.test.ts +0 -19
- package/src/features/carConnection.ts +0 -36
- package/src/features/gate.test.ts +0 -72
- package/src/features/gate.ts +0 -155
- package/src/features/playback/trackPlaybackTime.test.ts +0 -80
- package/src/features/playback/trackPlaybackTime.ts +0 -101
- package/src/features/player/options.test.ts +0 -38
- package/src/features/player/setup.test.ts +0 -125
- package/src/features/player/validateOptions.ts +0 -22
- package/src/features/queue/queue.test.ts +0 -36
- package/src/public-surface.test.ts +0 -116
- package/src/utils/artwork.ts +0 -30
- package/src/web/NativeAudioBrowser.playWhenReady.test.ts +0 -301
- package/src/web/TrackPlayer/PlaybackStateMachine.test.ts +0 -139
- package/src/web/TrackPlayer/PlaybackStateMachine.ts +0 -82
- package/src/web/TrackPlayer/PlaybackTimer.test.ts +0 -67
- package/src/web/TrackPlayer/PlaybackTimer.ts +0 -33
- package/src/web/TrackPlayer/Player.dispatch.test.ts +0 -229
- package/src/web/TrackPlayer/Player.load.test.ts +0 -86
- package/src/web/TrackPlayer/PlayingStateFactory.test.ts +0 -51
- package/src/web/TrackPlayer/PlayingStateFactory.ts +0 -24
- package/src/web/TrackPlayer/QueueManager.test.ts +0 -289
- package/src/web/TrackPlayer/QueueManager.ts +0 -302
- package/src/web/TrackPlayer/QueuePlayer.ts +0 -188
- package/src/web/TrackPlayer/VolumeFader.ts +0 -74
- package/src/web/browser/__tests__/layer-resolver.test.ts +0 -69
- package/src/web/browser/assertBrowsePageShape.test.ts +0 -27
- package/src/web/browser/assertBrowsePageShape.ts +0 -27
- package/src/web/browser/classifyTrackNavigation.test.ts +0 -41
- package/src/web/browser/classifyTrackNavigation.ts +0 -35
- package/src/web/browser/parseSearchResponse.test.ts +0 -25
- package/src/web/browser/parseSearchResponse.ts +0 -15
- package/src/web/http/RequestConfigBuilder.test.ts +0 -59
- package/src/web/playbackErrorKind.test.ts +0 -55
- package/src/web/playbackErrorKind.ts +0 -56
- package/src/web/player/MediaSessionManager.test.ts +0 -220
- package/src/web/player/MediaSessionManager.ts +0 -151
- package/src/web/player/NowPlayingManager.test.ts +0 -46
- package/src/web/player/RemoteCommandController.test.ts +0 -171
- package/src/web/player/RemoteCommandController.ts +0 -166
|
@@ -2,7 +2,7 @@ import Foundation
|
|
|
2
2
|
import os.log
|
|
3
3
|
|
|
4
4
|
#if canImport(NitroModules)
|
|
5
|
-
|
|
5
|
+
import NitroModules
|
|
6
6
|
#endif
|
|
7
7
|
|
|
8
8
|
/// Owns the playback state machine, side effect dispatch, observer context guards,
|
|
@@ -22,64 +22,26 @@ class PlaybackCoordinator {
|
|
|
22
22
|
let sleepTimerManager: any SleepTimerHandling
|
|
23
23
|
let loadSeekCoordinator = LoadSeekCoordinator()
|
|
24
24
|
|
|
25
|
-
lazy var volumeFader = VolumeFader(
|
|
26
|
-
getVolume: { [weak self] in self?.effectHandler?.volume ?? 1 },
|
|
27
|
-
setVolume: { [weak self] level in self?.effectHandler?.volume = level },
|
|
28
|
-
)
|
|
29
|
-
|
|
30
25
|
lazy var playingStateManager: PlayingStateManager = PlayingStateManager { [weak self] state in
|
|
31
26
|
self?.callbacks?.playerDidChangePlayingState(state)
|
|
32
27
|
}
|
|
33
28
|
|
|
34
|
-
private lazy var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
private lazy var intervalTimer = PlaybackTimer(
|
|
48
|
-
isActive: { $0 == .playing },
|
|
49
|
-
) { [weak self] in
|
|
50
|
-
self?.callbacks?.playerDidFirePlaybackInterval()
|
|
51
|
-
}
|
|
29
|
+
private lazy var progressUpdateManager: PlaybackProgressUpdateManager =
|
|
30
|
+
PlaybackProgressUpdateManager { [weak self] in
|
|
31
|
+
guard let self, currentIndex >= 0, let effectHandler else { return }
|
|
32
|
+
let progressEvent = PlaybackProgressUpdatedEvent(
|
|
33
|
+
track: Double(currentIndex),
|
|
34
|
+
position: effectHandler.currentTime,
|
|
35
|
+
duration: effectHandler.duration,
|
|
36
|
+
buffered: effectHandler.bufferedPosition,
|
|
37
|
+
)
|
|
38
|
+
callbacks?.playerDidUpdateProgress(progressEvent)
|
|
39
|
+
}
|
|
52
40
|
|
|
53
41
|
// MARK: - State
|
|
54
42
|
|
|
55
43
|
private(set) var state: PlaybackState = .none
|
|
56
44
|
var playbackError: TrackPlayerError.PlaybackError?
|
|
57
|
-
/// True while `playbackError` is advisory — the retry loop is still working
|
|
58
|
-
/// on it and the state stays non-terminal. Terminal errors (state == .error)
|
|
59
|
-
/// always carry false.
|
|
60
|
-
private(set) var isRetryingError = false
|
|
61
|
-
|
|
62
|
-
/// The JS-facing form of `playbackError`, carrying the retrying flag.
|
|
63
|
-
func nitroPlaybackError() -> PlaybackError? {
|
|
64
|
-
playbackError?.toNitroError(retrying: isRetryingError)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/// Whether playback should resume when the current audio-session interruption
|
|
68
|
-
/// ends — set to the play intent captured at interruption start, so we only
|
|
69
|
-
/// auto-resume if we were actually playing when interrupted.
|
|
70
|
-
private var shouldResumeAfterInterruption = false
|
|
71
|
-
|
|
72
|
-
/// Seconds of continuous audible playback after which the retry budget is
|
|
73
|
-
/// refilled — proof the stream actually delivered audio, not a brief blip
|
|
74
|
-
/// (mirrors Android's HEALTHY_PLAYBACK_MS). Without the refill a long-lived
|
|
75
|
-
/// stream permanently loses retry after its first recovered error, because
|
|
76
|
-
/// the window/attempt counters otherwise reset only on track change.
|
|
77
|
-
/// Overridable in tests.
|
|
78
|
-
var healthyPlaybackDuration: TimeInterval = 20
|
|
79
|
-
|
|
80
|
-
/// The pending refill. Readable so tests can await the window instead of
|
|
81
|
-
/// sleeping past it; only this type arms and cancels it.
|
|
82
|
-
private(set) var healthyPlaybackTask: Task<Void, Never>?
|
|
83
45
|
|
|
84
46
|
/// Playback rate (1.0 = normal speed).
|
|
85
47
|
var rate: Float = 1.0
|
|
@@ -101,8 +63,6 @@ class PlaybackCoordinator {
|
|
|
101
63
|
var nextTracks: [Track] { queue.nextTracks }
|
|
102
64
|
var previousTracks: [Track] { queue.previousTracks }
|
|
103
65
|
var isLastInPlaybackOrder: Bool { queue.isLastInPlaybackOrder }
|
|
104
|
-
var canNext: Bool { queue.canNext }
|
|
105
|
-
var canPrevious: Bool { queue.canPrevious }
|
|
106
66
|
|
|
107
67
|
/// The repeat mode for the queue player.
|
|
108
68
|
var repeatMode: RepeatMode {
|
|
@@ -111,9 +71,8 @@ class PlaybackCoordinator {
|
|
|
111
71
|
guard queue.repeatMode != newValue else { return }
|
|
112
72
|
queue.repeatMode = newValue
|
|
113
73
|
effectHandler?.updateRemoteRepeatMode(newValue)
|
|
114
|
-
pushSkipAvailability() // repeat-all wrap changes next/previous availability
|
|
115
74
|
callbacks?.playerDidChangeRepeatMode(
|
|
116
|
-
RepeatModeChangedEvent(repeatMode: newValue)
|
|
75
|
+
RepeatModeChangedEvent(repeatMode: newValue)
|
|
117
76
|
)
|
|
118
77
|
}
|
|
119
78
|
}
|
|
@@ -125,30 +84,15 @@ class PlaybackCoordinator {
|
|
|
125
84
|
guard queue.shuffleEnabled != newValue else { return }
|
|
126
85
|
queue.shuffleEnabled = newValue
|
|
127
86
|
effectHandler?.updateRemoteShuffleMode(newValue)
|
|
128
|
-
pushSkipAvailability() // shuffle reorders playback → boundary changes
|
|
129
87
|
callbacks?.playerDidChangeShuffleEnabled(newValue)
|
|
130
88
|
}
|
|
131
89
|
}
|
|
132
90
|
|
|
133
|
-
/// Pushes current next/previous availability to the remote command center so
|
|
134
|
-
/// CarPlay / lock-screen grey out the buttons when there's nowhere to skip.
|
|
135
|
-
private func pushSkipAvailability() {
|
|
136
|
-
effectHandler?.updateSkipAvailability(canNext: queue.canNext, canPrevious: queue.canPrevious)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
91
|
// MARK: - playWhenReady
|
|
140
92
|
|
|
141
93
|
var playWhenReady: Bool = false {
|
|
142
94
|
didSet {
|
|
143
|
-
|
|
144
|
-
// user's subsequent pause must not be overridden by auto-resume.
|
|
145
|
-
// (handleInterruptionEnded consumes its flag before its own play().)
|
|
146
|
-
if playWhenReady { shouldResumeAfterInterruption = false }
|
|
147
|
-
|
|
148
|
-
// Terminal states need a reload, not a bare play(): the item is gone
|
|
149
|
-
// (.stopped/.error) or parked at its end (.ended), where startPlayback()
|
|
150
|
-
// is a silent no-op. Only .error resumes from the last position.
|
|
151
|
-
if playWhenReady == true, state == .error || state == .stopped || state == .ended {
|
|
95
|
+
if playWhenReady == true, state == .error || state == .stopped {
|
|
152
96
|
effectHandler?.reloadTrack(startFromCurrentTime: state == .error)
|
|
153
97
|
}
|
|
154
98
|
if state != .loading {
|
|
@@ -160,22 +104,8 @@ class PlaybackCoordinator {
|
|
|
160
104
|
}
|
|
161
105
|
|
|
162
106
|
if oldValue != playWhenReady {
|
|
163
|
-
// An explicit pause during the sleep fade is the timer's goal arriving
|
|
164
|
-
// early: clear the timer (restores the pre-fade volume via onFadeCancel).
|
|
165
|
-
if !playWhenReady, volumeFader.isActive {
|
|
166
|
-
sleepTimerManager.clear()
|
|
167
|
-
}
|
|
168
107
|
callbacks?.playerDidChangePlayWhenReady(playWhenReady)
|
|
169
108
|
playingStateManager.update(playWhenReady: playWhenReady, state: state)
|
|
170
|
-
// Reflect play/pause intent immediately — even while the new item is
|
|
171
|
-
// still loading. Auto-publishing doesn't set the explicit now-playing
|
|
172
|
-
// playback state, and the player's timeControlStatus can't report
|
|
173
|
-
// "playing" yet during loading. Guarded to active states so a play()
|
|
174
|
-
// from a terminal state doesn't leave a phantom "playing" button.
|
|
175
|
-
if playbackActive {
|
|
176
|
-
effectHandler?.updateNowPlayingState(playWhenReady: playWhenReady)
|
|
177
|
-
}
|
|
178
|
-
evaluateSessionRelease()
|
|
179
109
|
}
|
|
180
110
|
}
|
|
181
111
|
}
|
|
@@ -198,42 +128,13 @@ class PlaybackCoordinator {
|
|
|
198
128
|
|
|
199
129
|
// Configure sleep timer
|
|
200
130
|
sleepTimerManager.onComplete = { [weak self] in
|
|
201
|
-
|
|
202
|
-
self.volumeFader.resolve { self.pause() }
|
|
203
|
-
}
|
|
204
|
-
sleepTimerManager.onFadeStart = { [weak self] duration in
|
|
205
|
-
self?.volumeFader.start(duration: duration)
|
|
206
|
-
}
|
|
207
|
-
sleepTimerManager.onFadeCancel = { [weak self] in
|
|
208
|
-
self?.volumeFader.cancel(restoringVolume: true)
|
|
131
|
+
self?.pause()
|
|
209
132
|
}
|
|
210
133
|
|
|
211
134
|
// Wire error handler to state machine
|
|
212
135
|
errorHandler.onError = { [weak self] error in
|
|
213
136
|
self?.transition(.errorOccurred(error))
|
|
214
137
|
}
|
|
215
|
-
errorHandler.onRetryingError = { [weak self] error in
|
|
216
|
-
self?.reportRetryingError(error)
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/// Surfaces a failure the retry loop is still working on: attached to the
|
|
221
|
-
/// current (non-terminal) state so UIs can show the cause over the spinner.
|
|
222
|
-
/// Not a state transition — the state machine never sees it — and not a
|
|
223
|
-
/// `playerDidError`, which stays reserved for terminal errors.
|
|
224
|
-
private func reportRetryingError(_ error: TrackPlayerError.PlaybackError) {
|
|
225
|
-
// Only attach while the failure is what the listener is looking at (matches
|
|
226
|
-
// Android). During .playing buffered audio is still audibly fine — the
|
|
227
|
-
// advisory would replace the song line over working sound — and a
|
|
228
|
-
// terminal/stopped state must not regain an advisory error.
|
|
229
|
-
guard state == .loading || state == .buffering || state == .paused else { return }
|
|
230
|
-
// Each failed attempt re-reports; identical repeats add nothing.
|
|
231
|
-
if isRetryingError, playbackError == error { return }
|
|
232
|
-
playbackError = error
|
|
233
|
-
isRetryingError = true
|
|
234
|
-
callbacks?.playerDidChangePlayback(
|
|
235
|
-
Playback(state: state, error: nitroPlaybackError()),
|
|
236
|
-
)
|
|
237
138
|
}
|
|
238
139
|
|
|
239
140
|
// MARK: - Playback State Machine
|
|
@@ -243,14 +144,13 @@ class PlaybackCoordinator {
|
|
|
243
144
|
|
|
244
145
|
// Allow error-to-error transitions to update the error and emit callbacks,
|
|
245
146
|
// even though the state enum value doesn't change.
|
|
246
|
-
if newState == state, case
|
|
147
|
+
if newState == state, case .errorOccurred(let error) = event {
|
|
247
148
|
playbackError = error
|
|
248
|
-
isRetryingError = false
|
|
249
149
|
callbacks?.playerDidChangePlayback(
|
|
250
|
-
Playback(state: state, error:
|
|
150
|
+
Playback(state: state, error: playbackError?.toNitroError()),
|
|
251
151
|
)
|
|
252
152
|
callbacks?.playerDidError(
|
|
253
|
-
PlaybackErrorEvent(error:
|
|
153
|
+
PlaybackErrorEvent(error: playbackError?.toNitroError()),
|
|
254
154
|
)
|
|
255
155
|
return
|
|
256
156
|
}
|
|
@@ -267,36 +167,8 @@ class PlaybackCoordinator {
|
|
|
267
167
|
if old == .error, new != .error {
|
|
268
168
|
playbackError = nil
|
|
269
169
|
}
|
|
270
|
-
|
|
271
|
-
// that proves recovery (.ready/.playing — data flowed) or abandons the
|
|
272
|
-
// attempt (.stopped/.none/.ended) clears it. Runs before emitStateChange,
|
|
273
|
-
// so the emitted Playback is already clean.
|
|
274
|
-
if isRetryingError, new != .loading, new != .buffering, new != .paused {
|
|
275
|
-
playbackError = nil
|
|
276
|
-
isRetryingError = false
|
|
277
|
-
}
|
|
278
|
-
if case let .errorOccurred(error) = event {
|
|
170
|
+
if case .errorOccurred(let error) = event {
|
|
279
171
|
playbackError = error
|
|
280
|
-
isRetryingError = false
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Retry-budget refill: sustained audible playback proves the stream
|
|
284
|
-
// recovered, so the next error starts a fresh retry window. Leaving
|
|
285
|
-
// .playing before the threshold cancels the pending refill.
|
|
286
|
-
if new == .playing {
|
|
287
|
-
healthyPlaybackTask?.cancel()
|
|
288
|
-
healthyPlaybackTask = Task { [weak self] in
|
|
289
|
-
guard let self else { return }
|
|
290
|
-
try? await Task.sleep(nanoseconds: UInt64(healthyPlaybackDuration * 1_000_000_000))
|
|
291
|
-
guard !Task.isCancelled else { return }
|
|
292
|
-
// Refill only between episodes: resetRetry() cancels a pending retry,
|
|
293
|
-
// which would silently kill an in-flight reconnect.
|
|
294
|
-
guard errorHandler.pendingRetryTask == nil else { return }
|
|
295
|
-
errorHandler.resetRetry()
|
|
296
|
-
}
|
|
297
|
-
} else if old == .playing {
|
|
298
|
-
healthyPlaybackTask?.cancel()
|
|
299
|
-
healthyPlaybackTask = nil
|
|
300
172
|
}
|
|
301
173
|
|
|
302
174
|
// State-specific effects
|
|
@@ -306,46 +178,40 @@ class PlaybackCoordinator {
|
|
|
306
178
|
if playWhenReady { effectHandler?.startPlayback() }
|
|
307
179
|
case .loading:
|
|
308
180
|
effectHandler?.setTimePitchingAlgorithmForCurrentItem()
|
|
309
|
-
case .ended:
|
|
310
|
-
// A natural end exhausts the play intent — nothing is left to play.
|
|
311
|
-
// Keeping playWhenReady true would invert the play/pause toggle, hold
|
|
312
|
-
// the audio session forever (release is intent-gated), and arm
|
|
313
|
-
// interruption auto-resume into silence. The setter also requests the
|
|
314
|
-
// session release.
|
|
315
|
-
playWhenReady = false
|
|
316
181
|
default: break
|
|
317
182
|
}
|
|
318
183
|
|
|
319
|
-
//
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
184
|
+
// Now Playing updates for active states
|
|
185
|
+
if let effectHandler {
|
|
186
|
+
switch new {
|
|
187
|
+
case .ready, .loading, .playing, .paused:
|
|
188
|
+
effectHandler.updateNowPlayingValues(
|
|
189
|
+
duration: effectHandler.duration, rate: rate, currentTime: effectHandler.currentTime
|
|
190
|
+
)
|
|
191
|
+
effectHandler.updateNowPlayingState(playWhenReady: playWhenReady)
|
|
192
|
+
default: break
|
|
193
|
+
}
|
|
194
|
+
}
|
|
325
195
|
|
|
326
|
-
|
|
327
|
-
intervalTimer.onPlaybackStateChanged(new)
|
|
196
|
+
progressUpdateManager.onPlaybackStateChanged(new)
|
|
328
197
|
playingStateManager.update(playWhenReady: playWhenReady, state: new)
|
|
329
198
|
}
|
|
330
199
|
|
|
331
200
|
private func emitStateChange(old: PlaybackState, new: PlaybackState) {
|
|
332
201
|
// Playback state change — always emitted
|
|
333
202
|
callbacks?.playerDidChangePlayback(
|
|
334
|
-
Playback(state: new, error:
|
|
203
|
+
Playback(state: new, error: playbackError?.toNitroError()),
|
|
335
204
|
)
|
|
336
205
|
|
|
337
206
|
// Error callback — emitted when entering or leaving error state
|
|
338
207
|
if new == .error || (old == .error && new != .error) {
|
|
339
208
|
callbacks?.playerDidError(
|
|
340
|
-
PlaybackErrorEvent(error:
|
|
209
|
+
PlaybackErrorEvent(error: playbackError?.toNitroError()),
|
|
341
210
|
)
|
|
342
211
|
}
|
|
343
212
|
|
|
344
|
-
// Queue ended — when playback ends on the last track
|
|
345
|
-
|
|
346
|
-
// pause at the track boundary (e.g. the end-of-track sleep timer) must not
|
|
347
|
-
// read as "playlist over".
|
|
348
|
-
if new == .ended, isLastInPlaybackOrder, repeatMode == .off, let effectHandler {
|
|
213
|
+
// Queue ended — when playback ends on the last track
|
|
214
|
+
if new == .ended, isLastInPlaybackOrder, let effectHandler {
|
|
349
215
|
callbacks?.playerDidEndQueue(
|
|
350
216
|
PlaybackQueueEndedEvent(track: Double(currentIndex), position: effectHandler.currentTime),
|
|
351
217
|
)
|
|
@@ -385,13 +251,13 @@ class PlaybackCoordinator {
|
|
|
385
251
|
}
|
|
386
252
|
}
|
|
387
253
|
|
|
388
|
-
func avPlayerStatusDidFail(error: Error
|
|
389
|
-
errorHandler.handleError(error, context: .playback
|
|
254
|
+
func avPlayerStatusDidFail(error: Error?) {
|
|
255
|
+
errorHandler.handleError(error, context: .playback)
|
|
390
256
|
}
|
|
391
257
|
|
|
392
|
-
func avItemStatusDidChange(_ status: PlayerItemStatus, error: Error
|
|
258
|
+
func avItemStatusDidChange(_ status: PlayerItemStatus, error: Error?) {
|
|
393
259
|
if status == .failed {
|
|
394
|
-
errorHandler.handleError(error, context: .playback
|
|
260
|
+
errorHandler.handleError(error, context: .playback)
|
|
395
261
|
}
|
|
396
262
|
}
|
|
397
263
|
|
|
@@ -426,75 +292,12 @@ class PlaybackCoordinator {
|
|
|
426
292
|
}
|
|
427
293
|
|
|
428
294
|
func stop() {
|
|
429
|
-
// Cancel before the intent drop: a surviving retry would surface .error
|
|
430
|
-
// over the stop, and a pending task blocks the session release below.
|
|
431
|
-
errorHandler.cancelPendingRetry()
|
|
432
|
-
// A stop is terminal — interruption-end must not resume over it.
|
|
433
|
-
shouldResumeAfterInterruption = false
|
|
434
295
|
transition(.stopped)
|
|
435
296
|
playWhenReady = false
|
|
436
297
|
}
|
|
437
298
|
|
|
438
|
-
// MARK: - Audio Session Interruptions
|
|
439
|
-
|
|
440
|
-
/// The active output route disappeared (headphones unplugged, Bluetooth
|
|
441
|
-
/// speaker off). A deliberate output loss: drop the intent and any pending
|
|
442
|
-
/// interruption auto-resume, so a call ending can't blast the built-in
|
|
443
|
-
/// speaker.
|
|
444
|
-
func handleRouteDisconnected() {
|
|
445
|
-
shouldResumeAfterInterruption = false
|
|
446
|
-
pause()
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/// An audio-session interruption began (a phone call, or another app such as
|
|
450
|
-
/// Music/Spotify taking over playback). iOS has already paused our AVPlayer,
|
|
451
|
-
/// but that pause arrives as a `timeControlStatus` change that's swallowed
|
|
452
|
-
/// while `playWhenReady` is still true — so the state would otherwise stay
|
|
453
|
-
/// `.playing` and any UI driven by it stays stuck. Drop the play intent and
|
|
454
|
-
/// force the paused state, independent of notification delivery order.
|
|
455
|
-
func handleInterruptionBegan() {
|
|
456
|
-
// OR: a nested interruption's second .began sees the already-paused
|
|
457
|
-
// intent and must not wipe the flag the first one captured.
|
|
458
|
-
shouldResumeAfterInterruption = shouldResumeAfterInterruption || playWhenReady
|
|
459
|
-
pause()
|
|
460
|
-
if playbackActive, state != .loading {
|
|
461
|
-
transition(.avPlayerPaused(hasAsset: effectHandler?.hasLoadedAsset ?? false))
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/// Whether an interruption-end will resume playback — the intent captured at
|
|
466
|
-
/// interruption start. Lets the host gate side effects that must precede the
|
|
467
|
-
/// resume (audio-session reactivation) on whether one will actually happen.
|
|
468
|
-
var willResumeAfterInterruption: Bool { shouldResumeAfterInterruption }
|
|
469
|
-
|
|
470
|
-
/// An audio-session interruption ended. Resume only if we were playing when it
|
|
471
|
-
/// began and the system indicates resumption is appropriate (`shouldResume`).
|
|
472
|
-
func handleInterruptionEnded(shouldResume: Bool) {
|
|
473
|
-
guard shouldResumeAfterInterruption else { return }
|
|
474
|
-
shouldResumeAfterInterruption = false
|
|
475
|
-
if shouldResume {
|
|
476
|
-
play()
|
|
477
|
-
} else {
|
|
478
|
-
// Interruption ended and we're staying paused: the session can be released now.
|
|
479
|
-
evaluateSessionRelease()
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
/// Requests an audio-session release when playback is deliberately stopped: play intent is off,
|
|
484
|
-
/// it isn't an interruption-driven pause (those resume — `shouldResumeAfterInterruption` is set
|
|
485
|
-
/// before the interruption's `pause()`, so this skips it), and no retry is pending (a live-stream
|
|
486
|
-
/// reconnect keeps `playWhenReady` true and must keep the session). The host debounces and cancels
|
|
487
|
-
/// on the next activation, so a quick pause→resume never actually releases.
|
|
488
|
-
private func evaluateSessionRelease() {
|
|
489
|
-
guard !playWhenReady,
|
|
490
|
-
!shouldResumeAfterInterruption,
|
|
491
|
-
errorHandler.pendingRetryTask == nil
|
|
492
|
-
else { return }
|
|
493
|
-
callbacks?.playerShouldReleaseSession()
|
|
494
|
-
}
|
|
495
|
-
|
|
496
299
|
func getPlayback() -> Playback {
|
|
497
|
-
Playback(state: state, error:
|
|
300
|
+
Playback(state: state, error: playbackError?.toNitroError())
|
|
498
301
|
}
|
|
499
302
|
|
|
500
303
|
func getRepeatMode() -> RepeatMode {
|
|
@@ -536,13 +339,7 @@ class PlaybackCoordinator {
|
|
|
536
339
|
queue.replace(index, track)
|
|
537
340
|
}
|
|
538
341
|
|
|
539
|
-
func setQueue(
|
|
540
|
-
_ newTracks: [Track],
|
|
541
|
-
initialIndex: Int = 0,
|
|
542
|
-
startPositionMs: Double? = nil,
|
|
543
|
-
playWhenReady: Bool? = nil,
|
|
544
|
-
sourcePath: String? = nil,
|
|
545
|
-
) {
|
|
342
|
+
func setQueue(_ newTracks: [Track], initialIndex: Int = 0, playWhenReady: Bool? = nil, sourcePath: String? = nil) {
|
|
546
343
|
guard !newTracks.isEmpty else {
|
|
547
344
|
clear()
|
|
548
345
|
return
|
|
@@ -550,12 +347,6 @@ class PlaybackCoordinator {
|
|
|
550
347
|
handlePlayWhenReady(playWhenReady) {
|
|
551
348
|
queue.setQueue(newTracks, initialIndex: initialIndex, sourcePath: sourcePath)
|
|
552
349
|
handleCurrentTrackChanged()
|
|
553
|
-
// Start position is applied as part of the load: captured as a pending
|
|
554
|
-
// seek that runs once the item is ready, deferring the ready/play
|
|
555
|
-
// transition until it lands (no start-at-0 flash).
|
|
556
|
-
if let ms = startPositionMs, ms > 0 {
|
|
557
|
-
loadSeekCoordinator.capture(position: ms / 1000)
|
|
558
|
-
}
|
|
559
350
|
}
|
|
560
351
|
}
|
|
561
352
|
|
|
@@ -569,31 +360,29 @@ class PlaybackCoordinator {
|
|
|
569
360
|
func add(_ tracks: [Track], at index: Int) throws {
|
|
570
361
|
let changed = try queue.addAt(tracks, at: index)
|
|
571
362
|
if changed { handleCurrentTrackChanged() }
|
|
572
|
-
pushSkipAvailability() // didSet pushed pre-settlement state
|
|
573
363
|
}
|
|
574
364
|
|
|
575
365
|
func next() {
|
|
576
366
|
let result = queue.next()
|
|
577
367
|
switch result {
|
|
578
|
-
case .trackChanged:
|
|
368
|
+
case .trackChanged: handleCurrentTrackChanged()
|
|
579
369
|
case .sameTrackReplay: if playWhenReady { replay() }
|
|
580
|
-
case .noChange:
|
|
370
|
+
case .noChange: break
|
|
581
371
|
}
|
|
582
372
|
}
|
|
583
373
|
|
|
584
374
|
func previous() {
|
|
585
375
|
let result = queue.previous()
|
|
586
376
|
switch result {
|
|
587
|
-
case .trackChanged:
|
|
377
|
+
case .trackChanged: handleCurrentTrackChanged()
|
|
588
378
|
case .sameTrackReplay: if playWhenReady { replay() }
|
|
589
|
-
case .noChange:
|
|
379
|
+
case .noChange: break
|
|
590
380
|
}
|
|
591
381
|
}
|
|
592
382
|
|
|
593
383
|
func remove(_ index: Int) throws {
|
|
594
384
|
let changed = try queue.remove(index)
|
|
595
385
|
if changed { handleCurrentTrackChanged() }
|
|
596
|
-
pushSkipAvailability() // didSet pushed pre-settlement state
|
|
597
386
|
}
|
|
598
387
|
|
|
599
388
|
func skipTo(_ index: Int, playWhenReady: Bool? = nil) throws {
|
|
@@ -610,14 +399,10 @@ class PlaybackCoordinator {
|
|
|
610
399
|
func move(fromIndex: Int, toIndex: Int) throws {
|
|
611
400
|
let changed = try queue.move(fromIndex: fromIndex, toIndex: toIndex)
|
|
612
401
|
if changed { handleCurrentTrackChanged() }
|
|
613
|
-
// tracks.didSet pushed availability mid-mutation, before the pointer and
|
|
614
|
-
// shuffle order settled — re-push the real post-mutation state.
|
|
615
|
-
pushSkipAvailability()
|
|
616
402
|
}
|
|
617
403
|
|
|
618
404
|
func removeUpcomingTracks() {
|
|
619
405
|
queue.removeUpcomingTracks()
|
|
620
|
-
pushSkipAvailability() // didSet pushed pre-settlement state
|
|
621
406
|
}
|
|
622
407
|
|
|
623
408
|
func replay() {
|
|
@@ -637,14 +422,7 @@ class PlaybackCoordinator {
|
|
|
637
422
|
sleepTimerManager.onTrackPlayedToEnd()
|
|
638
423
|
|
|
639
424
|
if repeatMode == .track {
|
|
640
|
-
|
|
641
|
-
// without it, settle in .ended (where play() reloads) instead of
|
|
642
|
-
// replaying past the sleep timer.
|
|
643
|
-
if playWhenReady {
|
|
644
|
-
replay()
|
|
645
|
-
} else {
|
|
646
|
-
transition(.trackEndedNaturally)
|
|
647
|
-
}
|
|
425
|
+
replay()
|
|
648
426
|
} else if repeatMode == .queue || !isLastInPlaybackOrder {
|
|
649
427
|
next()
|
|
650
428
|
} else {
|
|
@@ -662,14 +440,6 @@ class PlaybackCoordinator {
|
|
|
662
440
|
|
|
663
441
|
if playbackError != nil {
|
|
664
442
|
playbackError = nil
|
|
665
|
-
// A retrying error can be cleared while already .loading — the
|
|
666
|
-
// .trackLoading transition below then won't fire, so emit the clear
|
|
667
|
-
// here or the old track's error lingers over the new one's spinner.
|
|
668
|
-
if isRetryingError, state == .loading {
|
|
669
|
-
isRetryingError = false
|
|
670
|
-
callbacks?.playerDidChangePlayback(Playback(state: state, error: nil))
|
|
671
|
-
}
|
|
672
|
-
isRetryingError = false
|
|
673
443
|
}
|
|
674
444
|
|
|
675
445
|
let lastPosition = effectHandler?.currentTime ?? 0
|
|
@@ -685,7 +455,8 @@ class PlaybackCoordinator {
|
|
|
685
455
|
// Ensure playWhenReady is set before loading to preserve playback state
|
|
686
456
|
playWhenReady = shouldContinuePlayback
|
|
687
457
|
|
|
688
|
-
effectHandler?.
|
|
458
|
+
effectHandler?.resetNowPlayingValues()
|
|
459
|
+
effectHandler?.loadNowPlayingMetadata(for: currentTrack, rate: rate)
|
|
689
460
|
|
|
690
461
|
// Validate source URL before handing off to MediaLoader
|
|
691
462
|
guard let src = currentTrack.src else {
|
|
@@ -701,7 +472,7 @@ class PlaybackCoordinator {
|
|
|
701
472
|
logger.debug(" track.url: \(currentTrack.url ?? "nil")")
|
|
702
473
|
logger.debug(" track.src: \(src)")
|
|
703
474
|
|
|
704
|
-
effectHandler?.loadTrack(src: src
|
|
475
|
+
effectHandler?.loadTrack(src: src)
|
|
705
476
|
} else {
|
|
706
477
|
effectHandler?.unloadTrack()
|
|
707
478
|
effectHandler?.clearNowPlaying()
|
|
@@ -717,7 +488,6 @@ class PlaybackCoordinator {
|
|
|
717
488
|
callbacks?.playerDidChangeActiveTrack(eventData)
|
|
718
489
|
lastTrack = currentTrack
|
|
719
490
|
lastIndex = currentIndex
|
|
720
|
-
pushSkipAvailability() // position moved → next/previous availability may change
|
|
721
491
|
}
|
|
722
492
|
|
|
723
493
|
// MARK: - Seek Completion (called by TrackPlayer after AVPlayer seek lands)
|
|
@@ -727,16 +497,13 @@ class PlaybackCoordinator {
|
|
|
727
497
|
logger.debug("[loadSeek] seek landed at \(seconds)s (finished=\(didFinish)) → .ready")
|
|
728
498
|
transition(.loadSeekCompleted)
|
|
729
499
|
}
|
|
500
|
+
effectHandler?.setNowPlayingCurrentTime(seconds: seconds)
|
|
730
501
|
}
|
|
731
502
|
|
|
732
503
|
// MARK: - Progress Updates
|
|
733
504
|
|
|
734
505
|
func setProgressUpdateInterval(_ interval: TimeInterval?) {
|
|
735
|
-
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
func setPlaybackIntervalEnabled(_ enabled: Bool) {
|
|
739
|
-
intervalTimer.setInterval(enabled ? 1 : nil)
|
|
506
|
+
progressUpdateManager.setUpdateInterval(interval)
|
|
740
507
|
}
|
|
741
508
|
}
|
|
742
509
|
|
|
@@ -745,7 +512,6 @@ class PlaybackCoordinator {
|
|
|
745
512
|
extension PlaybackCoordinator: QueueManagerDelegate {
|
|
746
513
|
func queueDidChangeTracks(_ tracks: [Track]) {
|
|
747
514
|
callbacks?.playerDidChangeQueue(tracks)
|
|
748
|
-
pushSkipAvailability() // queue contents changed → boundaries moved
|
|
749
515
|
}
|
|
750
516
|
}
|
|
751
517
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#if canImport(NitroModules)
|
|
2
|
-
|
|
2
|
+
import NitroModules
|
|
3
3
|
#endif
|
|
4
4
|
|
|
5
5
|
/// Subset of TrackPlayerCallbacks containing only the callbacks the coordinator fires.
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
func playerDidChangePlayback(_ playback: Playback)
|
|
10
10
|
func playerDidChangeActiveTrack(_ event: PlaybackActiveTrackChangedEvent)
|
|
11
11
|
func playerDidUpdateProgress(_ event: PlaybackProgressUpdatedEvent)
|
|
12
|
-
func playerDidFirePlaybackInterval()
|
|
13
12
|
func playerDidChangePlayWhenReady(_ playWhenReady: Bool)
|
|
14
13
|
func playerDidChangePlayingState(_ state: PlayingState)
|
|
15
14
|
func playerDidEndQueue(_ event: PlaybackQueueEndedEvent)
|
|
@@ -17,8 +16,4 @@
|
|
|
17
16
|
func playerDidChangeRepeatMode(_ event: RepeatModeChangedEvent)
|
|
18
17
|
func playerDidChangeShuffleEnabled(_ enabled: Bool)
|
|
19
18
|
func playerDidError(_ event: PlaybackErrorEvent)
|
|
20
|
-
/// Playback is deliberately stopped — play intent is off, it isn't an interruption-driven pause
|
|
21
|
-
/// (those resume), and no retry is pending (a live-stream reconnect must keep the session). The
|
|
22
|
-
/// host may release the audio session (debounced) so other apps' audio can resume.
|
|
23
|
-
func playerShouldReleaseSession()
|
|
24
19
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#if canImport(NitroModules)
|
|
2
|
-
|
|
2
|
+
import NitroModules
|
|
3
3
|
#endif
|
|
4
4
|
|
|
5
5
|
/// Protocol through which PlaybackCoordinator triggers AVPlayer-specific operations.
|
|
@@ -10,9 +10,6 @@
|
|
|
10
10
|
func pausePlayback()
|
|
11
11
|
func setTimePitchingAlgorithmForCurrentItem()
|
|
12
12
|
|
|
13
|
-
// Player volume (0-1); ramped by the sleep-timer fade
|
|
14
|
-
var volume: Float { get set }
|
|
15
|
-
|
|
16
13
|
// AVPlayer state queries
|
|
17
14
|
var currentTime: Double { get }
|
|
18
15
|
var duration: Double { get }
|
|
@@ -23,11 +20,8 @@
|
|
|
23
20
|
func clearCurrentItem()
|
|
24
21
|
func stopObservingCurrentItem()
|
|
25
22
|
|
|
26
|
-
// Track loading
|
|
27
|
-
|
|
28
|
-
func loadTrack(src: String, track: Track)
|
|
29
|
-
/// Reloads the current track, re-running the media-URL resolver so a
|
|
30
|
-
/// short-lived/expired URL is refreshed rather than replayed.
|
|
23
|
+
// Track loading
|
|
24
|
+
func loadTrack(src: String)
|
|
31
25
|
func reloadTrack(startFromCurrentTime: Bool)
|
|
32
26
|
func unloadTrack()
|
|
33
27
|
func cancelMediaLoading()
|
|
@@ -36,19 +30,15 @@
|
|
|
36
30
|
func seekToStart()
|
|
37
31
|
func replayCurrentTrack()
|
|
38
32
|
|
|
39
|
-
// Now Playing (behind protocol to avoid MediaPlayer import)
|
|
40
|
-
|
|
41
|
-
// only metadata and the explicit play/pause state flow through here.
|
|
42
|
-
func loadNowPlayingMetadata(for track: Track)
|
|
43
|
-
func clearNowPlaying()
|
|
44
|
-
/// Reflects play/pause intent in the now-playing center. Auto-publishing fills
|
|
45
|
-
/// the info dict but not the explicit playback state CarPlay reads for its button.
|
|
33
|
+
// Now Playing (behind protocol to avoid MediaPlayer import)
|
|
34
|
+
func updateNowPlayingValues(duration: Double, rate: Float, currentTime: Double)
|
|
46
35
|
func updateNowPlayingState(playWhenReady: Bool)
|
|
36
|
+
func loadNowPlayingMetadata(for track: Track, rate: Float)
|
|
37
|
+
func resetNowPlayingValues()
|
|
38
|
+
func clearNowPlaying()
|
|
39
|
+
func setNowPlayingCurrentTime(seconds: Double)
|
|
47
40
|
|
|
48
41
|
// Remote commands (behind protocol to avoid MediaPlayer import)
|
|
49
42
|
func updateRemoteRepeatMode(_ mode: RepeatMode)
|
|
50
43
|
func updateRemoteShuffleMode(_ enabled: Bool)
|
|
51
|
-
/// Greys out the remote/CarPlay next/previous buttons when the queue has no
|
|
52
|
-
/// next/previous track to skip to.
|
|
53
|
-
func updateSkipAvailability(canNext: Bool, canPrevious: Bool)
|
|
54
44
|
}
|