Example #1
0
        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));
        }
Example #2
0
 public Book CreateBookshelfBook(Model.Format.Ebook book)
 {
     return(new Book {
         Title = book.Title,
         Path = book.Folder,
         Cover = book.Cover,
         Format = Model.Format.EbookFormat.Epub,
     });
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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));
        }