mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-19 16:13:42 +02:00
Revert "#4094 - Reintroduced serial attachment loading processing queue and fixed completionCallback storage so they take the requestedNumberOfSamples into account."
This reverts commit 9a2b60239c671322b99abc786b251e970aebebe8.
This commit is contained in:
@@ -38,11 +38,6 @@ private class CompletionWrapper {
|
||||
}
|
||||
}
|
||||
|
||||
private struct CompletionCallbackKey: Hashable {
|
||||
let eventIdentifier: String
|
||||
let requiredNumberOfSamples: Int
|
||||
}
|
||||
|
||||
struct VoiceMessageAttachmentCacheManagerLoadResult {
|
||||
let eventIdentifier: String
|
||||
let url: URL
|
||||
@@ -54,15 +49,13 @@ class VoiceMessageAttachmentCacheManager {
|
||||
|
||||
static let sharedManager = VoiceMessageAttachmentCacheManager()
|
||||
|
||||
private var completionCallbacks = [CompletionCallbackKey: [CompletionWrapper]]()
|
||||
private var completionCallbacks = [String: [CompletionWrapper]]()
|
||||
private var samples = [String: [Int: [Float]]]()
|
||||
private var durations = [String: TimeInterval]()
|
||||
private var finalURLs = [String: URL]()
|
||||
|
||||
private let workQueue: DispatchQueue
|
||||
|
||||
private init() {
|
||||
workQueue = DispatchQueue(label: "io.element.VoiceMessageAttachmentCacheManager.queue", qos: .userInitiated)
|
||||
|
||||
}
|
||||
|
||||
func loadAttachment(_ attachment: MXKAttachment, numberOfSamples: Int, completion: @escaping (Result<VoiceMessageAttachmentCacheManagerLoadResult, Error>) -> Void) {
|
||||
@@ -81,36 +74,30 @@ class VoiceMessageAttachmentCacheManager {
|
||||
return
|
||||
}
|
||||
|
||||
workQueue.async {
|
||||
// Run this in the work queue to preserve order
|
||||
if let finalURL = self.finalURLs[identifier], let duration = self.durations[identifier], let samples = self.samples[identifier]?[numberOfSamples] {
|
||||
let result = VoiceMessageAttachmentCacheManagerLoadResult(eventIdentifier: identifier, url: finalURL, duration: duration, samples: samples)
|
||||
DispatchQueue.main.async {
|
||||
completion(Result.success(result))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
self.enqueueLoadAttachment(attachment, identifier: identifier, numberOfSamples: numberOfSamples, completion: completion)
|
||||
if let finalURL = finalURLs[identifier], let duration = durations[identifier], let samples = samples[identifier]?[numberOfSamples] {
|
||||
let result = VoiceMessageAttachmentCacheManagerLoadResult(eventIdentifier: identifier, url: finalURL, duration: duration, samples: samples)
|
||||
completion(Result.success(result))
|
||||
return
|
||||
}
|
||||
|
||||
self.enqueueLoadAttachment(attachment, identifier: identifier, numberOfSamples: numberOfSamples, completion: completion)
|
||||
}
|
||||
|
||||
private func enqueueLoadAttachment(_ attachment: MXKAttachment, identifier: String, numberOfSamples: Int, completion: @escaping (Result<VoiceMessageAttachmentCacheManagerLoadResult, Error>) -> Void) {
|
||||
let callbackKey = CompletionCallbackKey(eventIdentifier: identifier, requiredNumberOfSamples: numberOfSamples)
|
||||
|
||||
if var callbacks = completionCallbacks[callbackKey] {
|
||||
|
||||
if var callbacks = completionCallbacks[identifier] {
|
||||
callbacks.append(CompletionWrapper(completion))
|
||||
completionCallbacks[callbackKey] = callbacks
|
||||
completionCallbacks[identifier] = callbacks
|
||||
return
|
||||
} else {
|
||||
completionCallbacks[callbackKey] = [CompletionWrapper(completion)]
|
||||
completionCallbacks[identifier] = [CompletionWrapper(completion)]
|
||||
}
|
||||
|
||||
func sampleFileAtURL(_ url: URL, duration: TimeInterval) {
|
||||
let analyser = WaveformAnalyzer(audioAssetURL: url)
|
||||
analyser?.samples(count: numberOfSamples, completionHandler: { samples in
|
||||
// Dispatch back from the WaveformAnalyzer's internal queue
|
||||
self.workQueue.async {
|
||||
DispatchQueue.main.async {
|
||||
guard let samples = samples else {
|
||||
self.invokeFailureCallbacksForIdentifier(identifier, error: VoiceMessageAttachmentCacheManagerError.samplingError)
|
||||
return
|
||||
@@ -189,9 +176,7 @@ class VoiceMessageAttachmentCacheManager {
|
||||
}
|
||||
|
||||
private func invokeSuccessCallbacksForIdentifier(_ identifier: String, url: URL, duration: TimeInterval, samples: [Float]) {
|
||||
let callbackKey = CompletionCallbackKey(eventIdentifier: identifier, requiredNumberOfSamples: samples.count)
|
||||
|
||||
guard let callbacks = completionCallbacks[callbackKey] else {
|
||||
guard let callbacks = completionCallbacks[identifier] else {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -204,13 +189,11 @@ class VoiceMessageAttachmentCacheManager {
|
||||
}
|
||||
}
|
||||
|
||||
self.completionCallbacks[callbackKey] = nil
|
||||
self.completionCallbacks[identifier] = nil
|
||||
}
|
||||
|
||||
private func invokeFailureCallbacksForIdentifier(_ identifier: String, error: Error) {
|
||||
let callbackKey = CompletionCallbackKey(eventIdentifier: identifier, requiredNumberOfSamples: samples.count)
|
||||
|
||||
guard let callbacks = completionCallbacks[callbackKey] else {
|
||||
guard let callbacks = completionCallbacks[identifier] else {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -221,6 +204,6 @@ class VoiceMessageAttachmentCacheManager {
|
||||
}
|
||||
}
|
||||
|
||||
self.completionCallbacks[callbackKey] = nil
|
||||
self.completionCallbacks[identifier] = nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user