From eab2c99b60f53931d0229f0562ba1b2634bddc56 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Mon, 22 Apr 2019 02:52:25 -0400 Subject: [PATCH 1/2] py3: make plugin updater work calibre's internal version representation is a tuple. On python3, it no longer suffices to compare this to json.loads() list-based representations. Also update one instance of map where we need something subscriptable. --- src/calibre/gui2/dialogs/plugin_updater.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/dialogs/plugin_updater.py b/src/calibre/gui2/dialogs/plugin_updater.py index 4d2844e891..36c024a4e9 100644 --- a/src/calibre/gui2/dialogs/plugin_updater.py +++ b/src/calibre/gui2/dialogs/plugin_updater.py @@ -24,7 +24,7 @@ from calibre.gui2 import error_dialog, question_dialog, info_dialog, open_url, g from calibre.gui2.preferences.plugins import ConfigWidget from calibre.utils.date import UNDEFINED_DATE, format_date from calibre.utils.https import get_https_resource_securely -from polyglot.builtins import itervalues, unicode_type, filter +from polyglot.builtins import itervalues, map, unicode_type, filter SERVER = 'https://code.calibre-ebook.com/plugins/' INDEX_URL = '%splugins.json.bz2' % SERVER @@ -205,7 +205,7 @@ class DisplayPlugin(object): self.donation_link = plugin['donate'] self.available_version = tuple(plugin['version']) self.release_date = datetime.datetime(*tuple(map(int, re.split(r'\D', plugin['last_modified'])))[:6]).date() - self.calibre_required_version = plugin['minimum_calibre_version'] + self.calibre_required_version = tuple(plugin['minimum_calibre_version']) self.author = plugin['author'] self.platforms = plugin['supported_platforms'] self.uninstall_plugins = plugin['uninstall'] or [] @@ -277,8 +277,8 @@ class DisplayPluginModel(QAbstractTableModel): def __init__(self, display_plugins): QAbstractTableModel.__init__(self) self.display_plugins = display_plugins - self.headers = map(unicode_type, [_('Plugin name'), _('Donate'), _('Status'), _('Installed'), - _('Available'), _('Released'), _('calibre'), _('Author')]) + self.headers = list(map(unicode_type, [_('Plugin name'), _('Donate'), _('Status'), _('Installed'), + _('Available'), _('Released'), _('calibre'), _('Author')])) def rowCount(self, *args): return len(self.display_plugins) From 4fc124adb0f159754a4eed3e40d5e9dab7f1c5b7 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Mon, 22 Apr 2019 21:36:57 -0400 Subject: [PATCH 2/2] py3: also make plugin installer work We check if versions compare favorably to the installed version, and if it None, then we report that it can be installed. But this check always returns None < available_version on python2, and on python3 it is a comparison error -- so lift out the None handling to return as early as possible. --- src/calibre/gui2/dialogs/plugin_updater.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/dialogs/plugin_updater.py b/src/calibre/gui2/dialogs/plugin_updater.py index 36c024a4e9..9c7afcb975 100644 --- a/src/calibre/gui2/dialogs/plugin_updater.py +++ b/src/calibre/gui2/dialogs/plugin_updater.py @@ -412,13 +412,12 @@ class DisplayPluginModel(QAbstractTableModel): return (_('You must upgrade to at least calibre %s before installing this plugin') % self._get_display_version(display_plugin.calibre_required_version)+'\n\n'+ _('Right-click to see more options')) + if display_plugin.installed_version is None: + return (_('You can install this plugin')+'\n\n'+ + _('Right-click to see more options')) if display_plugin.installed_version < display_plugin.available_version: - if display_plugin.installed_version is None: - return (_('You can install this plugin')+'\n\n'+ - _('Right-click to see more options')) - else: - return (_('A new version of this plugin is available')+'\n\n'+ - _('Right-click to see more options')) + return (_('A new version of this plugin is available')+'\n\n'+ + _('Right-click to see more options')) return (_('This plugin is installed and up-to-date')+'\n\n'+ _('Right-click to see more options'))