concatenatingRemoveRange method

  1. @override
Future<ConcatenatingRemoveRangeResponse> concatenatingRemoveRange(
  1. 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();
}