KdbxEntry.read constructor
KdbxEntry.read(})
Implementation
KdbxEntry.read(KdbxReadWriteContext ctx, KdbxGroup? parent, XmlElement node,
{this.isHistoryEntry = false})
: history = [],
customData = node
.singleElement(KdbxXml.NODE_CUSTOM_DATA)
?.let((e) => KdbxCustomData.read(e)) ??
KdbxCustomData.create(),
super.read(ctx, parent, node) {
_strings.addEntries(node.findElements(KdbxXml.NODE_STRING).map((el) {
final key = KdbxKey(el.findElements(KdbxXml.NODE_KEY).single.text);
final valueNode = el.findElements(KdbxXml.NODE_VALUE).single;
if (valueNode.getAttribute(KdbxXml.ATTR_PROTECTED)?.toLowerCase() ==
'true') {
return MapEntry(key, KdbxFile.protectedValueForNode(valueNode));
} else {
return MapEntry(key, PlainValue(valueNode.text));
}
}));
_binaries.addEntries(node.findElements(KdbxXml.NODE_BINARY).map((el) {
final key = KdbxKey(el.findElements(KdbxXml.NODE_KEY).single.text);
final valueNode = el.findElements(KdbxXml.NODE_VALUE).single;
final ref = valueNode.getAttribute(KdbxXml.ATTR_REF);
if (ref != null) {
final refId = int.parse(ref);
final binary = ctx.binaryById(refId);
if (binary == null) {
throw KdbxCorruptedFileException(
'Unable to find binary with id $refId');
}
return MapEntry(key, binary);
}
return MapEntry(key, KdbxBinary.readBinaryXml(valueNode, isInline: true));
}));
history.addAll(node
.findElements(KdbxXml.NODE_HISTORY)
.singleOrNull
?.findElements('Entry')
.map((entry) =>
KdbxEntry.read(ctx, parent, entry, isHistoryEntry: true))
.toList() ??
[]);
}