mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 15:23:02 +00:00 
			
		
		
		
	Merge remote-tracking branch 'gitignore/bookmeta-patch-20170302'
# Conflicts: # cps/epub.py
This commit is contained in:
		| @@ -63,7 +63,9 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension): | ||||
|         description="", | ||||
|         tags="", | ||||
|         series="", | ||||
|         series_id="") | ||||
|         series_id="", | ||||
|         comments="", | ||||
|         languages="") | ||||
|  | ||||
|  | ||||
| def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | ||||
| @@ -91,7 +93,9 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | ||||
|         description=subject, | ||||
|         tags="", | ||||
|         series="", | ||||
|         series_id="") | ||||
|         series_id="", | ||||
|         comments="", | ||||
|         languages="") | ||||
|  | ||||
|  | ||||
| def pdf_preview(tmp_file_path, tmp_dir): | ||||
|   | ||||
| @@ -247,7 +247,7 @@ class Books(Base): | ||||
|     identifiers = relationship('Identifiers', backref='books') | ||||
|  | ||||
|     def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, | ||||
|                  authors, tags): | ||||
|                  authors, tags, languages = None): | ||||
|         self.title = title | ||||
|         self.sort = sort | ||||
|         self.author_sort = author_sort | ||||
|   | ||||
							
								
								
									
										33
									
								
								cps/epub.py
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								cps/epub.py
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ import zipfile | ||||
| from lxml import etree | ||||
| import os | ||||
| import uploader | ||||
|  | ||||
| from iso639 import languages as isoLanguages | ||||
|  | ||||
| def extractCover(zip, coverFile, coverpath, tmp_file_name): | ||||
|     if coverFile is None: | ||||
| @@ -41,12 +41,31 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): | ||||
|     p = tree.xpath('/pkg:package/pkg:metadata', namespaces=ns)[0] | ||||
|  | ||||
|     epub_metadata = {} | ||||
|     try:#maybe description isn't present | ||||
|         comments = tree.xpath("//*[local-name() = 'description']/text()")[0] | ||||
|         epub_metadata['comments'] = comments | ||||
|     except: | ||||
|         epub_metadata['comments'] = "" | ||||
|  | ||||
|     for s in ['title', 'description', 'creator']: | ||||
|         tmp = p.xpath('dc:%s/text()' % s, namespaces=ns) | ||||
|         if len(tmp) > 0: | ||||
|             epub_metadata[s] = p.xpath('dc:%s/text()' % s, namespaces=ns)[0] | ||||
|         else: | ||||
|             epub_metadata[s] = "Unknown" | ||||
|     #detect lang need futher modification in web.py /upload | ||||
|     try:#maybe dc:language isn't present, less possible but possible | ||||
|         lang = p.xpath('dc:language/text()', namespaces=ns)[0] | ||||
|         lang = lang.split('-', 1)[0] | ||||
|         lang.lower() | ||||
|         if len(lang) == 2: | ||||
|             epub_metadata['languages'] = isoLanguages.get(part1=lang).name | ||||
|         elif len(lang) == 3: | ||||
|             epub_metadata['languages'] = isoLanguages.get(part3=lang).name | ||||
|         else: | ||||
|             epub_metadata['languages'] = "" | ||||
|     except: | ||||
|         epub_metadata['languages'] = "" | ||||
|  | ||||
|     coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) | ||||
|     coverfile = None | ||||
| @@ -60,16 +79,16 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): | ||||
|                 markup = zip.read(os.path.join(coverpath,coversection[0])) | ||||
|                 markupTree = etree.fromstring(markup) | ||||
|                 #no matter xhtml or html with no namespace | ||||
|                 imgsrc = markupTree.xpath( "//*[local-name() = 'img']/@src") | ||||
|                 imgsrc = markupTree.xpath("//*[local-name() = 'img']/@src") | ||||
|                 #imgsrc maybe startwith "../"" so fullpath join then relpath to cwd | ||||
|                 filename = os.path.relpath(os.path.join(os.path.dirname(os.path.join(coverpath,coversection[0])),imgsrc[0])) | ||||
|                 coverfile = extractCover(zip, filename, "", tmp_file_path)         | ||||
|                 filename = os.path.relpath(os.path.join(os.path.dirname(os.path.join(coverpath, coversection[0])), imgsrc[0])) | ||||
|                 coverfile = extractCover(zip, filename, "", tmp_file_path) | ||||
|             else: | ||||
|                 coverfile = extractCover(zip, coversection[0], coverpath, tmp_file_path) | ||||
|         else: | ||||
|             meta_cover = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content", namespaces=ns) | ||||
|             if len(meta_cover) > 0: | ||||
|                 meta_cover_content = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='"+meta_cover[0]+"']/@href",namespaces=ns) | ||||
|                 meta_cover_content = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='"+meta_cover[0]+"']/@href", namespaces=ns) | ||||
|                 if len(meta_cover_content) > 0: | ||||
|                     coverfile = extractCover(zip, meta_cover_content[0], coverpath, tmp_file_path) | ||||
|  | ||||
| @@ -87,4 +106,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): | ||||
|         description=epub_metadata['description'], | ||||
|         tags="", | ||||
|         series="", | ||||
|         series_id="") | ||||
|         series_id="", | ||||
|         comments=epub_metadata['comments'], | ||||
|         languages=epub_metadata['languages']) | ||||
|   | ||||
| @@ -59,4 +59,5 @@ def get_fb2_info(tmp_file_path, original_file_extension): | ||||
|         description=description, | ||||
|         tags="", | ||||
|         series="", | ||||
|         series_id="") | ||||
|         series_id="", | ||||
|         languages="") | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import hashlib | ||||
| from collections import namedtuple | ||||
| import book_formats | ||||
|  | ||||
| BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, description, tags, series, series_id') | ||||
| BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, description, tags, series, series_id, comments, languages') | ||||
|  | ||||
| """ | ||||
|  :rtype: BookMeta | ||||
|   | ||||
							
								
								
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ import logging | ||||
| from logging.handlers import RotatingFileHandler | ||||
| import textwrap | ||||
| from flask import Flask, render_template, request, Response, redirect, url_for, send_from_directory, \ | ||||
|     make_response, g, flash, abort | ||||
|     make_response, g, flash, abort, Markup | ||||
| from flask import __version__ as flaskVersion | ||||
| import ub | ||||
| from ub import config | ||||
| @@ -2209,16 +2209,39 @@ def upload(): | ||||
|         else: | ||||
|             db_author = db.Authors(author, helper.get_sorted_author(author), "")  | ||||
|             db.session.add(db_author) | ||||
|          | ||||
|         #add language actually one value in list | ||||
|         input_language = meta.languages | ||||
|         db_language = None | ||||
|         if input_language != "": | ||||
|             input_language = isoLanguages.get(name=input_language).part3 | ||||
|             hasLanguage = db.session.query(db.Languages).filter(db.Languages.lang_code == input_language).first() | ||||
|             if hasLanguage: | ||||
|                 db_language = hasLanguage | ||||
|             else: | ||||
|                 db_language = db.Languages(input_language)  | ||||
|                 db.session.add(db_language) | ||||
|         # combine path and normalize path from windows systems | ||||
|         path = os.path.join(author_dir, title_dir).replace('\\','/') | ||||
|         db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 01, 01), 1, | ||||
|                            datetime.datetime.now(), path, has_cover, db_author, []) | ||||
|                            datetime.datetime.now(), path, has_cover, db_author, [], db_language) | ||||
|         db_book.authors.append(db_author) | ||||
|         if db_language is not None: | ||||
|             db_book.languages.append(db_language) | ||||
|         db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) | ||||
|         db_book.data.append(db_data) | ||||
|  | ||||
|         db.session.add(db_book) | ||||
|         db.session.flush()# flush content get db_book.id avalible | ||||
|        #add comment | ||||
|         upload_comment = Markup(meta.comments).unescape() | ||||
|         db_comment = None | ||||
|         if upload_comment != "": | ||||
|             db_comment = db.Comments(upload_comment, db_book.id)  | ||||
|             db.session.add(db_comment) | ||||
|         db.session.commit() | ||||
|         if db_language is not None: #display Full name instead of iso639.part3 | ||||
|             db_book.languages[0].language_name = _(meta.languages) | ||||
|         author_names = [] | ||||
|         for author in db_book.authors: | ||||
|             author_names.append(author.name) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 OzzieIsaacs
					OzzieIsaacs