@@ -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