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);
}