diff --git a/src/calibre/ebooks/lrf/lit/convert_from.py b/src/calibre/ebooks/lrf/lit/convert_from.py index 3d8a3f97b0..486a1e4cda 100644 --- a/src/calibre/ebooks/lrf/lit/convert_from.py +++ b/src/calibre/ebooks/lrf/lit/convert_from.py @@ -5,6 +5,7 @@ import os, sys, shutil, glob, logging from tempfile import mkdtemp from subprocess import Popen, PIPE from calibre.ebooks.lrf import option_parser as lrf_option_parser +from calibre.ebooks.lit.reader import LitReader from calibre.ebooks import ConversionError from calibre.ebooks.lrf.html.convert_from import process_file as html_process_file from calibre.ebooks.metadata.opf import OPFReader @@ -17,12 +18,24 @@ if islinux and getattr(sys, 'frozen_path', False): CLIT = os.path.join(getattr(sys, 'frozen_path'), 'clit') def option_parser(): - return lrf_option_parser( + parser = lrf_option_parser( _('''Usage: %prog [options] mybook.lit %prog converts mybook.lit to mybook.lrf''') ) + parser.add_option('--lit2oeb', default=False, dest='lit2oeb', action='store_true', + help='Use the new lit2oeb to convert lit files instead of convertlit.') + return parser + +def generate_html2(pathtolit, logger): + if not os.access(pathtolit, os.R_OK): + raise ConversionError, 'Cannot read from ' + pathtolit + tdir = mkdtemp(prefix=__appname__+'_') + lr = LitReader(pathtolit) + print 'Extracting LIT file to', tdir + lr.extract_content(tdir) + return tdir def generate_html(pathtolit, logger): if not os.access(pathtolit, os.R_OK): @@ -51,7 +64,7 @@ def process_file(path, options, logger=None): logger = logging.getLogger('lit2lrf') setup_cli_handlers(logger, level) lit = os.path.abspath(os.path.expanduser(path)) - tdir = generate_html(lit, logger) + tdir = generate_html2(lit, logger) if options.lit2oeb else generate_html(lit, logger) try: opf = glob.glob(os.path.join(tdir, '*.opf')) if opf: diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index 0e972cb20b..2a3e58f99b 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -19,7 +19,7 @@ from calibre.ebooks.metadata.meta import get_metadata from calibre.ebooks.metadata.opf import OPFCreator, OPFReader from calibre.library.database import LibraryDatabase, text_to_tokens -FIELDS = set(['title', 'authors', 'publisher', 'rating', 'timestamp', 'size', 'tags', 'comments', 'series', 'series_index', 'formats']) +FIELDS = set(['title', 'authors', 'publisher', 'rating', 'timestamp', 'size', 'tags', 'comments', 'series', 'series_index', 'formats', 'isbn']) def get_parser(usage): parser = OptionParser(usage) diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py index 006438746b..0a05f48dc9 100644 --- a/src/calibre/library/database.py +++ b/src/calibre/library/database.py @@ -754,7 +754,32 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; conn.execute('UPDATE books SET author_sort=? WHERE id=?', (aus, id)) conn.execute('pragma user_version=11') conn.commit() - + + @staticmethod + def upgrade_version11(conn): + conn.executescript( +''' +/***** Add isbn column to meta view ******/ + DROP VIEW meta; + CREATE VIEW meta AS + SELECT id, title, + (SELECT concat(name) FROM authors WHERE authors.id IN (SELECT author from books_authors_link WHERE book=books.id)) authors, + (SELECT name FROM publishers WHERE publishers.id IN (SELECT publisher from books_publishers_link WHERE book=books.id)) publisher, + (SELECT rating FROM ratings WHERE ratings.id IN (SELECT rating from books_ratings_link WHERE book=books.id)) rating, + timestamp, + (SELECT MAX(uncompressed_size) FROM data WHERE book=books.id) size, + (SELECT concat(name) FROM tags WHERE tags.id IN (SELECT tag from books_tags_link WHERE book=books.id)) tags, + (SELECT text FROM comments WHERE book=books.id) comments, + (SELECT name FROM series WHERE series.id IN (SELECT series FROM books_series_link WHERE book=books.id)) series, + series_index, + sort, + author_sort, + (SELECT concat(format) FROM data WHERE data.book=books.id) formats, + isbn + FROM books; +''') + conn.execute('pragma user_version=12') + conn.commit() def __init__(self, dbpath, row_factory=False): self.dbpath = dbpath diff --git a/src/calibre/translations/__init__.py b/src/calibre/translations/__init__.py index 01f546b42e..9aca9e9fca 100644 --- a/src/calibre/translations/__init__.py +++ b/src/calibre/translations/__init__.py @@ -70,8 +70,22 @@ def import_from_launchpad(url): open(out, 'wb').write(tf.extractfile(next).read()) next = tf.next() + check_for_critical_bugs() return 0 +def check_for_critical_bugs(): + if os.path.exists('.errors'): + shutil.rmtree('.errors') + pofilter = ('pofilter', '-i', '.', '-o', '.errors', + '-t', 'accelerators', '-t', 'escapes', '-t', 'variables', + '-t', 'xmltags') + subprocess.check_call(pofilter) + errs = os.listdir('.errors') + if errs: + print 'WARNING: Translation errors detected' + print 'See the .errors directory and http://translate.sourceforge.net/wiki/toolkit/using_pofilter' + + def main(args=sys.argv): if len(args) > 1: if args[1] == 'pot': diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index d5fd04e82f..bda7df14d3 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -426,6 +426,7 @@ msgstr "" "Expressión regular utilizada para detectar los títulos de los capítulos. " "Busca las marcas de encabezado (h1-h6). Por defecto: %default" +# (pofilter) escapes: escapes in original ('"h\d,class,chapter".') don't match escapes in translation () #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " @@ -437,7 +438,7 @@ msgstr "" "especificado. El formato para ésta espresión es tagname regexp, nombre del " "atributo, valor del atributo regexp. Por ejemplo, para encontrar todas las " "etiquetas de cabecera que tienen como attribute class=\"capítulo\" podría " -"usar: \"h/d,class,capítulo\". El valor por defecto es: %default" +"usar: \"h\\d,class,capítulo\". El valor por defecto es: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 msgid "" @@ -2111,6 +2112,7 @@ msgstr "&Compartir receta" msgid "&Load recipe from file" msgstr "&Cargar receta desde un archivo" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "
\n" "Crear una receta de " -"noticias básica, añadiendo un RSS Feed. Para la mayoría de los feeds, " -"necesitará utilizar el \"modo avanzado\" para una configuración mas " -"detallada del proceso de adquisición de los datos