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.
- package/android/src/main/java/com/margelo/nitro/queueplayer/MediaItemBuilder.kt +21 -3
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderArtwork.kt +30 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoader.kt +9 -6
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackService.kt +4 -1
- package/android/src/main/java/com/margelo/nitro/queueplayer/TrackPlayer.kt +9 -5
- package/android/src/test/java/com/margelo/nitro/queueplayer/MediaItemBuilderTest.kt +55 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaceholderArtworkTest.kt +72 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoaderTest.kt +21 -9
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceArtworkLoaderTest.kt +9 -9
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAirPlayMetadataWiringTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAudioFocusTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerEventsTest.kt +3 -3
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLifecycleTest.kt +7 -7
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLookaheadConfigTest.kt +6 -6
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerMutationTest.kt +2 -2
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerProgressThrottleTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerQueueChangeTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerQueueTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerReadersTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipCapabilityTest.kt +2 -2
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipTest.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerTransportTest.kt +1 -1
- package/ios/Cast/Core/CastNowPlayingController.swift +7 -4
- package/ios/NowPlayingInfo.swift +7 -9
- package/ios/PlaceholderArtwork.swift +24 -1
- package/ios/Tests/AVQueueBuilderTests.swift +9 -9
- package/ios/Tests/CastNowPlayingControllerTests.swift +33 -0
- package/ios/Tests/PlaceholderArtworkTests.swift +81 -0
- package/ios/TrackPlayer.swift +5 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/types.d.ts +17 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JPlayerConfig.hpp +5 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlayerConfig.kt +7 -2
- package/nitrogen/generated/ios/swift/PlayerConfig.swift +19 -1
- package/nitrogen/generated/shared/c++/PlayerConfig.hpp +5 -1
- package/package.json +1 -1
- package/src/types.ts +17 -0
package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLookaheadConfigTest.kt
CHANGED
|
@@ -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)
|
package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerProgressThrottleTest.kt
CHANGED
|
@@ -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
|
)
|
package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipCapabilityTest.kt
CHANGED
|
@@ -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
|
-
///
|
|
39
|
-
///
|
|
40
|
-
|
|
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
|
package/ios/NowPlayingInfo.swift
CHANGED
|
@@ -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
|
-
///
|
|
180
|
-
///
|
|
181
|
-
///
|
|
182
|
-
///
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|
package/ios/TrackPlayer.swift
CHANGED
|
@@ -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(
|
package/lib/module/types.js.map
CHANGED
|
@@ -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;;
|
|
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":"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"}
|
|
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,
|