diff options
Diffstat (limited to 'libre/calibre-libre/libre.patch')
-rw-r--r-- | libre/calibre-libre/libre.patch | 545 |
1 files changed, 538 insertions, 7 deletions
diff --git a/libre/calibre-libre/libre.patch b/libre/calibre-libre/libre.patch index c3dd28eb1..cff783d15 100644 --- a/libre/calibre-libre/libre.patch +++ b/libre/calibre-libre/libre.patch @@ -1,3 +1,58 @@ +diff --git a/resources/images.qrc b/resources/images.qrc +index 4daf069..f7569d1 100644 +--- a/resources/images.qrc ++++ b/resources/images.qrc +@@ -159,7 +159,6 @@ + <file>images/textures/grey_wash_wall.png</file> + <file>images/mimetypes/djvu.png</file> + <file>images/mimetypes/rtf.png</file> +-<file>images/mimetypes/cbr.png</file> + <file>images/mimetypes/lrf.png</file> + <file>images/mimetypes/jpeg.png</file> + <file>images/mimetypes/pdf.png</file> +@@ -181,7 +180,6 @@ + <file>images/mimetypes/txt.png</file> + <file>images/mimetypes/snb.png</file> + <file>images/mimetypes/odt.png</file> +-<file>images/mimetypes/rar.png</file> + <file>images/mimetypes/azw2.png</file> + <file>images/mimetypes/zip.png</file> + <file>images/mimetypes/dir.png</file> +@@ -212,4 +210,4 @@ + <file>images/devices/tablet.png</file> + <file>images/devices/folder.png</file> + </qresource> +-</RCC> +\ No newline at end of file ++</RCC> +diff --git a/resources/mime.types b/resources/mime.types +index b7c33e9..055ea61 100644 +--- a/resources/mime.types ++++ b/resources/mime.types +@@ -137,7 +137,6 @@ application/prs.cww cww + application/prs.nprend + application/prs.plucker + application/qsig +-application/rar rar + application/rdf+xml rdf + application/reginfo+xml rif + application/relax-ng-compact-syntax rnc +@@ -849,7 +848,6 @@ application/x-pkcs7-certreqresp p7r + application/x-pkcs7-crl crl + application/x-python-code pyc pyo + application/x-quicktimeplayer qtl +-application/x-rar-compressed rar + application/x-redhat-package-manager rpm + application/x-sh sh + application/x-shar shar +@@ -1372,7 +1370,6 @@ application/x-mobipocket-subscription pobi + application/x-kindle-application azw2 + application/x-mobi8-ebook azw3 + application/x-cbz cbz +-application/x-cbr cbr + application/x-cb7 cb7 + application/x-koboreader-ebook kobo + image/wmf wmf diff --git a/session.vim b/session.vim index 67502c2..b7f24d3 100644 --- a/session.vim @@ -52,6 +107,19 @@ index 08aa91f..7ee523b 100644 'progress_indicator.pyd', 'hunspell.pyd', # As per this https://bugs.launchpad.net/bugs/1087816 # on some systems magick.pyd fails to load from memory +diff --git a/setup/resources.py b/setup/resources.py +index 1bcc288..7d6c72f 100644 +--- a/setup/resources.py ++++ b/setup/resources.py +@@ -282,7 +282,7 @@ class Resources(Command): # {{{ + log = Log() + #log.outputs = [] + for inf in supported_input_formats(): +- if inf in ('zip', 'rar', 'oebzip'): ++ if inf in ('zip', 'oebzip'): + continue + for ouf in available_output_formats(): + of = ouf if ouf == 'oeb' else 'dummy.'+ouf diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index fcb627c..3289865 100644 --- a/src/calibre/__init__.py @@ -79,7 +147,7 @@ index fcb627c..3289865 100644 raise Exception('Unknown archive type') extractor(path, dir) diff --git a/src/calibre/constants.py b/src/calibre/constants.py -index 13c78db..8e699e2 100644 +index a250521..5d891b8 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -137,7 +137,6 @@ class Plugins(collections.Mapping): @@ -91,12 +159,26 @@ index 13c78db..8e699e2 100644 '_regex', 'hunspell', diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py -index a74951c..86aa14d 100644 +index a74951c..a91abb6 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py -@@ -142,10 +142,6 @@ class ComicMetadataReader(MetadataReaderPlugin): - ftype = 'cbr' - elif id_.startswith(b'PK'): +@@ -127,7 +127,7 @@ plugins += [HTML2ZIP, PML2PMLZ, TXT2TXTZ, ArchiveExtract,] + class ComicMetadataReader(MetadataReaderPlugin): + + name = 'Read comic metadata' +- file_types = set(['cbr', 'cbz']) ++ file_types = set(['cbz']) + description = _('Extract cover from comic files') + + def customization_help(self, gui=False): +@@ -138,14 +138,8 @@ class ComicMetadataReader(MetadataReaderPlugin): + pos = stream.tell() + id_ = stream.read(3) + stream.seek(pos) +- if id_ == b'Rar': +- ftype = 'cbr' +- elif id_.startswith(b'PK'): ++ if id_.startswith(b'PK'): ftype = 'cbz' - if ftype == 'cbr': - from calibre.utils.unrar import extract_first_alphabetically as extract_first @@ -105,8 +187,126 @@ index a74951c..86aa14d 100644 from calibre.libunzip import extract_member extract_first = functools.partial(extract_member, sort_alphabetically=True) +@@ -153,7 +147,7 @@ class ComicMetadataReader(MetadataReaderPlugin): + ret = extract_first(stream) + mi = MetaInformation(None, None) + stream.seek(0) +- if ftype in {'cbr', 'cbz'}: ++ if ftype in {'cbz'}: + series_index = self.site_customization + if series_index not in {'volume', 'issue'}: + series_index = 'volume' +@@ -336,16 +330,6 @@ class PMLMetadataReader(MetadataReaderPlugin): + from calibre.ebooks.metadata.pml import get_metadata + return get_metadata(stream) + +-class RARMetadataReader(MetadataReaderPlugin): +- +- name = 'Read RAR metadata' +- file_types = set(['rar']) +- description = _('Read metadata from ebooks in RAR archives') +- +- def get_metadata(self, stream, ftype): +- from calibre.ebooks.metadata.rar import get_metadata +- return get_metadata(stream) +- + class RBMetadataReader(MetadataReaderPlugin): + + name = 'Read RB metadata' +diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py +index 2e1cc23..c9a3701 100644 +--- a/src/calibre/customize/ui.py ++++ b/src/calibre/customize/ui.py +@@ -436,7 +436,7 @@ def available_input_formats(): + if not is_disabled(plugin): + for format in plugin.file_types: + formats.add(format) +- formats.add('zip'), formats.add('rar') ++ formats.add('zip') + return formats + + +diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py +index aca5e86..1c2064f 100644 +--- a/src/calibre/devices/kobo/driver.py ++++ b/src/calibre/devices/kobo/driver.py +@@ -77,7 +77,7 @@ class KOBO(USBMS): + book_class = Book + + # Ordered list of supported formats +- FORMATS = ['kepub', 'epub', 'pdf', 'txt', 'cbz', 'cbr'] ++ FORMATS = ['kepub', 'epub', 'pdf', 'txt', 'cbz'] + CAN_SET_METADATA = ['collections'] + + VENDOR_ID = [0x2237] +diff --git a/src/calibre/devices/mtp/filesystem_cache.py b/src/calibre/devices/mtp/filesystem_cache.py +index 3acb026..f3626ab 100644 +--- a/src/calibre/devices/mtp/filesystem_cache.py ++++ b/src/calibre/devices/mtp/filesystem_cache.py +@@ -18,7 +18,7 @@ from calibre.utils.date import local_tz, as_utc + from calibre.utils.icu import sort_key, lower + from calibre.ebooks import BOOK_EXTENSIONS + +-bexts = frozenset(BOOK_EXTENSIONS) - {'mbp', 'tan', 'rar', 'zip', 'xml'} ++bexts = frozenset(BOOK_EXTENSIONS) - {'mbp', 'tan', 'zip', 'xml'} + + class FileOrFolder(object): + +diff --git a/src/calibre/ebooks/__init__.py b/src/calibre/ebooks/__init__.py +index 3d01f84..8818bcb 100644 +--- a/src/calibre/ebooks/__init__.py ++++ b/src/calibre/ebooks/__init__.py +@@ -26,9 +26,9 @@ class DRMError(ValueError): + class ParserError(ValueError): + pass + +-BOOK_EXTENSIONS = ['lrf', 'rar', 'zip', 'rtf', 'lit', 'txt', 'txtz', 'text', 'htm', 'xhtm', ++BOOK_EXTENSIONS = ['lrf', 'zip', 'rtf', 'lit', 'txt', 'txtz', 'text', 'htm', 'xhtm', + 'html', 'htmlz', 'xhtml', 'pdf', 'pdb', 'updb', 'pdr', 'prc', 'mobi', 'azw', 'doc', +- 'epub', 'fb2', 'djv', 'djvu', 'lrx', 'cbr', 'cbz', 'cbc', 'oebzip', ++ 'epub', 'fb2', 'djv', 'djvu', 'lrx', 'cbz', 'cbc', 'oebzip', + 'rb', 'imp', 'odt', 'chm', 'tpz', 'azw1', 'pml', 'pmlz', 'mbp', 'tan', 'snb', + 'xps', 'oxps', 'azw4', 'book', 'zbf', 'pobi', 'docx', 'docm', 'md', + 'textile', 'markdown', 'ibook', 'iba', 'azw3', 'ps'] +diff --git a/src/calibre/ebooks/conversion/plugins/comic_input.py b/src/calibre/ebooks/conversion/plugins/comic_input.py +index e66ca49..3caa2db 100644 +--- a/src/calibre/ebooks/conversion/plugins/comic_input.py ++++ b/src/calibre/ebooks/conversion/plugins/comic_input.py +@@ -17,8 +17,8 @@ class ComicInput(InputFormatPlugin): + + name = 'Comic Input' + author = 'Kovid Goyal' +- description = 'Optimize comic files (.cbz, .cbr, .cbc) for viewing on portable devices' +- file_types = set(['cbz', 'cbr', 'cbc']) ++ description = 'Optimize comic files (.cbz, .cbc) for viewing on portable devices' ++ file_types = set(['cbz', 'cbc']) + is_image_collection = True + core_usage = -1 + +diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py +index cb49801..689c5aa 100644 +--- a/src/calibre/ebooks/conversion/plumber.py ++++ b/src/calibre/ebooks/conversion/plumber.py +@@ -42,7 +42,7 @@ various stages of conversion. The stages are: + + def supported_input_formats(): + fmts = available_input_formats() +- for x in ('zip', 'rar', 'oebzip'): ++ for x in ('zip', 'oebzip'): + fmts.add(x) + return fmts + +@@ -60,7 +60,7 @@ class CompositeProgressReporter(object): + (self.global_max - self.global_min) + self.global_reporter(global_frac, msg) + +-ARCHIVE_FMTS = ('zip', 'rar', 'oebzip') ++ARCHIVE_FMTS = ('zip', 'oebzip') + + class Plumber(object): + ''' diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py -index 7b8ecd2..2910280 100644 +index 7b8ecd2..f5c31ac 100644 --- a/src/calibre/ebooks/metadata/archive.py +++ b/src/calibre/ebooks/metadata/archive.py @@ -27,8 +27,6 @@ def archive_type(stream): @@ -124,9 +324,10 @@ index 7b8ecd2..2910280 100644 description = _('Extract common e-book formats from archives ' - '(zip/rar) files. Also try to autodetect if they are actually ' - 'cbz/cbr files.') +- file_types = set(['zip', 'rar']) + 'zip files. Also try to autodetect if they are actually ' + 'cbz files.') - file_types = set(['zip', 'rar']) ++ file_types = set(['zip']) supported_platforms = ['windows', 'osx', 'linux'] on_import = True @@ -178,6 +379,72 @@ index 7b8ecd2..2910280 100644 if comment: import json +diff --git a/src/calibre/ebooks/oeb/iterator/book.py b/src/calibre/ebooks/oeb/iterator/book.py +index 8868e7c..4662f67 100644 +--- a/src/calibre/ebooks/oeb/iterator/book.py ++++ b/src/calibre/ebooks/oeb/iterator/book.py +@@ -127,7 +127,7 @@ class EbookIterator(BookmarksMixin): + self.spine = [] + Spiny = partial(SpineItem, read_anchor_map=read_anchor_map, + run_char_count=run_char_count, from_epub=self.book_format == 'EPUB') +- is_comic = plumber.input_fmt.lower() in {'cbc', 'cbz', 'cbr', 'cb7'} ++ is_comic = plumber.input_fmt.lower() in {'cbc', 'cbz', 'cb7'} + for i in ordered: + spath = i.path + mt = None +diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py +index e419685..ee83d7b 100644 +--- a/src/calibre/gui2/__init__.py ++++ b/src/calibre/gui2/__init__.py +@@ -488,7 +488,6 @@ class FileIconProvider(QFileIconProvider): + 'png' : 'png', + 'bmp' : 'bmp', + 'cbz' : 'cbz', +- 'cbr' : 'cbr', + 'svg' : 'svg', + 'html' : 'html', + 'htmlz' : 'html', +@@ -500,7 +499,6 @@ class FileIconProvider(QFileIconProvider): + 'lrx' : 'lrx', + 'pdf' : 'pdf', + 'pdr' : 'zero', +- 'rar' : 'rar', + 'zip' : 'zip', + 'txt' : 'txt', + 'text' : 'txt', +diff --git a/src/calibre/gui2/actions/add.py b/src/calibre/gui2/actions/add.py +index 3e3c48b..a605ff5 100644 +--- a/src/calibre/gui2/actions/add.py ++++ b/src/calibre/gui2/actions/add.py +@@ -38,8 +38,8 @@ def get_filters(): + (_('Text books'), ['txt', 'text', 'rtf']), + (_('PDF Books'), ['pdf', 'azw4']), + (_('SNB Books'), ['snb']), +- (_('Comics'), ['cbz', 'cbr', 'cbc']), +- (_('Archives'), ['zip', 'rar']), ++ (_('Comics'), ['cbz', 'cbc']), ++ (_('Archives'), ['zip']), + (_('Wordprocessor files'), ['odt', 'doc', 'docx']), + ] + +@@ -66,7 +66,7 @@ class AddAction(InterfaceAction): + 'sub directories (Multiple books per directory, assumes every ' + 'ebook file is a different book)')).triggered.connect( + self.add_recursive_multiple) +- arm = self.add_archive_menu = self.add_menu.addMenu(_('Add multiple books from archive (ZIP/RAR)')) ++ arm = self.add_archive_menu = self.add_menu.addMenu(_('Add multiple books from archive (ZIP)')) + self.create_menu_action(arm, 'recursive-single-archive', _( + 'One book per directory in the archive')).triggered.connect(partial(self.add_archive, True)) + self.create_menu_action(arm, 'recursive-multiple-archive', _( +@@ -144,7 +144,7 @@ class AddAction(InterfaceAction): + def add_archive(self, single): + paths = choose_files( + self.gui, 'recursive-archive-add', _('Choose archive file'), +- filters=[(_('Archives'), ('zip', 'rar'))], all_files=False, select_only_single_file=True) ++ filters=[(_('Archives'), ('zip'))], all_files=False, select_only_single_file=True) + if paths: + self.do_add_recursive(paths[0], single) + diff --git a/src/calibre/gui2/add.py b/src/calibre/gui2/add.py index d849846..50aa6d9 100644 --- a/src/calibre/gui2/add.py @@ -204,6 +471,32 @@ index d849846..50aa6d9 100644 self.path = tdir = PersistentTemporaryDirectory('_arcv_') else: self.path = root +diff --git a/src/calibre/library/server/opds.py b/src/calibre/library/server/opds.py +index 5e9ca44..f5d230d 100644 +--- a/src/calibre/library/server/opds.py ++++ b/src/calibre/library/server/opds.py +@@ -29,7 +29,7 @@ BASE_HREFS = { + 1 : '/opds', + } + +-STANZA_FORMATS = frozenset(['epub', 'pdb', 'pdf', 'cbr', 'cbz', 'djvu']) ++STANZA_FORMATS = frozenset(['epub', 'pdb', 'pdf', 'cbz', 'djvu']) + + def url_for(name, version, **kwargs): + if not name.endswith('_'): +diff --git a/src/calibre/linux.py b/src/calibre/linux.py +index c746606..d6b2c6c 100644 +--- a/src/calibre/linux.py ++++ b/src/calibre/linux.py +@@ -314,7 +314,7 @@ class ZshCompleter(object): # {{{ + ): + for fmt in fmts: + is_input = group_title == input_group +- if is_input and fmt in {'rar', 'zip', 'oebzip'}: ++ if is_input and fmt in {'zip', 'oebzip'}: + continue + p = (get_parser(input_fmt=fmt) if is_input + else get_parser(output_fmt=fmt)) diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py index fd9a36d..130d08d 100644 --- a/src/calibre/test_build.py @@ -228,3 +521,241 @@ index fd9a36d..130d08d 100644 test_icu() test_woff() test_qt() +diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot +index 1775b71..65cf8c4 100644 +--- a/src/calibre/translations/calibre.pot ++++ b/src/calibre/translations/calibre.pot +@@ -3870,7 +3870,7 @@ msgid "Set book ID" + msgstr "" + + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:42 +-msgid "Extract common e-book formats from archives (zip/rar) files. Also try to autodetect if they are actually cbz/cbr files." ++msgid "Extract common e-book formats from archives (zip) files. Also try to autodetect if they are actually cbz files." + msgstr "" + + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:644 +@@ -10866,7 +10866,7 @@ msgid "You can also customise the plugin locations using <b>Preferences -> Custo + msgstr "" + + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:33 +-msgid "Set defaults for conversion of comics (CBR/CBZ files)" ++msgid "Set defaults for conversion of comics (CBZ files)" + msgstr "" + + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 +diff --git a/src/calibre/utils/search_query_parser.py b/src/calibre/utils/search_query_parser.py +index d395057..4804b28 100644 +--- a/src/calibre/utils/search_query_parser.py ++++ b/src/calibre/utils/search_query_parser.py +@@ -445,16 +445,16 @@ class Tester(SearchQueryParser): + u'Tor Books', + u'lrf'], + 8: [u'Stalky and Co.', u'Rudyard Kipling', u'manybooks.net', u'lrf'], +- 9: [u'A Game of Thrones', u'George R. R. Martin', None, u'lrf,rar'], +- 10: [u'A Clash of Kings', u'George R. R. Martin', None, u'lrf,rar'], +- 11: [u'A Storm of Swords', u'George R. R. Martin', None, u'lrf,rar'], ++ 9: [u'A Game of Thrones', u'George R. R. Martin', None, u'lrf'], ++ 10: [u'A Clash of Kings', u'George R. R. Martin', None, u'lrf'], ++ 11: [u'A Storm of Swords', u'George R. R. Martin', None, u'lrf'], + 12: [u'Biggles - Pioneer Air Fighter', u'W. E. Johns', None, u'lrf,rtf'], + 13: [u'Biggles of the Camel Squadron', + u'W. E. Johns', + u'London:Thames, (1977)', + u'lrf,rtf'], +- 14: [u'A Feast for Crows', u'George R. R. Martin', None, u'lrf,rar'], +- 15: [u'Cryptonomicon', u'Neal Stephenson', None, u'lrf,rar'], ++ 14: [u'A Feast for Crows', u'George R. R. Martin', None, u'lrf'], ++ 15: [u'Cryptonomicon', u'Neal Stephenson', None, u'lrf'], + 16: [u'Quicksilver', u'Neal Stephenson', None, u'lrf,zip'], + 17: [u'The Comedies of William Shakespeare', + u'William Shakespeare', +@@ -469,15 +469,15 @@ class Tester(SearchQueryParser): + None, + u'lrf'], + 20: [u'An Ideal Husband', u'Oscar Wilde', u'manybooks.net', u'lrf'], +- 21: [u'Flight of the Nighthawks', u'Raymond E. Feist', None, u'lrf,rar'], +- 22: [u'Into a Dark Realm', u'Raymond E. Feist', None, u'lrf,rar'], +- 23: [u'The Sundering', u'Walter Jon Williams', None, u'lrf,rar'], +- 24: [u'The Praxis', u'Walter Jon Williams', None, u'lrf,rar'], +- 25: [u'Conventions of War', u'Walter Jon Williams', None, u'lrf,rar'], +- 26: [u'Banewreaker', u'Jacqueline Carey', None, u'lrf,rar'], +- 27: [u'Godslayer', u'Jacqueline Carey', None, u'lrf,rar'], +- 28: [u"Kushiel's Scion", u'Jacqueline Carey', None, u'lrf,rar'], +- 29: [u'Underworld', u'Don DeLillo', None, u'lrf,rar'], ++ 21: [u'Flight of the Nighthawks', u'Raymond E. Feist', None, u'lrf'], ++ 22: [u'Into a Dark Realm', u'Raymond E. Feist', None, u'lrf'], ++ 23: [u'The Sundering', u'Walter Jon Williams', None, u'lrf'], ++ 24: [u'The Praxis', u'Walter Jon Williams', None, u'lrf'], ++ 25: [u'Conventions of War', u'Walter Jon Williams', None, u'lrf'], ++ 26: [u'Banewreaker', u'Jacqueline Carey', None, u'lrf'], ++ 27: [u'Godslayer', u'Jacqueline Carey', None, u'lrf'], ++ 28: [u"Kushiel's Scion", u'Jacqueline Carey', None, u'lrf'], ++ 29: [u'Underworld', u'Don DeLillo', None, u'lrf'], + 30: [u'Genghis Khan and The Making of the Modern World', + u'Jack Weatherford Orc', + u'Three Rivers Press', +@@ -488,9 +488,9 @@ class Tester(SearchQueryParser): + u'lrf,zip'], + 32: [u'The Killer Angels', u'Michael Shaara', None, u'html,lrf'], + 33: [u'Band Of Brothers', u'Stephen E Ambrose', None, u'lrf,txt'], +- 34: [u'The Gates of Rome', u'Conn Iggulden', None, u'lrf,rar'], ++ 34: [u'The Gates of Rome', u'Conn Iggulden', None, u'lrf'], + 35: [u'The Death of Kings', u'Conn Iggulden', u'Bantam Dell', u'lit,lrf'], +- 36: [u'The Field of Swords', u'Conn Iggulden', None, u'lrf,rar'], ++ 36: [u'The Field of Swords', u'Conn Iggulden', None, u'lrf'], + 37: [u'Masterman Ready', u'Marryat, Captain Frederick', None, u'lrf'], + 38: [u'With the Lightnings', + u'David Drake', +@@ -503,16 +503,16 @@ class Tester(SearchQueryParser): + 40: [u'The Far Side of The Stars', + u'David Drake', + u'Baen Publishing Enterprises', +- u'lrf,rar'], ++ u'lrf'], + 41: [u'The Way to Glory', + u'David Drake', + u'Baen Publishing Enterprises', +- u'lrf,rar'], +- 42: [u'Some Golden Harbor', u'David Drake', u'Baen Books', u'lrf,rar'], ++ u'lrf'], ++ 42: [u'Some Golden Harbor', u'David Drake', u'Baen Books', u'lrf'], + 43: [u'Harry Potter And The Half-Blood Prince', + u'J. K. Rowling', + None, +- u'lrf,rar'], ++ u'lrf'], + 44: [u'Harry Potter and the Order of the Phoenix', + u'J. K. Rowling', + None, +@@ -521,12 +521,12 @@ class Tester(SearchQueryParser): + 46: [u'The Stars at War II', + u'Steve White', + u'Baen Publishing Enterprises', +- u'lrf,rar'], +- 47: [u'Exodus', u'Steve White,Shirley Meier', u'Baen Books', u'lrf,rar'], ++ u'lrf'], ++ 47: [u'Exodus', u'Steve White,Shirley Meier', u'Baen Books', u'lrf'], + 48: [u'Harry Potter and the Goblet of Fire', + u'J. K. Rowling', + None, +- u'lrf,rar'], ++ u'lrf'], + 49: [u'Harry Potter and the Prisoner of Azkaban', + u'J. K. Rowling', + None, +@@ -539,20 +539,20 @@ class Tester(SearchQueryParser): + u'J.K. Rowling', + None, + u'lit,lrf,pdf'], +- 52: [u"His Majesty's Dragon", u'Naomi Novik', None, u'lrf,rar'], ++ 52: [u"His Majesty's Dragon", u'Naomi Novik', None, u'lrf'], + 53: [u'Throne of Jade', u'Naomi Novik', u'Del Rey', u'lit,lrf'], +- 54: [u'Black Powder War', u'Naomi Novik', u'Del Rey', u'lrf,rar'], ++ 54: [u'Black Powder War', u'Naomi Novik', u'Del Rey', u'lrf'], + 55: [u'War and Peace', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], + 56: [u'Anna Karenina', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], + 57: [u'A Shorter History of Rome', + u'Eugene Lawrence,Sir William Smith', + u'gutenberg.org', + u'lrf,zip'], +- 58: [u'The Name of the Rose', u'Umberto Eco', None, u'lrf,rar'], ++ 58: [u'The Name of the Rose', u'Umberto Eco', None, u'lrf'], + 71: [u"Wind Rider's Oath", u'David Weber', u'Baen', u'lrf'], + 74: [u'Rally Cry', u'William R Forstchen', None, u'htm,lrf'], +- 86: [u'Empire of Ivory', u'Naomi Novik', None, u'lrf,rar'], +- 87: [u"Renegade's Magic", u'Robin Hobb', None, u'lrf,rar'], ++ 86: [u'Empire of Ivory', u'Naomi Novik', None, u'lrf'], ++ 87: [u"Renegade's Magic", u'Robin Hobb', None, u'lrf'], + 89: [u'Master and commander', + u"Patrick O'Brian", + u'Fontana,\n1971', +@@ -560,7 +560,7 @@ class Tester(SearchQueryParser): + 91: [u'A Companion to Wolves', + u'Sarah Monette,Elizabeth Beär', + None, +- u'lrf,rar'], ++ u'lrf'], + 92: [u'The Lions of al-Rassan', u'Guy Gavriel Kay', u'Eos', u'lit,lrf'], + 93: [u'Gardens of the Moon', u'Steven Erikson', u'Tor Fantasy', u'lit,lrf'], + 95: [u'The Master and Margarita', +@@ -584,7 +584,7 @@ class Tester(SearchQueryParser): + 144: [u'Atonement', + u'Ian McEwan', + u'New York : Nan A. Talese/Doubleday, 2002.', +- u'lrf,rar'], ++ u'lrf'], + 146: [u'1632', u'Eric Flint', u'Baen Books', u'lit,lrf'], + 147: [u'1633', u'David Weber,Eric Flint,Dru Blair', u'Baen', u'lit,lrf'], + 148: [u'1634: The Baltic War', +@@ -637,7 +637,7 @@ class Tester(SearchQueryParser): + 253: [u"Hunter's Run", + u'George R. R. Martin,Gardner Dozois,Daniel Abraham', + u'Eos', +- u'lrf,rar'], ++ u'lrf'], + 257: [u'Knife of Dreams', u'Robert Jordan', None, u'lit,lrf'], + 258: [u'Saturday', + u'Ian McEwan', +@@ -657,7 +657,7 @@ class Tester(SearchQueryParser): + u'New York : Random House, 2005.', + u'lit,lrf'], + 269: [u'Reap the Whirlwind', u'David Mack', u'Star Trek', u'lit,lrf'], +- 272: [u'Mistborn', u'Brandon Sanderson', u'Tor Fantasy', u'lrf,rar'], ++ 272: [u'Mistborn', u'Brandon Sanderson', u'Tor Fantasy', u'lrf'], + 273: [u'The Thousandfold Thought', + u'R. Scott Bakker', + u'Overlook TP', +@@ -665,17 +665,17 @@ class Tester(SearchQueryParser): + 276: [u'Elantris', + u'Brandon Sanderson', + u'New York : Tor, 2005.', +- u'lrf,rar'], ++ u'lrf'], + 291: [u'Sundiver', + u'David Brin', + u'New York : Bantam Books, 1995.', + u'lit,lrf'], +- 299: [u'Imperium', u'Robert Harris', u'Arrow', u'lrf,rar'], ++ 299: [u'Imperium', u'Robert Harris', u'Arrow', u'lrf'], + 300: [u'Startide Rising', u'David Brin', u'Bantam', u'htm,lrf'], + 301: [u'The Uplift War', u'David Brin', u'Spectra', u'lit,lrf'], +- 304: [u'Brightness Reef', u'David Brin', u'Orbit', u'lrf,rar'], ++ 304: [u'Brightness Reef', u'David Brin', u'Orbit', u'lrf'], + 305: [u"Infinity's Shore", u'David Brin', u'Spectra', u'txt'], +- 306: [u"Heaven's Reach", u'David Brin', u'Spectra', u'lrf,rar'], ++ 306: [u"Heaven's Reach", u'David Brin', u'Spectra', u'lrf'], + 325: [u"Foundation's Triumph", u'David Brin', u'Easton Press', u'lit,lrf'], + 327: [u'I am Charlotte Simmons', u'Tom Wolfe', u'Vintage', u'htm,lrf'], + 335: [u'The Currents of Space', u'Isaac Asimov', None, u'lit,lrf'], +@@ -705,15 +705,15 @@ class Tester(SearchQueryParser): + u'Aspect', + u'lit,lrf'], + 356: [u'The Naked God', u'Peter F. Hamilton', u'Aspect', u'lit,lrf'], +- 421: [u'A Shadow in Summer', u'Daniel Abraham', u'Tor Fantasy', u'lrf,rar'], ++ 421: [u'A Shadow in Summer', u'Daniel Abraham', u'Tor Fantasy', u'lrf'], + 427: [u'Lonesome Dove', u'Larry M\\cMurtry', None, u'lit,lrf'], + 440: [u'Ghost', u'John Ringo', u'Baen', u'lit,lrf'], + 441: [u'Kildar', u'John Ringo', u'Baen', u'lit,lrf'], +- 443: [u'Hidden Empire ', u'Kevin J. Anderson', u'Aspect', u'lrf,rar'], ++ 443: [u'Hidden Empire ', u'Kevin J. Anderson', u'Aspect', u'lrf'], + 444: [u'The Gun Seller', + u'Hugh Laurie', + u'Washington Square Press', +- u'lrf,rar'] ++ u'lrf'] + } + + tests = { +diff --git a/src/calibre/web/feeds/feedparser.py b/src/calibre/web/feeds/feedparser.py +index 16085cf..420efaa 100755 +--- a/src/calibre/web/feeds/feedparser.py ++++ b/src/calibre/web/feeds/feedparser.py +@@ -2081,7 +2081,7 @@ class _MicroformatsParser: + EMAIL = 5 + + known_xfn_relationships = set(['contact', 'acquaintance', 'friend', 'met', 'co-worker', 'coworker', 'colleague', 'co-resident', 'coresident', 'neighbor', 'child', 'parent', 'sibling', 'brother', 'sister', 'spouse', 'wife', 'husband', 'kin', 'relative', 'muse', 'crush', 'date', 'sweetheart', 'me']) +- known_binary_extensions = set(['zip','rar','exe','gz','tar','tgz','tbz2','bz2','z','7z','dmg','img','sit','sitx','hqx','deb','rpm','bz2','jar','rar','iso','bin','msi','mp2','mp3','ogg','ogm','mp4','m4v','m4a','avi','wma','wmv']) ++ known_binary_extensions = set(['zip','exe','gz','tar','tgz','tbz2','bz2','z','7z','dmg','img','sit','sitx','hqx','deb','rpm','bz2','jar','iso','bin','msi','mp2','mp3','ogg','ogm','mp4','m4v','m4a','avi','wma','wmv']) + + def __init__(self, data, baseuri, encoding): + self.document = BeautifulSoup.BeautifulSoup(data) |