diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py
index 1764f80e..5b70e0ff 100644
--- a/dnfdragora/dialogs.py
+++ b/dnfdragora/dialogs.py
@@ -15,6 +15,8 @@
from dnfdragora import const
import dnfdragora.misc as misc
from dnfdragora import const
+import dnfdragora.config
+
import gettext
from gettext import gettext as _
@@ -182,7 +184,17 @@ def __init__(self, parent):
self.mgaFactory = self.parent.mgaFactory
self.backend = self.parent.backend
self.itemList = {}
-
+ self.expert = False
+ self.config_repos = dnfdragora.config.AppConfig('dnfdragora-repos')
+ self.hideStandard = False
+ self.config_repos.load()
+ self.simplified = self.config_repos.content
+ if self.simplified == None:
+ print ("Config file dnfdragora-repos.yaml not found. Expert mode selected")
+ self.expert = True
+ self.hideStandard = True
+
+
def _setupUI(self):
'''
setup the dialog layout
@@ -206,14 +218,20 @@ def _setupUI(self):
self.factory.createHeading(hbox_iconbar, _("Repository Management"))
+ hbox_top = self.factory.createHBox(vbox)
hbox_middle = self.factory.createHBox(vbox)
hbox_bottom = self.factory.createHBox(vbox)
hbox_footbar = self.factory.createHBox(vbox)
+ hbox_footbar.setWeight(1,10)
hbox_middle.setWeight(1,50)
hbox_bottom.setWeight(1,30)
hbox_footbar.setWeight(1,10)
+ if not self.hideStandard:
+ self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode"))
+ else:
+ self.cb_expert = None
repoList_header = yui.YTableHeader()
columns = [ _('Name'), _("Enabled")]
@@ -232,23 +250,39 @@ def _setupUI(self):
self.quitButton = self.factory.createIconButton(hbox_footbar,"",_("&Cancel"))
self.quitButton.setWeight(0,3)
self.dialog.setDefaultButton(self.quitButton)
+ self.drawList()
+ def drawList(self):
self.itemList = {}
# TODO fix the workaround when GetRepo(id) works again
repos = self.backend.get_repo_ids("*")
- for r in repos:
- item = yui.YCBTableItem(r)
- # TODO name from repo info
- self.itemList[r] = {
- 'item' : item, 'name': r, 'enabled' : False
- }
- item.this.own(False)
- enabled_repos = self.backend.get_repo_ids("enabled")
- for r in enabled_repos:
- if r in self.itemList.keys():
- self.itemList[r]["enabled"] = True
- self.itemList[r]["item"].check(True)
-
+ if self.expert:
+ for r in repos:
+ item = yui.YCBTableItem(r)
+ # TODO name from repo info
+ self.itemList[r] = {
+ 'item' : item, 'name': r, 'enabled' : False
+ }
+ item.this.own(False)
+ enabled_repos = self.backend.get_repo_ids("enabled")
+ for r in enabled_repos:
+ if r in self.itemList.keys():
+ self.itemList[r]["enabled"] = True
+ self.itemList[r]["item"].check(True)
+ else: # Standard mode
+ cat = self.simplified['categs']
+ enabled_repos = self.backend.get_repo_ids("enabled")
+ for c in cat:
+ item = yui.YCBTableItem(c['name'])
+ # TODO name from repo info
+ self.itemList[c['name']] = {
+ 'item' : item, 'name': c['name'], 'enabled' : False
+ }
+ item.this.own(False)
+ r = c['repos'][0]
+ if r in enabled_repos:
+ self.itemList[c['name']]['enabled'] = True
+ self.itemList[c['name']]['item'].check(True)
keylist = sorted(self.itemList.keys())
v = []
for key in keylist :
@@ -264,6 +298,12 @@ def _setupUI(self):
self.repoList.addItems(itemCollection)
self.repoList.doneMultipleChanges()
+ def toogle_expert(self):
+ self.expert = not self.expert
+ self.cb_expert.setLabel( _("Standard mode") if self.expert else _("Expert mode"))
+ self.drawList()
+ self.dialog.recalcLayout()
+
def _selectedRepository(self) :
'''
gets the selected repository id from repo list, if any selected
@@ -303,7 +343,14 @@ def _handleEvents(self):
enabled_repos = []
for k in self.itemList.keys():
if self.itemList[k]['enabled'] :
- enabled_repos.append(k)
+ if self.expert:
+ enabled_repos.append(k)
+ else:
+ for c in self.simplified['categs']:
+ # Enabling categories which can't be disabled an selected ones
+ if c['name'] == self.itemList[k]['name'] or not c['disabling']:
+ for r in c['repos']:
+ enabled_repos.append(r)
logger.info("Enabling repos %s "%" ".join(enabled_repos))
self.backend.SetEnabledRepos(enabled_repos)
break
@@ -315,23 +362,45 @@ def _handleEvents(self):
for it in self.itemList:
if (self.itemList[it]['item'] == changedItem) :
self.itemList[it]['enabled'] = changedItem.checked()
- repo_id = self._selectedRepository()
- s = "TODO show repo %s information
See https://github.com/timlau/dnf-daemon/issues/11"%(repo_id if repo_id else "---")
- # TODO decide what and how to show when the crash https://github.com/timlau/dnf-daemon/issues/11 is fixed
- try:
- ri = self.backend.GetRepo(repo_id)
- logger.debug(ri)
- s = ""
- for k in sorted(ri.keys()):
- if (ri[k]):
- s+= "%s: %s
"%(k, ri[k])
- except NameError as e:
- logger.error("dnfdaemon NameError: %s ", e)
- except AttributeError as e:
- logger.error("dnfdaemon AttributeError: %s ", e)
- except:
- logger.error("Unexpected error: %s ", sys.exc_info()[0])
- self.info.setText(s)
+ if self.expert:
+ repo_id = self._selectedRepository()
+ s = "TODO show repo %s information
See https://github.com/timlau/dnf-daemon/issues/11"%(repo_id if repo_id else "---")
+ # TODO decide what and how to show when the crash https://github.com/timlau/dnf-daemon/issues/11 is fixed
+ try:
+ ri = self.backend.GetRepo(repo_id)
+ logger.debug(ri)
+ s = ""
+ for k in sorted(ri.keys()):
+ if (ri[k]):
+ s+= "%s: %s
"%(k, ri[k])
+ except NameError as e:
+ logger.error("dnfdaemon NameError: %s ", e)
+ except AttributeError as e:
+ logger.error("dnfdaemon AttributeError: %s ", e)
+ except:
+ logger.error("Unexpected error: %s ", sys.exc_info()[0])
+ self.info.setText(s)
+ else:
+ cat = self.simplified['categs']
+ for it in self.itemList:
+ if (self.itemList[it]['item'] == changedItem) :
+ if (self.itemList[it]['enabled']):
+ s=_("Enabling:
")
+ else:
+ s=_("Disabling:
")
+ for c in cat:
+ if c['name']==self.itemList[it]['name']:
+ if c['disabling']:
+ for r in c['repos']:
+ s+="- %s
"%r
+ else:
+ s = _("Disabling is not allowed.")
+ break
+ break
+ self.info.setText(s)
+ elif(widget == self.cb_expert):
+ logger.info('Toogle expert mode')
+ self.toogle_expert()
def run(self):
'''
diff --git a/share/dnfdragora/dnfdragora-repos.yaml.in b/share/dnfdragora/dnfdragora-repos.yaml.in
new file mode 100644
index 00000000..5ce8148b
--- /dev/null
+++ b/share/dnfdragora/dnfdragora-repos.yaml.in
@@ -0,0 +1,22 @@
+categs:
+ - name: Core
+ disabling: False
+ repos:
+ - mageia-x86_64
+ - updates-x86_64
+ - mageia-i586
+ - updates-i586
+ - name: Nonfree
+ disabling True
+ repos:
+ - mageia-x86_64-nonfree
+ - updates-x86_64-nonfree
+ - mageia-i586-nonfree
+ - updates-i586-nonfree
+ - name: Tainted
+ disabling: True
+ repos':
+ - mageia-x86_64-tainted
+ - updates-x86_64-tainted
+ - mageia-i586-tainted
+ - updates-i586-tainted