diff -r -u calibre-3.33.1.orig/manual/conversion.rst calibre-3.33.1/manual/conversion.rst --- calibre-3.33.1.orig/manual/conversion.rst 2018-11-02 18:00:30.919968752 +0000 +++ calibre-3.33.1/manual/conversion.rst 2018-11-02 17:55:09.626637724 +0000 @@ -747,7 +747,7 @@ Comic book collections ~~~~~~~~~~~~~~~~~~~~~~~~~ -A comic book collection is a .cbc file. A .cbc file is a ZIP file that contains other CBZ/CBR files. In addition the +A comic book collection is a .cbc file. A .cbc file is a ZIP file that contains other CBZ files. In addition the .cbc file must contain a simple text file called comics.txt, encoded in UTF-8. The comics.txt file must contain a list of the comics files inside the .cbc file, in the form filename:title, as shown below:: diff -r -u calibre-3.33.1.orig/manual/faq.rst calibre-3.33.1/manual/faq.rst --- calibre-3.33.1.orig/manual/faq.rst 2018-11-02 18:00:30.919968752 +0000 +++ calibre-3.33.1/manual/faq.rst 2018-11-02 17:55:09.946637723 +0000 @@ -18,7 +18,7 @@ calibre supports the conversion of many input formats to many output formats. It can convert every input format in the following list, to every output format. -*Input Formats:* AZW, AZW3, AZW4, CBZ, CBR, CBC, CHM, DJVU, DOCX, EPUB, FB2, FBZ, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ +*Input Formats:* AZW, AZW3, AZW4, CBZ, CBC, CHM, DJVU, DOCX, EPUB, FB2, FBZ, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ *Output Formats:* AZW3, EPUB, DOCX, FB2, HTMLZ, OEB, LIT, LRF, MOBI, PDB, PMLZ, RB, PDF, RTF, SNB, TCR, TXT, TXTZ, ZIP diff -r -u calibre-3.33.1.orig/manual/gui.rst calibre-3.33.1/manual/gui.rst --- calibre-3.33.1.orig/manual/gui.rst 2018-11-02 18:00:30.919968752 +0000 +++ calibre-3.33.1/manual/gui.rst 2018-11-02 17:55:10.363304387 +0000 @@ -51,7 +51,7 @@ 3. **Add books from directories, including sub-directories (Multiple books per directory, assumes every e-book file is a different book)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any e-books found are added to the library. calibre assumes that each directory contains many books. All e-book files with the same name in a directory are assumed to be the same book in different formats. E-books with different names are added as different books. - 4. **Add multiple books from archive (ZIP/RAR)**: Allows you to add multiple e-books that are stored inside the selected ZIP or RAR files. It is a convenient shortcut that avoids having to first unzip the archive and then add the books via one of the above two options. + 4. **Add multiple books from archive (ZIP)**: Allows you to add multiple e-books that are stored inside the selected ZIP files. It is a convenient shortcut that avoids having to first unzip the archive and then add the books via one of the above two options. 5. **Add empty book (Book Entry with no formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection. diff -r -u calibre-3.33.1.orig/resources/mime.types calibre-3.33.1/resources/mime.types --- calibre-3.33.1.orig/resources/mime.types 2018-11-02 18:00:29.396635432 +0000 +++ calibre-3.33.1/resources/mime.types 2018-11-02 17:55:10.713304381 +0000 @@ -138,7 +138,6 @@ 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-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-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 -r -u calibre-3.33.1.orig/setup/resources.py calibre-3.33.1/setup/resources.py --- calibre-3.33.1.orig/setup/resources.py 2018-11-02 18:00:30.683302087 +0000 +++ calibre-3.33.1/setup/resources.py 2018-11-02 17:55:11.076637713 +0000 @@ -348,7 +348,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/customize/builtins.py calibre-3.33.1/src/calibre/customize/builtins.py --- calibre-3.33.1.orig/src/calibre/customize/builtins.py 2018-11-02 18:00:30.683302087 +0000 +++ calibre-3.33.1/src/calibre/customize/builtins.py 2018-11-02 17:55:08.869971064 +0000 @@ -132,7 +132,7 @@ class ComicMetadataReader(MetadataReaderPlugin): name = 'Read comic metadata' - file_types = {'cbr', 'cbz'} + file_types = {'cbz'} description = _('Extract cover from comic files') def customization_help(self, gui=False): @@ -143,19 +143,14 @@ 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.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' @@ -354,17 +349,6 @@ return get_metadata(stream) -class RARMetadataReader(MetadataReaderPlugin): - - name = 'Read RAR metadata' - file_types = {'rar'} - description = _('Read metadata from e-books 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 -r -u calibre-3.33.1.orig/src/calibre/customize/ui.py calibre-3.33.1/src/calibre/customize/ui.py --- calibre-3.33.1.orig/src/calibre/customize/ui.py 2018-11-02 18:00:30.673302088 +0000 +++ calibre-3.33.1/src/calibre/customize/ui.py 2018-11-02 17:55:08.489971068 +0000 @@ -538,7 +538,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/devices/kobo/driver.py calibre-3.33.1/src/calibre/devices/kobo/driver.py --- calibre-3.33.1.orig/src/calibre/devices/kobo/driver.py 2018-11-02 18:00:30.656635421 +0000 +++ calibre-3.33.1/src/calibre/devices/kobo/driver.py 2018-11-02 17:55:11.443304372 +0000 @@ -86,7 +86,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/devices/misc.py calibre-3.33.1/src/calibre/devices/misc.py --- calibre-3.33.1.orig/src/calibre/devices/misc.py 2018-11-02 18:00:30.656635421 +0000 +++ calibre-3.33.1/src/calibre/devices/misc.py 2018-11-02 17:55:11.786637709 +0000 @@ -448,7 +448,7 @@ EBOOK_DIR_MAIN = 'Documents' SCAN_FROM_ROOT = True - VENDOR_NAME = ['ROCKCHIP', 'CBR'] + VENDOR_NAME = ['ROCKCHIP'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['RK28_SDK_DEMO', 'EINK_EBOOK_READE'] SUPPORTS_SUB_DIRS = True diff -r -u calibre-3.33.1.orig/src/calibre/devices/mtp/filesystem_cache.py calibre-3.33.1/src/calibre/devices/mtp/filesystem_cache.py --- calibre-3.33.1.orig/src/calibre/devices/mtp/filesystem_cache.py 2018-11-02 18:00:30.653302088 +0000 +++ calibre-3.33.1/src/calibre/devices/mtp/filesystem_cache.py 2018-11-02 17:55:12.123304377 +0000 @@ -18,7 +18,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/ebooks/comic/__init__.py calibre-3.33.1/src/calibre/ebooks/comic/__init__.py --- calibre-3.33.1.orig/src/calibre/ebooks/comic/__init__.py 2018-11-02 18:00:30.639968755 +0000 +++ calibre-3.33.1/src/calibre/ebooks/comic/__init__.py 2018-11-02 17:55:12.803304368 +0000 @@ -4,7 +4,7 @@ __docformat__ = 'restructuredtext en' ''' -Convert CBR/CBZ files to LRF. +Convert CBZ files to LRF. ''' import sys diff -r -u calibre-3.33.1.orig/src/calibre/ebooks/conversion/plugins/comic_input.py calibre-3.33.1/src/calibre/ebooks/conversion/plugins/comic_input.py --- calibre-3.33.1.orig/src/calibre/ebooks/conversion/plugins/comic_input.py 2018-11-02 18:00:30.639968755 +0000 +++ calibre-3.33.1/src/calibre/ebooks/conversion/plugins/comic_input.py 2018-11-02 17:55:08.153304401 +0000 @@ -18,8 +18,8 @@ name = 'Comic Input' author = 'Kovid Goyal' - description = 'Optimize comic files (.cbz, .cbr, .cbc) for viewing on portable devices' - file_types = {'cbz', 'cbr', 'cbc'} + description = 'Optimize comic files (.cbz, .cbc) for viewing on portable devices' + file_types = {'cbz', 'cbc'} is_image_collection = True commit_name = 'comic_input' core_usage = -1 diff -r -u calibre-3.33.1.orig/src/calibre/ebooks/conversion/plumber.py calibre-3.33.1/src/calibre/ebooks/conversion/plumber.py --- calibre-3.33.1.orig/src/calibre/ebooks/conversion/plumber.py 2018-11-02 18:00:30.636635421 +0000 +++ calibre-3.33.1/src/calibre/ebooks/conversion/plumber.py 2018-11-02 17:55:13.106637701 +0000 @@ -43,7 +43,7 @@ def supported_input_formats(): fmts = available_input_formats() - for x in ('zip', 'rar', 'oebzip'): + for x in ('zip', 'oebzip'): fmts.add(x) return fmts @@ -64,7 +64,7 @@ self.global_reporter(global_frac, msg) -ARCHIVE_FMTS = ('zip', 'rar', 'oebzip') +ARCHIVE_FMTS = ('zip', 'oebzip') class Plumber(object): diff -r -u calibre-3.33.1.orig/src/calibre/ebooks/__init__.py calibre-3.33.1/src/calibre/ebooks/__init__.py --- calibre-3.33.1.orig/src/calibre/ebooks/__init__.py 2018-11-02 18:00:30.639968755 +0000 +++ calibre-3.33.1/src/calibre/ebooks/__init__.py 2018-11-02 17:55:12.459971039 +0000 @@ -30,9 +30,9 @@ 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', 'fbz', 'djv', 'djvu', 'lrx', 'cbr', 'cbz', 'cbc', 'oebzip', + 'epub', 'fb2', 'fbz', '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', 'kfx'] diff -r -u calibre-3.33.1.orig/src/calibre/ebooks/metadata/archive.py calibre-3.33.1/src/calibre/ebooks/metadata/archive.py --- calibre-3.33.1.orig/src/calibre/ebooks/metadata/archive.py 2018-11-02 18:00:30.619968755 +0000 +++ calibre-3.33.1/src/calibre/ebooks/metadata/archive.py 2018-11-02 17:55:07.596637739 +0000 @@ -29,8 +29,6 @@ ans = None if id_ == stringFileHeader: ans = 'zip' - elif id_.startswith('Rar'): - ans = 'rar' try: stream.seek(pos) except: @@ -42,24 +40,16 @@ name = 'Archive Extract' author = 'Kovid Goyal' description = _('Extract common e-book formats from archive files ' - '(ZIP/RAR). Also try to autodetect if they are actually ' - 'CBZ/CBR files.') - file_types = {'zip', 'rar'} + '(ZIP). 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: - fnames = list(names(archive)) - else: - fnames = zf.namelist() + zf = ZipFile(archive, 'r') + fnames = zf.namelist() def fname_ok(fname): bn = os.path.basename(fname).lower() @@ -75,7 +65,7 @@ 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()) @@ -92,11 +82,7 @@ of = self.temporary_file('_archive_extract.'+ext) with closing(of): - if is_rar: - data = extract_member(archive, match=None, name=fname)[1] - of.write(data) - else: - of.write(zf.read(fname)) + of.write(zf.read(fname)) return of.name @@ -159,9 +145,6 @@ from calibre.utils.zipfile import ZipFile zf = ZipFile(stream) comment = zf.comment - elif stream_type == 'cbr': - from calibre.utils.unrar import comment as get_comment - comment = get_comment(stream) if comment: import json diff -r -u calibre-3.33.1.orig/src/calibre/ebooks/oeb/iterator/book.py calibre-3.33.1/src/calibre/ebooks/oeb/iterator/book.py --- calibre-3.33.1.orig/src/calibre/ebooks/oeb/iterator/book.py 2018-11-02 18:00:30.593302088 +0000 +++ calibre-3.33.1/src/calibre/ebooks/oeb/iterator/book.py 2018-11-02 17:55:13.416637692 +0000 @@ -157,7 +157,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/ebooks/pdf/from_comic.py calibre-3.33.1/src/calibre/ebooks/pdf/from_comic.py --- calibre-3.33.1.orig/src/calibre/ebooks/pdf/from_comic.py 2018-11-02 18:00:30.576635422 +0000 +++ calibre-3.33.1/src/calibre/ebooks/pdf/from_comic.py 2018-11-02 17:55:13.706637692 +0000 @@ -3,7 +3,7 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' -'Convert a comic in CBR/CBZ format to pdf' +'Convert a comic in CBZ format to pdf' import sys from functools import partial diff -r -u calibre-3.33.1.orig/src/calibre/gui2/actions/add.py calibre-3.33.1/src/calibre/gui2/actions/add.py --- calibre-3.33.1.orig/src/calibre/gui2/actions/add.py 2018-11-02 18:00:30.496635423 +0000 +++ calibre-3.33.1/src/calibre/gui2/actions/add.py 2018-11-02 17:55:07.003304405 +0000 @@ -36,8 +36,8 @@ (_('HTML books'), ['htm', 'html', 'xhtm', 'xhtml']), (_('LIT books'), ['lit']), (_('Text books'), ['txt', 'text', 'rtf', 'md', 'markdown', 'textile', 'txtz']), - (_('Comics'), ['cbz', 'cbr', 'cbc']), - (_('Archives'), ['zip', 'rar']), + (_('Comics'), ['cbz', 'cbc']), + (_('Archives'), ['zip']), (_('Wordprocessor files'), ['odt', 'doc', 'docx']), ] @@ -64,10 +64,10 @@ 'sub-directories (Multiple books per directory, assumes every ' 'e-book 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)')) connect_lambda(self.create_menu_action( - arm, 'recursive-single-archive', _('One book per directory in the archive')).triggered, - self, lambda self: self.add_archive(True)) + arm, 'recursive-single-archive', _('One book per directory in the archive')).triggered, + self, lambda self: self.add_archive(True)) connect_lambda(self.create_menu_action( arm, 'recursive-multiple-archive', _('Multiple books per directory in the archive')).triggered, self, lambda self: self.add_archive(False)) @@ -201,7 +201,7 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/gui2/actions/preferences.py calibre-3.33.1/src/calibre/gui2/actions/preferences.py --- calibre-3.33.1.orig/src/calibre/gui2/actions/preferences.py 2018-11-02 18:00:30.493302089 +0000 +++ calibre-3.33.1/src/calibre/gui2/actions/preferences.py 2018-11-02 17:55:14.219971026 +0000 @@ -29,8 +29,6 @@ pm.addAction(QIcon(I('config.png')), _('Preferences'), self.do_config) cm('welcome wizard', _('Run Welcome &wizard'), icon='wizard.png', triggered=self.gui.run_wizard) - cm('plugin updater', _('Get plugins to enhance calibre'), - icon='plugins/plugin_updater.png', triggered=self.get_plugins) if not DEBUG: pm.addSeparator() cm('restart', _('Restart in debug mode'), icon='debug.png', diff -r -u calibre-3.33.1.orig/src/calibre/gui2/add.py calibre-3.33.1/src/calibre/gui2/add.py --- calibre-3.33.1.orig/src/calibre/gui2/add.py 2018-11-02 18:00:30.493302089 +0000 +++ calibre-3.33.1/src/calibre/gui2/add.py 2018-11-02 17:55:14.443304356 +0000 @@ -167,9 +167,6 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/gui2/dialogs/comicconf.py calibre-3.33.1/src/calibre/gui2/dialogs/comicconf.py --- calibre-3.33.1.orig/src/calibre/gui2/dialogs/comicconf.py 2018-11-02 18:00:30.473302090 +0000 +++ calibre-3.33.1/src/calibre/gui2/dialogs/comicconf.py 2018-11-02 17:55:14.649971023 +0000 @@ -33,7 +33,7 @@ class ComicConf(QDialog, Ui_Dialog): def __init__(self, window, config_defaults=None, generic=True, - title=_('Set defaults for conversion of comics (CBR/CBZ files)')): + title=_('Set defaults for conversion of comics (CBZ files)')): QDialog.__init__(self, window) Ui_Dialog.__init__(self) self.setupUi(self) diff -r -u calibre-3.33.1.orig/src/calibre/gui2/__init__.py calibre-3.33.1/src/calibre/gui2/__init__.py --- calibre-3.33.1.orig/src/calibre/gui2/__init__.py 2018-11-02 18:00:30.496635423 +0000 +++ calibre-3.33.1/src/calibre/gui2/__init__.py 2018-11-02 17:55:13.969971028 +0000 @@ -191,8 +191,6 @@ help=_('Confirm before deleting')) c.add_opt('main_window_geometry', default=None, help=_('Main window geometry')) - c.add_opt('new_version_notification', default=True, - help=_('Notify when a new version is available')) c.add_opt('use_roman_numerals_for_series_number', default=True, help=_('Use Roman numerals for series number')) c.add_opt('sort_tags_by', default='name', diff -r -u calibre-3.33.1.orig/src/calibre/gui2/preferences/behavior.py calibre-3.33.1/src/calibre/gui2/preferences/behavior.py --- calibre-3.33.1.orig/src/calibre/gui2/preferences/behavior.py 2018-11-02 18:00:30.456635423 +0000 +++ calibre-3.33.1/src/calibre/gui2/preferences/behavior.py 2018-11-02 17:55:06.426637746 +0000 @@ -40,7 +40,6 @@ r('network_timeout', prefs) - r('new_version_notification', config) r('upload_news_to_device', config) r('delete_news_from_library_on_upload', config) @@ -140,7 +139,7 @@ input_map = prefs['input_format_order'] all_formats = set() self.opt_input_order.clear() - for fmt in all_input_formats().union({'ZIP', 'RAR'}): + for fmt in all_input_formats().union({'ZIP'}): all_formats.add(fmt.upper()) for format in input_map + list(all_formats.difference(input_map)): item = QListWidgetItem(format, self.opt_input_order) diff -r -u calibre-3.33.1.orig/src/calibre/gui2/preferences/behavior.ui calibre-3.33.1/src/calibre/gui2/preferences/behavior.ui --- calibre-3.33.1.orig/src/calibre/gui2/preferences/behavior.ui 2018-11-02 18:00:30.456635423 +0000 +++ calibre-3.33.1/src/calibre/gui2/preferences/behavior.ui 2018-11-02 17:55:14.843304353 +0000 @@ -16,13 +16,6 @@ - - - - Notify when a &new version is available - - - diff -r -u calibre-3.33.1.orig/src/calibre/gui2/update.py calibre-3.33.1/src/calibre/gui2/update.py --- calibre-3.33.1.orig/src/calibre/gui2/update.py 2018-11-02 18:00:30.433302090 +0000 +++ calibre-3.33.1/src/calibre/gui2/update.py 2018-11-02 18:20:59.376626554 +0000 @@ -6,15 +6,13 @@ from threading import Thread, Event from PyQt5.Qt import (QObject, pyqtSignal, Qt, QUrl, QDialog, QGridLayout, - QLabel, QCheckBox, QDialogButtonBox, QIcon) + QLabel, QCheckBox, QIcon) -from calibre.constants import (__appname__, __version__, iswindows, isosx, +from calibre.constants import (__appname__, iswindows, isosx, isportable, is64bit, numeric_version) from calibre import prints, as_unicode -from calibre.utils.config import prefs from calibre.utils.localization import localize_website_link -from calibre.utils.https import get_https_resource_securely -from calibre.gui2 import config, dynamic, open_url +from calibre.gui2 import dynamic, open_url from calibre.gui2.dialogs.plugin_updater import get_plugin_updates_available URL = 'https://code.calibre-ebook.com/latest' @@ -31,35 +29,7 @@ def get_newest_version(): - try: - icon_theme_name = json.loads(I('icon-theme.json', data=True))['name'] - except Exception: - icon_theme_name = '' - headers={ - 'CALIBRE-VERSION':__version__, - 'CALIBRE-OS': ('win' if iswindows else 'osx' if isosx else 'oth'), - 'CALIBRE-INSTALL-UUID': prefs['installation_uuid'], - 'CALIBRE-ICON-THEME': icon_theme_name, - } - try: - version = get_https_resource_securely(URL, headers=headers) - except ssl.SSLError as err: - if getattr(err, 'reason', None) != 'CERTIFICATE_VERIFY_FAILED': - raise - # certificate verification failed, since the version check contains no - # critical information, ignore and proceed - # We have to do this as if the calibre CA certificate ever - # needs to be revoked, then we wont be able to do version checks - version = get_https_resource_securely(URL, headers=headers, cacerts=None) - try: - version = version.decode('utf-8').strip() - except UnicodeDecodeError: - version = u'' - ans = NO_CALIBRE_UPDATE - m = re.match(unicode(r'(\d+)\.(\d+).(\d+)$'), version) - if m is not None: - ans = tuple(map(int, (m.group(1), m.group(2), m.group(3)))) - return ans + return NO_CALIBRE_UPDATE class Signal(QObject): @@ -82,12 +52,6 @@ calibre_update_version = NO_CALIBRE_UPDATE plugins_update_found = 0 try: - version = get_newest_version() - if version[:2] > numeric_version[:2]: - calibre_update_version = version - except Exception as e: - prints('Failed to check for calibre update:', as_unicode(e)) - try: update_plugins = get_plugin_updates_available(raise_error=True) if update_plugins is not None: plugins_update_found = len(update_plugins) @@ -132,11 +96,6 @@ self.setWindowIcon(QIcon(I('lt.png'))) self.l.addWidget(self.logo, 0, 0) self.l.addWidget(self.label, 0, 1) - self.cb = QCheckBox( - _('Show this notification for future updates'), self) - self.l.addWidget(self.cb, 1, 0, 1, -1) - self.cb.setChecked(config.get('new_version_notification')) - self.cb.stateChanged.connect(self.show_future) self.bb = QDialogButtonBox(self) b = self.bb.addButton(_('&Get update'), self.bb.AcceptRole) b.setDefault(True) @@ -164,9 +123,6 @@ if gui is not None: gui.quit(restart=True) - def show_future(self, *args): - config.set('new_version_notification', bool(self.cb.isChecked())) - def accept(self): open_url(QUrl(get_download_url())) @@ -214,7 +170,7 @@ self.status_bar.update_label.setVisible(True) if has_calibre_update: - if (force or (config.get('new_version_notification') and dynamic.get(version_key(calibre_version), True))): + if force: if not no_show_popup: self._update_notification__ = UpdateNotification(calibre_version, number_of_plugin_updates, parent=self) diff -r -u calibre-3.33.1.orig/src/calibre/__init__.py calibre-3.33.1/src/calibre/__init__.py --- calibre-3.33.1.orig/src/calibre/__init__.py 2018-11-02 18:00:30.683302087 +0000 +++ calibre-3.33.1/src/calibre/__init__.py 2018-11-02 17:55:09.219971061 +0000 @@ -298,10 +298,7 @@ # 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: @@ -310,9 +307,6 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/linux.py calibre-3.33.1/src/calibre/linux.py --- calibre-3.33.1.orig/src/calibre/linux.py 2018-11-02 18:00:30.409968757 +0000 +++ calibre-3.33.1/src/calibre/linux.py 2018-11-02 17:55:15.033304353 +0000 @@ -318,7 +318,7 @@ ): 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 -r -u calibre-3.33.1.orig/src/calibre/srv/render_book.py calibre-3.33.1/src/calibre/srv/render_book.py --- calibre-3.33.1.orig/src/calibre/srv/render_book.py 2018-11-02 18:00:30.406635424 +0000 +++ calibre-3.33.1/src/calibre/srv/render_book.py 2018-11-02 17:54:41.786637925 +0000 @@ -195,7 +195,7 @@ 'spine':spine, 'link_uid': uuid4(), 'book_hash': book_hash, - 'is_comic': input_fmt.lower() in {'cbc', 'cbz', 'cbr', 'cb7'}, + 'is_comic': input_fmt.lower() in {'cbc', 'cbz', 'cb7'}, 'raster_cover_name': raster_cover_name, 'title_page_name': titlepage_name, 'has_maths': False, diff -r -u calibre-3.33.1.orig/src/calibre/test_build.py calibre-3.33.1/src/calibre/test_build.py --- calibre-3.33.1.orig/src/calibre/test_build.py 2018-11-02 18:00:30.406635424 +0000 +++ calibre-3.33.1/src/calibre/test_build.py 2018-11-02 17:55:15.236637685 +0000 @@ -218,10 +218,6 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/utils/file_type_icons.py calibre-3.33.1/src/calibre/utils/file_type_icons.py --- calibre-3.33.1.orig/src/calibre/utils/file_type_icons.py 2018-11-02 18:00:30.403302090 +0000 +++ calibre-3.33.1/src/calibre/utils/file_type_icons.py 2018-11-02 17:54:45.416637897 +0000 @@ -16,7 +16,6 @@ 'png' : 'png', 'bmp' : 'bmp', 'cbz' : 'cbz', - 'cbr' : 'cbr', 'svg' : 'svg', 'html' : 'html', 'htmlz' : 'html', @@ -28,7 +27,6 @@ 'lrx' : 'lrx', 'pdf' : 'pdf', 'pdr' : 'zero', - 'rar' : 'rar', 'zip' : 'zip', 'txt' : 'txt', 'text' : 'txt', diff -r -u calibre-3.33.1.orig/src/calibre/utils/search_query_parser_test.py calibre-3.33.1/src/calibre/utils/search_query_parser_test.py --- calibre-3.33.1.orig/src/calibre/utils/search_query_parser_test.py 2018-11-02 18:00:30.396635424 +0000 +++ calibre-3.33.1/src/calibre/utils/search_query_parser_test.py 2018-11-02 17:55:15.446637679 +0000 @@ -30,16 +30,16 @@ 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', @@ -54,15 +54,15 @@ 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', @@ -73,9 +73,9 @@ 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', @@ -88,16 +88,16 @@ 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, @@ -106,12 +106,12 @@ 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, @@ -124,20 +124,20 @@ 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', @@ -145,7 +145,7 @@ 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', @@ -169,7 +169,7 @@ 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', @@ -222,7 +222,7 @@ 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', @@ -242,7 +242,7 @@ 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', @@ -250,17 +250,17 @@ 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'], @@ -290,15 +290,15 @@ 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 -r -u calibre-3.33.1.orig/src/calibre/web/feeds/feedparser.py calibre-3.33.1/src/calibre/web/feeds/feedparser.py --- calibre-3.33.1.orig/src/calibre/web/feeds/feedparser.py 2018-11-02 18:00:30.393302091 +0000 +++ calibre-3.33.1/src/calibre/web/feeds/feedparser.py 2018-11-02 17:55:04.466637761 +0000 @@ -2081,7 +2081,7 @@ EMAIL = 5 known_xfn_relationships = {'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 = {'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 = {'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) --- calibre-3.33.1.orig/src/calibre/srv/tests/loop.py 2018-10-19 00:00:54.000000000 -0500 +++ calibre-3.33.1/src/calibre/srv/tests/loop.py 2018-11-08 12:25:51.575170672 -0500 @@ -108,24 +108,6 @@ with TestServer(lambda data:(data.path[0] + data.read()), listen_on='1.1.1.1', fallback_to_detected_interface=True, specialize=specialize) as server: self.assertNotEqual('1.1.1.1', server.address[0]) - @skipIf(is_ci, 'Continuous Integration servers do not support BonJour') - def test_bonjour(self): - 'Test advertising via BonJour' - from calibre.srv.bonjour import BonJour - from calibre.utils.Zeroconf import Zeroconf - b = BonJour() - with TestServer(lambda data:(data.path[0] + data.read()), plugins=(b,), shutdown_timeout=5) as server: - self.assertTrue(b.started.wait(5), 'BonJour not started') - self.ae(b.advertised_port, server.address[1]) - service = b.services[0] - self.ae(service.type, b'_calibre._tcp.local.') - r = Zeroconf() - info = r.getServiceInfo(service.type, service.name) - self.assertIsNotNone(info) - self.ae(info.text, b'\npath=/opds') - - self.assertTrue(b.stopped.wait(5), 'BonJour not stopped') - def test_ring_buffer(self): 'Test the ring buffer used for reads' class FakeSocket(object):