decent working method of storing data locally
This commit is contained in:
@@ -73,7 +73,8 @@ class InnerCircleViewModel: NSObject, ObservableObject {
|
|||||||
var audioRecorder : AVAudioRecorder!
|
var audioRecorder : AVAudioRecorder!
|
||||||
|
|
||||||
var queuePlayer = AVQueuePlayer()
|
var queuePlayer = AVQueuePlayer()
|
||||||
private var cachedPlayerItemsDict: [String: Data] = [:] // url to player item
|
private var cachedPlayerItemsDict: [String: URL] = [:] // firebase audio url to local url
|
||||||
|
private let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
||||||
|
|
||||||
@Published var isRecording : Bool = false
|
@Published var isRecording : Bool = false
|
||||||
|
|
||||||
@@ -260,17 +261,18 @@ extension InnerCircleViewModel {
|
|||||||
// reset progress
|
// reset progress
|
||||||
self.messagesListeningProgress = Float(Self.multiplier * 2)
|
self.messagesListeningProgress = Float(Self.multiplier * 2)
|
||||||
|
|
||||||
var AVPlayerItems: [CachingPlayerItem] = []
|
var AVPlayerItems: [AVPlayerItem] = []
|
||||||
for url in audioUrls {
|
for url in audioUrls {
|
||||||
// if we have a player in the cache, then play it from there
|
// if we have a player in the cache, then play it from there
|
||||||
if self.cachedPlayerItemsDict.keys.contains(url.absoluteString), let data = self.cachedPlayerItemsDict[url.absoluteString] {
|
if self.cachedPlayerItemsDict.keys.contains(url.absoluteString), let localUrl = self.cachedPlayerItemsDict[url.absoluteString] {
|
||||||
// keep the cachedplayer item in tact as the player messes with those items
|
// keep the cachedplayer item in tact as the player messes with those items
|
||||||
let cachedPlayerItem = CachingPlayerItem(data: data, mimeType: "audio/mp4", fileExtension: "m4a")
|
let asset = AVAsset(url: localUrl)
|
||||||
AVPlayerItems.append(cachedPlayerItem)
|
let playerItem = AVPlayerItem(asset: asset)
|
||||||
|
AVPlayerItems.append(playerItem)
|
||||||
print("playing a message from cache")
|
print("playing a message from cache")
|
||||||
} else {
|
} else {
|
||||||
let asset = AVAsset(url: url)
|
let asset = AVAsset(url: url)
|
||||||
let playerItem = CachingPlayerItem(url: url)
|
let playerItem = AVPlayerItem(asset: asset)
|
||||||
AVPlayerItems.append(playerItem)
|
AVPlayerItems.append(playerItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -393,7 +395,13 @@ extension InnerCircleViewModel {
|
|||||||
let task = URLSession.shared.dataTask(with: audioUrl) {[weak self] (data, response, error) in
|
let task = URLSession.shared.dataTask(with: audioUrl) {[weak self] (data, response, error) in
|
||||||
guard let data = data else { return }
|
guard let data = data else { return }
|
||||||
print(data)
|
print(data)
|
||||||
self?.cachedPlayerItemsDict[audioUrl.absoluteString] = data as? Data
|
|
||||||
|
if let cacheFilePath = self?.getTemporaryDirectory().appendingPathComponent("\(UUID().uuidString).m4a") {
|
||||||
|
try? data.write(to: cacheFilePath)
|
||||||
|
|
||||||
|
// save in local cache
|
||||||
|
self?.cachedPlayerItemsDict[audioUrl.absoluteString] = cacheFilePath
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task.resume()
|
task.resume()
|
||||||
|
|||||||
Reference in New Issue
Block a user