react-native-queue-player 1.0.8 → 1.0.9

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 (39) hide show
  1. package/android/src/main/java/com/margelo/nitro/queueplayer/MediaItemBuilder.kt +21 -3
  2. package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderArtwork.kt +30 -0
  3. package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoader.kt +9 -6
  4. package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackService.kt +4 -1
  5. package/android/src/main/java/com/margelo/nitro/queueplayer/TrackPlayer.kt +9 -5
  6. package/android/src/test/java/com/margelo/nitro/queueplayer/MediaItemBuilderTest.kt +55 -0
  7. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaceholderArtworkTest.kt +72 -0
  8. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoaderTest.kt +21 -9
  9. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceArtworkLoaderTest.kt +9 -9
  10. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackTest.kt +1 -1
  11. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAirPlayMetadataWiringTest.kt +1 -1
  12. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAudioFocusTest.kt +1 -1
  13. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerEventsTest.kt +3 -3
  14. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLifecycleTest.kt +7 -7
  15. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLookaheadConfigTest.kt +6 -6
  16. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerMutationTest.kt +2 -2
  17. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerProgressThrottleTest.kt +1 -1
  18. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerQueueChangeTest.kt +1 -1
  19. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerQueueTest.kt +1 -1
  20. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerReadersTest.kt +1 -1
  21. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipCapabilityTest.kt +2 -2
  22. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipTest.kt +1 -1
  23. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerTransportTest.kt +1 -1
  24. package/ios/Cast/Core/CastNowPlayingController.swift +7 -4
  25. package/ios/NowPlayingInfo.swift +7 -9
  26. package/ios/PlaceholderArtwork.swift +24 -1
  27. package/ios/Tests/AVQueueBuilderTests.swift +9 -9
  28. package/ios/Tests/CastNowPlayingControllerTests.swift +33 -0
  29. package/ios/Tests/PlaceholderArtworkTests.swift +81 -0
  30. package/ios/TrackPlayer.swift +5 -1
  31. package/lib/module/types.js.map +1 -1
  32. package/lib/typescript/types.d.ts +17 -0
  33. package/lib/typescript/types.d.ts.map +1 -1
  34. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +5 -1
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlayerConfig.kt +7 -2
  36. package/nitrogen/generated/ios/swift/PlayerConfig.swift +19 -1
  37. package/nitrogen/generated/shared/c++/PlayerConfig.hpp +5 -1
  38. package/package.json +1 -1
  39. package/src/types.ts +17 -0
@@ -80,7 +80,7 @@ class TrackPlayerLookaheadConfigTest {
80
80
  httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null,
81
81
  networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null,
82
82
  visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = 250.0, lookaheadCacheEvictionPolicy = null,
83
- progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null
83
+ progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null
84
84
  ),
85
85
  context()
86
86
  )
@@ -120,7 +120,7 @@ class TrackPlayerLookaheadConfigTest {
120
120
  networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null,
121
121
  visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null,
122
122
  lookaheadCacheEvictionPolicy = policy,
123
- progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null
123
+ progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null
124
124
  )
125
125
 
126
126
  // --- setLookaheadCacheInternal
@@ -298,7 +298,7 @@ class TrackPlayerLookaheadConfigTest {
298
298
  @Test
299
299
  fun `re-configure with changed httpHeaders rebuilds the player (writer + cache)`() {
300
300
  player.configureInternal(
301
- PlayerConfig(httpHeaders = mapOf("X-Auth" to "token-1"), userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null),
301
+ PlayerConfig(httpHeaders = mapOf("X-Auth" to "token-1"), userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null),
302
302
  context()
303
303
  )
304
304
  val firstWriter = player.lookaheadCacheWriter
@@ -307,7 +307,7 @@ class TrackPlayerLookaheadConfigTest {
307
307
  assertNotNull(firstCache)
308
308
 
309
309
  player.configureInternal(
310
- PlayerConfig(httpHeaders = mapOf("X-Auth" to "token-2"), userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null),
310
+ PlayerConfig(httpHeaders = mapOf("X-Auth" to "token-2"), userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null),
311
311
  context()
312
312
  )
313
313
 
@@ -339,7 +339,7 @@ class TrackPlayerLookaheadConfigTest {
339
339
  // simulated here by `destroyInternal` between
340
340
  // `configureInternal` calls) yields a fresh writer instance,
341
341
  // even when headers are unchanged.
342
- val cfg = PlayerConfig(httpHeaders = mapOf("X-Auth" to "token"), userAgent = "rnqp/test", autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null)
342
+ val cfg = PlayerConfig(httpHeaders = mapOf("X-Auth" to "token"), userAgent = "rnqp/test", autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null)
343
343
  player.configureInternal(cfg, context())
344
344
  val firstWriter = player.lookaheadCacheWriter
345
345
 
@@ -413,5 +413,5 @@ class TrackPlayerLookaheadConfigTest {
413
413
 
414
414
  // --- Helpers
415
415
 
416
- private fun emptyConfig() = PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null)
416
+ private fun emptyConfig() = PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null)
417
417
  }
@@ -45,7 +45,7 @@ class TrackPlayerMutationTest {
45
45
  player = TrackPlayer()
46
46
  serviceHandle = bindPlaybackServiceForTest(player, context())
47
47
  player.configureInternal(
48
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
48
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
49
49
  )
50
50
  player.setQueueInternal((1..5).map { track("t$it") })
51
51
  // cur defaults to 0 after setQueue; tests needing mid-queue
@@ -127,7 +127,7 @@ class TrackPlayerMutationTest {
127
127
  val freshHandle = bindPlaybackServiceForTest(fresh, context())
128
128
  try {
129
129
  fresh.configureInternal(
130
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
130
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
131
131
  )
132
132
  assertEquals(-1, fresh.currentTrackIndex)
133
133
  assertEquals(Player.STATE_IDLE, fresh.player!!.playbackState)
@@ -35,7 +35,7 @@ class TrackPlayerProgressThrottleTest {
35
35
  httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null,
36
36
  networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null,
37
37
  visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null,
38
- progressUpdateIntervalMs = foregroundMs, backgroundProgressUpdateIntervalMs = backgroundMs
38
+ progressUpdateIntervalMs = foregroundMs, backgroundProgressUpdateIntervalMs = backgroundMs, placeholderArtworkUri = null
39
39
  )
40
40
 
41
41
  @Before
@@ -47,7 +47,7 @@ class TrackPlayerQueueChangeTest {
47
47
  player = TrackPlayer()
48
48
  serviceHandle = bindPlaybackServiceForTest(player, context())
49
49
  player.configureInternal(
50
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
50
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
51
51
  )
52
52
  player.setQueueInternal((1..5).map { track("t$it") })
53
53
  }
@@ -55,7 +55,7 @@ class TrackPlayerQueueTest {
55
55
  player = TrackPlayer()
56
56
  serviceHandle = bindPlaybackServiceForTest(player, context())
57
57
  player.configureInternal(
58
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
58
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
59
59
  )
60
60
  }
61
61
 
@@ -42,7 +42,7 @@ class TrackPlayerReadersTest {
42
42
  httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null,
43
43
  networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null,
44
44
  visualizationEnabled = null, clampSeekToBuffered = null,
45
- lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null
45
+ lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null
46
46
  ),
47
47
  context()
48
48
  )
@@ -53,7 +53,7 @@ class TrackPlayerSkipCapabilityTest {
53
53
  player = TrackPlayer()
54
54
  serviceHandle = bindPlaybackServiceForTest(player, context())
55
55
  player.configureInternal(
56
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
56
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
57
57
  )
58
58
  }
59
59
 
@@ -318,7 +318,7 @@ class TrackPlayerSkipCapabilityTest {
318
318
  player = TrackPlayer()
319
319
  serviceHandle = bindPlaybackServiceForTest(player, context())
320
320
  player.configureInternal(
321
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
321
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
322
322
  )
323
323
  }
324
324
  }
@@ -51,7 +51,7 @@ class TrackPlayerSkipTest {
51
51
  player = TrackPlayer()
52
52
  serviceHandle = bindPlaybackServiceForTest(player, context())
53
53
  player.configureInternal(
54
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
54
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
55
55
  )
56
56
  player.tracks = (1..5).map { track("t$it") }
57
57
  player.currentTrackIndex = 2 // mid-queue default for most cases
@@ -50,7 +50,7 @@ class TrackPlayerTransportTest {
50
50
  player = TrackPlayer()
51
51
  serviceHandle = bindPlaybackServiceForTest(player, context())
52
52
  player.configureInternal(
53
- PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null), context()
53
+ PlayerConfig(httpHeaders = null, userAgent = null, autoRetries = null, retryBackoffMs = null, networkTimeoutMs = null, audioContentType = null, audioCategoryOptions = null, visualizationEnabled = null, clampSeekToBuffered = null, lookaheadCacheMaxSizeMb = null, lookaheadCacheEvictionPolicy = null, progressUpdateIntervalMs = null, backgroundProgressUpdateIntervalMs = null, placeholderArtworkUri = null), context()
54
54
  )
55
55
  }
56
56
 
@@ -35,12 +35,15 @@ final class CastNowPlayingController {
35
35
  /// `TrackPlayer.configure` via `configureArtwork`.
36
36
  private let artworkResolver = ArtworkResolver()
37
37
 
38
- /// Bundled placeholder shown until the real cover resolves, so the
39
- /// lockscreen never renders artwork-less during the network fetch.
40
- private static let placeholderArtwork: MPMediaItemArtwork = {
38
+ /// Placeholder shown until the real cover resolves, so the lockscreen
39
+ /// never renders artwork-less during the network fetch. Read live —
40
+ /// `PlaceholderArtwork.image` is the consumer-configured image when one
41
+ /// is set (`PlayerConfig.placeholderArtworkUri`), else the bundled one —
42
+ /// so a per-refresh write here never clobbers it back to the built-in.
43
+ private static var placeholderArtwork: MPMediaItemArtwork {
41
44
  let image = PlaceholderArtwork.image
42
45
  return MPMediaItemArtwork(boundsSize: image.size) { _ in image }
43
- }()
46
+ }
44
47
 
45
48
  /// Snapshot of the active receiver track for the lockscreen surface.
46
49
  /// Pushed by `TrackPlayer` when the receiver's current track (resolved
@@ -43,7 +43,6 @@ final class NowPlayingInfo {
43
43
  var snapshotProvider: (() -> Snapshot)?
44
44
 
45
45
  private var periodicTimer: Timer?
46
- private var cachedPlaceholderArtwork: MPMediaItemArtwork?
47
46
  /// Subscription to the global cast active-session router. When a
48
47
  /// remote session is active, `CastNowPlayingController` owns the
49
48
  /// lockscreen surface and this writer becomes a no-op — every
@@ -176,15 +175,14 @@ final class NowPlayingInfo {
176
175
  info[MPNowPlayingInfoPropertyPlaybackRate] = rate
177
176
  }
178
177
 
179
- /// Lazy MPMediaItemArtwork wrapper around the bundled placeholder
180
- /// UIImage. Built once per process; the closure that the system
181
- /// invokes for size requests just returns the same image (the system
182
- /// handles its own scaling).
178
+ /// MPMediaItemArtwork wrapper around the active placeholder image —
179
+ /// `PlaceholderArtwork.image` is the consumer-configured image when one
180
+ /// is set (`PlayerConfig.placeholderArtworkUri`), else the bundled one.
181
+ /// Rebuilt per call (cheap: the closure just returns the image, the
182
+ /// system handles scaling) so a placeholder set at `configure` is
183
+ /// reflected rather than serving a stale wrapper.
183
184
  private func placeholderArtwork() -> MPMediaItemArtwork {
184
- if let cached = cachedPlaceholderArtwork { return cached }
185
185
  let image = PlaceholderArtwork.image
186
- let mp = MPMediaItemArtwork(boundsSize: image.size) { _ in image }
187
- cachedPlaceholderArtwork = mp
188
- return mp
186
+ return MPMediaItemArtwork(boundsSize: image.size) { _ in image }
189
187
  }
190
188
  }
@@ -15,7 +15,30 @@ import UIKit
15
15
  /// Android skins (mirror that defence on iOS too).
16
16
  enum PlaceholderArtwork {
17
17
 
18
- static let image: UIImage = loadImage()
18
+ /// The active placeholder: the consumer-supplied image when one is
19
+ /// configured + loadable, otherwise the bundled RNQP placeholder.
20
+ static var image: UIImage { customImage ?? bundledImage }
21
+
22
+ /// Set (or clear) the consumer-supplied placeholder from
23
+ /// `PlayerConfig.placeholderArtworkUri`. Loaded from a local `file://`
24
+ /// image the same way the bundled placeholder is (`UIImage(contentsOfFile:)`).
25
+ /// Only `file://` is honoured (scheme match is case-insensitive) — the
26
+ /// built-in is a local file, and a remote URL would break offline +
27
+ /// change behaviour; anything else (or an unloadable file) leaves the
28
+ /// bundled placeholder in effect. Decode is synchronous, so a very large
29
+ /// consumer image briefly blocks the `configure` call. Main-thread only
30
+ /// (called from `configure`).
31
+ static func setCustom(uri: String?) {
32
+ guard let uri = uri, !uri.isEmpty,
33
+ let url = URL(string: uri), url.scheme?.lowercased() == "file" else {
34
+ customImage = nil
35
+ return
36
+ }
37
+ customImage = UIImage(contentsOfFile: url.path)
38
+ }
39
+
40
+ private static var customImage: UIImage?
41
+ private static let bundledImage: UIImage = loadImage()
19
42
 
20
43
  private static func loadImage() -> UIImage {
21
44
  let frameworkBundle = Bundle(for: BundleToken.self)
@@ -169,7 +169,7 @@ final class AVQueueBuilderTests: XCTestCase {
169
169
  let item = AVQueueBuilder.makeItem(
170
170
  for: track,
171
171
  queueItemId: UUID().uuidString,
172
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
172
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
173
173
  cache: cache
174
174
  )
175
175
  XCTAssertNotNil(item)
@@ -186,7 +186,7 @@ final class AVQueueBuilderTests: XCTestCase {
186
186
  func testMakeItemFallsBackToRemoteWhenCacheMisses() {
187
187
  // No cache provided → behaves identically to the no-cache path.
188
188
  let track = makeTrack(id: "t1", url: "https://example.com/track.m4a")
189
- let config = PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil)
189
+ let config = PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil)
190
190
  let item = AVQueueBuilder.makeItem(
191
191
  for: track, queueItemId: UUID().uuidString, config: config, cache: nil)
192
192
  XCTAssertNotNil(item)
@@ -214,7 +214,7 @@ final class AVQueueBuilderTests: XCTestCase {
214
214
  let item = AVQueueBuilder.makeItem(
215
215
  for: track,
216
216
  queueItemId: UUID().uuidString,
217
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
217
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
218
218
  cache: cache
219
219
  )
220
220
  XCTAssertNotNil(item)
@@ -260,7 +260,7 @@ final class AVQueueBuilderTests: XCTestCase {
260
260
  let item = AVQueueBuilder.makeItem(
261
261
  for: track,
262
262
  queueItemId: UUID().uuidString,
263
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
263
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
264
264
  cache: cache
265
265
  )
266
266
  XCTAssertNotNil(item)
@@ -296,7 +296,7 @@ final class AVQueueBuilderTests: XCTestCase {
296
296
  let items = AVQueueBuilder.buildPlayerItems(
297
297
  tracks: [trackA, trackB],
298
298
  queueItemIds: [UUID().uuidString, UUID().uuidString],
299
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
299
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
300
300
  cache: cache
301
301
  )
302
302
  XCTAssertEqual(items.count, 2)
@@ -371,12 +371,12 @@ final class AVQueueBuilderTests: XCTestCase {
371
371
  let queueItemIdB = UUID().uuidString
372
372
  let itemA = AVQueueBuilder.makeItem(
373
373
  for: track, queueItemId: queueItemIdA,
374
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
374
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
375
375
  cache: nil
376
376
  )
377
377
  let itemB = AVQueueBuilder.makeItem(
378
378
  for: track, queueItemId: queueItemIdB,
379
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
379
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
380
380
  cache: nil
381
381
  )
382
382
  XCTAssertNotNil(itemA)
@@ -401,7 +401,7 @@ final class AVQueueBuilderTests: XCTestCase {
401
401
  let queueItemId = UUID().uuidString
402
402
  let item = AVQueueBuilder.makeItem(
403
403
  for: track, queueItemId: queueItemId,
404
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
404
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
405
405
  cache: nil
406
406
  )
407
407
  XCTAssertNotNil(item)
@@ -417,7 +417,7 @@ final class AVQueueBuilderTests: XCTestCase {
417
417
  let queueItemId = UUID().uuidString
418
418
  let item = AVQueueBuilder.makeItem(
419
419
  for: track, queueItemId: queueItemId,
420
- config: PlayerConfig(httpHeaders: nil, userAgent: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
420
+ config: PlayerConfig(httpHeaders: nil, userAgent: nil, placeholderArtworkUri: nil, autoRetries: nil, retryBackoffMs: nil, networkTimeoutMs: nil, audioContentType: nil, audioCategoryOptions: nil, visualizationEnabled: nil, clampSeekToBuffered: nil, lookaheadCacheMaxSizeMb: nil, lookaheadCacheEvictionPolicy: nil, progressUpdateIntervalMs: nil, backgroundProgressUpdateIntervalMs: nil),
421
421
  cache: nil
422
422
  )
423
423
  XCTAssertNotNil(item)
@@ -132,6 +132,39 @@ final class CastNowPlayingControllerTests: XCTestCase {
132
132
  "activation renders the most recent cached metadata"
133
133
  )
134
134
  }
135
+
136
+ func testSeededPlaceholderReflectsConfiguredCustomImage() throws {
137
+ let tmp = FileManager.default.temporaryDirectory
138
+ .appendingPathComponent("rnqp-cast-placeholder-\(UUID().uuidString).jpg")
139
+ try makeTinyJpeg().write(to: tmp)
140
+ defer {
141
+ try? FileManager.default.removeItem(at: tmp)
142
+ PlaceholderArtwork.setCustom(uri: nil)
143
+ }
144
+ let builtInSize = PlaceholderArtwork.image.size
145
+ PlaceholderArtwork.setCustom(uri: tmp.absoluteString)
146
+ let customSize = PlaceholderArtwork.image.size
147
+ // Precondition: the fixture is a different size from the built-in,
148
+ // else the size check below can't tell them apart.
149
+ XCTAssertNotEqual(customSize, builtInSize)
150
+
151
+ try router.setActive(ControllableRemoteSession())
152
+
153
+ let artwork = info?[MPMediaItemPropertyArtwork] as? MPMediaItemArtwork
154
+ XCTAssertEqual(
155
+ artwork?.image(at: customSize)?.size, customSize,
156
+ "the cast lockscreen seeds the live custom placeholder, not a frozen built-in"
157
+ )
158
+ }
159
+
160
+ private func makeTinyJpeg() -> Data {
161
+ let renderer = UIGraphicsImageRenderer(size: CGSize(width: 1, height: 1))
162
+ let image = renderer.image { ctx in
163
+ UIColor.green.setFill()
164
+ ctx.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
165
+ }
166
+ return image.jpegData(compressionQuality: 1.0) ?? Data()
167
+ }
135
168
  }
136
169
 
137
170
  // MARK: - Listener-firing fake
@@ -0,0 +1,81 @@
1
+ import XCTest
2
+ @testable import QueuePlayer
3
+ import UIKit
4
+
5
+ /// `PlaceholderArtwork` swaps in a consumer-supplied cover-art placeholder
6
+ /// (`PlayerConfig.placeholderArtworkUri`) in place of the bundled RNQP
7
+ /// image. Only a local `file://` image is honoured; a remote or unset URI,
8
+ /// or an unloadable file, keeps the bundled placeholder.
9
+ @MainActor
10
+ final class PlaceholderArtworkTests: XCTestCase {
11
+
12
+ override func tearDown() {
13
+ // Process-wide singleton — reset so a set custom image does not leak
14
+ // into other suites that read the bundled placeholder.
15
+ PlaceholderArtwork.setCustom(uri: nil)
16
+ super.tearDown()
17
+ }
18
+
19
+ func testCustomFileUriReplacesTheBundledPlaceholder() throws {
20
+ let bundled = PlaceholderArtwork.image
21
+ let tmp = FileManager.default.temporaryDirectory
22
+ .appendingPathComponent("rnqp-placeholder-\(UUID().uuidString).jpg")
23
+ try makeJpegBytes().write(to: tmp)
24
+ defer { try? FileManager.default.removeItem(at: tmp) }
25
+
26
+ PlaceholderArtwork.setCustom(uri: tmp.absoluteString)
27
+
28
+ let image = PlaceholderArtwork.image
29
+ XCTAssertFalse(image === bundled,
30
+ "a loadable file:// image replaces the bundled placeholder")
31
+ XCTAssertTrue(image === PlaceholderArtwork.image,
32
+ "the custom image is stable across reads")
33
+ }
34
+
35
+ func testUnsetUriKeepsTheBundledPlaceholder() {
36
+ let bundled = PlaceholderArtwork.image
37
+ PlaceholderArtwork.setCustom(uri: nil)
38
+ XCTAssertTrue(PlaceholderArtwork.image === bundled)
39
+ }
40
+
41
+ func testNonFileUriIsRejectedAndKeepsTheBundledPlaceholder() {
42
+ let bundled = PlaceholderArtwork.image
43
+ PlaceholderArtwork.setCustom(uri: "https://example.com/logo.png")
44
+ XCTAssertTrue(PlaceholderArtwork.image === bundled,
45
+ "a remote URI is rejected — offline-only file:// contract")
46
+ }
47
+
48
+ func testUnloadableFileUriFallsBackToTheBundledPlaceholder() {
49
+ let bundled = PlaceholderArtwork.image
50
+ PlaceholderArtwork.setCustom(uri: "file:///nonexistent/path/missing.jpg")
51
+ XCTAssertTrue(PlaceholderArtwork.image === bundled)
52
+ }
53
+
54
+ func testEmptyUriKeepsTheBundledPlaceholder() {
55
+ let bundled = PlaceholderArtwork.image
56
+ PlaceholderArtwork.setCustom(uri: "")
57
+ XCTAssertTrue(PlaceholderArtwork.image === bundled)
58
+ }
59
+
60
+ func testUppercaseFileSchemeIsHonoured() throws {
61
+ let bundled = PlaceholderArtwork.image
62
+ let tmp = FileManager.default.temporaryDirectory
63
+ .appendingPathComponent("rnqp-placeholder-\(UUID().uuidString).jpg")
64
+ try makeJpegBytes().write(to: tmp)
65
+ defer { try? FileManager.default.removeItem(at: tmp) }
66
+
67
+ PlaceholderArtwork.setCustom(uri: "FILE://" + tmp.path)
68
+
69
+ XCTAssertFalse(PlaceholderArtwork.image === bundled,
70
+ "an uppercase FILE:// scheme is honoured (case-insensitive)")
71
+ }
72
+
73
+ private func makeJpegBytes() -> Data {
74
+ let renderer = UIGraphicsImageRenderer(size: CGSize(width: 1, height: 1))
75
+ let image = renderer.image { ctx in
76
+ UIColor.blue.setFill()
77
+ ctx.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
78
+ }
79
+ return image.jpegData(compressionQuality: 1.0) ?? Data()
80
+ }
81
+ }
@@ -97,7 +97,7 @@ class TrackPlayer: HybridTrackPlayerSpec {
97
97
  PlayerConfig(
98
98
  httpHeaders: nil,
99
99
  userAgent: nil,
100
- autoRetries: nil,
100
+ placeholderArtworkUri: nil, autoRetries: nil,
101
101
  retryBackoffMs: nil,
102
102
  networkTimeoutMs: nil,
103
103
  audioContentType: nil,
@@ -609,6 +609,10 @@ class TrackPlayer: HybridTrackPlayerSpec {
609
609
  // each track-change resolve.
610
610
  self.artworkResolver.configHeaders = config.httpHeaders
611
611
  self.artworkResolver.configUserAgent = config.userAgent
612
+ // Swap the cover-art placeholder to the consumer-supplied image
613
+ // (or back to the built-in when unset). Every placeholder site
614
+ // reads `PlaceholderArtwork.image`, so this is the only hook needed.
615
+ PlaceholderArtwork.setCustom(uri: config.placeholderArtworkUri)
612
616
  // Same live config for the cast lockscreen's own artwork
613
617
  // resolver so authenticated covers resolve during cast.
614
618
  CastNowPlayingController.shared.configureArtwork(
@@ -1 +1 @@
1
- {"version":3,"names":["crossfadeDurationBounds","minMs","maxMs","stepMs","SectionIcon"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmJA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,uBAAuB,GAAG;EACrC;EACAC,KAAK,EAAE,KAAK;EACZ;EACAC,KAAK,EAAE,MAAM;EACb;EACAC,MAAM,EAAE;AACV,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;AACA;;AAOe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6EA;;AAMA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA4FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAgBvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;;AAcA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AASA;AACA;AACA;AACA;;AAWA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["crossfadeDurationBounds","minMs","maxMs","stepMs","SectionIcon"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoKA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,uBAAuB,GAAG;EACrC;EACAC,KAAK,EAAE,KAAK;EACZ;EACAC,KAAK,EAAE,MAAM;EACb;EACAC,MAAM,EAAE;AACV,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;AACA;;AAOe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6EA;;AAMA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA4FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAgBvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;;AAcA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AASA;AACA;AACA;AACA;;AAWA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;;AA0BA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -62,6 +62,23 @@ export interface PlayerConfig {
62
62
  httpHeaders?: Record<string, string>;
63
63
  /** Overrides the default UA on network requests. */
64
64
  userAgent?: string;
65
+ /**
66
+ * Replacement for the built-in RNQP cover-art placeholder (the image
67
+ * shown before real artwork loads and when a track has no artwork).
68
+ * MUST be a **local `file://` URI** — the built-in placeholder is a
69
+ * local file, so this must be too; remote URLs are not loaded (they
70
+ * would break offline playback and change behaviour). When set, this
71
+ * image is used in place of the built-in everywhere the built-in is
72
+ * used; unset, non-`file://`, or unloadable falls back to the built-in.
73
+ * Resolve a bundled asset to a `file://` path with expo-asset —
74
+ * `const a = Asset.fromModule(require('./logo.png')); await
75
+ * a.downloadAsync();` then pass `a.localUri` — which copies the packaged
76
+ * image onto the filesystem across dev and release.
77
+ * (`Image.resolveAssetSource(...).uri` is not suitable: it is an
78
+ * `http://` Metro URL in dev and a drawable resource name on Android
79
+ * release, neither of which is a `file://` path.)
80
+ */
81
+ placeholderArtworkUri?: string;
65
82
  /**
66
83
  * Auto-retry attempts on transient errors (TIMEOUT / CONNECTION_LOST /
67
84
  * NETWORK_UNREACHABLE / SOURCE_UNREACHABLE / CANNOT_OPEN). Clamped
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;OASG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,cAAc,CAAC;IAC9C;;;;;;;;;;;;OAYG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;;;;;;;;OAcG;IACH,kCAAkC,CAAC,EAAE,MAAM,CAAC;CAC7C;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;IAClC,iDAAiD;;IAEjD,iDAAiD;;IAEjD,kEAAkE;;CAE1D,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,iHAAiH;IACjH,QAAQ,EAAE,cAAc,CAAC;IACzB,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,QAAQ,GACR,OAAO,GACP,cAAc,GACd,cAAc,GACd,WAAW,GACX,aAAa,CAAC;AAElB;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GACzB,gBAAgB,GAChB,oBAAoB,GACpB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,MAAM;AACR;;;;;;GAMG;GACD,qBAAqB,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,GACP,SAAS,CAAC;AAEd;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,KAAK,GACL,UAAU,GACV,KAAK,GACL,SAAS,CAAC;AAEd;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,KAAK,EAAE,UAAU,CAAC;IAClB;;;;;OAKG;IACH,SAAS,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,wDAAwD;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;OAQG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;OAMG;IACH,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;OAGG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;OAKG;IACH,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;;;;;OASG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,GAAG,CAAC,EAAE,yBAAyB,CAAC;IAChC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,6BAA6B,CAAC;CACzC;AAED,4CAA4C;AAC5C,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,gDAAgD;AAChD,MAAM,WAAW,6BAA6B;IAC5C,8DAA8D;IAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;OAIG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,iBAAiB,GACjB,qBAAqB,GACrB,YAAY,GACZ,YAAY,GACZ,yBAAyB,GACzB,4BAA4B,GAC5B,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GACpB,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,IAAI,EAAE,iBAAiB,CAAC;IACxB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,0FAA0F;IAC1F,eAAe,EAAE,OAAO,CAAC;IACzB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB,kGAAkG;IAClG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,yGAAyG;IACzG,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAMD,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,OAAO,GACP,MAAM,GACN,UAAU,GACV,OAAO,CAAC;AAEZ;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,wBAAwB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,2BAA2B,CAAC;IAC1C;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAEjE;;;;;;;;;GASG;AACH,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,cAAc,oBAAoB;IAClC,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,QAAQ,aAAa;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,qGAAqG;IACrG,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAMD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;;;;;OAOG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,EAAE,WAAW,CAAC;IACjB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,wBAAwB,CAAC;AAO7B;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,wEAAwE;AACxE,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,SAAS,GACT,IAAI,GACJ,SAAS,GACT,cAAc,GACd,SAAS,CAAC;AAEd;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,QAAQ,GACR,aAAa,GACb,WAAW,GACX,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,cAAc,EAAE,kBAAkB,CAAC;IACnC;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,wBAAwB,CAAC;IACvC,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,wBAAwB,CAAC;IACvC,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,UAAU,GACV,OAAO,GACP,KAAK,GACL,MAAM,GACN,eAAe,GACf,aAAa,GACb,cAAc,GACd,SAAS,GACT,aAAa,GACb,SAAS,GACT,YAAY,GACZ,SAAS,CAAC;AAEd;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,8 @@ namespace margelo::nitro::queueplayer {
43
43
  jni::local_ref<jni::JMap<jni::JString, jni::JString>> httpHeaders = this->getFieldValue(fieldHttpHeaders);
44
44
  static const auto fieldUserAgent = clazz->getField<jni::JString>("userAgent");
45
45
  jni::local_ref<jni::JString> userAgent = this->getFieldValue(fieldUserAgent);
46
+ static const auto fieldPlaceholderArtworkUri = clazz->getField<jni::JString>("placeholderArtworkUri");
47
+ jni::local_ref<jni::JString> placeholderArtworkUri = this->getFieldValue(fieldPlaceholderArtworkUri);
46
48
  static const auto fieldAutoRetries = clazz->getField<jni::JDouble>("autoRetries");
47
49
  jni::local_ref<jni::JDouble> autoRetries = this->getFieldValue(fieldAutoRetries);
48
50
  static const auto fieldRetryBackoffMs = clazz->getField<jni::JDouble>("retryBackoffMs");
@@ -75,6 +77,7 @@ namespace margelo::nitro::queueplayer {
75
77
  return __map;
76
78
  }()) : std::nullopt,
77
79
  userAgent != nullptr ? std::make_optional(userAgent->toStdString()) : std::nullopt,
80
+ placeholderArtworkUri != nullptr ? std::make_optional(placeholderArtworkUri->toStdString()) : std::nullopt,
78
81
  autoRetries != nullptr ? std::make_optional(autoRetries->value()) : std::nullopt,
79
82
  retryBackoffMs != nullptr ? std::make_optional(retryBackoffMs->value()) : std::nullopt,
80
83
  networkTimeoutMs != nullptr ? std::make_optional(networkTimeoutMs->value()) : std::nullopt,
@@ -95,7 +98,7 @@ namespace margelo::nitro::queueplayer {
95
98
  */
96
99
  [[maybe_unused]]
97
100
  static jni::local_ref<JPlayerConfig::javaobject> fromCpp(const PlayerConfig& value) {
98
- using JSignature = JPlayerConfig(jni::alias_ref<jni::JMap<jni::JString, jni::JString>>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<JAudioContentType>, jni::alias_ref<JAudioCategoryOptions>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JDouble>, jni::alias_ref<JEvictionPolicy>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>);
101
+ using JSignature = JPlayerConfig(jni::alias_ref<jni::JMap<jni::JString, jni::JString>>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<JAudioContentType>, jni::alias_ref<JAudioCategoryOptions>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JDouble>, jni::alias_ref<JEvictionPolicy>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>);
99
102
  static const auto clazz = javaClassStatic();
100
103
  static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
101
104
  return create(
@@ -108,6 +111,7 @@ namespace margelo::nitro::queueplayer {
108
111
  return __map;
109
112
  }() : nullptr,
110
113
  value.userAgent.has_value() ? jni::make_jstring(value.userAgent.value()) : nullptr,
114
+ value.placeholderArtworkUri.has_value() ? jni::make_jstring(value.placeholderArtworkUri.value()) : nullptr,
111
115
  value.autoRetries.has_value() ? jni::JDouble::valueOf(value.autoRetries.value()) : nullptr,
112
116
  value.retryBackoffMs.has_value() ? jni::JDouble::valueOf(value.retryBackoffMs.value()) : nullptr,
113
117
  value.networkTimeoutMs.has_value() ? jni::JDouble::valueOf(value.networkTimeoutMs.value()) : nullptr,