From 0a603ff42aa0ebbaa2fcc4a2c092ad1da34338c7 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Tue, 26 Mar 2013 09:53:17 +0100 Subject: [PATCH] qt: display a dialog to ask user to update repositories at run if error --- weboob/core/ouiboube.py | 5 ++++- weboob/tools/application/qt/qt.py | 33 +++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/weboob/core/ouiboube.py b/weboob/core/ouiboube.py index a8bae974..06a8fc2a 100644 --- a/weboob/core/ouiboube.py +++ b/weboob/core/ouiboube.py @@ -36,6 +36,9 @@ from weboob.tools.log import getLogger __all__ = ['Weboob'] +class VersionsMismatchError(ConfigError): + pass + class Weboob(object): """ The main class of Weboob, used to manage backends and call methods. @@ -196,7 +199,7 @@ class Weboob(object): if not self.repositories.check_repositories(): self.logger.error(u'Repositories are not consistent with the sources.list') - raise ConfigError(u'Versions mismatch, please run "weboob-config update"') + raise VersionsMismatchError(u'Versions mismatch, please run "weboob-config update"') for instance_name, module_name, params in self.backends_config.iter_backends(): if '_enabled' in params and not params['_enabled'].lower() in ('1', 'y', 'true', 'on', 'yes') or \ diff --git a/weboob/tools/application/qt/qt.py b/weboob/tools/application/qt/qt.py index 81000c6d..1280b581 100644 --- a/weboob/tools/application/qt/qt.py +++ b/weboob/tools/application/qt/qt.py @@ -22,14 +22,16 @@ import logging import re from threading import Event from copy import copy -from PyQt4.QtCore import QTimer, SIGNAL, QObject, QString, QSize, QVariant, QMutex +from PyQt4.QtCore import QTimer, SIGNAL, QObject, QString, QSize, QVariant, QMutex, Qt from PyQt4.QtGui import QMainWindow, QApplication, QStyledItemDelegate, \ QStyleOptionViewItemV4, QTextDocument, QStyle, \ QAbstractTextDocumentLayout, QPalette, QMessageBox, \ QSpinBox, QLineEdit, QComboBox, QCheckBox, QInputDialog -from weboob.core.ouiboube import Weboob +from weboob.core.ouiboube import Weboob, VersionsMismatchError from weboob.core.scheduler import IScheduler +from weboob.core.repositories import ModuleInstallError +from weboob.tools.config.iconfig import ConfigError from weboob.tools.browser import BrowserUnavailable, BrowserIncorrectPassword, BrowserForbidden from weboob.tools.value import ValueInt, ValueBool, ValueBackendPassword from weboob.tools.misc import to_unicode @@ -37,6 +39,7 @@ from weboob.capabilities import UserError from ..base import BaseApplication + __all__ = ['QtApplication', 'QtMainWindow', 'QtDo', 'HTMLDelegate'] @@ -146,6 +149,32 @@ class QtApplication(QApplication, BaseApplication): def create_weboob(self): return Weboob(scheduler=QtScheduler(self)) + def load_backends(self, *args, **kwargs): + while 1: + try: + return BaseApplication.load_backends(self, *args, **kwargs) + except VersionsMismatchError, e: + msg = 'Versions of modules mismatch with version of weboob.' + except ConfigError, e: + msg = unicode(e) + + res = QMessageBox.question(None, 'Configuration error', u'%s\n\nDo you want to update repositories?' % msg, QMessageBox.Yes|QMessageBox.No) + if res == QMessageBox.No: + raise e + + # Do not import it globally, it causes circular imports + from .backendcfg import ProgressDialog + pd = ProgressDialog('Update of repositories', "Cancel", 0, 100) + pd.setWindowModality(Qt.WindowModal) + try: + self.weboob.update(pd) + except ModuleInstallError, err: + QMessageBox.critical(None, self.tr('Update error'), + unicode(self.tr('Unable to update repositories: %s' % err)), + QMessageBox.Ok) + pd.setValue(100) + QMessageBox.information(None, self.tr('Update of repositories'), + self.tr('Repositories updated!'), QMessageBox.Ok) class QtMainWindow(QMainWindow): def __init__(self, parent=None):