|
4 | 4 |
|
5 | 5 | @implementation RNSoundRecorder { |
6 | 6 | AVAudioRecorder* _recorder; |
| 7 | + RCTPromiseResolveBlock _resolveStop; |
| 8 | + RCTPromiseRejectBlock _rejectStop; |
7 | 9 | } |
8 | 10 |
|
9 | 11 | - (dispatch_queue_t)methodQueue |
@@ -149,43 +151,45 @@ + (BOOL)requiresMainQueueSetup |
149 | 151 | return; |
150 | 152 | } |
151 | 153 |
|
152 | | - __block NSError* err = nil; |
153 | | - |
| 154 | + _resolveStop = resolve; |
| 155 | + _rejectStop = reject; |
154 | 156 | [_recorder stop]; |
| 157 | + |
| 158 | +} |
| 159 | + |
| 160 | +- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag |
| 161 | +{ |
| 162 | + |
| 163 | + __block NSError* err = nil; |
155 | 164 |
|
156 | 165 | // prepare the response |
157 | 166 | NSString* url = [_recorder url].absoluteString; |
158 | 167 | url = [url substringFromIndex:NSMaxRange([url rangeOfString:@"://"])]; // trim the scheme (file://) |
159 | 168 | AVAudioPlayer* player = [[AVAudioPlayer alloc] initWithContentsOfURL:[_recorder url] error:nil]; |
160 | 169 | NSDictionary* response = @{@"duration": @(player.duration * 1000), @"path": url}; |
161 | 170 |
|
| 171 | + // deactivate the audio session |
162 | 172 | AVAudioSession* session = [AVAudioSession sharedInstance]; |
163 | | - |
164 | | - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(100.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ |
165 | | - [session setActive:NO error:&err]; |
166 | | - }); |
| 173 | + [session setActive:NO error:&err]; |
167 | 174 |
|
168 | 175 | if (err) { |
169 | | - reject(@"session_set_active_error", [[err userInfo] description], err); |
| 176 | + _rejectStop(@"session_set_active_error", [[err userInfo] description], err); |
170 | 177 | return; |
171 | 178 | } |
172 | 179 |
|
173 | 180 | [session setCategory:AVAudioSessionCategoryPlayback error:&err]; |
174 | 181 |
|
175 | 182 | if (err) { |
176 | | - reject(@"reset_session_error", [[err userInfo] description], err); |
| 183 | + _rejectStop(@"reset_session_error", [[err userInfo] description], err); |
177 | 184 | return; |
178 | 185 | } |
179 | 186 |
|
180 | | - resolve(response); |
181 | | - |
182 | | -} |
183 | | - |
184 | | -- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag |
185 | | -{ |
| 187 | + _resolveStop(response); |
186 | 188 |
|
187 | | - // release the recorder |
188 | | - _recorder = nil; |
| 189 | + // release the recorder promise resolver |
| 190 | + _recorder = nil; |
| 191 | + _resolveStop = nil; |
| 192 | + _rejectStop = nil; |
189 | 193 |
|
190 | 194 | } |
191 | 195 |
|
|
0 commit comments