Skip to content

Commit

Permalink
Cancel LockCachingAudioSource request on network error.
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanheise committed May 3, 2022
1 parent d5fe856 commit ed1ba9a
Showing 1 changed file with 26 additions and 9 deletions.
35 changes: 26 additions & 9 deletions just_audio/lib/just_audio.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2839,7 +2839,7 @@ class LockCachingAudioSource extends StreamAudioSource {
effectiveEnd != null ? effectiveEnd - effectiveStart : null,
offset: start,
contentType: mimeType,
stream: responseStream,
stream: responseStream.asBroadcastStream(),
));
}
subscription.resume();
Expand Down Expand Up @@ -2868,7 +2868,7 @@ class LockCachingAudioSource extends StreamAudioSource {
contentLength: end != null ? end - start : null,
offset: start,
contentType: mimeType,
stream: response,
stream: response.asBroadcastStream(),
));
}, onError: (dynamic e, StackTrace? stackTrace) {
request.fail(e, stackTrace);
Expand Down Expand Up @@ -2918,7 +2918,7 @@ class LockCachingAudioSource extends StreamAudioSource {
contentLength: (end ?? sourceLength) - (start ?? 0),
offset: start,
contentType: await _readCachedMimeType(),
stream: cacheFile.openRead(start, end),
stream: cacheFile.openRead(start, end).asBroadcastStream(),
);
}
final byteRangeRequest = _StreamingByteRangeRequest(start, end);
Expand All @@ -2933,7 +2933,17 @@ class LockCachingAudioSource extends StreamAudioSource {
}
return Future<HttpClientResponse>.error(error as Object, stackTrace);
});
return byteRangeRequest.future;
return byteRangeRequest.future.then((response) {
response.stream.listen((event) {}, onError: (Object e, StackTrace st) {
// So that we can restart later
_response = null;
// Cancel any pending request
for (final req in _requests) {
req.fail(e, st);
}
});
return response;
});
}
}

Expand Down Expand Up @@ -3006,9 +3016,7 @@ _ProxyHandler _proxyHandlerForSource(StreamAudioSource source) {
try {
sourceResponse =
await source.request(rangeRequest?.start, rangeRequest?.endEx);
stream = sourceResponse.stream.asBroadcastStream();
stream.listen((event) {},
onError: source._player?._playbackEventSubject.addError);
stream = sourceResponse.stream;
} catch (e, st) {
// ignore: avoid_print
print("Proxy request failed: $e\n$st");
Expand Down Expand Up @@ -3040,8 +3048,17 @@ _ProxyHandler _proxyHandlerForSource(StreamAudioSource source) {
request.response.statusCode = 200;
}

// Pipe response
await stream.pipe(request.response);
final completer = Completer<void>();
stream.listen((event) {
request.response.add(event);
}, onError: (Object e, StackTrace st) {
source._player?._playbackEventSubject.addError(e, st);
}, onDone: () {
completer.complete();
});

await completer.future;

await request.response.close();
}

Expand Down

0 comments on commit ed1ba9a

Please sign in to comment.