/// /// <param name="resource"></param> /// <param name="allReachableResources"></param> private static void addToContentsResult(Resource resource, Dictionary<String, Resource> allReachableResources) { if (resource != null && (!allReachableResources.ContainsKey(resource.getHref()))) { allReachableResources.Add(resource.getHref(), resource); } }
/// /// <param name="uniqueHrefs"></param> /// <param name="result"></param> /// <param name="tocReferences"></param> private static void getAllUniqueResources(List<String> uniqueHrefs, List<Resource> result, List<TOCReference> tocReferences) { foreach (TOCReference tocReference in tocReferences) { Resource resource = tocReference.getResource(); if (resource != null && !uniqueHrefs.Contains(resource.getHref())) { uniqueHrefs.Add(resource.getHref()); result.Add(resource); } getAllUniqueResources(uniqueHrefs, result, tocReference.getChildren()); } }
/// <summary> /// Adds a resource to the resources. Fixes the resources id and href if necessary. /// /// </summary> /// <param name="resource"></param> public Resource add(Resource resource) { fixResourceHref(resource); fixResourceId(resource); resources.Add(resource.getHref(), resource); return resource; }
/// <summary> /// Adds a resource to the resources. Fixes the resources id and href if necessary. /// /// </summary> /// <param name="resource"></param> public Resource add(Resource resource) { fixResourceHref(resource); fixResourceId(resource); resources.Add(resource.getHref(), resource); return resource; }
/// <summary> /// The position within the spine of the given resource. /// </summary> /// something < 0 if not found. /// <param name="currentResource"></param> public int getResourceIndex(Resource currentResource) { if (currentResource == null) { return -1; } return getResourceIndex(currentResource.getHref()); }
/// /// <param name="coverPage"></param> public void setCoverPage(Resource coverPage) { if (coverPage == null) { return; } if (!resources.containsByHref(coverPage.getHref())) { resources.add(coverPage); } guide.setCoverPage(coverPage); }
/// /// <param name="coverImage"></param> public void setCoverImage(Resource coverImage) { if (coverImage == null) { return; } if (!resources.containsByHref(coverImage.getHref())) { resources.add(coverImage); } this.coverImage = coverImage; }
/// /// <param name="resource"></param> private void fixResourceHref(Resource resource) { if (StringUtil.isNotBlank(resource.getHref()) && !resources.ContainsKey(resource.getHref())) { return; } if (StringUtil.isBlank(resource.getHref())) { if (resource.getMediaType() == null) { throw new ArgumentException("Resource must have either a MediaType or a href"); } int i = 1; String href = createHref(resource.getMediaType(), i); while (resources.ContainsKey(href)) { href = createHref(resource.getMediaType(), (++i)); } resource.setHref(href); } }
/// <summary> /// Checks the id of the given resource and changes to a unique identifier if it /// isn't one already. /// </summary> /// <param name="resource">resource</param> public void fixResourceId(Resource resource) { string resourceId = resource.getId(); if (StringUtil.isBlank(resource.getId())) { resourceId = StringUtil.substringBeforeLast(resource.getHref(), '.'); resourceId = StringUtil.substringAfterLast(resourceId, '/'); } resourceId = makeValidId(resourceId, resource); // check if the id is unique. if not: create one from scratch if (StringUtil.isBlank(resourceId) || containsId(resourceId)) { resourceId = createUniqueResourceId(resource); } resource.setId(resourceId); }
/// /// <param name="packageResource"></param> /// <param name="epubReader"></param> /// <param name="book"></param> /// <param name="resources"></param> public static void read(Resource packageResource, EpubReader epubReader, Book book, Resources resources) { XElement packageDocument = XElement.Load(packageResource.getInputStream()); String packageHref = packageResource.getHref(); resources = fixHrefs(packageHref, resources); readGuide(packageDocument, epubReader, book, resources); System.Collections.Generic.Dictionary<string, string> idMapping = new Dictionary<string, string>(); resources = readManifest(packageDocument, packageHref, epubReader, resources, idMapping); book.setResources(resources); readCover(packageDocument, book); // book.setMetadata(PackageDocumentMetadataReader.readMetadata(packageDocument, book.getResources())); book.setSpine(readSpine(packageDocument, epubReader, book.getResources(), idMapping)); // if we did not find a cover page then we make the first page of the book the cover page if (book.getCoverPage() == null && book.getSpine().size() > 0) { book.setCoverPage(book.getSpine().getResource(0)); } }
/// <summary> /// The position within the spine of the given resource. /// </summary> /// something < 0 if not found. /// <param name="currentResource"></param> public int getResourceIndex(Resource currentResource) { if (currentResource == null) { return -1; } return getResourceIndex(currentResource.getHref()); }
/// /// <param name="resource"></param> private void fixResourceHref(Resource resource) { if (StringUtil.isNotBlank(resource.getHref()) && !resources.ContainsKey(resource.getHref())) { return; } if (StringUtil.isBlank(resource.getHref())) { if (resource.getMediaType() == null) { throw new ArgumentException("Resource must have either a MediaType or a href"); } int i = 1; String href = createHref(resource.getMediaType(), i); while (resources.ContainsKey(href)) { href = createHref(resource.getMediaType(), (++i)); } resource.setHref(href); } }
/// <summary> /// Checks the id of the given resource and changes to a unique identifier if it /// isn't one already. /// </summary> /// <param name="resource">resource</param> public void fixResourceId(Resource resource) { string resourceId = resource.getId(); if (StringUtil.isBlank(resource.getId())) { resourceId = StringUtil.substringBeforeLast(resource.getHref(), '.'); resourceId = StringUtil.substringAfterLast(resourceId, '/'); } resourceId = makeValidId(resourceId, resource); // check if the id is unique. if not: create one from scratch if (StringUtil.isBlank(resourceId) || containsId(resourceId)) { resourceId = createUniqueResourceId(resource); } resource.setId(resourceId); }
/// /// <param name="resource"></param> /// <param name="allReachableResources"></param> private static void addToContentsResult(Resource resource, Dictionary<String, Resource> allReachableResources) { if (resource != null && (!allReachableResources.ContainsKey(resource.getHref()))) { allReachableResources.Add(resource.getHref(), resource); } }
/// /// <param name="coverPage"></param> public void setCoverPage(Resource coverPage) { if (coverPage == null) { return; } if (!resources.containsByHref(coverPage.getHref())) { resources.add(coverPage); } guide.setCoverPage(coverPage); }
/// /// <param name="coverImage"></param> public void setCoverImage(Resource coverImage) { if (coverImage == null) { return; } if (!resources.containsByHref(coverImage.getHref())) { resources.add(coverImage); } this.coverImage = coverImage; }