@@ -12,7 +12,7 @@ import ReadiumShared
12
12
/// Serves `Publication`'s `Resource`s as an `AVURLAsset`.
13
13
///
14
14
/// 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 {
16
16
public enum AssetError : Error {
17
17
/// Can't produce an URL to create an AVAsset for the given HREF.
18
18
case invalidHREF( String )
@@ -51,6 +51,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
51
51
private var resources : [ AnyURL : ( Link , Resource ) ] = [ : ]
52
52
53
53
private func resource< T: URLConvertible > ( forHREF href: T ) -> ( Link , Resource ) ? {
54
+ dispatchPrecondition ( condition: . onQueue( queue) )
55
+
54
56
let href = href. anyURL
55
57
if let res = resources [ equivalent: href] {
56
58
return res
@@ -75,6 +77,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
75
77
76
78
/// Adds a new loading request.
77
79
private func registerRequest< T: URLConvertible > ( _ request: AVAssetResourceLoadingRequest , task: Task < Void , Never > , for href: T ) {
80
+ dispatchPrecondition ( condition: . onQueue( queue) )
81
+
78
82
let href = href. anyURL
79
83
var reqs : [ CancellableRequest ] = requests [ href] ?? [ ]
80
84
reqs. append ( ( request, task) )
@@ -83,6 +87,8 @@ final class PublicationMediaLoader: NSObject, AVAssetResourceLoaderDelegate, Log
83
87
84
88
/// Terminates and removes the given loading request, cancelling it if necessary.
85
89
private func finishRequest( _ request: AVAssetResourceLoadingRequest ) {
90
+ dispatchPrecondition ( condition: . onQueue( queue) )
91
+
86
92
guard
87
93
let href = request. request. url? . audioHREF,
88
94
var reqs = requests [ href] ,
0 commit comments