Skip to content

Commit df5f21a

Browse files
authored
Make the AudioPublicationManifestAugmentor asynchronous (#627)
1 parent d94c6cf commit df5f21a

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Package.resolved

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/Streamer/Parser/Audio/AudioParser.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public final class AudioParser: PublicationParser {
5656
}
5757

5858
let container = SingleResourceContainer(publication: asset)
59-
return makeBuilder(
59+
return await makeBuilder(
6060
container: container,
6161
readingOrder: [(container.entry, asset.format)],
6262
title: nil
@@ -72,8 +72,8 @@ public final class AudioParser: PublicationParser {
7272
}
7373

7474
return await makeReadingOrder(for: asset.container)
75-
.flatMap { readingOrder in
76-
makeBuilder(
75+
.asyncFlatMap { readingOrder in
76+
await makeBuilder(
7777
container: asset.container,
7878
readingOrder: readingOrder,
7979
title: asset.container.guessTitle(ignoring: ignores)
@@ -132,7 +132,7 @@ public final class AudioParser: PublicationParser {
132132
container: Container,
133133
readingOrder: [(AnyURL, Format)],
134134
title: String?
135-
) -> Result<Publication.Builder, PublicationParseError> {
135+
) async -> Result<Publication.Builder, PublicationParseError> {
136136
guard !readingOrder.isEmpty else {
137137
return .failure(.reading(.decoding("No audio resources found in the publication")))
138138
}
@@ -150,7 +150,7 @@ public final class AudioParser: PublicationParser {
150150
}
151151
)
152152

153-
let augmented = manifestAugmentor.augment(manifest, using: container)
153+
let augmented = await manifestAugmentor.augment(manifest, using: container)
154154

155155
return .success(Publication.Builder(
156156
manifest: augmented.manifest,

Sources/Streamer/Parser/Audio/AudioPublicationManifestAugmentor.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,17 @@ import UIKit
1212
/// Implements a strategy to augment a `Manifest` of an audio publication with additional metadata and
1313
/// cover, for example by looking into the audio files metadata.
1414
public protocol AudioPublicationManifestAugmentor {
15-
func augment(_ baseManifest: Manifest, using container: Container) -> AudioPublicationAugmentedManifest
15+
func augment(_ baseManifest: Manifest, using container: Container) async -> AudioPublicationAugmentedManifest
1616
}
1717

1818
public struct AudioPublicationAugmentedManifest {
19-
var manifest: Manifest
20-
var cover: UIImage?
19+
public var manifest: Manifest
20+
public var cover: UIImage?
21+
22+
public init(manifest: Manifest, cover: UIImage? = nil) {
23+
self.manifest = manifest
24+
self.cover = cover
25+
}
2126
}
2227

2328
/// An `AudioPublicationManifestAugmentor` using AVFoundation to retrieve the audio metadata.
@@ -26,7 +31,7 @@ public struct AudioPublicationAugmentedManifest {
2631
public final class AVAudioPublicationManifestAugmentor: AudioPublicationManifestAugmentor {
2732
public init() {}
2833

29-
public func augment(_ manifest: Manifest, using container: Container) -> AudioPublicationAugmentedManifest {
34+
public func augment(_ manifest: Manifest, using container: Container) async -> AudioPublicationAugmentedManifest {
3035
let avAssets = manifest.readingOrder.map { link in
3136
container[link.url()]?.sourceURL?.fileURL
3237
.map { AVURLAsset(url: $0.url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true]) }

0 commit comments

Comments
 (0)