diff --git a/packages/mediacenter/service.openelec.settings/patches.upstream/service.openelec.settings-fixes-0.1.patch b/packages/mediacenter/service.openelec.settings/patches.upstream/service.openelec.settings-fixes-0.1.patch new file mode 100644 index 0000000000..bc4039aaaa --- /dev/null +++ b/packages/mediacenter/service.openelec.settings/patches.upstream/service.openelec.settings-fixes-0.1.patch @@ -0,0 +1,2431 @@ +From 2a119229b70a1826c52482a00cc2dff38571e6f7 Mon Sep 17 00:00:00 2001 +From: lfiebach +Date: Sun, 28 Jul 2013 15:38:33 +0200 +Subject: [PATCH 1/3] Fix Update Notification + +--- + resources/lib/modules/system.py | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/resources/lib/modules/system.py b/resources/lib/modules/system.py +index de474d4..35ebfdf 100755 +--- a/resources/lib/modules/system.py ++++ b/resources/lib/modules/system.py +@@ -354,7 +354,12 @@ def load_values(self): + if not value is None: + self.config['update']['settings']['AutoUpdate']['value' + ] = value +- ++ ++ value = self.oe.read_setting('system', 'UpdateNotify') ++ if not value is None: ++ self.config['update']['settings']['UpdateNotify' ++ ]['value'] = value ++ + # AutoUpdate = manual by environment var. + if 'UPDATE_SUPPORT' in os.environ: + if os.environ['UPDATE_SUPPORT'] == 'false': +@@ -366,11 +371,6 @@ def load_values(self): + + self.config['update']['settings']['CheckUpdate']['not_supported' + ] = [self.arch] +- +- value = self.oe.read_setting('system', 'UpdateNotify') +- if not value is None: +- self.config['update']['settings']['UpdateNotify' +- ]['value'] = value + + # AutoUpdate File and URL + value = self.oe.read_setting('system', 'update_file') +-- +1.8.1.6 + + +From cc33f3c6a4e9f81b3a6eba9b8b20de5eb742c90a Mon Sep 17 00:00:00 2001 +From: lfiebach +Date: Mon, 29 Jul 2013 21:26:22 +0200 +Subject: [PATCH 2/3] redesign menu build + +--- + addon.xml | 2 +- + changelog.txt | 4 + + oe.py | 4 +- + resources/lib/modules/about.py | 1 + + resources/lib/modules/bluetooth.py | 7 +- + resources/lib/modules/connman.py | 554 +++++++--------------------- + resources/lib/modules/services.py | 128 ++----- + resources/lib/modules/system.py | 299 +++++++-------- + resources/lib/oeWindows.py | 109 +++++- + resources/skins/Default/720p/mainWindow.xml | 8 +- + 10 files changed, 410 insertions(+), 706 deletions(-) + mode change 100644 => 100755 addon.xml + +diff --git a/addon.xml b/addon.xml +old mode 100644 +new mode 100755 +index f395217..c130660 +--- a/addon.xml ++++ b/addon.xml +@@ -1,7 +1,7 @@ + + + + +diff --git a/changelog.txt b/changelog.txt +index c125464..a83a37d 100755 +--- a/changelog.txt ++++ b/changelog.txt +@@ -1,3 +1,7 @@ ++2013-07-29 v0.1.31 ++ (change) menu loader redesign ++ (fix) kill update thread on exit ++ + 2013-07-23 v0.1.30 + (change) use subprocess.Popen to start LCDd + (fix) stop LCDd on driver change +diff --git a/oe.py b/oe.py +index f2b5b2c..2e9f993 100755 +--- a/oe.py ++++ b/oe.py +@@ -114,8 +114,8 @@ def _(code): + return __addon__.getLocalizedString(code) + + def dbg_log(source, text, level=4): +- if os.environ.get('DEBUG', 'no') == 'no': +- return ++ #if os.environ.get('DEBUG', 'no') == 'no': ++ # return + + xbmc.log('## OpenELEC Addon ## ' + source + ' ## ' + text, level) + xbmc.log(traceback.format_exc()) +diff --git a/resources/lib/modules/about.py b/resources/lib/modules/about.py +index fdfee8a..76020b6 100755 +--- a/resources/lib/modules/about.py ++++ b/resources/lib/modules/about.py +@@ -39,6 +39,7 @@ def __init__(self, oeMain): + + oeMain.dbg_log('about::__init__', 'enter_function', 0) + ++ self.enabled = True + self.oe = oeMain + self.controls = {} + +diff --git a/resources/lib/modules/bluetooth.py b/resources/lib/modules/bluetooth.py +index 74c008a..f74416e 100755 +--- a/resources/lib/modules/bluetooth.py ++++ b/resources/lib/modules/bluetooth.py +@@ -46,6 +46,7 @@ class bluetooth: + 'listTyp': 'btlist', + 'InfoText': 704, + }} ++ + bt_daemon = '/usr/lib/bluetooth/bluetoothd' + bluez_init = '/etc/init.d/54_bluez' + +@@ -54,7 +55,8 @@ def __init__(self, oeMain): + try: + + oeMain.dbg_log('bluetooth::__init__', 'enter_function', 0) +- ++ ++ self.enabled = True + self.discovery_time = 30 # Seconds + self.listItems = {} + self.oe = oeMain +@@ -64,6 +66,9 @@ def __init__(self, oeMain): + self.active = False + self.dbusBluezAdapter = None + ++ if not os.path.exists(self.bt_daemon): ++ self.enabled = False ++ + self.oe.dbg_log('bluetooth::__init__', 'exit_function', 0) + except Exception, e: + +diff --git a/resources/lib/modules/connman.py b/resources/lib/modules/connman.py +index b7517e5..63541b3 100755 +--- a/resources/lib/modules/connman.py ++++ b/resources/lib/modules/connman.py +@@ -58,6 +58,7 @@ def __init__(self, mount_id, oeMain): + 'value': '', + 'type': 'multivalue', + 'values': ['cifs', 'nfs'], ++ 'action': 'set_value' + }, + 'mountpoint': { + 'order': 2, +@@ -66,6 +67,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + 'server': { + 'order': 3, +@@ -74,6 +76,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + 'share': { + 'order': 4, +@@ -82,6 +85,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + 'user': { + 'order': 5, +@@ -90,6 +94,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + 'pass': { + 'order': 6, +@@ -98,6 +103,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + 'options': { + 'order': 7, +@@ -106,6 +112,7 @@ def __init__(self, mount_id, oeMain): + 'type': 'text', + 'parent': {'entry': 'type', 'value': ['cifs', + 'nfs']}, ++ 'action': 'set_value' + }, + }, + }} +@@ -170,45 +177,9 @@ def menu_loader(self, menuItem): + if self.mount_id != 'new_mount': + self.winOeMount.showButton(2, 32141, 'networkMount', + 'delete_mount') +- category = 'mount' +- for entry in sorted(self.struct[category]['settings'], +- key=lambda x: \ +- self.struct[category]['settings' +- ][x]['order']): +- +- dictProperties = { +- 'value': self.struct[category]['settings' +- ][entry]['value'], +- 'typ': self.struct[category]['settings' +- ][entry]['type'], +- 'entry': entry, +- 'category': category, +- 'action': 'set_value', +- } +- +- if 'values' in self.struct[category]['settings'][entry]: +- dictProperties['values'] = \ +- ','.join(self.struct[category]['settings' +- ][entry]['values']) +- +- if not 'parent' in self.struct[category]['settings' +- ][entry]: +- +- self.winOeMount.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- self.oe.listObject['list']) +- else: +- +- if self.struct[category]['settings' +- ][self.struct[category]['settings' +- ][entry]['parent']['entry']]['value'] \ +- in self.struct[category]['settings' +- ][entry]['parent']['value']: +- +- self.winOeMount.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- self.oe.listObject['list']) + ++ self.winOeMount.build_menu(self.struct) ++ + self.oe.dbg_log('networkMount::menu_loader', 'exit_function' + , 0) + except Exception, e: +@@ -359,6 +330,8 @@ def delete_mount(self): + xbmc.executebuiltin('Notification(Umount Error, ' + + umount + ')') + else: ++ del self.oe.dictModules['connman'].struct['mounts' ++ ]['settings'][self.mount_id] + self.oe.remove_node(self.mount_id) + + self.oe.dbg_log('save_mount::delete_mount', 'exit_function' +@@ -398,6 +371,7 @@ def __init__(self, servicePath, oeMain): + 'value': '', + 'type': 'bool', + 'dbus': 'Boolean', ++ 'action': 'set_value' + }}, + }, + 'IPv4': { +@@ -412,6 +386,7 @@ def __init__(self, servicePath, oeMain): + 'type': 'multivalue', + 'dbus': 'String', + 'values': ['dhcp', 'manual', 'off'], ++ 'action': 'set_value' + }, + 'Address': { + 'order': 2, +@@ -421,6 +396,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + 'Netmask': { + 'order': 3, +@@ -430,6 +406,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + 'Gateway': { + 'order': 4, +@@ -439,6 +416,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + }, + }, +@@ -455,6 +433,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'values': ['auto', 'manual', '6to4', 'off' + ], ++ 'action': 'set_value' + }, + 'Address': { + 'order': 2, +@@ -464,6 +443,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + 'PrefixLength': { + 'order': 4, +@@ -473,6 +453,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'Byte', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + 'Gateway': { + 'order': 3, +@@ -482,6 +463,7 @@ def __init__(self, servicePath, oeMain): + 'dbus': 'String', + 'parent': {'entry': 'Method', + 'value': ['manual']}, ++ 'action': 'set_value' + }, + 'Privacy': { + 'order': 5, +@@ -493,6 +475,7 @@ def __init__(self, servicePath, oeMain): + 'value': ['manual']}, + 'values': ['disabled', 'enabled', 'prefered' + ], ++ 'action': 'set_value' + }, + }, + }, +@@ -506,18 +489,21 @@ def __init__(self, servicePath, oeMain): + 'value': '', + 'type': 'ip', + 'dbus': 'String', ++ 'action': 'set_value' + }, '1': { + 'order': 2, + 'name': 32121, + 'value': '', + 'type': 'ip', + 'dbus': 'String', ++ 'action': 'set_value' + }, '2': { + 'order': 3, + 'name': 32122, + 'value': '', + 'type': 'ip', + 'dbus': 'String', ++ 'action': 'set_value' + }}, + }, + 'Timeservers': { +@@ -530,18 +516,21 @@ def __init__(self, servicePath, oeMain): + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }, '1': { + 'order': 2, + 'name': 32125, + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }, '2': { + 'order': 3, + 'name': 32126, + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }}, + }, + 'Domains': { +@@ -554,18 +543,21 @@ def __init__(self, servicePath, oeMain): + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }, '1': { + 'order': 2, + 'name': 32129, + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }, '2': { + 'order': 3, + 'name': 32130, + 'value': '', + 'type': 'text', + 'dbus': 'String', ++ 'action': 'set_value' + }}, + }, + } +@@ -646,16 +638,6 @@ def __init__(self, servicePath, oeMain): + for strEntry in sorted(self.struct, key=lambda x: \ + self.struct[x]['order']): + +- if strEntry == 'Provider': +- if 'Type' in self.service_properties: +- if not self.service_properties['Type'] == 'vpn': +- break +- +- if strEntry != 'Provider': +- if 'Type' in self.service_properties: +- if self.service_properties['Type'] == 'vpn': +- continue +- + dictProperties = { + 'modul': 'connmanNetworkConfig', + 'listTyp': self.oe.listObject['list'], +@@ -738,45 +720,9 @@ def menu_loader(self, menuItem): + self.oe.listObject['list'], + ) + +- category = menuItem.getProperty('category') +- for entry in sorted(self.struct[category]['settings'], +- key=lambda x: \ +- self.struct[category]['settings' +- ][x]['order']): +- +- dictProperties = { +- 'value': self.struct[category]['settings' +- ][entry]['value'], +- 'typ': self.struct[category]['settings' +- ][entry]['type'], +- 'entry': entry, +- 'category': category, +- 'action': 'set_value', +- } +- +- if 'values' in self.struct[category]['settings'][entry]: +- dictProperties['values'] = \ +- ','.join(self.struct[category]['settings' +- ][entry]['values']) +- +- if not 'parent' in self.struct[category]['settings' +- ][entry]: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- else: +- +- if self.struct[category]['settings' +- ][self.struct[category]['settings' +- ][entry]['parent']['entry']]['value'] \ +- in self.struct[category]['settings' +- ][entry]['parent']['value']: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- ++ self.winOeCon.build_menu(self.struct, ++ fltr=[menuItem.getProperty('category')]) ++ + self.oe.dbg_log('connmanService::menu_loader', + 'exit_function', 0) + except Exception, e: +@@ -1012,7 +958,7 @@ def __init__(self, vpn, oeMain): + 'openvpn']}, + }, + 'Domain': { +- 'order': 27, ++ 'order': 7, + 'name': 32134, + 'value': 'vpn', + 'action': 'set_value', +@@ -1037,8 +983,19 @@ def __init__(self, vpn, oeMain): + 'type': 'text', + 'parent': {'entry': 'Type', 'value': ['pptp']}, + }, ++ ++ 'advanced': { ++ 'order': 8, ++ 'name': 'Show Advanced', ++ 'value': '0', ++ 'action': 'set_value', ++ 'type': 'bool', ++ 'parent': {'entry': 'Type', 'value': ['pptp','openvpn']}, ++ }, ++ ++ + 'PPTP.EchoFailure': { +- 'order': 25, ++ 'order': 9, + 'name': 32162, + 'value': '0', + 'action': 'set_value', +@@ -1047,7 +1004,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.EchoInterval': { +- 'order': 26, ++ 'order': 9, + 'name': 32163, + 'value': '0', + 'action': 'set_value', +@@ -1056,7 +1013,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RefuseEAP': { +- 'order': 13, ++ 'order': 9, + 'name': 32151, + 'value': '0', + 'action': 'set_value', +@@ -1065,7 +1022,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RefusePAP': { +- 'order': 14, ++ 'order': 9, + 'name': 32152, + 'value': '0', + 'action': 'set_value', +@@ -1074,7 +1031,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RefuseCHAP': { +- 'order': 15, ++ 'order': 9, + 'name': 32153, + 'value': '0', + 'action': 'set_value', +@@ -1083,7 +1040,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RefuseMSCHAP': { +- 'order': 16, ++ 'order': 9, + 'name': 32154, + 'value': '0', + 'action': 'set_value', +@@ -1092,7 +1049,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RefuseMSCHAP2': { +- 'order': 17, ++ 'order': 9, + 'name': 32155, + 'value': '0', + 'action': 'set_value', +@@ -1101,7 +1058,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.NoBSDComp': { +- 'order': 28, ++ 'order': 9, + 'name': 32160, + 'value': '0', + 'action': 'set_value', +@@ -1110,7 +1067,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.NoDeflate': { +- 'order': 27, ++ 'order': 9, + 'name': 32164, + 'value': '0', + 'action': 'set_value', +@@ -1119,7 +1076,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RequirMPPE': { +- 'order': 20, ++ 'order': 9, + 'name': 32156, + 'value': '0', + 'action': 'set_value', +@@ -1128,7 +1085,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RequirMPPE40': { +- 'order': 21, ++ 'order': 9, + 'name': 32157, + 'value': '0', + 'action': 'set_value', +@@ -1137,7 +1094,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RequirMPPE128': { +- 'order': 22, ++ 'order': 9, + 'name': 32158, + 'value': '0', + 'action': 'set_value', +@@ -1146,7 +1103,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.RequirMPPEStateful': { +- 'order': 23, ++ 'order': 9, + 'name': 32159, + 'value': '0', + 'action': 'set_value', +@@ -1155,7 +1112,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'PPTP.NoVJ': { +- 'order': 24, ++ 'order': 9, + 'name': 32161, + 'value': '0', + 'action': 'set_value', +@@ -1164,7 +1121,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.CACert': { +- 'order': 8, ++ 'order': 5, + 'name': 32137, + 'value': '', + 'action': 'set_value', +@@ -1173,7 +1130,7 @@ def __init__(self, vpn, oeMain): + ]}, + }, + 'OpenVPN.Cert': { +- 'order': 8, ++ 'order': 5, + 'name': 32138, + 'value': '', + 'action': 'set_value', +@@ -1182,7 +1139,7 @@ def __init__(self, vpn, oeMain): + ]}, + }, + 'OpenVPN.Key': { +- 'order': 8, ++ 'order': 5, + 'name': 32139, + 'value': '', + 'action': 'set_value', +@@ -1191,7 +1148,7 @@ def __init__(self, vpn, oeMain): + ]}, + }, + 'OpenVPN.MTU': { +- 'order': 11, ++ 'order': 9, + 'name': 32165, + 'value': '', + 'action': 'set_value', +@@ -1201,7 +1158,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.NSCertType': { +- 'order': 12, ++ 'order': 9, + 'name': 32166, + 'value': '', + 'action': 'set_value', +@@ -1211,7 +1168,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.Proto': { +- 'order': 13, ++ 'order': 9, + 'name': 32167, + 'value': '', + 'action': 'set_value', +@@ -1221,7 +1178,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.Port': { +- 'order': 6, ++ 'order': 9, + 'name': 32168, + 'value': '', + 'action': 'set_value', +@@ -1231,7 +1188,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.AuthUserPass': { +- 'order': 5, ++ 'order': 9, + 'name': 32169, + 'value': '', + 'action': 'set_value', +@@ -1241,7 +1198,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.AskPass': { +- 'order': 16, ++ 'order': 9, + 'name': 32170, + 'value': '0', + 'action': 'set_value', +@@ -1251,7 +1208,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.AuthNoCache': { +- 'order': 17, ++ 'order': 9, + 'name': 32171, + 'value': '0', + 'action': 'set_value', +@@ -1261,7 +1218,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.TLSRemote': { +- 'order': 18, ++ 'order': 9, + 'name': 32172, + 'value': '0', + 'action': 'set_value', +@@ -1271,7 +1228,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.TLSAuth': { +- 'order': 19, ++ 'order': 9, + 'name': 32173, + 'value': '0', + 'action': 'set_value', +@@ -1281,7 +1238,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.TLSAuthDir': { +- 'order': 20, ++ 'order': 9, + 'name': 32174, + 'value': '', + 'action': 'set_value', +@@ -1291,7 +1248,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.Auth': { +- 'order': 4, ++ 'order': 9, + 'name': 32175, + 'value': '', + 'action': 'set_value', +@@ -1301,7 +1258,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.CompLZO': { +- 'order': 22, ++ 'order': 9, + 'name': 32176, + 'value': '0', + 'action': 'set_value', +@@ -1311,7 +1268,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.RemoteCertTls': { +- 'order': 23, ++ 'order': 9, + 'name': 32177, + 'value': '0', + 'action': 'set_value', +@@ -1321,7 +1278,7 @@ def __init__(self, vpn, oeMain): + 'optional': '', + }, + 'OpenVPN.ConfigFile': { +- 'order': 7, ++ 'order': 9, + 'name': 32178, + 'value': '', + 'action': 'set_value', +@@ -1414,108 +1371,9 @@ def menu_loader(self, menuItem): + self.winOeCon.showButton(1, 32141, 'connmanVpnConfig', + 'delete_vpn_config') + +- category = menuItem.getProperty('category') +- for entry in sorted(self.struct[category]['settings'], +- key=lambda x: \ +- self.struct[category]['settings' +- ][x]['order']): +- +- if 'optional' in self.struct[category]['settings' +- ][entry]: +- continue +- +- dictProperties = { +- 'value': self.struct[category]['settings' +- ][entry]['value'], +- 'typ': self.struct[category]['settings' +- ][entry]['type'], +- 'entry': entry, +- 'category': category, +- 'action': 'set_value', +- } +- +- if 'values' in self.struct[category]['settings'][entry]: +- dictProperties['values'] = \ +- ','.join(self.struct[category]['settings' +- ][entry]['values']) +- +- if not 'parent' in self.struct[category]['settings' +- ][entry]: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- else: +- +- if self.struct[category]['settings' +- ][self.struct[category]['settings' +- ][entry]['parent']['entry']]['value'] \ +- in self.struct[category]['settings' +- ][entry]['parent']['value']: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- +- if self.struct[category]['settings']['Type']['value'] != '': +- +- self.winOeCon.addConfigItem('Advanced', +- {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- dictProperties = {'value': self.show_advanced_entrys, +- 'typ': 'bool', +- 'action': 'show_advanced'} +- +- self.winOeCon.addConfigItem('Show Advanced', +- dictProperties, menuItem.getProperty('listTyp')) +- +- if self.show_advanced_entrys == '1': +- +- for entry in sorted(self.struct[category]['settings' +- ], key=lambda x: \ +- self.struct[category]['settings'][x]['order' +- ]): +- +- if not 'optional' \ +- in self.struct[category]['settings'][entry]: +- continue +- +- dictProperties = { +- 'value': self.struct[category]['settings' +- ][entry]['value'], +- 'typ': self.struct[category]['settings' +- ][entry]['type'], +- 'entry': entry, +- 'category': category, +- 'action': 'set_value', +- } +- +- if 'values' in self.struct[category]['settings' +- ][entry]: +- dictProperties['values'] = \ +- ','.join(self.struct[category]['settings' +- ][entry]['values']) +- +- if not 'parent' \ +- in self.struct[category]['settings'][entry]: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- else: +- +- if self.struct[category]['settings' +- ][self.struct[category]['settings' +- ][entry]['parent']['entry']]['value' +- ] \ +- in self.struct[category]['settings' +- ][entry]['parent']['value']: +- +- self.winOeCon.addConfigItem(self.oe._(self.struct[category]['settings' +- ][entry]['name']), +- dictProperties, +- menuItem.getProperty('listTyp')) ++ self.winOeCon.build_menu(self.struct, ++ fltr=[menuItem.getProperty('category')], ++ optional=self.struct['Provider']['settings']['advanced']['value']) + + self.oe.dbg_log('connmanVpn::menu_loader', 'exit_function', + 0) +@@ -1693,6 +1551,7 @@ def __init__(self, oeMain): + + self.struct = { + '/net/connman/technology/wifi': { ++ 'hidden': 'true', + 'order': 1, + 'name': 32102, + 'dbus': 'Dictionary', +@@ -1742,8 +1601,9 @@ def __init__(self, oeMain): + 'InfoText': 729, + }, + }, +- }, ++ 'order': 0}, + '/net/connman/technology/ethernet': { ++ 'hidden': 'true', + 'order': 2, + 'name': 32103, + 'dbus': 'Dictionary', +@@ -1755,7 +1615,8 @@ def __init__(self, oeMain): + 'type': 'bool', + 'dbus': 'Boolean', + 'InfoText': 730, +- }}, ++ }}, ++ 'order': 1 + }, + 'vpn': { + 'order': 3, +@@ -1763,11 +1624,13 @@ def __init__(self, oeMain): + 'dbus': 'Dictionary', + 'settings': {'add': { + 'order': 1, ++ 'value': '', + 'name': 32322, + 'action': 'add_vpn', + 'type': 'button', + 'InfoText': 731, + }}, ++ 'order': 2 + }, + 'Timeservers': { + 'order': 4, +@@ -1801,16 +1664,18 @@ def __init__(self, oeMain): + 'validate': '^([a-zA-Z0-9](?:[a-zA-Z0-9-\.]*[a-zA-Z0-9]))$', + 'InfoText': 734, + }}, ++ 'order': 2 + }, + 'mounts': {'order': 5, 'name': 32348, + 'settings': {'add': { + 'order': 1, + 'name': 32349, +- 'value': '', ++ 'value': 'new_mount', + 'action': 'edit_mount', + 'type': 'button', + 'InfoText': 735, +- }}}, ++ }}, 'order': 3 ++ }, + 'advanced': {'order': 6, 'name': 32368, + 'settings': {'wait_for_network': { + 'order': 1, +@@ -1828,15 +1693,24 @@ def __init__(self, oeMain): + 'parent': {'entry': 'wait_for_network', + 'value': ['1']}, + 'InfoText': 737, +- }}}, ++ }}, 'order': 4 ++ }, + } + + self.busy = 0 + self.oe = oeMain ++ self.enabled = True ++ self.connman_daemon = "/usr/sbin/connmand" + + self.wait_conf_file = \ + '%s/openelec/network_wait' % self.oe.CONFIG_CACHE + ++ self.vpn_plugins_dir = \ ++ '/usr/lib/connman/plugins-vpn' ++ ++ if not os.path.exists(self.connman_daemon): ++ self.enabled = False ++ + self.oe.dbg_log('connman::__init__', 'exit_function', 0) + self.vpn_conf_dir = '%s/vpn-config/' % self.oe.USER_CONFIG + except Exception, e: +@@ -1882,7 +1756,8 @@ def exit(self): + + self.oe.dbg_log('connman::exit', 'enter_function', 0) + +- self.dbusMonitor.exit() ++ if hasattr(self, 'dbusMonitor'): ++ self.dbusMonitor.exit() + + self.clear_list() + +@@ -1908,7 +1783,10 @@ def load_values(self): + + self.oe.dbg_log('connman::load_values', 'enter_function', 0) + +- ++ # VPN Available ++ if not os.path.exists(self.vpn_plugins_dir): ++ self.struct['vpn']['hidden'] = 'true' ++ + # Network Wait + self.struct['advanced']['settings']['wait_for_network' + ]['value'] = '0' +@@ -2081,197 +1959,47 @@ def menu_loader(self, menuItem=None): + , '/'), 'net.connman.Clock') + self.clock_properties = self.clock.GetProperties() + +- # Wifi and Ethernet ++ self.struct['/net/connman/technology/wifi']['hidden'] = 'true' ++ self.struct['/net/connman/technology/ethernet']['hidden'] = 'true' ++ + for (path, technologie) in self.technologie_properties: +- + if path in self.struct: +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[path]['name' +- ]), {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- if path in self.struct: +- for entry in sorted(self.struct[path]['settings'], +- key=lambda x: self.struct[path]['settings' +- ][x]['order']): +- if entry in technologie: +- if not 'changed' \ +- in self.struct[path]['settings'][entry]: +- self.struct[path]['settings' +- ][entry]['value'] = \ +- unicode(technologie[entry]) +- +- dictProperties = { +- 'value': self.struct[path]['settings' +- ][entry]['value'], +- 'typ': self.struct[path]['settings' +- ][entry]['type'], +- 'entry': entry, +- 'category': path, +- 'action': self.struct[path]['settings' +- ][entry]['action'], +- } +- +- if 'InfoText' in self.struct[path]['settings' +- ][entry]: +- dictProperties['InfoText'] = \ +- self.oe._(self.struct[path]['settings' +- ][entry]['InfoText']) +- +- if 'validate' in self.struct[path]['settings' +- ][entry]: +- dictProperties['validate'] = \ +- self.struct[path]['settings' +- ][entry]['validate'] +- +- if 'values' in self.struct[path]['settings' +- ][entry]: +- dictProperties['values'] = \ +- ','.join(self.struct[path]['settings' +- ][entry]['values']) +- +- if not 'parent' in self.struct[path]['settings' +- ][entry]: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[path]['settings' +- ][entry]['name']), dictProperties, +- menuItem.getProperty('listTyp')) +- else: +- +- if self.struct[path]['settings' +- ][self.struct[path]['settings' +- ][entry]['parent']['entry']]['value' +- ] in self.struct[path]['settings' +- ][entry]['parent']['value']: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[path]['settings' +- ][entry]['name']), +- dictProperties, +- menuItem.getProperty('listTyp')) +- +- # Virtual Private Network +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['vpn' +- ]['name']), {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['vpn' +- ]['settings']['add']['name']), {'typ': 'button', +- 'action': self.struct['vpn']['settings']['add' +- ]['action'], 'InfoText': self.oe._(self.struct['vpn' +- ]['settings']['add']['InfoText'])}, +- menuItem.getProperty('listTyp')) +- +- # Timeservers +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['Timeservers' +- ]['name']), {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- if 'Timeservers' in self.clock_properties: +- for setting in sorted(self.struct['Timeservers' +- ]['settings']): +- if int(setting) \ +- < len(self.clock_properties['Timeservers']): +- if not 'changed' in self.struct['Timeservers' +- ]['settings'][setting]: +- self.struct['Timeservers']['settings' +- ][setting]['value'] = \ +- self.clock_properties['Timeservers' +- ][int(setting)] +- +- dictProperties = { +- 'value': self.struct['Timeservers']['settings' +- ][unicode(setting)]['value'], +- 'typ': self.struct['Timeservers']['settings' +- ][unicode(setting)]['type'], +- 'entry': unicode(setting), +- 'category': 'Timeservers', +- 'action': self.struct['Timeservers']['settings' +- ][unicode(setting)]['action'], +- } +- +- if 'InfoText' in self.struct['Timeservers' +- ]['settings'][setting]: +- dictProperties['InfoText'] = \ +- self.oe._(self.struct['Timeservers' +- ]['settings'][setting]['InfoText']) +- +- if 'validate' in self.struct['Timeservers' +- ]['settings'][unicode(setting)]: +- dictProperties['validate'] = \ +- self.struct['Timeservers']['settings' +- ][unicode(setting)]['validate'] +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['Timeservers' +- ]['settings'][unicode(setting)]['name']), +- dictProperties, +- menuItem.getProperty('listTyp')) +- +- # Mounts +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['mounts' +- ]['name']), {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['mounts' +- ]['settings']['add']['name']), { +- 'typ': self.struct['mounts']['settings']['add']['type' +- ], +- 'action': self.struct['mounts']['settings']['add' +- ]['action'], +- 'entry': 'new_mount', +- 'InfoText': self.oe._(self.struct['mounts']['settings' +- ]['add']['InfoText']), +- }, menuItem.getProperty('listTyp')) +- ++ if 'hidden' in self.struct[path]: ++ del self.struct[path]['hidden'] ++ ++ for entry in self.struct[path]['settings']: ++ if entry in technologie: ++ self.struct[path]['settings' ++ ][entry]['value'] = \ ++ unicode(technologie[entry]) ++ ++ for setting in self.struct['Timeservers']['settings']: ++ if 'Timeservers' in self.clock_properties: ++ if int(setting) < len(self.clock_properties['Timeservers']): ++ self.struct['Timeservers']['settings' ++ ][setting]['value'] = \ ++ self.clock_properties['Timeservers' ++ ][int(setting)] ++ else: ++ self.struct['Timeservers']['settings' ++ ][setting]['value'] = '' ++ + mount_dict = self.oe.read_node('mounts') + if 'mounts' in mount_dict: + for mount in mount_dict['mounts']: +- +- dictProperties = { +- 'typ': 'button', +- 'entry': mount, +- 'category': 'mounts', ++ tmp_mount = { ++ 'type': 'button', ++ 'name': mount_dict['mounts'][mount]['mountpoint'], ++ 'value': mount, + 'action': 'edit_mount', ++ 'dynamic': 'true', ++ 'order': 1 + } +- +- self.oe.winOeMain.addConfigItem(mount_dict['mounts' +- ][mount]['mountpoint'], dictProperties, +- menuItem.getProperty('listTyp')) +- +- # Network Wait +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['advanced' +- ]['name']), {'typ': 'separator'}, +- menuItem.getProperty('listTyp')) +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['advanced' +- ]['settings']['wait_for_network']['name']), { +- 'entry': 'wait_for_network', +- 'category': 'advanced', +- 'typ': self.struct['advanced']['settings' +- ]['wait_for_network']['type'], +- 'action': self.struct['advanced']['settings' +- ]['wait_for_network']['action'], +- 'value': self.struct['advanced']['settings' +- ]['wait_for_network']['value'], +- 'InfoText': self.oe._(self.struct['advanced']['settings' +- ]['wait_for_network']['InfoText']), +- }, menuItem.getProperty('listTyp')) +- +- if self.struct['advanced']['settings']['wait_for_network' +- ]['value'] in self.struct['advanced']['settings' +- ]['wait_for_network_time']['parent']['value']: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct['advanced' +- ]['settings']['wait_for_network_time']['name' +- ]), { +- 'entry': 'wait_for_network_time', +- 'category': 'advanced', +- 'typ': self.struct['advanced']['settings' +- ]['wait_for_network_time']['type'], +- 'action': self.struct['advanced']['settings' +- ]['wait_for_network_time']['action'], +- 'value': self.struct['advanced']['settings' +- ]['wait_for_network_time']['value'], +- }, menuItem.getProperty('listTyp')) +- ++ self.struct['mounts']['settings' ++ ][mount] = tmp_mount ++ ++ self.oe.winOeMain.build_menu(self.struct) ++ + self.oe.set_busy(0) + self.oe.dbg_log('connman::menu_loader', 'exit_function', 0) + except Exception, e: +@@ -2750,7 +2478,7 @@ def edit_mount(self, listItem=None): + self.oe.dbg_log('connman::add_mount', 'enter_function', 0) + + self.configureMount = \ +- networkMount(listItem.getProperty('entry'), self.oe) ++ networkMount(listItem.getProperty('value'), self.oe) + del self.configureMount + + self.oe.dbg_log('connman::add_mount', 'enter_function', 0) +diff --git a/resources/lib/modules/services.py b/resources/lib/modules/services.py +index 4a0456d..8cd68dd 100755 +--- a/resources/lib/modules/services.py ++++ b/resources/lib/modules/services.py +@@ -55,7 +55,7 @@ def __init__(self, oeMain): + 'name': 32204, + 'value': '1', + 'action': 'initialize_samba', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 738, + }, + 'samba_secure': { +@@ -63,7 +63,7 @@ def __init__(self, oeMain): + 'name': 32202, + 'value': '0', + 'action': 'initialize_samba', +- 'typ': 'bool', ++ 'type': 'bool', + 'parent': {'entry': 'samba_autostart', + 'value': ['1']}, + 'InfoText': 739, +@@ -73,7 +73,7 @@ def __init__(self, oeMain): + 'name': 32106, + 'value': 'openelec', + 'action': 'initialize_samba', +- 'typ': 'text', ++ 'type': 'text', + 'parent': {'entry': 'samba_secure', + 'value': ['1']}, + 'InfoText': 740, +@@ -83,7 +83,7 @@ def __init__(self, oeMain): + 'name': 32107, + 'value': 'openelec', + 'action': 'initialize_samba', +- 'typ': 'text', ++ 'type': 'text', + 'parent': {'entry': 'samba_secure', + 'value': ['1']}, + 'InfoText': 741, +@@ -99,14 +99,14 @@ def __init__(self, oeMain): + 'name': 32205, + 'value': '0', + 'action': 'initialize_ssh', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 742, + }, 'ssh_unsecure': { + 'order': 2, + 'name': 32203, + 'value': '0', + 'action': 'initialize_ssh', +- 'typ': 'bool', ++ 'type': 'bool', + 'parent': {'entry': 'ssh_autostart', + 'value': ['1']}, + 'InfoText': 743, +@@ -121,7 +121,7 @@ def __init__(self, oeMain): + 'name': 32206, + 'value': '1', + 'action': 'initialize_avahi', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 744, + }}, + }, +@@ -134,7 +134,7 @@ def __init__(self, oeMain): + 'name': 32320, + 'value': '0', + 'action': 'initialize_cron', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 745, + }}, + }, +@@ -147,14 +147,14 @@ def __init__(self, oeMain): + 'name': 32341, + 'value': '0', + 'action': 'initialize_syslog', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 746, + }, 'remote_syslog_ip': { + 'order': 2, + 'name': 32342, + 'value': '0', + 'action': 'initialize_syslog', +- 'typ': 'ip', ++ 'type': 'ip', + 'parent': {'entry': 'remote_syslog_autostart', + 'value': ['1']}, + 'InfoText': 747, +@@ -169,12 +169,14 @@ def __init__(self, oeMain): + 'name': 32344, + 'value': '0', + 'action': 'init_bluetooth', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 720, + }}, + }, + } + ++ self.enabled = True ++ + self.oe = oeMain + + self.kernel_cmd = '/proc/cmdline' +@@ -262,73 +264,8 @@ def load_menu(self, focusItem): + + self.oe.dbg_log('services::load_menu', 'enter_function', 0) + +- for category in sorted(self.struct, key=lambda x: \ +- self.struct[x]['order']): +- if 'not_supported' in self.struct[category]: +- if self.arch \ +- in self.struct[category]['not_supported'] \ +- or not hasattr(self, category): +- continue +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[category]['name' +- ]), {'typ': 'separator'}, +- focusItem.getProperty('listTyp')) +- +- for setting in sorted(self.struct[category]['settings' +- ], key=lambda x: \ +- self.struct[category]['settings'][x]['order']): +- +- if 'not_supported' in self.struct[category]['settings'][setting]: +- +- #skip setting +- self.oe.dbg_log('services::load_menu', 'skip setting ' + setting, 0) +- +- else: +- +- dictProperties = { +- 'entry': setting, +- 'category': category, +- 'action': self.struct[category]['settings' +- ][setting]['action'], +- 'value': self.struct[category]['settings' +- ][setting]['value'], +- 'typ': self.struct[category]['settings' +- ][setting]['typ'], +- } +- +- if 'InfoText' in self.struct[category]['settings' +- ][setting]: +- dictProperties['InfoText'] = \ +- self.oe._(self.struct[category]['settings' +- ][setting]['InfoText']) +- +- if 'values' in self.struct[category]['settings' +- ][setting]: +- if len(self.struct[category]['settings' +- ][setting]['values']) > 0: +- dictProperties['values'] = \ +- ','.join(self.struct[category]['settings' +- ][setting]['values']) +- +- if not 'parent' in self.struct[category]['settings' +- ][setting]: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[category]['settings' +- ][setting]['name']), dictProperties, +- focusItem.getProperty('listTyp')) +- else: +- +- if self.struct[category]['settings' +- ][self.struct[category]['settings' +- ][setting]['parent']['entry']]['value' +- ] in self.struct[category]['settings' +- ][setting]['parent']['value']: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.struct[category]['settings' +- ][setting]['name']), +- dictProperties, +- focusItem.getProperty('listTyp')) +- ++ self.oe.winOeMain.build_menu(self.struct) ++ + self.oe.dbg_log('services::load_menu', 'exit_function', 0) + except Exception, e: + +@@ -345,8 +282,6 @@ def load_values(self): + + # SSH + if os.path.isfile(self.ssh_daemon): +- self.ssh = True +- + if os.path.exists(self.ssh_conf_dir + '/' + + self.ssh_conf_file): + ssh_file = open(self.ssh_conf_dir + '/' +@@ -386,37 +321,41 @@ def load_values(self): + cmd_args = cmd_file.read() + if 'ssh' in cmd_args: + self.struct['ssh']['settings']['ssh_autostart'] \ +- ['not_supported'] = True ++ ['hidden'] = 'true' + + cmd_file.close() +- ++ else: ++ self.struct['ssh']['hidden'] = 'true' ++ + if os.path.isfile(self.samba_nmbd) \ + and os.path.isfile(self.samba_smbd): +- self.samba = True + for entry in self.struct['samba']['settings']: + value = self.oe.read_setting('services', entry) + if not value is None: + self.struct['samba']['settings'][entry]['value' + ] = value +- ++ else: ++ self.struct['samba']['hidden'] = 'true' ++ + if os.path.isfile(self.avahi_daemon): +- self.avahi = True + value = self.oe.read_setting('services', + 'avahi_autostart') + if not value is None: + self.struct['avahi']['settings']['avahi_autostart' + ]['value'] = value +- ++ else: ++ self.struct['avahi']['hidden'] = 'true' ++ + if os.path.isfile(self.cron_daemon): +- self.cron = True + value = self.oe.read_setting('services', + 'cron_autostart') + if not value is None: + self.struct['cron']['settings']['cron_autostart' + ]['value'] = value +- ++ else: ++ self.struct['cron']['hidden'] = 'true' ++ + if os.path.isfile(self.syslog_daemon): +- self.syslog = True + value = self.oe.read_setting('services', + 'remote_syslog_autostart') + ip = self.oe.read_setting('services', 'remote_syslog_ip' +@@ -427,15 +366,18 @@ def load_values(self): + value + self.struct['syslog']['settings']['remote_syslog_ip' + ]['value'] = ip +- +- if os.path.isfile(self.bluetooth_daemon): +- self.bt = True ++ else: ++ self.struct['syslog']['hidden'] = 'true' ++ ++ if os.path.isfile(self.bluetooth_daemon): + value = self.oe.read_setting('services', + 'disable_bt') + if not value is None: + self.struct['bt']['settings']['disable_bt' + ]['value'] = value +- ++ else: ++ self.struct['bt']['hidden'] = 'true' ++ + + self.oe.dbg_log('services::load_values', 'exit_function', 0) + except Exception, e: +diff --git a/resources/lib/modules/system.py b/resources/lib/modules/system.py +index 35ebfdf..e1867fb 100755 +--- a/resources/lib/modules/system.py ++++ b/resources/lib/modules/system.py +@@ -60,16 +60,16 @@ def __init__(self, oeMain): + + self.oe = oeMain + +- self.config = { ++ self.struct = { + 'ident': { + 'order': 1, + 'name': 32189, +- 'not_supported': [], + 'settings': {'hostname': { ++ 'order': 1, + 'name': 32190, + 'value': 'OpenELEC', + 'action': 'set_hostname', +- 'typ': 'text', ++ 'type': 'text', + 'validate': '^([a-zA-Z0-9](?:[a-zA-Z0-9-\.]*[a-zA-Z0-9]))$', + 'InfoText': 710, + }}, +@@ -78,126 +78,134 @@ def __init__(self, oeMain): + 'order': 2, + 'name': 32009, + 'settings': {'KeyboardLayout1': { ++ 'order': 1, + 'name': 32010, + 'value': 'us', + 'action': 'set_keyboard_layout', +- 'typ': 'multivalue', ++ 'type': 'multivalue', + 'values': [], + 'InfoText': 711, + }, 'KeyboardLayout2': { ++ 'order': 2, + 'name': 32010, + 'value': 'us', + 'action': 'set_keyboard_layout', +- 'typ': 'multivalue', ++ 'type': 'multivalue', + 'values': [], + 'InfoText': 712, +- 'not_supported': ['RPi.arm'], + }, 'KeyboardType': { ++ 'order': 3, + 'name': 32330, + 'value': 'pc105', + 'action': 'set_keyboard_layout', +- 'typ': 'multivalue', ++ 'type': 'multivalue', + 'values': [], +- 'InfoText': 713, +- 'not_supported': ['RPi.arm'], ++ 'InfoText': 713, + }}, + }, + 'update': { + 'order': 3, + 'name': 32013, +- 'not_supported': [], + 'settings': {'AutoUpdate': { + 'name': 32014, + 'value': 'manual', + 'action': 'set_auto_update', +- 'typ': 'multivalue', ++ 'type': 'multivalue', + 'values': ['manual', 'auto'], + 'InfoText': 714, ++ 'order': 1, + }, 'UpdateNotify': { + 'name': 32365, + 'value': '1', + 'action': 'set_value', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 715, ++ 'order': 2, + }, 'CheckUpdate': { + 'name': 32362, + 'value': '', + 'action': 'manual_check_update', +- 'typ': 'button', ++ 'type': 'button', + 'InfoText': 716, ++ 'order': 3, + }}, + }, + 'driver': { + 'order': 4, + 'name': 32007, +- 'not_supported': [], + 'settings': {'lcd': { + 'name': 32008, + 'value': 'none', + 'action': 'set_lcd_driver', +- 'typ': 'multivalue', ++ 'type': 'multivalue', + 'values': [], + 'InfoText': 717, ++ 'order': 1, + }}, + }, + 'power': { + 'order': 5, + 'name': 32011, +- 'not_supported': [], + 'settings': {'enable_hdd_standby': { + 'name': 32347, + 'value': '0', + 'action': 'set_hdd_standby', +- 'typ': 'bool', ++ 'type': 'bool', + 'InfoText': 718, ++ 'order': 1, + }, 'hdd_standby': { + 'name': 32012, + 'value': '0', + 'action': 'set_hdd_standby', +- 'typ': 'num', ++ 'type': 'num', + 'parent': {'entry': 'enable_hdd_standby', + 'value': ['1']}, + 'InfoText': 719, ++ 'order': 2, + }}, + }, + 'backup': { + 'order': 7, + 'name': 32371, +- 'not_supported': [], + 'settings': {'backup': { + 'name': 32372, + 'value': '0', + 'action': 'do_backup', +- 'typ': 'button', ++ 'type': 'button', + 'InfoText': 722, ++ 'order': 1, + }, 'restore': { + 'name': 32373, + 'value': '0', + 'action': 'do_restore', +- 'typ': 'button', ++ 'type': 'button', + 'InfoText': 723, ++ 'order': 2, + }}, + }, + 'reset': { + 'order': 8, + 'name': 32323, +- 'not_supported': [], + 'settings': {'xbmc_reset': { + 'name': 32324, + 'value': '0', + 'action': 'reset_xbmc', +- 'typ': 'button', ++ 'type': 'button', + 'InfoText': 724, ++ 'order': 1, + }, 'oe_reset': { + 'name': 32325, + 'value': '0', + 'action': 'reset_oe', +- 'typ': 'button', ++ 'type': 'button', + 'InfoText': 725, ++ 'order': 2, + }}, + }, + } + ++ self.enabled = True ++ + self.kernel_cmd = '/proc/cmdline' + + self.lcd_dir = '/usr/lib/lcdproc/' +@@ -264,6 +272,20 @@ def start_service(self): + self.oe.dbg_log('system::start_service', 'ERROR: (' + + repr(e) + ')') + ++ def stop_service(self): ++ try: ++ ++ self.oe.dbg_log('system::stop_service', 'enter_function', ++ 0) ++ if hasattr(self, 'update_thread'): ++ self.update_thread.stop() ++ ++ self.oe.dbg_log('system::stop_service', 'exit_function', 0) ++ except Exception, e: ++ ++ self.oe.dbg_log('system::stop_service', 'ERROR: (' ++ + repr(e) + ')') ++ + def do_init(self): + try: + +@@ -290,31 +312,31 @@ def load_values(self): + + if not arrTypes is None: + +- self.config['keyboard']['settings']['KeyboardType' ++ self.struct['keyboard']['settings']['KeyboardType' + ]['values'] = arrTypes + + value = self.oe.read_setting('system', 'KeyboardType') + if not value is None: +- self.config['keyboard']['settings']['KeyboardType' ++ self.struct['keyboard']['settings']['KeyboardType' + ]['value'] = value + + if not arrLayouts is None: + +- self.config['keyboard']['settings']['KeyboardLayout1' ++ self.struct['keyboard']['settings']['KeyboardLayout1' + ]['values'] = arrLayouts +- self.config['keyboard']['settings']['KeyboardLayout2' ++ self.struct['keyboard']['settings']['KeyboardLayout2' + ]['values'] = arrLayouts + + value = self.oe.read_setting('system', 'KeyboardLayout1' + ) + if not value is None: +- self.config['keyboard']['settings' ++ self.struct['keyboard']['settings' + ]['KeyboardLayout1']['value'] = value + + value = self.oe.read_setting('system', 'KeyboardLayout2' + ) + if not value is None: +- self.config['keyboard']['settings' ++ self.struct['keyboard']['settings' + ]['KeyboardLayout2']['value'] = value + + if not arrTypes == None: +@@ -322,64 +344,65 @@ def load_values(self): + else: + self.rpi_keyboard_layouts = True + ++ if self.arch == "RPi.arm": ++ self.struct['keyboard']['settings'][ ++ 'KeyboardLayout2']['hidden'] = 'true' ++ self.struct['keyboard']['settings'][ ++ 'KeyboardType']['hidden'] = 'true' ++ + # Hostname + value = self.oe.read_setting('system', 'hostname') + if not value is None: +- self.config['ident']['settings']['hostname']['value'] = \ ++ self.struct['ident']['settings']['hostname']['value'] = \ + value + + # LCD Driver + if not arrLcd is None: +- self.config['driver']['settings']['lcd']['values'] = \ ++ self.struct['driver']['settings']['lcd']['values'] = \ + arrLcd + + value = self.oe.read_setting('system', 'lcd') + if not value is None: +- self.config['driver']['settings']['lcd']['value'] = \ ++ self.struct['driver']['settings']['lcd']['value'] = \ + value + + # HDD Standby + value = self.oe.read_setting('system', 'enable_hdd_standby') + if not value is None: +- self.config['power']['settings']['enable_hdd_standby']['value' ++ self.struct['power']['settings']['enable_hdd_standby']['value' + ] = value + + value = self.oe.read_setting('system', 'hdd_standby') + if not value is None: +- self.config['power']['settings']['hdd_standby']['value' ++ self.struct['power']['settings']['hdd_standby']['value' + ] = value + + # AutoUpdate + value = self.oe.read_setting('system', 'AutoUpdate') + if not value is None: +- self.config['update']['settings']['AutoUpdate']['value' ++ self.struct['update']['settings']['AutoUpdate']['value' + ] = value + + value = self.oe.read_setting('system', 'UpdateNotify') + if not value is None: +- self.config['update']['settings']['UpdateNotify' ++ self.struct['update']['settings']['UpdateNotify' + ]['value'] = value + + # AutoUpdate = manual by environment var. +- if 'UPDATE_SUPPORT' in os.environ: +- if os.environ['UPDATE_SUPPORT'] == 'false': +- self.config['update']['settings']['AutoUpdate']['value' +- ] = 'manual' +- +- self.config['update']['settings']['AutoUpdate']['not_supported' +- ] = [self.arch] +- +- self.config['update']['settings']['CheckUpdate']['not_supported' +- ] = [self.arch] ++ ++ if os.environ.get('UPDATE_SUPPORT', 'true') == 'false': ++ ++ self.update_disabled = True ++ ++ self.struct['update']['hidden'] = 'true' ++ ++ self.struct['update']['settings']['AutoUpdate']['value' ++ ] = 'manual' + +- # AutoUpdate File and URL +- value = self.oe.read_setting('system', 'update_file') +- if value != None and value != '': +- self.update_file = value +- value = self.oe.read_setting('system', 'update_url') +- if value != None and value != '': +- self.update_url = value ++ self.struct['update']['settings']['UpdateNotify' ++ ]['value'] = '0' + ++ xbmc.log(repr(self.struct)) + self.oe.dbg_log('system::load_values', 'exit_function', 0) + except Exception, e: + +@@ -392,80 +415,8 @@ def load_menu(self, focusItem): + + self.oe.dbg_log('system::load_menu', 'enter_function', 0) + +- selectedPos = \ +- self.oe.winOeMain.getControl(self.oe.winOeMain.guiList).getSelectedPosition() +- +- for category in sorted(self.config, key=lambda x: \ +- self.config[x]['order']): +- if 'not_supported' in self.config[category]: +- if self.arch \ +- in self.config[category]['not_supported']: +- continue +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.config[category]['name' +- ]), {'typ': 'separator'}, +- focusItem.getProperty('listTyp')) +- +- for setting in sorted(self.config[category]['settings' +- ]): +- +- if 'not_supported' in self.config[category]['settings'][setting]: +- if self.arch \ +- in self.config[category]['settings'][setting]['not_supported']: +- continue +- +- dictProperties = { +- 'entry': setting, +- 'category': category, +- 'action': self.config[category]['settings' +- ][setting]['action'], +- 'value': self.config[category]['settings' +- ][setting]['value'], +- 'typ': self.config[category]['settings' +- ][setting]['typ'], +- } +- +- if 'InfoText' in self.config[category]['settings' +- ][setting]: +- dictProperties['InfoText'] = \ +- self.oe._(self.config[category]['settings' +- ][setting]['InfoText']) +- +- if 'validate' in self.config[category]['settings' +- ][setting]: +- dictProperties['validate'] = \ +- self.config[category]['settings' +- ][setting]['validate'] +- +- if 'values' in self.config[category]['settings' +- ][setting]: +- if len(self.config[category]['settings' +- ][setting]['values']) > 0: +- dictProperties['values'] = \ +- ','.join(self.config[category]['settings' +- ][setting]['values']) +- +- if not 'parent' in self.config[category]['settings' +- ][setting]: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.config[category]['settings' +- ][setting]['name']), dictProperties, +- focusItem.getProperty('listTyp')) +- else: +- +- if self.config[category]['settings' +- ][self.config[category]['settings' +- ][setting]['parent']['entry']]['value' +- ] in self.config[category]['settings' +- ][setting]['parent']['value']: +- +- self.oe.winOeMain.addConfigItem(self.oe._(self.config[category]['settings' +- ][setting]['name']), +- dictProperties, +- focusItem.getProperty('listTyp')) +- +- self.oe.winOeMain.getControl(self.oe.winOeMain.guiList).selectItem(selectedPos) +- ++ self.oe.winOeMain.build_menu(self.struct) ++ + self.oe.dbg_log('system::load_menu', 'exit_function', 0) + except Exception, e: + +@@ -477,7 +428,7 @@ def set_value(self, listItem): + + self.oe.dbg_log('system::set_value', 'enter_function', 0) + +- self.config[listItem.getProperty('category')]['settings' ++ self.struct[listItem.getProperty('category')]['settings' + ][listItem.getProperty('entry')]['value'] = \ + listItem.getProperty('value') + +@@ -504,34 +455,34 @@ def set_keyboard_layout(self, listItem=None): + if self.keyboard_layouts == True: + + self.oe.dbg_log('system::set_keyboard_layout', +- unicode(self.config['keyboard']['settings' ++ unicode(self.struct['keyboard']['settings' + ]['KeyboardLayout1']['value']) + ',' +- + unicode(self.config['keyboard']['settings' ++ + unicode(self.struct['keyboard']['settings' + ]['KeyboardLayout2']['value']) + ' ' +- + '-model ' + unicode(self.config['keyboard' ++ + '-model ' + unicode(self.struct['keyboard' + ]['settings']['KeyboardType']['value']), 1) + + if not os.path.exists(os.path.dirname(self.udev_keyboard_file)): + os.makedirs(os.path.dirname(self.udev_keyboard_file)) + + config_file = open(self.udev_keyboard_file, 'w') +- config_file.write('XKBMODEL="' + self.config['keyboard' ++ config_file.write('XKBMODEL="' + self.struct['keyboard' + ]['settings']['KeyboardType']['value'] + + '"\n') + config_file.write('XKBVARIANT=""\n') +- config_file.write('XKBLAYOUT="' + self.config['keyboard' ++ config_file.write('XKBLAYOUT="' + self.struct['keyboard' + ]['settings']['KeyboardLayout1']['value'] +- + ',' + self.config['keyboard']['settings' ++ + ',' + self.struct['keyboard']['settings' + ]['KeyboardLayout2']['value'] + '"\n') + config_file.write('XKBOPTIONS="grp:alt_shift_toggle"\n') + config_file.close() + + parameters = ['-display ' + os.environ['DISPLAY'], +- '-layout ' + self.config['keyboard' ++ '-layout ' + self.struct['keyboard' + ]['settings']['KeyboardLayout1']['value'] +- + ',' + self.config['keyboard']['settings' ++ + ',' + self.struct['keyboard']['settings' + ]['KeyboardLayout2']['value'], '-model ' +- + unicode(self.config['keyboard']['settings' ++ + unicode(self.struct['keyboard']['settings' + ]['KeyboardType']['value']), + '-option "grp:alt_shift_toggle"'] + +@@ -541,10 +492,10 @@ def set_keyboard_layout(self, listItem=None): + elif self.rpi_keyboard_layouts == True: + + self.oe.dbg_log('system::set_keyboard_layout', +- unicode(self.config['keyboard']['settings' ++ unicode(self.struct['keyboard']['settings' + ]['KeyboardLayout1']['value']) , 1) + +- parameter = self.config['keyboard' ++ parameter = self.struct['keyboard' + ]['settings']['KeyboardLayout1']['value'] + + command = 'loadkmap < `ls -1 %s/*/%s.bmap`' % (self.rpi_keyboard_info, parameter) +@@ -577,21 +528,21 @@ def set_hostname(self, listItem=None): + if not listItem == None: + self.set_value(listItem) + +- if not self.config['ident']['settings']['hostname']['value' +- ] is None and not self.config['ident']['settings' ++ if not self.struct['ident']['settings']['hostname']['value' ++ ] is None and not self.struct['ident']['settings' + ]['hostname']['value'] == '': + + self.oe.dbg_log('system::set_hostname', +- self.config['ident']['settings' ++ self.struct['ident']['settings' + ]['hostname']['value'], 1) + + hostname = open('/proc/sys/kernel/hostname', 'w') +- hostname.write(self.config['ident']['settings' ++ hostname.write(self.struct['ident']['settings' + ]['hostname']['value']) + hostname.close() + + hostname = open('%s/hostname' % self.oe.CONFIG_CACHE, 'w') +- hostname.write(self.config['ident']['settings' ++ hostname.write(self.struct['ident']['settings' + ]['hostname']['value']) + hostname.close() + +@@ -605,7 +556,7 @@ def set_hostname(self, listItem=None): + user_hosts.close() + + hosts.write('127.0.0.1\tlocalhost %s\n' +- % self.config['ident']['settings' ++ % self.struct['ident']['settings' + ]['hostname']['value']) + hosts.close() + else: +@@ -637,16 +588,16 @@ def set_lcd_driver(self, listItem=None): + else: + lcd_config_file = '/etc/LCDd.conf' + +- if not self.config['driver']['settings']['lcd']['value'] \ +- is None and not self.config['driver']['settings']['lcd' ++ if not self.struct['driver']['settings']['lcd']['value'] \ ++ is None and not self.struct['driver']['settings']['lcd' + ]['value'] == 'none': + + self.oe.dbg_log('system::set_lcd_driver', +- self.config['driver']['settings']['lcd' ++ self.struct['driver']['settings']['lcd' + ]['value'], 1) + + parameters = ['-c ' + lcd_config_file, '-d ' +- + self.config['driver']['settings']['lcd' ++ + self.struct['driver']['settings']['lcd' + ]['value'], '-s true'] + + os.system('killall LCDd') +@@ -679,13 +630,13 @@ def set_hdd_standby(self, listItem=None): + if not listItem == None: + self.set_value(listItem) + +- if self.config['power']['settings']['hdd_standby']['value'] \ +- != None and self.config['power']['settings' ++ if self.struct['power']['settings']['hdd_standby']['value'] \ ++ != None and self.struct['power']['settings' + ]['hdd_standby']['value'] != '0' \ +- and self.config['power']['settings' ++ and self.struct['power']['settings' + ]['enable_hdd_standby']['value'] == '1': + +- value = int(self.config['power']['settings' ++ value = int(self.struct['power']['settings' + ]['hdd_standby']['value']) #* 12 + + #find system hdd +@@ -765,15 +716,17 @@ def set_auto_update(self, listItem=None): + if not listItem == None: + self.set_value(listItem) + +- if not hasattr(self, 'update_thread'): +- self.update_thread = updateThread(self.oe) +- self.update_thread.start() +- else: +- self.update_thread.wait_evt.set() ++ if not hasattr(self, 'update_disabled'): ++ ++ if not hasattr(self, 'update_thread'): ++ self.update_thread = updateThread(self.oe) ++ self.update_thread.start() ++ else: ++ self.update_thread.wait_evt.set() + +- self.oe.dbg_log('system::set_auto_update', +- unicode(self.config['update']['settings' +- ]['AutoUpdate']['value']), 1) ++ self.oe.dbg_log('system::set_auto_update', ++ unicode(self.struct['update']['settings' ++ ]['AutoUpdate']['value']), 1) + + self.oe.dbg_log('system::set_auto_update', 'exit_function', + 0) +@@ -913,13 +866,13 @@ def check_updates_v2(self, force=False): + self.update_file = self.download_url_v2 % (update_json['data']['folder'], + update_json['data']['update']) + +- if self.config['update']['settings']['UpdateNotify' ++ if self.struct['update']['settings']['UpdateNotify' + ]['value'] == '1': + xbmc.executebuiltin('Notification(' + + self.oe._(32363).encode('utf-8') + ', ' + + self.oe._(32364).encode('utf-8') + ')') + +- if (self.config['update']['settings']['AutoUpdate']['value' ++ if (self.struct['update']['settings']['AutoUpdate']['value' + ] == 'manual' and force == True): + silent = False + xbmcDialog = xbmcgui.Dialog() +@@ -935,7 +888,7 @@ def check_updates_v2(self, force=False): + self.update_in_progress = True + self.do_autoupdate() + +- if (self.config['update']['settings']['AutoUpdate']['value' ++ if (self.struct['update']['settings']['AutoUpdate']['value' + ] == 'auto' and force == False): + + self.update_in_progress = True +@@ -966,7 +919,7 @@ def do_autoupdate(self, listItem=None, silent=False): + + self.update_file = self.update_file.split('/')[-1] + +- if self.config['update']['settings']['UpdateNotify' ++ if self.struct['update']['settings']['UpdateNotify' + ]['value'] == '1': + xbmc.executebuiltin('Notification(' + + self.oe._(32363) + ', ' +@@ -981,7 +934,7 @@ def do_autoupdate(self, listItem=None, silent=False): + self.temp_folder + 'oe_update/', silent) \ + == 1: + +- if self.config['update']['settings' ++ if self.struct['update']['settings' + ]['UpdateNotify']['value'] == '1': + xbmc.executebuiltin('Notification(' + + self.oe._(32363) + ', ' +@@ -1281,7 +1234,7 @@ def do_wizard(self): + self.oe.winOeMain.set_wizard_title(self.oe._(32003)) + self.oe.winOeMain.set_wizard_text(self.oe._(32304)) + self.oe.winOeMain.set_wizard_button_title(self.oe._(32308)) +- self.oe.winOeMain.set_wizard_button_1(self.config['ident' ++ self.oe.winOeMain.set_wizard_button_1(self.struct['ident' + ]['settings']['hostname']['value'], self, + 'wizard_set_hostname') + +@@ -1297,7 +1250,7 @@ def wizard_set_hostname(self): + self.oe.dbg_log('system::wizard_set_hostname', + 'enter_function', 0) + +- currentHostname = self.config['ident']['settings' ++ currentHostname = self.struct['ident']['settings' + ]['hostname']['value'] + + xbmcKeyboard = xbmc.Keyboard(currentHostname) +@@ -1307,7 +1260,7 @@ def wizard_set_hostname(self): + + if xbmcKeyboard.isConfirmed(): + result_is_valid = True +- validate_string = self.config['ident']['settings' ++ validate_string = self.struct['ident']['settings' + ]['hostname']['validate'] + if validate_string != '': + if not re.search(validate_string, +@@ -1317,13 +1270,13 @@ def wizard_set_hostname(self): + result_is_valid = True + + if xbmcKeyboard.isConfirmed(): +- self.config['ident']['settings']['hostname']['value'] = \ ++ self.struct['ident']['settings']['hostname']['value'] = \ + xbmcKeyboard.getText() + self.set_hostname() +- self.oe.winOeMain.getControl(1401).setLabel(self.config['ident' ++ self.oe.winOeMain.getControl(1401).setLabel(self.struct['ident' + ]['settings']['hostname']['value']) + self.oe.write_setting('system', 'hostname', +- self.config['ident']['settings']['hostname' ++ self.struct['ident']['settings']['hostname' + ]['value']) + + self.oe.dbg_log('system::wizard_set_hostname', +diff --git a/resources/lib/oeWindows.py b/resources/lib/oeWindows.py +index ea33749..8f23699 100755 +--- a/resources/lib/oeWindows.py ++++ b/resources/lib/oeWindows.py +@@ -85,25 +85,26 @@ def onInit(self): + self.oe.dictModules[x].menu.keys()): + + self.oe.dbg_log('init module', strModule, 0) +- if hasattr(self.oe.dictModules[strModule], 'do_init'): +- Thread(target=self.oe.dictModules[strModule].do_init(), +- args=()).start() +- +- for men in self.oe.dictModules[strModule].menu: +- dictProperties = {'modul': strModule, +- 'listTyp': self.oe.listObject[self.oe.dictModules[strModule].menu[men]['listTyp' +- ]], +- 'menuLoader': self.oe.dictModules[strModule].menu[men]['menuLoader' +- ]} +- +- if 'InfoText' \ +- in self.oe.dictModules[strModule].menu[men]: +- dictProperties['InfoText'] = \ +- self.oe._(self.oe.dictModules[strModule].menu[men]['InfoText' +- ]) +- +- self.addMenuItem(self.oe.dictModules[strModule].menu[men]['name' +- ], dictProperties) ++ if self.oe.dictModules[strModule].enabled: ++ if hasattr(self.oe.dictModules[strModule], 'do_init'): ++ Thread(target=self.oe.dictModules[strModule].do_init(), ++ args=()).start() ++ ++ for men in self.oe.dictModules[strModule].menu: ++ dictProperties = {'modul': strModule, ++ 'listTyp': self.oe.listObject[self.oe.dictModules[strModule].menu[men]['listTyp' ++ ]], ++ 'menuLoader': self.oe.dictModules[strModule].menu[men]['menuLoader' ++ ]} ++ ++ if 'InfoText' \ ++ in self.oe.dictModules[strModule].menu[men]: ++ dictProperties['InfoText'] = \ ++ self.oe._(self.oe.dictModules[strModule].menu[men]['InfoText' ++ ]) ++ ++ self.addMenuItem(self.oe.dictModules[strModule].menu[men]['name' ++ ], dictProperties) + + self.setFocusId(self.guiMenList) + self.onFocus(self.guiMenList) +@@ -155,6 +156,76 @@ def addConfigItem( + self.oe.dbg_log('oeWindows.mainWindow::addConfigItem(' + + strName + ')', 'ERROR: (' + repr(e) + ')') + ++ def build_menu(self, struct, fltr=[], optional='0'): ++ ++ try: ++ ++ for category in sorted(struct, key=lambda x: struct[x]['order']): ++ ++ if not 'hidden' in struct[category]: ++ ++ if fltr == []: ++ self.addConfigItem(self.oe._(struct[category]['name' ++ ]), {'typ': 'separator'}, 1100) ++ ++ else: ++ if category not in fltr: ++ continue ++ ++ for entry in sorted(struct[category]['settings'], ++ key=lambda x: struct[category]['settings' ++ ][x]['order']): ++ ++ setting = struct[category]['settings'][entry] ++ ++ if not 'hidden' in setting: ++ ++ dictProperties = { ++ 'value': setting['value'], ++ 'typ': setting['type'], ++ 'entry': entry, ++ 'category': category, ++ 'action': setting['action'], ++ } ++ ++ if 'InfoText' in setting: ++ dictProperties['InfoText'] = \ ++ self.oe._(setting['InfoText']) ++ ++ if 'validate' in setting: ++ dictProperties['validate'] = \ ++ setting['validate'] ++ ++ if 'values' in setting: ++ dictProperties['values'] = \ ++ ','.join(setting['values']) ++ ++ if isinstance(setting['name'], basestring): ++ name = setting['name'] ++ else: ++ name = self.oe._(setting['name']) ++ ++ if not 'parent' in setting: ++ ++ self.addConfigItem(name, ++ dictProperties, ++ 1100) ++ else: ++ ++ if struct[category]['settings' ++ ][setting['parent']['entry']]['value' ++ ] in setting['parent']['value']: ++ ++ if not 'optional' in setting or \ ++ ('optional' in setting and optional != '0'): ++ self.addConfigItem(name, ++ dictProperties, ++ 1100) ++ ++ except Exception, e: ++ ++ self.oe.dbg_log('oeWindows.mainWindow::build_menu', 'ERROR: (' + repr(e) + ')') ++ + def showButton( + self, + number, +diff --git a/resources/skins/Default/720p/mainWindow.xml b/resources/skins/Default/720p/mainWindow.xml +index a632515..dc035ce 100755 +--- a/resources/skins/Default/720p/mainWindow.xml ++++ b/resources/skins/Default/720p/mainWindow.xml +@@ -371,7 +371,7 @@ + FF757677 + white + ListItem.Property(value) +- !StringCompare(ListItem.Property(Typ), bool) ++ !StringCompare(ListItem.Property(Typ), bool) + !StringCompare(ListItem.Property(Typ), button) + + + +@@ -442,7 +442,7 @@ + 2 + 796 + 38 +- Control.HasFocus(1100) ++ Control.HasFocus(1100) + button-focus2.png + + +@@ -452,7 +452,7 @@ + 20 + white + ListItem.Label +- true ++ true + + + right +@@ -462,7 +462,7 @@ + 20 + white + ListItem.Property(value) +- !StringCompare(ListItem.Property(Typ), bool) ++ !StringCompare(ListItem.Property(Typ), bool) + !StringCompare(ListItem.Property(Typ), button) + + + +-- +1.8.1.6 + + +From 555b10b6bb53088aeaeab8c90e122e00e4187a87 Mon Sep 17 00:00:00 2001 +From: lfiebach +Date: Fri, 2 Aug 2013 17:56:23 +0200 +Subject: [PATCH 3/3] fix wizard + +--- + addon.xml | 2 +- + changelog.txt | 3 +++ + resources/lib/modules/services.py | 2 +- + resources/lib/oeWindows.py | 8 ++++---- + 4 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/addon.xml b/addon.xml +index c130660..f9741f3 100755 +--- a/addon.xml ++++ b/addon.xml +@@ -1,7 +1,7 @@ + + + + +diff --git a/changelog.txt b/changelog.txt +index a83a37d..eb50d6f 100755 +--- a/changelog.txt ++++ b/changelog.txt +@@ -1,3 +1,6 @@ ++2013-08-02 v0.1.32 ++ (fix) wizard fail after menu redesign ++ + 2013-07-29 v0.1.31 + (change) menu loader redesign + (fix) kill update thread on exit +diff --git a/resources/lib/modules/services.py b/resources/lib/modules/services.py +index 8cd68dd..37aa0c5 100755 +--- a/resources/lib/modules/services.py ++++ b/resources/lib/modules/services.py +@@ -859,7 +859,7 @@ def set_wizard_buttons(self): + self.oe.winOeMain.set_wizard_radiobutton_1(self.oe._(32201), + self, 'wizard_set_ssh') + +- if hasattr(self, 'samba'): ++ if not 'hidden' in self.struct['samba']: + if self.struct['samba']['settings']['samba_autostart' + ]['value'] == '1': + self.oe.winOeMain.set_wizard_radiobutton_2(self.oe._(32200), +diff --git a/resources/lib/oeWindows.py b/resources/lib/oeWindows.py +index 8f23699..10cd60b 100755 +--- a/resources/lib/oeWindows.py ++++ b/resources/lib/oeWindows.py +@@ -1180,7 +1180,7 @@ def get_keyboard_layout(self): + try: + + current_layout = self.oe.dictModules['system' +- ].config['keyboard']['settings']['KeyboardLayout1' ++ ].struct['keyboard']['settings']['KeyboardLayout1' + ]['value'] + + return current_layout +@@ -1196,16 +1196,16 @@ def select_keyboard(self): + select_window = selectWindow('selectWindow.xml', + self.oe.__cwd__, 'Default', oeMain=self.oe) + select_window.defaultValue = self.oe.dictModules['system' +- ].config['keyboard']['settings']['KeyboardLayout1' ++ ].struct['keyboard']['settings']['KeyboardLayout1' + ]['value'] + select_window.availValues = \ +- ','.join(self.oe.dictModules['system'].config['keyboard' ++ ','.join(self.oe.dictModules['system'].struct['keyboard' + ]['settings']['KeyboardLayout1']['values']) + self.oe.set_busy(0) + select_window.doModal() + + if select_window.defaultValue != select_window.result: +- self.oe.dictModules['system'].config['keyboard' ++ self.oe.dictModules['system'].struct['keyboard' + ]['settings']['KeyboardLayout1']['value'] = \ + select_window.result + self.oe.write_setting('system', 'KeyboardLayout1', +-- +1.8.1.6 + diff --git a/packages/mediacenter/service.openelec.settings/unpack b/packages/mediacenter/service.openelec.settings/unpack index 09ae905c23..6c5b6426b7 100755 --- a/packages/mediacenter/service.openelec.settings/unpack +++ b/packages/mediacenter/service.openelec.settings/unpack @@ -27,3 +27,10 @@ ZIP_PKG="`echo $PKG_URL | sed 's%.*/\(.*\)$%\1%'`" mkdir -p $BUILD/${PKG_NAME}-${PKG_VERSION} unzip $SOURCES/$1/$ZIP_PKG -d $BUILD/${PKG_NAME}-${PKG_VERSION} >/dev/null 2>&1 + +echo "### Applying upstream patches ###" + +for patch in `ls $PKG_DIR/patches.upstream/*.patch`; do + cat $patch | patch -d \ + `echo $BUILD/$PKG_NAME-$PKG_VERSION | cut -f1 -d\ ` -p1 +done