diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index cafd507ea..755e3e979 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -55,7 +55,7 @@ import Views items.insert(item, at: 0) } - func loadItems(dataService: DataService, audioSession: AudioSession, isRefresh: Bool) async { + func loadItems(dataService: DataService, audioSession _: AudioSession, isRefresh: Bool) async { let syncStartTime = Date() let thisSearchIdx = searchIdx searchIdx += 1 @@ -123,7 +123,7 @@ import Views cursor = queryResult.cursor if let username = dataService.currentViewer?.username { await dataService.prefetchPages(itemIDs: newItems.map(\.unwrappedID), username: username) - await audioSession.preload(itemIDs: newItems.map(\.unwrappedID)) + // await audioSession.preload(itemIDs: newItems.map(\.unwrappedID)) } } else { updateFetchController(dataService: dataService) diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioSession.swift index bc86572b0..abf47ab3d 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 { @@ -222,6 +227,7 @@ public class AudioSession: NSObject, ObservableObject, AVAudioPlayerDelegate { } } catch { print("error playing MP3 file", error) + try? FileManager.default.removeItem(atPath: audioUrl.path) state = .stopped } } @@ -352,14 +358,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 +381,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) }