Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
        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);
        }