react-native-audio-browser 0.2.0-next.11 → 0.2.0-next.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/README.md +4 -4
  2. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +110 -25
  3. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +254 -188
  4. package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +23 -3
  5. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +77 -58
  6. package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +68 -26
  7. package/android/src/main/java/com/audiobrowser/browser/StyleResolver.kt +49 -0
  8. package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +9 -7
  9. package/android/src/main/java/com/audiobrowser/extension/TappedTrack.kt +20 -0
  10. package/android/src/main/java/com/audiobrowser/extension/TrackIdentity.kt +15 -0
  11. package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +120 -67
  12. package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -24
  13. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +93 -73
  14. package/android/src/main/java/com/audiobrowser/player/Player.kt +48 -30
  15. package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
  16. package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +44 -40
  17. package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
  18. package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +35 -0
  19. package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +45 -53
  20. package/android/src/test/java/com/audiobrowser/TestFixtures.kt +26 -39
  21. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
  22. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +228 -50
  23. package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
  24. package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +1 -1
  25. package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +91 -0
  26. package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -53
  27. package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +87 -0
  28. package/android/src/test/java/com/audiobrowser/extension/TappedTrackTest.kt +43 -0
  29. package/android/src/test/java/com/audiobrowser/extension/TrackIdentityTest.kt +41 -0
  30. package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +1 -2
  31. package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
  32. package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
  33. package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
  34. package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +161 -0
  35. package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +7 -7
  36. package/ios/Browser/BrowserConfig.swift +102 -5
  37. package/ios/Browser/BrowserManager+URLResolution.swift +18 -14
  38. package/ios/Browser/BrowserManager.swift +131 -143
  39. package/ios/Browser/BrowserPathHelper.swift +44 -44
  40. package/ios/Browser/JsonModels.swift +187 -106
  41. package/ios/Browser/SearchDrillIn.swift +6 -6
  42. package/ios/Browser/SectionPresentation.swift +34 -0
  43. package/ios/Browser/SectionScope.swift +58 -24
  44. package/ios/Browser/StyleResolver.swift +47 -0
  45. package/ios/Browser/TabBarEntries.swift +2 -2
  46. package/ios/Browser/TrackIdTemplate.swift +37 -0
  47. package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
  48. package/ios/CarPlay/CarPlayController.swift +105 -67
  49. package/ios/CarPlay/CarPlayImageLoader.swift +38 -18
  50. package/ios/CarPlay/CarPlayListItemFactory.swift +217 -84
  51. package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
  52. package/ios/Extension/Capability+RemoteCommand.swift +1 -1
  53. package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
  54. package/ios/Extension/ResolvedTrack+Copying.swift +11 -15
  55. package/ios/Extension/Section+Copying.swift +31 -0
  56. package/ios/Extension/Track+Copying.swift +6 -12
  57. package/ios/Extension/Track+Identity.swift +18 -0
  58. package/ios/HybridAudioBrowser.swift +113 -35
  59. package/ios/Model/NitroTypeStubs.swift +46 -21
  60. package/ios/Model/PlayerUpdateOptions.swift +7 -0
  61. package/ios/Player/NowPlayingUpdater.swift +1 -1
  62. package/ios/Player/PlaybackCoordinator.swift +2 -2
  63. package/ios/Player/RetryManager.swift +4 -3
  64. package/ios/Tests/BrowserPathHelperTests.swift +50 -20
  65. package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
  66. package/ios/Tests/JsonModelsTests.swift +75 -1
  67. package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
  68. package/ios/Tests/ResolvedTrackCopyingTests.swift +37 -35
  69. package/ios/Tests/SearchDrillInTests.swift +16 -16
  70. package/ios/Tests/SectionPresentationTests.swift +61 -0
  71. package/ios/Tests/SectionScopeTests.swift +87 -55
  72. package/ios/Tests/StyleResolverTests.swift +67 -0
  73. package/ios/Tests/TabBarEntriesTests.swift +18 -18
  74. package/ios/Tests/TrackIdTemplateTests.swift +67 -0
  75. package/ios/Tests/TrackIdentityTests.swift +20 -0
  76. package/ios/Tests/TrackSelectorTests.swift +168 -33
  77. package/ios/TrackSelector.swift +45 -30
  78. package/ios/Util/ArtworkImageFetcher.swift +16 -1
  79. package/lib/commonjs/AudioBrowser.js +11 -0
  80. package/lib/commonjs/AudioBrowser.js.map +1 -1
  81. package/lib/commonjs/features/browser-config.js +11 -8
  82. package/lib/commonjs/features/browser-config.js.map +1 -1
  83. package/lib/commonjs/features/browser.js +2 -2
  84. package/lib/commonjs/features/favorites.js +13 -10
  85. package/lib/commonjs/features/favorites.js.map +1 -1
  86. package/lib/commonjs/features/playback/controls.js +4 -2
  87. package/lib/commonjs/features/playback/controls.js.map +1 -1
  88. package/lib/commonjs/features/playback/state.js +2 -3
  89. package/lib/commonjs/features/playback/state.js.map +1 -1
  90. package/lib/commonjs/features/player/options.js.map +1 -1
  91. package/lib/commonjs/features/player/setup.js +3 -1
  92. package/lib/commonjs/features/player/setup.js.map +1 -1
  93. package/lib/commonjs/features/player/validateOptions.js +2 -0
  94. package/lib/commonjs/features/player/validateOptions.js.map +1 -1
  95. package/lib/commonjs/features/queue/activeTrack.js +14 -3
  96. package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
  97. package/lib/commonjs/features/queue/queue.js +11 -4
  98. package/lib/commonjs/features/queue/queue.js.map +1 -1
  99. package/lib/commonjs/utils/LazyNativeEmitter.js +21 -10
  100. package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
  101. package/lib/commonjs/utils/NativeUpdatedValue.js +31 -13
  102. package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
  103. package/lib/commonjs/utils/getTrackIdentity.js +24 -0
  104. package/lib/commonjs/utils/getTrackIdentity.js.map +1 -0
  105. package/lib/commonjs/utils/useNativeValueRefreshedBy.js +33 -0
  106. package/lib/commonjs/utils/useNativeValueRefreshedBy.js.map +1 -0
  107. package/lib/commonjs/web/NativeAudioBrowser.js +32 -24
  108. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  109. package/lib/commonjs/web/browser/BrowserManager.js +144 -87
  110. package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
  111. package/lib/commonjs/web/browser/FavoriteManager.js +30 -21
  112. package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
  113. package/lib/commonjs/web/browser/assertBrowsePageShape.js +2 -2
  114. package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -1
  115. package/lib/commonjs/web/browser/classifyTrackNavigation.js +9 -9
  116. package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -1
  117. package/lib/commonjs/web/browser/sections.js +89 -0
  118. package/lib/commonjs/web/browser/sections.js.map +1 -0
  119. package/lib/commonjs/web/player/NowPlayingManager.js +4 -3
  120. package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
  121. package/lib/commonjs/web/util/BrowserPathHelper.js +56 -11
  122. package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
  123. package/lib/module/AudioBrowser.js +1 -0
  124. package/lib/module/AudioBrowser.js.map +1 -1
  125. package/lib/module/features/browser-config.js +11 -8
  126. package/lib/module/features/browser-config.js.map +1 -1
  127. package/lib/module/features/browser.js +2 -2
  128. package/lib/module/features/favorites.js +13 -10
  129. package/lib/module/features/favorites.js.map +1 -1
  130. package/lib/module/features/playback/controls.js +4 -2
  131. package/lib/module/features/playback/controls.js.map +1 -1
  132. package/lib/module/features/playback/state.js +2 -3
  133. package/lib/module/features/playback/state.js.map +1 -1
  134. package/lib/module/features/player/options.js.map +1 -1
  135. package/lib/module/features/player/setup.js +3 -1
  136. package/lib/module/features/player/setup.js.map +1 -1
  137. package/lib/module/features/player/validateOptions.js +2 -0
  138. package/lib/module/features/player/validateOptions.js.map +1 -1
  139. package/lib/module/features/queue/activeTrack.js +14 -3
  140. package/lib/module/features/queue/activeTrack.js.map +1 -1
  141. package/lib/module/features/queue/queue.js +11 -4
  142. package/lib/module/features/queue/queue.js.map +1 -1
  143. package/lib/module/utils/LazyNativeEmitter.js +21 -10
  144. package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
  145. package/lib/module/utils/NativeUpdatedValue.js +31 -13
  146. package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
  147. package/lib/module/utils/getTrackIdentity.js +20 -0
  148. package/lib/module/utils/getTrackIdentity.js.map +1 -0
  149. package/lib/module/utils/useNativeValueRefreshedBy.js +29 -0
  150. package/lib/module/utils/useNativeValueRefreshedBy.js.map +1 -0
  151. package/lib/module/web/NativeAudioBrowser.js +32 -24
  152. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  153. package/lib/module/web/browser/BrowserManager.js +144 -87
  154. package/lib/module/web/browser/BrowserManager.js.map +1 -1
  155. package/lib/module/web/browser/FavoriteManager.js +31 -21
  156. package/lib/module/web/browser/FavoriteManager.js.map +1 -1
  157. package/lib/module/web/browser/assertBrowsePageShape.js +2 -2
  158. package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -1
  159. package/lib/module/web/browser/classifyTrackNavigation.js +9 -9
  160. package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -1
  161. package/lib/module/web/browser/sections.js +83 -0
  162. package/lib/module/web/browser/sections.js.map +1 -0
  163. package/lib/module/web/player/NowPlayingManager.js +4 -3
  164. package/lib/module/web/player/NowPlayingManager.js.map +1 -1
  165. package/lib/module/web/util/BrowserPathHelper.js +56 -11
  166. package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
  167. package/lib/typescript/src/AudioBrowser.d.ts +1 -0
  168. package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
  169. package/lib/typescript/src/features/browser-config.d.ts.map +1 -1
  170. package/lib/typescript/src/features/browser.d.ts +2 -2
  171. package/lib/typescript/src/features/favorites.d.ts +13 -10
  172. package/lib/typescript/src/features/favorites.d.ts.map +1 -1
  173. package/lib/typescript/src/features/playback/controls.d.ts +4 -2
  174. package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
  175. package/lib/typescript/src/features/playback/state.d.ts +2 -3
  176. package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
  177. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +1 -1
  178. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -1
  179. package/lib/typescript/src/features/player/options.d.ts +21 -19
  180. package/lib/typescript/src/features/player/options.d.ts.map +1 -1
  181. package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
  182. package/lib/typescript/src/features/player/validateOptions.d.ts +1 -8
  183. package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -1
  184. package/lib/typescript/src/features/queue/activeTrack.d.ts +8 -1
  185. package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
  186. package/lib/typescript/src/features/queue/queue.d.ts +5 -2
  187. package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
  188. package/lib/typescript/src/types/browser-native.d.ts +2 -2
  189. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  190. package/lib/typescript/src/types/browser-nodes.d.ts +260 -127
  191. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  192. package/lib/typescript/src/types/browser.d.ts +33 -53
  193. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  194. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +16 -17
  195. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
  196. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +24 -19
  197. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
  198. package/lib/typescript/src/utils/getTrackIdentity.d.ts +18 -0
  199. package/lib/typescript/src/utils/getTrackIdentity.d.ts.map +1 -0
  200. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts +21 -0
  201. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts.map +1 -0
  202. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +0 -1
  203. package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
  204. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +4 -3
  205. package/nitrogen/generated/android/c++/JBrowseResult.hpp +10 -4
  206. package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
  207. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +4 -3
  208. package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +4 -3
  209. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +4 -3
  210. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +4 -3
  211. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +4 -3
  212. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +4 -3
  213. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +4 -2
  214. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +4 -2
  215. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +10 -4
  216. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +4 -3
  217. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +2 -5
  218. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +4 -3
  219. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +9 -3
  220. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +4 -2
  221. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +21 -14
  222. package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
  223. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +4 -3
  224. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +16 -10
  225. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +8 -2
  226. package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +6 -7
  227. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +2 -5
  228. package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
  229. package/nitrogen/generated/android/c++/JOptions.hpp +2 -5
  230. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +4 -3
  231. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
  232. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +49 -51
  233. package/nitrogen/generated/android/c++/JSection.hpp +114 -0
  234. package/nitrogen/generated/android/c++/JSectionStyle.hpp +69 -0
  235. package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
  236. package/nitrogen/generated/android/c++/JTrack.hpp +19 -48
  237. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +4 -2
  238. package/nitrogen/generated/android/c++/JTrackStyle.hpp +25 -18
  239. package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +10 -4
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → ArtworkRendering.kt} +5 -5
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation.kt +23 -0
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +6 -3
  243. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +5 -5
  244. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +6 -3
  245. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  246. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -18
  247. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Section.kt +50 -0
  248. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → SectionStyle.kt} +12 -6
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StyleDisplay.kt +23 -0
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +6 -15
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +23 -5
  252. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +104 -82
  253. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +16 -10
  254. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +16 -10
  255. package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
  256. package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
  257. package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
  258. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +5 -5
  259. package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
  260. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
  261. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +54 -83
  262. package/nitrogen/generated/ios/swift/Section.swift +100 -0
  263. package/nitrogen/generated/ios/swift/SectionStyle.swift +64 -0
  264. package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
  265. package/nitrogen/generated/ios/swift/Track.swift +20 -73
  266. package/nitrogen/generated/ios/swift/TrackStyle.swift +28 -22
  267. package/nitrogen/generated/shared/c++/{FavoritesMatchMode.hpp → ArtworkRendering.hpp} +17 -17
  268. package/nitrogen/generated/shared/c++/CarPlayPlayingIndicatorLocation.hpp +76 -0
  269. package/nitrogen/generated/shared/c++/IOSOptions.hpp +9 -2
  270. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +6 -6
  271. package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
  272. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
  273. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +30 -38
  274. package/nitrogen/generated/shared/c++/Section.hpp +106 -0
  275. package/nitrogen/generated/shared/c++/SectionStyle.hpp +96 -0
  276. package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
  277. package/nitrogen/generated/shared/c++/Track.hpp +15 -31
  278. package/nitrogen/generated/shared/c++/TrackStyle.hpp +50 -34
  279. package/package.json +1 -1
  280. package/src/AudioBrowser.ts +1 -0
  281. package/src/features/browser-config.test.ts +21 -6
  282. package/src/features/browser-config.ts +11 -8
  283. package/src/features/browser.test.ts +1 -1
  284. package/src/features/browser.ts +2 -2
  285. package/src/features/favorites.ts +13 -10
  286. package/src/features/hook-wiring.test.ts +63 -15
  287. package/src/features/playback/controls.ts +4 -2
  288. package/src/features/playback/state.ts +2 -3
  289. package/src/features/playback/trackPlaybackTime.ts +1 -1
  290. package/src/features/player/options.ts +27 -19
  291. package/src/features/player/setup.test.ts +12 -3
  292. package/src/features/player/setup.ts +3 -1
  293. package/src/features/player/validateOptions.ts +2 -0
  294. package/src/features/queue/activeTrack.ts +14 -3
  295. package/src/features/queue/queue.ts +11 -4
  296. package/src/nitro-stub-drift.test.ts +40 -0
  297. package/src/public-surface.test.ts +40 -0
  298. package/src/specs/audio-browser.nitro.ts +4 -3
  299. package/src/style-resolution.test.ts +139 -0
  300. package/src/types/browser-native.ts +2 -2
  301. package/src/types/browser-nodes.ts +268 -136
  302. package/src/types/browser.ts +34 -55
  303. package/src/utils/LazyNativeEmitter.ts +20 -10
  304. package/src/utils/NativeUpdatedValue.ts +29 -13
  305. package/src/utils/getTrackIdentity.ts +20 -0
  306. package/src/utils/useNativeValueRefreshedBy.ts +38 -0
  307. package/src/web/NativeAudioBrowser.ts +37 -22
  308. package/src/web/browser/BrowserManager.ts +176 -95
  309. package/src/web/browser/FavoriteManager.test.ts +84 -0
  310. package/src/web/browser/FavoriteManager.ts +28 -23
  311. package/src/web/browser/assertBrowsePageShape.test.ts +1 -1
  312. package/src/web/browser/assertBrowsePageShape.ts +5 -3
  313. package/src/web/browser/classifyTrackNavigation.test.ts +10 -8
  314. package/src/web/browser/classifyTrackNavigation.ts +9 -9
  315. package/src/web/browser/parseSearchResponse.test.ts +8 -2
  316. package/src/web/browser/sections.test.ts +91 -0
  317. package/src/web/browser/sections.ts +72 -0
  318. package/src/web/player/NowPlayingManager.ts +4 -3
  319. package/src/web/util/BrowserPathHelper.test.ts +52 -0
  320. package/src/web/util/BrowserPathHelper.ts +61 -13
  321. package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
  322. package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
  323. package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
  324. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
  325. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
  326. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
  327. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
  328. package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
  329. package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
  330. package/nitrogen/generated/ios/swift/ImageRowItem.swift +0 -195
  331. package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
  332. package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
  333. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
@@ -0,0 +1,40 @@
1
+ ///
2
+ /// CarPlayPlayingIndicatorLocation.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /**
9
+ * Represents the JS union `CarPlayPlayingIndicatorLocation`, backed by a C++ enum.
10
+ */
11
+ public typealias CarPlayPlayingIndicatorLocation = margelo.nitro.audiobrowser.CarPlayPlayingIndicatorLocation
12
+
13
+ public extension CarPlayPlayingIndicatorLocation {
14
+ /**
15
+ * Get a CarPlayPlayingIndicatorLocation for the given String value, or
16
+ * return `nil` if the given value was invalid/unknown.
17
+ */
18
+ init?(fromString string: String) {
19
+ switch string {
20
+ case "leading":
21
+ self = .leading
22
+ case "trailing":
23
+ self = .trailing
24
+ default:
25
+ return nil
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Get the String value this CarPlayPlayingIndicatorLocation represents.
31
+ */
32
+ var stringValue: String {
33
+ switch self {
34
+ case .leading:
35
+ return "leading"
36
+ case .trailing:
37
+ return "trailing"
38
+ }
39
+ }
40
+ }
@@ -18,7 +18,7 @@ public extension IOSOptions {
18
18
  /**
19
19
  * Create a new instance of `IOSOptions`.
20
20
  */
21
- init(playbackRates: [Double], carPlayUpNextButton: Bool, carPlayNowPlayingButtons: [CarPlayNowPlayingButton]) {
21
+ init(playbackRates: [Double], carPlayUpNextButton: Bool, carPlayNowPlayingButtons: [CarPlayNowPlayingButton], carPlayPlayingIndicatorLocation: CarPlayPlayingIndicatorLocation) {
22
22
  self.init({ () -> bridge.std__vector_double_ in
23
23
  var __vector = bridge.create_std__vector_double_(playbackRates.count)
24
24
  for __item in playbackRates {
@@ -31,7 +31,7 @@ public extension IOSOptions {
31
31
  __vector.push_back(__item)
32
32
  }
33
33
  return __vector
34
- }())
34
+ }(), carPlayPlayingIndicatorLocation)
35
35
  }
36
36
 
37
37
  @inline(__always)
@@ -48,4 +48,9 @@ public extension IOSOptions {
48
48
  var carPlayNowPlayingButtons: [CarPlayNowPlayingButton] {
49
49
  return self.__carPlayNowPlayingButtons.map({ __item in __item })
50
50
  }
51
+
52
+ @inline(__always)
53
+ var carPlayPlayingIndicatorLocation: CarPlayPlayingIndicatorLocation {
54
+ return self.__carPlayPlayingIndicatorLocation
55
+ }
51
56
  }
@@ -18,7 +18,7 @@ public extension NativeBrowserConfiguration {
18
18
  /**
19
19
  * Create a new instance of `NativeBrowserConfiguration`.
20
20
  */
21
- init(path: String?, request: TransformableRequestConfig?, requestResolver: (() -> Promise<Promise<TransformableRequestConfig>>)?, browse: TransformableRequestConfig?, browseResolver: (() -> Promise<Promise<TransformableRequestConfig>>)?, media: MediaRequestConfig?, artwork: ArtworkRequestConfig?, nowPlayingArtwork: ArtworkRequestConfig?, routes: [NativeRouteEntry]?, singleTrack: Bool?, handleTrackLoad: ((_ event: TrackLoadEvent) -> Promise<Promise<Void>>)?, androidControllerOfflineError: Bool?, carPlayLoadingTitle: String?, resolveAlbumUrl: ((_ track: Track) -> Promise<String?>)?, formatNavigationError: ((_ params: FormatNavigationErrorParams) -> Promise<FormattedNavigationError?>)?) {
21
+ init(path: String?, request: TransformableRequestConfig?, requestResolver: (() -> Promise<Promise<TransformableRequestConfig>>)?, browse: TransformableRequestConfig?, browseResolver: (() -> Promise<Promise<TransformableRequestConfig>>)?, media: MediaRequestConfig?, artwork: ArtworkRequestConfig?, nowPlayingArtwork: ArtworkRequestConfig?, routes: [NativeRouteEntry]?, singleTrack: Bool?, handleTrackLoad: ((_ event: TrackLoadEvent) -> Promise<Promise<Void>>)?, androidControllerOfflineError: Bool?, carPlayLoadingTitle: String?, resolveAlbumPath: ((_ track: Track) -> Promise<String?>)?, formatNavigationError: ((_ params: FormatNavigationErrorParams) -> Promise<FormattedNavigationError?>)?) {
22
22
  self.init({ () -> bridge.std__optional_std__string_ in
23
23
  if let __unwrappedValue = path {
24
24
  return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
@@ -113,7 +113,7 @@ public extension NativeBrowserConfiguration {
113
113
  return .init()
114
114
  }
115
115
  }(), { () -> bridge.std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______ in
116
- if let __unwrappedValue = resolveAlbumUrl {
116
+ if let __unwrappedValue = resolveAlbumPath {
117
117
  return bridge.create_std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______({ () -> bridge.Func_std__shared_ptr_Promise_std__optional_std__string____Track in
118
118
  let __closureWrapper = Func_std__shared_ptr_Promise_std__optional_std__string____Track(__unwrappedValue)
119
119
  return bridge.create_Func_std__shared_ptr_Promise_std__optional_std__string____Track(__closureWrapper.toUnsafe())
@@ -333,10 +333,10 @@ public extension NativeBrowserConfiguration {
333
333
  }
334
334
 
335
335
  @inline(__always)
336
- var resolveAlbumUrl: ((_ track: Track) -> Promise<String?>)? {
336
+ var resolveAlbumPath: ((_ track: Track) -> Promise<String?>)? {
337
337
  return { () -> ((_ track: Track) -> Promise<String?>)? in
338
- if bridge.has_value_std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______(self.__resolveAlbumUrl) {
339
- let __unwrapped = bridge.get_std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______(self.__resolveAlbumUrl)
338
+ if bridge.has_value_std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______(self.__resolveAlbumPath) {
339
+ let __unwrapped = bridge.get_std__optional_std__function_std__shared_ptr_Promise_std__optional_std__string____const_Track_____track______(self.__resolveAlbumPath)
340
340
  return { () -> (Track) -> Promise<String?> in
341
341
  let __wrappedFunction = bridge.wrap_Func_std__shared_ptr_Promise_std__optional_std__string____Track(__unwrapped)
342
342
  return { (__track: Track) -> Promise<String?> in
@@ -18,7 +18,7 @@ public extension NitroIOSUpdateOptions {
18
18
  /**
19
19
  * Create a new instance of `NitroIOSUpdateOptions`.
20
20
  */
21
- init(playbackRates: [Double]?, carPlayUpNextButton: Bool?, carPlayNowPlayingButtons: [CarPlayNowPlayingButton]?) {
21
+ init(playbackRates: [Double]?, carPlayUpNextButton: Bool?, carPlayNowPlayingButtons: [CarPlayNowPlayingButton]?, carPlayPlayingIndicatorLocation: CarPlayPlayingIndicatorLocation?) {
22
22
  self.init({ () -> bridge.std__optional_std__vector_double__ in
23
23
  if let __unwrappedValue = playbackRates {
24
24
  return bridge.create_std__optional_std__vector_double__({ () -> bridge.std__vector_double_ in
@@ -49,6 +49,12 @@ public extension NitroIOSUpdateOptions {
49
49
  } else {
50
50
  return .init()
51
51
  }
52
+ }(), { () -> bridge.std__optional_CarPlayPlayingIndicatorLocation_ in
53
+ if let __unwrappedValue = carPlayPlayingIndicatorLocation {
54
+ return bridge.create_std__optional_CarPlayPlayingIndicatorLocation_(__unwrappedValue)
55
+ } else {
56
+ return .init()
57
+ }
52
58
  }())
53
59
  }
54
60
 
@@ -87,4 +93,9 @@ public extension NitroIOSUpdateOptions {
87
93
  }
88
94
  }()
89
95
  }
96
+
97
+ @inline(__always)
98
+ var carPlayPlayingIndicatorLocation: CarPlayPlayingIndicatorLocation? {
99
+ return self.__carPlayPlayingIndicatorLocation.value
100
+ }
90
101
  }
@@ -18,7 +18,7 @@ public extension PlayerCapabilities {
18
18
  /**
19
19
  * Create a new instance of `PlayerCapabilities`.
20
20
  */
21
- init(play: Bool?, pause: Bool?, stop: Bool?, seekTo: Bool?, skipToNext: Bool?, skipToPrevious: Bool?, jumpForward: Bool?, jumpBackward: Bool?, favorite: Variant_Bool_FavoriteConfig?, shuffleMode: Bool?, repeatMode: Bool?, playbackRate: Bool?) {
21
+ init(play: Bool?, pause: Bool?, stop: Bool?, seekTo: Bool?, skipToNext: Bool?, skipToPrevious: Bool?, jumpForward: Bool?, jumpBackward: Bool?, favorite: Bool?, shuffleMode: Bool?, repeatMode: Bool?, playbackRate: Bool?) {
22
22
  self.init({ () -> bridge.std__optional_bool_ in
23
23
  if let __unwrappedValue = play {
24
24
  return bridge.create_std__optional_bool_(__unwrappedValue)
@@ -67,16 +67,9 @@ public extension PlayerCapabilities {
67
67
  } else {
68
68
  return .init()
69
69
  }
70
- }(), { () -> bridge.std__optional_std__variant_bool__FavoriteConfig__ in
70
+ }(), { () -> bridge.std__optional_bool_ in
71
71
  if let __unwrappedValue = favorite {
72
- return bridge.create_std__optional_std__variant_bool__FavoriteConfig__({ () -> bridge.std__variant_bool__FavoriteConfig_ in
73
- switch __unwrappedValue {
74
- case .first(let __value):
75
- return bridge.create_std__variant_bool__FavoriteConfig_(__value)
76
- case .second(let __value):
77
- return bridge.create_std__variant_bool__FavoriteConfig_(__value)
78
- }
79
- }().variant)
72
+ return bridge.create_std__optional_bool_(__unwrappedValue)
80
73
  } else {
81
74
  return .init()
82
75
  }
@@ -198,23 +191,11 @@ public extension PlayerCapabilities {
198
191
  }
199
192
 
200
193
  @inline(__always)
201
- var favorite: Variant_Bool_FavoriteConfig? {
202
- return { () -> Variant_Bool_FavoriteConfig? in
203
- if bridge.has_value_std__optional_std__variant_bool__FavoriteConfig__(self.__favorite) {
204
- let __unwrapped = bridge.get_std__optional_std__variant_bool__FavoriteConfig__(self.__favorite)
205
- return { () -> Variant_Bool_FavoriteConfig in
206
- let __variant = bridge.std__variant_bool__FavoriteConfig_(__unwrapped)
207
- switch __variant.index() {
208
- case 0:
209
- let __actual = __variant.get_0()
210
- return .first(__actual)
211
- case 1:
212
- let __actual = __variant.get_1()
213
- return .second(__actual)
214
- default:
215
- fatalError("Variant can never have index \(__variant.index())!")
216
- }
217
- }()
194
+ var favorite: Bool? {
195
+ return { () -> Bool? in
196
+ if bridge.has_value_std__optional_bool_(self.__favorite) {
197
+ let __unwrapped = bridge.get_std__optional_bool_(self.__favorite)
198
+ return __unwrapped
218
199
  } else {
219
200
  return nil
220
201
  }
@@ -18,8 +18,26 @@ public extension ResolvedTrack {
18
18
  /**
19
19
  * Create a new instance of `ResolvedTrack`.
20
20
  */
21
- init(url: String, children: [Track]?, carPlaySiriListButton: CarPlaySiriListButtonPosition?, id: String?, src: String?, artwork: Variant_String_ArtworkVariants?, artworkSource: ImageSource?, request: TrackRequest?, artworkCarPlayTinted: Bool?, title: String, subtitle: String?, artist: String?, albumUrl: String?, album: String?, description: String?, genre: String?, duration: Double?, style: TrackStyle?, childrenStyle: TrackStyle?, favorited: Bool?, groupTitle: String?, live: Bool?, imageRow: [ImageRowItem]?) {
22
- self.init(std.string(url), { () -> bridge.std__optional_std__vector_Track__ in
21
+ init(path: String, style: SectionStyle?, sections: [Section]?, children: [Track]?, carPlaySiriListButton: CarPlaySiriListButtonPosition?, id: String?, src: String?, artwork: Variant_String_ArtworkVariants?, artworkSource: ImageSource?, request: TrackRequest?, title: String, subtitle: String?, artist: String?, albumPath: String?, album: String?, description: String?, genre: String?, duration: Double?, disabled: Bool?, favorited: Bool?, live: Bool?) {
22
+ self.init(std.string(path), { () -> bridge.std__optional_SectionStyle_ in
23
+ if let __unwrappedValue = style {
24
+ return bridge.create_std__optional_SectionStyle_(__unwrappedValue)
25
+ } else {
26
+ return .init()
27
+ }
28
+ }(), { () -> bridge.std__optional_std__vector_Section__ in
29
+ if let __unwrappedValue = sections {
30
+ return bridge.create_std__optional_std__vector_Section__({ () -> bridge.std__vector_Section_ in
31
+ var __vector = bridge.create_std__vector_Section_(__unwrappedValue.count)
32
+ for __item in __unwrappedValue {
33
+ __vector.push_back(__item)
34
+ }
35
+ return __vector
36
+ }())
37
+ } else {
38
+ return .init()
39
+ }
40
+ }(), { () -> bridge.std__optional_std__vector_Track__ in
23
41
  if let __unwrappedValue = children {
24
42
  return bridge.create_std__optional_std__vector_Track__({ () -> bridge.std__vector_Track_ in
25
43
  var __vector = bridge.create_std__vector_Track_(__unwrappedValue.count)
@@ -74,12 +92,6 @@ public extension ResolvedTrack {
74
92
  } else {
75
93
  return .init()
76
94
  }
77
- }(), { () -> bridge.std__optional_bool_ in
78
- if let __unwrappedValue = artworkCarPlayTinted {
79
- return bridge.create_std__optional_bool_(__unwrappedValue)
80
- } else {
81
- return .init()
82
- }
83
95
  }(), std.string(title), { () -> bridge.std__optional_std__string_ in
84
96
  if let __unwrappedValue = subtitle {
85
97
  return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
@@ -93,7 +105,7 @@ public extension ResolvedTrack {
93
105
  return .init()
94
106
  }
95
107
  }(), { () -> bridge.std__optional_std__string_ in
96
- if let __unwrappedValue = albumUrl {
108
+ if let __unwrappedValue = albumPath {
97
109
  return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
98
110
  } else {
99
111
  return .init()
@@ -122,15 +134,9 @@ public extension ResolvedTrack {
122
134
  } else {
123
135
  return .init()
124
136
  }
125
- }(), { () -> bridge.std__optional_TrackStyle_ in
126
- if let __unwrappedValue = style {
127
- return bridge.create_std__optional_TrackStyle_(__unwrappedValue)
128
- } else {
129
- return .init()
130
- }
131
- }(), { () -> bridge.std__optional_TrackStyle_ in
132
- if let __unwrappedValue = childrenStyle {
133
- return bridge.create_std__optional_TrackStyle_(__unwrappedValue)
137
+ }(), { () -> bridge.std__optional_bool_ in
138
+ if let __unwrappedValue = disabled {
139
+ return bridge.create_std__optional_bool_(__unwrappedValue)
134
140
  } else {
135
141
  return .init()
136
142
  }
@@ -140,36 +146,35 @@ public extension ResolvedTrack {
140
146
  } else {
141
147
  return .init()
142
148
  }
143
- }(), { () -> bridge.std__optional_std__string_ in
144
- if let __unwrappedValue = groupTitle {
145
- return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
146
- } else {
147
- return .init()
148
- }
149
149
  }(), { () -> bridge.std__optional_bool_ in
150
150
  if let __unwrappedValue = live {
151
151
  return bridge.create_std__optional_bool_(__unwrappedValue)
152
152
  } else {
153
153
  return .init()
154
154
  }
155
- }(), { () -> bridge.std__optional_std__vector_ImageRowItem__ in
156
- if let __unwrappedValue = imageRow {
157
- return bridge.create_std__optional_std__vector_ImageRowItem__({ () -> bridge.std__vector_ImageRowItem_ in
158
- var __vector = bridge.create_std__vector_ImageRowItem_(__unwrappedValue.count)
159
- for __item in __unwrappedValue {
160
- __vector.push_back(__item)
161
- }
162
- return __vector
163
- }())
164
- } else {
165
- return .init()
166
- }
167
155
  }())
168
156
  }
169
157
 
170
158
  @inline(__always)
171
- var url: String {
172
- return String(self.__url)
159
+ var path: String {
160
+ return String(self.__path)
161
+ }
162
+
163
+ @inline(__always)
164
+ var style: SectionStyle? {
165
+ return self.__style.value
166
+ }
167
+
168
+ @inline(__always)
169
+ var sections: [Section]? {
170
+ return { () -> [Section]? in
171
+ if bridge.has_value_std__optional_std__vector_Section__(self.__sections) {
172
+ let __unwrapped = bridge.get_std__optional_std__vector_Section__(self.__sections)
173
+ return __unwrapped.map({ __item in __item })
174
+ } else {
175
+ return nil
176
+ }
177
+ }()
173
178
  }
174
179
 
175
180
  @inline(__always)
@@ -247,18 +252,6 @@ public extension ResolvedTrack {
247
252
  return self.__request.value
248
253
  }
249
254
 
250
- @inline(__always)
251
- var artworkCarPlayTinted: Bool? {
252
- return { () -> Bool? in
253
- if bridge.has_value_std__optional_bool_(self.__artworkCarPlayTinted) {
254
- let __unwrapped = bridge.get_std__optional_bool_(self.__artworkCarPlayTinted)
255
- return __unwrapped
256
- } else {
257
- return nil
258
- }
259
- }()
260
- }
261
-
262
255
  @inline(__always)
263
256
  var title: String {
264
257
  return String(self.__title)
@@ -289,10 +282,10 @@ public extension ResolvedTrack {
289
282
  }
290
283
 
291
284
  @inline(__always)
292
- var albumUrl: String? {
285
+ var albumPath: String? {
293
286
  return { () -> String? in
294
- if bridge.has_value_std__optional_std__string_(self.__albumUrl) {
295
- let __unwrapped = bridge.get_std__optional_std__string_(self.__albumUrl)
287
+ if bridge.has_value_std__optional_std__string_(self.__albumPath) {
288
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__albumPath)
296
289
  return String(__unwrapped)
297
290
  } else {
298
291
  return nil
@@ -349,20 +342,10 @@ public extension ResolvedTrack {
349
342
  }
350
343
 
351
344
  @inline(__always)
352
- var style: TrackStyle? {
353
- return self.__style.value
354
- }
355
-
356
- @inline(__always)
357
- var childrenStyle: TrackStyle? {
358
- return self.__childrenStyle.value
359
- }
360
-
361
- @inline(__always)
362
- var favorited: Bool? {
345
+ var disabled: Bool? {
363
346
  return { () -> Bool? in
364
- if bridge.has_value_std__optional_bool_(self.__favorited) {
365
- let __unwrapped = bridge.get_std__optional_bool_(self.__favorited)
347
+ if bridge.has_value_std__optional_bool_(self.__disabled) {
348
+ let __unwrapped = bridge.get_std__optional_bool_(self.__disabled)
366
349
  return __unwrapped
367
350
  } else {
368
351
  return nil
@@ -371,11 +354,11 @@ public extension ResolvedTrack {
371
354
  }
372
355
 
373
356
  @inline(__always)
374
- var groupTitle: String? {
375
- return { () -> String? in
376
- if bridge.has_value_std__optional_std__string_(self.__groupTitle) {
377
- let __unwrapped = bridge.get_std__optional_std__string_(self.__groupTitle)
378
- return String(__unwrapped)
357
+ var favorited: Bool? {
358
+ return { () -> Bool? in
359
+ if bridge.has_value_std__optional_bool_(self.__favorited) {
360
+ let __unwrapped = bridge.get_std__optional_bool_(self.__favorited)
361
+ return __unwrapped
379
362
  } else {
380
363
  return nil
381
364
  }
@@ -393,16 +376,4 @@ public extension ResolvedTrack {
393
376
  }
394
377
  }()
395
378
  }
396
-
397
- @inline(__always)
398
- var imageRow: [ImageRowItem]? {
399
- return { () -> [ImageRowItem]? in
400
- if bridge.has_value_std__optional_std__vector_ImageRowItem__(self.__imageRow) {
401
- let __unwrapped = bridge.get_std__optional_std__vector_ImageRowItem__(self.__imageRow)
402
- return __unwrapped.map({ __item in __item })
403
- } else {
404
- return nil
405
- }
406
- }()
407
- }
408
379
  }
@@ -0,0 +1,100 @@
1
+ ///
2
+ /// Section.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Represents an instance of `Section`, backed by a C++ struct.
12
+ */
13
+ public typealias Section = margelo.nitro.audiobrowser.Section
14
+
15
+ public extension Section {
16
+ private typealias bridge = margelo.nitro.audiobrowser.bridge.swift
17
+
18
+ /**
19
+ * Create a new instance of `Section`.
20
+ */
21
+ init(title: String?, subtitle: String?, style: SectionStyle?, path: String?, children: [Track]) {
22
+ self.init({ () -> bridge.std__optional_std__string_ in
23
+ if let __unwrappedValue = title {
24
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
25
+ } else {
26
+ return .init()
27
+ }
28
+ }(), { () -> bridge.std__optional_std__string_ in
29
+ if let __unwrappedValue = subtitle {
30
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
31
+ } else {
32
+ return .init()
33
+ }
34
+ }(), { () -> bridge.std__optional_SectionStyle_ in
35
+ if let __unwrappedValue = style {
36
+ return bridge.create_std__optional_SectionStyle_(__unwrappedValue)
37
+ } else {
38
+ return .init()
39
+ }
40
+ }(), { () -> bridge.std__optional_std__string_ in
41
+ if let __unwrappedValue = path {
42
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
43
+ } else {
44
+ return .init()
45
+ }
46
+ }(), { () -> bridge.std__vector_Track_ in
47
+ var __vector = bridge.create_std__vector_Track_(children.count)
48
+ for __item in children {
49
+ __vector.push_back(__item)
50
+ }
51
+ return __vector
52
+ }())
53
+ }
54
+
55
+ @inline(__always)
56
+ var title: String? {
57
+ return { () -> String? in
58
+ if bridge.has_value_std__optional_std__string_(self.__title) {
59
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__title)
60
+ return String(__unwrapped)
61
+ } else {
62
+ return nil
63
+ }
64
+ }()
65
+ }
66
+
67
+ @inline(__always)
68
+ var subtitle: String? {
69
+ return { () -> String? in
70
+ if bridge.has_value_std__optional_std__string_(self.__subtitle) {
71
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__subtitle)
72
+ return String(__unwrapped)
73
+ } else {
74
+ return nil
75
+ }
76
+ }()
77
+ }
78
+
79
+ @inline(__always)
80
+ var style: SectionStyle? {
81
+ return self.__style.value
82
+ }
83
+
84
+ @inline(__always)
85
+ var path: String? {
86
+ return { () -> String? in
87
+ if bridge.has_value_std__optional_std__string_(self.__path) {
88
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__path)
89
+ return String(__unwrapped)
90
+ } else {
91
+ return nil
92
+ }
93
+ }()
94
+ }
95
+
96
+ @inline(__always)
97
+ var children: [Track] {
98
+ return self.__children.map({ __item in __item })
99
+ }
100
+ }
@@ -0,0 +1,64 @@
1
+ ///
2
+ /// SectionStyle.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Represents an instance of `SectionStyle`, backed by a C++ struct.
12
+ */
13
+ public typealias SectionStyle = margelo.nitro.audiobrowser.SectionStyle
14
+
15
+ public extension SectionStyle {
16
+ private typealias bridge = margelo.nitro.audiobrowser.bridge.swift
17
+
18
+ /**
19
+ * Create a new instance of `SectionStyle`.
20
+ */
21
+ init(gridWrap: Bool?, display: StyleDisplay?, artworkRendering: ArtworkRendering?) {
22
+ self.init({ () -> bridge.std__optional_bool_ in
23
+ if let __unwrappedValue = gridWrap {
24
+ return bridge.create_std__optional_bool_(__unwrappedValue)
25
+ } else {
26
+ return .init()
27
+ }
28
+ }(), { () -> bridge.std__optional_StyleDisplay_ in
29
+ if let __unwrappedValue = display {
30
+ return bridge.create_std__optional_StyleDisplay_(__unwrappedValue)
31
+ } else {
32
+ return .init()
33
+ }
34
+ }(), { () -> bridge.std__optional_ArtworkRendering_ in
35
+ if let __unwrappedValue = artworkRendering {
36
+ return bridge.create_std__optional_ArtworkRendering_(__unwrappedValue)
37
+ } else {
38
+ return .init()
39
+ }
40
+ }())
41
+ }
42
+
43
+ @inline(__always)
44
+ var gridWrap: Bool? {
45
+ return { () -> Bool? in
46
+ if bridge.has_value_std__optional_bool_(self.__gridWrap) {
47
+ let __unwrapped = bridge.get_std__optional_bool_(self.__gridWrap)
48
+ return __unwrapped
49
+ } else {
50
+ return nil
51
+ }
52
+ }()
53
+ }
54
+
55
+ @inline(__always)
56
+ var display: StyleDisplay? {
57
+ return self.__display.value
58
+ }
59
+
60
+ @inline(__always)
61
+ var artworkRendering: ArtworkRendering? {
62
+ return self.__artworkRendering.value
63
+ }
64
+ }
@@ -0,0 +1,40 @@
1
+ ///
2
+ /// StyleDisplay.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /**
9
+ * Represents the JS union `StyleDisplay`, backed by a C++ enum.
10
+ */
11
+ public typealias StyleDisplay = margelo.nitro.audiobrowser.StyleDisplay
12
+
13
+ public extension StyleDisplay {
14
+ /**
15
+ * Get a StyleDisplay for the given String value, or
16
+ * return `nil` if the given value was invalid/unknown.
17
+ */
18
+ init?(fromString string: String) {
19
+ switch string {
20
+ case "list":
21
+ self = .list
22
+ case "grid":
23
+ self = .grid
24
+ default:
25
+ return nil
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Get the String value this StyleDisplay represents.
31
+ */
32
+ var stringValue: String {
33
+ switch self {
34
+ case .list:
35
+ return "list"
36
+ case .grid:
37
+ return "grid"
38
+ }
39
+ }
40
+ }