create method
Manifest
create()
Implementation
Manifest create() {
// Compute metadata
Metadata metadata = _pubMetadata.metadata();
List<Link> metadataLinks = _links.mapNotNull(_mapEpubLink).toList();
// Compute links
List<String> readingOrderIds = _spine.itemrefs
.filter((it) => it.linear)
.map((it) => it.idref)
.toList();
List<Link> readingOrder = readingOrderIds
.mapNotNull((it) => _itemById[it]?.let(_computeLink))
.toList();
Set<String> readingOrderAllIds = _computeIdsWithFallbacks(readingOrderIds);
List<Item> resourceItems = _manifest
.filterNot((it) => readingOrderAllIds.contains(it.id))
.toList();
List<Link> resources = resourceItems.map(_computeLink).toList();
// Compute toc and otherCollections
List<Link> toc = navigationData.remove("toc") ?? [];
Map<String, List<PublicationCollection>> subcollections =
navigationData.map((key, value) => MapEntry(
(key == "page-list") ? "pageList" : key,
[PublicationCollection(links: value)]));
// Build Publication object
return Manifest(
metadata: metadata,
links: metadataLinks,
readingOrder: readingOrder,
resources: resources,
tableOfContents: toc,
subcollections: subcollections);
}