From 491faa10206671bb0c46b439efaaece76a60b7fa Mon Sep 17 00:00:00 2001 From: Jonathan Baudanza Date: Mon, 16 Sep 2024 14:24:37 +0900 Subject: [PATCH] Move code into main thread --- ios/RNAudioRecorderPlayer.swift | 35 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/ios/RNAudioRecorderPlayer.swift b/ios/RNAudioRecorderPlayer.swift index 83a988a0..455c62cc 100644 --- a/ios/RNAudioRecorderPlayer.swift +++ b/ios/RNAudioRecorderPlayer.swift @@ -334,15 +334,15 @@ class RNAudioRecorderPlayer: RCTEventEmitter, AVAudioRecorderDelegate { let time = CMTime(seconds: subscriptionDuration, preferredTimescale: timeScale) timeObserverToken = audioPlayer.addPeriodicTimeObserver(forInterval: time, - queue: .main) {_ in - if (self.audioPlayer != nil) { - self.sendEvent(withName: "rn-playback", body: [ - "isMuted": self.audioPlayer.isMuted, - "currentPosition": self.audioPlayerItem.currentTime().seconds * 1000, - "duration": self.audioPlayerItem.asset.duration.seconds * 1000, - "isFinished": false, - ]) - } + queue: .main) {[weak self] _ in + guard let self = self, let audioPlayer = self.audioPlayer else { return } + + self.sendEvent(withName: "rn-playback", body: [ + "isMuted": audioPlayer.isMuted, + "currentPosition": self.audioPlayerItem.currentTime().seconds * 1000, + "duration": self.audioPlayerItem.asset.duration.seconds * 1000, + "isFinished": false, + ]) } } @@ -371,6 +371,7 @@ class RNAudioRecorderPlayer: RCTEventEmitter, AVAudioRecorderDelegate { } setAudioFileURL(path: path) + audioPlayerAsset = AVURLAsset(url: audioFileURL!, options:["AVURLAssetHTTPHeaderFieldsKey": httpHeaders]) audioPlayerItem = AVPlayerItem(asset: audioPlayerAsset!) @@ -404,15 +405,17 @@ class RNAudioRecorderPlayer: RCTEventEmitter, AVAudioRecorderDelegate { resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void { - if (audioPlayer == nil) { - return reject("RNAudioPlayerRecorder", "Player has already stopped.", nil) - } + DispatchQueue.main.async { + if (self.audioPlayer == nil) { + return reject("RNAudioPlayerRecorder", "Player has already stopped.", nil) + } - audioPlayer.pause() - self.removePeriodicTimeObserver() - self.audioPlayer = nil; + self.audioPlayer.pause() + self.removePeriodicTimeObserver() + self.audioPlayer = nil; - resolve(audioFileURL?.absoluteString) + resolve(self.audioFileURL?.absoluteString) + } } @objc(pausePlayer:rejecter:)