Fix #2012066 [Add "Restart Now" button when installing plugin from file](https://bugs.launchpad.net/calibre/+bug/2012066)

This commit is contained in:
Kovid Goyal 2023-04-01 11:00:26 +05:30
parent 5df12a6434
commit e16179c9da
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 24 additions and 22 deletions

View File

@ -413,6 +413,25 @@ class DisplayPluginModel(QAbstractTableModel):
_('Right-click to see more options')) _('Right-click to see more options'))
def notify_on_successful_install(parent, plugin):
d = info_dialog(parent, _('Success'),
_('Plugin <b>{0}</b> successfully installed under <b>'
'{1}</b>. You may have to restart calibre '
'for the plugin to take effect.').format(plugin.name, plugin.type),
show_copy_button=False)
b = d.bb.addButton(_('&Restart calibre now'), QDialogButtonBox.ButtonRole.AcceptRole)
b.setIcon(QIcon.ic('lt.png'))
d.do_restart = False
def rf():
d.do_restart = True
b.clicked.connect(rf)
d.set_details('')
d.exec()
b.clicked.disconnect()
return d.do_restart
class PluginUpdaterDialog(SizePersistedDialog): class PluginUpdaterDialog(SizePersistedDialog):
initial_extra_size = QSize(350, 100) initial_extra_size = QSize(350, 100)
@ -716,23 +735,7 @@ class PluginUpdaterDialog(SizePersistedDialog):
widget.gui = self.gui widget.gui = self.gui
widget.check_for_add_to_toolbars(plugin, previously_installed=plugin.name in installed_plugins) widget.check_for_add_to_toolbars(plugin, previously_installed=plugin.name in installed_plugins)
self.gui.status_bar.showMessage(_('Plugin installed: %s') % display_plugin.name) self.gui.status_bar.showMessage(_('Plugin installed: %s') % display_plugin.name)
d = info_dialog(self.gui, _('Success'), do_restart = notify_on_successful_install(self.gui, plugin)
_('Plugin <b>{0}</b> successfully installed under <b>'
'{1}</b>. You may have to restart calibre '
'for the plugin to take effect.').format(plugin.name, plugin.type),
show_copy_button=False)
b = d.bb.addButton(_('&Restart calibre now'), QDialogButtonBox.ButtonRole.AcceptRole)
b.setIcon(QIcon.ic('lt.png'))
d.do_restart = False
def rf():
d.do_restart = True
b.clicked.connect(rf)
d.set_details('')
d.exec()
b.clicked.disconnect()
do_restart = d.do_restart
display_plugin.plugin = plugin display_plugin.plugin = plugin
# We cannot read the 'actual' version information as the plugin will not be loaded yet # We cannot read the 'actual' version information as the plugin will not be loaded yet
display_plugin.installed_version = display_plugin.available_version display_plugin.installed_version = display_plugin.available_version

View File

@ -331,14 +331,13 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self._plugin_model.endResetModel() self._plugin_model.endResetModel()
self.changed_signal.emit() self.changed_signal.emit()
self.check_for_add_to_toolbars(plugin, previously_installed=plugin.name in installed_plugins) self.check_for_add_to_toolbars(plugin, previously_installed=plugin.name in installed_plugins)
info_dialog(self, _('Success'), from calibre.gui2.dialogs.plugin_updater import notify_on_successful_install
_('Plugin <b>{0}</b> successfully installed under <b>' do_restart = notify_on_successful_install(self, plugin)
'{1}</b>. You may have to restart calibre '
'for the plugin to take effect.').format(plugin.name, plugin.type),
show=True, show_copy_button=False)
idx = self._plugin_model.plugin_to_index_by_properties(plugin) idx = self._plugin_model.plugin_to_index_by_properties(plugin)
if idx.isValid(): if idx.isValid():
self.highlight_index(idx) self.highlight_index(idx)
if do_restart:
self.restart_now.emit()
else: else:
error_dialog(self, _('No valid plugin path'), error_dialog(self, _('No valid plugin path'),
_('%s is not a valid plugin path')%path).exec() _('%s is not a valid plugin path')%path).exec()