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

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,1197 @@
1
+ package com.audiobrowser
2
+
3
+ import android.content.ComponentName
4
+ import android.content.Context
5
+ import android.content.Intent
6
+ import android.content.ServiceConnection
7
+ import android.os.Handler
8
+ import android.os.IBinder
9
+ import android.os.Looper
10
+ import androidx.annotation.Keep
11
+ import androidx.lifecycle.DefaultLifecycleObserver
12
+ import androidx.lifecycle.LifecycleOwner
13
+ import androidx.lifecycle.ProcessLifecycleOwner
14
+ import androidx.media3.session.MediaBrowser
15
+ import androidx.media3.session.SessionToken
16
+ import com.audiobrowser.browser.BrowserConfig
17
+ import com.audiobrowser.browser.BrowserManager
18
+ import com.audiobrowser.browser.handleTrackLoad
19
+ import com.audiobrowser.browser.CallbackException
20
+ import com.audiobrowser.browser.ContentNotFoundException
21
+ import com.audiobrowser.browser.HttpStatusException
22
+ import com.audiobrowser.browser.NetworkException
23
+ import com.audiobrowser.extension.NumberExt.Companion.toSeconds
24
+ import com.audiobrowser.http.RequestConfigBuilder
25
+ import com.audiobrowser.model.PlaybackMetadata
26
+ import com.audiobrowser.model.PlayerSetupOptions
27
+ import com.audiobrowser.model.PlayerUpdateOptions
28
+ import com.audiobrowser.util.BatteryOptimizationHelper
29
+ import com.audiobrowser.util.BatteryWarningStore
30
+ import com.audiobrowser.util.BrowserPathHelper
31
+ import com.audiobrowser.util.CoilBitmapLoader
32
+ import com.audiobrowser.util.SystemVolumeMonitor
33
+ import com.facebook.proguard.annotations.DoNotStrip
34
+ import com.google.common.util.concurrent.ListenableFuture
35
+ import com.margelo.nitro.NitroModules
36
+ import com.margelo.nitro.audiobrowser.ChapterMetadata
37
+ import com.margelo.nitro.audiobrowser.TimedMetadata
38
+ import com.margelo.nitro.audiobrowser.TrackMetadata
39
+ import com.margelo.nitro.audiobrowser.BatteryOptimizationStatus
40
+ import com.margelo.nitro.audiobrowser.BatteryOptimizationStatusChangedEvent
41
+ import com.margelo.nitro.audiobrowser.BatteryWarningPendingChangedEvent
42
+ import com.margelo.nitro.audiobrowser.EqualizerSettings
43
+ import com.margelo.nitro.audiobrowser.FavoriteChangedEvent
44
+ import com.margelo.nitro.audiobrowser.FormatNavigationErrorParams
45
+ import com.margelo.nitro.audiobrowser.FormattedNavigationError
46
+ import com.margelo.nitro.audiobrowser.HybridAudioBrowserSpec
47
+ import com.margelo.nitro.audiobrowser.IosOutput
48
+ import com.margelo.nitro.audiobrowser.MediaRequestConfig
49
+ import com.margelo.nitro.audiobrowser.NativeBrowserConfiguration
50
+ import com.margelo.nitro.audiobrowser.NativeUpdateOptions
51
+ import com.margelo.nitro.audiobrowser.NavigationError
52
+ import com.margelo.nitro.audiobrowser.NavigationErrorEvent
53
+ import com.margelo.nitro.audiobrowser.NavigationErrorType
54
+ import com.margelo.nitro.audiobrowser.NowPlayingMetadata
55
+ import com.margelo.nitro.audiobrowser.NowPlayingUpdate
56
+ import com.margelo.nitro.audiobrowser.Options
57
+ import com.margelo.nitro.audiobrowser.PartialSetupPlayerOptions
58
+ import com.margelo.nitro.audiobrowser.Playback
59
+ import com.margelo.nitro.audiobrowser.PlaybackActiveTrackChangedEvent
60
+ import com.margelo.nitro.audiobrowser.PlaybackError
61
+ import com.margelo.nitro.audiobrowser.PlaybackErrorEvent
62
+ import com.margelo.nitro.audiobrowser.PlaybackPlayWhenReadyChangedEvent
63
+ import com.margelo.nitro.audiobrowser.PlaybackProgressUpdatedEvent
64
+ import com.margelo.nitro.audiobrowser.PlaybackQueueEndedEvent
65
+ import com.margelo.nitro.audiobrowser.PlayingState
66
+ import com.margelo.nitro.audiobrowser.Progress
67
+ import com.margelo.nitro.audiobrowser.RemoteJumpBackwardEvent
68
+ import com.margelo.nitro.audiobrowser.RemoteJumpForwardEvent
69
+ import com.margelo.nitro.audiobrowser.RemotePlayIdEvent
70
+ import com.margelo.nitro.audiobrowser.RemotePlaySearchEvent
71
+ import com.margelo.nitro.audiobrowser.RemoteSeekEvent
72
+ import com.margelo.nitro.audiobrowser.RemoteSetRatingEvent
73
+ import com.margelo.nitro.audiobrowser.RemoteSkipEvent
74
+ import com.margelo.nitro.audiobrowser.RepeatMode
75
+ import com.margelo.nitro.audiobrowser.RepeatModeChangedEvent
76
+ import com.margelo.nitro.audiobrowser.RequestConfig
77
+ import com.margelo.nitro.audiobrowser.ResolvedTrack
78
+ import com.margelo.nitro.audiobrowser.SleepTimer
79
+ import com.margelo.nitro.audiobrowser.Track
80
+ import com.margelo.nitro.audiobrowser.UpdateOptions
81
+ import com.margelo.nitro.core.Promise
82
+ import java.util.concurrent.TimeUnit
83
+ import kotlin.coroutines.resume
84
+ import kotlin.coroutines.resumeWithException
85
+ import kotlin.coroutines.suspendCoroutine
86
+ import kotlinx.coroutines.CancellationException
87
+ import kotlinx.coroutines.Job
88
+ import kotlinx.coroutines.MainScope
89
+ import kotlinx.coroutines.cancelChildren
90
+ import kotlinx.coroutines.delay
91
+ import kotlinx.coroutines.launch
92
+ import kotlinx.coroutines.runBlocking
93
+ import timber.log.Timber
94
+
95
+ @Keep
96
+ @DoNotStrip
97
+ class AudioBrowser : HybridAudioBrowserSpec(), ServiceConnection {
98
+ private val mainScope = MainScope()
99
+ private var navigationJob: Job? = null
100
+ private val handler = Handler(Looper.getMainLooper())
101
+ private val context =
102
+ NitroModules.applicationContext
103
+ ?: throw IllegalStateException("NitroModules.applicationContext is null")
104
+
105
+ // MARK: Browser state
106
+ private var _configuration =
107
+ NativeBrowserConfiguration(
108
+ path = null,
109
+ request = null,
110
+ media = null,
111
+ artwork = null,
112
+ routes = null,
113
+ singleTrack = null,
114
+ handleTrackLoad = null,
115
+ androidControllerOfflineError = null,
116
+ carPlayUpNextButton = null,
117
+ carPlayNowPlayingButtons = null,
118
+ formatNavigationError = null,
119
+ )
120
+
121
+ internal val browserManager =
122
+ BrowserManager().apply {
123
+ setOnPathChanged { path -> onPathChanged(path) }
124
+ setOnContentChanged { content -> onContentChanged(content) }
125
+ setOnTabsChanged { tabs -> onTabsChanged(tabs) }
126
+ }
127
+
128
+ private val systemVolumeMonitor = SystemVolumeMonitor(context)
129
+
130
+ // MARK: Player state
131
+ private var updateOptions: PlayerUpdateOptions = PlayerUpdateOptions()
132
+ private var mediaBrowserFuture: ListenableFuture<MediaBrowser>? = null
133
+ private var setupOptions = PlayerSetupOptions()
134
+ private var connectedService: Service? = null
135
+ private var setupPromise: ((Unit) -> Unit)? = null
136
+
137
+ /** Post callback to main handler for consistent async delivery to JS - avoids deadlocks */
138
+ private fun post(block: () -> Unit) = handler.post(block)
139
+
140
+ // MARK: Browser callbacks
141
+ override var onPathChanged: (String) -> Unit = {}
142
+ override var onContentChanged: (ResolvedTrack?) -> Unit = {}
143
+ override var onTabsChanged: (Array<Track>) -> Unit = {}
144
+ override var onNavigationError: (NavigationErrorEvent) -> Unit = {}
145
+ override var onFormattedNavigationError: (FormattedNavigationError?) -> Unit = {}
146
+
147
+ // MARK: Player callbacks
148
+ override var onPlaybackChanged: (data: Playback) -> Unit = {}
149
+ override var onRemoteBookmark: () -> Unit = {}
150
+ override var onRemoteDislike: () -> Unit = {}
151
+ override var onRemoteJumpBackward: (RemoteJumpBackwardEvent) -> Unit = {}
152
+ override var onRemoteJumpForward: (RemoteJumpForwardEvent) -> Unit = {}
153
+ override var onRemoteLike: () -> Unit = {}
154
+ override var onRemoteNext: () -> Unit = {}
155
+ override var onRemotePause: () -> Unit = {}
156
+ override var onChapterMetadata: (chapters: Array<ChapterMetadata>) -> Unit = {}
157
+ override var onTrackMetadata: (metadata: TrackMetadata) -> Unit = {}
158
+ override var onTimedMetadata: (metadata: TimedMetadata) -> Unit = {}
159
+ override var onPlaybackActiveTrackChanged: (data: PlaybackActiveTrackChangedEvent) -> Unit = {}
160
+ override var onPlaybackError: (data: PlaybackErrorEvent) -> Unit = {}
161
+ override var onPlaybackPlayWhenReadyChanged: (data: PlaybackPlayWhenReadyChangedEvent) -> Unit =
162
+ {}
163
+ override var onPlaybackPlayingState: (data: PlayingState) -> Unit = {}
164
+ override var onPlaybackProgressUpdated: (data: PlaybackProgressUpdatedEvent) -> Unit = {}
165
+ override var onPlaybackQueueEnded: (data: PlaybackQueueEndedEvent) -> Unit = {}
166
+ override var onPlaybackQueueChanged: (queue: Array<Track>) -> Unit = {}
167
+ override var onPlaybackRepeatModeChanged: (data: RepeatModeChangedEvent) -> Unit = {}
168
+ override var onPlaybackShuffleModeChanged: (enabled: Boolean) -> Unit = {}
169
+ override var onRemotePlay: (() -> Unit) = {}
170
+ override var onRemotePlayId: (RemotePlayIdEvent) -> Unit = {}
171
+ override var onRemotePlaySearch: (RemotePlaySearchEvent) -> Unit = {}
172
+ override var onRemotePrevious: () -> Unit = {}
173
+ override var onRemoteSeek: (RemoteSeekEvent) -> Unit = {}
174
+ override var onRemoteSetRating: (RemoteSetRatingEvent) -> Unit = {}
175
+ override var onRemoteSkip: (RemoteSkipEvent) -> Unit = {}
176
+ override var onRemoteStop: () -> Unit = {}
177
+ override var onOptionsChanged: (Options) -> Unit = {}
178
+ override var onFavoriteChanged: (FavoriteChangedEvent) -> Unit = {}
179
+ override var onNowPlayingChanged: (NowPlayingMetadata) -> Unit = {}
180
+ override var onOnlineChanged: (Boolean) -> Unit = {}
181
+ override var onEqualizerChanged: (EqualizerSettings) -> Unit = {}
182
+ override var onSleepTimerChanged: (SleepTimer?) -> Unit = {}
183
+ override var onBatteryWarningPendingChanged: (BatteryWarningPendingChangedEvent) -> Unit = {}
184
+ override var onBatteryOptimizationStatusChanged: (BatteryOptimizationStatusChangedEvent) -> Unit =
185
+ {}
186
+ override var onSystemVolumeChanged: (Double) -> Unit = {}
187
+ override var onIosOutputChanged: (IosOutput) -> Unit = {}
188
+
189
+ // MARK: Remote handlers
190
+ override var handleRemoteBookmark: (() -> Unit)? = null
191
+ override var handleRemoteDislike: (() -> Unit)? = null
192
+ override var handleRemoteJumpBackward: ((RemoteJumpBackwardEvent) -> Unit)? = null
193
+ override var handleRemoteJumpForward: ((RemoteJumpForwardEvent) -> Unit)? = null
194
+ override var handleRemoteLike: (() -> Unit)? = null
195
+ override var handleRemoteNext: (() -> Unit)? = null
196
+ override var handleRemotePause: (() -> Unit)? = null
197
+ override var handleRemotePlay: (() -> Unit)? = null
198
+ override var handleRemotePlayId: ((RemotePlayIdEvent) -> Unit)? = null
199
+ override var handleRemotePlaySearch: ((RemotePlaySearchEvent) -> Unit)? = null
200
+ override var handleRemotePrevious: (() -> Unit)? = null
201
+ override var handleRemoteSeek: ((RemoteSeekEvent) -> Unit)? = null
202
+ override var handleRemoteSkip: (() -> Unit)? = null
203
+ override var handleRemoteStop: (() -> Unit)? = null
204
+
205
+ /** Lifecycle observer to check battery status when app comes to foreground */
206
+ private val lifecycleObserver =
207
+ object : DefaultLifecycleObserver {
208
+ override fun onStart(owner: LifecycleOwner) {
209
+ checkBatteryStatusChange()
210
+ }
211
+ }
212
+
213
+ init {
214
+ // Auto-bind to service if it's already running
215
+ launchInScope {
216
+ try {
217
+ Timber.d("Attempting to auto-bind to existing AudioBrowserService from AudioBrowser")
218
+ val intent = Intent(context, Service::class.java)
219
+ val bound = context.bindService(intent, this@AudioBrowser, Context.BIND_AUTO_CREATE)
220
+ Timber.d("Auto-bind result: $bound")
221
+
222
+ if (!bound) {
223
+ Timber.w("Failed to bind to AudioBrowserService - service may not be running")
224
+ }
225
+ } catch (e: Exception) {
226
+ Timber.e(e, "Failed to auto-bind to AudioBrowserService during initialization")
227
+ }
228
+ }
229
+
230
+ // Observe app lifecycle to check battery status on foreground
231
+ // Must run on main thread as required by LifecycleRegistry.addObserver
232
+ handler.post { ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleObserver) }
233
+
234
+ // Observe system volume changes
235
+ systemVolumeMonitor.setOnVolumeChanged { volume ->
236
+ post { onSystemVolumeChanged(volume) }
237
+ }
238
+ }
239
+
240
+ // ============================================================================
241
+ // MARK: Browser Configuration
242
+ // ============================================================================
243
+
244
+ internal fun buildConfig(): BrowserConfig {
245
+ return BrowserConfig(
246
+ request = _configuration.request,
247
+ media = _configuration.media,
248
+ artwork = _configuration.artwork,
249
+ routes = _configuration.routes,
250
+ singleTrack = _configuration.singleTrack ?: false,
251
+ androidControllerOfflineError = _configuration.androidControllerOfflineError ?: true,
252
+ )
253
+ }
254
+
255
+ /**
256
+ * Returns the artwork configuration for use by CoilBitmapLoader. This provides access to the base
257
+ * request config and artwork-specific config.
258
+ */
259
+ fun getArtworkConfig(): CoilBitmapLoader.ArtworkConfig? {
260
+ val artworkConfig = _configuration.artwork ?: return null
261
+ val baseConfig =
262
+ _configuration.request?.let { RequestConfigBuilder.toRequestConfig(it) }
263
+ ?: RequestConfig(null, null, null, null, null, null, null, null)
264
+ return CoilBitmapLoader.ArtworkConfig(baseConfig, artworkConfig)
265
+ }
266
+
267
+ /**
268
+ * Creates a request config for media URL transformation by merging base and media configs.
269
+ * Returns null if no media configuration is set.
270
+ */
271
+ fun getMediaRequestConfig(originalUrl: String): MediaRequestConfig? {
272
+ val mediaConfig = _configuration.media ?: return null
273
+
274
+ return try {
275
+ // Create base request config with the original URL as path
276
+ val baseConfig =
277
+ _configuration.request?.let { RequestConfigBuilder.toRequestConfig(it) }
278
+ ?: RequestConfig(null, null, null, null, null, null, null, null)
279
+ val urlRequestConfig = RequestConfig(null, originalUrl, null, null, null, null, null, null)
280
+ val mergedBaseConfig = RequestConfigBuilder.mergeConfig(baseConfig, urlRequestConfig)
281
+
282
+ // Apply media transformation
283
+ runBlocking { RequestConfigBuilder.mergeConfig(mergedBaseConfig, mediaConfig) }
284
+ } catch (e: Exception) {
285
+ Timber.e(e, "Failed to transform media URL: $originalUrl")
286
+ null
287
+ }
288
+ }
289
+
290
+ private fun hasValidConfiguration(): Boolean {
291
+ // Need at least one browsable route (not just search)
292
+ return _configuration.routes?.any { it.path != BrowserManager.SEARCH_ROUTE_PATH } == true
293
+ }
294
+
295
+ private fun getDefaultPath(): String? {
296
+ return try {
297
+ browserManager.config = buildConfig()
298
+ val tabs = runBlocking { browserManager.queryTabs() }
299
+ if (tabs.isNotEmpty()) {
300
+ Timber.d("Using first tab as default path: ${tabs[0].url}")
301
+ tabs[0].url
302
+ } else {
303
+ Timber.d("Using root path as default: /")
304
+ "/"
305
+ }
306
+ } catch (e: Exception) {
307
+ Timber.e(e, "Failed to get default path, falling back to /")
308
+ "/"
309
+ }
310
+ }
311
+
312
+ // ============================================================================
313
+ // MARK: Browser Properties
314
+ // ============================================================================
315
+
316
+ override var path: String?
317
+ get() = browserManager.getPath()
318
+ set(value) {
319
+ if (hasValidConfiguration()) {
320
+ browserManager.config = buildConfig()
321
+ (value ?: getDefaultPath())?.let { path ->
322
+ clearNavigationError()
323
+
324
+ // Cancel previous navigation to avoid race conditions
325
+ navigationJob?.cancel()
326
+
327
+ navigationJob =
328
+ mainScope.launch {
329
+ try {
330
+ browserManager.navigate(path)
331
+ } catch (e: CancellationException) {
332
+ throw e // Rethrow to properly cancel
333
+ } catch (e: Exception) {
334
+ handleBrowserException(e, path, "setting path: $path")
335
+ }
336
+ }
337
+ }
338
+ }
339
+ }
340
+
341
+ override var tabs: Array<Track>?
342
+ get() = browserManager.getTabs()
343
+ set(value) {}
344
+
345
+ override var configuration: NativeBrowserConfiguration
346
+ get() = _configuration
347
+ set(value) {
348
+ _configuration = value
349
+ browserManager.config = buildConfig()
350
+
351
+ // Notify player that browser configuration is ready (routes/tabs available)
352
+ // This allows Android Auto to start browsing content
353
+ connectedService?.player?.notifyBrowserConfigurationReady()
354
+
355
+ // Navigate to initial path or default to first tab
356
+ (value.path ?: getDefaultPath())?.let { path ->
357
+ clearNavigationError()
358
+
359
+ // Cancel previous navigation to avoid race conditions
360
+ navigationJob?.cancel()
361
+
362
+ navigationJob =
363
+ mainScope.launch {
364
+ try {
365
+ browserManager.navigate(path)
366
+ } catch (e: CancellationException) {
367
+ throw e // Rethrow to properly cancel
368
+ } catch (e: Exception) {
369
+ handleBrowserException(e, path, "setting configuration path: $path")
370
+ }
371
+ }
372
+ }
373
+ }
374
+
375
+ private var navigationError: NavigationError? = null
376
+ private var formattedNavigationError: FormattedNavigationError? = null
377
+
378
+ override fun getNavigationError(): NavigationError? = navigationError
379
+ override fun getFormattedNavigationError(): FormattedNavigationError? = formattedNavigationError
380
+
381
+ /** Creates a default formatted error from a NavigationError */
382
+ private fun defaultFormattedError(error: NavigationError): FormattedNavigationError {
383
+ val title = when (error.code) {
384
+ NavigationErrorType.CONTENT_NOT_FOUND -> "Content Not Found"
385
+ NavigationErrorType.NETWORK_ERROR -> "Network Error"
386
+ NavigationErrorType.HTTP_ERROR -> {
387
+ // Use system-localized HTTP status text (e.g., "Not Found", "Service Unavailable")
388
+ error.statusCode?.let { httpStatusText(it.toInt()) } ?: "Server Error"
389
+ }
390
+ NavigationErrorType.CALLBACK_ERROR -> "Error"
391
+ NavigationErrorType.UNKNOWN_ERROR -> "Error"
392
+ }
393
+ return FormattedNavigationError(title, error.message)
394
+ }
395
+
396
+ /** Returns localized HTTP status text for the given status code */
397
+ private fun httpStatusText(statusCode: Int): String {
398
+ return when (statusCode) {
399
+ 400 -> "Bad Request"
400
+ 401 -> "Unauthorized"
401
+ 403 -> "Forbidden"
402
+ 404 -> "Not Found"
403
+ 405 -> "Method Not Allowed"
404
+ 408 -> "Request Timeout"
405
+ 429 -> "Too Many Requests"
406
+ 500 -> "Internal Server Error"
407
+ 502 -> "Bad Gateway"
408
+ 503 -> "Service Unavailable"
409
+ 504 -> "Gateway Timeout"
410
+ else -> "Server Error"
411
+ }
412
+ }
413
+
414
+ private fun setNavigationError(
415
+ code: NavigationErrorType,
416
+ message: String,
417
+ path: String,
418
+ statusCode: Double? = null,
419
+ statusCodeSuccess: Boolean? = null,
420
+ ) {
421
+ val navError = NavigationError(code, message, statusCode, statusCodeSuccess)
422
+ navigationError = navError
423
+ onNavigationError(NavigationErrorEvent(navigationError))
424
+
425
+ // Format the error (async if using JS callback, sync for defaults)
426
+ val defaultFormatted = defaultFormattedError(navError)
427
+ val formatter = _configuration.formatNavigationError
428
+ if (formatter != null) {
429
+ mainScope.launch {
430
+ try {
431
+ val params = FormatNavigationErrorParams(navError, defaultFormatted, path)
432
+ val customFormatted = formatter(params).await()
433
+ formattedNavigationError = customFormatted ?: defaultFormatted
434
+ } catch (e: Exception) {
435
+ formattedNavigationError = defaultFormatted
436
+ }
437
+ onFormattedNavigationError(formattedNavigationError)
438
+ }
439
+ } else {
440
+ formattedNavigationError = defaultFormatted
441
+ onFormattedNavigationError(formattedNavigationError)
442
+ }
443
+ }
444
+
445
+ /** Maps common browser exceptions to navigation errors */
446
+ private fun handleBrowserException(e: Exception, path: String, logContext: String) {
447
+ when (e) {
448
+ is HttpStatusException -> {
449
+ Timber.e(e, "HTTP error $logContext")
450
+ setNavigationError(
451
+ NavigationErrorType.HTTP_ERROR,
452
+ e.message ?: "Server error",
453
+ path,
454
+ e.statusCode.toDouble(),
455
+ e.statusCode in 200..299,
456
+ )
457
+ }
458
+ is NetworkException -> {
459
+ Timber.e(e, "Network error $logContext")
460
+ setNavigationError(NavigationErrorType.NETWORK_ERROR, e.message ?: "Network request failed", path)
461
+ }
462
+ is ContentNotFoundException -> {
463
+ Timber.e(e, "Content not found $logContext")
464
+ setNavigationError(NavigationErrorType.CONTENT_NOT_FOUND, e.message ?: "Content not found", path)
465
+ }
466
+ is CallbackException -> {
467
+ Timber.e(e, "Callback error $logContext")
468
+ setNavigationError(NavigationErrorType.CALLBACK_ERROR, e.message ?: "An error occurred", path)
469
+ }
470
+ else -> {
471
+ Timber.e(e, "Unexpected error $logContext")
472
+ setNavigationError(NavigationErrorType.UNKNOWN_ERROR, e.message ?: "An unexpected error occurred", path)
473
+ }
474
+ }
475
+ }
476
+
477
+ private fun clearNavigationError() {
478
+ if (navigationError != null || formattedNavigationError != null) {
479
+ navigationError = null
480
+ formattedNavigationError = null
481
+ onNavigationError(NavigationErrorEvent(null))
482
+ onFormattedNavigationError(null)
483
+ }
484
+ }
485
+
486
+ // ============================================================================
487
+ // MARK: Browser Navigation Methods
488
+ // ============================================================================
489
+
490
+ override fun navigatePath(path: String) {
491
+ clearNavigationError()
492
+
493
+ // Cancel previous navigation to avoid race conditions
494
+ navigationJob?.cancel()
495
+
496
+ navigationJob =
497
+ mainScope.launch {
498
+ try {
499
+ Timber.d("Navigating to path: $path")
500
+ browserManager.navigate(path)
501
+ } catch (e: CancellationException) {
502
+ throw e // Rethrow to properly cancel
503
+ } catch (e: Exception) {
504
+ handleBrowserException(e, path, "navigating to path: $path")
505
+ }
506
+ }
507
+ }
508
+
509
+ override fun navigateTrack(track: Track) {
510
+ clearNavigationError()
511
+
512
+ // Cancel previous navigation to avoid race conditions
513
+ navigationJob?.cancel()
514
+
515
+ val url = track.url
516
+ navigationJob =
517
+ mainScope.launch {
518
+ try {
519
+ when {
520
+ // Check if this is a contextual URL (playable-only track with queue context)
521
+ url != null && BrowserPathHelper.isContextual(url) -> {
522
+ Timber.d("Navigating to contextual track URL: $url")
523
+
524
+ val parentPath = BrowserPathHelper.stripTrackId(url)
525
+ val trackId = BrowserPathHelper.extractTrackId(url)
526
+
527
+ // Check if queue already came from this parent path - just skip to the track
528
+ if (trackId != null && parentPath == player.queueSourcePath) {
529
+ val index = player.tracks.indexOfFirst { it.src == trackId }
530
+ if (index >= 0) {
531
+ Timber.d("Queue already from $parentPath, skipping to index $index")
532
+ handleTrackLoad(_configuration.handleTrackLoad, track, player.tracks, index.toDouble(), intercepted = {}, defaultBehavior = {
533
+ player.skipTo(index)
534
+ player.play()
535
+ })
536
+ return@launch
537
+ }
538
+ }
539
+
540
+ // Expand the queue from the contextual URL
541
+ val expanded = browserManager.expandQueueFromContextualUrl(url)
542
+
543
+ if (expanded != null) {
544
+ val (tracks, startIndex) = expanded
545
+ Timber.d(
546
+ "Loading expanded queue: ${tracks.size} tracks, starting at index $startIndex"
547
+ )
548
+ handleTrackLoad(_configuration.handleTrackLoad, track, tracks, startIndex.toDouble(), intercepted = {}, defaultBehavior = {
549
+ // Replace queue and seek to selected track
550
+ // Use internal player methods directly to avoid blocking on main thread
551
+ player.setQueue(tracks, startIndex, sourcePath = parentPath)
552
+ player.play()
553
+ })
554
+ return@launch
555
+ } else {
556
+ // Fallback: just load the single track
557
+ Timber.w("Queue expansion failed, loading single track")
558
+ handleTrackLoad(_configuration.handleTrackLoad, track, arrayOf(track), 0.0, intercepted = {}, defaultBehavior = { player.load(track) })
559
+ }
560
+ }
561
+ // Navigate to browsable track to show browsing UI
562
+ url != null -> {
563
+ Timber.d("Navigating to browsable track: $url")
564
+ browserManager.navigate(url)
565
+ }
566
+ // If track is playable (has src), load it into player
567
+ track.src != null -> {
568
+ Timber.d("Loading playable track into player: ${track.title}")
569
+ handleTrackLoad(_configuration.handleTrackLoad, track, arrayOf(track), 0.0, intercepted = {}, defaultBehavior = { player.load(track) })
570
+ }
571
+ else -> {
572
+ throw IllegalArgumentException("Track must have either an 'url' or an 'src' property")
573
+ }
574
+ }
575
+ } catch (e: CancellationException) {
576
+ throw e // Rethrow to properly cancel
577
+ } catch (e: Exception) {
578
+ handleBrowserException(e, url ?: track.src ?: "", "navigating to track: ${track.title}")
579
+ }
580
+ }
581
+ }
582
+
583
+ override fun onSearch(query: String): Promise<Array<Track>> {
584
+ return Promise.async(mainScope) {
585
+ Timber.d("Searching for: $query")
586
+ val searchResults = browserManager.search(query)
587
+ searchResults.children ?: emptyArray()
588
+ }
589
+ }
590
+
591
+ override fun getContent(): ResolvedTrack? {
592
+ return browserManager.getContent()
593
+ }
594
+
595
+ override fun notifyContentChanged(path: String) {
596
+ Timber.d("Notifying content changed for path: $path")
597
+
598
+ // Invalidate cached content so future navigations fetch fresh data
599
+ browserManager.invalidateContentCache(path)
600
+
601
+ // Notify external media controllers (Android Auto)
602
+ connectedService?.player?.notifyContentChanged(path)
603
+
604
+ // If we're currently viewing this path, refresh the content
605
+ if (browserManager.getPath() == path) {
606
+ mainScope.launch { browserManager.refresh() }
607
+ }
608
+ }
609
+
610
+ override fun setFavorites(favorites: Array<String>) {
611
+ browserManager.setFavorites(favorites.toList())
612
+ }
613
+
614
+ // ============================================================================
615
+ // MARK: Player Setup and Options
616
+ // ============================================================================
617
+
618
+ override fun setupPlayer(options: PartialSetupPlayerOptions): Promise<Unit> {
619
+ return Promise.async(mainScope) {
620
+ setupOptions.update(options)
621
+
622
+ connectedService?.let {
623
+ it.player.setup(setupOptions)
624
+ return@async
625
+ }
626
+
627
+ // Service not connected yet, bind to service
628
+ suspendCoroutine<Unit> { continuation ->
629
+ Timber.d("Binding to AudioBrowserService")
630
+ val bound =
631
+ context.bindService(
632
+ Intent(context, Service::class.java),
633
+ this@AudioBrowser,
634
+ Context.BIND_AUTO_CREATE,
635
+ )
636
+
637
+ if (!bound) {
638
+ continuation.resumeWithException(
639
+ RuntimeException("Failed to bind to AudioBrowserService")
640
+ )
641
+ } else {
642
+ // Service will resolve the promise in onServiceConnected
643
+ setupPromise = { continuation.resume(Unit) }
644
+ }
645
+ }
646
+ }
647
+ }
648
+
649
+ override fun updateOptions(options: NativeUpdateOptions) {
650
+ updateOptions.updateFromBridge(options)
651
+ // Only update the options if the service is around
652
+ connectedService?.let { player.applyOptions(updateOptions) }
653
+ }
654
+
655
+ override fun getOptions(): UpdateOptions {
656
+ return player.getOptions().toNitro()
657
+ }
658
+
659
+ // ============================================================================
660
+ // MARK: Player Control Methods
661
+ // ============================================================================
662
+
663
+ override fun load(track: Track) {
664
+ launchInScope { player.load(track) }
665
+ }
666
+
667
+ override fun reset() = runBlockingOnMain {
668
+ player.stop()
669
+ delay(300) // Allow playback to stop
670
+ player.clear()
671
+ }
672
+
673
+ override fun play() = runBlockingOnMain { player.play() }
674
+
675
+ override fun pause() = runBlockingOnMain { player.pause() }
676
+
677
+ override fun togglePlayback() = runBlockingOnMain { player.togglePlayback() }
678
+
679
+ override fun stop() = runBlockingOnMain { player.stop() }
680
+
681
+ override fun setPlayWhenReady(playWhenReady: Boolean) = runBlockingOnMain {
682
+ player.playWhenReady = playWhenReady
683
+ }
684
+
685
+ override fun getPlayWhenReady(): Boolean = runBlockingOnMain { player.playWhenReady }
686
+
687
+ override fun seekTo(position: Double) = runBlockingOnMain {
688
+ player.seekTo((position * 1000).toLong(), TimeUnit.MILLISECONDS)
689
+ }
690
+
691
+ override fun seekBy(offset: Double) = runBlockingOnMain {
692
+ player.seekBy((offset * 1000).toLong(), TimeUnit.MILLISECONDS)
693
+ }
694
+
695
+ override fun setVolume(level: Double) = runBlockingOnMain { player.volume = level.toFloat() }
696
+
697
+ override fun getVolume(): Double = runBlockingOnMain { player.volume.toDouble() }
698
+
699
+ override fun setRate(rate: Double) = runBlockingOnMain { player.playbackSpeed = rate.toFloat() }
700
+
701
+ override fun getRate(): Double = runBlockingOnMain { player.playbackSpeed.toDouble() }
702
+
703
+ override fun getProgress(): Progress = runBlockingOnMain {
704
+ Progress(
705
+ duration = player.duration.toSeconds(),
706
+ position = player.position.toSeconds(),
707
+ buffered = player.bufferedPosition.toSeconds(),
708
+ )
709
+ }
710
+
711
+ override fun getPlayback(): Playback = runBlockingOnMain { player.getPlayback() }
712
+
713
+ override fun getPlayingState(): PlayingState = runBlockingOnMain { player.getPlayingState() }
714
+
715
+ override fun getRepeatMode(): RepeatMode = runBlockingOnMain { player.repeatMode }
716
+
717
+ override fun setRepeatMode(mode: RepeatMode) = runBlockingOnMain { player.repeatMode = mode }
718
+
719
+ override fun getShuffleEnabled(): Boolean = runBlockingOnMain { player.shuffleMode }
720
+
721
+ override fun setShuffleEnabled(enabled: Boolean) = runBlockingOnMain {
722
+ player.shuffleMode = enabled
723
+ }
724
+
725
+ override fun getPlaybackError(): PlaybackError? = runBlockingOnMain { player.playbackError }
726
+
727
+ override fun retry() = runBlockingOnMain { player.prepare() }
728
+
729
+ // ============================================================================
730
+ // MARK: Queue Management
731
+ // ============================================================================
732
+
733
+ override fun add(tracks: Array<Track>, insertBeforeIndex: Double?) = runBlockingOnMain {
734
+ val inputIndex = insertBeforeIndex?.toInt() ?: -1
735
+ player.add(tracks, inputIndex)
736
+ }
737
+
738
+ override fun move(fromIndex: Double, toIndex: Double) = runBlockingOnMain {
739
+ player.move(fromIndex.toInt(), toIndex.toInt())
740
+ }
741
+
742
+ override fun remove(indexes: DoubleArray) = runBlockingOnMain {
743
+ val indexList = indexes.map { it.toInt() }
744
+ player.remove(indexList)
745
+ }
746
+
747
+ override fun removeUpcomingTracks() = runBlockingOnMain { player.removeUpcomingTracks() }
748
+
749
+ override fun skip(index: Double, initialPosition: Double?) = runBlockingOnMain {
750
+ player.skipTo(index.toInt())
751
+
752
+ if (initialPosition != null && initialPosition >= 0) {
753
+ player.seekTo((initialPosition * 1000).toLong(), TimeUnit.MILLISECONDS)
754
+ }
755
+ }
756
+
757
+ override fun skipToNext(initialPosition: Double?) = runBlockingOnMain {
758
+ player.next()
759
+
760
+ if (initialPosition != null && initialPosition >= 0) {
761
+ player.seekTo((initialPosition * 1000).toLong(), TimeUnit.MILLISECONDS)
762
+ }
763
+ }
764
+
765
+ override fun skipToPrevious(initialPosition: Double?) = runBlockingOnMain {
766
+ player.previous()
767
+
768
+ if (initialPosition != null && initialPosition >= 0) {
769
+ player.seekTo((initialPosition * 1000).toLong(), TimeUnit.MILLISECONDS)
770
+ }
771
+ }
772
+
773
+ override fun setQueue(tracks: Array<Track>, startIndex: Double?, startPositionMs: Double?) =
774
+ runBlockingOnMain {
775
+ player.setQueue(tracks, startIndex?.toInt() ?: 0, startPositionMs?.toLong() ?: 0)
776
+ }
777
+
778
+ override fun setActiveTrackFavorited(favorited: Boolean) = runBlockingOnMain {
779
+ player.setActiveTrackFavorited(favorited)
780
+ }
781
+
782
+ override fun toggleActiveTrackFavorited() = runBlockingOnMain {
783
+ player.toggleActiveTrackFavorited()
784
+ }
785
+
786
+ override fun getQueue(): Array<Track> = runBlockingOnMain { player.tracks }
787
+
788
+ override fun getTrack(index: Double): Track? = runBlockingOnMain {
789
+ try {
790
+ player.getTrack(index.toInt())
791
+ } catch (e: IllegalArgumentException) {
792
+ null
793
+ }
794
+ }
795
+
796
+ override fun getActiveTrackIndex(): Double? = runBlockingOnMain {
797
+ player.currentIndex?.toDouble()
798
+ }
799
+
800
+ override fun getActiveTrack(): Track? = runBlockingOnMain { player.currentTrack }
801
+
802
+ // ============================================================================
803
+ // MARK: Now Playing Metadata
804
+ // ============================================================================
805
+
806
+ override fun updateNowPlaying(update: NowPlayingUpdate?) = runBlockingOnMain {
807
+ player.updateNowPlaying(update)
808
+ }
809
+
810
+ override fun getNowPlaying(): NowPlayingMetadata? = runBlockingOnMain { player.getNowPlaying() }
811
+
812
+ // ============================================================================
813
+ // MARK: Network Connectivity
814
+ // ============================================================================
815
+
816
+ override fun getOnline(): Boolean = runBlockingOnMain { player.getOnline() }
817
+
818
+ // ============================================================================
819
+ // MARK: System Volume
820
+ // ============================================================================
821
+
822
+ override fun getSystemVolume(): Double = systemVolumeMonitor.getVolume()
823
+
824
+ override fun setSystemVolume(volume: Double) = systemVolumeMonitor.setVolume(volume)
825
+
826
+ // ============================================================================
827
+ // MARK: External Audio Output (iOS only, stub on Android)
828
+ // ============================================================================
829
+
830
+ override fun getIosOutput(): IosOutput? = null
831
+
832
+ override fun openIosOutputPicker() {
833
+ // No-op on Android
834
+ }
835
+
836
+ // ============================================================================
837
+ // MARK: Equalizer (Android only)
838
+ // ============================================================================
839
+
840
+ override fun getEqualizerSettings(): EqualizerSettings? = runBlockingOnMain {
841
+ player.getEqualizerSettings()
842
+ }
843
+
844
+ override fun setEqualizerEnabled(enabled: Boolean) = runBlockingOnMain {
845
+ player.setEqualizerEnabled(enabled)
846
+ }
847
+
848
+ override fun setEqualizerPreset(preset: String) = runBlockingOnMain {
849
+ player.setEqualizerPreset(preset)
850
+ }
851
+
852
+ override fun setEqualizerLevels(levels: DoubleArray) = runBlockingOnMain {
853
+ player.setEqualizerLevels(levels)
854
+ }
855
+
856
+ // ============================================================================
857
+ // MARK: Sleep Timer
858
+ // ============================================================================
859
+
860
+ override fun getSleepTimer(): SleepTimer = runBlockingOnMain { player.getSleepTimer() }
861
+
862
+ override fun setSleepTimer(seconds: Double) = runBlockingOnMain { player.setSleepTimer(seconds) }
863
+
864
+ override fun setSleepTimerToEndOfTrack() = runBlockingOnMain {
865
+ player.setSleepTimerToEndOfTrack()
866
+ }
867
+
868
+ override fun clearSleepTimer(): Boolean = runBlockingOnMain { player.clearSleepTimer() }
869
+
870
+ // ============================================================================
871
+ // MARK: Battery Optimization (Android only)
872
+ // ============================================================================
873
+
874
+ /** Track last known status for change detection */
875
+ private var lastKnownBatteryStatus: BatteryOptimizationHelper.Status? = null
876
+
877
+ override fun getBatteryWarningPending(): Boolean {
878
+ val rawPending = BatteryWarningStore.isWarningPending(context)
879
+ val status = BatteryOptimizationHelper.getStatus(context)
880
+
881
+ // Auto-clear if status is now unrestricted
882
+ return if (rawPending && status == BatteryOptimizationHelper.Status.UNRESTRICTED) {
883
+ BatteryWarningStore.clearWarning(context)
884
+ post { onBatteryWarningPendingChanged(BatteryWarningPendingChangedEvent(false)) }
885
+ false
886
+ } else {
887
+ rawPending
888
+ }
889
+ }
890
+
891
+ override fun getBatteryOptimizationStatus(): BatteryOptimizationStatus {
892
+ return BatteryOptimizationHelper.getStatus(context).toNitro()
893
+ }
894
+
895
+ override fun dismissBatteryWarning() {
896
+ BatteryWarningStore.clearWarning(context)
897
+ post { onBatteryWarningPendingChanged(BatteryWarningPendingChangedEvent(false)) }
898
+ }
899
+
900
+ override fun openBatterySettings() {
901
+ BatteryOptimizationHelper.openSettings(context)
902
+ }
903
+
904
+ /**
905
+ * Check if battery status changed since last check and fire events if so. Called automatically
906
+ * when app comes to foreground via ProcessLifecycleOwner.
907
+ */
908
+ private fun checkBatteryStatusChange() {
909
+ val currentStatus = BatteryOptimizationHelper.getStatus(context)
910
+ if (lastKnownBatteryStatus != null && lastKnownBatteryStatus != currentStatus) {
911
+ post {
912
+ onBatteryOptimizationStatusChanged(
913
+ BatteryOptimizationStatusChangedEvent(currentStatus.toNitro())
914
+ )
915
+ }
916
+
917
+ // Auto-clear warning if now unrestricted
918
+ if (
919
+ currentStatus == BatteryOptimizationHelper.Status.UNRESTRICTED &&
920
+ BatteryWarningStore.isWarningPending(context)
921
+ ) {
922
+ BatteryWarningStore.clearWarning(context)
923
+ post { onBatteryWarningPendingChanged(BatteryWarningPendingChangedEvent(false)) }
924
+ }
925
+ }
926
+ lastKnownBatteryStatus = currentStatus
927
+ }
928
+
929
+ private fun BatteryOptimizationHelper.Status.toNitro(): BatteryOptimizationStatus {
930
+ return when (this) {
931
+ BatteryOptimizationHelper.Status.UNRESTRICTED -> BatteryOptimizationStatus.UNRESTRICTED
932
+ BatteryOptimizationHelper.Status.OPTIMIZED -> BatteryOptimizationStatus.OPTIMIZED
933
+ BatteryOptimizationHelper.Status.RESTRICTED -> BatteryOptimizationStatus.RESTRICTED
934
+ }
935
+ }
936
+
937
+ // ============================================================================
938
+ // MARK: Service Connection
939
+ // ============================================================================
940
+
941
+ override fun onServiceConnected(name: ComponentName, serviceBinder: IBinder) {
942
+ launchInScope {
943
+ connectedService =
944
+ (serviceBinder as Service.LocalBinder).service.apply {
945
+ player.setCallbacks(callbacks)
946
+ player.applyOptions(updateOptions)
947
+ player.setup(setupOptions)
948
+ // Start observing network connectivity changes
949
+ player.observeNetworkConnectivity(mainScope)
950
+ // Set browser reference for media URL transformation
951
+ player.browser = this@AudioBrowser
952
+
953
+ // If configuration was already set before service connected,
954
+ // notify player now so Android Auto can start browsing
955
+ if (_configuration.routes?.isNotEmpty() == true) {
956
+ player.notifyBrowserConfigurationReady()
957
+ }
958
+ }
959
+
960
+ // Wire up battery warning callback from service
961
+ connectedService?.onBatteryWarningPendingChanged = { pending ->
962
+ post {
963
+ this@AudioBrowser.onBatteryWarningPendingChanged(
964
+ BatteryWarningPendingChangedEvent(pending)
965
+ )
966
+ }
967
+ }
968
+
969
+ val sessionToken = SessionToken(context, ComponentName(context, Service::class.java))
970
+ mediaBrowserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
971
+
972
+ setupPromise?.invoke(Unit)
973
+ setupPromise = null
974
+ }
975
+ }
976
+
977
+ override fun onServiceDisconnected(name: ComponentName) {
978
+ mainScope.coroutineContext.cancelChildren()
979
+ mediaBrowserFuture = null
980
+ connectedService = null
981
+ Timber.d("AudioBrowser.onServiceDisconnected()")
982
+ }
983
+
984
+ // ============================================================================
985
+ // MARK: Internal Helpers
986
+ // ============================================================================
987
+
988
+ private fun launchInScope(block: suspend () -> Unit) {
989
+ mainScope.launch { block() }
990
+ }
991
+
992
+ private fun <T> runBlockingOnMain(block: suspend () -> T): T {
993
+ return runBlocking(mainScope.coroutineContext) { block() }
994
+ }
995
+
996
+ private val service: Service
997
+ get() = connectedService ?: throw Exception("Player not initialized")
998
+
999
+ internal val player
1000
+ get() = service.player
1001
+
1002
+ // ============================================================================
1003
+ // MARK: Player Callbacks
1004
+ // ============================================================================
1005
+
1006
+ val callbacks =
1007
+ object : Callbacks {
1008
+ override fun onPlaybackChanged(playback: Playback) {
1009
+ post { this@AudioBrowser.onPlaybackChanged(playback) }
1010
+ }
1011
+
1012
+ override fun onPlaybackActiveTrackChanged(event: PlaybackActiveTrackChangedEvent) {
1013
+ post { this@AudioBrowser.onPlaybackActiveTrackChanged(event) }
1014
+ }
1015
+
1016
+ override fun onPlaybackProgressUpdated(event: PlaybackProgressUpdatedEvent) {
1017
+ post { this@AudioBrowser.onPlaybackProgressUpdated(event) }
1018
+ }
1019
+
1020
+ override fun onPlaybackPlayWhenReadyChanged(event: PlaybackPlayWhenReadyChangedEvent) {
1021
+ post { this@AudioBrowser.onPlaybackPlayWhenReadyChanged(event) }
1022
+ }
1023
+
1024
+ override fun onPlaybackPlayingState(event: PlayingState) {
1025
+ post {
1026
+ Timber.d(
1027
+ "AudioBrowser forwarding PlayingState to JS: playing=${event.playing}, buffering=${event.buffering}"
1028
+ )
1029
+ this@AudioBrowser.onPlaybackPlayingState(event)
1030
+ }
1031
+ }
1032
+
1033
+ override fun onPlaybackQueueEnded(event: PlaybackQueueEndedEvent) {
1034
+ post { this@AudioBrowser.onPlaybackQueueEnded(event) }
1035
+ }
1036
+
1037
+ override fun onPlaybackQueueChanged(queue: Array<Track>) {
1038
+ post { this@AudioBrowser.onPlaybackQueueChanged(queue) }
1039
+ }
1040
+
1041
+ override fun onPlaybackRepeatModeChanged(event: RepeatMode) {
1042
+ post { this@AudioBrowser.onPlaybackRepeatModeChanged(RepeatModeChangedEvent(event)) }
1043
+ }
1044
+
1045
+ override fun onPlaybackShuffleModeChanged(enabled: Boolean) {
1046
+ post { this@AudioBrowser.onPlaybackShuffleModeChanged(enabled) }
1047
+ }
1048
+
1049
+ override fun onPlaybackError(error: PlaybackError?) {
1050
+ post { this@AudioBrowser.onPlaybackError(PlaybackErrorEvent(error)) }
1051
+ }
1052
+
1053
+ override fun onTrackMetadata(metadata: TrackMetadata) {
1054
+ post { this@AudioBrowser.onTrackMetadata(metadata) }
1055
+ }
1056
+
1057
+ override fun onChapterMetadata(chapters: List<ChapterMetadata>) {
1058
+ post { this@AudioBrowser.onChapterMetadata(chapters.toTypedArray()) }
1059
+ }
1060
+
1061
+ override fun onTimedMetadata(metadata: TimedMetadata) {
1062
+ post { this@AudioBrowser.onTimedMetadata(metadata) }
1063
+ }
1064
+
1065
+ override fun handleRemotePlay(): Boolean {
1066
+ val handled =
1067
+ this@AudioBrowser.handleRemotePlay?.let {
1068
+ it.invoke()
1069
+ true
1070
+ } ?: false
1071
+
1072
+ // Defer notification until after play operation completes
1073
+ post { this@AudioBrowser.onRemotePlay() }
1074
+
1075
+ return handled
1076
+ }
1077
+
1078
+ override fun handleRemotePause(): Boolean {
1079
+ val handled =
1080
+ this@AudioBrowser.handleRemotePause?.let {
1081
+ it.invoke()
1082
+ true
1083
+ } ?: false
1084
+
1085
+ // Defer notification until after pause operation completes
1086
+ post { this@AudioBrowser.onRemotePause() }
1087
+
1088
+ return handled
1089
+ }
1090
+
1091
+ override fun handleRemoteStop(): Boolean {
1092
+ val handled =
1093
+ this@AudioBrowser.handleRemoteStop?.let {
1094
+ it.invoke()
1095
+ true
1096
+ } ?: false
1097
+
1098
+ // Defer notification until after stop operation completes
1099
+ post { this@AudioBrowser.onRemoteStop() }
1100
+
1101
+ return handled
1102
+ }
1103
+
1104
+ override fun handleRemoteNext(): Boolean {
1105
+ val handled =
1106
+ this@AudioBrowser.handleRemoteNext?.let {
1107
+ it.invoke()
1108
+ true
1109
+ } ?: false
1110
+
1111
+ // Defer notification until after next operation completes
1112
+ post { this@AudioBrowser.onRemoteNext() }
1113
+
1114
+ return handled
1115
+ }
1116
+
1117
+ override fun handleRemotePrevious(): Boolean {
1118
+ val handled =
1119
+ this@AudioBrowser.handleRemotePrevious?.let {
1120
+ it.invoke()
1121
+ true
1122
+ } ?: false
1123
+
1124
+ // Defer notification until after previous operation completes
1125
+ post { this@AudioBrowser.onRemotePrevious() }
1126
+
1127
+ return handled
1128
+ }
1129
+
1130
+ override fun handleRemoteJumpForward(event: RemoteJumpForwardEvent): Boolean {
1131
+ val handled =
1132
+ this@AudioBrowser.handleRemoteJumpForward?.let {
1133
+ it.invoke(event)
1134
+ true
1135
+ } ?: false
1136
+
1137
+ // Defer notification until after jump forward operation completes
1138
+ post { this@AudioBrowser.onRemoteJumpForward(event) }
1139
+
1140
+ return handled
1141
+ }
1142
+
1143
+ override fun handleRemoteJumpBackward(event: RemoteJumpBackwardEvent): Boolean {
1144
+ val handled =
1145
+ this@AudioBrowser.handleRemoteJumpBackward?.let {
1146
+ it.invoke(event)
1147
+ true
1148
+ } ?: false
1149
+
1150
+ // Defer notification until after jump backward operation completes
1151
+ post { this@AudioBrowser.onRemoteJumpBackward(event) }
1152
+
1153
+ return handled
1154
+ }
1155
+
1156
+ override fun handleRemoteSeek(event: RemoteSeekEvent): Boolean {
1157
+ val handled =
1158
+ this@AudioBrowser.handleRemoteSeek?.let {
1159
+ it.invoke(event)
1160
+ true
1161
+ } ?: false
1162
+
1163
+ // Defer notification until after seek operation completes
1164
+ post { this@AudioBrowser.onRemoteSeek(event) }
1165
+
1166
+ return handled
1167
+ }
1168
+
1169
+ override fun onRemoteSetRating(event: RemoteSetRatingEvent) {
1170
+ post { this@AudioBrowser.onRemoteSetRating(event) }
1171
+ }
1172
+
1173
+ override fun onOptionsChanged(options: PlayerUpdateOptions) {
1174
+ // Not currently emitted to JS
1175
+ }
1176
+
1177
+ override fun onFavoriteChanged(event: FavoriteChangedEvent) {
1178
+ post { this@AudioBrowser.onFavoriteChanged(event) }
1179
+ }
1180
+
1181
+ override fun onNowPlayingChanged(metadata: NowPlayingMetadata) {
1182
+ post { this@AudioBrowser.onNowPlayingChanged(metadata) }
1183
+ }
1184
+
1185
+ override fun onOnlineChanged(online: Boolean) {
1186
+ post { this@AudioBrowser.onOnlineChanged(online) }
1187
+ }
1188
+
1189
+ override fun onEqualizerChanged(settings: EqualizerSettings) {
1190
+ post { this@AudioBrowser.onEqualizerChanged(settings) }
1191
+ }
1192
+
1193
+ override fun onSleepTimerChanged(timer: SleepTimer?) {
1194
+ post { this@AudioBrowser.onSleepTimerChanged(timer) }
1195
+ }
1196
+ }
1197
+ }