From 6ba5b6165b6051aa44813557d39b9924da26fdd5 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 10 Nov 2022 21:09:32 +0800 Subject: [PATCH] Pass in feature auth header for TTS if set --- .../Services/AudioSession/AudioController.swift | 15 +++++++++++---- .../Services/AudioSession/SpeechSynthesizer.swift | 8 +++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift index 8840e82d0..c88d5b271 100644 --- a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift +++ b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift @@ -147,7 +147,7 @@ for itemID in itemIDs { if let document = try? await downloadSpeechFile(itemID: itemID, priority: .low) { - let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document) + let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document, speechAuthHeader: speechAuthHeader) do { try await synthesizer.preload() return true @@ -161,7 +161,7 @@ public func downloadForOffline(itemID: String) async -> Bool { if let document = try? await downloadSpeechFile(itemID: itemID, priority: .low) { - let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document) + let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document, speechAuthHeader: speechAuthHeader) for item in synthesizer.createPlayerItems(from: 0) { do { _ = try await SpeechSynthesizer.download(speechItem: item, redownloadCached: true) @@ -278,6 +278,13 @@ @AppStorage(UserDefaultKey.textToSpeechUltraRealisticFeatureKey.rawValue) public var ultraRealisticFeatureKey: String = "" @AppStorage(UserDefaultKey.textToSpeechUltraRealisticFeatureRequested.rawValue) public var ultraRealisticFeatureRequested: Bool = false + var speechAuthHeader: String? { + if Voices.isUltraRealisticVoice(currentVoice), !ultraRealisticFeatureKey.isEmpty { + return ultraRealisticFeatureKey + } + return nil + } + public var currentVoiceLanguage: VoiceLanguage { Voices.Languages.first(where: { $0.key == currentLanguage }) ?? Voices.English } @@ -414,7 +421,7 @@ DispatchQueue.main.async { if let document = document { - let synthesizer = SpeechSynthesizer(appEnvironment: self.dataService.appEnvironment, networker: self.dataService.networker, document: document) + let synthesizer = SpeechSynthesizer(appEnvironment: self.dataService.appEnvironment, networker: self.dataService.networker, document: document, speechAuthHeader: self.speechAuthHeader) self.setTextItems() self.durations = synthesizer.estimatedDurations(forSpeed: self.playbackRate) @@ -568,7 +575,7 @@ } } - let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document) + let synthesizer = SpeechSynthesizer(appEnvironment: dataService.appEnvironment, networker: dataService.networker, document: document, speechAuthHeader: speechAuthHeader) durations = synthesizer.estimatedDurations(forSpeed: playbackRate) self.synthesizer = synthesizer diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/SpeechSynthesizer.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/SpeechSynthesizer.swift index d8d57fc88..dcac71919 100644 --- a/apple/OmnivoreKit/Sources/Services/AudioSession/SpeechSynthesizer.swift +++ b/apple/OmnivoreKit/Sources/Services/AudioSession/SpeechSynthesizer.swift @@ -81,11 +81,13 @@ struct SpeechSynthesizer { let document: SpeechDocument let appEnvironment: AppEnvironment let networker: Networker + let speechAuthHeader: String? - init(appEnvironment: AppEnvironment, networker: Networker, document: SpeechDocument) { + init(appEnvironment: AppEnvironment, networker: Networker, document: SpeechDocument, speechAuthHeader: String?) { self.appEnvironment = appEnvironment self.networker = networker self.document = document + self.speechAuthHeader = speechAuthHeader } func estimatedDurations(forSpeed speed: Double) -> [Double] { @@ -159,6 +161,10 @@ struct SpeechSynthesizer { request.setValue(value, forHTTPHeaderField: header) } + if let speechAuthHeader = speechAuthHeader { + request.setValue(speechAuthHeader, forHTTPHeaderField: "Authorization") + } + return request }