fix: preserve recordings before transcription
This commit is contained in:
@@ -87,10 +87,11 @@ final class AudioManager: NSObject, ObservableObject {
|
||||
}
|
||||
|
||||
repairHalfDurationSystemWAVIfNeeded(in: files)
|
||||
if let mismatch = captureDurationMismatch(in: files) {
|
||||
let completedFiles = files.compactMap { $0 }
|
||||
let audioFolder = preserveAudioFiles(completedFiles, meetingID: completedMeetingID)
|
||||
lastRecoveryAudioFolderName = audioFolder?.lastPathComponent
|
||||
let completedFiles = files.compactMap { $0 }
|
||||
let audioFolder = preserveAudioFiles(completedFiles, meetingID: completedMeetingID)
|
||||
let transcriptionFiles = preservedAudioFiles(files, in: audioFolder)
|
||||
lastRecoveryAudioFolderName = audioFolder?.lastPathComponent
|
||||
if let mismatch = captureDurationMismatch(in: transcriptionFiles) {
|
||||
let recoveryMessage = audioFolder == nil
|
||||
? " The audio remains in the app's temporary folder."
|
||||
: " Audio was kept so it can be recovered."
|
||||
@@ -99,8 +100,8 @@ final class AudioManager: NSObject, ObservableObject {
|
||||
}
|
||||
|
||||
let model = UserDefaultsManager.shared.transcriptionModel
|
||||
async let micResult = transcribe(files[0], model: model, diarization: false)
|
||||
async let systemResult = transcribe(files[1], model: model, diarization: true)
|
||||
async let micResult = transcribe(transcriptionFiles[0], model: model, diarization: false)
|
||||
async let systemResult = transcribe(transcriptionFiles[1], model: model, diarization: true)
|
||||
let (micTranscription, systemTranscription) = await (micResult, systemResult)
|
||||
let results = [micTranscription, systemTranscription]
|
||||
|
||||
@@ -110,9 +111,6 @@ final class AudioManager: NSObject, ObservableObject {
|
||||
existingChunks: transcriptChunks.filter(\.isFinal)
|
||||
)
|
||||
transcriptChunks = updated
|
||||
let completedFiles = files.compactMap { $0 }
|
||||
let audioFolder = preserveAudioFiles(completedFiles, meetingID: completedMeetingID)
|
||||
lastRecoveryAudioFolderName = audioFolder?.lastPathComponent
|
||||
if !failures.isEmpty {
|
||||
let retentionDays = UserDefaultsManager.shared.audioRetentionDays
|
||||
let retentionUnit = retentionDays == 1 ? "day" : "days"
|
||||
@@ -572,6 +570,15 @@ final class AudioManager: NSObject, ObservableObject {
|
||||
LocalStorageManager.shared.preserveAudioFiles(urls, for: meetingID)
|
||||
}
|
||||
|
||||
private func preservedAudioFiles(_ urls: [URL?], in folder: URL?) -> [URL?] {
|
||||
urls.map { sourceURL in
|
||||
guard let sourceURL else { return nil }
|
||||
guard let folder else { return sourceURL }
|
||||
let preservedURL = folder.appendingPathComponent(sourceURL.lastPathComponent)
|
||||
return FileManager.default.fileExists(atPath: preservedURL.path) ? preservedURL : sourceURL
|
||||
}
|
||||
}
|
||||
|
||||
private func captureDurationMismatch(in files: [URL?]) -> String? {
|
||||
guard files.count >= 2,
|
||||
let micDuration = audioDuration(at: files[0]),
|
||||
|
||||
Reference in New Issue
Block a user