diff --git a/resources/images.qrc b/resources/images.qrc index 07c9892..b323df9 100644 --- a/resources/images.qrc +++ b/resources/images.qrc @@ -194,8 +194,6 @@ images/mimetypes/svg.png images/mimetypes/odt.png images/mimetypes/epub.png -images/mimetypes/cbr.png -images/mimetypes/rar.png images/mimetypes/tpz.png images/mimetypes/djvu.png images/mimetypes/computer.png @@ -215,4 +213,4 @@ images/mimetypes/html.png images/mimetypes/lrx.png - \ No newline at end of file + diff --git a/resources/mime.types b/resources/mime.types index b8acaaa..9ea4742 100644 --- a/resources/mime.types +++ b/resources/mime.types @@ -138,7 +138,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-cbc cbc application/x-koboreader-ebook kobo diff --git a/session.vim b/session.vim index d5ecb06..b3e40d0 100644 --- a/session.vim +++ b/session.vim @@ -11,7 +11,6 @@ let g:syntastic_cpp_include_dirs = [ \'/usr/include/freetype2', \'/usr/include/fontconfig', \'src/qtcurve/common', 'src/qtcurve', - \'src/unrar', \'src/qt-harfbuzz/src', \'/usr/include/ImageMagick', \] diff --git a/setup/extensions.json b/setup/extensions.json index 6f3e7d9..3ba2c85 100644 --- a/setup/extensions.json +++ b/setup/extensions.json @@ -211,14 +211,5 @@ "sources": "calibre/devices/mtp/unix/devices.c calibre/devices/mtp/unix/libmtp.c", "headers": "calibre/devices/mtp/unix/devices.h calibre/devices/mtp/unix/upstream/music-players.h calibre/devices/mtp/unix/upstream/device-flags.h", "libraries": "mtp" - }, - { - "name": "unrar", - "sources": "unrar/rar.cpp unrar/strlist.cpp unrar/strfn.cpp unrar/pathfn.cpp unrar/savepos.cpp unrar/smallfn.cpp unrar/global.cpp unrar/file.cpp unrar/filefn.cpp unrar/filcreat.cpp unrar/archive.cpp unrar/arcread.cpp unrar/unicode.cpp unrar/system.cpp unrar/isnt.cpp unrar/crypt.cpp unrar/crc.cpp unrar/rawread.cpp unrar/encname.cpp unrar/resource.cpp unrar/match.cpp unrar/timefn.cpp unrar/rdwrfn.cpp unrar/consio.cpp unrar/options.cpp unrar/ulinks.cpp unrar/errhnd.cpp unrar/rarvm.cpp unrar/secpassword.cpp unrar/rijndael.cpp unrar/getbits.cpp unrar/sha1.cpp unrar/extinfo.cpp unrar/extract.cpp unrar/volume.cpp unrar/list.cpp unrar/find.cpp unrar/unpack.cpp unrar/cmddata.cpp unrar/filestr.cpp unrar/scantree.cpp calibre/utils/unrar.cpp", - "inc_dirs": "unrar", - "defines": "SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE", - "windows_defines": "SILENT RARDLL UNRAR", - "optimize_level": 2, - "windows_libraries": "User32 Advapi32 kernel32 Shell32" } ] diff --git a/setup/installer/windows/freeze.py b/setup/installer/windows/freeze.py index 539ec35..f0537d9 100644 --- a/setup/installer/windows/freeze.py +++ b/setup/installer/windows/freeze.py @@ -674,7 +674,7 @@ class Win32Freeze(Command, WixMixIn): # Because of https://github.com/fancycode/MemoryModule/issues/4 # any extensions that use C++ exceptions must be loaded # from files - 'unrar.pyd', 'wpd.pyd', 'podofo.pyd', 'imageops.pyd', + 'wpd.pyd', 'podofo.pyd', 'imageops.pyd', 'progress_indicator.pyd', 'hunspell.pyd', # dupypy crashes when loaded from the zip file 'dukpy.pyd', diff --git a/setup/resources.py b/setup/resources.py index 6a0d122..52fc25f 100644 --- a/setup/resources.py +++ b/setup/resources.py @@ -363,7 +363,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 c37c0fc..54d4d96 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -291,10 +291,7 @@ def extract(path, dir): # First use the file header to identify its type with open(path, 'rb') as f: id_ = f.read(3) - if id_ == b'Rar': - from calibre.utils.unrar import extract as rarextract - extractor = rarextract - elif id_.startswith(b'PK'): + if id_.startswith(b'PK'): from calibre.libunzip import extract as zipextract extractor = zipextract if extractor is None: @@ -303,9 +300,6 @@ def extract(path, dir): if ext in ['zip', 'cbz', 'epub', 'oebzip']: from calibre.libunzip import extract as zipextract extractor = zipextract - elif ext in ['cbr', 'rar']: - from calibre.utils.unrar import extract as rarextract - extractor = rarextract if extractor is None: raise Exception('Unknown archive type') extractor(path, dir) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 5aa6c9e..57aae3e 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -147,7 +147,6 @@ class Plugins(collections.Mapping): 'zlib2', 'html', 'freetype', - 'unrar', 'imageops', 'qt_hack', '_regex', diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 102bc81..25a877c 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -131,7 +131,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): @@ -142,19 +142,14 @@ 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_cover_image - else: from calibre.libunzip import extract_cover_image from calibre.ebooks.metadata import MetaInformation ret = extract_cover_image(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' @@ -353,17 +348,6 @@ class PMLMetadataReader(MetadataReaderPlugin): 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 94f972f..019ab03 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -518,7 +518,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 2ba1a0d..7df2e36 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -78,7 +78,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 ffc5280..79be51e 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 c21fec5..ec04092 100644 --- a/src/calibre/ebooks/__init__.py +++ b/src/calibre/ebooks/__init__.py @@ -29,9 +29,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', 'ibooks', 'iba', 'azw3', 'ps', 'kepub'] diff --git a/src/calibre/ebooks/conversion/plugins/comic_input.py b/src/calibre/ebooks/conversion/plugins/comic_input.py index 8825014..acc1f1b 100644 --- a/src/calibre/ebooks/conversion/plugins/comic_input.py +++ b/src/calibre/ebooks/conversion/plugins/comic_input.py @@ -18,8 +18,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 1a3e6e5..8ee9479 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -43,7 +43,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 @@ -63,7 +63,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 938ab24..0494bc5 100644 --- a/src/calibre/ebooks/metadata/archive.py +++ b/src/calibre/ebooks/metadata/archive.py @@ -29,8 +29,6 @@ def archive_type(stream): ans = None if id_ == stringFileHeader: ans = 'zip' - elif id_.startswith('Rar'): - ans = 'rar' try: stream.seek(pos) except: @@ -42,25 +40,16 @@ class ArchiveExtract(FileTypePlugin): name = 'Archive Extract' author = 'Kovid Goyal' 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']) supported_platforms = ['windows', 'osx', 'linux'] on_import = True def run(self, archive): from calibre.utils.zipfile import ZipFile - is_rar = archive.lower().endswith('.rar') - if is_rar: - from calibre.utils.unrar import extract_member, names - else: - zf = ZipFile(archive, 'r') - - if is_rar: - with open(archive, 'rb') as rf: - fnames = list(names(rf)) - else: - fnames = zf.namelist() + zf = ZipFile(archive, 'r') + fnames = zf.namelist() def fname_ok(fname): bn = os.path.basename(fname).lower() @@ -76,7 +65,7 @@ class ArchiveExtract(FileTypePlugin): fnames = list(filter(fname_ok, fnames)) if is_comic(fnames): - ext = '.cbr' if is_rar else '.cbz' + ext = '.cbz' of = self.temporary_file('_archive_extract'+ext) with open(archive, 'rb') as f: of.write(f.read()) @@ -93,12 +82,7 @@ class ArchiveExtract(FileTypePlugin): of = self.temporary_file('_archive_extract.'+ext) with closing(of): - if is_rar: - with open(archive, 'rb') as f: - data = extract_member(f, match=None, name=fname)[1] - of.write(data) - else: - of.write(zf.read(fname)) + of.write(zf.read(fname)) return of.name @@ -161,10 +145,6 @@ def get_comic_metadata(stream, stream_type, series_index='volume'): from calibre.utils.zipfile import ZipFile zf = ZipFile(stream) comment = zf.comment - elif stream_type == 'cbr': - from calibre.utils.unrar import RARFile - f = RARFile(stream, get_comment=True) - comment = f.comment if comment: import json diff --git a/src/calibre/ebooks/oeb/iterator/book.py b/src/calibre/ebooks/oeb/iterator/book.py index f419c00..f876fa2 100644 --- a/src/calibre/ebooks/oeb/iterator/book.py +++ b/src/calibre/ebooks/oeb/iterator/book.py @@ -152,7 +152,7 @@ class EbookIterator(BookmarksMixin): self.spine = [] Spiny = partial(SpineItem, read_anchor_map=read_anchor_map, read_links=read_links, run_char_count=run_char_count, from_epub=self.book_format == 'EPUB') - is_comic = input_fmt.lower() in {'cbc', 'cbz', 'cbr', 'cb7'} + is_comic = input_fmt.lower() in {'cbc', 'cbz', 'cb7'} for i in ordered: spath = i.path mt = None diff --git a/src/calibre/gui2/actions/add.py b/src/calibre/gui2/actions/add.py index c0980b5..db56ca5 100644 --- a/src/calibre/gui2/actions/add.py +++ b/src/calibre/gui2/actions/add.py @@ -39,8 +39,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']), ] @@ -67,7 +67,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', _( @@ -200,7 +200,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=False) + filters=[(_('Archives'), ('zip'))], all_files=False, select_only_single_file=False) if paths: self.do_add_recursive(paths, single, list_of_archives=True) diff --git a/src/calibre/gui2/add.py b/src/calibre/gui2/add.py index 5adb286..b60f2a9 100644 --- a/src/calibre/gui2/add.py +++ b/src/calibre/gui2/add.py @@ -147,9 +147,6 @@ class Adder(QObject): prints('Corrupt ZIP file, trying to use local headers') from calibre.utils.localunzip import extractall extractall(source, tdir) - elif source.lower().endswith('.rar'): - from calibre.utils.unrar import extract - extract(source, tdir) return tdir try: diff --git a/src/calibre/library/server/opds.py b/src/calibre/library/server/opds.py index 34157a0..718af59 100644 --- a/src/calibre/library/server/opds.py +++ b/src/calibre/library/server/opds.py @@ -28,7 +28,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): diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 31a1155..0cb6385 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -315,7 +315,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 85829e5..ecacb67 100644 --- a/src/calibre/test_build.py +++ b/src/calibre/test_build.py @@ -169,10 +169,6 @@ class BuildTest(unittest.TestCase): from calibre.gui2.win_file_dialogs import test test() - def test_unrar(self): - from calibre.utils.unrar import test_basic - test_basic() - @unittest.skipUnless(iswindows, 'WPD is windows only') def test_wpd(self): wpd = plugins['wpd'][0] diff --git a/src/calibre/utils/search_query_parser.py b/src/calibre/utils/search_query_parser.py index fe04af0..130fb81 100644 --- a/src/calibre/utils/search_query_parser.py +++ b/src/calibre/utils/search_query_parser.py @@ -455,16 +455,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', @@ -479,15 +479,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', @@ -498,9 +498,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', @@ -513,16 +513,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, @@ -531,12 +531,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, @@ -549,20 +549,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', @@ -570,7 +570,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', @@ -594,7 +594,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', @@ -647,7 +647,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', @@ -667,7 +667,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', @@ -675,17 +675,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'], @@ -715,15 +715,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) diff --git a/translations/calibre/main.pot b/translations/calibre/main.pot index 7d1f7c9..d02335b 100644 --- a/translations/calibre/main.pot +++ b/translations/calibre/main.pot @@ -4415,7 +4415,7 @@ msgid "Set book ID" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:44 -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:655 @@ -12801,7 +12801,7 @@ msgid "You can also customise the plugin locations using Preferences -> Custo msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:36 -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:51