From b34e062df635e544e832115ec45ea9267325764e Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 29 Aug 2022 20:59:20 +0800 Subject: [PATCH] Add audio download types so we can also download speechmarks files --- .../Services/AudioSession/AudioSession.swift | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift index bc86572b0..890e7e3f6 100644 --- a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift +++ b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift @@ -25,9 +25,14 @@ public enum PlayerScrubState { case scrubEnded(TimeInterval) } +enum DownloadType: String { + case mp3 + case speechMarks +} + enum DownloadPriority: String { - case low = "low" - case high = "high" + case low + case high } // Our observable object class @@ -82,7 +87,7 @@ public class AudioSession: NSObject, ObservableObject, AVAudioPlayerDelegate { } // Attempt to fetch the file if not downloaded already - let result = try? await downloadAudioFile(pageId: pageId, priority: .low) + let result = try? await downloadAudioFile(pageId: pageId, type: .mp3, priority: .low) if result == nil { print("audio file had error downloading: ", pageId) pendingList.append(pageId) @@ -173,7 +178,7 @@ public class AudioSession: NSObject, ObservableObject, AVAudioPlayerDelegate { let pageId = item!.unwrappedID downloadTask = Task { - let result = try? await downloadAudioFile(pageId: pageId, priority: .high) + let result = try? await downloadAudioFile(pageId: pageId, type: .mp3, priority: .high) if Task.isCancelled { return } if result == nil { @@ -352,14 +357,15 @@ public class AudioSession: NSObject, ObservableObject, AVAudioPlayerDelegate { } } - func downloadAudioFile(pageId: String, priority: DownloadPriority) async throws -> (pending: Bool, url: URL?) { + func downloadAudioFile(pageId: String, type: DownloadType, priority: DownloadPriority) async throws -> (pending: Bool, url: URL?) { let audioUrl = pathForAudioFile(pageId: pageId) if FileManager.default.fileExists(atPath: audioUrl.path) { return (pending: false, url: audioUrl) } - guard let url = URL(string: "/api/article/\(pageId)/mp3/\(priority)/\(currentVoice)", relativeTo: appEnvironment.serverBaseURL) else { + let path = "/api/article/\(pageId)/\(type)/\(priority)/\(currentVoice)" + guard let url = URL(string: path, relativeTo: appEnvironment.serverBaseURL) else { throw BasicError.message(messageText: "Invalid audio URL") } @@ -374,7 +380,7 @@ public class AudioSession: NSObject, ObservableObject, AVAudioPlayerDelegate { guard let httpResponse = result?.1 as? HTTPURLResponse, 200 ..< 300 ~= httpResponse.statusCode else { throw BasicError.message(messageText: "audioFetch failed. no response or bad status code.") } - print("httpResponse: ", httpResponse) + if let httpResponse = result?.1 as? HTTPURLResponse, httpResponse.statusCode == 202 { return (pending: true, nil) }