public void Save(Book book) { var file = book.File; var bookZip = ZipFile.Open(file, ZipArchiveMode.Update); var tempFile = @"C:\Users\pgathany\Desktop\Personal\Books\tempDirectory" + Path.GetFileNameWithoutExtension(file); bookZip.ExtractToDirectory(tempFile); var tempBookFiles = directory.GetFiles(tempFile, "*.opf", SearchOption.AllDirectories); var opf = tempBookFiles.FirstOrDefault(f => f.EndsWith(".opf")); var doc = XDocument.Load(opf); var elements = doc.Root.Elements(); var metadata = elements.Where(e => e.Name.LocalName == "metadata").FirstOrDefault(); var metaDataElements = metadata.Elements(); var title = metaDataElements.Where(e => e.Name.LocalName == "title").FirstOrDefault(); title.Value = book.Title; var creator = metaDataElements.Where(e => e.Name.LocalName == "creator").FirstOrDefault(); creator.Value = book.Creator; File.Delete(opf); doc.Save(opf); File.Delete(file); ZipFile.CreateFromDirectory(tempFile, file); directory.Delete(tempFile, true); }
private void AddBook(string bookfile) { var contentReader = new EpubContentReader(bookfile, new Settings(), new DirectoryHelper()); var title = contentReader.GetTitle(); var creator = contentReader.GetCreator(); var book = new Book() { File = bookfile, Title = title, Creator = creator }; db.Add(book); }
private void Save_Click(object sender, EventArgs e) { Save.Enabled = false; var fileName = FilePath.Text; var title = Title.Text; var creator = Creator.Text; var cover = Cover.ImageLocation; var book = new Book() { File = fileName, Title = title, Creator = creator, BookCover = cover }; var bookSaver = new OverwrittingBookSaver(new DirectoryHelper(), new Settings().TempDirectory); bookSaver.Save(book); Save.Enabled = true; SaveMessage.Visible = true; StartTimer(); }
public void Save(Book book) { var file = book.File; var bookZip = ZipFile.Open(file, ZipArchiveMode.Update); var tempFile = Path.Combine(TempPath, Path.GetFileNameWithoutExtension(file) + "SavingTemp"); bookZip.ExtractToDirectory(tempFile); bookZip.Dispose(); var tempBookFiles = directory.GetFiles(tempFile, "*.opf", SearchOption.AllDirectories); var opf = tempBookFiles.FirstOrDefault(f => f.EndsWith(".opf")); var doc = XDocument.Load(opf); var elements = doc.Root.Elements(); var metadata = elements.Where(e => e.Name.LocalName == "metadata").FirstOrDefault(); var metaDataElements = metadata.Elements(); var title = metaDataElements.Where(e => e.Name.LocalName == "title").FirstOrDefault(); title.Value = book.Title; var creator = metaDataElements.Where(e => e.Name.LocalName == "creator").FirstOrDefault(); creator.Value = book.Creator; var coverInfoElement = metaDataElements.Where(e => e.Attributes("name").Where(a => a.Value == "cover").FirstOrDefault() != null).FirstOrDefault(); if (coverInfoElement != null) { var coverValue = coverInfoElement.Attributes("content").FirstOrDefault().Value; var manifest = elements.Where(e => e.Name.LocalName == "manifest").FirstOrDefault(); var manifestElements = manifest.Elements(); var coverManifest = manifestElements.Where(e => e.Attributes("id").FirstOrDefault() != null && e.Attributes("id").FirstOrDefault().Value == coverValue).FirstOrDefault(); var coverHrefElement = coverManifest.Attributes("href").FirstOrDefault(); var coverHref = coverHrefElement.Value; var fullCoverLocation = Path.Combine(Path.GetDirectoryName(opf), coverHref.Replace("/", "\\")); var coverLocation = fullCoverLocation; if (coverLocation != book.BookCover) { File.Delete(coverLocation); var coverExtension = Path.GetExtension(book.BookCover).Replace(".", ""); var coverMediaType = (coverExtension.StartsWith("jp") ? "image/jpeg" : "image/png"); var newCover = Path.ChangeExtension(coverLocation, coverExtension); var localCoverPath = Path.ChangeExtension(coverHref, coverExtension); coverHrefElement.Value = localCoverPath; File.Copy(book.BookCover, newCover); var mediaTypeAttr = coverManifest.Attribute("media-type"); if(mediaTypeAttr != null) { mediaTypeAttr.Value = coverMediaType; } else { coverManifest.Add(new XAttribute("media-type", coverMediaType)); } } } else { if(!string.IsNullOrEmpty(book.BookCover)) { var coverExtension = Path.GetExtension(book.BookCover).Replace(".", ""); var mediaType = (coverExtension.StartsWith("jp") ? "image/jpeg" : "image/png"); metadata.Add(new XElement("meta", new XAttribute("name", "cover"), new XAttribute("content", "bookinatorcover"))); var manifest = elements.Where(e => e.Name.LocalName == "manifest").FirstOrDefault(); var newCoverName = "bookinatorcover" + Path.GetExtension(book.BookCover); manifest.AddFirst(new XElement("item", new XAttribute("id", "bookinatorcover"), new XAttribute("href", newCoverName), new XAttribute("media-type", mediaType))); File.Copy(book.BookCover, Path.Combine(Path.GetDirectoryName(opf), newCoverName)); } } File.Delete(opf); doc.Save(opf); OverwriteEpub(file, tempFile); }