Skip to content

Commit ffc3b6f

Browse files
authored
Fix concurrency warnings (#533)
1 parent cb20081 commit ffc3b6f

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

Sources/Navigator/Audiobook/AudioNavigator.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -419,15 +419,9 @@ public final class AudioNavigator: Navigator, Configurable, AudioSessionUser, Lo
419419
// Seeks to time
420420
let time = locator.locations.time?.begin ?? ((resourceDuration ?? 0) * (locator.locations.progression ?? 0))
421421

422-
await withCheckedContinuation { continuation in
423-
player.seek(to: CMTime(seconds: time, preferredTimescale: 1000)) { [weak self] finished in
424-
if let self = self, finished {
425-
Task { @MainActor in
426-
self.delegate?.navigator(self, didJumpTo: locator)
427-
}
428-
}
429-
continuation.resume()
430-
}
422+
let finished = await player.seek(to: CMTime(seconds: time, preferredTimescale: 1000))
423+
if finished {
424+
await delegate?.navigator(self, didJumpTo: locator)
431425
}
432426

433427
return true

Sources/Navigator/Audiobook/PublicationMediaLoader.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import ReadiumShared
1212
/// Serves `Publication`'s `Resource`s as an `AVURLAsset`.
1313
///
1414
/// Useful for local resources or when you need to customize the way HTTP requests are sent.
15-
final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Loggable {
15+
final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Loggable, @unchecked Sendable {
1616
public enum AssetError: Error {
1717
/// Can't produce an URL to create an AVAsset for the given HREF.
1818
case invalidHREF(String)
@@ -51,6 +51,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
5151
private var resources: [AnyURL: (Link, Resource)] = [:]
5252

5353
private func resource<T: URLConvertible>(forHREF href: T) -> (Link, Resource)? {
54+
dispatchPrecondition(condition: .onQueue(queue))
55+
5456
let href = href.anyURL
5557
if let res = resources[equivalent: href] {
5658
return res
@@ -75,6 +77,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
7577

7678
/// Adds a new loading request.
7779
private func registerRequest<T: URLConvertible>(_ request: AVAssetResourceLoadingRequest, task: Task<Void, Never>, for href: T) {
80+
dispatchPrecondition(condition: .onQueue(queue))
81+
7882
let href = href.anyURL
7983
var reqs: [CancellableRequest] = requests[href] ?? []
8084
reqs.append((request, task))
@@ -83,6 +87,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
8387

8488
/// Terminates and removes the given loading request, cancelling it if necessary.
8589
private func finishRequest(_ request: AVAssetResourceLoadingRequest) {
90+
dispatchPrecondition(condition: .onQueue(queue))
91+
8692
guard
8793
let href = request.request.url?.audioHREF,
8894
var reqs = requests[href],

0 commit comments

Comments
 (0)