mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13: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="", |         description="", | ||||||
|         tags="", |         tags="", | ||||||
|         series="", |         series="", | ||||||
|         series_id="") |         series_id="", | ||||||
|  |         comments="", | ||||||
|  |         languages="") | ||||||
|  |  | ||||||
|  |  | ||||||
| def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | 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, |         description=subject, | ||||||
|         tags="", |         tags="", | ||||||
|         series="", |         series="", | ||||||
|         series_id="") |         series_id="", | ||||||
|  |         comments="", | ||||||
|  |         languages="") | ||||||
|  |  | ||||||
|  |  | ||||||
| def pdf_preview(tmp_file_path, tmp_dir): | def pdf_preview(tmp_file_path, tmp_dir): | ||||||
|   | |||||||
| @@ -247,7 +247,7 @@ class Books(Base): | |||||||
|     identifiers = relationship('Identifiers', backref='books') |     identifiers = relationship('Identifiers', backref='books') | ||||||
|  |  | ||||||
|     def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, |     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.title = title | ||||||
|         self.sort = sort |         self.sort = sort | ||||||
|         self.author_sort = author_sort |         self.author_sort = author_sort | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								cps/epub.py
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								cps/epub.py
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ import zipfile | |||||||
| from lxml import etree | from lxml import etree | ||||||
| import os | import os | ||||||
| import uploader | import uploader | ||||||
|  | from iso639 import languages as isoLanguages | ||||||
|  |  | ||||||
| def extractCover(zip, coverFile, coverpath, tmp_file_name): | def extractCover(zip, coverFile, coverpath, tmp_file_name): | ||||||
|     if coverFile is None: |     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] |     p = tree.xpath('/pkg:package/pkg:metadata', namespaces=ns)[0] | ||||||
|  |  | ||||||
|     epub_metadata = {} |     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']: |     for s in ['title', 'description', 'creator']: | ||||||
|         tmp = p.xpath('dc:%s/text()' % s, namespaces=ns) |         tmp = p.xpath('dc:%s/text()' % s, namespaces=ns) | ||||||
|         if len(tmp) > 0: |         if len(tmp) > 0: | ||||||
|             epub_metadata[s] = p.xpath('dc:%s/text()' % s, namespaces=ns)[0] |             epub_metadata[s] = p.xpath('dc:%s/text()' % s, namespaces=ns)[0] | ||||||
|         else: |         else: | ||||||
|             epub_metadata[s] = "Unknown" |             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) |     coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) | ||||||
|     coverfile = None |     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])) |                 markup = zip.read(os.path.join(coverpath,coversection[0])) | ||||||
|                 markupTree = etree.fromstring(markup) |                 markupTree = etree.fromstring(markup) | ||||||
|                 #no matter xhtml or html with no namespace |                 #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 |                 #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])) |                 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) |                 coverfile = extractCover(zip, filename, "", tmp_file_path) | ||||||
|             else: |             else: | ||||||
|                 coverfile = extractCover(zip, coversection[0], coverpath, tmp_file_path) |                 coverfile = extractCover(zip, coversection[0], coverpath, tmp_file_path) | ||||||
|         else: |         else: | ||||||
|             meta_cover = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content", namespaces=ns) |             meta_cover = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content", namespaces=ns) | ||||||
|             if len(meta_cover) > 0: |             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: |                 if len(meta_cover_content) > 0: | ||||||
|                     coverfile = extractCover(zip, meta_cover_content[0], coverpath, tmp_file_path) |                     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'], |         description=epub_metadata['description'], | ||||||
|         tags="", |         tags="", | ||||||
|         series="", |         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, |         description=description, | ||||||
|         tags="", |         tags="", | ||||||
|         series="", |         series="", | ||||||
|         series_id="") |         series_id="", | ||||||
|  |         languages="") | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ import hashlib | |||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
| import book_formats | 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 |  :rtype: BookMeta | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ import logging | |||||||
| from logging.handlers import RotatingFileHandler | from logging.handlers import RotatingFileHandler | ||||||
| import textwrap | import textwrap | ||||||
| from flask import Flask, render_template, request, Response, redirect, url_for, send_from_directory, \ | 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 | from flask import __version__ as flaskVersion | ||||||
| import ub | import ub | ||||||
| from ub import config | from ub import config | ||||||
| @@ -2209,16 +2209,39 @@ def upload(): | |||||||
|         else: |         else: | ||||||
|             db_author = db.Authors(author, helper.get_sorted_author(author), "")  |             db_author = db.Authors(author, helper.get_sorted_author(author), "")  | ||||||
|             db.session.add(db_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 |         # combine path and normalize path from windows systems | ||||||
|         path = os.path.join(author_dir, title_dir).replace('\\','/') |         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, |         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) |         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_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) | ||||||
|         db_book.data.append(db_data) |         db_book.data.append(db_data) | ||||||
|  |  | ||||||
|         db.session.add(db_book) |         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() |         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 = [] |         author_names = [] | ||||||
|         for author in db_book.authors: |         for author in db_book.authors: | ||||||
|             author_names.append(author.name) |             author_names.append(author.name) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 OzzieIsaacs
					OzzieIsaacs