react-native-audio-browser 0.0.1 → 0.1.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1147) hide show
  1. package/AudioBrowser.podspec +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +3 -1
  4. package/android/CMakeLists.txt +32 -0
  5. package/android/build.gradle +214 -0
  6. package/android/fix-prefab.gradle +51 -0
  7. package/android/gradle.properties +6 -0
  8. package/android/src/main/AndroidManifest.xml +36 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  10. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +1197 -0
  11. package/android/src/main/java/com/audiobrowser/AudioBrowserPackage.kt +21 -0
  12. package/android/src/main/java/com/audiobrowser/Callbacks.kt +92 -0
  13. package/android/src/main/java/com/audiobrowser/HeadlessTaskService.kt +59 -0
  14. package/android/src/main/java/com/audiobrowser/Service.kt +334 -0
  15. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +1174 -0
  16. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +134 -0
  17. package/android/src/main/java/com/audiobrowser/browser/RouteMatch.kt +9 -0
  18. package/android/src/main/java/com/audiobrowser/browser/SimpleRouter.kt +154 -0
  19. package/android/src/main/java/com/audiobrowser/browser/TrackLoadHandler.kt +45 -0
  20. package/android/src/main/java/com/audiobrowser/extension/EnumExtensions.kt +5 -0
  21. package/android/src/main/java/com/audiobrowser/extension/NumberExt.kt +13 -0
  22. package/android/src/main/java/com/audiobrowser/http/HttpClient.kt +171 -0
  23. package/android/src/main/java/com/audiobrowser/http/RequestConfigBuilder.kt +251 -0
  24. package/android/src/main/java/com/audiobrowser/model/PlaybackMetadata.kt +80 -0
  25. package/android/src/main/java/com/audiobrowser/model/PlayerSetupOptions.kt +101 -0
  26. package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +125 -0
  27. package/android/src/main/java/com/audiobrowser/player/AutomaticBufferManager.kt +256 -0
  28. package/android/src/main/java/com/audiobrowser/player/DynamicLoadControl.kt +162 -0
  29. package/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +117 -0
  30. package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +596 -0
  31. package/android/src/main/java/com/audiobrowser/player/MediaSessionCommandManager.kt +578 -0
  32. package/android/src/main/java/com/audiobrowser/player/PlaybackProgressUpdateManager.kt +59 -0
  33. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +246 -0
  34. package/android/src/main/java/com/audiobrowser/player/Player.kt +1510 -0
  35. package/android/src/main/java/com/audiobrowser/player/PlayerListener.kt +230 -0
  36. package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +191 -0
  37. package/android/src/main/java/com/audiobrowser/player/SleepTimer.kt +80 -0
  38. package/android/src/main/java/com/audiobrowser/player/TransformingDataSource.kt +147 -0
  39. package/android/src/main/java/com/audiobrowser/util/AndroidAudioContentTypeFactory.kt +17 -0
  40. package/android/src/main/java/com/audiobrowser/util/BatteryOptimizationHelper.kt +95 -0
  41. package/android/src/main/java/com/audiobrowser/util/BatteryWarningStore.kt +38 -0
  42. package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +155 -0
  43. package/android/src/main/java/com/audiobrowser/util/CoilBitmapLoader.kt +390 -0
  44. package/android/src/main/java/com/audiobrowser/util/EqualizerManager.kt +197 -0
  45. package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +75 -0
  46. package/android/src/main/java/com/audiobrowser/util/MetadataAdapter.kt +97 -0
  47. package/android/src/main/java/com/audiobrowser/util/NetworkConnectivityMonitor.kt +121 -0
  48. package/android/src/main/java/com/audiobrowser/util/PlayingStateFactory.kt +25 -0
  49. package/android/src/main/java/com/audiobrowser/util/RatingFactory.kt +72 -0
  50. package/android/src/main/java/com/audiobrowser/util/RepeatModeFactory.kt +22 -0
  51. package/android/src/main/java/com/audiobrowser/util/ResolvedTrackFactory.kt +36 -0
  52. package/android/src/main/java/com/audiobrowser/util/SvgArtworkRenderer.kt +130 -0
  53. package/android/src/main/java/com/audiobrowser/util/SystemVolumeMonitor.kt +50 -0
  54. package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +125 -0
  55. package/android/src/main/res/values/strings.xml +6 -0
  56. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +63 -0
  57. package/android/src/test/java/com/audiobrowser/browser/SimpleBrowserTest.kt +38 -0
  58. package/android/src/test/java/com/audiobrowser/browser/SimpleRouterTest.kt +165 -0
  59. package/android/src/test/java/com/audiobrowser/http/RequestConfigBuilderTest.kt +240 -0
  60. package/android/src/test/java/com/audiobrowser/player/PlaybackProgressUpdateManagerTest.kt +146 -0
  61. package/android/src/test/resources/robolectric.properties +1 -0
  62. package/ios/Bridge.h +8 -0
  63. package/ios/Browser/BrowserConfig.swift +111 -0
  64. package/ios/Browser/BrowserManager+URLResolution.swift +260 -0
  65. package/ios/Browser/BrowserManager.swift +630 -0
  66. package/ios/Browser/BrowserPathHelper.swift +190 -0
  67. package/ios/Browser/JsonModels.swift +202 -0
  68. package/ios/Browser/SimpleRouter.swift +184 -0
  69. package/ios/CarPlay/CarPlayArtworkResolver.swift +107 -0
  70. package/ios/CarPlay/CarPlayController.swift +771 -0
  71. package/ios/CarPlay/CarPlayImageLoader.swift +180 -0
  72. package/ios/CarPlay/CarPlayListItemFactory.swift +209 -0
  73. package/ios/CarPlay/CarPlayNowPlayingManager.swift +302 -0
  74. package/ios/CarPlay/RNABAudioBrowser.h +23 -0
  75. package/ios/CarPlay/RNABAudioBrowser.m +22 -0
  76. package/ios/CarPlay/RNABCarPlaySceneDelegate.h +15 -0
  77. package/ios/CarPlay/RNABCarPlaySceneDelegate.m +59 -0
  78. package/ios/CarPlay/RNABMediaIntentHandler.swift +60 -0
  79. package/ios/CarPlay/Track+CarPlay.swift +63 -0
  80. package/ios/Extension/Capability+RemoteCommand.swift +76 -0
  81. package/ios/Extension/ChapterMetadata+AVFoundation.swift +40 -0
  82. package/ios/Extension/CxxVectorConformances.swift +20 -0
  83. package/ios/Extension/NavigationError+Conversion.swift +49 -0
  84. package/ios/Extension/ResolvedTrack+Copying.swift +59 -0
  85. package/ios/Extension/TimedMetadata+AVFoundation.swift +129 -0
  86. package/ios/Extension/Track+AVPlayer.swift +33 -0
  87. package/ios/Extension/Track+Copying.swift +53 -0
  88. package/ios/Extension/TrackMetadata+AVFoundation.swift +131 -0
  89. package/ios/Http/HttpClient.swift +237 -0
  90. package/ios/HybridAudioBrowser.swift +1292 -0
  91. package/ios/Model/MediaURL.swift +67 -0
  92. package/ios/Model/NitroTypeStubs.swift +228 -0
  93. package/ios/Model/PlayerUpdateOptions.swift +116 -0
  94. package/ios/Model/RemoteCommand.swift +71 -0
  95. package/ios/Model/SourceType.swift +6 -0
  96. package/ios/Model/TrackPlayerError.swift +73 -0
  97. package/ios/NowPlayingInfo/MediaItemProperty.swift +78 -0
  98. package/ios/NowPlayingInfo/NowPlayingInfoCenter.swift +9 -0
  99. package/ios/NowPlayingInfo/NowPlayingInfoController.swift +191 -0
  100. package/ios/NowPlayingInfo/NowPlayingInfoKeyValue.swift +6 -0
  101. package/ios/NowPlayingInfo/NowPlayingInfoProperty.swift +220 -0
  102. package/ios/Observer/PlayerItemNotificationObserver.swift +79 -0
  103. package/ios/Observer/PlayerItemPropertyObserver.swift +110 -0
  104. package/ios/Observer/PlayerStateObserver.swift +50 -0
  105. package/ios/Observer/PlayerTimeObserver.swift +105 -0
  106. package/ios/Option/PitchAlgorithms.swift +17 -0
  107. package/ios/Option/SessionCategories.swift +100 -0
  108. package/ios/Option/TimeEventFrequency.swift +18 -0
  109. package/ios/PlaybackEvent.swift +15 -0
  110. package/ios/Player/LoadSeekCoordinator.swift +84 -0
  111. package/ios/Player/MediaLoader.swift +197 -0
  112. package/ios/Player/MediaLoaderDelegate.swift +11 -0
  113. package/ios/Player/NowPlayingUpdater.swift +106 -0
  114. package/ios/Player/PlaybackCoordinator.swift +520 -0
  115. package/ios/Player/PlaybackCoordinatorCallbacks.swift +19 -0
  116. package/ios/Player/PlaybackEffectHandler.swift +44 -0
  117. package/ios/Player/PlaybackErrorHandler.swift +91 -0
  118. package/ios/Player/PlaybackProgressUpdateManager.swift +68 -0
  119. package/ios/Player/PlaybackStateMachine.swift +31 -0
  120. package/ios/Player/PlayerStatusTypes.swift +9 -0
  121. package/ios/Player/PlayingStateManager.swift +32 -0
  122. package/ios/Player/QueueManager.swift +320 -0
  123. package/ios/Player/RetryManager.swift +246 -0
  124. package/ios/Player/SeekCompletionHandler.swift +3 -0
  125. package/ios/Player/ShuffleOrder.swift +191 -0
  126. package/ios/Player/SleepTimerHandling.swift +7 -0
  127. package/ios/Player/SleepTimerManager.swift +131 -0
  128. package/ios/RemoteCommand/RemoteCommandController.swift +406 -0
  129. package/ios/Support/RNTrackPlayer-Bridging-Header.h +7 -0
  130. package/ios/Tests/BrowserPathHelperTests.swift +110 -0
  131. package/ios/Tests/CarPlayArtworkResolverTests.swift +413 -0
  132. package/ios/Tests/ChapterMetadataAVFoundationTests.swift +88 -0
  133. package/ios/Tests/EmitterTests.swift +122 -0
  134. package/ios/Tests/LoadSeekCoordinatorTests.swift +294 -0
  135. package/ios/Tests/MediaLoaderTests.swift +228 -0
  136. package/ios/Tests/PlaybackCoordinatorTests.swift +486 -0
  137. package/ios/Tests/PlaybackErrorHandlerTests.swift +213 -0
  138. package/ios/Tests/PlaybackProgressUpdateManagerTests.swift +166 -0
  139. package/ios/Tests/PlaybackStateMachineTests.swift +137 -0
  140. package/ios/Tests/QueueManagerTests.swift +880 -0
  141. package/ios/Tests/ResolvedTrackCopyingTests.swift +245 -0
  142. package/ios/Tests/SimpleRouterTests.swift +139 -0
  143. package/ios/Tests/Support/TestTypes.swift +180 -0
  144. package/ios/Tests/TimedMetadataAVFoundationTests.swift +152 -0
  145. package/ios/Tests/TrackMetadataAVFoundationTests.swift +176 -0
  146. package/ios/Tests/TrackSelectorTests.swift +268 -0
  147. package/ios/TrackPlayer.swift +692 -0
  148. package/ios/TrackPlayerCallbacks.swift +92 -0
  149. package/ios/TrackSelector.swift +141 -0
  150. package/ios/Util/ArtworkImageFetcher.swift +35 -0
  151. package/ios/Util/Emitter.swift +68 -0
  152. package/ios/Util/LRUCache.swift +182 -0
  153. package/ios/Util/MetadataAdapter.swift +131 -0
  154. package/ios/Util/NetworkMonitor.swift +65 -0
  155. package/ios/Util/OnceValue.swift +70 -0
  156. package/ios/Util/SFSymbolRenderer.swift +142 -0
  157. package/ios/Util/SVGProcessor.swift +56 -0
  158. package/lib/commonjs/AudioBrowser.js +50 -0
  159. package/lib/commonjs/AudioBrowser.js.map +1 -0
  160. package/lib/commonjs/features/battery.js +154 -0
  161. package/lib/commonjs/features/battery.js.map +1 -0
  162. package/lib/commonjs/features/browser.js +272 -0
  163. package/lib/commonjs/features/browser.js.map +1 -0
  164. package/lib/commonjs/features/equalizer.js +69 -0
  165. package/lib/commonjs/features/equalizer.js.map +1 -0
  166. package/lib/commonjs/features/errors.js +165 -0
  167. package/lib/commonjs/features/errors.js.map +1 -0
  168. package/lib/commonjs/features/favorites.js +101 -0
  169. package/lib/commonjs/features/favorites.js.map +1 -0
  170. package/lib/commonjs/features/index.js +160 -0
  171. package/lib/commonjs/features/index.js.map +1 -0
  172. package/lib/commonjs/features/metadata.js +54 -0
  173. package/lib/commonjs/features/metadata.js.map +1 -0
  174. package/lib/commonjs/features/network.js +40 -0
  175. package/lib/commonjs/features/network.js.map +1 -0
  176. package/lib/commonjs/features/nowPlaying.js +61 -0
  177. package/lib/commonjs/features/nowPlaying.js.map +1 -0
  178. package/lib/commonjs/features/output.js +54 -0
  179. package/lib/commonjs/features/output.js.map +1 -0
  180. package/lib/commonjs/features/playback/controls.js +79 -0
  181. package/lib/commonjs/features/playback/controls.js.map +1 -0
  182. package/lib/commonjs/features/playback/index.js +83 -0
  183. package/lib/commonjs/features/playback/index.js.map +1 -0
  184. package/lib/commonjs/features/playback/playWhenReady.js +55 -0
  185. package/lib/commonjs/features/playback/playWhenReady.js.map +1 -0
  186. package/lib/commonjs/features/playback/playing.js +41 -0
  187. package/lib/commonjs/features/playback/playing.js.map +1 -0
  188. package/lib/commonjs/features/playback/progress.js +104 -0
  189. package/lib/commonjs/features/playback/progress.js.map +1 -0
  190. package/lib/commonjs/features/playback/rate.js +29 -0
  191. package/lib/commonjs/features/playback/rate.js.map +1 -0
  192. package/lib/commonjs/features/playback/state.js +62 -0
  193. package/lib/commonjs/features/playback/state.js.map +1 -0
  194. package/lib/commonjs/features/playback/volume.js +68 -0
  195. package/lib/commonjs/features/playback/volume.js.map +1 -0
  196. package/lib/commonjs/features/player/index.js +28 -0
  197. package/lib/commonjs/features/player/index.js.map +1 -0
  198. package/lib/commonjs/features/player/options.js +182 -0
  199. package/lib/commonjs/features/player/options.js.map +1 -0
  200. package/lib/commonjs/features/player/setup.js +143 -0
  201. package/lib/commonjs/features/player/setup.js.map +1 -0
  202. package/lib/commonjs/features/queue/activeTrack.js +52 -0
  203. package/lib/commonjs/features/queue/activeTrack.js.map +1 -0
  204. package/lib/commonjs/features/queue/index.js +50 -0
  205. package/lib/commonjs/features/queue/index.js.map +1 -0
  206. package/lib/commonjs/features/queue/queue.js +177 -0
  207. package/lib/commonjs/features/queue/queue.js.map +1 -0
  208. package/lib/commonjs/features/queue/repeatMode.js +58 -0
  209. package/lib/commonjs/features/queue/repeatMode.js.map +1 -0
  210. package/lib/commonjs/features/queue/shuffle.js +57 -0
  211. package/lib/commonjs/features/queue/shuffle.js.map +1 -0
  212. package/lib/commonjs/features/rating.js +2 -0
  213. package/lib/commonjs/features/rating.js.map +1 -0
  214. package/lib/commonjs/features/remoteControls.js +286 -0
  215. package/lib/commonjs/features/remoteControls.js.map +1 -0
  216. package/lib/commonjs/features/sleepTimer.js +164 -0
  217. package/lib/commonjs/features/sleepTimer.js.map +1 -0
  218. package/lib/commonjs/index.js +22 -0
  219. package/lib/commonjs/index.js.map +1 -0
  220. package/lib/commonjs/native.js +9 -0
  221. package/lib/commonjs/native.js.map +1 -0
  222. package/lib/commonjs/native.web.js +10 -0
  223. package/lib/commonjs/native.web.js.map +1 -0
  224. package/lib/commonjs/package.json +1 -0
  225. package/lib/commonjs/specs/audio-browser.nitro.js +6 -0
  226. package/lib/commonjs/specs/audio-browser.nitro.js.map +1 -0
  227. package/lib/commonjs/types/browser-native.js +6 -0
  228. package/lib/commonjs/types/browser-native.js.map +1 -0
  229. package/lib/commonjs/types/browser-nodes.js +6 -0
  230. package/lib/commonjs/types/browser-nodes.js.map +1 -0
  231. package/lib/commonjs/types/browser.js +6 -0
  232. package/lib/commonjs/types/browser.js.map +1 -0
  233. package/lib/commonjs/types/index.js +28 -0
  234. package/lib/commonjs/types/index.js.map +1 -0
  235. package/lib/commonjs/types/player.js +2 -0
  236. package/lib/commonjs/types/player.js.map +1 -0
  237. package/lib/commonjs/utils/LazyNativeEmitter.js +58 -0
  238. package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -0
  239. package/lib/commonjs/utils/NativeUpdatedValue.js +59 -0
  240. package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -0
  241. package/lib/commonjs/utils/resolveAssetSource.js +11 -0
  242. package/lib/commonjs/utils/resolveAssetSource.js.map +1 -0
  243. package/lib/commonjs/utils/useDebug.js +221 -0
  244. package/lib/commonjs/utils/useDebug.js.map +1 -0
  245. package/lib/commonjs/utils/useNativeUpdatedValue.js +44 -0
  246. package/lib/commonjs/utils/useNativeUpdatedValue.js.map +1 -0
  247. package/lib/commonjs/utils/validation.js +23 -0
  248. package/lib/commonjs/utils/validation.js.map +1 -0
  249. package/lib/commonjs/web/NativeAudioBrowser.js +731 -0
  250. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -0
  251. package/lib/commonjs/web/SimpleRouter.js +146 -0
  252. package/lib/commonjs/web/SimpleRouter.js.map +1 -0
  253. package/lib/commonjs/web/SimpleRouter.test.js +174 -0
  254. package/lib/commonjs/web/SimpleRouter.test.js.map +1 -0
  255. package/lib/commonjs/web/TrackPlayer/Event.js +19 -0
  256. package/lib/commonjs/web/TrackPlayer/Event.js.map +1 -0
  257. package/lib/commonjs/web/TrackPlayer/Player.js +301 -0
  258. package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -0
  259. package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js +293 -0
  260. package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js.map +1 -0
  261. package/lib/commonjs/web/TrackPlayer/RepeatMode.js +12 -0
  262. package/lib/commonjs/web/TrackPlayer/RepeatMode.js.map +1 -0
  263. package/lib/commonjs/web/TrackPlayer/SetupNotCalledError.js +13 -0
  264. package/lib/commonjs/web/TrackPlayer/SetupNotCalledError.js.map +1 -0
  265. package/lib/commonjs/web/TrackPlayer/SleepTimer.js +75 -0
  266. package/lib/commonjs/web/TrackPlayer/SleepTimer.js.map +1 -0
  267. package/lib/commonjs/web/TrackPlayer/State.js +18 -0
  268. package/lib/commonjs/web/TrackPlayer/State.js.map +1 -0
  269. package/lib/commonjs/web/TrackPlayer/index.js +52 -0
  270. package/lib/commonjs/web/TrackPlayer/index.js.map +1 -0
  271. package/lib/commonjs/web/browser/BrowserManager.js +587 -0
  272. package/lib/commonjs/web/browser/BrowserManager.js.map +1 -0
  273. package/lib/commonjs/web/browser/FavoriteManager.js +80 -0
  274. package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -0
  275. package/lib/commonjs/web/browser/NavigationErrorManager.js +106 -0
  276. package/lib/commonjs/web/browser/NavigationErrorManager.js.map +1 -0
  277. package/lib/commonjs/web/browser/SearchManager.js +80 -0
  278. package/lib/commonjs/web/browser/SearchManager.js.map +1 -0
  279. package/lib/commonjs/web/http/HttpClient.js +94 -0
  280. package/lib/commonjs/web/http/HttpClient.js.map +1 -0
  281. package/lib/commonjs/web/http/RequestConfigBuilder.js +294 -0
  282. package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -0
  283. package/lib/commonjs/web/player/NowPlayingManager.js +79 -0
  284. package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -0
  285. package/lib/commonjs/web/player/OptionsManager.js +88 -0
  286. package/lib/commonjs/web/player/OptionsManager.js.map +1 -0
  287. package/lib/commonjs/web/util/BrowserPathHelper.js +138 -0
  288. package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -0
  289. package/lib/commonjs/web/util/shuffle.js +21 -0
  290. package/lib/commonjs/web/util/shuffle.js.map +1 -0
  291. package/lib/module/AudioBrowser.js +7 -0
  292. package/lib/module/AudioBrowser.js.map +1 -0
  293. package/lib/module/features/battery.js +144 -0
  294. package/lib/module/features/battery.js.map +1 -0
  295. package/lib/module/features/browser.js +258 -0
  296. package/lib/module/features/browser.js.map +1 -0
  297. package/lib/module/features/equalizer.js +60 -0
  298. package/lib/module/features/equalizer.js.map +1 -0
  299. package/lib/module/features/errors.js +156 -0
  300. package/lib/module/features/errors.js.map +1 -0
  301. package/lib/module/features/favorites.js +95 -0
  302. package/lib/module/features/favorites.js.map +1 -0
  303. package/lib/module/features/index.js +26 -0
  304. package/lib/module/features/index.js.map +1 -0
  305. package/lib/module/features/metadata.js +51 -0
  306. package/lib/module/features/metadata.js.map +1 -0
  307. package/lib/module/features/network.js +35 -0
  308. package/lib/module/features/network.js.map +1 -0
  309. package/lib/module/features/nowPlaying.js +55 -0
  310. package/lib/module/features/nowPlaying.js.map +1 -0
  311. package/lib/module/features/output.js +47 -0
  312. package/lib/module/features/output.js.map +1 -0
  313. package/lib/module/features/playback/controls.js +69 -0
  314. package/lib/module/features/playback/controls.js.map +1 -0
  315. package/lib/module/features/playback/index.js +10 -0
  316. package/lib/module/features/playback/index.js.map +1 -0
  317. package/lib/module/features/playback/playWhenReady.js +49 -0
  318. package/lib/module/features/playback/playWhenReady.js.map +1 -0
  319. package/lib/module/features/playback/playing.js +36 -0
  320. package/lib/module/features/playback/playing.js.map +1 -0
  321. package/lib/module/features/playback/progress.js +98 -0
  322. package/lib/module/features/playback/progress.js.map +1 -0
  323. package/lib/module/features/playback/rate.js +25 -0
  324. package/lib/module/features/playback/rate.js.map +1 -0
  325. package/lib/module/features/playback/state.js +57 -0
  326. package/lib/module/features/playback/state.js.map +1 -0
  327. package/lib/module/features/playback/volume.js +60 -0
  328. package/lib/module/features/playback/volume.js.map +1 -0
  329. package/lib/module/features/player/index.js +5 -0
  330. package/lib/module/features/player/index.js.map +1 -0
  331. package/lib/module/features/player/options.js +176 -0
  332. package/lib/module/features/player/options.js.map +1 -0
  333. package/lib/module/features/player/setup.js +140 -0
  334. package/lib/module/features/player/setup.js.map +1 -0
  335. package/lib/module/features/queue/activeTrack.js +46 -0
  336. package/lib/module/features/queue/activeTrack.js.map +1 -0
  337. package/lib/module/features/queue/index.js +7 -0
  338. package/lib/module/features/queue/index.js.map +1 -0
  339. package/lib/module/features/queue/queue.js +162 -0
  340. package/lib/module/features/queue/queue.js.map +1 -0
  341. package/lib/module/features/queue/repeatMode.js +52 -0
  342. package/lib/module/features/queue/repeatMode.js.map +1 -0
  343. package/lib/module/features/queue/shuffle.js +50 -0
  344. package/lib/module/features/queue/shuffle.js.map +1 -0
  345. package/lib/module/features/rating.js +2 -0
  346. package/lib/module/features/rating.js.map +1 -0
  347. package/lib/module/features/remoteControls.js +275 -0
  348. package/lib/module/features/remoteControls.js.map +1 -0
  349. package/lib/module/features/sleepTimer.js +155 -0
  350. package/lib/module/features/sleepTimer.js.map +1 -0
  351. package/lib/module/index.js +6 -0
  352. package/lib/module/index.js.map +1 -0
  353. package/lib/module/native.js +5 -0
  354. package/lib/module/native.js.map +1 -0
  355. package/lib/module/native.web.js +7 -0
  356. package/lib/module/native.web.js.map +1 -0
  357. package/lib/module/package.json +1 -0
  358. package/lib/module/specs/audio-browser.nitro.js +4 -0
  359. package/lib/module/specs/audio-browser.nitro.js.map +1 -0
  360. package/lib/module/types/browser-native.js +4 -0
  361. package/lib/module/types/browser-native.js.map +1 -0
  362. package/lib/module/types/browser-nodes.js +4 -0
  363. package/lib/module/types/browser-nodes.js.map +1 -0
  364. package/lib/module/types/browser.js +4 -0
  365. package/lib/module/types/browser.js.map +1 -0
  366. package/lib/module/types/index.js +5 -0
  367. package/lib/module/types/index.js.map +1 -0
  368. package/lib/module/types/player.js +2 -0
  369. package/lib/module/types/player.js.map +1 -0
  370. package/lib/module/utils/LazyNativeEmitter.js +53 -0
  371. package/lib/module/utils/LazyNativeEmitter.js.map +1 -0
  372. package/lib/module/utils/NativeUpdatedValue.js +54 -0
  373. package/lib/module/utils/NativeUpdatedValue.js.map +1 -0
  374. package/lib/module/utils/resolveAssetSource.js +7 -0
  375. package/lib/module/utils/resolveAssetSource.js.map +1 -0
  376. package/lib/module/utils/useDebug.js +218 -0
  377. package/lib/module/utils/useDebug.js.map +1 -0
  378. package/lib/module/utils/useNativeUpdatedValue.js +40 -0
  379. package/lib/module/utils/useNativeUpdatedValue.js.map +1 -0
  380. package/lib/module/utils/validation.js +18 -0
  381. package/lib/module/utils/validation.js.map +1 -0
  382. package/lib/module/web/NativeAudioBrowser.js +727 -0
  383. package/lib/module/web/NativeAudioBrowser.js.map +1 -0
  384. package/lib/module/web/SimpleRouter.js +141 -0
  385. package/lib/module/web/SimpleRouter.js.map +1 -0
  386. package/lib/module/web/SimpleRouter.test.js +174 -0
  387. package/lib/module/web/SimpleRouter.test.js.map +1 -0
  388. package/lib/module/web/TrackPlayer/Event.js +15 -0
  389. package/lib/module/web/TrackPlayer/Event.js.map +1 -0
  390. package/lib/module/web/TrackPlayer/Player.js +296 -0
  391. package/lib/module/web/TrackPlayer/Player.js.map +1 -0
  392. package/lib/module/web/TrackPlayer/PlaylistPlayer.js +288 -0
  393. package/lib/module/web/TrackPlayer/PlaylistPlayer.js.map +1 -0
  394. package/lib/module/web/TrackPlayer/RepeatMode.js +8 -0
  395. package/lib/module/web/TrackPlayer/RepeatMode.js.map +1 -0
  396. package/lib/module/web/TrackPlayer/SetupNotCalledError.js +8 -0
  397. package/lib/module/web/TrackPlayer/SetupNotCalledError.js.map +1 -0
  398. package/lib/module/web/TrackPlayer/SleepTimer.js +70 -0
  399. package/lib/module/web/TrackPlayer/SleepTimer.js.map +1 -0
  400. package/lib/module/web/TrackPlayer/State.js +14 -0
  401. package/lib/module/web/TrackPlayer/State.js.map +1 -0
  402. package/lib/module/web/TrackPlayer/index.js +7 -0
  403. package/lib/module/web/TrackPlayer/index.js.map +1 -0
  404. package/lib/module/web/browser/BrowserManager.js +583 -0
  405. package/lib/module/web/browser/BrowserManager.js.map +1 -0
  406. package/lib/module/web/browser/FavoriteManager.js +75 -0
  407. package/lib/module/web/browser/FavoriteManager.js.map +1 -0
  408. package/lib/module/web/browser/NavigationErrorManager.js +101 -0
  409. package/lib/module/web/browser/NavigationErrorManager.js.map +1 -0
  410. package/lib/module/web/browser/SearchManager.js +76 -0
  411. package/lib/module/web/browser/SearchManager.js.map +1 -0
  412. package/lib/module/web/http/HttpClient.js +89 -0
  413. package/lib/module/web/http/HttpClient.js.map +1 -0
  414. package/lib/module/web/http/RequestConfigBuilder.js +291 -0
  415. package/lib/module/web/http/RequestConfigBuilder.js.map +1 -0
  416. package/lib/module/web/player/NowPlayingManager.js +74 -0
  417. package/lib/module/web/player/NowPlayingManager.js.map +1 -0
  418. package/lib/module/web/player/OptionsManager.js +83 -0
  419. package/lib/module/web/player/OptionsManager.js.map +1 -0
  420. package/lib/module/web/util/BrowserPathHelper.js +134 -0
  421. package/lib/module/web/util/BrowserPathHelper.js.map +1 -0
  422. package/lib/module/web/util/shuffle.js +17 -0
  423. package/lib/module/web/util/shuffle.js.map +1 -0
  424. package/lib/typescript/src/AudioBrowser.d.ts +5 -0
  425. package/lib/typescript/src/AudioBrowser.d.ts.map +1 -0
  426. package/lib/typescript/src/features/battery.d.ts +112 -0
  427. package/lib/typescript/src/features/battery.d.ts.map +1 -0
  428. package/lib/typescript/src/features/browser.d.ts +68 -0
  429. package/lib/typescript/src/features/browser.d.ts.map +1 -0
  430. package/lib/typescript/src/features/equalizer.d.ts +35 -0
  431. package/lib/typescript/src/features/equalizer.d.ts.map +1 -0
  432. package/lib/typescript/src/features/errors.d.ts +136 -0
  433. package/lib/typescript/src/features/errors.d.ts.map +1 -0
  434. package/lib/typescript/src/features/favorites.d.ts +84 -0
  435. package/lib/typescript/src/features/favorites.d.ts.map +1 -0
  436. package/lib/typescript/src/features/index.d.ts +23 -0
  437. package/lib/typescript/src/features/index.d.ts.map +1 -0
  438. package/lib/typescript/src/features/metadata.d.ts +103 -0
  439. package/lib/typescript/src/features/metadata.d.ts.map +1 -0
  440. package/lib/typescript/src/features/network.d.ts +18 -0
  441. package/lib/typescript/src/features/network.d.ts.map +1 -0
  442. package/lib/typescript/src/features/nowPlaying.d.ts +36 -0
  443. package/lib/typescript/src/features/nowPlaying.d.ts.map +1 -0
  444. package/lib/typescript/src/features/output.d.ts +28 -0
  445. package/lib/typescript/src/features/output.d.ts.map +1 -0
  446. package/lib/typescript/src/features/playback/controls.d.ts +40 -0
  447. package/lib/typescript/src/features/playback/controls.d.ts.map +1 -0
  448. package/lib/typescript/src/features/playback/index.d.ts +8 -0
  449. package/lib/typescript/src/features/playback/index.d.ts.map +1 -0
  450. package/lib/typescript/src/features/playback/playWhenReady.d.ts +30 -0
  451. package/lib/typescript/src/features/playback/playWhenReady.d.ts.map +1 -0
  452. package/lib/typescript/src/features/playback/playing.d.ts +21 -0
  453. package/lib/typescript/src/features/playback/playing.d.ts.map +1 -0
  454. package/lib/typescript/src/features/playback/progress.d.ts +51 -0
  455. package/lib/typescript/src/features/playback/progress.d.ts.map +1 -0
  456. package/lib/typescript/src/features/playback/rate.d.ts +12 -0
  457. package/lib/typescript/src/features/playback/rate.d.ts.map +1 -0
  458. package/lib/typescript/src/features/playback/state.d.ts +43 -0
  459. package/lib/typescript/src/features/playback/state.d.ts.map +1 -0
  460. package/lib/typescript/src/features/playback/volume.d.ts +32 -0
  461. package/lib/typescript/src/features/playback/volume.d.ts.map +1 -0
  462. package/lib/typescript/src/features/player/index.d.ts +3 -0
  463. package/lib/typescript/src/features/player/index.d.ts.map +1 -0
  464. package/lib/typescript/src/features/player/options.d.ts +413 -0
  465. package/lib/typescript/src/features/player/options.d.ts.map +1 -0
  466. package/lib/typescript/src/features/player/setup.d.ts +471 -0
  467. package/lib/typescript/src/features/player/setup.d.ts.map +1 -0
  468. package/lib/typescript/src/features/queue/activeTrack.d.ts +38 -0
  469. package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -0
  470. package/lib/typescript/src/features/queue/index.d.ts +5 -0
  471. package/lib/typescript/src/features/queue/index.d.ts.map +1 -0
  472. package/lib/typescript/src/features/queue/queue.d.ts +111 -0
  473. package/lib/typescript/src/features/queue/queue.d.ts.map +1 -0
  474. package/lib/typescript/src/features/queue/repeatMode.d.ts +34 -0
  475. package/lib/typescript/src/features/queue/repeatMode.d.ts.map +1 -0
  476. package/lib/typescript/src/features/queue/shuffle.d.ts +27 -0
  477. package/lib/typescript/src/features/queue/shuffle.d.ts.map +1 -0
  478. package/lib/typescript/src/features/rating.d.ts +14 -0
  479. package/lib/typescript/src/features/rating.d.ts.map +1 -0
  480. package/lib/typescript/src/features/remoteControls.d.ts +164 -0
  481. package/lib/typescript/src/features/remoteControls.d.ts.map +1 -0
  482. package/lib/typescript/src/features/sleepTimer.d.ts +80 -0
  483. package/lib/typescript/src/features/sleepTimer.d.ts.map +1 -0
  484. package/lib/typescript/src/index.d.ts +4 -0
  485. package/lib/typescript/src/index.d.ts.map +1 -0
  486. package/lib/typescript/src/native.d.ts +3 -0
  487. package/lib/typescript/src/native.d.ts.map +1 -0
  488. package/lib/typescript/src/native.web.d.ts +3 -0
  489. package/lib/typescript/src/native.web.d.ts.map +1 -0
  490. package/lib/typescript/src/specs/audio-browser.nitro.d.ts +242 -0
  491. package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -0
  492. package/lib/typescript/src/types/browser-native.d.ts +40 -0
  493. package/lib/typescript/src/types/browser-native.d.ts.map +1 -0
  494. package/lib/typescript/src/types/browser-nodes.d.ts +198 -0
  495. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -0
  496. package/lib/typescript/src/types/browser.d.ts +742 -0
  497. package/lib/typescript/src/types/browser.d.ts.map +1 -0
  498. package/lib/typescript/src/types/index.d.ts +3 -0
  499. package/lib/typescript/src/types/index.d.ts.map +1 -0
  500. package/lib/typescript/src/types/player.d.ts +64 -0
  501. package/lib/typescript/src/types/player.d.ts.map +1 -0
  502. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +35 -0
  503. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -0
  504. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +39 -0
  505. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -0
  506. package/lib/typescript/src/utils/resolveAssetSource.d.ts +4 -0
  507. package/lib/typescript/src/utils/resolveAssetSource.d.ts.map +1 -0
  508. package/lib/typescript/src/utils/useDebug.d.ts +65 -0
  509. package/lib/typescript/src/utils/useDebug.d.ts.map +1 -0
  510. package/lib/typescript/src/utils/useNativeUpdatedValue.d.ts +14 -0
  511. package/lib/typescript/src/utils/useNativeUpdatedValue.d.ts.map +1 -0
  512. package/lib/typescript/src/utils/validation.d.ts +3 -0
  513. package/lib/typescript/src/utils/validation.d.ts.map +1 -0
  514. package/lib/typescript/src/web/NativeAudioBrowser.d.ts +188 -0
  515. package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -0
  516. package/lib/typescript/src/web/SimpleRouter.d.ts +40 -0
  517. package/lib/typescript/src/web/SimpleRouter.d.ts.map +1 -0
  518. package/lib/typescript/src/web/SimpleRouter.test.d.ts +2 -0
  519. package/lib/typescript/src/web/SimpleRouter.test.d.ts.map +1 -0
  520. package/lib/typescript/src/web/TrackPlayer/Event.d.ts +11 -0
  521. package/lib/typescript/src/web/TrackPlayer/Event.d.ts.map +1 -0
  522. package/lib/typescript/src/web/TrackPlayer/Player.d.ts +59 -0
  523. package/lib/typescript/src/web/TrackPlayer/Player.d.ts.map +1 -0
  524. package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts +39 -0
  525. package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts.map +1 -0
  526. package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts +6 -0
  527. package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts.map +1 -0
  528. package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts +4 -0
  529. package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts.map +1 -0
  530. package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts +34 -0
  531. package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts.map +1 -0
  532. package/lib/typescript/src/web/TrackPlayer/State.d.ts +13 -0
  533. package/lib/typescript/src/web/TrackPlayer/State.d.ts.map +1 -0
  534. package/lib/typescript/src/web/TrackPlayer/index.d.ts +5 -0
  535. package/lib/typescript/src/web/TrackPlayer/index.d.ts.map +1 -0
  536. package/lib/typescript/src/web/browser/BrowserManager.d.ts +154 -0
  537. package/lib/typescript/src/web/browser/BrowserManager.d.ts.map +1 -0
  538. package/lib/typescript/src/web/browser/FavoriteManager.d.ts +42 -0
  539. package/lib/typescript/src/web/browser/FavoriteManager.d.ts.map +1 -0
  540. package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts +40 -0
  541. package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts.map +1 -0
  542. package/lib/typescript/src/web/browser/SearchManager.d.ts +22 -0
  543. package/lib/typescript/src/web/browser/SearchManager.d.ts.map +1 -0
  544. package/lib/typescript/src/web/http/HttpClient.d.ts +25 -0
  545. package/lib/typescript/src/web/http/HttpClient.d.ts.map +1 -0
  546. package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts +98 -0
  547. package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts.map +1 -0
  548. package/lib/typescript/src/web/player/NowPlayingManager.d.ts +34 -0
  549. package/lib/typescript/src/web/player/NowPlayingManager.d.ts.map +1 -0
  550. package/lib/typescript/src/web/player/OptionsManager.d.ts +32 -0
  551. package/lib/typescript/src/web/player/OptionsManager.d.ts.map +1 -0
  552. package/lib/typescript/src/web/util/BrowserPathHelper.d.ts +69 -0
  553. package/lib/typescript/src/web/util/BrowserPathHelper.d.ts.map +1 -0
  554. package/lib/typescript/src/web/util/shuffle.d.ts +8 -0
  555. package/lib/typescript/src/web/util/shuffle.d.ts.map +1 -0
  556. package/nitro.json +24 -0
  557. package/nitrogen/generated/.gitattributes +1 -0
  558. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +88 -0
  559. package/nitrogen/generated/android/AudioBrowser+autolinking.gradle +27 -0
  560. package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +136 -0
  561. package/nitrogen/generated/android/AudioBrowserOnLoad.hpp +34 -0
  562. package/nitrogen/generated/android/c++/JAndroidAudioContentType.hpp +67 -0
  563. package/nitrogen/generated/android/c++/JAndroidAudioOffloadSettings.hpp +61 -0
  564. package/nitrogen/generated/android/c++/JAndroidOptions.hpp +86 -0
  565. package/nitrogen/generated/android/c++/JAndroidPlayerWakeMode.hpp +61 -0
  566. package/nitrogen/generated/android/c++/JAndroidUpdateOptions.hpp +86 -0
  567. package/nitrogen/generated/android/c++/JAppKilledPlaybackBehavior.hpp +61 -0
  568. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +166 -0
  569. package/nitrogen/generated/android/c++/JBatteryOptimizationStatus.hpp +61 -0
  570. package/nitrogen/generated/android/c++/JBatteryOptimizationStatusChangedEvent.hpp +58 -0
  571. package/nitrogen/generated/android/c++/JBatteryWarningPendingChangedEvent.hpp +57 -0
  572. package/nitrogen/generated/android/c++/JBrowseError.hpp +57 -0
  573. package/nitrogen/generated/android/c++/JBrowseResult.cpp +26 -0
  574. package/nitrogen/generated/android/c++/JBrowseResult.hpp +87 -0
  575. package/nitrogen/generated/android/c++/JBrowserSourceCallbackParam.hpp +76 -0
  576. package/nitrogen/generated/android/c++/JCarPlayNowPlayingButton.hpp +64 -0
  577. package/nitrogen/generated/android/c++/JCarPlaySiriListButtonPosition.hpp +58 -0
  578. package/nitrogen/generated/android/c++/JChapterMetadata.hpp +70 -0
  579. package/nitrogen/generated/android/c++/JEqualizerSettings.hpp +125 -0
  580. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +74 -0
  581. package/nitrogen/generated/android/c++/JFormatNavigationErrorParams.hpp +72 -0
  582. package/nitrogen/generated/android/c++/JFormattedNavigationError.hpp +61 -0
  583. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.hpp +111 -0
  584. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.hpp +134 -0
  585. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.hpp +143 -0
  586. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +139 -0
  587. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.hpp +147 -0
  588. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +159 -0
  589. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +139 -0
  590. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  591. package/nitrogen/generated/android/c++/JFunc_void_BatteryOptimizationStatusChangedEvent.hpp +79 -0
  592. package/nitrogen/generated/android/c++/JFunc_void_BatteryWarningPendingChangedEvent.hpp +77 -0
  593. package/nitrogen/generated/android/c++/JFunc_void_EqualizerSettings.hpp +80 -0
  594. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +91 -0
  595. package/nitrogen/generated/android/c++/JFunc_void_IosOutput.hpp +80 -0
  596. package/nitrogen/generated/android/c++/JFunc_void_NavigationErrorEvent.hpp +83 -0
  597. package/nitrogen/generated/android/c++/JFunc_void_NowPlayingMetadata.hpp +89 -0
  598. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +98 -0
  599. package/nitrogen/generated/android/c++/JFunc_void_Playback.hpp +83 -0
  600. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +91 -0
  601. package/nitrogen/generated/android/c++/JFunc_void_PlaybackErrorEvent.hpp +81 -0
  602. package/nitrogen/generated/android/c++/JFunc_void_PlaybackPlayWhenReadyChangedEvent.hpp +77 -0
  603. package/nitrogen/generated/android/c++/JFunc_void_PlaybackProgressUpdatedEvent.hpp +77 -0
  604. package/nitrogen/generated/android/c++/JFunc_void_PlaybackQueueEndedEvent.hpp +77 -0
  605. package/nitrogen/generated/android/c++/JFunc_void_PlayingState.hpp +77 -0
  606. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpBackwardEvent.hpp +77 -0
  607. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpForwardEvent.hpp +77 -0
  608. package/nitrogen/generated/android/c++/JFunc_void_RemotePlayIdEvent.hpp +79 -0
  609. package/nitrogen/generated/android/c++/JFunc_void_RemotePlaySearchEvent.hpp +78 -0
  610. package/nitrogen/generated/android/c++/JFunc_void_RemoteSeekEvent.hpp +77 -0
  611. package/nitrogen/generated/android/c++/JFunc_void_RemoteSetRatingEvent.hpp +87 -0
  612. package/nitrogen/generated/android/c++/JFunc_void_RemoteSkipEvent.hpp +77 -0
  613. package/nitrogen/generated/android/c++/JFunc_void_RepeatModeChangedEvent.hpp +79 -0
  614. package/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +79 -0
  615. package/nitrogen/generated/android/c++/JFunc_void_TrackMetadata.hpp +79 -0
  616. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  617. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
  618. package/nitrogen/generated/android/c++/JFunc_void_std__optional_FormattedNavigationError_.hpp +79 -0
  619. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +93 -0
  620. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.hpp +84 -0
  621. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  622. package/nitrogen/generated/android/c++/JFunc_void_std__vector_ChapterMetadata_.hpp +98 -0
  623. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +107 -0
  624. package/nitrogen/generated/android/c++/JHeartRating.hpp +57 -0
  625. package/nitrogen/generated/android/c++/JHttpMethod.hpp +73 -0
  626. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +1835 -0
  627. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +248 -0
  628. package/nitrogen/generated/android/c++/JIOSCategory.hpp +70 -0
  629. package/nitrogen/generated/android/c++/JIOSCategoryMode.hpp +79 -0
  630. package/nitrogen/generated/android/c++/JIOSCategoryOptions.hpp +73 -0
  631. package/nitrogen/generated/android/c++/JIOSCategoryPolicy.hpp +61 -0
  632. package/nitrogen/generated/android/c++/JImageContext.hpp +61 -0
  633. package/nitrogen/generated/android/c++/JImageQueryParams.hpp +62 -0
  634. package/nitrogen/generated/android/c++/JImageRowItem.hpp +75 -0
  635. package/nitrogen/generated/android/c++/JImageSource.hpp +86 -0
  636. package/nitrogen/generated/android/c++/JIosOutput.hpp +67 -0
  637. package/nitrogen/generated/android/c++/JIosOutputType.hpp +85 -0
  638. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +156 -0
  639. package/nitrogen/generated/android/c++/JMediaTransformParams.hpp +69 -0
  640. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +216 -0
  641. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +151 -0
  642. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +105 -0
  643. package/nitrogen/generated/android/c++/JNavigationError.hpp +72 -0
  644. package/nitrogen/generated/android/c++/JNavigationErrorEvent.hpp +62 -0
  645. package/nitrogen/generated/android/c++/JNavigationErrorType.hpp +67 -0
  646. package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +86 -0
  647. package/nitrogen/generated/android/c++/JNotificationButton.hpp +67 -0
  648. package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +94 -0
  649. package/nitrogen/generated/android/c++/JNowPlayingMetadata.hpp +104 -0
  650. package/nitrogen/generated/android/c++/JNowPlayingUpdate.hpp +62 -0
  651. package/nitrogen/generated/android/c++/JOptions.hpp +97 -0
  652. package/nitrogen/generated/android/c++/JPartialAndroidSetupPlayerOptions.hpp +104 -0
  653. package/nitrogen/generated/android/c++/JPartialIOSSetupPlayerOptions.hpp +100 -0
  654. package/nitrogen/generated/android/c++/JPartialSetupPlayerOptions.hpp +96 -0
  655. package/nitrogen/generated/android/c++/JPercentageRating.hpp +57 -0
  656. package/nitrogen/generated/android/c++/JPlayback.hpp +66 -0
  657. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +86 -0
  658. package/nitrogen/generated/android/c++/JPlaybackError.hpp +61 -0
  659. package/nitrogen/generated/android/c++/JPlaybackErrorEvent.hpp +60 -0
  660. package/nitrogen/generated/android/c++/JPlaybackPlayWhenReadyChangedEvent.hpp +57 -0
  661. package/nitrogen/generated/android/c++/JPlaybackProgressUpdatedEvent.hpp +69 -0
  662. package/nitrogen/generated/android/c++/JPlaybackQueueEndedEvent.hpp +61 -0
  663. package/nitrogen/generated/android/c++/JPlaybackState.hpp +79 -0
  664. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +101 -0
  665. package/nitrogen/generated/android/c++/JPlayingState.hpp +61 -0
  666. package/nitrogen/generated/android/c++/JProgress.hpp +65 -0
  667. package/nitrogen/generated/android/c++/JRatingType.hpp +73 -0
  668. package/nitrogen/generated/android/c++/JRemoteJumpBackwardEvent.hpp +57 -0
  669. package/nitrogen/generated/android/c++/JRemoteJumpForwardEvent.hpp +57 -0
  670. package/nitrogen/generated/android/c++/JRemotePlayIdEvent.hpp +62 -0
  671. package/nitrogen/generated/android/c++/JRemotePlaySearchEvent.hpp +57 -0
  672. package/nitrogen/generated/android/c++/JRemoteSeekEvent.hpp +57 -0
  673. package/nitrogen/generated/android/c++/JRemoteSetRatingEvent.hpp +66 -0
  674. package/nitrogen/generated/android/c++/JRemoteSkipEvent.hpp +57 -0
  675. package/nitrogen/generated/android/c++/JRepeatMode.hpp +61 -0
  676. package/nitrogen/generated/android/c++/JRepeatModeChangedEvent.hpp +58 -0
  677. package/nitrogen/generated/android/c++/JRequestConfig.hpp +115 -0
  678. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +184 -0
  679. package/nitrogen/generated/android/c++/JRetryConfig.hpp +61 -0
  680. package/nitrogen/generated/android/c++/JSearchMode.hpp +70 -0
  681. package/nitrogen/generated/android/c++/JSearchParams.hpp +84 -0
  682. package/nitrogen/generated/android/c++/JSleepTimer.cpp +30 -0
  683. package/nitrogen/generated/android/c++/JSleepTimer.hpp +88 -0
  684. package/nitrogen/generated/android/c++/JSleepTimerEndOfTrack.hpp +57 -0
  685. package/nitrogen/generated/android/c++/JSleepTimerTime.hpp +57 -0
  686. package/nitrogen/generated/android/c++/JStarRating.hpp +57 -0
  687. package/nitrogen/generated/android/c++/JThumbsRating.hpp +57 -0
  688. package/nitrogen/generated/android/c++/JTimedMetadata.hpp +74 -0
  689. package/nitrogen/generated/android/c++/JTrack.hpp +154 -0
  690. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +96 -0
  691. package/nitrogen/generated/android/c++/JTrackMetadata.hpp +118 -0
  692. package/nitrogen/generated/android/c++/JTrackStyle.hpp +58 -0
  693. package/nitrogen/generated/android/c++/JTransformableRequestConfig.hpp +134 -0
  694. package/nitrogen/generated/android/c++/JUpdateOptions.hpp +105 -0
  695. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.cpp +26 -0
  696. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.hpp +70 -0
  697. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.cpp +26 -0
  698. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.hpp +70 -0
  699. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.cpp +34 -0
  700. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.hpp +105 -0
  701. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
  702. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
  703. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +26 -0
  704. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +75 -0
  705. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioContentType.kt +26 -0
  706. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioOffloadSettings.kt +41 -0
  707. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +50 -0
  708. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidPlayerWakeMode.kt +24 -0
  709. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidUpdateOptions.kt +50 -0
  710. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AppKilledPlaybackBehavior.kt +24 -0
  711. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkRequestConfig.kt +72 -0
  712. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AudioBrowserOnLoad.kt +35 -0
  713. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatus.kt +24 -0
  714. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatusChangedEvent.kt +38 -0
  715. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryWarningPendingChangedEvent.kt +38 -0
  716. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseError.kt +38 -0
  717. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseResult.kt +53 -0
  718. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowserSourceCallbackParam.kt +41 -0
  719. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayNowPlayingButton.kt +25 -0
  720. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlaySiriListButtonPosition.kt +23 -0
  721. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ChapterMetadata.kt +47 -0
  722. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/EqualizerSettings.kt +59 -0
  723. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FavoriteChangedEvent.kt +41 -0
  724. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormatNavigationErrorParams.kt +44 -0
  725. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormattedNavigationError.kt +41 -0
  726. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.kt +80 -0
  727. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.kt +80 -0
  728. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.kt +80 -0
  729. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.kt +80 -0
  730. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.kt +80 -0
  731. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.kt +80 -0
  732. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.kt +80 -0
  733. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void.kt +80 -0
  734. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryOptimizationStatusChangedEvent.kt +80 -0
  735. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryWarningPendingChangedEvent.kt +80 -0
  736. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_EqualizerSettings.kt +80 -0
  737. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_FavoriteChangedEvent.kt +80 -0
  738. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_IosOutput.kt +80 -0
  739. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NavigationErrorEvent.kt +80 -0
  740. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NowPlayingMetadata.kt +80 -0
  741. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Options.kt +80 -0
  742. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Playback.kt +80 -0
  743. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackActiveTrackChangedEvent.kt +80 -0
  744. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackErrorEvent.kt +80 -0
  745. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackPlayWhenReadyChangedEvent.kt +80 -0
  746. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackProgressUpdatedEvent.kt +80 -0
  747. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackQueueEndedEvent.kt +80 -0
  748. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlayingState.kt +80 -0
  749. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpBackwardEvent.kt +80 -0
  750. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpForwardEvent.kt +80 -0
  751. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlayIdEvent.kt +80 -0
  752. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlaySearchEvent.kt +80 -0
  753. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSeekEvent.kt +80 -0
  754. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSetRatingEvent.kt +80 -0
  755. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSkipEvent.kt +80 -0
  756. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RepeatModeChangedEvent.kt +80 -0
  757. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TimedMetadata.kt +80 -0
  758. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TrackMetadata.kt +80 -0
  759. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_bool.kt +80 -0
  760. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_double.kt +80 -0
  761. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_FormattedNavigationError_.kt +80 -0
  762. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_ResolvedTrack_.kt +80 -0
  763. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.kt +80 -0
  764. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__string.kt +80 -0
  765. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_ChapterMetadata_.kt +80 -0
  766. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_Track_.kt +80 -0
  767. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HeartRating.kt +38 -0
  768. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HttpMethod.kt +28 -0
  769. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +1134 -0
  770. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategory.kt +27 -0
  771. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryMode.kt +30 -0
  772. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryOptions.kt +28 -0
  773. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryPolicy.kt +24 -0
  774. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageContext.kt +41 -0
  775. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageQueryParams.kt +41 -0
  776. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +47 -0
  777. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageSource.kt +47 -0
  778. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutput.kt +44 -0
  779. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutputType.kt +32 -0
  780. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaRequestConfig.kt +69 -0
  781. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaTransformParams.kt +41 -0
  782. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +72 -0
  783. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeRouteEntry.kt +63 -0
  784. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeUpdateOptions.kt +53 -0
  785. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationError.kt +47 -0
  786. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorEvent.kt +38 -0
  787. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorType.kt +26 -0
  788. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +50 -0
  789. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButton.kt +26 -0
  790. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +50 -0
  791. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingMetadata.kt +65 -0
  792. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingUpdate.kt +41 -0
  793. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Options.kt +53 -0
  794. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialAndroidSetupPlayerOptions.kt +65 -0
  795. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialIOSSetupPlayerOptions.kt +50 -0
  796. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialSetupPlayerOptions.kt +47 -0
  797. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PercentageRating.kt +38 -0
  798. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Playback.kt +41 -0
  799. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackActiveTrackChangedEvent.kt +50 -0
  800. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackError.kt +41 -0
  801. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackErrorEvent.kt +38 -0
  802. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackPlayWhenReadyChangedEvent.kt +38 -0
  803. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackProgressUpdatedEvent.kt +47 -0
  804. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackQueueEndedEvent.kt +41 -0
  805. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackState.kt +30 -0
  806. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +71 -0
  807. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayingState.kt +41 -0
  808. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Progress.kt +44 -0
  809. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RatingType.kt +28 -0
  810. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpBackwardEvent.kt +38 -0
  811. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpForwardEvent.kt +38 -0
  812. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlayIdEvent.kt +41 -0
  813. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlaySearchEvent.kt +38 -0
  814. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSeekEvent.kt +38 -0
  815. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSetRatingEvent.kt +38 -0
  816. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSkipEvent.kt +38 -0
  817. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatMode.kt +24 -0
  818. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatModeChangedEvent.kt +38 -0
  819. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RequestConfig.kt +59 -0
  820. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +95 -0
  821. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RetryConfig.kt +41 -0
  822. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchMode.kt +27 -0
  823. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchParams.kt +56 -0
  824. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimer.kt +65 -0
  825. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerEndOfTrack.kt +38 -0
  826. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerTime.kt +38 -0
  827. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StarRating.kt +38 -0
  828. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ThumbsRating.kt +38 -0
  829. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TimedMetadata.kt +50 -0
  830. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +89 -0
  831. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackLoadEvent.kt +44 -0
  832. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackMetadata.kt +83 -0
  833. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +23 -0
  834. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TransformableRequestConfig.kt +66 -0
  835. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/UpdateOptions.kt +53 -0
  836. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_AndroidAudioOffloadSettings.kt +53 -0
  837. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_RetryConfig.kt +53 -0
  838. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.kt +77 -0
  839. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_Double.kt +53 -0
  840. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_NotificationButtonLayout.kt +53 -0
  841. package/nitrogen/generated/ios/AudioBrowser+autolinking.rb +60 -0
  842. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +424 -0
  843. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +2959 -0
  844. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +309 -0
  845. package/nitrogen/generated/ios/AudioBrowserAutolinking.mm +33 -0
  846. package/nitrogen/generated/ios/AudioBrowserAutolinking.swift +26 -0
  847. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.cpp +11 -0
  848. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +1214 -0
  849. package/nitrogen/generated/ios/swift/AndroidAudioContentType.swift +52 -0
  850. package/nitrogen/generated/ios/swift/AndroidAudioOffloadSettings.swift +60 -0
  851. package/nitrogen/generated/ios/swift/AndroidOptions.swift +81 -0
  852. package/nitrogen/generated/ios/swift/AndroidPlayerWakeMode.swift +44 -0
  853. package/nitrogen/generated/ios/swift/AndroidUpdateOptions.swift +119 -0
  854. package/nitrogen/generated/ios/swift/AppKilledPlaybackBehavior.swift +44 -0
  855. package/nitrogen/generated/ios/swift/ArtworkRequestConfig.swift +294 -0
  856. package/nitrogen/generated/ios/swift/BatteryOptimizationStatus.swift +44 -0
  857. package/nitrogen/generated/ios/swift/BatteryOptimizationStatusChangedEvent.swift +29 -0
  858. package/nitrogen/generated/ios/swift/BatteryWarningPendingChangedEvent.swift +29 -0
  859. package/nitrogen/generated/ios/swift/BrowseError.swift +29 -0
  860. package/nitrogen/generated/ios/swift/BrowseResult.swift +18 -0
  861. package/nitrogen/generated/ios/swift/BrowserSourceCallbackParam.swift +61 -0
  862. package/nitrogen/generated/ios/swift/CarPlayNowPlayingButton.swift +48 -0
  863. package/nitrogen/generated/ios/swift/CarPlaySiriListButtonPosition.swift +40 -0
  864. package/nitrogen/generated/ios/swift/ChapterMetadata.swift +70 -0
  865. package/nitrogen/generated/ios/swift/EqualizerSettings.swift +95 -0
  866. package/nitrogen/generated/ios/swift/FavoriteChangedEvent.swift +34 -0
  867. package/nitrogen/generated/ios/swift/FormatNavigationErrorParams.swift +39 -0
  868. package/nitrogen/generated/ios/swift/FormattedNavigationError.swift +34 -0
  869. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.swift +60 -0
  870. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.swift +61 -0
  871. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.swift +76 -0
  872. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.swift +61 -0
  873. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.swift +68 -0
  874. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.swift +67 -0
  875. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.swift +61 -0
  876. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  877. package/nitrogen/generated/ios/swift/Func_void_BatteryOptimizationStatusChangedEvent.swift +46 -0
  878. package/nitrogen/generated/ios/swift/Func_void_BatteryWarningPendingChangedEvent.swift +46 -0
  879. package/nitrogen/generated/ios/swift/Func_void_EqualizerSettings.swift +46 -0
  880. package/nitrogen/generated/ios/swift/Func_void_FavoriteChangedEvent.swift +46 -0
  881. package/nitrogen/generated/ios/swift/Func_void_IosOutput.swift +46 -0
  882. package/nitrogen/generated/ios/swift/Func_void_NavigationErrorEvent.swift +46 -0
  883. package/nitrogen/generated/ios/swift/Func_void_NowPlayingMetadata.swift +46 -0
  884. package/nitrogen/generated/ios/swift/Func_void_Options.swift +46 -0
  885. package/nitrogen/generated/ios/swift/Func_void_Playback.swift +46 -0
  886. package/nitrogen/generated/ios/swift/Func_void_PlaybackActiveTrackChangedEvent.swift +46 -0
  887. package/nitrogen/generated/ios/swift/Func_void_PlaybackErrorEvent.swift +46 -0
  888. package/nitrogen/generated/ios/swift/Func_void_PlaybackPlayWhenReadyChangedEvent.swift +46 -0
  889. package/nitrogen/generated/ios/swift/Func_void_PlaybackProgressUpdatedEvent.swift +46 -0
  890. package/nitrogen/generated/ios/swift/Func_void_PlaybackQueueEndedEvent.swift +46 -0
  891. package/nitrogen/generated/ios/swift/Func_void_PlayingState.swift +46 -0
  892. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpBackwardEvent.swift +46 -0
  893. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpForwardEvent.swift +46 -0
  894. package/nitrogen/generated/ios/swift/Func_void_RemotePlayIdEvent.swift +46 -0
  895. package/nitrogen/generated/ios/swift/Func_void_RemotePlaySearchEvent.swift +46 -0
  896. package/nitrogen/generated/ios/swift/Func_void_RemoteSeekEvent.swift +46 -0
  897. package/nitrogen/generated/ios/swift/Func_void_RemoteSetRatingEvent.swift +46 -0
  898. package/nitrogen/generated/ios/swift/Func_void_RemoteSkipEvent.swift +46 -0
  899. package/nitrogen/generated/ios/swift/Func_void_RepeatModeChangedEvent.swift +46 -0
  900. package/nitrogen/generated/ios/swift/Func_void_RequestConfig.swift +46 -0
  901. package/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +46 -0
  902. package/nitrogen/generated/ios/swift/Func_void_TrackMetadata.swift +46 -0
  903. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  904. package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
  905. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  906. package/nitrogen/generated/ios/swift/Func_void_std__optional_FormattedNavigationError_.swift +46 -0
  907. package/nitrogen/generated/ios/swift/Func_void_std__optional_ResolvedTrack_.swift +46 -0
  908. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.swift +68 -0
  909. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_RequestConfig__.swift +66 -0
  910. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError___.swift +66 -0
  911. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__vector_Track___.swift +66 -0
  912. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_void__.swift +64 -0
  913. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  914. package/nitrogen/generated/ios/swift/Func_void_std__variant_ResolvedTrack__BrowseError_.swift +58 -0
  915. package/nitrogen/generated/ios/swift/Func_void_std__vector_ChapterMetadata_.swift +46 -0
  916. package/nitrogen/generated/ios/swift/Func_void_std__vector_Track_.swift +46 -0
  917. package/nitrogen/generated/ios/swift/HeartRating.swift +29 -0
  918. package/nitrogen/generated/ios/swift/HttpMethod.swift +60 -0
  919. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +180 -0
  920. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +2401 -0
  921. package/nitrogen/generated/ios/swift/IOSCategory.swift +56 -0
  922. package/nitrogen/generated/ios/swift/IOSCategoryMode.swift +68 -0
  923. package/nitrogen/generated/ios/swift/IOSCategoryOptions.swift +60 -0
  924. package/nitrogen/generated/ios/swift/IOSCategoryPolicy.swift +44 -0
  925. package/nitrogen/generated/ios/swift/ImageContext.swift +60 -0
  926. package/nitrogen/generated/ios/swift/ImageQueryParams.swift +60 -0
  927. package/nitrogen/generated/ios/swift/ImageRowItem.swift +76 -0
  928. package/nitrogen/generated/ios/swift/ImageSource.swift +90 -0
  929. package/nitrogen/generated/ios/swift/IosOutput.swift +39 -0
  930. package/nitrogen/generated/ios/swift/IosOutputType.swift +76 -0
  931. package/nitrogen/generated/ios/swift/MediaRequestConfig.swift +295 -0
  932. package/nitrogen/generated/ios/swift/MediaTransformParams.swift +40 -0
  933. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +271 -0
  934. package/nitrogen/generated/ios/swift/NativeRouteEntry.swift +178 -0
  935. package/nitrogen/generated/ios/swift/NativeUpdateOptions.swift +143 -0
  936. package/nitrogen/generated/ios/swift/NavigationError.swift +70 -0
  937. package/nitrogen/generated/ios/swift/NavigationErrorEvent.swift +35 -0
  938. package/nitrogen/generated/ios/swift/NavigationErrorType.swift +52 -0
  939. package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +119 -0
  940. package/nitrogen/generated/ios/swift/NotificationButton.swift +52 -0
  941. package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +92 -0
  942. package/nitrogen/generated/ios/swift/NowPlayingMetadata.swift +233 -0
  943. package/nitrogen/generated/ios/swift/NowPlayingUpdate.swift +60 -0
  944. package/nitrogen/generated/ios/swift/Options.swift +92 -0
  945. package/nitrogen/generated/ios/swift/PartialAndroidSetupPlayerOptions.swift +228 -0
  946. package/nitrogen/generated/ios/swift/PartialIOSSetupPlayerOptions.swift +99 -0
  947. package/nitrogen/generated/ios/swift/PartialSetupPlayerOptions.swift +101 -0
  948. package/nitrogen/generated/ios/swift/PercentageRating.swift +29 -0
  949. package/nitrogen/generated/ios/swift/Playback.swift +40 -0
  950. package/nitrogen/generated/ios/swift/PlaybackActiveTrackChangedEvent.swift +87 -0
  951. package/nitrogen/generated/ios/swift/PlaybackError.swift +34 -0
  952. package/nitrogen/generated/ios/swift/PlaybackErrorEvent.swift +35 -0
  953. package/nitrogen/generated/ios/swift/PlaybackPlayWhenReadyChangedEvent.swift +29 -0
  954. package/nitrogen/generated/ios/swift/PlaybackProgressUpdatedEvent.swift +44 -0
  955. package/nitrogen/generated/ios/swift/PlaybackQueueEndedEvent.swift +34 -0
  956. package/nitrogen/generated/ios/swift/PlaybackState.swift +68 -0
  957. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +240 -0
  958. package/nitrogen/generated/ios/swift/PlayingState.swift +34 -0
  959. package/nitrogen/generated/ios/swift/Progress.swift +39 -0
  960. package/nitrogen/generated/ios/swift/RatingType.swift +60 -0
  961. package/nitrogen/generated/ios/swift/RemoteJumpBackwardEvent.swift +29 -0
  962. package/nitrogen/generated/ios/swift/RemoteJumpForwardEvent.swift +29 -0
  963. package/nitrogen/generated/ios/swift/RemotePlayIdEvent.swift +47 -0
  964. package/nitrogen/generated/ios/swift/RemotePlaySearchEvent.swift +29 -0
  965. package/nitrogen/generated/ios/swift/RemoteSeekEvent.swift +29 -0
  966. package/nitrogen/generated/ios/swift/RemoteSetRatingEvent.swift +58 -0
  967. package/nitrogen/generated/ios/swift/RemoteSkipEvent.swift +29 -0
  968. package/nitrogen/generated/ios/swift/RepeatMode.swift +44 -0
  969. package/nitrogen/generated/ios/swift/RepeatModeChangedEvent.swift +29 -0
  970. package/nitrogen/generated/ios/swift/RequestConfig.swift +189 -0
  971. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +342 -0
  972. package/nitrogen/generated/ios/swift/RetryConfig.swift +47 -0
  973. package/nitrogen/generated/ios/swift/SearchMode.swift +56 -0
  974. package/nitrogen/generated/ios/swift/SearchParams.swift +130 -0
  975. package/nitrogen/generated/ios/swift/SleepTimer.swift +19 -0
  976. package/nitrogen/generated/ios/swift/SleepTimerEndOfTrack.swift +29 -0
  977. package/nitrogen/generated/ios/swift/SleepTimerTime.swift +29 -0
  978. package/nitrogen/generated/ios/swift/StarRating.swift +29 -0
  979. package/nitrogen/generated/ios/swift/ThumbsRating.swift +29 -0
  980. package/nitrogen/generated/ios/swift/TimedMetadata.swift +114 -0
  981. package/nitrogen/generated/ios/swift/Track.swift +320 -0
  982. package/nitrogen/generated/ios/swift/TrackLoadEvent.swift +45 -0
  983. package/nitrogen/generated/ios/swift/TrackMetadata.swift +312 -0
  984. package/nitrogen/generated/ios/swift/TrackStyle.swift +40 -0
  985. package/nitrogen/generated/ios/swift/TransformableRequestConfig.swift +248 -0
  986. package/nitrogen/generated/ios/swift/UpdateOptions.swift +143 -0
  987. package/nitrogen/generated/ios/swift/Variant_Bool_AndroidAudioOffloadSettings.swift +18 -0
  988. package/nitrogen/generated/ios/swift/Variant_Bool_RetryConfig.swift +18 -0
  989. package/nitrogen/generated/ios/swift/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.swift +20 -0
  990. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +18 -0
  991. package/nitrogen/generated/ios/swift/Variant_NullType_NotificationButtonLayout.swift +18 -0
  992. package/nitrogen/generated/shared/c++/AndroidAudioContentType.hpp +88 -0
  993. package/nitrogen/generated/shared/c++/AndroidAudioOffloadSettings.hpp +87 -0
  994. package/nitrogen/generated/shared/c++/AndroidOptions.hpp +109 -0
  995. package/nitrogen/generated/shared/c++/AndroidPlayerWakeMode.hpp +80 -0
  996. package/nitrogen/generated/shared/c++/AndroidUpdateOptions.hpp +109 -0
  997. package/nitrogen/generated/shared/c++/AppKilledPlaybackBehavior.hpp +80 -0
  998. package/nitrogen/generated/shared/c++/ArtworkRequestConfig.hpp +141 -0
  999. package/nitrogen/generated/shared/c++/BatteryOptimizationStatus.hpp +80 -0
  1000. package/nitrogen/generated/shared/c++/BatteryOptimizationStatusChangedEvent.hpp +84 -0
  1001. package/nitrogen/generated/shared/c++/BatteryWarningPendingChangedEvent.hpp +83 -0
  1002. package/nitrogen/generated/shared/c++/BrowseError.hpp +83 -0
  1003. package/nitrogen/generated/shared/c++/BrowserSourceCallbackParam.hpp +89 -0
  1004. package/nitrogen/generated/shared/c++/CarPlayNowPlayingButton.hpp +84 -0
  1005. package/nitrogen/generated/shared/c++/CarPlaySiriListButtonPosition.hpp +76 -0
  1006. package/nitrogen/generated/shared/c++/ChapterMetadata.hpp +96 -0
  1007. package/nitrogen/generated/shared/c++/EqualizerSettings.hpp +113 -0
  1008. package/nitrogen/generated/shared/c++/FavoriteChangedEvent.hpp +88 -0
  1009. package/nitrogen/generated/shared/c++/FormatNavigationErrorParams.hpp +96 -0
  1010. package/nitrogen/generated/shared/c++/FormattedNavigationError.hpp +87 -0
  1011. package/nitrogen/generated/shared/c++/HeartRating.hpp +83 -0
  1012. package/nitrogen/generated/shared/c++/HttpMethod.hpp +96 -0
  1013. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +207 -0
  1014. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +375 -0
  1015. package/nitrogen/generated/shared/c++/IOSCategory.hpp +92 -0
  1016. package/nitrogen/generated/shared/c++/IOSCategoryMode.hpp +104 -0
  1017. package/nitrogen/generated/shared/c++/IOSCategoryOptions.hpp +96 -0
  1018. package/nitrogen/generated/shared/c++/IOSCategoryPolicy.hpp +80 -0
  1019. package/nitrogen/generated/shared/c++/ImageContext.hpp +87 -0
  1020. package/nitrogen/generated/shared/c++/ImageQueryParams.hpp +88 -0
  1021. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +98 -0
  1022. package/nitrogen/generated/shared/c++/ImageSource.hpp +99 -0
  1023. package/nitrogen/generated/shared/c++/IosOutput.hpp +93 -0
  1024. package/nitrogen/generated/shared/c++/IosOutputType.hpp +112 -0
  1025. package/nitrogen/generated/shared/c++/MediaRequestConfig.hpp +131 -0
  1026. package/nitrogen/generated/shared/c++/MediaTransformParams.hpp +92 -0
  1027. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +150 -0
  1028. package/nitrogen/generated/shared/c++/NativeRouteEntry.hpp +139 -0
  1029. package/nitrogen/generated/shared/c++/NativeUpdateOptions.hpp +111 -0
  1030. package/nitrogen/generated/shared/c++/NavigationError.hpp +98 -0
  1031. package/nitrogen/generated/shared/c++/NavigationErrorEvent.hpp +85 -0
  1032. package/nitrogen/generated/shared/c++/NavigationErrorType.hpp +88 -0
  1033. package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +109 -0
  1034. package/nitrogen/generated/shared/c++/NotificationButton.hpp +88 -0
  1035. package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +102 -0
  1036. package/nitrogen/generated/shared/c++/NowPlayingMetadata.hpp +132 -0
  1037. package/nitrogen/generated/shared/c++/NowPlayingUpdate.hpp +88 -0
  1038. package/nitrogen/generated/shared/c++/Options.hpp +113 -0
  1039. package/nitrogen/generated/shared/c++/PartialAndroidSetupPlayerOptions.hpp +129 -0
  1040. package/nitrogen/generated/shared/c++/PartialIOSSetupPlayerOptions.hpp +111 -0
  1041. package/nitrogen/generated/shared/c++/PartialSetupPlayerOptions.hpp +104 -0
  1042. package/nitrogen/generated/shared/c++/PercentageRating.hpp +83 -0
  1043. package/nitrogen/generated/shared/c++/Playback.hpp +92 -0
  1044. package/nitrogen/generated/shared/c++/PlaybackActiveTrackChangedEvent.hpp +101 -0
  1045. package/nitrogen/generated/shared/c++/PlaybackError.hpp +87 -0
  1046. package/nitrogen/generated/shared/c++/PlaybackErrorEvent.hpp +85 -0
  1047. package/nitrogen/generated/shared/c++/PlaybackPlayWhenReadyChangedEvent.hpp +83 -0
  1048. package/nitrogen/generated/shared/c++/PlaybackProgressUpdatedEvent.hpp +95 -0
  1049. package/nitrogen/generated/shared/c++/PlaybackQueueEndedEvent.hpp +87 -0
  1050. package/nitrogen/generated/shared/c++/PlaybackState.hpp +104 -0
  1051. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +127 -0
  1052. package/nitrogen/generated/shared/c++/PlayingState.hpp +87 -0
  1053. package/nitrogen/generated/shared/c++/Progress.hpp +91 -0
  1054. package/nitrogen/generated/shared/c++/RatingType.hpp +96 -0
  1055. package/nitrogen/generated/shared/c++/RemoteJumpBackwardEvent.hpp +83 -0
  1056. package/nitrogen/generated/shared/c++/RemoteJumpForwardEvent.hpp +83 -0
  1057. package/nitrogen/generated/shared/c++/RemotePlayIdEvent.hpp +88 -0
  1058. package/nitrogen/generated/shared/c++/RemotePlaySearchEvent.hpp +83 -0
  1059. package/nitrogen/generated/shared/c++/RemoteSeekEvent.hpp +83 -0
  1060. package/nitrogen/generated/shared/c++/RemoteSetRatingEvent.hpp +94 -0
  1061. package/nitrogen/generated/shared/c++/RemoteSkipEvent.hpp +83 -0
  1062. package/nitrogen/generated/shared/c++/RepeatMode.hpp +80 -0
  1063. package/nitrogen/generated/shared/c++/RepeatModeChangedEvent.hpp +84 -0
  1064. package/nitrogen/generated/shared/c++/RequestConfig.hpp +115 -0
  1065. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +175 -0
  1066. package/nitrogen/generated/shared/c++/RetryConfig.hpp +87 -0
  1067. package/nitrogen/generated/shared/c++/SearchMode.hpp +92 -0
  1068. package/nitrogen/generated/shared/c++/SearchParams.hpp +110 -0
  1069. package/nitrogen/generated/shared/c++/SleepTimerEndOfTrack.hpp +83 -0
  1070. package/nitrogen/generated/shared/c++/SleepTimerTime.hpp +83 -0
  1071. package/nitrogen/generated/shared/c++/StarRating.hpp +83 -0
  1072. package/nitrogen/generated/shared/c++/ThumbsRating.hpp +83 -0
  1073. package/nitrogen/generated/shared/c++/TimedMetadata.hpp +100 -0
  1074. package/nitrogen/generated/shared/c++/Track.hpp +161 -0
  1075. package/nitrogen/generated/shared/c++/TrackLoadEvent.hpp +93 -0
  1076. package/nitrogen/generated/shared/c++/TrackMetadata.hpp +144 -0
  1077. package/nitrogen/generated/shared/c++/TrackStyle.hpp +76 -0
  1078. package/nitrogen/generated/shared/c++/TransformableRequestConfig.hpp +124 -0
  1079. package/nitrogen/generated/shared/c++/UpdateOptions.hpp +111 -0
  1080. package/package.json +117 -6
  1081. package/src/AudioBrowser.ts +4 -0
  1082. package/src/features/battery.ts +176 -0
  1083. package/src/features/browser.ts +316 -0
  1084. package/src/features/equalizer.ts +64 -0
  1085. package/src/features/errors.ts +196 -0
  1086. package/src/features/favorites.ts +102 -0
  1087. package/src/features/index.ts +23 -0
  1088. package/src/features/metadata.ts +130 -0
  1089. package/src/features/network.ts +34 -0
  1090. package/src/features/nowPlaying.ts +56 -0
  1091. package/src/features/output.ts +50 -0
  1092. package/src/features/playback/controls.ts +66 -0
  1093. package/src/features/playback/index.ts +7 -0
  1094. package/src/features/playback/playWhenReady.ts +57 -0
  1095. package/src/features/playback/playing.ts +40 -0
  1096. package/src/features/playback/progress.ts +122 -0
  1097. package/src/features/playback/rate.ts +22 -0
  1098. package/src/features/playback/state.ts +72 -0
  1099. package/src/features/playback/volume.ts +59 -0
  1100. package/src/features/player/index.ts +2 -0
  1101. package/src/features/player/options.ts +479 -0
  1102. package/src/features/player/setup.ts +551 -0
  1103. package/src/features/queue/activeTrack.ts +59 -0
  1104. package/src/features/queue/index.ts +4 -0
  1105. package/src/features/queue/queue.ts +173 -0
  1106. package/src/features/queue/repeatMode.ts +58 -0
  1107. package/src/features/queue/shuffle.ts +49 -0
  1108. package/src/features/rating.ts +17 -0
  1109. package/src/features/remoteControls.ts +341 -0
  1110. package/src/features/sleepTimer.ts +186 -0
  1111. package/src/index.ts +5 -0
  1112. package/src/native.ts +5 -0
  1113. package/src/native.web.ts +4 -0
  1114. package/src/specs/audio-browser.nitro.ts +325 -0
  1115. package/src/types/browser-native.ts +68 -0
  1116. package/src/types/browser-nodes.ts +222 -0
  1117. package/src/types/browser.ts +828 -0
  1118. package/src/types/index.ts +2 -0
  1119. package/src/types/player.ts +69 -0
  1120. package/src/utils/LazyNativeEmitter.ts +58 -0
  1121. package/src/utils/NativeUpdatedValue.ts +56 -0
  1122. package/src/utils/resolveAssetSource.ts +4 -0
  1123. package/src/utils/useDebug.ts +283 -0
  1124. package/src/utils/useNativeUpdatedValue.ts +41 -0
  1125. package/src/utils/validation.ts +27 -0
  1126. package/src/web/NativeAudioBrowser.ts +884 -0
  1127. package/src/web/SimpleRouter.test.ts +160 -0
  1128. package/src/web/SimpleRouter.ts +194 -0
  1129. package/src/web/TrackPlayer/Event.ts +11 -0
  1130. package/src/web/TrackPlayer/Player.ts +351 -0
  1131. package/src/web/TrackPlayer/PlaylistPlayer.ts +346 -0
  1132. package/src/web/TrackPlayer/RepeatMode.ts +7 -0
  1133. package/src/web/TrackPlayer/SetupNotCalledError.ts +5 -0
  1134. package/src/web/TrackPlayer/SleepTimer.ts +71 -0
  1135. package/src/web/TrackPlayer/State.ts +15 -0
  1136. package/src/web/TrackPlayer/index.ts +4 -0
  1137. package/src/web/browser/BrowserManager.ts +699 -0
  1138. package/src/web/browser/FavoriteManager.ts +79 -0
  1139. package/src/web/browser/NavigationErrorManager.ts +119 -0
  1140. package/src/web/browser/SearchManager.ts +88 -0
  1141. package/src/web/http/HttpClient.ts +125 -0
  1142. package/src/web/http/RequestConfigBuilder.ts +363 -0
  1143. package/src/web/player/NowPlayingManager.ts +89 -0
  1144. package/src/web/player/OptionsManager.ts +102 -0
  1145. package/src/web/util/BrowserPathHelper.ts +148 -0
  1146. package/src/web/util/shuffle.ts +14 -0
  1147. package/index.js +0 -1
@@ -0,0 +1,771 @@
1
+ import CarPlay
2
+ import Foundation
3
+ import NitroModules
4
+ import os.log
5
+
6
+ /// Controller managing CarPlay templates and navigation.
7
+ ///
8
+ /// Responsibilities:
9
+ /// - Creates and manages CPTabBarTemplate from browser tabs
10
+ /// - Converts browser content to CPListTemplate for navigation
11
+ /// - Handles item selection for playback and navigation
12
+ /// - Delegates image loading to CarPlayImageLoader
13
+ /// - Delegates Now Playing management to CarPlayNowPlayingManager
14
+ ///
15
+ /// This class is exposed to Objective-C for use by RNABCarPlaySceneDelegate.
16
+ @MainActor
17
+ @objc(RNABCarPlayController)
18
+ public final class RNABCarPlayController: NSObject {
19
+ // Force the linker to include RNABMediaIntentHandler so NSClassFromString can find it
20
+ @objc public static let mediaIntentHandlerClass: AnyClass = RNABMediaIntentHandler.self
21
+
22
+ private let logger = Logger(subsystem: "com.audiobrowser", category: "CarPlayController")
23
+
24
+ private let interfaceController: CPInterfaceController
25
+ private weak var audioBrowser: HybridAudioBrowser?
26
+ private var trackSelector: TrackSelector?
27
+
28
+ /// Track content subscriptions
29
+ private var isStarted = false
30
+ private var listenerRemovals: [() -> Void] = []
31
+
32
+ /// Current navigation stack paths (for back navigation context)
33
+ private var navigationStack: [String] = []
34
+
35
+ /// Key (src ?? url) of the item currently being selected.
36
+ /// Prevents duplicate taps from triggering parallel async operations.
37
+ private var pendingSelectionKey: String?
38
+
39
+ /// URLs currently being resolved for navigation.
40
+ /// Prevents duplicate taps from pushing the same template twice.
41
+ private var pendingNavigationUrls: Set<String> = []
42
+
43
+ /// Helper object for CPInterfaceControllerDelegate conformance
44
+ private var interfaceDelegate: InterfaceControllerDelegate?
45
+
46
+ /// Image loading service for CarPlay artwork
47
+ private var imageLoader: CarPlayImageLoader?
48
+
49
+ /// List item and section factory
50
+ private var listItemFactory: CarPlayListItemFactory?
51
+
52
+ /// Now Playing template and button management
53
+ private let nowPlayingManager: CarPlayNowPlayingManager
54
+
55
+ /// Convenience accessor for browser config
56
+ private var config: BrowserConfig {
57
+ audioBrowser?.browserManager.config ?? BrowserConfig()
58
+ }
59
+
60
+ /// Checks if the given src matches the currently active (loaded) track
61
+ private func isActiveTrack(src: String) -> Bool {
62
+ audioBrowser?.getPlayer()?.currentTrack?.src == src
63
+ }
64
+
65
+ // MARK: - Initialization
66
+
67
+ @objc
68
+ public init(interfaceController: CPInterfaceController) {
69
+ self.interfaceController = interfaceController
70
+ audioBrowser = HybridAudioBrowser.shared
71
+ nowPlayingManager = CarPlayNowPlayingManager(interfaceController: interfaceController)
72
+ super.init()
73
+ nowPlayingManager.listItemFactory = { [weak self] track, handler in
74
+ self?.listItemFactory?.createListItem(for: track, handler: handler)
75
+ ?? CPListItem(text: track.title, detailText: nil)
76
+ }
77
+ }
78
+
79
+ // MARK: - Lifecycle
80
+
81
+ @objc
82
+ public func start() {
83
+ guard !isStarted else { return }
84
+ isStarted = true
85
+
86
+ logger.info("Starting CarPlay controller")
87
+
88
+ // Set up interface controller delegate for template lifecycle events
89
+ let delegate = InterfaceControllerDelegate(controller: self)
90
+ interfaceDelegate = delegate
91
+ interfaceController.delegate = delegate
92
+
93
+ // Show loading template while waiting
94
+ showLoadingTemplate()
95
+
96
+ // Wait for both browser and player to be ready
97
+ Task { @MainActor in
98
+ let (browser, _) = await playerAndConfiguredBrowser.wait()
99
+ guard self.isStarted else { return }
100
+ self.logger.debug("AudioBrowser and player ready, setting up CarPlay")
101
+ self.audioBrowser = browser
102
+ self.trackSelector = TrackSelector(browserManager: browser.browserManager)
103
+
104
+ // Create image loader with CarPlay display traits
105
+ self.imageLoader = CarPlayImageLoader(
106
+ carTraitCollection: self.interfaceController.carTraitCollection,
107
+ browserManager: browser.browserManager
108
+ )
109
+
110
+ // Create list item factory
111
+ let factory = CarPlayListItemFactory(
112
+ isActiveTrack: { [weak self] src in self?.isActiveTrack(src: src) ?? false },
113
+ onItemSelected: { [weak self] track, completion in
114
+ self?.handleItemSelection(track: track, completion: completion)
115
+ }
116
+ )
117
+ factory.imageLoader = self.imageLoader
118
+ self.listItemFactory = factory
119
+
120
+ self.setupContentSubscriptions()
121
+
122
+ // Wire up now playing manager
123
+ self.nowPlayingManager.setup(audioBrowser: browser)
124
+
125
+ await self.buildInitialInterface()
126
+ }
127
+ }
128
+
129
+ @objc
130
+ public func stop() {
131
+ guard isStarted else { return }
132
+ isStarted = false
133
+
134
+ logger.info("Stopping CarPlay controller")
135
+
136
+ // Remove all emitter listeners
137
+ for removal in listenerRemovals { removal() }
138
+ listenerRemovals.removeAll()
139
+
140
+ // Clear config callback
141
+ audioBrowser?.browserManager.onConfigChanged = nil
142
+
143
+ nowPlayingManager.teardown()
144
+ listItemFactory = nil
145
+
146
+ navigationStack.removeAll()
147
+ pendingSelectionKey = nil
148
+ pendingNavigationUrls.removeAll()
149
+ }
150
+
151
+ // MARK: - Content Subscriptions
152
+
153
+ private func setupContentSubscriptions() {
154
+ guard let audioBrowser else {
155
+ logger.warning("AudioBrowser not available for CarPlay")
156
+ return
157
+ }
158
+
159
+ // Subscribe to tab changes
160
+ let tabsToken = audioBrowser.tabsChangedEmitter.addListener { [weak self] tabs in
161
+ Task { @MainActor in
162
+ self?.handleTabsChanged(tabs)
163
+ }
164
+ }
165
+ listenerRemovals.append { [weak audioBrowser] in
166
+ audioBrowser?.tabsChangedEmitter.removeListener(tabsToken)
167
+ }
168
+
169
+ // Subscribe to content changes
170
+ let contentToken = audioBrowser.contentChangedEmitter.addListener { [weak self] content in
171
+ Task { @MainActor in
172
+ self?.handleContentChanged(content)
173
+ }
174
+ }
175
+ listenerRemovals.append { [weak audioBrowser] in
176
+ audioBrowser?.contentChangedEmitter.removeListener(contentToken)
177
+ }
178
+
179
+ // Subscribe to config changes (for Now Playing buttons)
180
+ audioBrowser.browserManager.onConfigChanged = { [weak self] _ in
181
+ Task { @MainActor in
182
+ self?.nowPlayingManager.setupNowPlayingButtons()
183
+ }
184
+ }
185
+
186
+ // Subscribe to favorite changes (for Now Playing button)
187
+ let favoriteToken = audioBrowser.favoriteChangedEmitter.addListener { [weak self] _ in
188
+ Task { @MainActor in
189
+ self?.nowPlayingManager.updateFavoriteButtonState()
190
+ }
191
+ }
192
+ listenerRemovals.append { [weak audioBrowser] in
193
+ audioBrowser?.favoriteChangedEmitter.removeListener(favoriteToken)
194
+ }
195
+
196
+ // Subscribe to external content changes (from notifyContentChanged)
197
+ let externalContentToken = audioBrowser.externalContentChangedEmitter.addListener { [weak self] path in
198
+ self?.notifyContentChanged(path: path)
199
+ }
200
+ listenerRemovals.append { [weak audioBrowser] in
201
+ audioBrowser?.externalContentChangedEmitter.removeListener(externalContentToken)
202
+ }
203
+
204
+ // Subscribe to active track changes (for playing indicator in lists)
205
+ let activeTrackToken = audioBrowser.activeTrackChangedEmitter.addListener { [weak self] event in
206
+ Task { @MainActor in
207
+ self?.handleActiveTrackChanged(event)
208
+ }
209
+ }
210
+ listenerRemovals.append { [weak audioBrowser] in
211
+ audioBrowser?.activeTrackChangedEmitter.removeListener(activeTrackToken)
212
+ }
213
+
214
+ // Subscribe to queue changes (for Up Next list updates)
215
+ let queueToken = audioBrowser.queueChangedEmitter.addListener { [weak self] tracks in
216
+ Task { @MainActor in
217
+ self?.nowPlayingManager.handleQueueChanged(tracks)
218
+ }
219
+ }
220
+ listenerRemovals.append { [weak audioBrowser] in
221
+ audioBrowser?.queueChangedEmitter.removeListener(queueToken)
222
+ }
223
+
224
+ // Subscribe to navigation errors (from browser layer)
225
+ let navErrorToken = audioBrowser.navigationErrorEmitter.addListener { [weak self] event in
226
+ Task { @MainActor in
227
+ self?.handleNavigationError(event)
228
+ }
229
+ }
230
+ listenerRemovals.append { [weak audioBrowser] in
231
+ audioBrowser?.navigationErrorEmitter.removeListener(navErrorToken)
232
+ }
233
+ }
234
+
235
+ /// Handles navigation errors from the browser layer, displaying them in CarPlay
236
+ @MainActor
237
+ private func handleNavigationError(_ event: NavigationErrorEvent) {
238
+ guard let error = event.error else { return }
239
+ logger.warning("Navigation error: \(error.code.stringValue) - \(error.message)")
240
+ // Use current path from navigation stack, or "/" as fallback
241
+ let path = navigationStack.last ?? "/"
242
+ showNavigationError(error, path: path)
243
+ }
244
+
245
+ // MARK: - Initial Interface
246
+
247
+ @MainActor
248
+ private func buildInitialInterface() async {
249
+ guard let audioBrowser else {
250
+ logger.error("AudioBrowser not available")
251
+ showErrorTemplate(message: "Audio browser not initialized")
252
+ return
253
+ }
254
+
255
+ // Get tabs from browser manager
256
+ let tabs = audioBrowser.browserManager.getTabs()
257
+
258
+ if let tabs, !tabs.isEmpty {
259
+ await showTabBar(tabs: tabs)
260
+ } else {
261
+ // No tabs yet - query them
262
+ logger.info("No tabs available, querying...")
263
+ do {
264
+ let queriedTabs = try await audioBrowser.browserManager.queryTabs()
265
+ if !queriedTabs.isEmpty {
266
+ await showTabBar(tabs: queriedTabs)
267
+ } else {
268
+ showErrorTemplate(message: "No content available")
269
+ }
270
+ } catch {
271
+ logger.error("Failed to query tabs: \(error.localizedDescription)")
272
+ showErrorTemplate(message: "Failed to load content")
273
+ }
274
+ }
275
+ }
276
+
277
+ /// Shows a loading template while waiting for initialization
278
+ private func showLoadingTemplate() {
279
+ let template = CPListTemplate(
280
+ title: nil,
281
+ sections: [],
282
+ )
283
+ interfaceController.setRootTemplate(template, animated: false, completion: nil)
284
+ }
285
+
286
+ // MARK: - Tab Bar
287
+
288
+ @MainActor
289
+ private func showTabBar(tabs: [Track]) async {
290
+ logger.info("Building tab bar with \(tabs.count) tabs")
291
+
292
+ let maxTabs = CPTabBarTemplate.maximumTabCount
293
+
294
+ // Create tab templates synchronously (empty shells) - don't block on content loading
295
+ let tabTemplates: [CPListTemplate] = tabs.prefix(maxTabs).map { tab in
296
+ createTabTemplate(for: tab)
297
+ }
298
+
299
+ // Set the tab bar immediately so UI appears fast
300
+ logger.info("Setting tab bar root template with \(tabTemplates.count) templates")
301
+ let tabBar = CPTabBarTemplate(templates: tabTemplates)
302
+ interfaceController.setRootTemplate(tabBar, animated: true, completion: nil)
303
+
304
+ // Load content for the first tab only - others load lazily when selected
305
+ if let firstTemplate = tabTemplates.first, let firstTab = tabs.first, let url = firstTab.url {
306
+ await loadContent(for: url, into: firstTemplate)
307
+ }
308
+ }
309
+
310
+ /// Creates a tab template shell without loading content (synchronous)
311
+ private func createTabTemplate(for track: Track) -> CPListTemplate {
312
+ let template = CPListTemplate(
313
+ title: track.title,
314
+ sections: [],
315
+ )
316
+
317
+ // Set tab title explicitly (required for tab bar display)
318
+ template.tabTitle = track.title
319
+
320
+ // Store path for lazy loading and refresh
321
+ if let url = track.url {
322
+ template.userInfo = ["path": url] as [String: Any]
323
+ }
324
+
325
+ // Set tab image - CarPlay requires an image for proper tab display
326
+ // Tab bar icons are 24pt x 24pt per CarPlay Developer Guide
327
+ // https://developer.apple.com/download/files/CarPlay-Developer-Guide.pdf
328
+ template.tabImage = imageLoader?.defaultTabImage()
329
+
330
+ if let artwork = track.artwork, SFSymbolRenderer.isSFSymbol(artwork) {
331
+ let (symbolName, _, _) = SFSymbolRenderer.parseArtwork(artwork)
332
+ if let image = imageLoader?.sfSymbolImage(symbolName) {
333
+ template.tabImage = image
334
+ }
335
+ } else if track.artwork != nil || track.artworkSource != nil {
336
+ // loadArtwork handles both artwork and artworkSource
337
+ let tabImageSize = CGSize(width: 24, height: 24)
338
+ imageLoader?.loadArtwork(for: track, size: tabImageSize) { [weak template] image in
339
+ Task { @MainActor in
340
+ if let image {
341
+ template?.tabImage = image
342
+ }
343
+ }
344
+ }
345
+ }
346
+
347
+ return template
348
+ }
349
+
350
+ // MARK: - List Templates
351
+
352
+ @MainActor
353
+ private func createListTemplate(
354
+ for resolvedTrack: ResolvedTrack,
355
+ path: String,
356
+ ) -> CPListTemplate {
357
+ let template = CPListTemplate(
358
+ title: resolvedTrack.title,
359
+ sections: [],
360
+ )
361
+ updateTemplate(template, with: resolvedTrack)
362
+ template.userInfo = ["path": path] as [String: Any]
363
+
364
+ return template
365
+ }
366
+
367
+ /// Finds the path associated with a template, if any
368
+ private func getPath(from template: CPTemplate) -> String? {
369
+ (template.userInfo as? [String: Any])?["path"] as? String
370
+ }
371
+
372
+ /// Updates a template's sections and assistant cell from resolved content.
373
+ private func updateTemplate(_ template: CPListTemplate, with resolvedTrack: ResolvedTrack) {
374
+ let sections = listItemFactory?.createSections(from: resolvedTrack) ?? []
375
+ template.updateSections(sections)
376
+ configureAssistantCell(on: template, from: resolvedTrack)
377
+ }
378
+
379
+ /// Configures the assistant cell ("Ask Siri to Play Audio") on a template
380
+ /// based on the `carPlaySiriListButton` property of the resolved content.
381
+ private func configureAssistantCell(on template: CPListTemplate, from resolvedTrack: ResolvedTrack) {
382
+ guard #available(iOS 15.4, *) else { return }
383
+ guard let position = resolvedTrack.carPlaySiriListButton else {
384
+ template.assistantCellConfiguration = nil
385
+ return
386
+ }
387
+ let cellPosition: CPListItem.AssistantCellPosition = position == .top ? .top : .bottom
388
+ template.assistantCellConfiguration = CPAssistantCellConfiguration(
389
+ position: cellPosition,
390
+ visibility: .always,
391
+ assistantAction: .playMedia,
392
+ )
393
+ }
394
+
395
+ // MARK: - Content Loading
396
+
397
+ @MainActor
398
+ private func loadContent(for path: String, into template: CPListTemplate) async {
399
+ guard let audioBrowser else { return }
400
+
401
+ do {
402
+ let resolved = try await audioBrowser.browserManager.resolve(path, useCache: true)
403
+ updateTemplate(template, with: resolved)
404
+ } catch {
405
+ logger.error("Failed to load content for \(path): \(error.localizedDescription)")
406
+ }
407
+ }
408
+
409
+ // MARK: - Selection Handling
410
+
411
+ private func handleItemSelection(track: Track, completion: @escaping () -> Void) {
412
+ logger.info("Selected track: \(track.title)")
413
+
414
+ guard let audioBrowser else {
415
+ completion()
416
+ return
417
+ }
418
+
419
+ // Deduplicate: ignore if the same item is already being loaded
420
+ let key = track.src ?? track.url
421
+ if let key, key == pendingSelectionKey {
422
+ completion()
423
+ return
424
+ }
425
+ pendingSelectionKey = key
426
+
427
+ // If this track is already loaded, resume playback and show Now Playing
428
+ if let src = track.src, isActiveTrack(src: src) {
429
+ pendingSelectionKey = nil
430
+ try? audioBrowser.play()
431
+ nowPlayingManager.showNowPlaying()
432
+ completion()
433
+ return
434
+ }
435
+
436
+ guard let player = audioBrowser.getPlayer(), let trackSelector else {
437
+ pendingSelectionKey = nil
438
+ completion()
439
+ return
440
+ }
441
+
442
+ Task {
443
+ defer { self.pendingSelectionKey = nil }
444
+ let result = await trackSelector.select(track: track, player: player)
445
+ switch result {
446
+ case .play(let intent):
447
+ self.executePlayback(intent, player: player)
448
+ self.nowPlayingManager.showNowPlaying()
449
+ case .intercepted:
450
+ self.nowPlayingManager.showNowPlaying()
451
+ case .browse(let url):
452
+ self.navigateToUrl(url, completion: completion)
453
+ return // navigateToUrl handles its own completion
454
+ case .none:
455
+ break
456
+ }
457
+ completion()
458
+ }
459
+ }
460
+
461
+ private func executePlayback(_ intent: TrackSelector.PlaybackIntent, player: TrackPlayer) {
462
+ switch intent {
463
+ case .skipTo(let index):
464
+ try? player.skipTo(index, playWhenReady: true)
465
+ case .setQueue(let tracks, let startIndex, let sourcePath):
466
+ player.setQueue(tracks, initialIndex: startIndex, playWhenReady: true, sourcePath: sourcePath)
467
+ case .loadTrack(let track):
468
+ player.load(track, playWhenReady: true)
469
+ }
470
+ }
471
+
472
+ /// Navigates to a browsable URL path, showing error action sheet on failure with retry option.
473
+ private func navigateToUrl(_ url: String, completion: @escaping () -> Void) {
474
+ guard let audioBrowser else {
475
+ completion()
476
+ return
477
+ }
478
+
479
+ // Deduplicate: ignore if already navigating to this URL
480
+ guard !pendingNavigationUrls.contains(url) else {
481
+ completion()
482
+ return
483
+ }
484
+ pendingNavigationUrls.insert(url)
485
+
486
+ Task {
487
+ defer { self.pendingNavigationUrls.remove(url) }
488
+ do {
489
+ let resolved = try await audioBrowser.browserManager.resolve(url, useCache: true)
490
+
491
+ // Guard against duplicate push if top template already shows this path
492
+ if let top = self.interfaceController.topTemplate,
493
+ self.getPath(from: top) == url
494
+ {
495
+ completion()
496
+ return
497
+ }
498
+
499
+ let listTemplate = self.createListTemplate(for: resolved, path: url)
500
+ self.navigationStack.append(url)
501
+ self.interfaceController.pushTemplate(listTemplate, animated: true, completion: nil)
502
+ completion()
503
+ } catch {
504
+ logger.error("Failed to navigate to \(url): \(error.localizedDescription)")
505
+ let navError = NavigationError.from(error)
506
+ self.showNavigationError(navError, path: url)
507
+ completion()
508
+ }
509
+ }
510
+ }
511
+
512
+ // MARK: - Content Change Handlers
513
+
514
+ @MainActor
515
+ private func handleTabsChanged(_ tabs: [Track]) {
516
+ logger.debug("Tabs changed: \(tabs.count) tabs")
517
+ // Rebuild tab bar if we're at the root
518
+ Task {
519
+ await showTabBar(tabs: tabs)
520
+ }
521
+ }
522
+
523
+ @MainActor
524
+ private func handleContentChanged(_ content: ResolvedTrack?) {
525
+ // This callback fires when the main browser's content changes.
526
+ // For CarPlay-specific refreshes (e.g., favorites), use notifyContentChanged instead.
527
+ guard let content else { return }
528
+ refreshTemplatesForPath(content.url, with: content)
529
+ }
530
+
531
+ @MainActor
532
+ private func handleActiveTrackChanged(_ event: PlaybackActiveTrackChangedEvent) {
533
+ logger.debug("handleActiveTrackChanged: \(event.lastTrack?.src ?? "nil") → \(event.track?.src ?? "nil")")
534
+ updatePlayingIndicators()
535
+ // Update favorite button to reflect the new track's favorite state
536
+ nowPlayingManager.updateFavoriteButtonState()
537
+ }
538
+
539
+ /// Updates the isPlaying state on all list items based on the current active track.
540
+ @MainActor
541
+ fileprivate func updatePlayingIndicators() {
542
+ var templates: [CPListTemplate] = []
543
+
544
+ if let tabBar = interfaceController.rootTemplate as? CPTabBarTemplate {
545
+ for template in tabBar.templates {
546
+ if let listTemplate = template as? CPListTemplate {
547
+ templates.append(listTemplate)
548
+ }
549
+ }
550
+ }
551
+
552
+ if let topTemplate = interfaceController.topTemplate as? CPListTemplate,
553
+ !templates.contains(where: { $0 === topTemplate })
554
+ {
555
+ templates.append(topTemplate)
556
+ }
557
+
558
+ for template in templates {
559
+ for section in template.sections {
560
+ for item in section.items {
561
+ guard let listItem = item as? CPListItem,
562
+ let itemSrc = listItem.carPlayItemInfo?.src
563
+ else { continue }
564
+
565
+ let isPlaying = isActiveTrack(src: itemSrc)
566
+ if listItem.isPlaying != isPlaying {
567
+ logger.debug("Updating isPlaying for \(itemSrc): \(listItem.isPlaying) → \(isPlaying)")
568
+ listItem.isPlaying = isPlaying
569
+ }
570
+ }
571
+ }
572
+ }
573
+ }
574
+
575
+ // MARK: - Public Content Notification
576
+
577
+ /// Notifies CarPlay that content at the given path has changed and should be refreshed.
578
+ /// Called from HybridAudioBrowser.notifyContentChanged() to update CarPlay lists.
579
+ ///
580
+ /// - Parameter path: The path where content has changed (e.g., "/favorites")
581
+ @objc
582
+ public func notifyContentChanged(path: String) {
583
+ guard isStarted else { return }
584
+
585
+ Task { @MainActor in
586
+ await refreshContentForPath(path)
587
+ }
588
+ }
589
+
590
+ /// Fetches fresh content for a path and updates any matching CarPlay templates.
591
+ @MainActor
592
+ private func refreshContentForPath(_ path: String) async {
593
+ guard let audioBrowser else { return }
594
+
595
+ logger.debug("Refreshing CarPlay content for path: \(path)")
596
+
597
+ // Fetch fresh content (bypassing cache since content changed)
598
+ do {
599
+ let resolved = try await audioBrowser.browserManager.resolve(path, useCache: false)
600
+ refreshTemplatesForPath(path, with: resolved)
601
+ } catch {
602
+ logger.error("Failed to refresh content for \(path): \(error.localizedDescription)")
603
+ }
604
+ }
605
+
606
+ /// Updates all CarPlay templates that are displaying the given path.
607
+ @MainActor
608
+ private func refreshTemplatesForPath(_ path: String, with content: ResolvedTrack) {
609
+ logger.debug("Content changed for path: \(path)")
610
+
611
+ // Check if the root template is a tab bar and refresh matching tabs
612
+ if let tabBar = interfaceController.rootTemplate as? CPTabBarTemplate {
613
+ for template in tabBar.templates {
614
+ guard let listTemplate = template as? CPListTemplate,
615
+ let templatePath = getPath(from: listTemplate),
616
+ templatePath == path
617
+ else { continue }
618
+
619
+ logger.info("Refreshing tab template for path: \(path)")
620
+ updateTemplate(listTemplate, with: content)
621
+ }
622
+ }
623
+
624
+ // Check if any template in the navigation stack matches the changed path
625
+ // The top template is the currently visible one
626
+ if let topTemplate = interfaceController.topTemplate as? CPListTemplate,
627
+ let templatePath = getPath(from: topTemplate),
628
+ templatePath == path
629
+ {
630
+ logger.info("Refreshing top template for path: \(path)")
631
+ updateTemplate(topTemplate, with: content)
632
+ }
633
+ }
634
+
635
+ // MARK: - Error Handling
636
+
637
+ /// Shows a navigation error using CPActionSheetTemplate.
638
+ /// - Parameters:
639
+ /// - error: The NavigationError to display
640
+ /// - path: The path that was being navigated to when the error occurred
641
+ private func showNavigationError(_ error: NavigationError, path: String) {
642
+ let defaultFormatted = error.defaultFormatted()
643
+
644
+ // Check if custom formatter is configured
645
+ logger.debug("showNavigationError: formatNavigationError is \(self.config.formatNavigationError != nil ? "set" : "nil")")
646
+ if let formatter = config.formatNavigationError {
647
+ logger.debug("Calling formatNavigationError callback...")
648
+ // Call the JS callback and handle result
649
+ let params = FormatNavigationErrorParams(error: error, defaultFormatted: defaultFormatted, path: path)
650
+ formatter(params)
651
+ .then { [weak self] customDisplay in
652
+ self?.logger.debug("formatNavigationError returned: \(String(describing: customDisplay))")
653
+ self?.presentErrorActionSheet(customDisplay: customDisplay ?? defaultFormatted)
654
+ }
655
+ .catch { [weak self] callbackError in
656
+ self?.logger.error("formatNavigationError failed: \(callbackError)")
657
+ // On error, fall back to defaults
658
+ self?.presentErrorActionSheet(customDisplay: defaultFormatted)
659
+ }
660
+ } else {
661
+ presentErrorActionSheet(customDisplay: defaultFormatted)
662
+ }
663
+ }
664
+
665
+ /// Presents the error action sheet with the given display info.
666
+ /// - Parameter customDisplay: The formatted error to display
667
+ private func presentErrorActionSheet(customDisplay: FormattedNavigationError) {
668
+ // If another template is already presented, dismiss it first
669
+ if interfaceController.presentedTemplate != nil {
670
+ interfaceController.dismissTemplate(animated: false) { [weak self] _, _ in
671
+ self?.showErrorActionSheet(customDisplay: customDisplay)
672
+ }
673
+ } else {
674
+ showErrorActionSheet(customDisplay: customDisplay)
675
+ }
676
+ }
677
+
678
+ /// Actually shows the error action sheet (called after safety checks)
679
+ private func showErrorActionSheet(customDisplay: FormattedNavigationError) {
680
+ // OK action - dismiss the action sheet (use system-localized "OK")
681
+ let okTitle = Bundle(for: UIAlertController.self).localizedString(forKey: "OK", value: "OK", table: nil)
682
+ let ok = CPAlertAction(title: okTitle, style: .cancel) { [weak self] _ in
683
+ self?.interfaceController.dismissTemplate(animated: true, completion: nil)
684
+ }
685
+
686
+ let actionSheet = CPActionSheetTemplate(
687
+ title: customDisplay.title,
688
+ message: customDisplay.message,
689
+ actions: [ok],
690
+ )
691
+
692
+ interfaceController.presentTemplate(actionSheet, animated: true, completion: nil)
693
+ }
694
+
695
+ /// Shows a simple error template as root (for initialization errors when no other template exists)
696
+ private func showErrorTemplate(message: String) {
697
+ // CPAlertTemplate cannot be set as root - use a list template instead
698
+ let errorItem = CPListItem(text: message, detailText: nil)
699
+ errorItem.isEnabled = false
700
+ let template = CPListTemplate(
701
+ title: "Error",
702
+ sections: [CPListSection(items: [errorItem])],
703
+ )
704
+ interfaceController.setRootTemplate(template, animated: true, completion: nil)
705
+ }
706
+ }
707
+
708
+ // MARK: - CPInterfaceControllerDelegate
709
+
710
+ /// Separate delegate class to avoid exposing CPInterfaceControllerDelegate to Obj-C header
711
+ private final class InterfaceControllerDelegate: NSObject, CPInterfaceControllerDelegate {
712
+ private weak var controller: RNABCarPlayController?
713
+
714
+ init(controller: RNABCarPlayController) {
715
+ self.controller = controller
716
+ super.init()
717
+ }
718
+
719
+ func templateDidAppear(_ aTemplate: CPTemplate, animated _: Bool) {
720
+ guard let listTemplate = aTemplate as? CPListTemplate else { return }
721
+
722
+ // Update playing indicators when navigating back to a list template
723
+ controller?.updatePlayingIndicators()
724
+
725
+ // Lazy load content for tabs that haven't been loaded yet
726
+ controller?.loadContentIfNeeded(for: listTemplate)
727
+ }
728
+ }
729
+
730
+ // MARK: - Lazy Loading
731
+
732
+ private extension RNABCarPlayController {
733
+ /// Loads content for a template if it hasn't been loaded yet (lazy loading for tabs)
734
+ func loadContentIfNeeded(for template: CPListTemplate) {
735
+ // Skip if already has content
736
+ guard template.sections.isEmpty else { return }
737
+
738
+ // Get path from userInfo
739
+ guard let path = getPath(from: template) else { return }
740
+
741
+ logger.debug("Lazy loading content for tab: \(path)")
742
+
743
+ Task {
744
+ await loadContent(for: path, into: template)
745
+ }
746
+ }
747
+ }
748
+
749
+ // MARK: - UIImage Resize
750
+
751
+ extension UIImage {
752
+ /// Draws the image centered within the target size, maintaining aspect ratio
753
+ func resized(to targetSize: CGSize) -> UIImage? {
754
+ UIGraphicsBeginImageContextWithOptions(targetSize, false, 0.0)
755
+ defer { UIGraphicsEndImageContext() }
756
+
757
+ // Scale to fit while maintaining aspect ratio
758
+ let widthRatio = targetSize.width / size.width
759
+ let heightRatio = targetSize.height / size.height
760
+ let scale = min(widthRatio, heightRatio)
761
+
762
+ let scaledSize = CGSize(width: size.width * scale, height: size.height * scale)
763
+ let origin = CGPoint(
764
+ x: (targetSize.width - scaledSize.width) / 2,
765
+ y: (targetSize.height - scaledSize.height) / 2,
766
+ )
767
+
768
+ draw(in: CGRect(origin: origin, size: scaledSize))
769
+ return UIGraphicsGetImageFromCurrentImageContext()?.withRenderingMode(.alwaysTemplate)
770
+ }
771
+ }