parseEntries method

Iterable<MetadataEntry> parseEntries()

Implementation

Iterable<MetadataEntry> parseEntries() sync* {
  while (buffer.isReadable()) {
    var metadataTypeOrLength = buffer.readI8();
    if (metadataTypeOrLength != null) {
      if ((metadataTypeOrLength >= 0x80)) {
        var typeId = metadataTypeOrLength - 0x80;
        var mimeType = WellKnownMimeType.getMimeType(typeId);
        var dataLength = buffer.readI24();
        if (dataLength != null) {
          var content = buffer.readUint8List(dataLength);
          if (content.isNotEmpty) {
            yield MetadataEntry.fromContent(content, mimeType, typeId);
          }
        }
      } else {
        var mimeTypeU8Array = buffer.readBytes(metadataTypeOrLength);
        if (mimeTypeU8Array.isNotEmpty) {
          var dataLength = buffer.readI24();
          if (dataLength != null) {
            var content = buffer.readUint8List(dataLength);
            if (content.isNotEmpty) {
              var mimeType = utf8.decode(mimeTypeU8Array);
              yield MetadataEntry.fromContent(content, mimeType);
            }
          }
        }
      }
    }
  }
}