diff --git a/weboob/tools/application/qt/backendcfg.py b/weboob/tools/application/qt/backendcfg.py index 40f5bd0f0291be8098b3e2bef09062d449f0061a..6e5121fc76f6bebb25f98a6b810cefffd61d06f9 100644 --- a/weboob/tools/application/qt/backendcfg.py +++ b/weboob/tools/application/qt/backendcfg.py @@ -33,11 +33,29 @@ from weboob.core.backendscfg import BackendAlreadyExists from weboob.capabilities.account import ICapAccount, Account, AccountRegisterError from weboob.tools.application.qt.backendcfg_ui import Ui_BackendCfg +from weboob.tools.application.qt.reposdlg_ui import Ui_RepositoriesDlg from weboob.tools.ordereddict import OrderedDict from weboob.tools.misc import to_unicode from .qt import QtValue +class RepositoriesDialog(QDialog): + def __init__(self, filename, parent=None): + QDialog.__init__(self, parent) + self.filename = filename + self.ui = Ui_RepositoriesDlg() + self.ui.setupUi(self) + + self.connect(self.ui.buttonBox, SIGNAL('accepted()'), self.save) + + with open(self.filename, 'r') as fp: + self.ui.reposEdit.setPlainText(fp.read()) + + def save(self): + with open(self.filename, 'w') as fp: + fp.write(self.ui.reposEdit.toPlainText()) + self.accept() + class IconFetcher(QThread): def __init__(self, weboob, item, minfo): QThread.__init__(self) @@ -49,6 +67,17 @@ def run(self): self.weboob.repositories.retrieve_icon(self.minfo) self.emit(SIGNAL('retrieved'), self) +class ProgressDialog(IProgress, QProgressDialog): + def __init__(self, *args, **kwargs): + QProgressDialog.__init__(self, *args, **kwargs) + + def progress(self, percent, message): + self.setValue(int(percent*100)) + self.setLabelText(message) + + def error(self, message): + QMessageBox.critical(self, self.tr('Error'), '%s' % message, QMessageBox.Ok) + class BackendCfg(QDialog): def __init__(self, weboob, caps=None, parent=None): QDialog.__init__(self, parent) @@ -77,13 +106,11 @@ def __init__(self, weboob, caps=None, parent=None): self.icon_cache = {} self.icon_threads = {} - for name, module in sorted(self.weboob.repositories.get_all_modules_info(self.caps).iteritems()): - item = QListWidgetItem(name.capitalize()) - self.set_icon(item, module) - self.ui.modulesList.addItem(item) - + self.loadModules() self.loadBackendsList() + self.connect(self.ui.updateButton, SIGNAL('clicked()'), self.updateModules) + self.connect(self.ui.repositoriesButton, SIGNAL('clicked()'), self.editRepositories) self.connect(self.ui.backendsList, SIGNAL('itemClicked(QTreeWidgetItem *, int)'), self.backendClicked) self.connect(self.ui.backendsList, SIGNAL('itemChanged(QTreeWidgetItem *, int)'), @@ -133,6 +160,32 @@ def _set_icon(self, items, minfo): self.icon_threads.pop(minfo.name, None) + def updateModules(self): + self.ui.configFrame.hide() + pd = ProgressDialog('Update of modules', "Cancel", 0, 100, self) + pd.setWindowModality(Qt.WindowModal) + try: + self.weboob.repositories.update(pd) + except ModuleInstallError, err: + QMessageBox.critical(self, self.tr('Update error'), + unicode(self.tr('Unable to update modules: %s' % (err))), + QMessageBox.Ok) + pd.setValue(100) + self.loadModules() + QMessageBox.information(self, self.tr('Update of modules'), + self.tr('Modules updated!'), QMessageBox.Ok) + + def editRepositories(self): + if RepositoriesDialog(self.weboob.repositories.sources_list).exec_(): + self.updateModules() + + def loadModules(self): + self.ui.modulesList.clear() + for name, module in sorted(self.weboob.repositories.get_all_modules_info(self.caps).iteritems()): + item = QListWidgetItem(name.capitalize()) + self.set_icon(item, module) + self.ui.modulesList.addItem(item) + def askInstallModule(self, minfo): reply = QMessageBox.question(self, self.tr('Install a module'), unicode(self.tr("Module %s is not installed. Do you want to install it?")) % minfo.name, @@ -144,18 +197,14 @@ def askInstallModule(self, minfo): return self.installModule(minfo) def installModule(self, minfo): - pd = QProgressDialog('Installation of %s' % minfo.name, "Cancel", 0, 100, self) + pd = ProgressDialog('Installation of %s' % minfo.name, "Cancel", 0, 100, self) pd.setWindowModality(Qt.WindowModal) - class Progress(IProgress): - def progress(self, percent, message): - pd.setValue(int(percent*100)) - pd.setLabelText(message) try: - self.weboob.repositories.install(minfo, Progress()) + self.weboob.repositories.install(minfo, pd) except ModuleInstallError, err: QMessageBox.critical(self, self.tr('Install error'), - unicode(self.tr('Unable to install mode %s: %s' % (minfo.name, err))), + unicode(self.tr('Unable to install module %s: %s' % (minfo.name, err))), QMessageBox.Ok) pd.setValue(100) return True diff --git a/weboob/tools/application/qt/backendcfg.ui b/weboob/tools/application/qt/backendcfg.ui index 048043c4613ed10873212c3075feb820b826cf4c..09122b8be13708073c85293a4fe022e606bb2a45 100644 --- a/weboob/tools/application/qt/backendcfg.ui +++ b/weboob/tools/application/qt/backendcfg.ui @@ -7,13 +7,61 @@ 0 0 622 - 484 + 516 Backends configuration + + 6 + + + 4 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 4 + + + + + Update modules + + + + + + + Repositories + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + diff --git a/weboob/tools/application/qt/reposdlg.ui b/weboob/tools/application/qt/reposdlg.ui new file mode 100644 index 0000000000000000000000000000000000000000..6dc74e326478c1fda5ade9e5f469c7c2beb7d7ac --- /dev/null +++ b/weboob/tools/application/qt/reposdlg.ui @@ -0,0 +1,51 @@ + + + RepositoriesDlg + + + + 0 + 0 + 400 + 300 + + + + Repositories + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + rejected() + RepositoriesDlg + reject() + + + 316 + 260 + + + 286 + 274 + + + + +