Id3v2TextFrameContent.decode constructor

Id3v2TextFrameContent.decode(
  1. List<int> bytes,
  2. int startIndex,
  3. int size
)

Implementation

factory Id3v2TextFrameContent.decode(
  List<int> bytes,
  int startIndex,
  int size,
) {
  var sublist = bytes.sublist(startIndex, startIndex + size);

  // Handle no content
  if (sublist.isEmpty) {
    var model = Id3v2TextModel(getEncoding(0), '');
    return Id3v2TextFrameContent(model);
  }

  // Get the encoding
  var encoding = getEncoding(sublist[0]);

  // If there is no content or termination
  if (sublist.length == 1) {
    var model = Id3v2TextModel(encoding, '');
    return Id3v2TextFrameContent(model);
  }

  var termination = Terminations.getByEncoding(encoding);
  bool hasTermination = Terminations.hasTermination(
    sublist.sublist(1),
    termination,
  );

  var end = hasTermination ? sublist.length - termination.length : sublist.length;

  // Decode the string
  var value = encoding.decode(sublist.sublist(1, end));

  var model = Id3v2TextModel(encoding, value);

  return Id3v2TextFrameContent(model);
}