FileMetadataData.fromXML constructor
- XMLNode node
Parse node
as a FileMetadataData element.
Implementation
factory FileMetadataData.fromXML(XMLNode node) {
assert(
node.attributes['xmlns'] == fileMetadataXmlns,
'Invalid element xmlns',
);
assert(node.tag == 'file', 'Invalid element anme');
final lengthElement = node.firstTag('length');
final length =
lengthElement != null ? int.parse(lengthElement.innerText()) : null;
final sizeElement = node.firstTag('size');
final size =
sizeElement != null ? int.parse(sizeElement.innerText()) : null;
final hashes = <HashFunction, String>{};
for (final e in node.findTags('hash')) {
final hashFunction =
HashFunction.fromName(e.attributes['algo']! as String);
hashes[hashFunction] = e.innerText();
}
// Thumbnails
final thumbnails = List<JingleContentThumbnail>.empty(growable: true);
for (final i
in node.findTags('thumbnail', xmlns: jingleContentThumbnailXmlns)) {
thumbnails.add(JingleContentThumbnail.fromXML(i));
}
// Length and height
final widthString = node.firstTag('length');
final heightString = node.firstTag('height');
int? width;
int? height;
if (widthString != null) {
width = int.parse(widthString.innerText());
}
if (heightString != null) {
height = int.parse(heightString.innerText());
}
return FileMetadataData(
mediaType: node.firstTag('media-type')?.innerText(),
width: width,
height: height,
desc: node.firstTag('desc')?.innerText(),
hashes: hashes,
length: length,
name: node.firstTag('name')?.innerText(),
size: size,
thumbnails: thumbnails,
);
}