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
+
+
+
+
+