public async Task <string> GetChapter(Model.Format.Ebook epub, Model.Format.Spine chapter) { var filename = epub.Files.Where(o => o.Id == chapter.Idref).First(); var folder = await FileSystem.Current.LocalStorage.GetFolderAsync(epub.Folder); return(await _fileService.ReadFileData($"{epub.ContentBasePath}{filename.Href}", folder)); }
public Book CreateBookshelfBook(Model.Format.Ebook book) { return(new Book { Title = book.Title, Path = book.Folder, Cover = book.Cover, Format = Model.Format.EbookFormat.Epub, }); }
public async Task <Model.EpubLoader.HtmlResult> PrepareHTML(string html, Model.Format.Ebook epub, Model.Format.File chapter) { var doc = new HtmlDocument(); doc.LoadHtml(html); this.StripHtmlTags(doc); var images = await this.PrepareHtmlImages(doc, epub, chapter); var result = new Model.EpubLoader.HtmlResult { Html = doc.DocumentNode.Descendants("body").First().InnerHtml, Images = images, }; return(result); }
public async Task <Model.Format.Ebook> OpenBook(string path) { var epubFolder = await FileSystem.Current.LocalStorage.GetFolderAsync(path); var contentFilePath = await this.GetContentFilePath(epubFolder); var contentFilePathParts = contentFilePath.Split('/'); var contentBasePath = string.Join("/", contentFilePathParts.Take(contentFilePathParts.Length - 1)); if (!string.IsNullOrEmpty(contentBasePath)) { contentBasePath += "/"; } var contentFileData = await _fileService.ReadFileData(contentFilePath, epubFolder); var xml = XDocument.Parse(contentFileData); var package = xml.Root; var epubVersion = this.GetEpubVersion(package); var epubParser = IocManager.Container.ResolveKeyed <EpubParser>( epubVersion, new NamedParameter("package", package), new NamedParameter("folder", epubFolder), new NamedParameter("contentBasePath", contentBasePath) ); var epub = new Model.Format.Ebook() { Title = epubParser.GetTitle(), Author = epubParser.GetAuthor(), Description = epubParser.GetDescription(), Language = epubParser.GetLanguage(), Spines = epubParser.GetSpines(), Files = epubParser.GetFiles(), Folder = path, ContentBasePath = contentBasePath, Navigation = await epubParser.GetNavigation(), Cover = epubParser.GetCover() }; return(epub); }
private async Task <List <Model.EpubLoader.Image> > ReplaceImagesWithBase64(List <Model.EpubLoader.Image> imagesModel, Model.Format.Ebook epub) { var epubFolder = await FileSystem.Current.LocalStorage.GetFolderAsync(epub.Folder); foreach (var imageModel in imagesModel) { var extension = imageModel.FileName.Split('.').Last(); var fileName = PathHelper.NormalizePath($"{epub.ContentBasePath}/{imageModel.FileName.Replace("../", "")}"); var file = await _fileService.OpenFile(fileName, epubFolder); using (var stream = await file.OpenAsync(PCLStorage.FileAccess.Read)) { var base64 = Base64Helper.GetFileBase64(stream); imageModel.Data = $"data:image/{extension};base64,{base64}"; } } return(imagesModel); }
private async Task <List <Model.EpubLoader.Image> > PrepareHtmlImages(HtmlDocument doc, Model.Format.Ebook epub, Model.Format.File chapter) { var imagesModel = this.GetImages(doc, chapter); return(await this.ReplaceImagesWithBase64(imagesModel, epub)); }