concatenatingRemoveRange method
Future<ConcatenatingRemoveRangeResponse>
concatenatingRemoveRange(
- ConcatenatingRemoveRangeRequest request
override
Removes audio sources from the given concatenating audio source.
Implementation
@override
Future<ConcatenatingRemoveRangeResponse> concatenatingRemoveRange(
ConcatenatingRemoveRangeRequest request) async {
if (_index != null &&
_index! >= request.startIndex &&
_index! < request.endIndex &&
_playing) {
// Pause if removing current item
_currentAudioSourcePlayer!.pause();
}
_concatenating(request.id)!.setShuffleOrder(request.shuffleOrder);
_concatenating(request.id)!
.removeRange(request.startIndex, request.endIndex);
if (_index != null) {
if (_index! >= request.startIndex && _index! < request.endIndex) {
// Skip backward if there's nothing after this
if (request.startIndex >= _audioSourcePlayer!.sequence.length) {
_index = request.startIndex - 1;
if (_index! < 0) _index = 0;
} else {
_index = request.startIndex;
}
// Resume playback at the new item (if it exists)
if (_currentAudioSourcePlayer != null) {
await _currentAudioSourcePlayer!.load();
if (_playing) {
_currentAudioSourcePlayer!.play();
}
}
} else if (request.endIndex <= _index!) {
// Reflect that the current item has shifted its position
_index = _index! - (request.endIndex - request.startIndex);
}
}
broadcastPlaybackEvent();
return ConcatenatingRemoveRangeResponse();
}