|
@@ -93,22 +93,29 @@ open class AudioController: NSObject, AVAudioPlayerDelegate, AudioMessageCellDel
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if let fileURL = message.fileURL {
|
|
|
- let audioAsset = AVURLAsset.init(url: fileURL, options: nil)
|
|
|
-
|
|
|
- audioAsset.loadValuesAsynchronously(forKeys: ["duration"]) {
|
|
|
- var error: NSError?
|
|
|
- let status = audioAsset.statusOfValue(forKey: "duration", error: &error)
|
|
|
- switch status {
|
|
|
- case .loaded:
|
|
|
- let duration = audioAsset.duration
|
|
|
- let durationInSeconds = CMTimeGetSeconds(duration)
|
|
|
- DispatchQueue.main.async {
|
|
|
- successHandler(messageId, Double(durationInSeconds))
|
|
|
+ DispatchQueue.global(qos: .userInitiated).async {
|
|
|
+ let duration = message.duration
|
|
|
+ if duration > 0 {
|
|
|
+ DispatchQueue.main.async {
|
|
|
+ successHandler(messageId, Double(duration / 1000))
|
|
|
+ }
|
|
|
+ } else if let fileURL = message.fileURL {
|
|
|
+ let audioAsset = AVURLAsset.init(url: fileURL, options: nil)
|
|
|
+ audioAsset.loadValuesAsynchronously(forKeys: ["duration"]) {
|
|
|
+ var error: NSError?
|
|
|
+ let status = audioAsset.statusOfValue(forKey: "duration", error: &error)
|
|
|
+ switch status {
|
|
|
+ case .loaded:
|
|
|
+ let duration = audioAsset.duration
|
|
|
+ let durationInSeconds = Double(CMTimeGetSeconds(duration))
|
|
|
+ message.setDuration(1000 * durationInSeconds)
|
|
|
+ DispatchQueue.main.async {
|
|
|
+ successHandler(messageId, durationInSeconds)
|
|
|
+ }
|
|
|
+ case .failed:
|
|
|
+ logger.warning("loading audio message \(messageId) failed: \(String(describing: error?.localizedDescription))")
|
|
|
+ default: break
|
|
|
}
|
|
|
- case .failed:
|
|
|
- logger.warning("loading audio message \(messageId) failed: \(String(describing: error?.localizedDescription))")
|
|
|
- default: break
|
|
|
}
|
|
|
}
|
|
|
}
|