From 656e94a0da1582422cab38fd0c11fc180d7f39a3 Mon Sep 17 00:00:00 2001 From: Jay M Date: Thu, 31 Oct 2019 06:57:54 -0700 Subject: [PATCH 01/51] initial 2to3 conversion remove default encoding Handle bytes-strings conversion --- addon.xml | 2 +- src/default.py | 4 +- src/oe.py | 81 +++++++------- src/resources/lib/modules/about.py | 12 +-- src/resources/lib/modules/bluetooth.py | 140 ++++++++++++------------- src/resources/lib/modules/connman.py | 136 ++++++++++++------------ src/resources/lib/modules/services.py | 38 +++---- src/resources/lib/modules/system.py | 60 +++++------ src/resources/lib/modules/updates.py | 48 ++++----- src/resources/lib/modules/xdbus.py | 16 +-- src/resources/lib/oeWindows.py | 84 +++++++-------- src/service.py | 14 +-- 12 files changed, 318 insertions(+), 317 deletions(-) diff --git a/addon.xml b/addon.xml index 870cb373..b3af2b5c 100644 --- a/addon.xml +++ b/addon.xml @@ -4,7 +4,7 @@ version="@ADDONVERSION@" provider-name="libreelec.tv"> - + diff --git a/src/default.py b/src/default.py index 1d9184c2..ae1077f8 100644 --- a/src/default.py +++ b/src/default.py @@ -15,7 +15,7 @@ try: sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect('/var/run/service.libreelec.settings.sock') - sock.send('openConfigurationWindow') + sock.send(bytes('openConfigurationWindow', 'utf-8')) sock.close() -except Exception, e: +except Exception as e: xbmc.executebuiltin('Notification("LibreELEC", "%s", 5000, "%s/icon.png")' % (_(32390).encode('utf-8'), __media__)) diff --git a/src/oe.py b/src/oe.py index 6507f15c..c6930f0b 100644 --- a/src/oe.py +++ b/src/oe.py @@ -11,7 +11,7 @@ import re import locale import sys -import urllib2 +import urllib.request, urllib.error, urllib.parse import time import tarfile import traceback @@ -23,6 +23,7 @@ import hashlib, binascii from xml.dom import minidom +import imp __author__ = 'LibreELEC' __scriptid__ = 'service.libreelec.settings' @@ -74,13 +75,13 @@ ## set default encoding encoding = locale.getpreferredencoding(do_setlocale=True) -reload(sys) -sys.setdefaultencoding(encoding) +imp.reload(sys) +# sys.setdefaultencoding(encoding) ## load oeSettings modules import oeWindows -xbmc.log('## LibreELEC Addon ## ' + unicode(__addon__.getAddonInfo('version'))) +xbmc.log('## LibreELEC Addon ## ' + str(__addon__.getAddonInfo('version'))) def _(code): @@ -125,7 +126,7 @@ def notify(title, message, icon='icon'): ) xbmc.executebuiltin(msg) dbg_log('oe::notify', 'exit_function', 0) - except Exception, e: + except Exception as e: dbg_log('oe::notify', 'ERROR: (' + repr(e) + ')') @@ -141,10 +142,10 @@ def execute(command_line, get_result=0): process = subprocess.Popen(command_line, shell=True, close_fds=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) process.wait() for line in process.stdout.readlines(): - result = result + line + result = result + line.decode('utf-8') return result dbg_log('oe::execute', 'exit_function', 0) - except Exception, e: + except Exception as e: dbg_log('oe::execute', 'ERROR: (' + repr(e) + ')') @@ -155,7 +156,7 @@ def enable_service(service): if os.path.exists('%s/services/%s.disabled' % (CONFIG_CACHE, service)): pass service_file = '%s/services/%s' % (CONFIG_CACHE, service) - except Exception, e: + except Exception as e: dbg_log('oe::enable_service', 'ERROR: (' + repr(e) + ')') @@ -175,7 +176,7 @@ def set_service_option(service, option, value): lines.append('%s=%s' % (option, value)) with open(conf_file_name, 'w') as conf_file: conf_file.write('\n'.join(lines) + '\n') - except Exception, e: + except Exception as e: dbg_log('oe::set_service_option', 'ERROR: (' + repr(e) + ')') @@ -194,7 +195,7 @@ def get_service_option(service, option, default=None): if '=' in line: default = line.strip().split('=')[-1] return default - except Exception, e: + except Exception as e: dbg_log('oe::get_service_option', 'ERROR: (' + repr(e) + ')') @@ -204,7 +205,7 @@ def get_service_state(service): return '1' else: return '0' - except Exception, e: + except Exception as e: dbg_log('oe::get_service_state', 'ERROR: (' + repr(e) + ')') @@ -247,7 +248,7 @@ def set_service(service, options, state): for svc in defaults._services[service]: execute('systemctl restart %s' % svc) dbg_log('oe::set_service', 'exit_function', 0) - except Exception, e: + except Exception as e: dbg_log('oe::set_service', 'ERROR: (' + repr(e) + ')') @@ -260,19 +261,19 @@ def load_file(filename): else: content = '' return content.strip() - except Exception, e: + except Exception as e: dbg_log('oe::load_file(' + filename + ')', 'ERROR: (' + repr(e) + ')') def url_quote(var): - return urllib2.quote(var, safe="") + return urllib.parse.quote(var, safe="") def load_url(url): try: - request = urllib2.Request(url) - response = urllib2.urlopen(request) + request = urllib.request.Request(url) + response = urllib.request.urlopen(request) content = response.read() - return content.strip() - except Exception, e: + return content.decode('utf-8').strip() + except Exception as e: dbg_log('oe::load_url(' + url + ')', 'ERROR: (' + repr(e) + ')') @@ -282,7 +283,7 @@ def download_file(source, destination, silent=False): if silent == False: download_dlg = xbmcgui.DialogProgress() download_dlg.create('LibreELEC', _(32181).encode('utf-8'), ' ', ' ') - response = urllib2.urlopen(urllib2.quote(source, safe=':/')) + response = urllib.request.urlopen(urllib.parse.quote(source, safe=':/')) total_size = int(response.info().getheader('Content-Length').strip()) minutes = 0 seconds = 0 @@ -321,7 +322,7 @@ def download_file(source, destination, silent=False): local_file.close() response.close() return destination - except Exception, e: + except Exception as e: dbg_log('oe::download_file(' + source + ', ' + destination + ')', 'ERROR: (' + repr(e) + ')') @@ -383,7 +384,7 @@ def extract_file(filename, extract, destination, silent=False): local_file.close() response.close() return 1 - except Exception, e: + except Exception as e: dbg_log('oe::extract_file', 'ERROR: (' + repr(e) + ')') @@ -432,7 +433,7 @@ def copy_file(source, destination, silent=False): source_file.close() destination_file.close() return destination - except Exception, e: + except Exception as e: dbg_log('oe::copy_file(' + source + ', ' + destination + ')', 'ERROR: (' + repr(e) + ')') @@ -449,8 +450,8 @@ def set_busy(state): __busy__ = __busy__ + 1 else: __busy__ = __busy__ - 1 - dbg_log('oe::set_busy', '__busy__ = ' + unicode(__busy__), 0) - except Exception, e: + dbg_log('oe::set_busy', '__busy__ = ' + str(__busy__), 0) + except Exception as e: dbg_log('oe::set_busy', 'ERROR: (' + repr(e) + ')', 4) @@ -458,12 +459,12 @@ def start_service(): global dictModules, __oe__ try: __oe__.is_service = True - for strModule in sorted(dictModules, key=lambda x: dictModules[x].menu.keys()): + for strModule in sorted(dictModules, key=lambda x: list(dictModules[x].menu.keys())): module = dictModules[strModule] if hasattr(module, 'start_service') and module.ENABLED: module.start_service() __oe__.is_service = False - except Exception, e: + except Exception as e: dbg_log('oe::start_service', 'ERROR: (' + repr(e) + ')') @@ -475,7 +476,7 @@ def stop_service(): if hasattr(module, 'stop_service') and module.ENABLED: module.stop_service() xbmc.log('## LibreELEC Addon ## STOP SERVICE DONE !') - except Exception, e: + except Exception as e: dbg_log('oe::stop_service', 'ERROR: (' + repr(e) + ')') @@ -485,7 +486,7 @@ def openWizard(): winOeMain = oeWindows.wizard('service-LibreELEC-Settings-wizard.xml', __cwd__, 'Default', oeMain=__oe__) winOeMain.doModal() winOeMain = oeWindows.mainWindow('service-LibreELEC-Settings-mainWindow.xml', __cwd__, 'Default', oeMain=__oe__) # None - except Exception, e: + except Exception as e: dbg_log('oe::openWizard', 'ERROR: (' + repr(e) + ')') @@ -534,7 +535,7 @@ def openConfigurationWindow(): else: pass - except Exception, e: + except Exception as e: dbg_log('oe::openConfigurationWindow', 'ERROR: (' + repr(e) + ')') def standby_devices(): @@ -542,7 +543,7 @@ def standby_devices(): try: if 'bluetooth' in dictModules: dictModules['bluetooth'].standby_devices() - except Exception, e: + except Exception as e: dbg_log('oe::standby_devices', 'ERROR: (' + repr(e) + ')') def load_config(): @@ -570,7 +571,7 @@ def load_config(): xml_conf = minidom.parseString(config_text) conf_lock = False return xml_conf - except Exception, e: + except Exception as e: dbg_log('oe::load_config', 'ERROR: (' + repr(e) + ')') @@ -584,7 +585,7 @@ def save_config(xml_conf): config_file.write(xml_conf.toprettyxml()) config_file.close() conf_lock = False - except Exception, e: + except Exception as e: dbg_log('oe::save_config', 'ERROR: (' + repr(e) + ')') @@ -595,7 +596,7 @@ def read_module(module): for xml_setting in xml_settings: for xml_modul in xml_setting.getElementsByTagName(module): return xml_modul - except Exception, e: + except Exception as e: dbg_log('oe::read_module', 'ERROR: (' + repr(e) + ')') @@ -616,7 +617,7 @@ def read_node(node_name): else: value[xml_main_node.nodeName][xml_sub_node.nodeName][xml_value.nodeName] = '' return value - except Exception, e: + except Exception as e: dbg_log('oe::read_node', 'ERROR: (' + repr(e) + ')') @@ -627,7 +628,7 @@ def remove_node(node_name): for xml_main_node in xml_node: xml_main_node.parentNode.removeChild(xml_main_node) save_config(xml_conf) - except Exception, e: + except Exception as e: dbg_log('oe::remove_node', 'ERROR: (' + repr(e) + ')') @@ -642,7 +643,7 @@ def read_setting(module, setting, default=None): if hasattr(xml_modul_setting.firstChild, 'nodeValue'): value = xml_modul_setting.firstChild.nodeValue return value - except Exception, e: + except Exception as e: dbg_log('oe::read_setting', 'ERROR: (' + repr(e) + ')') @@ -677,7 +678,7 @@ def write_setting(module, setting, value, main_node='settings'): xml_value = xml_conf.createTextNode(value) xml_setting.appendChild(xml_value) save_config(xml_conf) - except Exception, e: + except Exception as e: dbg_log('oe::write_setting', 'ERROR: (' + repr(e) + ')') @@ -702,9 +703,9 @@ def load_modules(): if hasattr(defaults, module_name): for key in getattr(defaults, module_name): setattr(dictModules[module_name], key, getattr(defaults, module_name)[key]) - except Exception, e: + except Exception as e: dbg_log('oe::MAIN(loadingModules)(strModule)', 'ERROR: (' + repr(e) + ')') - except Exception, e: + except Exception as e: dbg_log('oe::MAIN(loadingModules)', 'ERROR: (' + repr(e) + ')') @@ -758,7 +759,7 @@ def exit(): def fixed_writexml(self, writer, indent='', addindent='', newl=''): writer.write(indent + '<' + self.tagName) attrs = self._get_attributes() - a_names = attrs.keys() + a_names = list(attrs.keys()) a_names.sort() for a_name in a_names: writer.write(' %s="' % a_name) diff --git a/src/resources/lib/modules/about.py b/src/resources/lib/modules/about.py index c04878a3..310b3a3f 100644 --- a/src/resources/lib/modules/about.py +++ b/src/resources/lib/modules/about.py @@ -18,7 +18,7 @@ def __init__(self, oeMain): self.oe = oeMain self.controls = {} self.oe.dbg_log('about::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::__init__', 'ERROR: (' + repr(e) + ')') def menu_loader(self, menuItem): @@ -27,7 +27,7 @@ def menu_loader(self, menuItem): if len(self.controls) == 0: self.init_controls() self.oe.dbg_log('about::menu_loader', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::menu_loader', 'ERROR: (' + repr(e) + ')', 4) def exit_addon(self): @@ -35,14 +35,14 @@ def exit_addon(self): self.oe.dbg_log('about::exit_addon', 'enter_function', 0) self.oe.winOeMain.close() self.oe.dbg_log('about::exit_addon', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::exit_addon', 'ERROR: (' + repr(e) + ')') def init_controls(self): try: self.oe.dbg_log('about::init_controls', 'enter_function', 0) self.oe.dbg_log('about::init_controls', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::init_controls', 'ERROR: (' + repr(e) + ')') def exit(self): @@ -55,7 +55,7 @@ def exit(self): pass self.controls = {} self.oe.dbg_log('about::exit', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::exit', 'ERROR: (' + repr(e) + ')') def do_wizard(self): @@ -64,7 +64,7 @@ def do_wizard(self): self.oe.winOeMain.set_wizard_title(self.oe._(32317)) self.oe.winOeMain.set_wizard_text(self.oe._(32318)) self.oe.dbg_log('about::do_wizard', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('about::do_wizard', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index c1015e7f..a7cb8c50 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -2,7 +2,7 @@ # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) -from __future__ import absolute_import, print_function, unicode_literals, division + import os import xbmc import xbmcgui @@ -34,7 +34,7 @@ def __init__(self, oeMain): self.listItems = {} self.dbusBluezAdapter = None self.oe.dbg_log('bluetooth::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::__init__', 'ERROR: (' + repr(e) + ')', 4) def do_init(self): @@ -42,7 +42,7 @@ def do_init(self): self.oe.dbg_log('bluetooth::do_init', 'enter_function', 0) self.visible = True self.oe.dbg_log('bluetooth::do_init', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::do_init', 'ERROR: (' + repr(e) + ')', 4) def start_service(self): @@ -51,7 +51,7 @@ def start_service(self): if 'org.bluez' in self.oe.dbusSystemBus.list_names(): self.init_adapter() self.oe.dbg_log('bluetooth::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::start_service', 'ERROR: (' + repr(e) + ')', 4) def stop_service(self): @@ -63,7 +63,7 @@ def stop_service(self): if hasattr(self, 'dbusBluezAdapter'): self.dbusBluezAdapter = None self.oe.dbg_log('bluetooth::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::stop_service', 'ERROR: (' + repr(e) + ')', 4) def exit(self): @@ -76,7 +76,7 @@ def exit(self): self.visible = False self.oe.dbg_log('bluetooth::exit', 'exit_function', 0) pass - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::exit', 'ERROR: (' + repr(e) + ')', 4) # ################################################################### @@ -88,7 +88,7 @@ def init_adapter(self): self.oe.dbg_log('bluetooth::init_adapter', 'enter_function', 0) dbusBluezManager = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager') dbusManagedObjects = dbusBluezManager.GetManagedObjects() - for (path, ifaces) in dbusManagedObjects.iteritems(): + for (path, ifaces) in dbusManagedObjects.items(): self.dbusBluezAdapter = ifaces.get('org.bluez.Adapter1') if self.dbusBluezAdapter != None: self.dbusBluezAdapter = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Adapter1') @@ -98,7 +98,7 @@ def init_adapter(self): if self.dbusBluezAdapter != None: self.adapter_powered(self.dbusBluezAdapter, 1) self.oe.dbg_log('bluetooth::init_adapter', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::init_adapter', 'ERROR: (' + repr(e) + ')') def adapter_powered(self, adapter, state=1): @@ -107,14 +107,14 @@ def adapter_powered(self, adapter, state=1): self.oe.dbg_log('bluetooth::adapter_powered::adapter', repr(adapter), 0) self.oe.dbg_log('bluetooth::adapter_powered::state', repr(state), 0) if int(self.adapter_info(self.dbusBluezAdapter, 'Powered')) != state: - self.oe.dbg_log('bluetooth::adapter_powered', 'set state (' + unicode(state) + ')', 0) + self.oe.dbg_log('bluetooth::adapter_powered', 'set state (' + str(state) + ')', 0) adapter_interface = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', adapter.object_path), 'org.freedesktop.DBus.Properties') adapter_interface.Set('org.bluez.Adapter1', 'Alias', dbus.String(os.environ.get('HOSTNAME', 'libreelec'))) adapter_interface.Set('org.bluez.Adapter1', 'Powered', dbus.Boolean(state)) adapter_interface = None self.oe.dbg_log('bluetooth::adapter_powered', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::adapter_powered', 'ERROR: (' + repr(e) + ')', 4) def adapter_info(self, adapter, name): @@ -127,7 +127,7 @@ def adapter_info(self, adapter, name): return adapter_interface.Get('org.bluez.Adapter1', name) adapter_interface = None self.oe.dbg_log('bluetooth::adapter_info', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::adapter_info', 'ERROR: (' + repr(e) + ')', 4) def start_discovery(self, listItem=None): @@ -138,7 +138,7 @@ def start_discovery(self, listItem=None): self.discovering = True self.oe.set_busy(0) self.oe.dbg_log('bluetooth::start_discovery', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::start_discovery', 'ERROR: (' + repr(e) + ')', 4) @@ -151,7 +151,7 @@ def stop_discovery(self, listItem=None): self.dbusBluezAdapter.StopDiscovery() self.oe.set_busy(0) self.oe.dbg_log('bluetooth::stop_discovery', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::stop_discovery', 'ERROR: (' + repr(e) + ')', 4) @@ -165,14 +165,14 @@ def get_devices(self): devices = {} dbusBluezManager = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager') managedObjects = dbusBluezManager.GetManagedObjects() - for (path, interfaces) in managedObjects.iteritems(): + for (path, interfaces) in managedObjects.items(): if 'org.bluez.Device1' in interfaces: devices[path] = interfaces['org.bluez.Device1'] managedObjects = None dbusBluezManager = None return devices self.oe.dbg_log('bluetooth::get_devices', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::get_devices::__init__', 'ERROR: (' + repr(e) + ')', 4) def init_device(self, listItem=None): @@ -187,7 +187,7 @@ def init_device(self, listItem=None): else: self.connect_device(listItem.getProperty('entry')) self.oe.dbg_log('bluetooth::init_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::init_device', 'ERROR: (' + repr(e) + ')', 4) def trust_connect_device(self, listItem=None): @@ -205,7 +205,7 @@ def trust_connect_device(self, listItem=None): self.trust_device(listItem.getProperty('entry')) self.connect_device(listItem.getProperty('entry')) self.oe.dbg_log('bluetooth::trust_connect_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::trust_connect_device', 'ERROR: (' + repr(e) + ')', 4) def enable_device_standby(self, listItem=None): @@ -220,7 +220,7 @@ def enable_device_standby(self, listItem=None): devices.append(listItem.getProperty('entry')) self.oe.write_setting('bluetooth', 'standby', ','.join(devices)) self.oe.dbg_log('bluetooth::enable_device_standby', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::enable_device_standby', 'ERROR: (' + repr(e) + ')', 4) def disable_device_standby(self, listItem=None): @@ -235,7 +235,7 @@ def disable_device_standby(self, listItem=None): devices.remove(listItem.getProperty('entry')) self.oe.write_setting('bluetooth', 'standby', ','.join(devices)) self.oe.dbg_log('bluetooth::disable_device_standby', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::disable_device_standby', 'ERROR: (' + repr(e) + ')', 4) def pair_device(self, path): @@ -247,7 +247,7 @@ def pair_device(self, path): device.Pair(reply_handler=self.pair_reply_handler, error_handler=self.dbus_error_handler) device = None self.oe.dbg_log('bluetooth::pair_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::pair_device', 'ERROR: (' + repr(e) + ')', 4) @@ -262,7 +262,7 @@ def pair_reply_handler(self): self.connect_device(listItem.getProperty('entry')) self.menu_connections() self.oe.dbg_log('bluetooth::pair_reply_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::pair_reply_handler', 'ERROR: (' + repr(e) + ')', 4) def trust_device(self, path): @@ -275,7 +275,7 @@ def trust_device(self, path): prop = None self.oe.set_busy(0) self.oe.dbg_log('bluetooth::trust_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::trust_device', 'ERROR: (' + repr(e) + ')', 4) @@ -288,7 +288,7 @@ def connect_device(self, path): device.Connect(reply_handler=self.connect_reply_handler, error_handler=self.dbus_error_handler) device = None self.oe.dbg_log('bluetooth::connect_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::connect_device', 'ERROR: (' + repr(e) + ')', 4) @@ -298,7 +298,7 @@ def connect_reply_handler(self): self.oe.set_busy(0) self.menu_connections() self.oe.dbg_log('bluetooth::connect_reply_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::connect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) @@ -314,7 +314,7 @@ def disconnect_device(self, listItem=None): device.Disconnect(reply_handler=self.disconnect_reply_handler, error_handler=self.dbus_error_handler) device = None self.oe.dbg_log('bluetooth::disconnect_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::disconnect_device', 'ERROR: (' + repr(e) + ')', 4) @@ -324,7 +324,7 @@ def disconnect_reply_handler(self): self.oe.set_busy(0) self.menu_connections() self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) @@ -343,7 +343,7 @@ def remove_device(self, listItem=None): self.menu_connections(None) self.oe.set_busy(0) self.oe.dbg_log('bluetooth::remove_device', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('bluetooth::remove_device', 'ERROR: (' + repr(e) + ')', 4) @@ -363,7 +363,7 @@ def dbus_error_handler(self, error): self.close_pinkey_window() self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + err_message + ')', 4) self.oe.dbg_log('bluetooth::dbus_error_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + repr(e) + ')', 4) # ################################################################### @@ -377,7 +377,7 @@ def clear_list(self): for entry in remove: del self.listItems[entry] self.oe.dbg_log('bluetooth::clear_list', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::clear_list', 'ERROR: (' + repr(e) + ')', 4) def menu_connections(self, focusItem=None): @@ -480,13 +480,13 @@ def menu_connections(self, focusItem=None): else: dictProperties['ConnectedState'] = self.oe._(32335) if properties[prop]['type'] == 1: - value = unicode(int(value)) + value = str(int(value)) if properties[prop]['type'] == 2: - value = unicode(value) + value = str(value) if properties[prop]['type'] == 3: - value = unicode(len(value)) + value = str(len(value)) if properties[prop]['type'] == 4: - value = unicode(int(value)) + value = str(int(value)) dictProperties[name] = value if rebuildList == 1: self.listItems[dbusDevice] = self.oe.winOeMain.addConfigItem(apName, dictProperties, self.oe.listObject['btlist']) @@ -496,7 +496,7 @@ def menu_connections(self, focusItem=None): for dictProperty in dictProperties: self.listItems[dbusDevice].setProperty(dictProperty, dictProperties[dictProperty]) self.oe.dbg_log('bluetooth::menu_connections', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::menu_connections', 'ERROR: (' + repr(e) + ')', 4) def open_context_menu(self, listItem): @@ -555,7 +555,7 @@ def open_context_menu(self, listItem): } items = [] actions = [] - for key in values.keys(): + for key in list(values.keys()): items.append(values[key]['text']) actions.append(values[key]['action']) select_window = xbmcgui.Dialog() @@ -564,7 +564,7 @@ def open_context_menu(self, listItem): if result >= 0: getattr(self, actions[result])(listItem) self.oe.dbg_log('bluetooth::show_options', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::show_options', 'ERROR: (' + repr(e) + ')', 4) def open_pinkey_window(self, runtime=60, title=32343): @@ -576,7 +576,7 @@ def open_pinkey_window(self, runtime=60, title=32343): self.pinkey_timer = pinkeyTimer(self, runtime) self.pinkey_timer.start() self.oe.dbg_log('bluetooth::open_pinkey_window', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::open_pinkey_window', 'ERROR: (' + repr(e) + ')', 4) def close_pinkey_window(self): @@ -591,7 +591,7 @@ def close_pinkey_window(self): self.pinkey_window = None del self.pinkey_window self.oe.dbg_log('bluetooth::close_pinkey_window', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::close_pinkey_window', 'ERROR: (' + repr(e) + ')', 4) def standby_devices(self): @@ -610,7 +610,7 @@ def standby_devices(self): lstItem = None self.oe.input_request = False self.oe.dbg_log('bluetooth::standby_devices', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::standby_devices', 'ERROR: (' + repr(e) + ')', 4) # ################################################################### @@ -630,7 +630,7 @@ def __init__(self, oeMain, parent): self.obAgentPath = '/LibreELEC/ob_agent' self.parent = parent self.oe.dbg_log('bluetooth::monitor::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::__init__', 'ERROR: (' + repr(e) + ')') def add_signal_receivers(self): @@ -651,7 +651,7 @@ def add_signal_receivers(self): self.NameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('org.bluez', self.bluezNameOwnerChanged) self.ObexNameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('org.bluez.obex', self.bluezObexNameOwnerChanged) self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) def remove_signal_receivers(self): @@ -674,7 +674,7 @@ def remove_signal_receivers(self): if hasattr(self, 'btAgent'): self.remove_agent() self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) def bluezNameOwnerChanged(self, proxy): @@ -685,7 +685,7 @@ def bluezNameOwnerChanged(self, proxy): else: self.remove_agent() self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) def initialize_agent(self): @@ -699,7 +699,7 @@ def initialize_agent(self): dbusBluezManager.RequestDefaultAgent(self.btAgentPath) dbusBluezManager = None self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', 4) def remove_agent(self): @@ -716,7 +716,7 @@ def remove_agent(self): pass del self.btAgent self.oe.dbg_log('bluetooth::monitor::remove_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', 4) def bluezObexNameOwnerChanged(self, proxy): @@ -727,7 +727,7 @@ def bluezObexNameOwnerChanged(self, proxy): else: self.remove_obex_agent() self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) def initialize_obex_agent(self): @@ -741,7 +741,7 @@ def initialize_obex_agent(self): dbusBluezObexManager.RegisterAgent(self.obAgentPath) dbusBluezObexManager = None self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'ERROR: (' + repr(e) + ')', 4) def remove_obex_agent(self): @@ -759,7 +759,7 @@ def remove_obex_agent(self): pass del self.obAgent self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'ERROR: (' + repr(e) + ')', 4) def InterfacesAdded(self, path, interfaces): @@ -776,7 +776,7 @@ def InterfacesAdded(self, path, interfaces): if self.parent.visible: self.parent.menu_connections() self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'ERROR: (' + repr(e) + ')', 4) def InterfacesRemoved(self, path, interfaces): @@ -789,7 +789,7 @@ def InterfacesRemoved(self, path, interfaces): if self.parent.visible and not hasattr(self.parent, 'discovery_thread'): self.parent.menu_connections() self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'ERROR: (' + repr(e) + ')', 4) def AdapterChanged(self, interface, changed, invalidated, path): @@ -800,7 +800,7 @@ def AdapterChanged(self, interface, changed, invalidated, path): self.oe.dbg_log('bluetooth::monitor::AdapterChanged::invalidated', repr(invalidated), 0) self.oe.dbg_log('bluetooth::monitor::AdapterChanged::path', repr(path), 0) self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'ERROR: (' + repr(e) + ')', 4) def PropertiesChanged(self, interface, changed, invalidated, path): @@ -823,11 +823,11 @@ def PropertiesChanged(self, interface, changed, invalidated, path): if path in self.parent.listItems: for prop in changed: if prop in properties: - self.parent.listItems[path].setProperty(unicode(prop), unicode(changed[prop])) + self.parent.listItems[path].setProperty(str(prop), str(changed[prop])) else: self.parent.menu_connections() self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'ERROR: (' + repr(e) + ')', 4) def TransferChanged(self, path, interface, dummy): @@ -874,7 +874,7 @@ def TransferChanged(self, path, interface, dummy): obj = None itf = None self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'ERROR: (' + repr(e) + ')', 4) @@ -897,7 +897,7 @@ def Release(self): try: self.oe.dbg_log('bluetooth::btAgent::Release', 'enter_function', 0) self.oe.dbg_log('bluetooth::btAgent::Release', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::Release', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='os', out_signature='') @@ -916,7 +916,7 @@ def AuthorizeService(self, device, uuid): self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected('Connection rejected!') - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='s') @@ -932,7 +932,7 @@ def RequestPinCode(self, device): self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'return->' + pincode, 0) self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'exit_function', 0) return dbus.String(pincode) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='u') @@ -947,7 +947,7 @@ def RequestPasskey(self, device): self.busy() self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'exit_function', 0) return dbus.UInt32(passkey) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='ouq', out_signature='') @@ -962,7 +962,7 @@ def DisplayPasskey(self, device, passkey, entered): self.parent.pinkey_window.device = device self.parent.pinkey_window.set_label1('Passkey: %06u' % (passkey)) self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='os', out_signature='') @@ -977,7 +977,7 @@ def DisplayPinCode(self, device, pincode): self.parent.pinkey_window.device = device self.parent.pinkey_window.set_label1('PIN code: %s' % (pincode)) self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='ou', out_signature='') @@ -996,7 +996,7 @@ def RequestConfirmation(self, device, passkey): self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected("Passkey doesn't match") - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='') @@ -1014,7 +1014,7 @@ def RequestAuthorization(self, device): self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected('Pairing rejected') - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.Agent1', in_signature='', out_signature='') @@ -1024,7 +1024,7 @@ def Cancel(self): if hasattr(self.parent, 'pinkey_window'): self.parent.close_pinkey_window() self.oe.dbg_log('bluetooth::btAgent::Cancel', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::btAgent::Cancel', 'ERROR: (' + repr(e) + ')', 4) @@ -1042,7 +1042,7 @@ def Release(self): try: self.oe.dbg_log('bluetooth::obexAgent::Release', 'enter_function', 0) self.oe.dbg_log('bluetooth::obexAgent::Release', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::obexAgent::Release', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.obex.Agent1', in_signature='o', out_signature='s') @@ -1073,7 +1073,7 @@ def AuthorizePush(self, path): properties = None transfer = None self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('org.bluez.obex.Agent1', in_signature='', out_signature='') @@ -1081,7 +1081,7 @@ def Cancel(self): try: self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'enter_function', 0) self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'ERROR: (' + repr(e) + ')', 4) @@ -1096,7 +1096,7 @@ def __init__(self, oeMain): self.main_menu = self.oe.winOeMain.getControl(self.oe.winOeMain.guiMenList) threading.Thread.__init__(self) self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'ERROR: (' + repr(e) + ')', 4) def stop(self): @@ -1116,7 +1116,7 @@ def run(self): self.stop() time.sleep(1) self.oe.dbg_log('bluetooth::discoveryThread::run', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::discoveryThread::run', 'ERROR: (' + repr(e) + ')', 4) @@ -1133,7 +1133,7 @@ def __init__(self, parent, runtime=60): self.runtime = runtime threading.Thread.__init__(self) self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'ERROR: (' + repr(e) + ')', 4) def stop(self): @@ -1153,5 +1153,5 @@ def run(self): else: time.sleep(1) self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'ERROR: (' + repr(e) + ')', 4) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 0371b814..bee570b5 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -12,7 +12,7 @@ import xbmcgui import threading import oeWindows -import ConfigParser +import configparser import random import string @@ -289,7 +289,7 @@ def __init__(self, servicePath, oeMain): self.service = dbus.Interface(self.oe.dbusSystemBus.get_object('net.connman', servicePath), 'net.connman.Service') self.service_properties = self.service.GetProperties() for entry in sorted(self.datamap): - for (key, value) in self.datamap[entry].iteritems(): + for (key, value) in self.datamap[entry].items(): if self.struct[value]['type'] == 'Boolean': if key in self.service_properties: self.struct[value]['settings'][value]['value'] = self.service_properties[key] @@ -317,7 +317,7 @@ def __init__(self, servicePath, oeMain): del self.winOeCon del self.oe.dictModules['connmanNetworkConfig'] self.oe.dbg_log('connmanService::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connmanService::__init__', 'ERROR: (' + repr(e) + ')', 4) @@ -328,7 +328,7 @@ def cancel(self): self.winOeCon.close() self.oe.set_busy(0) self.oe.dbg_log('connmanService::cancel', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connmanService::cancel', 'ERROR: (' + repr(e) + ')', 4) @@ -339,7 +339,7 @@ def menu_loader(self, menuItem): self.winOeCon.showButton(2, 32212, 'connmanNetworkConfig', 'cancel') self.winOeCon.build_menu(self.struct, fltr=[menuItem.getProperty('category')]) self.oe.dbg_log('connmanService::menu_loader', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::menu_loader', 'ERROR: (' + repr(e) + ')', 4) def set_value_checkdhcp(self, listItem): @@ -352,7 +352,7 @@ def set_value_checkdhcp(self, listItem): self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True self.oe.dbg_log('connmanService::set_value_checkdhcp', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::set_value_checkdhcp', 'ERROR: (' + repr(e) + ')', 4) def set_value(self, listItem): @@ -361,7 +361,7 @@ def set_value(self, listItem): self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True self.oe.dbg_log('connmanService::set_value', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::set_value', 'ERROR: (' + repr(e) + ')', 4) def dbus_config(self, category): @@ -393,7 +393,7 @@ def dbus_config(self, category): elif self.struct[category]['type'] == 'Array': value.append(getattr(dbus, setting['dbus'])(setting['value'], variant_level=1)) return (category + postfix, value) - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::dbus_config', 'ERROR: (' + repr(e) + ')', 4) def save_network(self): @@ -424,7 +424,7 @@ def save_network(self): self.oe.dbg_log('connmanService::save_network', 'exit_function', 0) self.oe.set_busy(0) return 'close' - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connmanService::save_network', 'ERROR: (' + repr(e) + ')', 4) return 'close' @@ -435,7 +435,7 @@ def delete_network(self): self.oe.dictModules['connman'].delete_network(None) self.oe.dbg_log('connmanService::delete_network', 'exit_function', 0) return 'close' - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::delete_network', 'ERROR: (' + repr(e) + ')', 4) return 'close' @@ -445,7 +445,7 @@ def connect_network(self): self.oe.dictModules['connman'].connect_network(None) self.oe.dbg_log('connmanService::connect_network', 'exit_function', 0) return 'close' - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::connect_network', 'ERROR: (' + repr(e) + ')', 4) return 'close' @@ -455,7 +455,7 @@ def disconnect_network(self): self.oe.dictModules['connman'].disconnect_network(None) self.oe.dbg_log('connmanService::disconnect_network', 'exit_function', 0) return 'close' - except Exception, e: + except Exception as e: self.oe.dbg_log('connmanService::disconnect_network', 'ERROR: (' + repr(e) + ')', 4) return 'close' @@ -648,7 +648,7 @@ def __init__(self, oeMain): self.oe = oeMain self.visible = False self.oe.dbg_log('connman::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::__init__', 'ERROR: (' + repr(e) + ')', 4) def clear_list(self): @@ -657,7 +657,7 @@ def clear_list(self): for entry in remove: self.listItems[entry] = None del self.listItems[entry] - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::clear_list', 'ERROR: (' + repr(e) + ')', 4) def do_init(self): @@ -665,7 +665,7 @@ def do_init(self): self.oe.dbg_log('connman::do_init', 'enter_function', 0) self.visible = True self.oe.dbg_log('connman::do_init', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::do_init', 'ERROR: (' + repr(e) + ')', 4) def exit(self): @@ -674,7 +674,7 @@ def exit(self): self.visible = False self.clear_list() self.oe.dbg_log('connman::exit', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::exit', 'ERROR: (' + repr(e) + ')', 4) def load_values(self): @@ -718,7 +718,7 @@ def load_values(self): self.struct['advanced']['settings']['netfilter']['value'] = nf_option_str self.oe.dbg_log('connman::load_values', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::load_values', 'ERROR: (' + repr(e) + ')') def menu_connections(self, focusItem, services={}, removed={}, force=False): @@ -796,7 +796,7 @@ def menu_connections(self, focusItem, services={}, removed={}, force=False): apName = dbusServiceProperties['Name'] else: if 'Security' in dbusServiceProperties: - apName = self.oe._(32208) + ' (' + unicode(dbusServiceProperties['Security'][0]) + ')' + apName = self.oe._(32208) + ' (' + str(dbusServiceProperties['Security'][0]) + ')' else: apName = '' if apName != '': @@ -815,16 +815,16 @@ def menu_connections(self, focusItem, services={}, removed={}, force=False): properties[prop]['flag'] = 0 if properties[prop]['flag'] == 1: if properties[prop]['type'] == 1: - result = unicode(int(result)) + result = str(int(result)) if properties[prop]['type'] == 2: - result = unicode(result) + result = str(result) if properties[prop]['type'] == 3: if any(x in result for x in ['psk','ieee8021x','wep']): - result = unicode('1') + result = str('1') elif 'none' in result: - result = unicode('0') + result = str('0') else: - result = unicode('-1') + result = str('-1') if rebuildList == 1: dictProperties[value] = result else: @@ -834,7 +834,7 @@ def menu_connections(self, focusItem, services={}, removed={}, force=False): self.listItems[dbusServicePath] = self.oe.winOeMain.addConfigItem(apName, dictProperties, self.oe.listObject['netlist']) self.oe.set_busy(0) self.oe.dbg_log('connman::menu_connections', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::menu_connections', 'ERROR: (' + repr(e) + ')', 4) @@ -857,7 +857,7 @@ def menu_loader(self, menuItem=None): 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]) + self.struct[path]['settings'][entry]['value'] = str(technologie[entry]) for setting in self.struct['Timeservers']['settings']: if 'Timeservers' in self.clock_properties: if int(setting) < len(self.clock_properties['Timeservers']): @@ -867,7 +867,7 @@ def menu_loader(self, menuItem=None): 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: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::menu_loader', 'ERROR: (' + repr(e) + ')', 4) @@ -910,7 +910,7 @@ def open_context_menu(self, listItem): break items = [] actions = [] - for key in values.keys(): + for key in list(values.keys()): items.append(values[key]['text']) actions.append(values[key]['action']) select_window = xbmcgui.Dialog() @@ -919,7 +919,7 @@ def open_context_menu(self, listItem): if result >= 0: getattr(self, actions[result])(listItem) self.oe.dbg_log('connman::open_context_menu', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::open_context_menu', 'ERROR: (' + repr(e) + ')', 4) def set_timeservers(self, **kwargs): @@ -936,7 +936,7 @@ def set_timeservers(self, **kwargs): self.clock.SetProperty(dbus.String('Timeservers'), timeservers) self.oe.dbg_log('connman::set_timeservers', 'exit_function', 0) self.oe.set_busy(0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::set_timeservers', 'ERROR: (' + repr(e) + ')', 4) @@ -946,7 +946,7 @@ def set_value(self, listItem=None): self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True self.oe.dbg_log('connman::set_value', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::set_value', 'ERROR: (' + repr(e) + ')', 4) def set_technologie(self, **kwargs): @@ -1001,7 +1001,7 @@ def set_technologie(self, **kwargs): self.menu_loader(None) self.oe.set_busy(0) self.oe.dbg_log('connman::set_technologies', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::set_technologies', 'ERROR: (' + repr(e) + ')', 4) @@ -1014,7 +1014,7 @@ def configure_network(self, listItem=None): del self.configureService self.menu_connections(None) self.oe.dbg_log('connman::configure_network', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::configure_network', 'ERROR: (' + repr(e) + ')', 4) def connect_network(self, listItem=None): @@ -1029,7 +1029,7 @@ def connect_network(self, listItem=None): error_handler=self.dbus_error_handler) service_object = None self.oe.dbg_log('connman::connect_network', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::connect_network', 'ERROR: (' + repr(e) + ')', 4) @@ -1039,7 +1039,7 @@ def connect_reply_handler(self): self.oe.set_busy(0) self.menu_connections(None) self.oe.dbg_log('connman::connect_reply_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::connect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) @@ -1080,7 +1080,7 @@ def dbus_error_handler(self, error): else: self.log_error = 1 self.oe.dbg_log('connman::dbus_error_handler', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::dbus_error_handler', 'ERROR: (' + repr(e) + ')', 4) @@ -1098,7 +1098,7 @@ def disconnect_network(self, listItem=None): del service_object self.oe.set_busy(0) self.oe.dbg_log('connman::disconnect_network', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::disconnect_network', 'ERROR: (' + repr(e) + ')', 4) @@ -1117,7 +1117,7 @@ def delete_network(self, listItem=None): del service_object self.oe.set_busy(0) self.oe.dbg_log('connman::delete_network', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::delete_network', 'ERROR: (' + repr(e) + ')', 4) @@ -1132,7 +1132,7 @@ def refresh_network(self, listItem=None): self.oe.set_busy(0) self.menu_connections(None) self.oe.dbg_log('connman::refresh_network', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('connman::refresh_network', 'ERROR: (' + repr(e) + ')', 4) @@ -1145,7 +1145,7 @@ def get_service_path(self): listItem = self.oe.winOeMain.getControl(self.oe.listObject['netlist']).getSelectedItem() return listItem.getProperty('entry') self.oe.dbg_log('connman::get_service_path', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::get_service_path', 'ERROR: (' + repr(e) + ')', 4) def start_service(self): @@ -1154,7 +1154,7 @@ def start_service(self): self.load_values() self.init_netfilter(service=1) self.oe.dbg_log('connman::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::start_service', 'ERROR: (' + repr(e) + ')') def stop_service(self): @@ -1164,7 +1164,7 @@ def stop_service(self): self.dbusConnmanManager = None del self.dbusConnmanManager self.oe.dbg_log('connman::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::stop_service', 'ERROR: (' + repr(e) + ')') def set_network_wait(self, **kwargs): @@ -1184,7 +1184,7 @@ def set_network_wait(self, **kwargs): wait_conf.write('WAIT_NETWORK_TIME="%s"\n' % self.struct['advanced']['settings']['wait_for_network_time']['value']) wait_conf.close() self.oe.dbg_log('connman::set_network_wait', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::set_network_wait', 'ERROR: (' + repr(e) + ')') def init_netfilter(self, **kwargs): @@ -1206,7 +1206,7 @@ def init_netfilter(self, **kwargs): self.oe.set_service('iptables', options, state) self.oe.set_busy(0) self.oe.dbg_log('connman::init_netfilter', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::init_netfilter', 'ERROR: (' + repr(e) + ')') def do_wizard(self): @@ -1229,7 +1229,7 @@ def do_wizard(self): self.menu_connections(None) self.oe.dbg_log('connman::do_wizard', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::do_wizard', 'ERROR: (' + repr(e) + ')') class monitor: @@ -1243,7 +1243,7 @@ def __init__(self, oeMain, parent): self.parent = parent self.wifiAgentPath = '/LibreELEC/agent_wifi' self.oe.dbg_log('connman::monitor::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::__init__', 'ERROR: (' + repr(e) + ')') def add_signal_receivers(self): @@ -1261,7 +1261,7 @@ def add_signal_receivers(self): signal_name='PropertyChanged', path_keyword='path', interface_keyword='interface')) self.conNameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('net.connman', self.conNameOwnerChanged) self.oe.dbg_log('connman::monitor::add_signal_receivers', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) def remove_signal_receivers(self): @@ -1275,7 +1275,7 @@ def remove_signal_receivers(self): if hasattr(self, 'wifiAgent'): self.remove_agent() self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) def conNameOwnerChanged(self, proxy): @@ -1286,7 +1286,7 @@ def conNameOwnerChanged(self, proxy): else: self.remove_agent() self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) def initialize_agent(self): @@ -1299,7 +1299,7 @@ def initialize_agent(self): dbusConnmanManager.RegisterAgent(self.wifiAgentPath) dbusConnmanManager = None self.oe.dbg_log('connman::monitor::initialize_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', 4) def remove_agent(self): @@ -1315,7 +1315,7 @@ def remove_agent(self): dbusConnmanManager = None del self.wifiAgent self.oe.dbg_log('connman::monitor::remove_agent', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', 4) def managerPropertyChanged(self, name, value, path, interface): @@ -1326,7 +1326,7 @@ def managerPropertyChanged(self, name, value, path, interface): self.oe.dbg_log('connman::monitor::managerPropertyChanged::path', repr(path), 0) self.oe.dbg_log('connman::monitor::managerPropertyChanged::interface', repr(interface), 0) self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'ERROR: (' + repr(e) + ')', 4) def propertyChanged(self, name, value, path): @@ -1338,7 +1338,7 @@ def propertyChanged(self, name, value, path): if self.parent.visible: self.updateGui(name, value, path) self.oe.dbg_log('connman::monitor::propertyChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::propertyChanged', 'ERROR: (' + repr(e) + ')', 4) def technologyChanged(self, name, value, path): @@ -1354,7 +1354,7 @@ def technologyChanged(self, name, value, path): else: self.updateGui(name, value, path) self.oe.dbg_log('connman::monitor::technologyChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::technologyChanged', 'ERROR: (' + repr(e) + ')', 4) def servicesChanged(self, services, removed): @@ -1365,30 +1365,30 @@ def servicesChanged(self, services, removed): if self.parent.visible: self.parent.menu_connections(None, services, removed, force=True) self.oe.dbg_log('connman::monitor::servicesChanged', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::servicesChanged', 'ERROR: (' + repr(e) + ')', 4) def updateGui(self, name, value, path): try: self.oe.dbg_log('connman::monitor::updateGui', 'enter_function', 0) if name == 'Strength': - value = unicode(int(value)) + value = str(int(value)) self.parent.listItems[path].setProperty(name, value) self.forceRender() elif name == 'State': - value = unicode(value) + value = str(value) self.parent.listItems[path].setProperty(name, value) self.forceRender() elif name == 'IPv4': if 'Address' in value: - value = unicode(value['Address']) + value = str(value['Address']) self.parent.listItems[path].setProperty('Address', value) if 'Method' in value: - value = unicode(value['Method']) + value = str(value['Method']) self.parent.listItems[path].setProperty('Address', value) self.forceRender() elif name == 'Favorite': - value = unicode(int(value)) + value = str(int(value)) self.parent.listItems[path].setProperty(name, value) self.forceRender() if hasattr(self.parent, 'is_wizard'): @@ -1397,7 +1397,7 @@ def updateGui(self, name, value, path): except KeyError: self.oe.dbg_log('connman::monitor::updateGui', 'exit_function (KeyError)', 0) self.parent.menu_connections(None, {}, {}, force=True) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::updateGui', 'ERROR: (' + repr(e) + ')', 4) def forceRender(self): @@ -1407,7 +1407,7 @@ def forceRender(self): self.oe.winOeMain.setFocusId(self.oe.listObject['netlist']) self.oe.winOeMain.setFocusId(focusId) self.oe.dbg_log('connman::monitor::forceRender', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::monitor::forceRender', 'ERROR: (' + repr(e) + ')', 4) @@ -1448,7 +1448,7 @@ def RequestInput(self, path, fields): self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'enter_function', 0) self.oe.input_request = True response = {} - if fields.has_key('Name'): + if 'Name' in fields: xbmcKeyboard = xbmc.Keyboard('', self.oe._(32146).encode('utf-8')) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): @@ -1462,15 +1462,15 @@ def RequestInput(self, path, fields): self.busy() raise Canceled('canceled') return response - if fields.has_key('Passphrase'): + if 'Passphrase' in fields: xbmcKeyboard = xbmc.Keyboard('', self.oe._(32147).encode('utf-8')) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): if xbmcKeyboard.getText() != '': response['Passphrase'] = xbmcKeyboard.getText() - if fields.has_key('Identity'): + if 'Identity' in fields: response['Identity'] = xbmcKeyboard.getText() - if fields.has_key('wpspin'): + if 'wpspin' in fields: response['wpspin'] = xbmcKeyboard.getText() else: self.busy() @@ -1480,7 +1480,7 @@ def RequestInput(self, path, fields): self.busy() raise Canceled('canceled') return response - if fields.has_key('Username'): + if 'Username' in fields: xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148).encode('utf-8')) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): @@ -1494,7 +1494,7 @@ def RequestInput(self, path, fields): self.busy() raise Canceled('canceled') return response - if fields.has_key('Password'): + if 'Password' in fields: xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148).encode('utf-8'), True) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): @@ -1511,7 +1511,7 @@ def RequestInput(self, path, fields): self.busy() self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'exit_function', 0) return response - except Exception, e: + except Exception as e: self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'ERROR: (' + repr(e) + ')', 4) @dbus.service.method('net.connman.Agent', in_signature='os', out_signature='') diff --git a/src/resources/lib/modules/services.py b/src/resources/lib/modules/services.py index 305a657d..e2b24dd9 100644 --- a/src/resources/lib/modules/services.py +++ b/src/resources/lib/modules/services.py @@ -259,7 +259,7 @@ def __init__(self, oeMain): self.oe = oeMain oeMain.dbg_log('services::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::__init__', 'ERROR: (%s)' % repr(e)) def start_service(self): @@ -272,14 +272,14 @@ def start_service(self): self.initialize_cron(service=1) self.init_bluetooth(service=1) self.oe.dbg_log('services::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::start_service', 'ERROR: (%s)' % repr(e)) def stop_service(self): try: self.oe.dbg_log('services::stop_service', 'enter_function', 0) self.oe.dbg_log('services::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): @@ -287,7 +287,7 @@ def do_init(self): self.oe.dbg_log('services::do_init', 'exit_function', 0) self.load_values() self.oe.dbg_log('services::do_init', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::do_init', 'ERROR: (%s)' % repr(e)) def set_value(self, listItem): @@ -295,7 +295,7 @@ def set_value(self, listItem): self.oe.dbg_log('services::set_value', 'enter_function', 0) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.oe.dbg_log('services::set_value', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::set_value', 'ERROR: (' + repr(e) + ')') def load_menu(self, focusItem): @@ -303,7 +303,7 @@ def load_menu(self, focusItem): self.oe.dbg_log('services::load_menu', 'enter_function', 0) self.oe.winOeMain.build_menu(self.struct) self.oe.dbg_log('services::load_menu', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::load_menu', 'ERROR: (%s)' % repr(e)) def load_values(self): @@ -379,7 +379,7 @@ def load_values(self): self.struct['bluez']['hidden'] = 'true' self.oe.dbg_log('services::load_values', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::load_values', 'ERROR: (%s)' % repr(e)) def initialize_samba(self, **kwargs): @@ -417,7 +417,7 @@ def initialize_samba(self, **kwargs): self.oe.set_service('samba', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::initialize_samba', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::initialize_samba', 'ERROR: (%s)' % repr(e), 4) @@ -442,7 +442,7 @@ def initialize_ssh(self, **kwargs): self.oe.set_service('sshd', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::initialize_ssh', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::initialize_ssh', 'ERROR: (%s)' % repr(e), 4) @@ -459,7 +459,7 @@ def initialize_avahi(self, **kwargs): self.oe.set_service('avahi', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::initialize_avahi', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::initialize_avahi', 'ERROR: (%s)' % repr(e), 4) @@ -476,7 +476,7 @@ def initialize_cron(self, **kwargs): self.oe.set_service('crond', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::initialize_cron', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::initialize_cron', 'ERROR: (%s)' % repr(e), 4) @@ -500,7 +500,7 @@ def init_bluetooth(self, **kwargs): self.oe.set_service('bluez', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::init_bluetooth', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::init_bluetooth', 'ERROR: (' + repr(e) + ')', 4) @@ -519,7 +519,7 @@ def init_obex(self, **kwargs): self.oe.set_service('obexd', options, state) self.oe.set_busy(0) self.oe.dbg_log('services::init_obex', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('services::init_obex', 'ERROR: (' + repr(e) + ')', 4) @@ -527,7 +527,7 @@ def exit(self): try: self.oe.dbg_log('services::exit', 'enter_function', 0) self.oe.dbg_log('services::exit', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::exit', 'ERROR: (%s)' % repr(e), 4) def do_wizard(self): @@ -546,7 +546,7 @@ def do_wizard(self): self.oe.winOeMain.set_wizard_button_title(self.oe._(32316)) self.set_wizard_buttons() self.oe.dbg_log('services::do_wizard', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::do_wizard', 'ERROR: (%s)' % repr(e)) def set_wizard_buttons(self): @@ -562,7 +562,7 @@ def set_wizard_buttons(self): else: self.oe.winOeMain.set_wizard_radiobutton_2(self.oe._(32200), self, 'wizard_set_samba') self.oe.dbg_log('services::set_wizard_buttons', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::set_wizard_buttons', 'ERROR: (%s)' % repr(e)) def wizard_set_ssh(self): @@ -586,7 +586,7 @@ def wizard_set_ssh(self): self.wizard_sshpasswd() self.set_wizard_buttons() self.oe.dbg_log('services::wizard_set_ssh', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::wizard_set_ssh', 'ERROR: (%s)' % repr(e)) def wizard_set_samba(self): @@ -600,7 +600,7 @@ def wizard_set_samba(self): self.load_values() self.set_wizard_buttons() self.oe.dbg_log('services::wizard_set_samba', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('services::wizard_set_samba', 'ERROR: (%s)' % repr(e)) def wizard_sshpasswd(self): @@ -645,5 +645,5 @@ def do_sshpasswd(self, **kwargs): else: self.oe.dbg_log('system::do_sshpasswd', 'user_cancelled', 0) return SSHchange - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_sshpasswd', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 272d9cdf..b6f161c3 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -206,7 +206,7 @@ def __init__(self, oeMain): self.nox_keyboard_layouts = False self.arrVariants = {} self.oe.dbg_log('system::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::__init__', 'ERROR: (' + repr(e) + ')') def start_service(self): @@ -219,7 +219,7 @@ def start_service(self): self.set_hw_clock() del self.is_service self.oe.dbg_log('system::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::start_service', 'ERROR: (' + repr(e) + ')') def stop_service(self): @@ -228,14 +228,14 @@ def stop_service(self): if hasattr(self, 'update_thread'): self.update_thread.stop() self.oe.dbg_log('system::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): try: self.oe.dbg_log('system::do_init', 'enter_function', 0) self.oe.dbg_log('system::do_init', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_init', 'ERROR: (' + repr(e) + ')') def exit(self): @@ -297,7 +297,7 @@ def load_values(self): self.struct['pinlock']['settings']['pinlock_enable']['value'] = value - except Exception, e: + except Exception as e: self.oe.dbg_log('system::load_values', 'ERROR: (' + repr(e) + ')') def load_menu(self, focusItem): @@ -305,16 +305,16 @@ def load_menu(self, focusItem): self.oe.dbg_log('system::load_menu', 'enter_function', 0) self.oe.winOeMain.build_menu(self.struct) self.oe.dbg_log('system::load_menu', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::load_menu', 'ERROR: (' + repr(e) + ')') def set_value(self, listItem): try: self.oe.dbg_log('system::set_value', 'enter_function', 0) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') - self.oe.write_setting('system', listItem.getProperty('entry'), unicode(listItem.getProperty('value'))) + self.oe.write_setting('system', listItem.getProperty('entry'), str(listItem.getProperty('value'))) self.oe.dbg_log('system::set_value', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::set_value', 'ERROR: (' + repr(e) + ')') def set_keyboard_layout(self, listItem=None): @@ -333,9 +333,9 @@ def set_keyboard_layout(self, listItem=None): ]['KeyboardLayout1']['value']] self.struct['keyboard']['settings']['KeyboardVariant2']['values'] = self.arrVariants[self.struct['keyboard']['settings' ]['KeyboardLayout2']['value']] - self.oe.dbg_log('system::set_keyboard_layout', unicode(self.struct['keyboard']['settings']['KeyboardLayout1']['value']) + ',' - + unicode(self.struct['keyboard']['settings']['KeyboardLayout2']['value']) + ' ' + '-model ' - + unicode(self.struct['keyboard']['settings']['KeyboardType']['value']), 1) + self.oe.dbg_log('system::set_keyboard_layout', str(self.struct['keyboard']['settings']['KeyboardLayout1']['value']) + ',' + + str(self.struct['keyboard']['settings']['KeyboardLayout2']['value']) + ' ' + '-model ' + + str(self.struct['keyboard']['settings']['KeyboardType']['value']), 1) if not os.path.exists(os.path.dirname(self.UDEV_KEYBOARD_INFO)): os.makedirs(os.path.dirname(self.UDEV_KEYBOARD_INFO)) config_file = open(self.UDEV_KEYBOARD_INFO, 'w') @@ -352,18 +352,18 @@ def set_keyboard_layout(self, listItem=None): ]['KeyboardLayout2']['value'], '-variant ' + self.struct['keyboard']['settings']['KeyboardVariant1']['value'] + ',' + self.struct['keyboard']['settings' ]['KeyboardVariant2']['value'], - '-model ' + unicode(self.struct['keyboard']['settings']['KeyboardType']['value']), + '-model ' + str(self.struct['keyboard']['settings']['KeyboardType']['value']), '-option "grp:alt_shift_toggle"', ] self.oe.execute('setxkbmap ' + ' '.join(parameters)) elif self.nox_keyboard_layouts == True: - self.oe.dbg_log('system::set_keyboard_layout', unicode(self.struct['keyboard']['settings']['KeyboardLayout1']['value']), 1) + self.oe.dbg_log('system::set_keyboard_layout', str(self.struct['keyboard']['settings']['KeyboardLayout1']['value']), 1) parameter = self.struct['keyboard']['settings']['KeyboardLayout1']['value'] command = 'loadkmap < `ls -1 %s/*/%s.bmap`' % (self.NOX_KEYBOARD_INFO, parameter) self.oe.dbg_log('system::set_keyboard_layout', command, 1) self.oe.execute(command) self.oe.dbg_log('system::set_keyboard_layout', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::set_keyboard_layout', 'ERROR: (' + repr(e) + ')') def set_hostname(self, listItem=None): @@ -394,7 +394,7 @@ def set_hostname(self, listItem=None): self.oe.dbg_log('system::set_hostname', 'is empty', 1) self.oe.set_busy(0) self.oe.dbg_log('system::set_hostname', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('system::set_hostname', 'ERROR: (' + repr(e) + ')') @@ -462,7 +462,7 @@ def get_keyboard_layouts(self): arrTypes, arrVariants, ) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::get_keyboard_layouts', 'ERROR: (' + repr(e) + ')') @@ -471,7 +471,7 @@ def set_hw_clock(self): self.oe.dbg_log('system::set_hw_clock', 'enter_function', 0) self.oe.execute('%s 2>/dev/null' % self.SET_CLOCK_CMD) self.oe.dbg_log('system::set_hw_clock', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::set_hw_clock', 'ERROR: (' + repr(e) + ')', 4) def reset_xbmc(self, listItem=None): @@ -487,7 +487,7 @@ def reset_xbmc(self, listItem=None): xbmc.executebuiltin('Reboot') self.oe.set_busy(0) self.oe.dbg_log('system::reset_xbmc', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('system::reset_xbmc', 'ERROR: (' + repr(e) + ')', 4) @@ -504,7 +504,7 @@ def reset_oe(self, listItem=None): xbmc.executebuiltin('Reboot') self.oe.set_busy(0) self.oe.dbg_log('system::reset_oe', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('system::reset_oe', 'ERROR: (' + repr(e) + ')', 4) @@ -519,7 +519,7 @@ def ask_sure_reset(self, part): else: return 0 self.oe.dbg_log('system::ask_sure_reset', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('system::ask_sure_reset', 'ERROR: (' + repr(e) + ')', 4) @@ -572,7 +572,7 @@ def do_backup(self, listItem=None): del self.backup_dlg self.oe.dbg_log('system::do_backup', 'exit_function', 0) - except Exception, e: + except Exception as e: self.backup_dlg.close() self.oe.dbg_log('system::do_backup', 'ERROR: (' + repr(e) + ')') @@ -623,7 +623,7 @@ def do_restore(self, listItem=None): self.oe.dbg_log('system::do_restore', 'User Abort!', 0) self.oe.execute('rm -rf %s' % self.RESTORE_DIR) self.oe.dbg_log('system::do_restore', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_restore', 'ERROR: (' + repr(e) + ')') def do_send_system_logs(self, listItem=None): @@ -631,7 +631,7 @@ def do_send_system_logs(self, listItem=None): self.oe.dbg_log('system::do_send_system_logs', 'enter_function', 0) self.do_send_logs('/usr/bin/pastekodi') self.oe.dbg_log('system::do_send_system_logs', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_do_send_system_logs', 'ERROR: (' + repr(e) + ')') def do_send_crash_logs(self, listItem=None): @@ -639,7 +639,7 @@ def do_send_crash_logs(self, listItem=None): self.oe.dbg_log('system::do_send_crash_logs', 'enter_function', 0) self.do_send_logs('/usr/bin/pastecrash') self.oe.dbg_log('system::do_send_crash_logs', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_do_send_crash_logs', 'ERROR: (' + repr(e) + ')') def do_send_logs(self, log_cmd): @@ -662,7 +662,7 @@ def do_send_logs(self, log_cmd): done_dlg.ok('Failed paste', 'Failed to paste log files, try again') self.oe.dbg_log('system::do_send_logs', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_do_send_logs', 'ERROR: (' + repr(e) + ')') def tar_add_folder(self, tar, folder): @@ -692,7 +692,7 @@ def tar_add_folder(self, tar, folder): if hasattr(self, 'backup_dlg'): progress = round(1.0 * self.done_backup_size / self.total_backup_size * 100) self.backup_dlg.update(int(progress), folder, item) - except Exception, e: + except Exception as e: self.backup_dlg.close() self.oe.dbg_log('system::tar_add_folder', 'ERROR: (' + repr(e) + ')') @@ -718,7 +718,7 @@ def init_pinlock(self, listItem=None): if (self.oe.read_setting('system', 'pinlock_enable') == "0"): self.oe.write_setting('system', 'pinlock_pin', '') self.oe.dbg_log('system::init_pinlock', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('ssystem::init_pinlock', 'ERROR: (%s)' % repr(e), 4) def set_pinlock(self, listItem=None): @@ -741,7 +741,7 @@ def set_pinlock(self, listItem=None): self.struct['pinlock']['settings']['pinlock_enable']['value'] = '0' self.oe.write_setting('system', 'pinlock_enable', '0') self.oe.dbg_log('system::set_pinlock', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('ssystem::set_pinlock', 'ERROR: (%s)' % repr(e), 4) def do_wizard(self): @@ -752,7 +752,7 @@ def do_wizard(self): self.oe.winOeMain.set_wizard_button_title(self.oe._(32308)) self.oe.winOeMain.set_wizard_button_1(self.struct['ident']['settings']['hostname']['value'], self, 'wizard_set_hostname') self.oe.dbg_log('system::do_wizard', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::do_wizard', 'ERROR: (' + repr(e) + ')') def wizard_set_hostname(self): @@ -777,5 +777,5 @@ def wizard_set_hostname(self): self.oe.winOeMain.getControl(1401).setLabel(self.struct['ident']['settings']['hostname']['value']) self.oe.write_setting('system', 'hostname', self.struct['ident']['settings']['hostname']['value']) self.oe.dbg_log('system::wizard_set_hostname', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('system::wizard_set_hostname', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 1246c3a8..901fcba7 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -172,7 +172,7 @@ def __init__(self, oeMain): self.last_update_check = 0 self.arrVariants = {} self.oe.dbg_log('updates::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::__init__', 'ERROR: (' + repr(e) + ')') def start_service(self): @@ -183,7 +183,7 @@ def start_service(self): self.set_auto_update() del self.is_service self.oe.dbg_log('updates::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::start_service', 'ERROR: (' + repr(e) + ')') def stop_service(self): @@ -192,14 +192,14 @@ def stop_service(self): if hasattr(self, 'update_thread'): self.update_thread.stop() self.oe.dbg_log('updates::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): try: self.oe.dbg_log('updates::do_init', 'enter_function', 0) self.oe.dbg_log('updates::do_init', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::do_init', 'ERROR: (' + repr(e) + ')') def exit(self): @@ -340,7 +340,7 @@ def load_values(self): self.oe.dbg_log('updates::load_values', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::load_values', 'ERROR: (' + repr(e) + ')') def load_menu(self, focusItem): @@ -348,16 +348,16 @@ def load_menu(self, focusItem): self.oe.dbg_log('updates::load_menu', 'enter_function', 0) self.oe.winOeMain.build_menu(self.struct) self.oe.dbg_log('updates::load_menu', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::load_menu', 'ERROR: (' + repr(e) + ')') def set_value(self, listItem): try: self.oe.dbg_log('updates::set_value', 'enter_function', 0) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') - self.oe.write_setting('updates', listItem.getProperty('entry'), unicode(listItem.getProperty('value'))) + self.oe.write_setting('updates', listItem.getProperty('entry'), str(listItem.getProperty('value'))) self.oe.dbg_log('updates::set_value', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_value', 'ERROR: (' + repr(e) + ')') def set_auto_update(self, listItem=None): @@ -371,9 +371,9 @@ def set_auto_update(self, listItem=None): self.update_thread.start() else: self.update_thread.wait_evt.set() - self.oe.dbg_log('updates::set_auto_update', unicode(self.struct['update']['settings']['AutoUpdate']['value']), 1) + self.oe.dbg_log('updates::set_auto_update', str(self.struct['update']['settings']['AutoUpdate']['value']), 1) self.oe.dbg_log('updates::set_auto_update', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_auto_update', 'ERROR: (' + repr(e) + ')') def set_channel(self, listItem=None): @@ -383,7 +383,7 @@ def set_channel(self, listItem=None): self.set_value(listItem) self.struct['update']['settings']['Build']['values'] = self.get_available_builds() self.oe.dbg_log('updates::set_channel', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_channel', 'ERROR: (' + repr(e) + ')') def set_custom_channel(self, listItem=None): @@ -398,7 +398,7 @@ def set_custom_channel(self, listItem=None): self.struct['update']['settings']['Channel']['value'] = None self.struct['update']['settings']['Build']['values'] = self.get_available_builds() self.oe.dbg_log('updates::set_custom_channel', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_custom_channel', 'ERROR: (' + repr(e) + ')') def custom_sort_train(self, a, b): @@ -419,13 +419,13 @@ def get_channels(self): try: self.oe.dbg_log('updates::get_channels', 'enter_function', 0) channels = [] - self.oe.dbg_log('updates::get_channels', unicode(self.update_json), 0) + self.oe.dbg_log('updates::get_channels', str(self.update_json), 0) if not self.update_json is None: for channel in self.update_json: channels.append(channel) self.oe.dbg_log('updates::get_channels', 'exit_function', 0) return sorted(list(set(channels)), key=cmp_to_key(self.custom_sort_train)) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::get_channels', 'ERROR: (' + repr(e) + ')') def do_manual_update(self, listItem=None): @@ -462,7 +462,7 @@ def do_manual_update(self, listItem=None): self.do_autoupdate() self.struct['update']['settings']['Build']['value'] = '' self.oe.dbg_log('updates::do_manual_update', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::do_manual_update', 'ERROR: (' + repr(e) + ')') def get_json(self, url=None): @@ -479,7 +479,7 @@ def get_json(self, url=None): update_json = None self.oe.dbg_log('updates::get_json', 'exit_function', 0) return update_json - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::get_json', 'ERROR: (' + repr(e) + ')') def build_json(self, notify_error=False): @@ -503,7 +503,7 @@ def build_json(self, notify_error=False): return self.oe.dbg_log('updates::build_json', 'exit_function', 0) return update_json - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::build_json', 'ERROR: (' + repr(e) + ')') def get_available_builds(self, shortname=None): @@ -529,7 +529,7 @@ def get_available_builds(self, shortname=None): return update_files else: return build - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::get_available_builds', 'ERROR: (' + repr(e) + ')') def check_updates_v2(self, force=False): @@ -571,7 +571,7 @@ def check_updates_v2(self, force=False): self.update_in_progress = True self.do_autoupdate(None, True) self.oe.dbg_log('updates::check_updates_v2', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::check_updates_v2', 'ERROR: (' + repr(e) + ')') def do_autoupdate(self, listItem=None, silent=False): @@ -595,7 +595,7 @@ def do_autoupdate(self, listItem=None, silent=False): delattr(self, 'update_in_progress') self.oe.dbg_log('updates::do_autoupdate', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::do_autoupdate', 'ERROR: (' + repr(e) + ')') def get_rpi_flashing_state(self): @@ -696,7 +696,7 @@ def set_rpi_bootloader(self, listItem): self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() self.oe.dbg_log('updates::set_rpi_bootloader', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_rpi_bootloader', 'ERROR: (' + repr(e) + ')') def set_rpi_vl805(self, listItem): @@ -723,7 +723,7 @@ def __init__(self, oeMain): threading.Thread.__init__(self) self.oe.dbg_log('updates::updateThread', 'Started', 1) self.oe.dbg_log('updates::updateThread::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::updateThread::__init__', 'ERROR: (' + repr(e) + ')') def stop(self): @@ -732,7 +732,7 @@ def stop(self): self.stopped = True self.wait_evt.set() self.oe.dbg_log('updates::updateThread::stop()', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::updateThread::stop()', 'ERROR: (' + repr(e) + ')') def run(self): @@ -749,5 +749,5 @@ def run(self): self.wait_evt.clear() self.oe.dbg_log('updates::updateThread', 'Stopped', 1) self.oe.dbg_log('updates::updateThread::run', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::updateThread::run', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/xdbus.py b/src/resources/lib/modules/xdbus.py index 04e24674..e2fe7b19 100644 --- a/src/resources/lib/modules/xdbus.py +++ b/src/resources/lib/modules/xdbus.py @@ -20,7 +20,7 @@ def __init__(self, oeMain): self.oe = oeMain self.dbusSystemBus = self.oe.dbusSystemBus self.oe.dbg_log('xdbus::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::__init__', 'ERROR: (' + repr(e) + ')', 4) def start_service(self): @@ -29,7 +29,7 @@ def start_service(self): self.dbusMonitor = dbusMonitor(self.oe) self.dbusMonitor.start() self.oe.dbg_log('xdbus::start_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::start_service', 'ERROR: (' + repr(e) + ')', 4) def stop_service(self): @@ -39,7 +39,7 @@ def stop_service(self): self.dbusMonitor.stop() del self.dbusMonitor self.oe.dbg_log('xdbus::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::stop_service', 'ERROR: (' + repr(e) + ')') def exit(self): @@ -51,7 +51,7 @@ def restart(self): self.stop_service() self.start_service() self.oe.dbg_log('xdbus::restart', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::restart', 'ERROR: (' + repr(e) + ')') @@ -68,13 +68,13 @@ def __init__(self, oeMain): dbus.mainloop.glib.threads_init() threading.Thread.__init__(self) self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'ERROR: (' + repr(e) + ')', 4) def run(self): try: self.oe.dbg_log('xdbus::dbusMonitor::run', 'enter_function', 0) - for strModule in sorted(self.oe.dictModules, key=lambda x: self.oe.dictModules[x].menu.keys()): + for strModule in sorted(self.oe.dictModules, key=lambda x: list(self.oe.dictModules[x].menu.keys())): module = self.oe.dictModules[strModule] if hasattr(module, 'monitor') and module.ENABLED: monitor = module.monitor(self.oe, module) @@ -87,7 +87,7 @@ def run(self): except: pass self.oe.dbg_log('xdbus::dbusMonitor::run', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::dbusMonitor::run', 'ERROR: (' + repr(e) + ')', 4) def stop(self): @@ -98,7 +98,7 @@ def stop(self): monitor.remove_signal_receivers() monitor = None self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index e451675d..62084347 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -73,7 +73,7 @@ def onInit(self): self.setProperty('version', self.oe.VERSION) self.setProperty('build', self.oe.BUILD) self.oe.winOeMain = self - for strModule in sorted(self.oe.dictModules, key=lambda x: self.oe.dictModules[x].menu.keys()): + for strModule in sorted(self.oe.dictModules, key=lambda x: list(self.oe.dictModules[x].menu.keys())): module = self.oe.dictModules[strModule] self.oe.dbg_log('init module', strModule, 0) if module.ENABLED: @@ -92,7 +92,7 @@ def onInit(self): self.setFocusId(self.guiMenList) self.onFocus(self.guiMenList) self.oe.set_busy(0) - except Exception, e: + except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('oeWindows.mainWindow::onInit', 'ERROR: (' + repr(e) + ')') @@ -100,19 +100,19 @@ def addMenuItem(self, strName, dictProperties): try: lstItem = xbmcgui.ListItem(label=self.oe._(strName)) for strProp in dictProperties: - lstItem.setProperty(strProp, unicode(dictProperties[strProp])) + lstItem.setProperty(strProp, str(dictProperties[strProp])) self.getControl(self.guiMenList).addItem(lstItem) - except Exception, e: - self.oe.dbg_log('oeWindows.mainWindow::addMenuItem(' + unicode(strName) + ')', 'ERROR: (' + repr(e) + ')') + except Exception as e: + self.oe.dbg_log('oeWindows.mainWindow::addMenuItem(' + str(strName) + ')', 'ERROR: (' + repr(e) + ')') def addConfigItem(self, strName, dictProperties, strType): try: lstItem = xbmcgui.ListItem(label=strName) for strProp in dictProperties: - lstItem.setProperty(strProp, unicode(dictProperties[strProp])) + lstItem.setProperty(strProp, str(dictProperties[strProp])) self.getControl(int(strType)).addItem(lstItem) return lstItem - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.mainWindow::addConfigItem(' + strName + ')', 'ERROR: (' + repr(e) + ')') def build_menu(self, struct, fltr=[], optional='0'): @@ -146,7 +146,7 @@ def build_menu(self, struct, fltr=[], optional='0'): dictProperties['validate'] = setting['validate'] if 'values' in setting: dictProperties['values'] = '|'.join(setting['values']) - if isinstance(setting['name'], basestring): + if isinstance(setting['name'], str): name = setting['name'] else: name = self.oe._(setting['name']) @@ -166,7 +166,7 @@ def build_menu(self, struct, fltr=[], optional='0'): m_menu.append(m_entry) for m_entry in m_menu: self.addConfigItem(m_entry['name'], m_entry['properties'], m_entry['list']) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.mainWindow::build_menu', 'ERROR: (' + repr(e) + ')') def showButton(self, number, name, module, action, onup=None, onleft=None): @@ -182,8 +182,8 @@ def showButton(self, number, name, module, action, onup=None, onleft=None): button.controlLeft(self.getControl(onleft)) button.setVisible(True) self.oe.dbg_log('oeWindows::showButton', 'exit_function', 0) - except Exception, e: - self.oe.dbg_log('oeWindows.mainWindow::showButton(' + unicode(number) + ', ' + unicode(action) + ')', 'ERROR: (' + repr(e) + ')') + except Exception as e: + self.oe.dbg_log('oeWindows.mainWindow::showButton(' + str(number) + ', ' + str(action) + ')', 'ERROR: (' + repr(e) + ')') def onAction(self, action): try: @@ -222,8 +222,8 @@ def onAction(self, action): self.setProperty('InfoText', nextItem.getProperty('InfoText')) if focusId == self.guiMenList: self.setFocusId(focusId) - except Exception, e: - self.oe.dbg_log('oeWindows.mainWindow::onAction(' + unicode(action) + ')', 'ERROR: (' + repr(e) + ')') + except Exception as e: + self.oe.dbg_log('oeWindows.mainWindow::onAction(' + str(action) + ')', 'ERROR: (' + repr(e) + ')') if actionId in self.oe.CANCEL: self.close() @@ -290,12 +290,12 @@ def onClick(self, controlID): xbmcDialog = xbmcgui.Dialog() returnValue = xbmcDialog.browse(1, 'LibreELEC.tv', 'files', '', False, False, '/') if returnValue != '' and returnValue != '/': - selectedItem.setProperty('value', unicode(returnValue)) + selectedItem.setProperty('value', str(returnValue)) elif strTyp == 'folder': xbmcDialog = xbmcgui.Dialog() returnValue = xbmcDialog.browse(0, 'LibreELEC.tv', 'files', '', False, False, '/storage') if returnValue != '' and returnValue != '/': - selectedItem.setProperty('value', unicode(returnValue)) + selectedItem.setProperty('value', str(returnValue)) elif strTyp == 'ip': xbmcDialog = xbmcgui.Dialog() returnValue = xbmcDialog.numeric(3, 'LibreELEC.tv', strValue) @@ -312,7 +312,7 @@ def onClick(self, controlID): if returnValue == '': returnValue = -1 if returnValue > -1: - selectedItem.setProperty('value', unicode(returnValue)) + selectedItem.setProperty('value', str(returnValue)) elif strTyp == 'bool': strValue = strValue.lower() if strValue == '0': @@ -335,8 +335,8 @@ def onClick(self, controlID): self.setFocusId(controlID) self.getControl(controlID).selectItem(selectedPosition) self.oe.dbg_log('oeWindows::onClick', 'exit_function', 0) - except Exception, e: - self.oe.dbg_log('oeWindows.mainWindow::onClick(' + unicode(controlID) + ')', 'ERROR: (' + repr(e) + ')') + except Exception as e: + self.oe.dbg_log('oeWindows.mainWindow::onClick(' + str(controlID) + ')', 'ERROR: (' + repr(e) + ')') def onUnload(self): pass @@ -380,7 +380,7 @@ def onFocus(self, controlID): getattr(self.oe.dictModules[selectedMenuItem.getProperty('modul')], strMenuLoader)(selectedMenuItem) self.getControl(int(selectedMenuItem.getProperty('listTyp'))).setAnimations([('conditional', 'effect=fade start=0 end=100 time=100 condition=true')]) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.mainWindow::onFocus(' + repr(controlID) + ')', 'ERROR: (' + repr(e) + ')') def emptyButtonLabels(self): @@ -396,17 +396,17 @@ def set_title(self, text): self.getControl(1700).setLabel(text) def set_label1(self, text): - self.getControl(1701).setLabel(unicode(text)) + self.getControl(1701).setLabel(str(text)) def set_label2(self, text): - self.getControl(1702).setLabel(unicode(text)) + self.getControl(1702).setLabel(str(text)) def set_label3(self, text): - self.getControl(1703).setLabel(unicode(text)) + self.getControl(1703).setLabel(str(text)) def append_label3(self, text): label = self.getControl(1703).getLabel() - self.getControl(1703).setLabel(label + unicode(text)) + self.getControl(1703).setLabel(label + str(text)) def get_label3_len(self): return len(self.getControl(1703).getLabel()) @@ -489,7 +489,7 @@ def onInit(self): self.oe.winOeMain.set_wizard_button_1(cur_lang, self, 'wizard_set_language') self.showButton(1, 32303) self.setFocusId(self.buttons[1]['id']) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::onInit()', 'ERROR: (' + repr(e) + ')') def wizard_set_language(self): @@ -523,31 +523,31 @@ def wizard_set_language(self): self.showButton(1, 32303) self.setFocusId(self.buttons[1]['id']) self.oe.dbg_log('oeWindows::wizard_set_language', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows::wizard_set_language', 'ERROR: (' + repr(e) + ')') def set_wizard_text(self, text): try: self.getControl(self.wizTextbox).setText(text) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_text()', 'ERROR: (' + repr(e) + ')') def set_wizard_title(self, title): try: self.getControl(self.wizTitle).setLabel(title) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_title()', 'ERROR: (' + repr(e) + ')') def set_wizard_button_title(self, title): try: self.getControl(self.wizBtnTitle).setLabel(title) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_button_title()', 'ERROR: (' + repr(e) + ')') def set_wizard_list_title(self, title): try: self.getControl(self.wizLstTitle).setLabel(title) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_list_title()', 'ERROR: (' + repr(e) + ')') def set_wizard_button_1(self, label, modul, action): @@ -565,7 +565,7 @@ def set_wizard_button_1(self, label, modul, action): self.getControl(self.buttons[1]['id']).controlLeft(self.getControl(self.buttons[3]['id'])) self.getControl(self.buttons[2]['id']).controlUp(self.getControl(self.buttons[3]['id'])) self.getControl(self.buttons[2]['id']).controlRight(self.getControl(self.buttons[1]['id'])) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_button_1()', 'ERROR: (' + repr(e) + ')') def set_wizard_button_2(self, label, modul, action): @@ -582,7 +582,7 @@ def set_wizard_button_2(self, label, modul, action): self.getControl(self.buttons[2]['id']).controlUp(self.getControl(self.buttons[4]['id'])) self.getControl(self.buttons[2]['id']).controlRight(self.getControl(self.buttons[1]['id'])) self.getControl(self.buttons[3]['id']).controlRight(self.getControl(self.buttons[4]['id'])) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_button_2()', 'ERROR: (' + repr(e) + ')') def set_wizard_radiobutton_1(self, label, modul, action, selected=False): @@ -598,7 +598,7 @@ def set_wizard_radiobutton_1(self, label, modul, action, selected=False): self.getControl(self.buttons[2]['id']).controlUp(self.getControl(self.radiobuttons[1]['id'])) self.getControl(self.buttons[2]['id']).controlRight(self.getControl(self.buttons[1]['id'])) self.getControl(self.radiobuttons[1]['id']).setSelected(selected) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_button_1()', 'ERROR: (' + repr(e) + ')') def set_wizard_radiobutton_2(self, label, modul, action, selected=False): @@ -616,7 +616,7 @@ def set_wizard_radiobutton_2(self, label, modul, action, selected=False): self.getControl(self.buttons[2]['id']).controlRight(self.getControl(self.buttons[1]['id'])) self.getControl(self.radiobuttons[1]['id']).controlRight(self.getControl(self.radiobuttons[2]['id'])) self.getControl(self.radiobuttons[2]['id']).setSelected(selected) - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::set_wizard_button_2()', 'ERROR: (' + repr(e) + ')') def onAction(self, action): @@ -626,7 +626,7 @@ def onClick(self, controlID): global strModule global prevModule try: - self.oe.dbg_log('wizard::onClick(' + unicode(controlID) + ')', 'enter_function', 0) + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'enter_function', 0) for btn in self.buttons: if controlID == self.buttons[btn]['id'] and self.buttons[btn]['id'] > 2: if hasattr(self.buttons[btn]['modul'], self.buttons[btn]['action']): @@ -650,7 +650,7 @@ def onClick(self, controlID): self.wizards.remove(prevModule) self.oe.remove_node(prevModule) self.onClick(1500) - self.oe.dbg_log('wizard::onClick(' + unicode(controlID) + ')', 'exit_function', 0) + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', 0) if controlID == 1500: self.getControl(1390).setLabel('1') @@ -667,7 +667,7 @@ def onClick(self, controlID): self.set_wizard_list_title('') self.set_wizard_button_title('') - for module in sorted(self.oe.dictModules, key=lambda x: self.oe.dictModules[x].menu.keys()): + for module in sorted(self.oe.dictModules, key=lambda x: list(self.oe.dictModules[x].menu.keys())): strModule = module if hasattr(self.oe.dictModules[strModule], 'do_wizard') and self.oe.dictModules[strModule].ENABLED: if strModule == self.last_wizard: @@ -697,8 +697,8 @@ def onClick(self, controlID): self.oe.write_setting('libreelec', 'wizard_completed', 'True') self.close() xbmc.executebuiltin(lang_str) - self.oe.dbg_log('wizard::onClick(' + unicode(controlID) + ')', 'exit_function', 0) - except Exception, e: + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', 0) + except Exception as e: self.oe.dbg_log('oeWindows.wizard::onClick()', 'ERROR: (' + repr(e) + ')') def onFocus(self, controlID): @@ -709,15 +709,15 @@ def showButton(self, number, name): button = self.getControl(self.buttons[number]['id']) button.setLabel(self.oe._(name)) button.setVisible(True) - except Exception, e: - self.oe.dbg_log('oeWindows.wizard::showButton(' + unicode(number) + ')', 'ERROR: (' + repr(e) + ')') + except Exception as e: + self.oe.dbg_log('oeWindows.wizard::showButton(' + str(number) + ')', 'ERROR: (' + repr(e) + ')') def addConfigItem(self, strName, dictProperties, strType): try: lstItem = xbmcgui.ListItem(label=strName) for strProp in dictProperties: - lstItem.setProperty(strProp, unicode(dictProperties[strProp])) + lstItem.setProperty(strProp, str(dictProperties[strProp])) self.getControl(int(strType)).addItem(lstItem) return lstItem - except Exception, e: + except Exception as e: self.oe.dbg_log('oeWindows.wizard::addConfigItem(' + strName + ')', 'ERROR: (' + repr(e) + ')') diff --git a/src/service.py b/src/service.py index 1c0c7590..1088acd1 100644 --- a/src/service.py +++ b/src/service.py @@ -30,7 +30,7 @@ def __init__(self, oeMain): threading.Thread.__init__(self) self.daemon = True self.oe.dbg_log('_service_::__init__', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('_service_::__init__', 'ERROR: (' + repr(e) + ')') def stop(self): @@ -39,11 +39,11 @@ def stop(self): self.stopped = True sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(self.socket_file) - sock.send('exit') + sock.send(bytes('exit', 'utf-8')) sock.close() self.sock.close() self.oe.dbg_log('_service_::stop', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('_service_::stop', 'ERROR: (' + repr(e) + ')') def run(self): @@ -53,9 +53,9 @@ def run(self): threading.Thread(target=self.oe.openWizard).start() while self.stopped == False: self.oe.dbg_log('_service_::run', 'WAITING:', 1) - (conn, addr) = self.sock.accept() - message = conn.recv(1024) - self.oe.dbg_log('_service_::run', 'MESSAGE:' + repr(message), 1) + conn, addr = self.sock.accept() + message = (conn.recv(1024)).decode('utf-8') + self.oe.dbg_log('_service_::run', 'MESSAGE:' + message, 1) conn.close() if message == 'openConfigurationWindow': if not hasattr(self.oe, 'winOeMain'): @@ -66,7 +66,7 @@ def run(self): if message == 'exit': self.stopped = True self.oe.dbg_log('_service_::run', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('_service_::run', 'ERROR: (' + repr(e) + ')') From 9e7028289f03f0b8c67b06768bdcad20708e851f Mon Sep 17 00:00:00 2001 From: Jay M Date: Sat, 2 Nov 2019 12:28:43 -0700 Subject: [PATCH 02/51] Bump python dependency remove default encoding Handle bytes-strings conversion --- addon.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon.xml b/addon.xml index b3af2b5c..f4682a66 100644 --- a/addon.xml +++ b/addon.xml @@ -4,7 +4,7 @@ version="@ADDONVERSION@" provider-name="libreelec.tv"> - + From b4761fc3fd2bedcd2b8a5eddf04f7ba1c3698964 Mon Sep 17 00:00:00 2001 From: Jay M Date: Sat, 2 Nov 2019 15:31:00 -0700 Subject: [PATCH 03/51] fix updates.py except as e --- src/resources/lib/modules/updates.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 901fcba7..6e6ec9f6 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -649,7 +649,7 @@ def get_rpi_flashing_state(self): self.oe.dbg_log('updates::get_rpi_flashing_state', 'state: %s' % state, 0) self.oe.dbg_log('updates::get_rpi_flashing_state', 'exit_function', 0) return state - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::get_rpi_flashing_state', 'ERROR: (' + repr(e) + ')') return {'incompatible': True} @@ -663,7 +663,7 @@ def get_rpi_eeprom(self, device): self.oe.dbg_log('updates::get_rpi_eeprom', 'values: %s' % values, 0) self.oe.dbg_log('updates::get_rpi_eeprom', 'exit_function', 0) return 'true' if ('%s="yes"' % device) in values else 'false' - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::get_rpi_eeprom', 'ERROR: (' + repr(e) + ')') def set_rpi_eeprom(self): @@ -683,7 +683,7 @@ def set_rpi_eeprom(self): os.remove(self.RPI_FLASHING_TRIGGER) self.oe.dbg_log('updates::set_rpi_eeprom', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_rpi_eeprom', 'ERROR: (' + repr(e) + ')') def set_rpi_bootloader(self, listItem): @@ -709,7 +709,7 @@ def set_rpi_vl805(self, listItem): self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() self.oe.dbg_log('updates::set_rpi_vl805', 'exit_function', 0) - except Exception, e: + except Exception as e: self.oe.dbg_log('updates::set_rpi_vl805', 'ERROR: (' + repr(e) + ')') class updateThread(threading.Thread): From 79d48383efa2509cecaab035af42793608b3d00d Mon Sep 17 00:00:00 2001 From: Jay M Date: Sat, 2 Nov 2019 16:34:18 -0700 Subject: [PATCH 04/51] Bump addon version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 60a6864c..66eac9b9 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) ADDON_NAME=service.libreelec.settings -ADDON_VERSION=9.0.0 +ADDON_VERSION=9.8.0 DISTRONAME:=LibreELEC SHELL=/bin/bash From faf93516927ce0d9f25fe1d1e229911d9d37e960 Mon Sep 17 00:00:00 2001 From: Jay M Date: Sun, 3 Nov 2019 11:05:36 -0800 Subject: [PATCH 05/51] Milhouse bytecode fixes --- .gitignore | 3 ++- src/oe.py | 16 +++++++++------- src/resources/lib/modules/updates.py | 22 +++++++++++----------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 80a7312a..6d593abe 100755 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ # build dir build/ -# pyo files +# bytecode files *.pyo +*.pyc # backup files *.orig diff --git a/src/oe.py b/src/oe.py index c6930f0b..30c8f51c 100644 --- a/src/oe.py +++ b/src/oe.py @@ -284,7 +284,7 @@ def download_file(source, destination, silent=False): download_dlg = xbmcgui.DialogProgress() download_dlg.create('LibreELEC', _(32181).encode('utf-8'), ' ', ' ') response = urllib.request.urlopen(urllib.parse.quote(source, safe=':/')) - total_size = int(response.info().getheader('Content-Length').strip()) + total_size = int(response.getheader('Content-Length').strip()) minutes = 0 seconds = 0 rest = 0 @@ -293,7 +293,7 @@ def download_file(source, destination, silent=False): size = 0 part_size = 0 last_percent = 0 - while 1: + while True: part = response.read(32768) part_size += len(part) if time.time() > start + 2: @@ -301,12 +301,14 @@ def download_file(source, destination, silent=False): start = time.time() size = part_size rest = total_size - part_size - minutes = rest / 1024 / speed / 60 - seconds = rest / 1024 / speed - minutes * 60 + minutes = int(rest / 1024 / speed / 60) + seconds = int(rest / 1024 / speed) % 60 percent = int(part_size * 100.0 / total_size) if silent == False: - download_dlg.update(percent, _(32181) + ': %s' % source.rsplit('/', 1)[1], _(32182) + ': %d KB/s' % speed, _(32183) - + ': %d m %d s' % (minutes, seconds)) + download_dlg.update(percent, + '%s: %s' % (_(32181), source.rsplit('/', 1)[1]), + '%s: %d KB/s' % (_(32182), speed), + '%s: %d m %d s' % (_(32183), minutes, seconds)) if download_dlg.iscanceled(): os.remove(destination) local_file.close() @@ -693,7 +695,7 @@ def load_modules(): dict_names = {} dictModules = {} for file_name in sorted(os.listdir(__cwd__ + '/resources/lib/modules')): - if not file_name.startswith('__') and (file_name.endswith('.py') or file_name.endswith('.pyo')): + if not file_name.startswith('__') and (file_name.endswith('.py') or file_name.endswith('.pyc')): (name, ext) = file_name.split('.') dict_names[name] = None for module_name in dict_names: diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 6e6ec9f6..3d738c89 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -332,9 +332,9 @@ def load_values(self): self.struct['rpieeprom']['hidden'] = 'true' else: self.struct['rpieeprom']['settings']['bootloader']['value'] = self.get_rpi_eeprom('BOOTLOADER') - self.struct['rpieeprom']['settings']['bootloader']['name'] = '%s (%s)' % (self.oe._(32024).encode('utf-8'), self.rpi_flashing_state['bootloader']['state']) + self.struct['rpieeprom']['settings']['bootloader']['name'] = '%s (%s)' % (self.oe._(32024), self.rpi_flashing_state['bootloader']['state']) self.struct['rpieeprom']['settings']['vl805']['value'] = self.get_rpi_eeprom('VL805') - self.struct['rpieeprom']['settings']['vl805']['name'] = '%s (%s)' % (self.oe._(32026).encode('utf-8'), self.rpi_flashing_state['vl805']['state']) + self.struct['rpieeprom']['settings']['vl805']['name'] = '%s (%s)' % (self.oe._(32026), self.rpi_flashing_state['vl805']['state']) else: self.struct['rpieeprom']['hidden'] = 'true' @@ -452,9 +452,9 @@ def do_manual_update(self, listItem=None): version = self.oe.VERSION if self.struct['update']['settings']['Build']['value'] != '': self.update_file = self.update_json[self.struct['update']['settings']['Channel']['value']]['url'] + self.get_available_builds(self.struct['update']['settings']['Build']['value']) - answer = xbmcDialog.yesno('LibreELEC Update', self.oe._(32188).encode('utf-8') + ': ' + version.encode('utf-8'), - self.oe._(32187).encode('utf-8') + ': ' + self.struct['update']['settings']['Build']['value'].encode('utf-8'), - self.oe._(32180).encode('utf-8')) + answer = xbmcDialog.yesno('LibreELEC Update', '%s: %s' % (self.oe._(32188), version), + '%s: %s' % (self.oe._(32187), self.struct['update']['settings']['Build']['value']), + self.oe._(32180)) xbmcDialog = None del xbmcDialog if answer: @@ -637,14 +637,14 @@ def get_rpi_flashing_state(self): if jdata['EXITCODE'] in ['EXIT_SUCCESS', 'EXIT_UPDATE_REQUIRED']: if jdata['BOOTLOADER_LATEST'] > jdata['BOOTLOADER_CURRENT']: - state['bootloader']['state'] = self.oe._(32028).encode('utf-8') % (state['bootloader']['current'], state['bootloader']['latest']) + state['bootloader']['state'] = self.oe._(32028) % (state['bootloader']['current'], state['bootloader']['latest']) else: - state['bootloader']['state'] = self.oe._(32029).encode('utf-8') % state['bootloader']['current'] + state['bootloader']['state'] = self.oe._(32029) % state['bootloader']['current'] if jdata['VL805_LATEST'] and jdata['VL805_LATEST'] > jdata['VL805_CURRENT']: - state['vl805']['state'] = self.oe._(32028).encode('utf-8') % (state['vl805']['current'], state['vl805']['latest']) + state['vl805']['state'] = self.oe._(32028) % (state['vl805']['current'], state['vl805']['latest']) else: - state['vl805']['state'] = self.oe._(32029).encode('utf-8') % state['vl805']['current'] + state['vl805']['state'] = self.oe._(32029) % state['vl805']['current'] self.oe.dbg_log('updates::get_rpi_flashing_state', 'state: %s' % state, 0) self.oe.dbg_log('updates::get_rpi_flashing_state', 'exit_function', 0) @@ -691,7 +691,7 @@ def set_rpi_bootloader(self, listItem): self.oe.dbg_log('updates::set_rpi_bootloader', 'enter_function', 0) value = 'false' if listItem.getProperty('value') == 'true': - if xbmcgui.Dialog().yesno('Update RPi Bootloader', '%s\n\n%s' % (self.oe._(32023).encode('utf-8'), self.oe._(32326).encode('utf-8'))): + if xbmcgui.Dialog().yesno('Update RPi Bootloader', '%s\n\n%s' % (self.oe._(32023), self.oe._(32326))): value = 'true' self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() @@ -704,7 +704,7 @@ def set_rpi_vl805(self, listItem): self.oe.dbg_log('updates::set_rpi_vl805', 'enter_function', 0) value = 'false' if listItem.getProperty('value') == 'true': - if xbmcgui.Dialog().yesno('Update RPi USB3 Firmware', '%s\n\n%s' % (self.oe._(32023).encode('utf-8'), self.oe._(32326).encode('utf-8'))): + if xbmcgui.Dialog().yesno('Update RPi USB3 Firmware', '%s\n\n%s' % (self.oe._(32023), self.oe._(32326))): value = 'true' self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() From 3228cc340bea2f78b9b6b8b38686a99e0201430d Mon Sep 17 00:00:00 2001 From: Jay M Date: Mon, 4 Nov 2019 05:48:59 -0800 Subject: [PATCH 06/51] remove encoding --- src/default.py | 2 +- src/oe.py | 6 +++--- src/resources/lib/modules/bluetooth.py | 10 +++++----- src/resources/lib/modules/connman.py | 10 +++++----- src/resources/lib/modules/system.py | 14 +++++++------- src/resources/lib/modules/updates.py | 8 ++++---- src/resources/lib/oeWindows.py | 22 +++++++++++----------- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/default.py b/src/default.py index ae1077f8..7074d016 100644 --- a/src/default.py +++ b/src/default.py @@ -18,4 +18,4 @@ sock.send(bytes('openConfigurationWindow', 'utf-8')) sock.close() except Exception as e: - xbmc.executebuiltin('Notification("LibreELEC", "%s", 5000, "%s/icon.png")' % (_(32390).encode('utf-8'), __media__)) + xbmc.executebuiltin('Notification("LibreELEC", "%s", 5000, "%s/icon.png")' % (_(32390), __media__)) diff --git a/src/oe.py b/src/oe.py index 30c8f51c..f61caf32 100644 --- a/src/oe.py +++ b/src/oe.py @@ -282,7 +282,7 @@ def download_file(source, destination, silent=False): local_file = open(destination, 'wb') if silent == False: download_dlg = xbmcgui.DialogProgress() - download_dlg.create('LibreELEC', _(32181).encode('utf-8'), ' ', ' ') + download_dlg.create('LibreELEC', _(32181), ' ', ' ') response = urllib.request.urlopen(urllib.parse.quote(source, safe=':/')) total_size = int(response.getheader('Content-Length').strip()) minutes = 0 @@ -333,7 +333,7 @@ def extract_file(filename, extract, destination, silent=False): if tarfile.is_tarfile(filename): if silent == False: extract_dlg = xbmcgui.DialogProgress() - extract_dlg.create('LibreELEC ', _(32186).encode('utf-8'), ' ', ' ') + extract_dlg.create('LibreELEC ', _(32186), ' ', ' ') extract_dlg.update(0) compressed = tarfile.open(filename) names = compressed.getnames() @@ -397,7 +397,7 @@ def copy_file(source, destination, silent=False): destination_file = open(destination, 'wb') if silent == False: copy_dlg = xbmcgui.DialogProgress() - copy_dlg.create('LibreELEC', _(32181).encode('utf-8'), ' ', ' ') + copy_dlg.create('LibreELEC', _(32181), ' ', ' ') total_size = os.path.getsize(source) minutes = 0 seconds = 0 diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index a7cb8c50..aa5ce8f8 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -559,7 +559,7 @@ def open_context_menu(self, listItem): items.append(values[key]['text']) actions.append(values[key]['action']) select_window = xbmcgui.Dialog() - title = self.oe._(32012).encode('utf-8') + title = self.oe._(32012) result = select_window.select(title, items) if result >= 0: getattr(self, actions[result])(listItem) @@ -840,7 +840,7 @@ def TransferChanged(self, path, interface, dummy): if interface['Status'] == 'active': self.parent.download_start = time.time() self.parent.download = xbmcgui.DialogProgress() - self.parent.download.create('Bluetooth Filetransfer', '%s: %s' % (self.oe._(32181).encode('utf-8'), + self.parent.download.create('Bluetooth Filetransfer', '%s: %s' % (self.oe._(32181), self.parent.download_file), '', '') else: if hasattr(self.parent, 'download'): @@ -851,7 +851,7 @@ def TransferChanged(self, path, interface, dummy): del self.parent.download_start if interface['Status'] == 'complete': xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Bluetooth Filetransfer', self.oe._(32383).encode('utf-8')) + answer = xbmcDialog.yesno('Bluetooth Filetransfer', self.oe._(32383)) if answer == 1: fil = '%s/%s' % (self.oe.DOWNLOAD_DIR, self.parent.download_file) if 'image' in self.parent.download_type: @@ -865,8 +865,8 @@ def TransferChanged(self, path, interface, dummy): transferred = int(interface['Transferred'] / 1024) speed = transferred / (time.time() - self.parent.download_start) percent = int(round(100 / self.parent.download_size * (interface['Transferred'] / 1024), 0)) - self.parent.download.update(percent, '%s: %s' % (self.oe._(32181).encode('utf-8'), self.parent.download_file), - '%s: %d KB/s' % (self.oe._(32382).encode('utf-8'), speed)) + self.parent.download.update(percent, '%s: %s' % (self.oe._(32181), self.parent.download_file), + '%s: %d KB/s' % (self.oe._(32382), speed)) if self.parent.download.iscanceled(): obj = self.oe.dbusSystemBus.get_object('org.bluez.obex', self.parent.download_path) itf = dbus.Interface(obj, 'org.bluez.obex.Transfer1') diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index bee570b5..6541cebc 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -914,7 +914,7 @@ def open_context_menu(self, listItem): items.append(values[key]['text']) actions.append(values[key]['action']) select_window = xbmcgui.Dialog() - title = self.oe._(32012).encode('utf-8') + title = self.oe._(32012) result = select_window.select(title, items) if result >= 0: getattr(self, actions[result])(listItem) @@ -1449,7 +1449,7 @@ def RequestInput(self, path, fields): self.oe.input_request = True response = {} if 'Name' in fields: - xbmcKeyboard = xbmc.Keyboard('', self.oe._(32146).encode('utf-8')) + xbmcKeyboard = xbmc.Keyboard('', self.oe._(32146)) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): if xbmcKeyboard.getText() != '': @@ -1463,7 +1463,7 @@ def RequestInput(self, path, fields): raise Canceled('canceled') return response if 'Passphrase' in fields: - xbmcKeyboard = xbmc.Keyboard('', self.oe._(32147).encode('utf-8')) + xbmcKeyboard = xbmc.Keyboard('', self.oe._(32147)) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): if xbmcKeyboard.getText() != '': @@ -1481,7 +1481,7 @@ def RequestInput(self, path, fields): raise Canceled('canceled') return response if 'Username' in fields: - xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148).encode('utf-8')) + xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148)) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): if xbmcKeyboard.getText() != '': @@ -1495,7 +1495,7 @@ def RequestInput(self, path, fields): raise Canceled('canceled') return response if 'Password' in fields: - xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148).encode('utf-8'), True) + xbmcKeyboard = xbmc.Keyboard('', self.oe._(32148), True) xbmcKeyboard.doModal() if xbmcKeyboard.isConfirmed(): if xbmcKeyboard.getText() != '': diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index b6f161c3..9c1b6c55 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -512,7 +512,7 @@ def ask_sure_reset(self, part): try: self.oe.dbg_log('system::ask_sure_reset', 'enter_function', 0) xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno(part + ' Reset', self.oe._(32326).encode('utf-8'), self.oe._(32328).encode('utf-8')) + answer = xbmcDialog.yesno(part + ' Reset', self.oe._(32326), self.oe._(32328)) if answer == 1: if self.oe.reboot_counter(30, self.oe._(32323)) == 1: return 1 @@ -539,7 +539,7 @@ def do_backup(self, listItem=None): xbmcDialog = xbmcgui.Dialog() bckDir = xbmcDialog.browse( 0, - self.oe._(32371).encode('utf-8'), + self.oe._(32371), 'files', '', False, @@ -552,7 +552,7 @@ def do_backup(self, listItem=None): folder_stat = os.statvfs(bckDir) free_space = folder_stat.f_frsize * folder_stat.f_bavail if self.total_backup_size > free_space: - txt = self.oe.split_dialog_text(self.oe._(32379).encode('utf-8')) + txt = self.oe.split_dialog_text(self.oe._(32379)) xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.ok('Backup', txt[0], txt[1], txt[2]) return 0 @@ -560,7 +560,7 @@ def do_backup(self, listItem=None): pass self.backup_dlg = xbmcgui.DialogProgress() - self.backup_dlg.create('LibreELEC', self.oe._(32375).encode('utf-8'), ' ', ' ') + self.backup_dlg.create('LibreELEC', self.oe._(32375), ' ', ' ') if not os.path.exists(self.BACKUP_DESTINATION): os.makedirs(self.BACKUP_DESTINATION) self.backup_file = self.oe.timestamp() + '.tar' @@ -582,7 +582,7 @@ def do_restore(self, listItem=None): copy_success = 0 xbmcDialog = xbmcgui.Dialog() restore_file_path = xbmcDialog.browse( 1, - self.oe._(32373).encode('utf-8'), + self.oe._(32373), 'files', '??????????????.tar', False, @@ -607,11 +607,11 @@ def do_restore(self, listItem=None): else: self.oe.execute('rm -rf %s' % self.RESTORE_DIR) else: - txt = self.oe.split_dialog_text(self.oe._(32379).encode('utf-8')) + txt = self.oe.split_dialog_text(self.oe._(32379)) xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.ok('Restore', txt[0], txt[1], txt[2]) if copy_success == 1: - txt = self.oe.split_dialog_text(self.oe._(32380).encode('utf-8')) + txt = self.oe.split_dialog_text(self.oe._(32380)) xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno('Restore', txt[0], txt[1], txt[2]) if answer == 1: diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 3d738c89..4a119443 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -439,7 +439,7 @@ def do_manual_update(self, listItem=None): builds = self.get_available_builds() self.struct['update']['settings']['Build']['values'] = builds xbmcDialog = xbmcgui.Dialog() - buildSel = xbmcDialog.select(self.oe._(32020).encode('utf-8'), builds) + buildSel = xbmcDialog.select(self.oe._(32020), builds) if buildSel > -1: listItem = builds[buildSel] self.struct['update']['settings']['Build']['value'] = listItem @@ -498,7 +498,7 @@ def build_json(self, notify_error=False): update_json[channel] = custom_update_json[channel] elif notify_error: ok_window = xbmcgui.Dialog() - answer = ok_window.ok(self.oe._(32191).encode('utf-8'), 'Custom URL is not valid, or currently inaccessible.\n\n%s' % custom_url) + answer = ok_window.ok(self.oe._(32191), 'Custom URL is not valid, or currently inaccessible.\n\n%s' % custom_url) if not answer: return self.oe.dbg_log('updates::build_json', 'exit_function', 0) @@ -566,7 +566,7 @@ def check_updates_v2(self, force=False): if 'update' in update_json['data'] and 'folder' in update_json['data']: self.update_file = self.UPDATE_DOWNLOAD_URL % (update_json['data']['folder'], update_json['data']['update']) if self.struct['update']['settings']['UpdateNotify']['value'] == '1': - self.oe.notify(self.oe._(32363).encode('utf-8'), self.oe._(32364).encode('utf-8')) + self.oe.notify(self.oe._(32363), self.oe._(32364)) if self.struct['update']['settings']['AutoUpdate']['value'] == 'auto' and force == False: self.update_in_progress = True self.do_autoupdate(None, True) @@ -744,7 +744,7 @@ def run(self): if not hasattr(self.oe.dictModules['updates'], 'update_in_progress'): self.wait_evt.wait(21600) else: - self.oe.notify(self.oe._(32363).encode('utf-8'), self.oe._(32364).encode('utf-8')) + self.oe.notify(self.oe._(32363), self.oe._(32364)) self.wait_evt.wait(3600) self.wait_evt.clear() self.oe.dbg_log('updates::updateThread', 'Stopped', 1) diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 62084347..cce9ecc1 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -175,7 +175,7 @@ def showButton(self, number, name, module, action, onup=None, onleft=None): button = self.getControl(self.buttons[number]['id']) self.buttons[number]['modul'] = module self.buttons[number]['action'] = action - button.setLabel(self.oe._(name).encode('utf-8')) + button.setLabel(self.oe._(name)) if onup != None: button.controlUp(self.getControl(onup)) if onleft != None: @@ -472,19 +472,19 @@ def onInit(self): self.setProperty('version', self.oe.VERSION) self.setProperty('build', self.oe.BUILD) self.oe.dictModules['system'].do_init() - self.getControl(self.wizWinTitle).setLabel(self.oe._(32300).encode('utf-8')) + self.getControl(self.wizWinTitle).setLabel(self.oe._(32300)) self.getControl(self.buttons[3]['id']).setVisible(False) self.getControl(self.buttons[4]['id']).setVisible(False) self.getControl(self.radiobuttons[1]['id']).setVisible(False) self.getControl(self.radiobuttons[2]['id']).setVisible(False) self.getControl(self.buttons[2]['id']).setVisible(False) if self.oe.BOOT_STATUS == "SAFE": - self.set_wizard_title("[COLOR red][B]%s[/B][/COLOR]" % self.oe._(32393).encode('utf-8')) - self.set_wizard_text(self.oe._(32394).encode('utf-8')) + self.set_wizard_title("[COLOR red][B]%s[/B][/COLOR]" % self.oe._(32393)) + self.set_wizard_text(self.oe._(32394)) else: - self.set_wizard_title(self.oe._(32301).encode('utf-8')) - self.set_wizard_text(self.oe._(32302).encode('utf-8')) - self.oe.winOeMain.set_wizard_button_title(self.oe._(32310).encode('utf-8')) + self.set_wizard_title(self.oe._(32301)) + self.set_wizard_text(self.oe._(32302)) + self.oe.winOeMain.set_wizard_button_title(self.oe._(32310)) cur_lang = xbmc.getLanguage() self.oe.winOeMain.set_wizard_button_1(cur_lang, self, 'wizard_set_language') self.showButton(1, 32303) @@ -515,10 +515,10 @@ def wizard_set_language(self): else: self.oe.write_setting("system", "language", str(lang_new)) lang_str = 'SetGUILanguage(' + str(lang_new) + ')' - self.getControl(self.wizWinTitle).setLabel(self.oe._(32300).encode('utf-8')) - self.set_wizard_title(self.oe._(32301).encode('utf-8')) - self.set_wizard_text(self.oe._(32302).encode('utf-8')) - self.oe.winOeMain.set_wizard_button_title(self.oe._(32310).encode('utf-8')) + self.getControl(self.wizWinTitle).setLabel(self.oe._(32300)) + self.set_wizard_title(self.oe._(32301)) + self.set_wizard_text(self.oe._(32302)) + self.oe.winOeMain.set_wizard_button_title(self.oe._(32310)) self.oe.winOeMain.set_wizard_button_1(langKey, self, 'wizard_set_language') self.showButton(1, 32303) self.setFocusId(self.buttons[1]['id']) From de322cf8affec517e109adf969bab201b2829983 Mon Sep 17 00:00:00 2001 From: Jay M Date: Mon, 4 Nov 2019 06:10:45 -0800 Subject: [PATCH 07/51] dbus.service fix --- src/resources/lib/modules/bluetooth.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index aa5ce8f8..5e19c4e5 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -8,6 +8,7 @@ import xbmcgui import time import dbus +import dbus.service import threading import oeWindows From 15afdb5e9a1cd3bc7d31456f378f0f09d16c799d Mon Sep 17 00:00:00 2001 From: Jay M Date: Sun, 10 Nov 2019 16:29:14 -0800 Subject: [PATCH 08/51] remove Configparser --- src/resources/lib/modules/connman.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 6541cebc..9278f597 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -12,7 +12,6 @@ import xbmcgui import threading import oeWindows -import configparser import random import string From 32a29196ce157915d30979079fed3b3829c3e913 Mon Sep 17 00:00:00 2001 From: Jay M Date: Sun, 10 Nov 2019 16:36:38 -0800 Subject: [PATCH 09/51] update copyright --- src/default.py | 1 + src/oe.py | 1 + src/resources/lib/modules/about.py | 3 +-- src/resources/lib/modules/bluetooth.py | 1 + src/resources/lib/modules/services.py | 1 + src/resources/lib/modules/system.py | 1 + src/resources/lib/modules/xdbus.py | 3 +-- src/resources/lib/oeWindows.py | 1 + src/service.py | 1 + 9 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/default.py b/src/default.py index 7074d016..8137bf25 100644 --- a/src/default.py +++ b/src/default.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import xbmc import socket diff --git a/src/oe.py b/src/oe.py index f61caf32..0a687a87 100644 --- a/src/oe.py +++ b/src/oe.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) ################################# variables ################################## diff --git a/src/resources/lib/modules/about.py b/src/resources/lib/modules/about.py index 310b3a3f..c4389c38 100644 --- a/src/resources/lib/modules/about.py +++ b/src/resources/lib/modules/about.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) class about: @@ -66,5 +67,3 @@ def do_wizard(self): self.oe.dbg_log('about::do_wizard', 'exit_function', 0) except Exception as e: self.oe.dbg_log('about::do_wizard', 'ERROR: (' + repr(e) + ')') - - diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 5e19c4e5..14bedea3 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import os diff --git a/src/resources/lib/modules/services.py b/src/resources/lib/modules/services.py index e2b24dd9..564b4a42 100644 --- a/src/resources/lib/modules/services.py +++ b/src/resources/lib/modules/services.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import os import glob diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 9c1b6c55..c5c2fd61 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import os import re diff --git a/src/resources/lib/modules/xdbus.py b/src/resources/lib/modules/xdbus.py index e2fe7b19..22252334 100644 --- a/src/resources/lib/modules/xdbus.py +++ b/src/resources/lib/modules/xdbus.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import dbus import gobject @@ -100,5 +101,3 @@ def stop(self): self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'exit_function', 0) except Exception as e: self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'ERROR: (' + repr(e) + ')') - - diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index cce9ecc1..b381388b 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import xbmc import xbmcgui diff --git a/src/service.py b/src/service.py index 1088acd1..e39c8453 100644 --- a/src/service.py +++ b/src/service.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2013 Lutz Fiebach (lufie@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) import oe import xbmc From ba6ff1c070df428bf8e0979e2512ad14610c6cfc Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sat, 16 Nov 2019 03:42:00 +0000 Subject: [PATCH 10/51] service.py: not every window may have a visible attribute --- src/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service.py b/src/service.py index e39c8453..4e0f54ca 100644 --- a/src/service.py +++ b/src/service.py @@ -94,7 +94,7 @@ def onAbortRequested(self): xbmcm.waitForAbort() -if hasattr(oe, 'winOeMain'): +if hasattr(oe, 'winOeMain') and hasattr(oe.winOeMain, 'visible'): if oe.winOeMain.visible == True: oe.winOeMain.close() From d91fa6c9d72ea454dd375997af651b6830af6790 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sat, 16 Nov 2019 03:59:13 +0000 Subject: [PATCH 11/51] oeWindows.py: add visible attribute to wizard window --- src/resources/lib/oeWindows.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index b381388b..7213bae3 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -416,6 +416,7 @@ def get_label3_len(self): class wizard(xbmcgui.WindowXMLDialog): def __init__(self, *args, **kwargs): + self.visible = False self.lastMenu = -1 self.guiMenList = 1000 self.guiNetList = 1200 @@ -467,6 +468,7 @@ def __init__(self, *args, **kwargs): self.last_wizard = None def onInit(self): + self.visible = True try: self.setProperty('arch', self.oe.ARCHITECTURE) self.setProperty('distri', self.oe.DISTRIBUTION) @@ -696,6 +698,7 @@ def onClick(self, controlID): time.sleep(.5) xbmc.executebuiltin('SendClick(10100,11)') self.oe.write_setting('libreelec', 'wizard_completed', 'True') + self.visible = False self.close() xbmc.executebuiltin(lang_str) self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', 0) From b64cc99aceb66e06dfde2913ee9e00c0aaf5f82f Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Tue, 19 Nov 2019 20:39:39 +0100 Subject: [PATCH 12/51] Sync help text of the bluetooth toggle with the actual feature --- language/resource.language.en_gb/strings.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/resource.language.en_gb/strings.po b/language/resource.language.en_gb/strings.po index a2839c0f..31008488 100644 --- a/language/resource.language.en_gb/strings.po +++ b/language/resource.language.en_gb/strings.po @@ -113,7 +113,7 @@ msgid "Send boot config files from /flash, kodi_crash.log, kernel log and Samba msgstr "" msgctxt "#720" -msgid "Set to ON and Bluetooth devices will be disabled during power-saving modes" +msgid "Set to ON to enable the Bluetooth service" msgstr "" msgctxt "#722" From 02a42ae73bccfb8908d597a875b3b65e8032f381 Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Tue, 19 Nov 2019 13:59:58 +0100 Subject: [PATCH 13/51] Improve BT wtf codeflow --- src/resources/lib/modules/bluetooth.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 14bedea3..32fc467e 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -126,9 +126,10 @@ def adapter_info(self, adapter, name): self.oe.dbg_log('bluetooth::adapter_info::name', repr(name), 0) adapter_interface = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', adapter.object_path), 'org.freedesktop.DBus.Properties') - return adapter_interface.Get('org.bluez.Adapter1', name) + res = adapter_interface.Get('org.bluez.Adapter1', name) adapter_interface = None self.oe.dbg_log('bluetooth::adapter_info', 'exit_function', 0) + return res except Exception as e: self.oe.dbg_log('bluetooth::adapter_info', 'ERROR: (' + repr(e) + ')', 4) @@ -172,8 +173,8 @@ def get_devices(self): devices[path] = interfaces['org.bluez.Device1'] managedObjects = None dbusBluezManager = None - return devices self.oe.dbg_log('bluetooth::get_devices', 'exit_function', 0) + return devices except Exception as e: self.oe.dbg_log('bluetooth::get_devices::__init__', 'ERROR: (' + repr(e) + ')', 4) @@ -1063,7 +1064,6 @@ def AuthorizePush(self, path): properties = None transfer = None raise dbus.DBusException('org.bluez.obex.Error.Rejected: Not Authorized') - return self.parent.download_path = path self.parent.download_file = properties['Name'] self.parent.download_size = properties['Size'] / 1024 @@ -1071,10 +1071,11 @@ def AuthorizePush(self, path): self.parent.download_type = properties['Type'] else: self.parent.download_type = None - return properties['Name'] + res = properties['Name'] properties = None transfer = None self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'exit_function', 0) + return res except Exception as e: self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'ERROR: (' + repr(e) + ')', 4) From b0afa7511660f003816797938c68984117bd0e9f Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Tue, 19 Nov 2019 15:15:24 +0100 Subject: [PATCH 14/51] Only disconnect connected BT devices --- src/resources/lib/modules/bluetooth.py | 47 ++++++++++++++++++-------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 32fc467e..e7312b2d 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -282,6 +282,20 @@ def trust_device(self, path): self.oe.set_busy(0) self.oe.dbg_log('bluetooth::trust_device', 'ERROR: (' + repr(e) + ')', 4) + def is_device_connected(self, path): + try: + self.oe.dbg_log('bluetooth::is_device_connected', 'enter_function', 0) + self.oe.set_busy(1) + props = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.freedesktop.DBus.Properties') + res = props.Get('org.bluez.Device1', 'Connected') + props = None + self.oe.set_busy(0) + self.oe.dbg_log('bluetooth::is_device_connected', 'exit_function', 0) + return res + except Exception as e: + self.oe.set_busy(0) + self.oe.dbg_log('bluetooth::is_device_connected', 'ERROR: (' + repr(e) + ')', 4) + def connect_device(self, path): try: self.oe.dbg_log('bluetooth::connect_device', 'enter_function', 0) @@ -305,17 +319,26 @@ def connect_reply_handler(self): self.oe.set_busy(0) self.oe.dbg_log('bluetooth::connect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) - def disconnect_device(self, listItem=None): + def disconnect_device_by_path(self, path): + try: + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'enter_function', 0) + self.oe.set_busy(1) + device = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Device1') + device.Disconnect(reply_handler=self.disconnect_reply_handler, error_handler=self.dbus_error_handler) + device = None + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'exit_function', 0) + except Exception as e: + self.oe.set_busy(0) + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'ERROR: (' + repr(e) + ')', 4) + + def disconnect_device_by(self, listItem=None): try: self.oe.dbg_log('bluetooth::disconnect_device', 'enter_function', 0) if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: return - self.oe.set_busy(1) - device = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', listItem.getProperty('entry')), 'org.bluez.Device1') - device.Disconnect(reply_handler=self.disconnect_reply_handler, error_handler=self.dbus_error_handler) - device = None + self.disconnect_device_by_path(listItem.getProperty('entry')) self.oe.dbg_log('bluetooth::disconnect_device', 'exit_function', 0) except Exception as e: self.oe.set_busy(0) @@ -603,15 +626,11 @@ def standby_devices(self): if self.dbusBluezAdapter != None: devices = self.oe.read_setting('bluetooth', 'standby') if not devices == None: - devices = devices.split(',') - if len(devices) > 0: - self.oe.input_request = True - lstItem = xbmcgui.ListItem() - for device in devices: - lstItem.setProperty('entry', device) - self.disconnect_device(lstItem) - lstItem = None - self.oe.input_request = False + self.oe.input_request = True + for device in devices.split(','): + if self.is_device_connected(device): + self.disconnect_device_by_path(device) + self.oe.input_request = False self.oe.dbg_log('bluetooth::standby_devices', 'exit_function', 0) except Exception as e: self.oe.dbg_log('bluetooth::standby_devices', 'ERROR: (' + repr(e) + ')', 4) From ef7ae2080c09ac2f84c13d3b21e209a76a61a13d Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Tue, 19 Nov 2019 15:15:31 +0100 Subject: [PATCH 15/51] Use the BT standby feature for DPMS as well --- src/service.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/service.py b/src/service.py index e39c8453..85227a17 100644 --- a/src/service.py +++ b/src/service.py @@ -82,6 +82,12 @@ def onScreensaverActivated(self): threading.Thread(target=oe.__oe__.standby_devices).start() oe.__oe__.dbg_log('c_xbmcm::onScreensaverActivated', 'exit_function', 0) + def onDPMSActivated(self): + oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'enter_function', 0) + if oe.__oe__.read_setting('bluetooth', 'standby'): + threading.Thread(target=oe.__oe__.standby_devices).start() + oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'exit_function', 0) + def onAbortRequested(self): pass From a095243764175fe52b0761711c24f52600f387d3 Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Tue, 19 Nov 2019 16:18:40 +0100 Subject: [PATCH 16/51] Add idle timeout feature for BT standby devices --- language/resource.language.en_gb/strings.po | 8 +++++ src/resources/lib/modules/services.py | 39 +++++++++++++++++++++ src/service.py | 23 +++++++++++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/language/resource.language.en_gb/strings.po b/language/resource.language.en_gb/strings.po index 31008488..9738a3c5 100644 --- a/language/resource.language.en_gb/strings.po +++ b/language/resource.language.en_gb/strings.po @@ -276,6 +276,10 @@ msgctxt "#772" msgid "Checking for a new version will submit the installed Distribution, Project, CPU Arch and Version to the update server. This data is also used to report basic statistics for the project. To continue checking for updates while opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "Set the idle timeout (in minutes) before devices will be disconnected (defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "" @@ -1031,3 +1035,7 @@ msgstr "" msgctxt "#32399" msgid "Public" msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/src/resources/lib/modules/services.py b/src/resources/lib/modules/services.py index 564b4a42..77fa493c 100644 --- a/src/resources/lib/modules/services.py +++ b/src/resources/lib/modules/services.py @@ -254,6 +254,27 @@ def __init__(self, oeMain): }, 'InfoText': 752, }, + 'idle_timeout': { + 'order': 4, + 'name': 32400, + 'value': None, + 'action': 'idle_timeout', + 'type': 'multivalue', + 'values': [ + '0', + '1', + '3', + '5', + '15', + '30', + '60', + ], + 'parent': { + 'entry': 'enabled', + 'value': ['1'], + }, + 'InfoText': 773, + }, }, }, } @@ -376,6 +397,11 @@ def load_values(self): else: self.struct['bluez']['settings']['obex_enabled']['hidden'] = True self.struct['bluez']['settings']['obex_root']['hidden'] = True + + value = self.oe.read_setting('bluetooth', 'idle_timeout') + if not value: + value = '0' + self.struct['bluez']['settings']['idle_timeout']['value'] = self.oe.read_setting('bluetooth', 'idle_timeout') else: self.struct['bluez']['hidden'] = 'true' @@ -524,6 +550,19 @@ def init_obex(self, **kwargs): self.oe.set_busy(0) self.oe.dbg_log('services::init_obex', 'ERROR: (' + repr(e) + ')', 4) + def idle_timeout(self, **kwargs): + try: + self.oe.dbg_log('services::idle_timeout', 'enter_function', 0) + self.oe.set_busy(1) + if 'listItem' in kwargs: + self.set_value(kwargs['listItem']) + self.oe.write_setting('bluetooth', 'idle_timeout', self.struct['bluez']['settings']['idle_timeout']['value']) + self.oe.set_busy(0) + self.oe.dbg_log('services::idle_timeout', 'exit_function', 0) + except Exception as e: + self.oe.set_busy(0) + self.oe.dbg_log('services::idle_timeout', 'ERROR: (' + repr(e) + ')', 4) + def exit(self): try: self.oe.dbg_log('services::exit', 'enter_function', 0) diff --git a/src/service.py b/src/service.py index 85227a17..8eaf1244 100644 --- a/src/service.py +++ b/src/service.py @@ -98,7 +98,28 @@ def onAbortRequested(self): monitor = service_thread(oe.__oe__) monitor.start() -xbmcm.waitForAbort() +while not xbmcm.abortRequested(): + if xbmcm.waitForAbort(60): + break + + if not oe.__oe__.read_setting('bluetooth', 'standby'): + continue + + timeout = oe.__oe__.read_setting('bluetooth', 'idle_timeout') + if not timeout: + continue + + try: + timeout = int(timeout) + except: + continue + + if timeout < 1: + continue + + if xbmc.getGlobalIdleTime() / 60 >= timeout: + oe.__oe__.dbg_log('service', 'idle timeout reached', 0) + oe.__oe__.standby_devices() if hasattr(oe, 'winOeMain'): if oe.winOeMain.visible == True: From c3c79bf82d0319cb3b4bdeb334b69ab3e2fcf3cf Mon Sep 17 00:00:00 2001 From: chewitt Date: Sat, 23 Nov 2019 04:53:29 +0000 Subject: [PATCH 17/51] improve update section titles --- language/resource.language.en_gb/strings.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language/resource.language.en_gb/strings.po b/language/resource.language.en_gb/strings.po index a2839c0f..656ef202 100644 --- a/language/resource.language.en_gb/strings.po +++ b/language/resource.language.en_gb/strings.po @@ -305,7 +305,7 @@ msgid "Select Action" msgstr "" msgctxt "#32013" -msgid "Updates" +msgid "OS Updates" msgstr "" msgctxt "#32014" @@ -341,7 +341,7 @@ msgid "Submit Statistics" msgstr "" msgctxt "#32022" -msgid "Raspberry Pi Flashing" +msgid "Firmware Updates" msgstr "" msgctxt "#32023" From 7c58fe46f743e570dc90c890ac64dde5504fda89 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 22 Jan 2020 11:57:01 -0800 Subject: [PATCH 18/51] Add custom regdom option update language fix initial value fix settings string switch to iw fix str syntax fix fix directory set iw and fix regCode fix strip range fix default value typo load value syntax fix final fix --- language/resource.language.en_gb/strings.po | 8 ++++ src/resources/lib/modules/connman.py | 47 ++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/language/resource.language.en_gb/strings.po b/language/resource.language.en_gb/strings.po index dd17d97f..29fd358e 100644 --- a/language/resource.language.en_gb/strings.po +++ b/language/resource.language.en_gb/strings.po @@ -216,6 +216,10 @@ msgctxt "#748" msgid "Change the PIN Lock for @DISTRONAME@ Settings access" msgstr "" +msgctxt "#749" +msgid "Overrride the Wireless Regulatory Domain so radio properties (channels and transmit power) comply with local laws or match the country configuration of your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "" @@ -752,6 +756,10 @@ msgctxt "#32238" msgid " minutes remain before PIN can be entered.[CR][CR]Too many previous failed attempts." msgstr "" +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "" diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 9278f597..083222dd 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -549,6 +549,19 @@ def __init__(self, oeMain): 'validate': '^[\\x00-\\x7F]{8,64}$', 'InfoText': 729, }, + 'regdom': { + 'order': 5, + 'name': 32240, + 'value': '', + 'action': 'custom_regdom', + 'type': 'multivalue', + 'values': [], + 'parent': { + 'entry': 'Powered', + 'value': ['1'], + }, + 'InfoText': 749, + }, }, 'order': 0, }, @@ -565,7 +578,7 @@ def __init__(self, oeMain): 'type': 'bool', 'dbus': 'Boolean', 'InfoText': 730, - }}, + },}, 'order': 1, }, 'Timeservers': { @@ -716,7 +729,19 @@ def load_values(self): nf_option_str = self.oe._(32397) self.struct['advanced']['settings']['netfilter']['value'] = nf_option_str + # CUSTOM regdom + regFile = '/storage/.cache/regdomain.conf' + regList = ["NONE", "GLOBAL (00)", "Afghanistan (AF)", "Albania (AL)", "Algeria (DZ)", "American Samoa (AS)", "Andorra (AD)", "Anguilla (AI)", "Argentina (AR)", "Armenia (AM)", "Aruba (AW)", "Australia (AU)", "Austria (AT)", "Azerbaijan (AZ)", "Bahamas (BS)", "Bahrain (BH)", "Bangladesh (BD)", "Barbados (BB)", "Belarus (BY)", "Belgium (BE)", "Belize (BZ)", "Bermuda (BM)", "Bhutan (BT)", "Bolivia (BO)", "Bosnia and Herzegovina (BA)", "Brazil (BR)", "Brunei Darussalam (BN)", "Bulgaria (BG)", "Burkina Faso (BF)", "Cambodia (KH)", "Canada (CA)", "Cayman Islands (KY)", "Central African Republic (CF)", "Chad (TD)", "Chile (CL)", "China (CN)", "Christmas Island (CX)", "Colombia (CO)", "Costa Rica (CR)", "Côte d'Ivoire (CI)", "Croatia (HR)", "Cyprus (CY)", "Czechia (CZ)", "Denmark (DK)", "Dominica (DM)", "Dominican Republic (DO)", "Ecuador (EC)", "Egypt (EG)", "El Salvador (SV)", "Estonia (EE)", "Ethiopia (ET)", "Finland (FI)", "France (FR)", "French Guiana (GF)", "French Polynesia (PF)", "Georgia (GE)", "Germany (DE)", "Ghana (GH)", "Greece (GR)", "Greenland (GL)", "Grenada (GD)", "Guadelope (GP)", "Guam (GU)", "Guatemala (GT)", "Guyana (GY)", "Haiti (HT)", "Honduras (HN)", "Hong Kong (HK)", "Hungary (HU)", "Iceland (IS)", "India (IN)", "Indonesia (ID)", "Iran (IR)", "Ireland (IE)", "Israel (IL)", "Italy (IT)", "Jamaica (JM)", "Japan (JP)", "Jordan (JO)", "Kazakhstan (KZ)", "Kenya (KE)", "Korea (North) (KP)", "Korea (South) (KR)", "Kuwait (KW)", "Latvia (LV)", "Lebanon (LB)", "Lesotho (LS)", "Liechtenstein (LI)", "Lithuania (LT)", "Luxembourg (LU)", "Macao (MO)", "Malawi (MW)", "Malaysia (MY)", "Malta (MT)", "Marshall Islands (MH)", "Martinique (MQ)", "Mauritania (MR)", "Mauritius (MU)", "Mayotte (YT)", "Mexico (MX)", "Micronesian (FM)", "Moldova (MD)", "Monaco (MC)", "Mongolia (MN)", "Montenegro (ME)", "Morocco (MA)", "Nepal (NP)", "Netherlands (NL)", "New Zealand (NZ)", "Nicaragua (NI)", "North Macedonia (MK)", "Northern Mariana Islands (MP)", "Norway (NO)", "Oman (OM)", "Pakistan (PK)", "Palau (PW)", "Panama (PA)", "Papua New Guinea (PG)", "Paraguay (PY)", "Peru (PE)", "Philipines (PH)", "Poland (PL)", "Portugal (PT)", "Puerto Rico (PR)", "Qatar (QA)", "Réunion (RE)", "Romania (RO)", "Russian Federation (RU)", "Rwanda (RW)", "Saint Barthélemy (BL)", "Saint Kitts and Nevis (KN)", "Saint Lucia (LC)", "Saint Martin (MF)", "Saint Pierre and Miquelon (PM)", "Saint Vincent and the Grenadines (VC)", "Saudi Arabia (SA)", "Senegal (SN)", "Serbia (RS)", "Singapore (SG)", "Slovakia (SK)", "Slovenia (SI)", "South Africa (ZA)", "Spain (ES)", "Sri Lanka (LK)", "Suriname (SR)", "Sweden (SE)", "Switzerland (CH)", "Syria (SY)", "Taiwan (TW)", "Thailand (TH)", "Togo (TG)", "Trinidan and Tobago (TT)", "Tunisia (TN)", "Turkey (TR)", "Turks and Caicos Islands (TC)", "Uganda (UG)", "Ukraine (UA)", "United Arab Emirates (AE)", "United Kingdom (GB)", "United States (US)", "Uraguay (UY)", "Uzbekistan (UZ)", "Vanuatu (VU)", "Venzuela (VE)", "Vietnam (VN)", "Virgin Islands (VI)", "Wallis and Futuna (WF)", "Yemen (YE)", "Zimbabwe (ZW)"] + self.struct['/net/connman/technology/wifi']['settings']['regdom']['values'] = regList + if os.path.isfile(regFile): + regLine = open(regFile).readline().rstrip() + regCode = "(" + regLine[-2:] + ")" + regValue = next((v for v in regList if regCode in v), "NONE") + else: + regValue = "NONE" + self.struct['/net/connman/technology/wifi']['settings']['regdom']['value'] = str(regValue) self.oe.dbg_log('connman::load_values', 'exit_function', 0) + except Exception as e: self.oe.dbg_log('connman::load_values', 'ERROR: (' + repr(e) + ')') @@ -1004,6 +1029,26 @@ def set_technologie(self, **kwargs): self.oe.set_busy(0) self.oe.dbg_log('connman::set_technologies', 'ERROR: (' + repr(e) + ')', 4) + def custom_regdom(self, **kwargs): + try: + self.oe.dbg_log('connman::custom_regdom', 'enter_function', 0) + self.oe.set_busy(1) + if 'listItem' in kwargs: + if str((kwargs['listItem']).getProperty('value')) == "NONE": + self.oe.execute('rm /storage/.cache/regdomain.conf') + regScript = 'iw reg set 00' + else: + regSelect = str((kwargs['listItem']).getProperty('value')) + regCode = regSelect[-3:-1] + regScript = 'echo "REGDOMAIN=' + regCode + '" > /storage/.cache/regdomain.conf; iw reg set ' + regCode + self.oe.execute(regScript) + self.set_value(kwargs['listItem']) + self.oe.set_busy(0) + self.oe.dbg_log('connman::custom_regdom', 'exit_function', 0) + except Exception as e: + self.oe.set_busy(0) + self.oe.dbg_log('connman::custom_regdom', 'ERROR: (' + repr(e) + ')', 4) + def configure_network(self, listItem=None): try: self.oe.dbg_log('connman::configure_network', 'enter_function', 0) From 93a2c438bef6405cf822e027c36ec66133f3fac4 Mon Sep 17 00:00:00 2001 From: edit4ever Date: Wed, 22 Jan 2020 16:33:35 -0800 Subject: [PATCH 19/51] update "NONE" to "NOT SET (DEFAULT)" --- src/resources/lib/modules/connman.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 083222dd..a02cdb7b 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -731,14 +731,14 @@ def load_values(self): # CUSTOM regdom regFile = '/storage/.cache/regdomain.conf' - regList = ["NONE", "GLOBAL (00)", "Afghanistan (AF)", "Albania (AL)", "Algeria (DZ)", "American Samoa (AS)", "Andorra (AD)", "Anguilla (AI)", "Argentina (AR)", "Armenia (AM)", "Aruba (AW)", "Australia (AU)", "Austria (AT)", "Azerbaijan (AZ)", "Bahamas (BS)", "Bahrain (BH)", "Bangladesh (BD)", "Barbados (BB)", "Belarus (BY)", "Belgium (BE)", "Belize (BZ)", "Bermuda (BM)", "Bhutan (BT)", "Bolivia (BO)", "Bosnia and Herzegovina (BA)", "Brazil (BR)", "Brunei Darussalam (BN)", "Bulgaria (BG)", "Burkina Faso (BF)", "Cambodia (KH)", "Canada (CA)", "Cayman Islands (KY)", "Central African Republic (CF)", "Chad (TD)", "Chile (CL)", "China (CN)", "Christmas Island (CX)", "Colombia (CO)", "Costa Rica (CR)", "Côte d'Ivoire (CI)", "Croatia (HR)", "Cyprus (CY)", "Czechia (CZ)", "Denmark (DK)", "Dominica (DM)", "Dominican Republic (DO)", "Ecuador (EC)", "Egypt (EG)", "El Salvador (SV)", "Estonia (EE)", "Ethiopia (ET)", "Finland (FI)", "France (FR)", "French Guiana (GF)", "French Polynesia (PF)", "Georgia (GE)", "Germany (DE)", "Ghana (GH)", "Greece (GR)", "Greenland (GL)", "Grenada (GD)", "Guadelope (GP)", "Guam (GU)", "Guatemala (GT)", "Guyana (GY)", "Haiti (HT)", "Honduras (HN)", "Hong Kong (HK)", "Hungary (HU)", "Iceland (IS)", "India (IN)", "Indonesia (ID)", "Iran (IR)", "Ireland (IE)", "Israel (IL)", "Italy (IT)", "Jamaica (JM)", "Japan (JP)", "Jordan (JO)", "Kazakhstan (KZ)", "Kenya (KE)", "Korea (North) (KP)", "Korea (South) (KR)", "Kuwait (KW)", "Latvia (LV)", "Lebanon (LB)", "Lesotho (LS)", "Liechtenstein (LI)", "Lithuania (LT)", "Luxembourg (LU)", "Macao (MO)", "Malawi (MW)", "Malaysia (MY)", "Malta (MT)", "Marshall Islands (MH)", "Martinique (MQ)", "Mauritania (MR)", "Mauritius (MU)", "Mayotte (YT)", "Mexico (MX)", "Micronesian (FM)", "Moldova (MD)", "Monaco (MC)", "Mongolia (MN)", "Montenegro (ME)", "Morocco (MA)", "Nepal (NP)", "Netherlands (NL)", "New Zealand (NZ)", "Nicaragua (NI)", "North Macedonia (MK)", "Northern Mariana Islands (MP)", "Norway (NO)", "Oman (OM)", "Pakistan (PK)", "Palau (PW)", "Panama (PA)", "Papua New Guinea (PG)", "Paraguay (PY)", "Peru (PE)", "Philipines (PH)", "Poland (PL)", "Portugal (PT)", "Puerto Rico (PR)", "Qatar (QA)", "Réunion (RE)", "Romania (RO)", "Russian Federation (RU)", "Rwanda (RW)", "Saint Barthélemy (BL)", "Saint Kitts and Nevis (KN)", "Saint Lucia (LC)", "Saint Martin (MF)", "Saint Pierre and Miquelon (PM)", "Saint Vincent and the Grenadines (VC)", "Saudi Arabia (SA)", "Senegal (SN)", "Serbia (RS)", "Singapore (SG)", "Slovakia (SK)", "Slovenia (SI)", "South Africa (ZA)", "Spain (ES)", "Sri Lanka (LK)", "Suriname (SR)", "Sweden (SE)", "Switzerland (CH)", "Syria (SY)", "Taiwan (TW)", "Thailand (TH)", "Togo (TG)", "Trinidan and Tobago (TT)", "Tunisia (TN)", "Turkey (TR)", "Turks and Caicos Islands (TC)", "Uganda (UG)", "Ukraine (UA)", "United Arab Emirates (AE)", "United Kingdom (GB)", "United States (US)", "Uraguay (UY)", "Uzbekistan (UZ)", "Vanuatu (VU)", "Venzuela (VE)", "Vietnam (VN)", "Virgin Islands (VI)", "Wallis and Futuna (WF)", "Yemen (YE)", "Zimbabwe (ZW)"] + regList = ["NOT SET (DEFAULT)", "GLOBAL (00)", "Afghanistan (AF)", "Albania (AL)", "Algeria (DZ)", "American Samoa (AS)", "Andorra (AD)", "Anguilla (AI)", "Argentina (AR)", "Armenia (AM)", "Aruba (AW)", "Australia (AU)", "Austria (AT)", "Azerbaijan (AZ)", "Bahamas (BS)", "Bahrain (BH)", "Bangladesh (BD)", "Barbados (BB)", "Belarus (BY)", "Belgium (BE)", "Belize (BZ)", "Bermuda (BM)", "Bhutan (BT)", "Bolivia (BO)", "Bosnia and Herzegovina (BA)", "Brazil (BR)", "Brunei Darussalam (BN)", "Bulgaria (BG)", "Burkina Faso (BF)", "Cambodia (KH)", "Canada (CA)", "Cayman Islands (KY)", "Central African Republic (CF)", "Chad (TD)", "Chile (CL)", "China (CN)", "Christmas Island (CX)", "Colombia (CO)", "Costa Rica (CR)", "Côte d'Ivoire (CI)", "Croatia (HR)", "Cyprus (CY)", "Czechia (CZ)", "Denmark (DK)", "Dominica (DM)", "Dominican Republic (DO)", "Ecuador (EC)", "Egypt (EG)", "El Salvador (SV)", "Estonia (EE)", "Ethiopia (ET)", "Finland (FI)", "France (FR)", "French Guiana (GF)", "French Polynesia (PF)", "Georgia (GE)", "Germany (DE)", "Ghana (GH)", "Greece (GR)", "Greenland (GL)", "Grenada (GD)", "Guadelope (GP)", "Guam (GU)", "Guatemala (GT)", "Guyana (GY)", "Haiti (HT)", "Honduras (HN)", "Hong Kong (HK)", "Hungary (HU)", "Iceland (IS)", "India (IN)", "Indonesia (ID)", "Iran (IR)", "Ireland (IE)", "Israel (IL)", "Italy (IT)", "Jamaica (JM)", "Japan (JP)", "Jordan (JO)", "Kazakhstan (KZ)", "Kenya (KE)", "Korea (North) (KP)", "Korea (South) (KR)", "Kuwait (KW)", "Latvia (LV)", "Lebanon (LB)", "Lesotho (LS)", "Liechtenstein (LI)", "Lithuania (LT)", "Luxembourg (LU)", "Macao (MO)", "Malawi (MW)", "Malaysia (MY)", "Malta (MT)", "Marshall Islands (MH)", "Martinique (MQ)", "Mauritania (MR)", "Mauritius (MU)", "Mayotte (YT)", "Mexico (MX)", "Micronesian (FM)", "Moldova (MD)", "Monaco (MC)", "Mongolia (MN)", "Montenegro (ME)", "Morocco (MA)", "Nepal (NP)", "Netherlands (NL)", "New Zealand (NZ)", "Nicaragua (NI)", "North Macedonia (MK)", "Northern Mariana Islands (MP)", "Norway (NO)", "Oman (OM)", "Pakistan (PK)", "Palau (PW)", "Panama (PA)", "Papua New Guinea (PG)", "Paraguay (PY)", "Peru (PE)", "Philipines (PH)", "Poland (PL)", "Portugal (PT)", "Puerto Rico (PR)", "Qatar (QA)", "Réunion (RE)", "Romania (RO)", "Russian Federation (RU)", "Rwanda (RW)", "Saint Barthélemy (BL)", "Saint Kitts and Nevis (KN)", "Saint Lucia (LC)", "Saint Martin (MF)", "Saint Pierre and Miquelon (PM)", "Saint Vincent and the Grenadines (VC)", "Saudi Arabia (SA)", "Senegal (SN)", "Serbia (RS)", "Singapore (SG)", "Slovakia (SK)", "Slovenia (SI)", "South Africa (ZA)", "Spain (ES)", "Sri Lanka (LK)", "Suriname (SR)", "Sweden (SE)", "Switzerland (CH)", "Syria (SY)", "Taiwan (TW)", "Thailand (TH)", "Togo (TG)", "Trinidan and Tobago (TT)", "Tunisia (TN)", "Turkey (TR)", "Turks and Caicos Islands (TC)", "Uganda (UG)", "Ukraine (UA)", "United Arab Emirates (AE)", "United Kingdom (GB)", "United States (US)", "Uraguay (UY)", "Uzbekistan (UZ)", "Vanuatu (VU)", "Venzuela (VE)", "Vietnam (VN)", "Virgin Islands (VI)", "Wallis and Futuna (WF)", "Yemen (YE)", "Zimbabwe (ZW)"] self.struct['/net/connman/technology/wifi']['settings']['regdom']['values'] = regList if os.path.isfile(regFile): regLine = open(regFile).readline().rstrip() regCode = "(" + regLine[-2:] + ")" - regValue = next((v for v in regList if regCode in v), "NONE") + regValue = next((v for v in regList if regCode in v), "NOT SET (DEFAULT)") else: - regValue = "NONE" + regValue = "NOT SET (DEFAULT)" self.struct['/net/connman/technology/wifi']['settings']['regdom']['value'] = str(regValue) self.oe.dbg_log('connman::load_values', 'exit_function', 0) @@ -1034,7 +1034,7 @@ def custom_regdom(self, **kwargs): self.oe.dbg_log('connman::custom_regdom', 'enter_function', 0) self.oe.set_busy(1) if 'listItem' in kwargs: - if str((kwargs['listItem']).getProperty('value')) == "NONE": + if str((kwargs['listItem']).getProperty('value')) == "NOT SET (DEFAULT)": self.oe.execute('rm /storage/.cache/regdomain.conf') regScript = 'iw reg set 00' else: From e05e6e989f2785167ebd2ebec00ceb8cd961df01 Mon Sep 17 00:00:00 2001 From: Jay M Date: Fri, 24 Jan 2020 17:58:10 -0500 Subject: [PATCH 20/51] separate countries to lines --- src/resources/lib/modules/connman.py | 172 ++++++++++++++++++++++++++- 1 file changed, 171 insertions(+), 1 deletion(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index a02cdb7b..387419d7 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -731,7 +731,177 @@ def load_values(self): # CUSTOM regdom regFile = '/storage/.cache/regdomain.conf' - regList = ["NOT SET (DEFAULT)", "GLOBAL (00)", "Afghanistan (AF)", "Albania (AL)", "Algeria (DZ)", "American Samoa (AS)", "Andorra (AD)", "Anguilla (AI)", "Argentina (AR)", "Armenia (AM)", "Aruba (AW)", "Australia (AU)", "Austria (AT)", "Azerbaijan (AZ)", "Bahamas (BS)", "Bahrain (BH)", "Bangladesh (BD)", "Barbados (BB)", "Belarus (BY)", "Belgium (BE)", "Belize (BZ)", "Bermuda (BM)", "Bhutan (BT)", "Bolivia (BO)", "Bosnia and Herzegovina (BA)", "Brazil (BR)", "Brunei Darussalam (BN)", "Bulgaria (BG)", "Burkina Faso (BF)", "Cambodia (KH)", "Canada (CA)", "Cayman Islands (KY)", "Central African Republic (CF)", "Chad (TD)", "Chile (CL)", "China (CN)", "Christmas Island (CX)", "Colombia (CO)", "Costa Rica (CR)", "Côte d'Ivoire (CI)", "Croatia (HR)", "Cyprus (CY)", "Czechia (CZ)", "Denmark (DK)", "Dominica (DM)", "Dominican Republic (DO)", "Ecuador (EC)", "Egypt (EG)", "El Salvador (SV)", "Estonia (EE)", "Ethiopia (ET)", "Finland (FI)", "France (FR)", "French Guiana (GF)", "French Polynesia (PF)", "Georgia (GE)", "Germany (DE)", "Ghana (GH)", "Greece (GR)", "Greenland (GL)", "Grenada (GD)", "Guadelope (GP)", "Guam (GU)", "Guatemala (GT)", "Guyana (GY)", "Haiti (HT)", "Honduras (HN)", "Hong Kong (HK)", "Hungary (HU)", "Iceland (IS)", "India (IN)", "Indonesia (ID)", "Iran (IR)", "Ireland (IE)", "Israel (IL)", "Italy (IT)", "Jamaica (JM)", "Japan (JP)", "Jordan (JO)", "Kazakhstan (KZ)", "Kenya (KE)", "Korea (North) (KP)", "Korea (South) (KR)", "Kuwait (KW)", "Latvia (LV)", "Lebanon (LB)", "Lesotho (LS)", "Liechtenstein (LI)", "Lithuania (LT)", "Luxembourg (LU)", "Macao (MO)", "Malawi (MW)", "Malaysia (MY)", "Malta (MT)", "Marshall Islands (MH)", "Martinique (MQ)", "Mauritania (MR)", "Mauritius (MU)", "Mayotte (YT)", "Mexico (MX)", "Micronesian (FM)", "Moldova (MD)", "Monaco (MC)", "Mongolia (MN)", "Montenegro (ME)", "Morocco (MA)", "Nepal (NP)", "Netherlands (NL)", "New Zealand (NZ)", "Nicaragua (NI)", "North Macedonia (MK)", "Northern Mariana Islands (MP)", "Norway (NO)", "Oman (OM)", "Pakistan (PK)", "Palau (PW)", "Panama (PA)", "Papua New Guinea (PG)", "Paraguay (PY)", "Peru (PE)", "Philipines (PH)", "Poland (PL)", "Portugal (PT)", "Puerto Rico (PR)", "Qatar (QA)", "Réunion (RE)", "Romania (RO)", "Russian Federation (RU)", "Rwanda (RW)", "Saint Barthélemy (BL)", "Saint Kitts and Nevis (KN)", "Saint Lucia (LC)", "Saint Martin (MF)", "Saint Pierre and Miquelon (PM)", "Saint Vincent and the Grenadines (VC)", "Saudi Arabia (SA)", "Senegal (SN)", "Serbia (RS)", "Singapore (SG)", "Slovakia (SK)", "Slovenia (SI)", "South Africa (ZA)", "Spain (ES)", "Sri Lanka (LK)", "Suriname (SR)", "Sweden (SE)", "Switzerland (CH)", "Syria (SY)", "Taiwan (TW)", "Thailand (TH)", "Togo (TG)", "Trinidan and Tobago (TT)", "Tunisia (TN)", "Turkey (TR)", "Turks and Caicos Islands (TC)", "Uganda (UG)", "Ukraine (UA)", "United Arab Emirates (AE)", "United Kingdom (GB)", "United States (US)", "Uraguay (UY)", "Uzbekistan (UZ)", "Vanuatu (VU)", "Venzuela (VE)", "Vietnam (VN)", "Virgin Islands (VI)", "Wallis and Futuna (WF)", "Yemen (YE)", "Zimbabwe (ZW)"] + regList = [ + "NOT SET (DEFAULT)", + "GLOBAL (00)", + "Afghanistan (AF)", + "Albania (AL)", + "Algeria (DZ)", + "American Samoa (AS)", + "Andorra (AD)", + "Anguilla (AI)", + "Argentina (AR)", + "Armenia (AM)", + "Aruba (AW)", + "Australia (AU)", + "Austria (AT)", + "Azerbaijan (AZ)", + "Bahamas (BS)", + "Bahrain (BH)", + "Bangladesh (BD)", + "Barbados (BB)", + "Belarus (BY)", + "Belgium (BE)", + "Belize (BZ)", + "Bermuda (BM)", + "Bhutan (BT)", + "Bolivia (BO)", + "Bosnia and Herzegovina (BA)", + "Brazil (BR)", + "Brunei Darussalam (BN)", + "Bulgaria (BG)", + "Burkina Faso (BF)", + "Cambodia (KH)", + "Canada (CA)", + "Cayman Islands (KY)", + "Central African Republic (CF)", + "Chad (TD)", + "Chile (CL)", + "China (CN)", + "Christmas Island (CX)", + "Colombia (CO)", + "Costa Rica (CR)", + "Côte d'Ivoire (CI)", + "Croatia (HR)", + "Cyprus (CY)", + "Czechia (CZ)", + "Denmark (DK)", + "Dominica (DM)", + "Dominican Republic (DO)", + "Ecuador (EC)", + "Egypt (EG)", + "El Salvador (SV)", + "Estonia (EE)", + "Ethiopia (ET)", + "Finland (FI)", + "France (FR)", + "French Guiana (GF)", + "French Polynesia (PF)", + "Georgia (GE)", + "Germany (DE)", + "Ghana (GH)", + "Greece (GR)", + "Greenland (GL)", + "Grenada (GD)", + "Guadelope (GP)", + "Guam (GU)", + "Guatemala (GT)", + "Guyana (GY)", + "Haiti (HT)", + "Honduras (HN)", + "Hong Kong (HK)", + "Hungary (HU)", + "Iceland (IS)", + "India (IN)", + "Indonesia (ID)", + "Iran (IR)", + "Ireland (IE)", + "Israel (IL)", + "Italy (IT)", + "Jamaica (JM)", + "Japan (JP)", + "Jordan (JO)", + "Kazakhstan (KZ)", + "Kenya (KE)", + "Korea (North) (KP)", + "Korea (South) (KR)", + "Kuwait (KW)", + "Latvia (LV)", + "Lebanon (LB)", + "Lesotho (LS)", + "Liechtenstein (LI)", + "Lithuania (LT)", + "Luxembourg (LU)", + "Macao (MO)", + "Malawi (MW)", + "Malaysia (MY)", + "Malta (MT)", + "Marshall Islands (MH)", + "Martinique (MQ)", + "Mauritania (MR)", + "Mauritius (MU)", + "Mayotte (YT)", + "Mexico (MX)", + "Micronesian (FM)", + "Moldova (MD)", + "Monaco (MC)", + "Mongolia (MN)", + "Montenegro (ME)", + "Morocco (MA)", + "Nepal (NP)", + "Netherlands (NL)", + "New Zealand (NZ)", + "Nicaragua (NI)", + "North Macedonia (MK)", + "Northern Mariana Islands (MP)", + "Norway (NO)", + "Oman (OM)", + "Pakistan (PK)", + "Palau (PW)", + "Panama (PA)", + "Papua New Guinea (PG)", + "Paraguay (PY)", + "Peru (PE)", + "Philipines (PH)", + "Poland (PL)", + "Portugal (PT)", + "Puerto Rico (PR)", + "Qatar (QA)", + "Réunion (RE)", + "Romania (RO)", + "Russian Federation (RU)", + "Rwanda (RW)", + "Saint Barthélemy (BL)", + "Saint Kitts and Nevis (KN)", + "Saint Lucia (LC)", + "Saint Martin (MF)", + "Saint Pierre and Miquelon (PM)", + "Saint Vincent and the Grenadines (VC)", + "Saudi Arabia (SA)", + "Senegal (SN)", + "Serbia (RS)", + "Singapore (SG)", + "Slovakia (SK)", + "Slovenia (SI)", + "South Africa (ZA)", + "Spain (ES)", + "Sri Lanka (LK)", + "Suriname (SR)", + "Sweden (SE)", + "Switzerland (CH)", + "Syria (SY)", + "Taiwan (TW)", + "Thailand (TH)", + "Togo (TG)", + "Trinidan and Tobago (TT)", + "Tunisia (TN)", + "Turkey (TR)", + "Turks and Caicos Islands (TC)", + "Uganda (UG)", + "Ukraine (UA)", + "United Arab Emirates (AE)", + "United Kingdom (GB)", + "United States (US)", + "Uraguay (UY)", + "Uzbekistan (UZ)", + "Vanuatu (VU)", + "Venzuela (VE)", + "Vietnam (VN)", + "Virgin Islands (VI)", + "Wallis and Futuna (WF)", + "Yemen (YE)", + "Zimbabwe (ZW)" + ] self.struct['/net/connman/technology/wifi']['settings']['regdom']['values'] = regList if os.path.isfile(regFile): regLine = open(regFile).readline().rstrip() From d0ee9ab25c596d5a4ef90a1929a351d2c9f2f170 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sat, 25 Jan 2020 05:26:00 +0000 Subject: [PATCH 21/51] refactor progress dialogs; add rate limiting --- src/oe.py | 286 +++++++++++++++++++++++++++++------------------------- 1 file changed, 153 insertions(+), 133 deletions(-) diff --git a/src/oe.py b/src/oe.py index 0a687a87..31a8677e 100644 --- a/src/oe.py +++ b/src/oe.py @@ -84,6 +84,94 @@ import oeWindows xbmc.log('## LibreELEC Addon ## ' + str(__addon__.getAddonInfo('version'))) +class ProgressDialog: + def __init__(self, label1=32181, label2=32182, label3=32183, minSampleInterval=1.0, maxUpdatesPerSecond=5): + self.label1 = _(label1) + self.label2 = _(label2) + self.label3 = _(label3) + self.minSampleInterval = minSampleInterval + self.maxUpdatesPerSecond = 1 / maxUpdatesPerSecond + + self.dialog = None + + self.source = None + self.total_size = 0 + + self.reset() + + def reset(self): + self.percent = 0 + self.speed = 0 + + self.partial_size = 0 + self.prev_size = 0 + + self.start = 0 + self.last_update = 0 + self.minutes = 0 + self.seconds = 0 + + self.cancelled = False + + def setSource(self, source): + self.source = source + + def setSize(self, total_size): + self.total_size = total_size + + def getPercent(self): + return self.percent + + def getSpeed(self): + return self.speed + + def open(self, heading='LibreELEC', line1='', line2='', line3=''): + self.dialog = xbmcgui.DialogProgress() + self.dialog.create(heading, line1, line2, line3) + self.reset() + + def update(self, chunk): + if self.dialog and self.needsUpdate(chunk): + line1 = '%s: %s' % (self.label1, self.source.rsplit('/', 1)[1]) + line2 = '%s: %s KB/s' % (self.label2, f'{self.speed:,}') + line3 = '%s: %d m %d s' % (self.label3, self.minutes, self.seconds) + self.dialog.update(self.percent, line1, line2, line3) + self.last_update = time.time() + + def close(self): + if self.dialog: + self.dialog.close() + self.dialog = None + + # Calculate current speed at regular intervals, or upon completion + def sample(self, chunk): + self.partial_size += len(chunk) + + now = time.time() + if self.start == 0: + self.start = now + + if (now - self.start) >= self.minSampleInterval or not chunk: + self.speed = int((self.partial_size - self.prev_size) / (now - self.start) / 1024) + remain = self.total_size - self.partial_size + self.minutes = int(remain / 1024 / self.speed / 60) + self.seconds = int(remain / 1024 / self.speed) % 60 + self.prev_size = self.partial_size + self.start = now + + self.percent = int(self.partial_size * 100.0 / self.total_size) + + # Update the progress dialog when required, or upon completion + def needsUpdate(self, chunk): + if not chunk: + return True + else: + return ((time.time() - self.last_update) >= self.maxUpdatesPerSecond) + + def iscanceled(self): + if self.dialog: + self.cancelled = self.dialog.iscanceled() + return self.cancelled def _(code): wizardComp = read_setting('libreelec', 'wizard_completed') @@ -113,8 +201,9 @@ def dbg_log(source, text, level=4): return xbmc.log('## LibreELEC Addon ## ' + source + ' ## ' + text, level) if level == 4: - xbmc.log(traceback.format_exc(), level) - + tracedata = traceback.format_exc() + if tracedata != "NoneType: None\n": + xbmc.log(tracedata, level) def notify(title, message, icon='icon'): try: @@ -281,161 +370,92 @@ def load_url(url): def download_file(source, destination, silent=False): try: local_file = open(destination, 'wb') - if silent == False: - download_dlg = xbmcgui.DialogProgress() - download_dlg.create('LibreELEC', _(32181), ' ', ' ') + response = urllib.request.urlopen(urllib.parse.quote(source, safe=':/')) - total_size = int(response.getheader('Content-Length').strip()) - minutes = 0 - seconds = 0 - rest = 0 - speed = 1 - start = time.time() - size = 0 - part_size = 0 + + progress = ProgressDialog() + if not silent: + progress.open() + + progress.setSource(source) + progress.setSize(int(response.getheader('Content-Length').strip())) + last_percent = 0 - while True: + + while not (xbmc.abortRequested or progress.iscanceled()): part = response.read(32768) - part_size += len(part) - if time.time() > start + 2: - speed = int((part_size - size) / (time.time() - start) / 1024) - start = time.time() - size = part_size - rest = total_size - part_size - minutes = int(rest / 1024 / speed / 60) - seconds = int(rest / 1024 / speed) % 60 - percent = int(part_size * 100.0 / total_size) - if silent == False: - download_dlg.update(percent, - '%s: %s' % (_(32181), source.rsplit('/', 1)[1]), - '%s: %d KB/s' % (_(32182), speed), - '%s: %d m %d s' % (_(32183), minutes, seconds)) - if download_dlg.iscanceled(): - os.remove(destination) - local_file.close() - response.close() - return None + + progress.sample(part) + + if not silent: + progress.update(part) + else: + if progress.getPercent() - last_percent > 5 or not part: + dbg_log('oe::download_file(%s)' % destination, '%d%% with %d KB/s' % (progress.getPercent(), progress.getSpeed())) + last_percent = progress.getPercent() + + if part: + local_file.write(part) else: - if percent > last_percent + 5: - dbg_log('oe::download_file(' + destination + ')', '%d percent with %d KB/s' % (percent, speed)) - last_percent = percent - if not part or xbmc.abortRequested: break - local_file.write(part) + + progress.close() local_file.close() response.close() - return destination - except Exception as e: - dbg_log('oe::download_file(' + source + ', ' + destination + ')', 'ERROR: (' + repr(e) + ')') + if progress.iscanceled() or xbmc.abortRequested: + os.remove(destination) + return None + + return destination -def extract_file(filename, extract, destination, silent=False): - try: - if tarfile.is_tarfile(filename): - if silent == False: - extract_dlg = xbmcgui.DialogProgress() - extract_dlg.create('LibreELEC ', _(32186), ' ', ' ') - extract_dlg.update(0) - compressed = tarfile.open(filename) - names = compressed.getnames() - for name in names: - for search in extract: - if search in name: - fileinfo = compressed.getmember(name) - response = compressed.extractfile(fileinfo) - local_file = open(destination + name.rsplit('/', 1)[1], 'wb') - total_size = fileinfo.size - minutes = 0 - seconds = 0 - rest = 1 - speed = 1 - start = time.time() - size = 1 - part_size = 1 - last_percent = 0 - while 1: - part = response.read(32768) - part_size += len(part) - if silent == False: - if extract_dlg.iscanceled(): - local_file.close() - response.close() - return None - if not part or xbmc.abortRequested: - break - if time.time() > start + 2: - speed = int((part_size - size) / (time.time() - start) / 1024) - start = time.time() - size = part_size - rest = total_size - part_size - minutes = rest / 1024 / speed / 60 - seconds = rest / 1024 / speed - minutes * 60 - percent = int(part_size * 100.0 / total_size) - if silent == False: - extract_dlg.update(percent, _(32184) + ': %s' % name.rsplit('/', 1)[1], _(32185) + ': %d KB/s' % speed, - _(32183) + ': %d m %d s' % (minutes, seconds)) - if extract_dlg.iscanceled(): - local_file.close() - response.close() - return None - else: - if percent > last_percent + 5: - dbg_log('oe::extract_file(' + destination + name.rsplit('/', 1)[1] + ')', '%d percent with %d KB/s' - % (percent, speed)) - last_percent = percent - local_file.write(part) - local_file.close() - response.close() - return 1 except Exception as e: - dbg_log('oe::extract_file', 'ERROR: (' + repr(e) + ')') + dbg_log('oe::download_file(' + source + ', ' + destination + ')', 'ERROR: (' + repr(e) + ')') def copy_file(source, destination, silent=False): try: dbg_log('oe::copy_file', 'SOURCE: %s, DEST: %s' % (source, destination)) + source_file = open(source, 'rb') destination_file = open(destination, 'wb') - if silent == False: - copy_dlg = xbmcgui.DialogProgress() - copy_dlg.create('LibreELEC', _(32181), ' ', ' ') - total_size = os.path.getsize(source) - minutes = 0 - seconds = 0 - rest = 0 - speed = 1 - start = time.time() - size = 0 - part_size = 0 + + progress = ProgressDialog() + if not silent: + progress.open() + + progress.setSource(source) + progress.setSize(os.path.getsize(source)) + last_percent = 0 - while 1: + + while not (xbmc.abortRequested or progress.iscanceled()): part = source_file.read(32768) - part_size += len(part) - if time.time() > start + 2: - speed = int((part_size - size) / (time.time() - start) / 1024) - start = time.time() - size = part_size - rest = total_size - part_size - minutes = rest / 1024 / speed / 60 - seconds = rest / 1024 / speed - minutes * 60 - percent = int(part_size * 100.0 / total_size) - if silent == False: - copy_dlg.update(percent, _(32181) + ': %s' % source.rsplit('/', 1)[1], _(32182) + ': %d KB/s' % speed, _(32183) - + ': %d m %d s' % (minutes, seconds)) - if copy_dlg.iscanceled(): - source_file.close() - destination_file.close() - return None + + progress.sample(part) + + if not silent: + progress.update(part) + else: + if progress.getPercent() - last_percent > 5 or not part: + dbg_log('oe::copy_file(%s)' % destination, '%d%% with %d KB/s' % (progress.getPercent(), progress.getSpeed())) + last_percent = progress.getPercent() + + if part: + destination_file.write(part) else: - if percent > last_percent + 5: - dbg_log('oe::copy_file(' + destination + ')', '%d percent with %d KB/s' % (percent, speed)) - last_percent = percent - if not part or xbmc.abortRequested: break - destination_file.write(part) + + progress.close() source_file.close() destination_file.close() + + if progress.iscanceled() or xbmc.abortRequested: + os.remove(destination) + return None + return destination + except Exception as e: dbg_log('oe::copy_file(' + source + ', ' + destination + ')', 'ERROR: (' + repr(e) + ')') From b42749a37af0ca150b4e30569bf7fad76c8a54d0 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sat, 25 Jan 2020 05:26:30 +0000 Subject: [PATCH 22/51] fix bug when not selecting a file to restore --- src/resources/lib/modules/system.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index c5c2fd61..4bbe2821 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -583,12 +583,16 @@ def do_restore(self, listItem=None): copy_success = 0 xbmcDialog = xbmcgui.Dialog() restore_file_path = xbmcDialog.browse( 1, - self.oe._(32373), - 'files', - '??????????????.tar', - False, - False, - self.BACKUP_DESTINATION ) + self.oe._(32373), + 'files', + '??????????????.tar', + False, + False, + self.BACKUP_DESTINATION ) + + # Do nothing if the dialog is cancelled - path will be the backup destination + if not os.path.isfile(restore_file_path): + return restore_file_name = restore_file_path.split('/')[-1] From c1514d1a2e827fb161f989cc7ee275ab5bb18870 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 27 Jan 2020 00:56:13 +0000 Subject: [PATCH 23/51] ssh password: switch to text mode, disable buffering --- src/resources/lib/modules/services.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/services.py b/src/resources/lib/modules/services.py index 77fa493c..51528258 100644 --- a/src/resources/lib/modules/services.py +++ b/src/resources/lib/modules/services.py @@ -665,12 +665,11 @@ def do_sshpasswd(self, **kwargs): self.oe.execute('cp -fp /usr/cache/shadow /storage/.cache/shadow') readout3 = "Retype password" else: - ssh = subprocess.Popen(["passwd"], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + ssh = subprocess.Popen(["passwd"], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=0) readout1 = ssh.stdout.readline() - ssh.stdin.write(newpwd + '\n') - ssh.stdin.flush() + ssh.stdin.write('%s\n' % newpwd) readout2 = ssh.stdout.readline() - ssh.stdin.write(newpwd + '\n') + ssh.stdin.write('%s\n' % newpwd) readout3 = ssh.stdout.readline() if "Bad password" in readout3: xbmcDialog.ok(self.oe._(32220), self.oe._(32221)) From accab5803c710fc1504774514e1cf813f5adb310 Mon Sep 17 00:00:00 2001 From: cdu13a Date: Sat, 29 Feb 2020 16:57:31 -0500 Subject: [PATCH 24/51] Add icon for VPN --- .../service-LibreELEC-Settings-mainWindow.xml | 20 ++++++++++++++++++ .../service-LibreELEC-Settings-wizard.xml | 20 ++++++++++++++++++ textures/LibreELEC/vpn.png | Bin 0 -> 17374 bytes 3 files changed, 40 insertions(+) create mode 100644 textures/LibreELEC/vpn.png diff --git a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml index 99a76371..3a063550 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml @@ -405,6 +405,16 @@ String.IsEqual(ListItem.Property(netType), ethernet) eth.png + + + 40 + 25 + 48 + 48 + keep + String.IsEqual(ListItem.Property(netType), vpn) + vpn.png + 40 @@ -557,6 +567,16 @@ String.IsEqual(ListItem.Property(netType), ethernet) eth.png + + + 40 + 25 + 48 + 48 + keep + String.IsEqual(ListItem.Property(netType), vpn) + vpn.png + 40 diff --git a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml index a56c0dc7..51ba521d 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml @@ -234,6 +234,16 @@ String.IsEqual(ListItem.Property(netType), ethernet) eth.png + + + 10 + 10 + 32 + 32 + keep + String.IsEqual(ListItem.Property(netType), vpn) + vpn.png + 10 @@ -335,6 +345,16 @@ String.IsEqual(ListItem.Property(netType), ethernet) eth.png + + + 10 + 10 + 32 + 32 + keep + String.IsEqual(ListItem.Property(netType), vpn) + vpn.png + 10 diff --git a/textures/LibreELEC/vpn.png b/textures/LibreELEC/vpn.png new file mode 100644 index 0000000000000000000000000000000000000000..36ef55b391549bc61214eb018934749040f5ec90 GIT binary patch literal 17374 zcmV({K+?a7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>dk|j5iMgOsiUIMgO4y0M{V3t4UBI0G1BH2AQ zOtP~0LvTWr4bmukQN+3)Y?HD}}f^Yf2; z|8(Y$Z+LzOeuwA965n^j`}*he`Rg|a`okM8{qlwIbsGQUiA#T9_tyV(MKSnkfBdI@ z|98%+=j`Y1ddv(%es1bHh4~zY4-Osbel7D;_%HGIa(@~>)pk2ww98IA_?fOb?}9xp zx@BB<$8ERxJ>BFQqu;*p+xzLmeXWM#o1ei37ovXL@g=mdLJdAlze5Po1pjp{?w+^Z z^G#Pd^KyLDI}Yaf%HRH&fBL|G@^j9#jFEHPy?e)s>+)Xn;53XufATRV#GQBE(jDN> z&(}ZZhlvf$V7kLxxxsG7bBK}LcWi|l0D;dXen0W$%F?X)8zqr*CoaYXrod(wlFQB( z?+XbKd}V?A+_cb{tQZsV zQ(`5CdI~9~lyWMmrk1+NA;+9@&Lu17dI=?#RB|b$mR5QVHP%#fEw$EGd-E-jlBwlZ zT5YZM&N+KDJ$1g_`9$x-k1*m$BabrbXroWUXU3Uko@LhAW?z1V6<1n$l~q?;eY;I4 znH_i9d6!*x+x-x0C!BcF$)}up+UZ}j_Ri{WKmWz7xp&t5ohf~;e9aoKmZAgQLpb3~ z(ws44K00Q+Xa)#quQ{{T#ppG2nlsxxS&=*!nKU=c*=}5B3gdP@9rrbN-!u0g&zoVa z|7qU*e=>7MQ}_QcbKdOm%e?(z)|QZP-WhwcP-AKX*~e$Pul&nkzkm7b-#d(%+HtRO6jy02GWgs|TwXIdOKh84U~tZUFLi*5E^l12GXbm)e8NyN}#$?~NE4IqvNzNLa!;%a3JysXq5~##$U=p13Uk)w4rB z)#M#Bkmyz#Ju?TLQ$l8;rLtGqe&m`80Y&JHxFR7~@|hrW(dS%A)B7_+Hw$nMqvf5? z0EJtL_dq^3ZaR$IdM0f$2P(wKX|t7V<1U?H*ej(CmhY2?VTOAwZuwGUKdTk%^T>Og z#i5@=0yD>^-MLZEo9Udf7x`0L-&|vjr>AHDsL60mm!OZ}+RmeMqUKxv`R+1zVfeXN-U46zW2P+(oj zx48)Fbhew!fHkK&E+`b&iN-uUQ^AbYb*GRZ3>mZ`dc&yI)#=+lyCwc*h;{GW8+X&E zDav2&$a@%>F(F6_o=M2f#vH<&Vo=i3P0rc}GeD5- zJ#vU#eaeejw_W+zPnZi{yMMR;r{9CqZ68R zt`uT;2BxhtZjBU3u@ygKRN@gEW)l=4uH(QXBoX*fCK==+={Nf%_(-Ns2wP@lwR!@h znvh9hyT;^hsWYP5jGAs5P7)n>SquV@!a&-#Hx$}-6qp5QdNZqiz%E>L?ZhkcDbF2U z7-O64L5Nhxd!@7OF$n0!3He*yTk-4N8I`%8WyLbc-B>yoOk6V^saXKkq(G1-u7Zj5 zX`wfozC=PKmj;4@NVF5c4QZaxIkF{wVT4xmTB&i?1Vt5tEX$qBJ55P~r?LBa3bR`hloF00Q2TTJqc;pjviN1L+^PA4kbv5tO_ zngX)kUD!}stlPF!nHrdxtQ&@CvwKGdW+4?(mIR2YU(DZh6j9z@AKdzC{g^_6+{@llOxb6e@@PIfU13n1`>huz%{|I!*v^A zhlv2t^FqBYrY%IS3udu!Z~?&hReMhJ!qTjch=QeV4km7-<*3XuQ+btA1(FM#rvX#I zZQvEmJ_rqtI2ZCeI#@{&V9$UL#sRCzh~0oue;91$7C>$=D{OcCT1>QuwRF{Fdaa|v z4h_KfwT#kJip&jgM1TTc6W2k=7*GSl0P|ZeJu!^H@jAjUBDt*Ikp%%lgi{eGDA5DD zxI{=z@@fmET*oJv86uofH-u9@2-(Ru&m>d`MC@mwL*^W)5@zZ+J47oe?o(I>p=AS~ zW;u%-NHbu3@NG#JrT}H-3%QGAi-b8^OTS|xoPPgpzFtVvmbweM+uMP}q4s-5OZEUc zqa=>snyYYR237%7cm>3*k=b4b7cNoREZp6~$UKdb>mdB8UckU z2!JVHlqUtf5srnZP9TCmZIzi*ACXzvZ5lfhVJ{=w7YeN};uzE^8yq8$baD=Dfv|WO z*orv7AxH8(f3O#^ci{d+q(x=_j;&U|+G*`lG181FWfBL(QBdyw0C`=~B{6>_9$KJ~ zaALn{$dH;kAIbYf)b9+Emt2&CaM6QE$i<;FJbiC$9K;TM+Rm-HSpn*R1}e=UTQmcl z8cris?2Ck4k<7s?8MzOfp*|6*g9)#j>|Brppn>i}8@Yyq%)O^cLewl5-j8sW(I3LZ zF(e%j$Qz#kUUM2rRj~F5WXdFk_`K6q8MtOKI$nrDxX)cG1FT3PA~__nnPXxOg9e{# z=oV+PuK?Rbz)*bb<_!#B9Vw4Gs%W_$Yf&^uR|qMfhG1Y6iFzN%CHSgKh9uB%Gor-g zV8*#L!`Bc;P61x`C>ek+S^fltUWjZl1dxiJ7A>}Whshm;0~(e&0;7RNw~Zs}2)zpKgc=W` za+jbqI1aI4V9_Ux8I(k1x@6!tMu&h#==dyQi?;)FC(4oOhpBQ_3A8gt=xVZ5xtBWL z6v$BWO|RfL;BkwQo0&*cE^&OyVIKiYhZ+Y|ywjW*R-$ zLQ(z@CtWs?!Q^s>>PNF03Cs8hQ)UM|>_^m(bHPo(0{kfE`07V)* zv_f&iIB${YIC^q=lW2SbH5stHsGU%WB&-o~LYI$(Mmyp%lSILQHt_LCH&7XQOk$)J z5e_yJ*qloxX=!bQDYp&SGAStf4!bzUnUsW#0Z`B=%dT36xNpR0easJeMH1~>UK*1u zijYs$%*&-RMBItQ@+5_=>eHxHj)JTX;LR~8jgA>8nx082I&lLr>=z@NGtdaZNdaqc z&cTdeaB*RHB81UEGgSKg9$-|C#+kw+!VC35x)ysL;Ir&NMRH3 zW6MJb*A-(x@h^7b)X%Hpm&ngP+V7T8Om!lXdSfP(Q^mrj^7dse@xQ3HBRz@J+j z7O&%jagx9)#(4l8#CPBgDF-$+i|_D5xCl9Mnb%)qQdAUc5FDy!9&`$7JasIDoIPwv zT6hSVkbpw%t=Ey|u+KzJd#i%YB8tTb5LI~z!IH&Mj9@CGhQK0nR7vR$EmTKvDzvzn zoaCQsM1Y7)Eoz2Y9s;-_lQTg%Qm3|VpfS85c%`~hgCFJigQV_CSa>FiFpi!aZ(aEr z&dUvQ1Z46=VFKRMoV~a_Sxyj>`2c}QS4;!8tY<_*L{A_Mk);vc$6aw==7noltPMd+ zDCro)2LGpI3&X39%U}ZAkT+hsK^rI?zz}vplZyS2{}&xlPoc_|FyJ*ULlB}dnR}oI z!2(NI8J?45e*3T)2j-bite3JG9)?E&?(GI?RP0L)3^tPFvDY3+Kx74O1>6fTygo$A zVDJu-@j)pd$H_yz@7;nd_!^92vvudV6S6Z1R0whgf;7h<0OX>1W@rr$IpI~Umsdhz zBGoRiR3r!lNrcRrzF(eOS&9?4rz=3oGj3M8A3m*w`Xn{D*VKuFo?-Z?5iy@3SyrS2 z#o{0jz_{Vtai->vbah+?v%y_6UP(18Wh>EtP%g-=Jq=SH8T__ys-k$|RCE=d6vZMx zjLRm#N#-)GxG9D-y9y2v;w^p(rcX2Nx*ljAM55)#+~VM1pmGnWBHnS+WDim)}v3qdSjN6R3!%(I+;)Z|h! z^idH_j2T)Dd6&4Mf>w0MJ#+&G8m~SdAc_h#XGNITwH+33~)V z+w78JgA~DI1TC@OWDpr2a&uNKopBYa-4S3@I+nT5LVR)w4?9&!!sbLHj3-XoTjS`0 zvZj#DSR_U^0hrumcXAb^4N#O+gN4+G<(*e~Cc_xR6yPedb8)B+BevOzI~WP# z5qVQPNiRWr%OS|XeYDWJC7n8SgtcM3P^NKgP0IouGDa^drn!zibo~{)h0QVoC}hc_ zFbUW8z$uZoOi=1;g|SFJVwy>TjTiK>Dkstv3QqN0R7F>sp^89B;VSos*lnwktBjGC zvHA>B!IMZ{d$ilmszsvMC?`?pEkARC((iO zkjN!O87!-H4W<&ajE+~qARg|WU?B<9m6Zmd9AhW>)~V$}Ol%h_0{@^R783rS38b;8 zINktm@465ImV+^8z8+O1jKVPKTFFBqM+OV63SW9r5$xvRO~M(bXDma%wt6IsoW#{N zm;(Wbe>Ye}CI;Y_I&4F0w8Y-6iieCHn?Rh`cct7to?3Q}^Kupi%gI^FIo6!&IVq4ovP6#4McWwY`H?wRyL=48H#4$IHn_~vG%WZ zfhtJBa#Q*VTK>xA$9!ug3Dli-F#z0_=}k_k4931_O$DZhYSV)WLhG|gf)yyL^>AnSh|DaZvV8;;kU`{D*RsoM%FKg@A`Tr)bmcJ@Yvf(A zzezBp#h!@W3ykDc6M~m0bIdod#1j-&SeF3MGNbUNN(daNpx;cE{gqdTjw6}YB2Z`5 zL?FkMvMQ%)VcRQ!_DlKhJLHI=MhIzP1~UQV7?2D@A*Hd}P)2CM6r===iKn#!0MrYS zK$gQwcYQlK)xQ<`)58acjL|~fv)~66@r95GMBp7^3^}&xtSUa70(2X5K;R2WKAF(n zudu$1D+6bazhozCl+|A06#Nk;UgK6~V!IUoS}r4{1V zYGJ=*RfQ4qj$uV{mdgby$P=P-7_`jonR(Wvu!%$RJz#SdMiiGdkS>G>rh-7%;wjnE z8k2}!YqwCyP#r8p>ROT-UhNFJhz!z^L^7|89ZE8zL@VG8@8vZfGaQ%XDHB*g;k&49 za0K{j1WI0VSa+51Su>N-S21?4Df|=_JQtvL0WEIwiLkLN3g&7angIuya^Zp>>i9#E zqnmf!PWX$n*O5-y_yme8VKsHOf)W5FZ%VLk*mW>= zO@t0wy>OPV5S1Jp(&)YVrrc~$x`<%|y=T?ax{orX^Ew_ze; zC68<~^7s}wfY1xIL(|{8)@wH-3K6f3wbLr<08f$hpg$K$9;3vA{0)K>iL;6Sj($g% zd9`bGMRtarnq47d_y5SlE!(>f8ZS|ZPoD<0ek zoavAmWMt!1Q@_2tF2kxeJ=Hn36h2@rLU&m_QdSXkdeskMS~xv1!^nqKWnciNrC=IG zNj0Q3AWf&XD>OQ{tQJBc(8o}b(5Xe!Fp~9M<{mo&(n@@oy8@WQXp*UDaSL&PXpyYzm>^7ZgCMaBs8%u+K-&`bOaZd_c0QFdR4P@WP)5d2i2$!P zWUuQVx9Yoy#Nd*dpb?xJ_tg90Ilyg6Sh~P5NJ@)x5R46J$oxBWU)b~4@{YoZ_#X@dKC}U+S<`~hVl0hnJAA_Puyn88_m*TZz>E0#* zZV^a8YDBFN5*#2&Q?)XvL9RlOT(cVD@6Mhy*b zeUSv*rED~qRZa1zSwtF1Ei%m95h>qAAx0RD;E#H6fI|!igFOThOP$kKHi3T*iO)o! z61Dz~NqLsu)Ic2>%NVil6ZMARl<0o2vYWpE`&M8DGWH^)wYYZX2}X-TvF@BMps0J$sP(0QXUNx* zd`RlwjF=+a=RQvpC8J-z+9~0YBV~_Ox=Z$BgC==JD4Xa|#Z1fJ;aUDh=%&1IfylL^ z^M2O92Nb484P<3euN&fq&{sp$FeLr0KXAOeEx~z_bHwr`JLIMLKh=u{;$q|H^uO}o zE1*dgFIqHXGz@n&w4gO*xBA(M{Eeb(f^A<9mZkk2suAe~gcpRCDgqgjxy~8eIAbtn z1ThbkZHe2baaoGC5n9j#3OzhErP1wzp%c12s2c7gSC8M)S{nguGLjP1#Oa`ez%ulq z5PND#SZzOQV(JKTNaRYm^z`9bJSNnsH9Y0`j*L;1O2<@abx14d+}_ZjKSjB_1nRVY zt^!sG5;9`mE!R2^iK*3KKMd3_a2B3gVedWIAuT;w!qL`kK2^p2MLp8Gsaea4WemPs$wh&UhHd|>SdT}ghB-X3LA^SotCLaPfUA-3vVa*El*lJ3>LxEqTMgqEke;o)LBcXSVjc$cMlK17rrNnyfe^kp#*P%} zFf?{hwZFcq-jycSG7ssPq!MHku@#}BezTOn8kMzpU(_gOmw-o=6F1fVHJ#Rgzv>mq zdi$k`)Diy_`vr>=L?58p- z2Z>W5s^n;xX%$ItNNPz(;TIWH2|%w}i&mGq7T2{kfgs~hS#<%Fn~`52kC=aSU(FS! zSlV5HSY#HQunBFX1s*N`p})X*Eg!iDwu2&Uy7cJmuFL>ENgQqfeT*oWoAJ3MtjgJZq$ zt)(ojjd*^nR<{0nQF{hC9wru(s?K;=;WYE}%2VUBo!IFoezd;d%c(0%yXksIxu~0z zd_+{Jjfh`KJAsTE>TX97hfoVHc0!64Ojd`PH1sWQ^h9>3z<~Q3(q1Zk6T4uU^J-u* z>WXbkCiOO0LqPi!a!~<4YSBg&45L%Oi>6%jjc;XyaB`|uqeRg|Z5W8zA>$7iG(#ob z>`=?6L?749G+!qKJA3DF`A#KIbuMo8tEmwY-7Ae@lFBezxSc_(N=$%Sfr`545SHXB z>J|{pAI|OGA1tnK+BG1YU=sJ2>MlpgHu{i_y6w3&oVX}Aq|^l87-?Jk4d zX4a1&k{eK$CR#(P<}SocZ8}142JD=+;-EN4fq8XwI8}QGmX=y8FallXq`gJRbTR@3 zsM@i3ep@RTX>9~*W>)~4=qaFcxt(4JsV$&n3YQj2)#b0)S!*+wXc-aC zssbncMVZ=DQW$K>>!c=PCvP;oT0Xfne=KSVUd7FMq^q|BILqm&S#Yna|7`#}YjZ|l zhS5KutPCp%8ppNS0Zbw4sZ>NTm z3ujvWJ-2Ss?p~v!-eAI?>(^lHm{fsL9iVZgCRNBn##g+kX2~pK#|>eZNk}e1x&JOV z5K@6tVOfTXy>UGl#k^MYoXx8t44_0H0h3yF7%F+K1L!_GYq%CvEjHc)5!%#pidzt! zRmUUD#H^LB&O3CjOUgxj`|{i zlA*{{%cr)I5mc}*5a855ncfv8^*dQJ861`TIPlW0GYEE-1gtuMO%=1QnxNCd{kD6j zEM?lZP4JcEe^d z8CIcV)QP9&dyp8Yl2S_kwip%^?z5Ip&i=a9Kn*llWbG4c3=qLHyNYX11T}hXFHkvvnmkJcCy=7k8+z@4VI`u!fHDY%F6{U$uV!? zcC$-&X`2S%FO{bbI3$tw>uohDsW)KOyEH0FUkm93uxn*bJrPm8N$Rjl7{L{7t? zH4EJ`eC)y6q-@*mup%%1(HhIN4?^V z(9O3xv}h_93byoLtONEKX3Pb_jnXwwR~Jk()w8ZHIe(t6aBb&uL-l?21$D{ksCXtY z5`uW|BFm;?j_UUYqFECwM@ndqtoE_RleBvRosqR&6uYI}PM|E{1TU+8p8~TC-MTDn zV+@bcZAOAaeKpxujFI{>)Lf%IF-io|RlVJJg#+Z7+oRi-)_+b`RU;+@Z7^!E*KQVP z1&&-x;rJ?btFqk{G*H#iBnM2bgO=1SM$W_i$!hnR9z8&cgy={Kgn)Ki*4vAMoW>vxhWnBifSMan%4un5czBdJE0NVL(XYV1yve*c>#3CWu+Oe_wylJ4}Nni(XCV zP1_#3%w*DjK5%Qd`yt}V%-!Wbk#ukaq?5CN$D*;yc_fYP@GbeHtw&8%1wjS57nO+h zd;^tOyIFS@5K#cjE&C$%wMq2y2qbv7!fM^BN>QFh;KK4{9IQ1WKhB29FP*MmhKULmhh=} z?+GJR=4pD#1NN=9E0*D1+$hDemtmgs+rvNU{x8y-CfJYtnn_M zz>)4*YKdxUaDVlVK^kcbpesXxSO1!+U@ENUVT%6cX7b_%F)O`A0 zKso0*$=L56Rq$q|= z*Vrmq2^xXRs*x9W0|ci#0CN|Qda}CTLsnG#y_dfwyR7D;_sJ2`pX&R;Q!$WB z4jL^ywD)V*Asi*KP;SYY!9Cp;BVlgRdY98?P;{Gi-PEFOnp%=XVy84wlt;~8DrX0+ zFnjgrhz^bR`wZ=_#r(7)%_`lq)DB&;9=p)_-a*l1!N^_Y8EPrLPaqI`YwdB3Vpdey zw`x&1H&t`2CQr{H(B{ygot03000Ok%7Vv`E$vZtH#hs+qgeT?$;YGa++DQCtYP=S9MNcBcq5|udK6w!mUl=8o5RZC1$;1^2Dt#)j-Q<$*W2IJ2~)yA_#BOcspoN^`<8XPtCFy zM#|l~As^rGIvFg86l!ZHYdwl4!nIC)kf)ug1xXBH z#|N&hfdSvtnz_{wnYA14N*~0^z#V~kS_pyHv@f@4e@*aus=~8qjAc7|LWro;n>B~aLQ1{oV)koxM7XP6%wjwV~egElW?6m>i@!Csx9@<;RT_qmvE0zA7R zrt`y#oI#IUz<~G*9p|Sb>e(<)52e#$!uy{2{mmZk^Gisli|s1VyFa}0eXc7I&0k!8 z{JUFAza7^Gqr1IV^24oZX_GI34>4*(YSX-At&Lb_WUAfe!^aaDsnr&yAK`L$AuYat zJ29T%!3r)F+0gG8!lb>j7zsUQ#xAF4NN{cX{L$?l>&+p+tR#bd@cP-DA0=Rl_G^kj zLR3Qn+D>5peDS{J^1@nOA+gN*{$ehA&Il=RRA1iuJA|W#{PYM|3`z69`{V#WFh<;( zwx;{0)q4)-&<6w)2!dWx4HFf=r@i&k$cRj@!p*@lYdHjbNGXQA%+bOH_2c$f^1#=RV!9P*SVaZyDKjqQ1a3pB3Uw>BRb zJ*`8}#z6jB?RB~UGNangz`{6x{NQ>JZ<992{uH;KB5pF!1Xj0%HIaJrt3-mBsmre9x6OO1CT1N9qlp*0%r z5$sD_bOhyD751t+=U|7TeU0v!PmNH~7JqF*#AHS{@NMYRw$79Nu<89ET0?7oT{}51 zvh8Ih-nh{A(o@)jAlFk8@Q^C@H%^?8-S{4ZEaL}$hCUU8Fc(P_nhNK7{K|yh_`JYC zP2O@>%os3w2jccQ%2N$9wL8SZ^xB52#9Z-$KrNlTuxjVRh-;?+v4^d1^EUW%>1tW5 zxVe?p-iKXRLpL;Vx4X5h17v26usHSJDF-FCOn#cVDp9vl)g8ia?8!?BSqg!6U8zOm%a{Q?$WbTX;ZN zU+zQ_+7gs%(Yh(52~B{O~Dq( zo5nv}2Lq&ffu4kT>UpW{yD@>)_( zciW;i(n&)+r<{E~V|VlX(4A~$d%|5yYUn_;(CUY zEV4__(mS{L>8*vRfPkOBO8L85iFx0Wf@U=Ij0KT(oRfSbJa@@Q3Sl4=Avv?70Yx4D{7oXS0e#FCH z=irY>Vg3vi_puoF#7!%gR*z>SFyWL>sVw~R>f2U*^jMrf;>>r3m!~&e58#wkl`cbr zg)3F-F-VfKFZzM%fr2D!}3bsi# z5#>t{U(nM~oN7<%8Xnuht|S2>a_AXr_lb(}>ndSRJv>WbZ@{Z~AGhOf=PlNutH)bhsX(*IJk@8Uo(32ARzLvAF7PO(<+2D{|oCi&K@mO$9Dh#0fcEoLr_UW zLm+T+Z)Rz1WdHyuk$sUpNW)MRg-=tZA{7Tah=^pUE?N*3anvdlp+cw?T6Hja=^r#{ zNK#xJ1=oUuKZ{id7iV1^Tm?b!2gJ$INzp}0ye}!Vi1ESYeVq5s;lBF-pP z-n0$Q`@|7elvUz$;xUsNB!1+&;_(~jg3AKWjF{=vJaL3rEVQxG#;j;+#8bpkRnsY7 z$at)B-r}s4tE|~4e_=SMuPk$&Y7hx5VhIvND5#=@GHk?X*GaLEqVu?qf57!iq0t6Z`Jyj#b000pgNkl6v z_osiq@2`LTYhjGx&2GD{xR-i6ChUX&NFfOmMbweZod4*XI+l1d07~obBIDb17jkUd zzLNfBT?nnQYzq)b$6}$;;l(49Ois=-U7n-f2$?(gH~+r?BOC6b(3NKQu2F8iZ3{`P zIsMW!)oL4QN#-jp{FFm^x=y1R;y4o5b?`DiwQ7TtN6u58sxWot-v3*Geb;@GdMn|w zO+#$oUczx~Jl|nvwn3%ZrrlArI}!Cpj4=kKG{zW=F?hB_DNQDyAz#dJc5Ifz&z`1U zsWbIDEON;Jx4!*;3i&KMcMMbLPE#80CCH>WJvPhp&z+-I@6hTbR2M=frke!5&FDyx zR=rIe#kjUWDNWC^Zln}=DVs(;;>6*zoIG-xsk5K@)d6hWdJp@qUeEUJLuh000*@`* zRuCnMbLXoZJ~~OF3;96mHlsf=N|EDB0hVn+?+1Y{jlB$|90z@mwh*tvGFaN{^bQqqstIRa_DjW z=2~F$&W}oRUZ;pV<*CZu*WSG2-c@V* zX|y$yV-rlCUtsLmIOXwAym5fH|JG-z%qiaSn_KbIE>p8j9{%>z!}V73z-60;w!cXt zuGA~_4}9p(cYb4Trq1ER6P!6QNu@l;+~lX;7{J!c|C(EG*+RaM#!tI^_dCzNtB}ur zW#^7z=T{)&f4FSlmOpT%jg^EP`N`e%1NO*P8s=Z3h@C_2POCwrla(`wsqP zX?gK$S6{Wp@lp;7L02J-5n#JEZrYQFnY}eeocTR60BL>M-(gW zzyFZ~S6s37z|Ng3M5_~1t%pRhLK%b7fSmxwOsJO#>V`I!WHQ z@O#sECWb^2Yt8&@6J!h9vXBzGvM!Cb#!U%Ut{vJmc5M8gv4`)#PtiA+yL5o={sOM& zaP-)jH9b9ruitXh2GQ!o#7a|dMwEuS>FvwXjue)Zv~@ztm7JfLCyXQJ8itPOaB6Y^ z{8{{TiXVLcMI;7W3NnGs>}-o%E=9W@5xE{aHw|DhK&`3B^yJ_D%)^JC*m~WzPfv}P zFWrTNkQ_TT&FPn_U%PVeh|`G_ok&qx2x&zLtJn0AD1&QD(!N73c7miMlPJ8$cgsnD??~)2!N`nQIuy9f?!glB_b%-5PsO*J`k zbb^;f>}12}i^YL1>h1Q@0ZOAo#EBt^#1}7$IF1do)iy&z1#Y^2En#e^HDl_n1jn-o z(jK|2$NIJXY};HyIugfo*t2^Thfd7#qoY%F6fEn{F;!_(ZABzPVz~lo+f0?`=|r09 zLI-2uXGHwYBTt-NuFWNA;M~~?&FcK<>UAqegS1P%onY*cLf+@f-NV$|G1`Cu(t(3U zP@ZcMYuK@6kWQqTtF<}y(kzvQHu;`3Ns^FJhRI4BtrXI=Fo{4SKq_**1-x_$KjTpv zUO}T;0owsTCHn?*pPZSky?4m~VW{ZtFYI?chcH$&S`l5{0YN5(bS#V!D5Eh#&<+(* zqEUcrTf|x*5<|*&NCaG%Z-NlC+cB0DNJoMM#}UM_Ac+OG6iiLm06}S0AL+D@7f1+W z{H_dB1JUajZcsrWRT$q^;0OfJmrT8w{*3k%S!t66x4v^B$?d z?h}#U1I#T+1CD9fDiH&&=g{sX{P>yk%*?mZ!1;0mZ2+;@ec!=P*`xy($F`WQw0Q1# zndQZR-a?uLL4+U@0wpEdvM{!Vwj_?XC~VFw(+EiL`9883)_8uzjDaw)TT9KnkSmp$+RVMZ}whloX2@ouoxZ8G24m} zVzEMDgkmHsxp||<_B9zC*FjnqMr)EJAq+#xwFxW<%0Qgh2&soJMZ_C(*?{TUCfQty zR;)3$MWdsLJBxAs_}O_*PE^stAf&`{EVM9Ku7v=!0VxH>z(S;PJO^7CWTLr!mEflB z0V{`Bk_plTL4cnQh{K4m)1g+c(>pgywKC54p0_cU0U`S?MZ}pP?Q-l)h2ruqY@vyz z+pF5B5J0u7mJuyu^Oc0i!m~knjJt~nxTap|5 z6}wkz_U*fdvt#2-UYOvKg9piVb&=2Ksg}zeI&_GU(NV6sY9Bjx?4(+Il=t48=FTVN z%#ua?(&-C776=Rm1cb4o*@;PcHYd(k8SKmO=U;e|o?MD@t%K`0G(yFrFV5ik4#NXE zgl$nv;H63jB`pHa=7!ZBdb@i$ar79qg(^=TI>gp(Tj}oU!*K)BnJzYN-i~ES#?Os& z^4M|ui+v0Z1ib%_LO}>2mSh3ds-0@JJBwSb0j&*=l!S?ChYp$(uBLM(>fz~}ixFEBj3f}_Vz^LG!Qr)$|J2D?(6 zK3nF4H}qrMQ}h@6FamlCJ=AKGdB6ga|J4FBGoP=kByJk5@jRQ0;2MLJf@5cEj11(6 zq{~B3PjYU$hSCwPEm&8|lgqlKe4CW-;H4Z=DF-)YllB8#$Hh;jXf~Q0IX=dHKbWDg z{(3g88|6aF!}jw$eXN7Q;5sgyutPdXV@x!&xSUHo4|tw@0Je9q(C zY?IqJ^>ci_jj${Zo~*H=znkke^f8e4=_H2PcEUoK@aTzI>YW4uqyit$PvLqlj$>nl zOJUuWj1==+n5mN}gAjl**tU&jS;TQnCYvEiqUI%?2XZ;*bHU4J)`f*OU1^WNvrt+y z(Cu?#qR!PDieO1XZ8$aCBIVk+j)m{p^k+RrdIH|FW02h=J@j^G&{~ruimvW%+F^&Y zQ+4{fJZuT`%@~BiGKxwgp;n72_7_Q#gdiPIuh$bmFB#x_57oYr_C*`5(b`a}wrMmY zjDc3DXeSACjhK~vX^aqDzoE!TZ-5j6DFs3bgp{OQo9(3>@9@Xa(#1#zAp}#^m?s%w zO{tgD3_>l-RIr@lf9}5Nn8yAykHUtx8k=l8xo=z;Prp7$nH8 zMEh&7(?x`vT}-T0gzn6ebY@8!B;gEE7@=FoSoen^((!tYF>^}-5JHHRYwwy3 z`g*$Kz{AUUG!w8g9_d1c(6MndDSmzXa%N)q-7AI&wIMbTX;274rCIanJ(QM>vFw_U z5ziilcoyLm5q26QU4)%NAOM3=9Zb}~=sLtLw2`hd=zmbSLw*#J1`3T~w?Il}0NCmLy3uPoAlA*~$XXl^d+@&tL#)E$$;WlE{%{ z^F@+{33TlVh<}3gMiAa|ureUB7~2BX1|30o9+6C8R2ieQD8H9(R!*-_-;w+XdBdrOfIg1n*kmeN9x`4DVAnXQ~6N5;QcAHjRy}s)7 zQ;&V*eb?XgnQe_`XOnSkI$9u%#0DG$wh)}3ZzDXHYgZLmh!uIyMj`MVXj_Z!fzSxq z0x`w8sS;8yfF1v=(}Iq{D75OPH(SPad=N1j#Vfh{lFRF-j-K1SZu80`1A#p<7DnJZ z2-ij177-w0%|xZeR}atf$9tF4ost-!9z(rl&}Okjn5YC3jWIO*J1ho$=NH2YMzulM zM3vLTNejyujMlW8Zvf!jxlgx+xO?^HJqr(RzkK7ZvKXKOkEXO~N{g?6$$$OCUVzBrh0~ig)EdKT_2g})lR0&!slzIaf9E+kp zpoQRVVf(;-uaG;CEiH5U*Ywlhmm^jQwR*&wo`6a#K?+GLF(gK_(2PmK#Zr45Y2u1z zc-MW1m-i)e@xX4(VhU*%shVS7LF*b;V$g}9(J*fe;N>w4-2L&w$e-RnP;dTIb#m@D zf3PT{t_->U90Q)j(wg~R}H3|Os%xT7%IpgIW{i-{k8h+obve{LMod64#MjM1n_ z(dqEU0WP-6*k`K1+Xq*DczB^abx*FZa7*P(SMiZE)8zYdluBI;_GNi$yvE*>)9A}J zQJ4@l716XJSbqStdX2idMR?{xgskCo5>%{dwk{E1^XAQ1mi3w-#Vq5GJo3o<`-(*| zc=?^BndAEXK{~Z*rpLMYRIZS3MKMG(v@3#)FsKNkIz&%>@|BXypN~kUjnlPw6b>62 ztuE1p_V3@%jW^zi*7~PiDfLVL$HvBZVQR{l&);#*z{j)(Z5BP;7{Noo_eW0&aq})6 zOQMD$oC8d2NtV{epc8>W(rmwpE_AVVIvpk^Ca~>S|I~bk?BOF5_>ISDjh!W&T&m!} z$}W(#pFma4F;mkon`VgsaUA1$-Yc(+*3@b>eBY;DuM>vhtA6LDhPeGd|M7*t(#;pN z%z$t%VTE)B{l(8AQV=fAw!GwQ^oAR5Ad|`b(hg{hA&%ppzTdldFWueUKfQ_6TEF7+ zFTN|4N<8qu1Ft%MPfrgM6B9iA@WZd~qWj>%gG*YZ+i$=9b-ACEl5c(MTW`pP{~J2} V$BxOPD2@OC002ovPDHLkV1h+)#3TR! literal 0 HcmV?d00001 From 511d2dfaccb135745e203c003e892e0ebb2f0382 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 23 Mar 2020 23:08:27 +0000 Subject: [PATCH 25/51] Python cleanup: fix Dialog::yesno() --- src/resources/lib/modules/bluetooth.py | 8 ++++---- src/resources/lib/modules/system.py | 4 ++-- src/resources/lib/modules/updates.py | 5 ++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index e7312b2d..9905079b 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -930,7 +930,7 @@ def AuthorizeService(self, device, uuid): self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::uuid=', repr(uuid), 0) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Bluetooth', 'Authorize service', 'Authorize service %s?' % (uuid)) + answer = xbmcDialog.yesno('Bluetooth', 'Authorize service %s?' % uuid) self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::answer=', repr(answer), 0) self.busy() self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'exit_function', 0) @@ -1010,7 +1010,7 @@ def RequestConfirmation(self, device, passkey): self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::passkey=', repr(passkey), 0) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Bluetooth', 'Request confirmation', 'Confirm passkey %06u' % (passkey)) + answer = xbmcDialog.yesno('Bluetooth', 'Confirm passkey %06u' % passkey) self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::answer=', repr(answer), 0) self.busy() self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'exit_function', 0) @@ -1028,7 +1028,7 @@ def RequestAuthorization(self, device): self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::device=', repr(device), 0) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Bluetooth', 'Request authorization', 'Accept pairing?') + answer = xbmcDialog.yesno('Bluetooth', 'Accept pairing?') self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::answer=', repr(answer), 0) self.busy() self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'exit_function', 0) @@ -1076,7 +1076,7 @@ def AuthorizePush(self, path): properties = transfer.GetAll('org.bluez.obex.Transfer1') self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Bluetooth', self.oe._(32381), properties['Name']) + answer = xbmcDialog.yesno('Bluetooth', "%s\n\n%s" % (self.oe._(32381), properties['Name'])) self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush::answer=', repr(answer), 0) self.busy() if answer != 1: diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 4bbe2821..ef90fe19 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -513,7 +513,7 @@ def ask_sure_reset(self, part): try: self.oe.dbg_log('system::ask_sure_reset', 'enter_function', 0) xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno(part + ' Reset', self.oe._(32326), self.oe._(32328)) + answer = xbmcDialog.yesno(part + ' Reset', '%s\n\n%s' % (self.oe._(32326), self.oe._(32328))) if answer == 1: if self.oe.reboot_counter(30, self.oe._(32323)) == 1: return 1 @@ -618,7 +618,7 @@ def do_restore(self, listItem=None): if copy_success == 1: txt = self.oe.split_dialog_text(self.oe._(32380)) xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.yesno('Restore', txt[0], txt[1], txt[2]) + answer = xbmcDialog.yesno('Restore', '%s\n%s\n%s' % (txt[0], txt[1], txt[2])) if answer == 1: if self.oe.reboot_counter(10, self.oe._(32371)) == 1: self.oe.winOeMain.close() diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 4a119443..c7765adb 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -452,9 +452,8 @@ def do_manual_update(self, listItem=None): version = self.oe.VERSION if self.struct['update']['settings']['Build']['value'] != '': self.update_file = self.update_json[self.struct['update']['settings']['Channel']['value']]['url'] + self.get_available_builds(self.struct['update']['settings']['Build']['value']) - answer = xbmcDialog.yesno('LibreELEC Update', '%s: %s' % (self.oe._(32188), version), - '%s: %s' % (self.oe._(32187), self.struct['update']['settings']['Build']['value']), - self.oe._(32180)) + message = '%s: %s\n%s: %s\n%s' % (self.oe._(32188), version, self.oe._(32187), self.struct['update']['settings']['Build']['value'], self.oe._(32180)) + answer = xbmcDialog.yesno('LibreELEC Update', message) xbmcDialog = None del xbmcDialog if answer: From e507eb15e5bf25b8e191bfa6cb45a02355baccc7 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 23 Mar 2020 23:22:55 +0000 Subject: [PATCH 26/51] Python cleanup: fix Dialog::ok() --- src/resources/lib/modules/connman.py | 2 +- src/resources/lib/modules/system.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 387419d7..fc79e80b 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -345,7 +345,7 @@ def set_value_checkdhcp(self, listItem): try: if self.struct['IPv4']['settings']['Method']['value'] == 'dhcp': ok_window = xbmcgui.Dialog() - answer = ok_window.ok('Not allowed', 'IPv4 method is set to dhcp','changing this option is not allowed') + answer = ok_window.ok('Not allowed', 'IPv4 method is set to DHCP.\n\nChanging this option is not allowed') return self.oe.dbg_log('connmanService::set_value_checkdhcp', 'enter_function', 0) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index ef90fe19..87008b51 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -555,7 +555,7 @@ def do_backup(self, listItem=None): if self.total_backup_size > free_space: txt = self.oe.split_dialog_text(self.oe._(32379)) xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.ok('Backup', txt[0], txt[1], txt[2]) + answer = xbmcDialog.ok('Backup', '%s\n%s\n%s' % (txt[0], txt[1], txt[2])) return 0 except: pass @@ -614,7 +614,7 @@ def do_restore(self, listItem=None): else: txt = self.oe.split_dialog_text(self.oe._(32379)) xbmcDialog = xbmcgui.Dialog() - answer = xbmcDialog.ok('Restore', txt[0], txt[1], txt[2]) + answer = xbmcDialog.ok('Restore', '%s\n%s\n%s' % (txt[0], txt[1], txt[2])) if copy_success == 1: txt = self.oe.split_dialog_text(self.oe._(32380)) xbmcDialog = xbmcgui.Dialog() @@ -662,7 +662,7 @@ def do_send_logs(self, log_cmd): link = result.find('http') if link != -1: self.oe.dbg_log('system::do_send_logs', result[link:], 2) - done_dlg.ok('Paste complete', 'Log files pasted to ' + result[link:]) + done_dlg.ok('Paste complete', 'Log files pasted to %s' % result[link:]) else: done_dlg.ok('Failed paste', 'Failed to paste log files, try again') @@ -738,7 +738,7 @@ def set_pinlock(self, listItem=None): else: encodePin = self.oe.hash_password(newpin) self.oe.write_setting('system', 'pinlock_pin', encodePin) - xbmcDialog.ok(self.oe._(32230), self.oe._(32231), newpin) + xbmcDialog.ok(self.oe._(32230), '%s\n\n%s' % (self.oe._(32231), newpin)) oldpin = newpin else: xbmcDialog.ok(self.oe._(32232), self.oe._(32229)) From 70678abab8daca9e3bd888094d088bf9a5086b3f Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 23 Mar 2020 23:33:02 +0000 Subject: [PATCH 27/51] Python cleanup: fix DialogProgress::create() --- src/oe.py | 4 ++-- src/resources/lib/modules/bluetooth.py | 3 +-- src/resources/lib/modules/system.py | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/oe.py b/src/oe.py index 31a8677e..84555428 100644 --- a/src/oe.py +++ b/src/oe.py @@ -127,7 +127,7 @@ def getSpeed(self): def open(self, heading='LibreELEC', line1='', line2='', line3=''): self.dialog = xbmcgui.DialogProgress() - self.dialog.create(heading, line1, line2, line3) + self.dialog.create(heading, '%s\n%s\n%s' % (line1, line2, line3)) self.reset() def update(self, chunk): @@ -749,7 +749,7 @@ def split_dialog_text(text): def reboot_counter(seconds=10, title=' '): reboot_dlg = xbmcgui.DialogProgress() - reboot_dlg.create('LibreELEC %s' % title, ' ', ' ', ' ') + reboot_dlg.create('LibreELEC %s' % title, ' ') reboot_dlg.update(0) wait_time = seconds while seconds >= 0 and not reboot_dlg.iscanceled(): diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 9905079b..40363e6f 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -862,8 +862,7 @@ def TransferChanged(self, path, interface, dummy): if interface['Status'] == 'active': self.parent.download_start = time.time() self.parent.download = xbmcgui.DialogProgress() - self.parent.download.create('Bluetooth Filetransfer', '%s: %s' % (self.oe._(32181), - self.parent.download_file), '', '') + self.parent.download.create('Bluetooth Filetransfer', '%s: %s' % (self.oe._(32181), self.parent.download_file)) else: if hasattr(self.parent, 'download'): self.parent.download.close() diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 87008b51..d53af383 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -561,7 +561,7 @@ def do_backup(self, listItem=None): pass self.backup_dlg = xbmcgui.DialogProgress() - self.backup_dlg.create('LibreELEC', self.oe._(32375), ' ', ' ') + self.backup_dlg.create('LibreELEC', self.oe._(32375)) if not os.path.exists(self.BACKUP_DESTINATION): os.makedirs(self.BACKUP_DESTINATION) self.backup_file = self.oe.timestamp() + '.tar' @@ -652,7 +652,7 @@ def do_send_logs(self, log_cmd): self.oe.dbg_log('system::do_send_logs', 'enter_function', 0) paste_dlg = xbmcgui.DialogProgress() - paste_dlg.create('Pasting log files', 'Pasting...', ' ', ' ') + paste_dlg.create('Pasting log files', 'Pasting...') result = self.oe.execute(log_cmd, get_result=1) From 6d8b5cc0b7eca6755d1e4d95c4dba2606dbfe515 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 23 Mar 2020 23:40:13 +0000 Subject: [PATCH 28/51] Python cleanup: fix DialogProgress::update() --- src/oe.py | 2 +- src/resources/lib/modules/bluetooth.py | 4 ++-- src/resources/lib/modules/system.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/oe.py b/src/oe.py index 84555428..eb4ae4b1 100644 --- a/src/oe.py +++ b/src/oe.py @@ -135,7 +135,7 @@ def update(self, chunk): line1 = '%s: %s' % (self.label1, self.source.rsplit('/', 1)[1]) line2 = '%s: %s KB/s' % (self.label2, f'{self.speed:,}') line3 = '%s: %d m %d s' % (self.label3, self.minutes, self.seconds) - self.dialog.update(self.percent, line1, line2, line3) + self.dialog.update(self.percent, '%s\n%s\n%s' % (line1, line2, line3)) self.last_update = time.time() def close(self): diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 40363e6f..1de063a3 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -886,8 +886,8 @@ def TransferChanged(self, path, interface, dummy): transferred = int(interface['Transferred'] / 1024) speed = transferred / (time.time() - self.parent.download_start) percent = int(round(100 / self.parent.download_size * (interface['Transferred'] / 1024), 0)) - self.parent.download.update(percent, '%s: %s' % (self.oe._(32181), self.parent.download_file), - '%s: %d KB/s' % (self.oe._(32382), speed)) + message = '%s: %s\n%s: %d KB/s' % (self.oe._(32181), self.parent.download_file, self.oe._(32382), speed) + self.parent.download.update(percent, message) if self.parent.download.iscanceled(): obj = self.oe.dbusSystemBus.get_object('org.bluez.obex', self.parent.download_path) itf = dbus.Interface(obj, 'org.bluez.obex.Transfer1') diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index d53af383..28a3a7e0 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -696,7 +696,7 @@ def tar_add_folder(self, tar, folder): tar.add(itempath) if hasattr(self, 'backup_dlg'): progress = round(1.0 * self.done_backup_size / self.total_backup_size * 100) - self.backup_dlg.update(int(progress), folder, item) + self.backup_dlg.update(int(progress), '%s\n%s' % (folder, item)) except Exception as e: self.backup_dlg.close() self.oe.dbg_log('system::tar_add_folder', 'ERROR: (' + repr(e) + ')') From f07a847ca16d17b55b477c1f04a0cc99305cc807 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 3 Apr 2020 18:39:05 +0100 Subject: [PATCH 29/51] Regdomain cleanup --- src/resources/lib/modules/connman.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 387419d7..30f0ccc6 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -469,6 +469,8 @@ class connman: CONNMAN_DAEMON = None WAIT_CONF_FILE = None NF_CUSTOM_PATH = "/storage/.config/iptables/" + REGDOMAIN_CONF = "/storage/.cache/regdomain.conf" + REGDOMAIN_DEFAULT = "NOT SET (DEFAULT)" connect_attempt = 0 log_error = 1 net_disconnected = 0 @@ -730,9 +732,8 @@ def load_values(self): self.struct['advanced']['settings']['netfilter']['value'] = nf_option_str # CUSTOM regdom - regFile = '/storage/.cache/regdomain.conf' regList = [ - "NOT SET (DEFAULT)", + self.REGDOMAIN_DEFAULT, "GLOBAL (00)", "Afghanistan (AF)", "Albania (AL)", @@ -903,12 +904,12 @@ def load_values(self): "Zimbabwe (ZW)" ] self.struct['/net/connman/technology/wifi']['settings']['regdom']['values'] = regList - if os.path.isfile(regFile): - regLine = open(regFile).readline().rstrip() - regCode = "(" + regLine[-2:] + ")" - regValue = next((v for v in regList if regCode in v), "NOT SET (DEFAULT)") + if os.path.isfile(self.REGDOMAIN_CONF): + regLine = open(self.REGDOMAIN_CONF).readline().rstrip() + regCode = '(%s)' % regLine[-2:] + regValue = next((v for v in regList if regCode in v), self.REGDOMAIN_DEFAULT) else: - regValue = "NOT SET (DEFAULT)" + regValue = self.REGDOMAIN_DEFAULT self.struct['/net/connman/technology/wifi']['settings']['regdom']['value'] = str(regValue) self.oe.dbg_log('connman::load_values', 'exit_function', 0) @@ -1204,13 +1205,15 @@ def custom_regdom(self, **kwargs): self.oe.dbg_log('connman::custom_regdom', 'enter_function', 0) self.oe.set_busy(1) if 'listItem' in kwargs: - if str((kwargs['listItem']).getProperty('value')) == "NOT SET (DEFAULT)": - self.oe.execute('rm /storage/.cache/regdomain.conf') + if str((kwargs['listItem']).getProperty('value')) == self.REGDOMAIN_DEFAULT: + os.remove(self.REGDOMAIN_CONF) regScript = 'iw reg set 00' else: regSelect = str((kwargs['listItem']).getProperty('value')) regCode = regSelect[-3:-1] - regScript = 'echo "REGDOMAIN=' + regCode + '" > /storage/.cache/regdomain.conf; iw reg set ' + regCode + with open(self.REGDOMAIN_CONF, 'w') as regfile: + regfile.write('REGDOMAIN=%s\n' % regCode) + regScript = 'iw reg set %s' % regCode self.oe.execute(regScript) self.set_value(kwargs['listItem']) self.oe.set_busy(0) From 15c0c0564c0bbaf0640c508aa2bfe1861db7dada Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sun, 5 Apr 2020 19:25:17 +0100 Subject: [PATCH 30/51] Fix wait for network timeout type conversion error --- src/resources/lib/oeWindows.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 7213bae3..38c9f52f 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -310,10 +310,8 @@ def onClick(self, controlID): strValue = '0' xbmcDialog = xbmcgui.Dialog() returnValue = xbmcDialog.numeric(0, 'LibreELEC.tv', strValue) - if returnValue == '': - returnValue = -1 - if returnValue > -1: - selectedItem.setProperty('value', str(returnValue)) + if returnValue != '': + selectedItem.setProperty('value', returnValue) elif strTyp == 'bool': strValue = strValue.lower() if strValue == '0': From 9661fbe1820f5c4c373ff3658a00347bb03ad8a8 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 13 Apr 2020 22:07:57 +0100 Subject: [PATCH 31/51] Fix potential divide by zero errors --- src/oe.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/oe.py b/src/oe.py index 31a8677e..adff0189 100644 --- a/src/oe.py +++ b/src/oe.py @@ -152,14 +152,15 @@ def sample(self, chunk): self.start = now if (now - self.start) >= self.minSampleInterval or not chunk: - self.speed = int((self.partial_size - self.prev_size) / (now - self.start) / 1024) + self.speed = max(int((self.partial_size - self.prev_size) / (now - self.start) / 1024), 1) remain = self.total_size - self.partial_size self.minutes = int(remain / 1024 / self.speed / 60) self.seconds = int(remain / 1024 / self.speed) % 60 self.prev_size = self.partial_size self.start = now - self.percent = int(self.partial_size * 100.0 / self.total_size) + if self.total_size != 0: + self.percent = int(self.partial_size * 100.0 / self.total_size) # Update the progress dialog when required, or upon completion def needsUpdate(self, chunk): From 4edfc807952697c2a2f7bfb26886d9caaa4be6a5 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 13 Apr 2020 21:59:08 +0100 Subject: [PATCH 32/51] Mask PIN input --- src/oe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oe.py b/src/oe.py index 31a8677e..dff32a5b 100644 --- a/src/oe.py +++ b/src/oe.py @@ -530,7 +530,7 @@ def openConfigurationWindow(): PINtry = 4 while PINmatch == False: if PINtry > 0: - PINlock = xbmcDialog.input(_(32233), type=xbmcgui.INPUT_NUMERIC) + PINlock = xbmcDialog.numeric(0, _(32233), bHiddenInput=True) if PINlock == '': break else: From 365de158949ad43e5b3141afb97f8e1919e0cf26 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Tue, 14 Apr 2020 13:09:22 +0100 Subject: [PATCH 33/51] Cleanup PIN entry, use PINStorage class --- language/resource.language.en_gb/strings.po | 6 +- src/oe.py | 189 ++++++++++++++------ src/resources/lib/modules/system.py | 29 ++- 3 files changed, 152 insertions(+), 72 deletions(-) diff --git a/language/resource.language.en_gb/strings.po b/language/resource.language.en_gb/strings.po index 29fd358e..b3b9d7f2 100644 --- a/language/resource.language.en_gb/strings.po +++ b/language/resource.language.en_gb/strings.po @@ -725,7 +725,7 @@ msgid "@DISTRONAME@ Settings PIN lock set." msgstr "" msgctxt "#32231" -msgid "Your @DISTRONAME@ Settings PIN lock was set to:" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" msgstr "" msgctxt "#32232" @@ -733,7 +733,7 @@ msgid "Error - PIN code not 4 digits!" msgstr "" msgctxt "#32233" -msgid "@DISTRONAME@ Settings Locked - Enter PIN" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" msgstr "" msgctxt "#32234" @@ -753,7 +753,7 @@ msgid "@DISTRONAME@ Settings Locked!" msgstr "" msgctxt "#32238" -msgid " minutes remain before PIN can be entered.[CR][CR]Too many previous failed attempts." +msgid "Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous failed attempts." msgstr "" msgctxt "#32240" diff --git a/src/oe.py b/src/oe.py index 9ec247f3..6ecbd266 100644 --- a/src/oe.py +++ b/src/oe.py @@ -84,6 +84,106 @@ import oeWindows xbmc.log('## LibreELEC Addon ## ' + str(__addon__.getAddonInfo('version'))) +class PINStorage: + def __init__(self, module='system', prefix='pinlock', maxAttempts=4, delay=300): + self.module = module + self.prefix = prefix + self.maxAttempts = maxAttempts + self.delay = delay + + self.now = 0.0 + + self.enabled = self.read('enable') + self.salthash = self.read('pin') + self.numFail = self.read('numFail') + self.timeFail = self.read('timeFail') + + self.enabled = '0' if (self.enabled is None or self.enabled != '1') else '1' + self.salthash = None if (self.salthash is None or self.salthash == '') else self.salthash + self.numFail = 0 if (self.numFail is None or int(self.numFail) < 0) else int(self.numFail) + self.timeFail = 0.0 if (self.timeFail is None or float(self.timeFail) <= 0.0) else float(self.timeFail) + + # Remove impossible configurations - if enabled we must have a valid hash, and vice versa. + if self.isEnabled() != self.isSet(): + self.disable() + + def read(self, item): + value = read_setting(self.module, '%s_%s' % (self.prefix, item)) + return None if value == '' else value + + def write(self, item, value): + return write_setting(self.module, '%s_%s' % (self.prefix, item), str(value) if value else '') + + def isEnabled(self): + return self.enabled == '1' + + def isSet(self): + return self.salthash is not None + + def enable(self): + if not self.isEnabled(): + self.enabled = '1' + self.write('enable', self.enabled) + + def disable(self): + if self.isEnabled(): + self.enabled = '0' + self.write('enable', self.enabled) + self.set(None) + + def set(self, value): + oldSaltHash = self.salthash + + if value: + salt = hashlib.sha256(os.urandom(60)).hexdigest().encode('ascii') + newhash = hashlib.pbkdf2_hmac('sha512', value.encode('utf-8'), salt, 100000) + newhash = binascii.hexlify(newhash) + self.salthash = (salt + newhash).decode('ascii') + else: + self.salthash = None + + if self.salthash != oldSaltHash: + self.write('pin', self.salthash) + + def verify(self, value): + salt = self.salthash[:64].encode('ascii') + oldhash = self.salthash[64:] + newhash = hashlib.pbkdf2_hmac('sha512', value.encode('utf-8'), salt, 100000) + newhash = binascii.hexlify(newhash).decode('ascii') + return oldhash == newhash + + def fail(self): + self.numFail += 1 + self.timeFail = time.time() + self.write('numFail', self.numFail) + self.write('timeFail', self.timeFail) + + def success(self): + if self.numFail != 0 or self.timeFail != 0.0: + self.numFail = 0 + self.timeFail = 0.0 + self.write('numFail', self.numFail) + self.write('timeFail', self.timeFail) + + def isDelayed(self): + self.now = time.time() + + if self.attemptsRemaining() > 0: + return False + + if self.delayRemaining() > 0.0: + return True + + self.success() + return False + + def delayRemaining(self): + elapsed = self.now - self.timeFail + return (self.delay - elapsed) if elapsed < self.delay else 0.0 + + def attemptsRemaining(self): + return (self.maxAttempts - self.numFail) + class ProgressDialog: def __init__(self, label1=32181, label2=32182, label3=32183, minSampleInterval=1.0, maxUpdatesPerSecond=5): self.label1 = _(label1) @@ -515,49 +615,46 @@ def openWizard(): def openConfigurationWindow(): - global winOeMain, __cwd__, __oe__, dictModules + global winOeMain, __cwd__, __oe__, dictModules, PIN try: - PINmatch = False - PINnext = 1000 - PINenable = read_setting('system', 'pinlock_enable') - if PINenable == "0" or PINenable == None: - PINmatch = True - if PINenable == "1": - PINfail = read_setting('system', 'pinlock_timeFail') - if PINfail: - nowTime = time.time() - PINnext = (nowTime - float(PINfail)) - if PINnext >= 300: - PINtry = 4 - while PINmatch == False: - if PINtry > 0: - PINlock = xbmcDialog.numeric(0, _(32233), bHiddenInput=True) - if PINlock == '': - break - else: - storedPIN = read_setting('system', 'pinlock_pin') - PINmatch = verify_password(storedPIN, PINlock) - if PINmatch == False: - PINtry -= 1 - if PINtry > 0: - xbmcDialog.ok(_(32234), str(PINtry) + _(32235)) - else: - timeFail = time.time() - write_setting('system', 'pinlock_timeFail', str(timeFail)) - xbmcDialog.ok(_(32234), _(32236)) - break - else: - timeLeft = "{0:.2f}".format((300 - PINnext)/60) - xbmcDialog.ok(_(32237), timeLeft + _(32238)) - if PINmatch == True: + match = True + + if PIN.isEnabled(): + match = False + + if PIN.isDelayed(): + timeleft = PIN.delayRemaining() + timeleft_mins, timeleft_secs = divmod(timeleft, 60) + timeleft_hours, timeleft_mins = divmod(timeleft_mins, 60) + xbmcDialog.ok(_(32237), _(32238) % (timeleft_mins, timeleft_secs)) + return + + while PIN.attemptsRemaining() > 0: + lockcode = xbmcDialog.numeric(0, _(32233), bHiddenInput=True) + if lockcode == '': + break + + if PIN.verify(lockcode): + match = True + PIN.success() + break + + PIN.fail() + + if PIN.attemptsRemaining() > 0: + xbmcDialog.ok(_(32234), '%d %s' % (PIN.attemptsRemaining(), _(32235))) + + if not match and PIN.attemptsRemaining() <= 0: + xbmcDialog.ok(_(32234), _(32236)) + return + + if match == True: winOeMain = oeWindows.mainWindow('service-LibreELEC-Settings-mainWindow.xml', __cwd__, 'Default', oeMain=__oe__) winOeMain.doModal() for strModule in dictModules: dictModules[strModule].exit() winOeMain = None del winOeMain - else: - pass except Exception as e: dbg_log('oe::openConfigurationWindow', 'ERROR: (' + repr(e) + ')') @@ -858,24 +955,6 @@ def get_os_release(): builder_version ) -def hash_password(password): - salt = hashlib.sha256(os.urandom(60)).hexdigest().encode('ascii') - pwdhash = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), - salt, 100000) - pwdhash = binascii.hexlify(pwdhash) - return (salt + pwdhash).decode('ascii') - -def verify_password(stored_password, provided_password): - salt = stored_password[:64] - stored_password = stored_password[64:] - pwdhash = hashlib.pbkdf2_hmac('sha512', - provided_password.encode('utf-8'), - salt.encode('ascii'), - 100000) - pwdhash = binascii.hexlify(pwdhash).decode('ascii') - return pwdhash == stored_password - - minidom.Element.writexml = fixed_writexml ############################################################################################ @@ -930,3 +1009,5 @@ def verify_password(stored_password, provided_password): os.makedirs('%s/services' % CONFIG_CACHE) except: pass + +PIN = PINStorage() diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 28a3a7e0..3bfbb8da 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -293,10 +293,7 @@ def load_values(self): self.struct['ident']['settings']['hostname']['value'] = self.oe.DISTRIBUTION # PIN Lock - value = self.oe.read_setting('system', 'pinlock_enable') - if not value is None: - self.struct['pinlock']['settings']['pinlock_enable']['value'] = value - + self.struct['pinlock']['settings']['pinlock_enable']['value'] = '1' if self.oe.PIN.isEnabled() else '0' except Exception as e: self.oe.dbg_log('system::load_values', 'ERROR: (' + repr(e) + ')') @@ -718,36 +715,38 @@ def init_pinlock(self, listItem=None): self.oe.dbg_log('system::init_pinlock', 'enter_function', 0) if not listItem == None: self.set_value(listItem) - if (self.oe.read_setting('system', 'pinlock_enable') == "1") and (self.oe.read_setting('system', 'pinlock_pin') == None): + + if self.struct['pinlock']['settings']['pinlock_enable']['value'] == '1': + self.oe.PIN.enable() + else: + self.oe.PIN.disable() + + if self.oe.PIN.isEnabled() and self.oe.PIN.isSet() == False: self.set_pinlock() - if (self.oe.read_setting('system', 'pinlock_enable') == "0"): - self.oe.write_setting('system', 'pinlock_pin', '') + self.oe.dbg_log('system::init_pinlock', 'exit_function', 0) except Exception as e: - self.oe.dbg_log('ssystem::init_pinlock', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('system::init_pinlock', 'ERROR: (%s)' % repr(e), 4) def set_pinlock(self, listItem=None): try: self.oe.dbg_log('system::set_pinlock', 'enter_function', 0) - oldpin = self.oe.read_setting('system', 'pinlock_pin') newpin = xbmcDialog.input(self.oe._(32226), type=xbmcgui.INPUT_NUMERIC) if len(newpin) == 4 : newpinConfirm = xbmcDialog.input(self.oe._(32227), type=xbmcgui.INPUT_NUMERIC) if newpin != newpinConfirm: xbmcDialog.ok(self.oe._(32228), self.oe._(32229)) else: - encodePin = self.oe.hash_password(newpin) - self.oe.write_setting('system', 'pinlock_pin', encodePin) + self.oe.PIN.set(newpin) xbmcDialog.ok(self.oe._(32230), '%s\n\n%s' % (self.oe._(32231), newpin)) - oldpin = newpin else: xbmcDialog.ok(self.oe._(32232), self.oe._(32229)) - if oldpin == None: + if self.oe.PIN.isSet() == False: self.struct['pinlock']['settings']['pinlock_enable']['value'] = '0' - self.oe.write_setting('system', 'pinlock_enable', '0') + self.oe.PIN.disable() self.oe.dbg_log('system::set_pinlock', 'exit_function', 0) except Exception as e: - self.oe.dbg_log('ssystem::set_pinlock', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('system::set_pinlock', 'ERROR: (%s)' % repr(e), 4) def do_wizard(self): try: From d24adfdf1c191ef92ab37914888d930b2a525c84 Mon Sep 17 00:00:00 2001 From: chewitt Date: Thu, 30 Apr 2020 04:21:17 +0000 Subject: [PATCH 34/51] use device-tree flags for NXP/Qualcomm/Samsung devices --- src/resources/lib/modules/updates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index c7765adb..9f5a4611 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -273,7 +273,7 @@ def get_hardware_flags(self): return self.get_hardware_flags_x86_64() elif self.oe.PROJECT == "RPi": return self.get_hardware_flags_rpi() - elif self.oe.PROJECT in ['Allwinner', 'Amlogic', 'Rockchip']: + elif self.oe.PROJECT in ['Allwinner', 'Amlogic', 'NXP', 'Qualcomm', 'Rockchip', 'Samsung' ]: return self.get_hardware_flags_dtname() else: self.oe.dbg_log('updates::get_hardware_flags', 'Project is %s, no hardware flag available' % self.oe.PROJECT, 0) From bfa0b2c912e3d6b6c3107003a154673f6d52a9d8 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 1 May 2020 01:03:42 +0100 Subject: [PATCH 35/51] Remove xbmc.abortRequested flag --- src/oe.py | 10 ++++++---- src/resources/lib/modules/bluetooth.py | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/oe.py b/src/oe.py index 6ecbd266..8b9fa9df 100644 --- a/src/oe.py +++ b/src/oe.py @@ -34,6 +34,8 @@ __media__ = '%s/resources/skins/Default/media' % __cwd__ xbmcDialog = xbmcgui.Dialog() +xbmcm = xbmc.Monitor() + is_service = False conf_lock = False __busy__ = 0 @@ -483,7 +485,7 @@ def download_file(source, destination, silent=False): last_percent = 0 - while not (xbmc.abortRequested or progress.iscanceled()): + while not (progress.iscanceled() or xbmcm.abortRequested()): part = response.read(32768) progress.sample(part) @@ -504,7 +506,7 @@ def download_file(source, destination, silent=False): local_file.close() response.close() - if progress.iscanceled() or xbmc.abortRequested: + if progress.iscanceled() or xbmcm.abortRequested(): os.remove(destination) return None @@ -530,7 +532,7 @@ def copy_file(source, destination, silent=False): last_percent = 0 - while not (xbmc.abortRequested or progress.iscanceled()): + while not (progress.iscanceled() or xbmcm.abortRequested()): part = source_file.read(32768) progress.sample(part) @@ -551,7 +553,7 @@ def copy_file(source, destination, silent=False): source_file.close() destination_file.close() - if progress.iscanceled() or xbmc.abortRequested: + if progress.iscanceled() or xbmcm.abortRequested(): os.remove(destination) return None diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 1de063a3..6431f98f 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -1127,7 +1127,7 @@ def stop(self): def run(self): try: self.oe.dbg_log('bluetooth::discoveryThread::run', 'enter_function', 0) - while not self.stopped and not xbmc.abortRequested: + while not self.stopped and not self.oe.xbmcm.abortRequested(): current_time = time.time() if current_time > self.last_run + 5: if self.main_menu.getSelectedItem().getProperty('modul') != 'bluetooth' or not hasattr(self.oe.dictModules['bluetooth'], 'discovery_thread'): @@ -1164,7 +1164,7 @@ def run(self): try: self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'enter_function', 0) self.endtime = self.start_time + self.runtime - while not self.stopped and not xbmc.abortRequested: + while not self.stopped and not self.oe.xbmcm.abortRequested(): current_time = time.time() percent = round(100 / self.runtime * (self.endtime - current_time), 0) self.parent.pinkey_window.getControl(1704).setPercent(percent) From 37bddff5b87622ae8eb520958287475693240fba Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Mon, 11 May 2020 23:35:25 +0100 Subject: [PATCH 36/51] Replace most time.sleep() with xbmcm.waitForAbort() --- src/oe.py | 10 +++++----- src/resources/lib/modules/bluetooth.py | 4 ++-- src/resources/lib/modules/connman.py | 4 ++-- src/resources/lib/modules/system.py | 6 +++--- src/resources/lib/modules/updates.py | 2 +- src/resources/lib/oeWindows.py | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/oe.py b/src/oe.py index 8b9fa9df..9b344625 100644 --- a/src/oe.py +++ b/src/oe.py @@ -852,15 +852,15 @@ def reboot_counter(seconds=10, title=' '): reboot_dlg.create('LibreELEC %s' % title, ' ') reboot_dlg.update(0) wait_time = seconds - while seconds >= 0 and not reboot_dlg.iscanceled(): + while seconds >= 0 and not (reboot_dlg.iscanceled() or xbmcm.abortRequested()): progress = round(1.0 * seconds / wait_time * 100) reboot_dlg.update(int(progress), _(32329) % seconds) - time.sleep(1) + xbmcm.waitForAbort(1) seconds = seconds - 1 - if not reboot_dlg.iscanceled(): - return 1 - else: + if reboot_dlg.iscanceled() or xbmcm.abortRequested(): return 0 + else: + return 1 def exit(): diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 6431f98f..38f31836 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -1135,7 +1135,7 @@ def run(self): self.last_run = current_time if self.main_menu.getSelectedItem().getProperty('modul') != 'bluetooth': self.stop() - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) self.oe.dbg_log('bluetooth::discoveryThread::run', 'exit_function', 0) except Exception as e: self.oe.dbg_log('bluetooth::discoveryThread::run', 'ERROR: (' + repr(e) + ')', 4) @@ -1172,7 +1172,7 @@ def run(self): self.stopped = True self.parent.close_pinkey_window() else: - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'exit_function', 0) except Exception as e: self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'ERROR: (' + repr(e) + ')', 4) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 52bca505..188ae646 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -1164,7 +1164,7 @@ def set_technologie(self, **kwargs): self.Technology.SetProperty('Powered', dbus.Boolean(True, variant_level=1)) if settings['Tethering']['value'] == '1' and dbus.String(settings['TetheringIdentifier']['value']) != '' \ and dbus.String(settings['TetheringPassphrase']['value']) != '': - time.sleep(5) + self.oe.xbmcm.waitForAbort(5) self.Technology.SetProperty('TetheringIdentifier', dbus.String(settings['TetheringIdentifier']['value'], variant_level=1)) self.Technology.SetProperty('TetheringPassphrase', dbus.String(settings['TetheringPassphrase']['value'], @@ -1277,7 +1277,7 @@ def dbus_error_handler(self, error): if self.connect_attempt == 1: self.log_error = 0 self.notify_error = 0 - time.sleep(5) + self.oe.xbmcm.waitForAbort(5) self.connect_network() else: self.log_error = 1 diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 3bfbb8da..1d16352b 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -481,7 +481,7 @@ def reset_xbmc(self, listItem=None): reset_file.write('reset') reset_file.close() self.oe.winOeMain.close() - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') self.oe.set_busy(0) self.oe.dbg_log('system::reset_xbmc', 'exit_function', 0) @@ -498,7 +498,7 @@ def reset_oe(self, listItem=None): reset_file.write('reset') reset_file.close() self.oe.winOeMain.close() - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') self.oe.set_busy(0) self.oe.dbg_log('system::reset_oe', 'exit_function', 0) @@ -619,7 +619,7 @@ def do_restore(self, listItem=None): if answer == 1: if self.oe.reboot_counter(10, self.oe._(32371)) == 1: self.oe.winOeMain.close() - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') else: self.oe.dbg_log('system::do_restore', 'User Abort!', 0) diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index c7765adb..1f860959 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -588,7 +588,7 @@ def do_autoupdate(self, listItem=None, silent=False): subprocess.call('sync', shell=True, stdin=None, stdout=None, stderr=None) if silent == False: self.oe.winOeMain.close() - time.sleep(1) + self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') else: delattr(self, 'update_in_progress') diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 38c9f52f..542be8b4 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -655,7 +655,7 @@ def onClick(self, controlID): if controlID == 1500: self.getControl(1390).setLabel('1') - time.sleep(0.5) + self.oe.xbmcm.waitForAbort(0.5) self.is_last_wizard = True self.getControl(1391).setLabel('') self.getControl(self.buttons[3]['id']).setVisible(False) @@ -693,7 +693,7 @@ def onClick(self, controlID): xbmc.executebuiltin('UpdateAddonRepos') langAddon = "InstallAddon(" + lang_new + ")" xbmc.executebuiltin(langAddon) - time.sleep(.5) + self.oe.xbmcm.waitForAbort(0.5) xbmc.executebuiltin('SendClick(10100,11)') self.oe.write_setting('libreelec', 'wizard_completed', 'True') self.visible = False From 4f7f450094b4ef858f58d2eb484e7bac82e0b211 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Tue, 12 May 2020 00:22:53 +0100 Subject: [PATCH 37/51] Bluetooth shutdown is a racy mess bluetooth::stop_service() and bluetooth::exit() are being executed concurrently on kodi shutdown if the user is in the Bluetooth window during shutdown. Both functions are checking for, and then deleting, self.discovery_thread. Since only one of the function calls will successfully delete self.discovery_thread, the other function call will throw an AttributeError exception. The problem is that the check-then-delete pattern is not thread safe - the object can be deleted in the first thread after it has been checked (but before it is deleted) in the second thread. Ignoring the exception is a hack until someone cares to fix it properly. --- src/resources/lib/modules/bluetooth.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 38f31836..9218497b 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -60,8 +60,11 @@ def stop_service(self): try: self.oe.dbg_log('bluetooth::stop_service', 'enter_function', 0) if hasattr(self, 'discovery_thread'): - self.discovery_thread.stop() - del self.discovery_thread + try: + self.discovery_thread.stop() + del self.discovery_thread + except AttributeError: + pass if hasattr(self, 'dbusBluezAdapter'): self.dbusBluezAdapter = None self.oe.dbg_log('bluetooth::stop_service', 'exit_function', 0) @@ -72,8 +75,11 @@ def exit(self): try: self.oe.dbg_log('bluetooth::exit', 'enter_function', 0) if hasattr(self, 'discovery_thread'): - self.discovery_thread.stop() - del self.discovery_thread + try: + self.discovery_thread.stop() + del self.discovery_thread + except AttributeError: + pass self.clear_list() self.visible = False self.oe.dbg_log('bluetooth::exit', 'exit_function', 0) From 0276a7650ada51978ae37076832ad8753776344f Mon Sep 17 00:00:00 2001 From: mglae Date: Tue, 25 Aug 2020 23:38:54 +0200 Subject: [PATCH 38/51] Fix 'parent' condition check in dbus_config() --- src/resources/lib/modules/connman.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 52bca505..7c2cd146 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -375,8 +375,9 @@ def dbus_config(self, category): postfix = '.Configuration' for entry in sorted(self.struct[category]['settings'], key=lambda x: self.struct[category]['settings'][x]['order']): setting = self.struct[category]['settings'][entry] - if (setting['value'] != '' or hasattr(setting, 'changed')) and not 'parent' in setting or 'parent' in setting \ - and self.struct[category]['settings'][setting['parent']['entry']]['value'] in setting['parent']['value']: + if (setting['value'] != '' or hasattr(setting, 'changed')) \ + and (not 'parent' in setting or ('parent' in setting and self.struct[category]['settings'][setting['parent']['entry']]['value'] \ + in setting['parent']['value'])): if setting['dbus'] == 'Array': value = dbus.Array(dbus.String(setting['value'], variant_level=1).split(','), signature=dbus.Signature('s'), variant_level=1) From 50e82cb4196e9a0e2cd870ae6bf31ee76cbd3bad Mon Sep 17 00:00:00 2001 From: mglae Date: Tue, 25 Aug 2020 23:39:24 +0200 Subject: [PATCH 39/51] Fix setting manual IPv4 address. The paramesters must not be empty. --- src/resources/lib/modules/connman.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 7c2cd146..5d3883cd 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -72,6 +72,7 @@ def __init__(self, servicePath, oeMain): 'value': ['manual'], }, 'action': 'set_value', + 'notempty': True, }, 'Netmask': { 'order': 3, @@ -84,6 +85,7 @@ def __init__(self, servicePath, oeMain): 'value': ['manual'], }, 'action': 'set_value', + 'notempty': True, }, 'Gateway': { 'order': 4, @@ -96,6 +98,7 @@ def __init__(self, servicePath, oeMain): 'value': ['manual'], }, 'action': 'set_value', + 'notempty': True, }, }, }, @@ -375,7 +378,7 @@ def dbus_config(self, category): postfix = '.Configuration' for entry in sorted(self.struct[category]['settings'], key=lambda x: self.struct[category]['settings'][x]['order']): setting = self.struct[category]['settings'][entry] - if (setting['value'] != '' or hasattr(setting, 'changed')) \ + if (setting['value'] != '' or (hasattr(setting, 'changed') and not hasattr(setting, 'notempty'))) \ and (not 'parent' in setting or ('parent' in setting and self.struct[category]['settings'][setting['parent']['entry']]['value'] \ in setting['parent']['value'])): if setting['dbus'] == 'Array': From 534aaa06da8683d8d20fb30d2185b5607a1943e1 Mon Sep 17 00:00:00 2001 From: mglae Date: Tue, 25 Aug 2020 23:40:03 +0200 Subject: [PATCH 40/51] IPV4 dialog. Preset empty ip address with 0.0.0.0 --- src/resources/lib/oeWindows.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 38c9f52f..1b1a1c2c 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -298,6 +298,8 @@ def onClick(self, controlID): if returnValue != '' and returnValue != '/': selectedItem.setProperty('value', str(returnValue)) elif strTyp == 'ip': + if strValue == '': + strValue = '0.0.0.0' xbmcDialog = xbmcgui.Dialog() returnValue = xbmcDialog.numeric(3, 'LibreELEC.tv', strValue) if returnValue != '': From d9caae78e27d669b02ff1650c8a3c517cb666c73 Mon Sep 17 00:00:00 2001 From: mglae Date: Tue, 25 Aug 2020 23:46:30 +0200 Subject: [PATCH 41/51] Fix title (msg ID) of wizard language select dialog --- src/resources/lib/oeWindows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 38c9f52f..f5dd6705 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -507,7 +507,7 @@ def wizard_set_language(self): break else: pass - selLanguage = xbmcDialog.select(self.oe._(32193), languagesList, preselect=langIndex) + selLanguage = xbmcDialog.select(self.oe._(32310), languagesList, preselect=langIndex) if selLanguage >= 0: langKey = languagesList[selLanguage] lang_new = langCodes[langKey] From e7c7e1476e3f583289f755d3143a7c2a0324b1fa Mon Sep 17 00:00:00 2001 From: mglae Date: Tue, 25 Aug 2020 23:47:12 +0200 Subject: [PATCH 42/51] Fix function _(), there is no str.decode() in Python 3 --- src/oe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/oe.py b/src/oe.py index 6ecbd266..3457dfd8 100644 --- a/src/oe.py +++ b/src/oe.py @@ -282,8 +282,8 @@ def _(code): curLang = read_setting("system", "language") if curLang is not None: lang_file = os.path.join(__cwd__, 'resources', 'language', str(curLang), 'strings.po') - with open(lang_file) as fp: - contents = fp.read().decode('utf-8').split('\n\n') + with open(lang_file, encoding='utf-8') as fp: + contents = fp.read().split('\n\n') for strings in contents: if str(code) in strings: subString = strings.split('msgstr ')[1] From be068e9b4d05507c259acce69061aae2778a847f Mon Sep 17 00:00:00 2001 From: Jay M Date: Tue, 25 Aug 2020 17:40:38 -0700 Subject: [PATCH 43/51] Fix missing texture path --- skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml | 2 +- skins/Default/1080i/service-LibreELEC-Settings-wizard.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml index 3a063550..d9290007 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml @@ -549,7 +549,7 @@ 1256 100 - lists/separator.png + separator.png 1256 diff --git a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml index 51ba521d..70a34730 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml @@ -322,7 +322,7 @@ 2 974 48 - lists/separator.png + separator.png 0 From b58df0e0c3b149d5613c4ac06f213ea627a440ed Mon Sep 17 00:00:00 2001 From: mglae Date: Sun, 6 Sep 2020 18:22:18 +0200 Subject: [PATCH 44/51] Remove remaining dependencies to Estuary skin - load all texture files from addon directory only. - add missing arrowdown.png (borrowd from Estuary) - replace Estuary color "button_focus" with "FF12B2E7" --- .../service-LibreELEC-Settings-mainWindow.xml | 26 +++++++++--------- .../service-LibreELEC-Settings-wizard.xml | 2 +- textures/LibreELEC/arrowdown.png | Bin 0 -> 929 bytes 3 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 textures/LibreELEC/arrowdown.png diff --git a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml index d9290007..1fced9c1 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml @@ -90,7 +90,7 @@ 770 400 3 - dialogs/separator-grey.png + separator-grey.png LOGO @@ -1142,8 +1142,8 @@ 940 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose @@ -1156,8 +1156,8 @@ 105 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose @@ -1172,8 +1172,8 @@ 940 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose @@ -1186,8 +1186,8 @@ 105 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose @@ -1202,8 +1202,8 @@ 940 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose @@ -1216,8 +1216,8 @@ 105 48 24 - overlays/arrowdown.png - overlays/arrowdown.png + arrowdown.png + arrowdown.png VisibleChange WindowOpen WindowClose diff --git a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml index 70a34730..012ff757 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-wizard.xml @@ -66,7 +66,7 @@ 575 1050 3 - separator-grey.png + separator-grey.png String.IsEmpty(Control.GetLabel(1390)) diff --git a/textures/LibreELEC/arrowdown.png b/textures/LibreELEC/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..2be1c60aeee3666ce54dbf259f29c173e70247d1 GIT binary patch literal 929 zcmV;S177@zP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_000McNliru-w6c(90>j1Lv{cF0|rS%K~!kowV2sTRdE zI=f@(T?nI1<iizt4C_Bo@z1YZt{=Ionz(N; zA%cer@)AvJx4uJHR0*wYH=-X&hf2S3{q_H2msJUEgn8DF;*m)6 zqv=%87ODS#!QW_$D&YYUuJvPhqS8ONal`*`vnt^sk*@S(d8VK&Q0H$Y(D(&aLWhfl zIJ#8&wf=Vk1J0`w9uuX~kEdI)K2J@crC^XImK2aqq8;le@Is|u9e67^s8N;hlo&_) ziS#H||8OSQS}0h9D&ZNiA@!4ZrP8koz8CuSs%KFFd`?`@wPbn~YjaeF@^kW*pJhP- z?Iu3pQVM-4{ff|b&OUT?s)Uy$_+8n-8^y{jP(J5LN+6Q^}lh@Jk3Uckj3x@{jVIb!Lkz|WHRKV|AqZ_NVWom3D2G3Xj+ObFHK00000NkvXXu0mjf D^HH80 literal 0 HcmV?d00001 From f0b71706159ece2fbd162a178627e25f7c58f5b1 Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Sun, 26 Jul 2020 23:50:19 +0000 Subject: [PATCH 45/51] system: reset file contents are unimportant so don't write them Signed-off-by: Ian Leonard --- src/resources/lib/modules/system.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 1d16352b..7676583f 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -477,9 +477,7 @@ def reset_xbmc(self, listItem=None): self.oe.dbg_log('system::reset_xbmc', 'enter_function', 0) if self.ask_sure_reset('Soft') == 1: self.oe.set_busy(1) - reset_file = open(self.XBMC_RESET_FILE, 'w') - reset_file.write('reset') - reset_file.close() + open(self.XBMC_RESET_FILE, 'a').close() self.oe.winOeMain.close() self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') @@ -494,9 +492,7 @@ def reset_oe(self, listItem=None): self.oe.dbg_log('system::reset_oe', 'enter_function', 0) if self.ask_sure_reset('Hard') == 1: self.oe.set_busy(1) - reset_file = open(self.LIBREELEC_RESET_FILE, 'w') - reset_file.write('reset') - reset_file.close() + open(self.LIBREELEC_RESET_FILE, 'a').close() self.oe.winOeMain.close() self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') From 37545c969e4e9b29f0df913f47edf2559c49ef8c Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Mon, 7 Sep 2020 18:44:22 +0000 Subject: [PATCH 46/51] translatePath moved from xbmc to xbmcvfs Signed-off-by: Ian Leonard --- src/oe.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/oe.py b/src/oe.py index f77d015e..f807d2dd 100644 --- a/src/oe.py +++ b/src/oe.py @@ -8,6 +8,7 @@ import xbmc import xbmcaddon import xbmcgui +import xbmcvfs import os import re import locale @@ -72,8 +73,8 @@ ########################## initialize module ################################## ## append resource subfolders to path -sys.path.append(xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib'))) -sys.path.append(xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib', 'modules'))) +sys.path.append(xbmcvfs.translatePath(os.path.join(__cwd__, 'resources', 'lib'))) +sys.path.append(xbmcvfs.translatePath(os.path.join(__cwd__, 'resources', 'lib', 'modules'))) ## set default encoding From e9ab07ed6cc35fa1dc8ee1f52ec05f36a101e075 Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Sun, 13 Sep 2020 19:52:33 +0000 Subject: [PATCH 47/51] simplify logic of backup dir creation Signed-off-by: Ian Leonard --- src/resources/lib/modules/system.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 7676583f..7f3d57b7 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -589,11 +589,9 @@ def do_restore(self, listItem=None): restore_file_name = restore_file_path.split('/')[-1] - if not os.path.exists(self.RESTORE_DIR): - os.makedirs(self.RESTORE_DIR) - else: + if os.path.exists(self.RESTORE_DIR): self.oe.execute('rm -rf %s' % self.RESTORE_DIR) - os.makedirs(self.RESTORE_DIR) + os.makedirs(self.RESTORE_DIR) folder_stat = os.statvfs(self.RESTORE_DIR) file_size = os.path.getsize(restore_file_path) free_space = folder_stat.f_frsize * folder_stat.f_bavail From 1a9ca8000fe7b81b14897ca1adcff8cb57528758 Mon Sep 17 00:00:00 2001 From: mglae Date: Sun, 30 Aug 2020 00:51:27 +0200 Subject: [PATCH 48/51] use symbolic log levels to be prepared for kodi PR18346 --- src/oe.py | 26 +- src/resources/lib/modules/about.py | 26 +- src/resources/lib/modules/bluetooth.py | 466 ++++++++++++------------- src/resources/lib/modules/connman.py | 312 ++++++++--------- src/resources/lib/modules/services.py | 100 +++--- src/resources/lib/modules/system.py | 122 +++---- src/resources/lib/modules/updates.py | 144 ++++---- src/resources/lib/modules/xdbus.py | 40 +-- src/resources/lib/oeWindows.py | 20 +- src/service.py | 26 +- 10 files changed, 642 insertions(+), 640 deletions(-) diff --git a/src/oe.py b/src/oe.py index f77d015e..427661c5 100644 --- a/src/oe.py +++ b/src/oe.py @@ -26,6 +26,8 @@ from xml.dom import minidom import imp +from xbmc import LOGDEBUG, LOGINFO, LOGWARNING, LOGERROR + __author__ = 'LibreELEC' __scriptid__ = 'service.libreelec.settings' __addon__ = xbmcaddon.Addon(id=__scriptid__) @@ -310,7 +312,7 @@ def dbg_log(source, text, level=4): def notify(title, message, icon='icon'): try: - dbg_log('oe::notify', 'enter_function', 0) + dbg_log('oe::notify', 'enter_function', LOGDEBUG) msg = 'Notification("%s", "%s", 5000, "%s/%s.png")' % ( title, message[0:64], @@ -318,15 +320,15 @@ def notify(title, message, icon='icon'): icon, ) xbmc.executebuiltin(msg) - dbg_log('oe::notify', 'exit_function', 0) + dbg_log('oe::notify', 'exit_function', LOGDEBUG) except Exception as e: dbg_log('oe::notify', 'ERROR: (' + repr(e) + ')') def execute(command_line, get_result=0): try: - dbg_log('oe::execute', 'enter_function', 0) - dbg_log('oe::execute::command', command_line, 0) + dbg_log('oe::execute', 'enter_function', LOGDEBUG) + dbg_log('oe::execute::command', command_line, LOGDEBUG) if get_result == 0: process = subprocess.Popen(command_line, shell=True, close_fds=True) process.wait() @@ -337,7 +339,7 @@ def execute(command_line, get_result=0): for line in process.stdout.readlines(): result = result + line.decode('utf-8') return result - dbg_log('oe::execute', 'exit_function', 0) + dbg_log('oe::execute', 'exit_function', LOGDEBUG) except Exception as e: dbg_log('oe::execute', 'ERROR: (' + repr(e) + ')') @@ -404,10 +406,10 @@ def get_service_state(service): def set_service(service, options, state): try: - dbg_log('oe::set_service', 'enter_function', 0) - dbg_log('oe::set_service::service', repr(service), 0) - dbg_log('oe::set_service::options', repr(options), 0) - dbg_log('oe::set_service::state', repr(state), 0) + dbg_log('oe::set_service', 'enter_function', LOGDEBUG) + dbg_log('oe::set_service::service', repr(service), LOGDEBUG) + dbg_log('oe::set_service::options', repr(options), LOGDEBUG) + dbg_log('oe::set_service::state', repr(state), LOGDEBUG) config = {} changed = False @@ -440,7 +442,7 @@ def set_service(service, options, state): if service in defaults._services: for svc in defaults._services[service]: execute('systemctl restart %s' % svc) - dbg_log('oe::set_service', 'exit_function', 0) + dbg_log('oe::set_service', 'exit_function', LOGDEBUG) except Exception as e: dbg_log('oe::set_service', 'ERROR: (' + repr(e) + ')') @@ -576,9 +578,9 @@ def set_busy(state): __busy__ = __busy__ + 1 else: __busy__ = __busy__ - 1 - dbg_log('oe::set_busy', '__busy__ = ' + str(__busy__), 0) + dbg_log('oe::set_busy', '__busy__ = ' + str(__busy__), LOGDEBUG) except Exception as e: - dbg_log('oe::set_busy', 'ERROR: (' + repr(e) + ')', 4) + dbg_log('oe::set_busy', 'ERROR: (' + repr(e) + ')', LOGERROR) def start_service(): diff --git a/src/resources/lib/modules/about.py b/src/resources/lib/modules/about.py index c4389c38..15ef6f02 100644 --- a/src/resources/lib/modules/about.py +++ b/src/resources/lib/modules/about.py @@ -15,55 +15,55 @@ class about: def __init__(self, oeMain): try: - oeMain.dbg_log('about::__init__', 'enter_function', 0) + oeMain.dbg_log('about::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.controls = {} - self.oe.dbg_log('about::__init__', 'exit_function', 0) + self.oe.dbg_log('about::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('about::__init__', 'ERROR: (' + repr(e) + ')') def menu_loader(self, menuItem): try: - self.oe.dbg_log('about::menu_loader', 'enter_function', 0) + self.oe.dbg_log('about::menu_loader', 'enter_function', self.oe.LOGDEBUG) if len(self.controls) == 0: self.init_controls() - self.oe.dbg_log('about::menu_loader', 'exit_function', 0) + self.oe.dbg_log('about::menu_loader', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('about::menu_loader', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('about::menu_loader', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def exit_addon(self): try: - self.oe.dbg_log('about::exit_addon', 'enter_function', 0) + self.oe.dbg_log('about::exit_addon', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.close() - self.oe.dbg_log('about::exit_addon', 'exit_function', 0) + self.oe.dbg_log('about::exit_addon', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('about::exit_addon', 'ERROR: (' + repr(e) + ')') def init_controls(self): try: - self.oe.dbg_log('about::init_controls', 'enter_function', 0) - self.oe.dbg_log('about::init_controls', 'exit_function', 0) + self.oe.dbg_log('about::init_controls', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('about::init_controls', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('about::init_controls', 'ERROR: (' + repr(e) + ')') def exit(self): try: - self.oe.dbg_log('about::exit', 'enter_function', 0) + self.oe.dbg_log('about::exit', 'enter_function', self.oe.LOGDEBUG) for control in self.controls: try: self.oe.winOeMain.removeControl(self.controls[control]) except: pass self.controls = {} - self.oe.dbg_log('about::exit', 'exit_function', 0) + self.oe.dbg_log('about::exit', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('about::exit', 'ERROR: (' + repr(e) + ')') def do_wizard(self): try: - self.oe.dbg_log('about::do_wizard', 'enter_function', 0) + self.oe.dbg_log('about::do_wizard', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.set_wizard_title(self.oe._(32317)) self.oe.winOeMain.set_wizard_text(self.oe._(32318)) - self.oe.dbg_log('about::do_wizard', 'exit_function', 0) + self.oe.dbg_log('about::do_wizard', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('about::do_wizard', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/bluetooth.py b/src/resources/lib/modules/bluetooth.py index 9218497b..9a909c56 100644 --- a/src/resources/lib/modules/bluetooth.py +++ b/src/resources/lib/modules/bluetooth.py @@ -30,35 +30,35 @@ class bluetooth: def __init__(self, oeMain): try: - oeMain.dbg_log('bluetooth::__init__', 'enter_function', 0) + oeMain.dbg_log('bluetooth::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.visible = False self.listItems = {} self.dbusBluezAdapter = None - self.oe.dbg_log('bluetooth::__init__', 'exit_function', 0) + self.oe.dbg_log('bluetooth::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def do_init(self): try: - self.oe.dbg_log('bluetooth::do_init', 'enter_function', 0) + self.oe.dbg_log('bluetooth::do_init', 'enter_function', self.oe.LOGDEBUG) self.visible = True - self.oe.dbg_log('bluetooth::do_init', 'exit_function', 0) + self.oe.dbg_log('bluetooth::do_init', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::do_init', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::do_init', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def start_service(self): try: - self.oe.dbg_log('bluetooth::start_service', 'enter_function', 0) + self.oe.dbg_log('bluetooth::start_service', 'enter_function', self.oe.LOGDEBUG) if 'org.bluez' in self.oe.dbusSystemBus.list_names(): self.init_adapter() - self.oe.dbg_log('bluetooth::start_service', 'exit_function', 0) + self.oe.dbg_log('bluetooth::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::start_service', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::start_service', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop_service(self): try: - self.oe.dbg_log('bluetooth::stop_service', 'enter_function', 0) + self.oe.dbg_log('bluetooth::stop_service', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'discovery_thread'): try: self.discovery_thread.stop() @@ -67,13 +67,13 @@ def stop_service(self): pass if hasattr(self, 'dbusBluezAdapter'): self.dbusBluezAdapter = None - self.oe.dbg_log('bluetooth::stop_service', 'exit_function', 0) + self.oe.dbg_log('bluetooth::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::stop_service', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::stop_service', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def exit(self): try: - self.oe.dbg_log('bluetooth::exit', 'enter_function', 0) + self.oe.dbg_log('bluetooth::exit', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'discovery_thread'): try: self.discovery_thread.stop() @@ -82,10 +82,10 @@ def exit(self): pass self.clear_list() self.visible = False - self.oe.dbg_log('bluetooth::exit', 'exit_function', 0) + self.oe.dbg_log('bluetooth::exit', 'exit_function', self.oe.LOGDEBUG) pass except Exception as e: - self.oe.dbg_log('bluetooth::exit', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::exit', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) # ################################################################### # # Bluetooth Adapter @@ -93,7 +93,7 @@ def exit(self): def init_adapter(self): try: - self.oe.dbg_log('bluetooth::init_adapter', 'enter_function', 0) + self.oe.dbg_log('bluetooth::init_adapter', 'enter_function', self.oe.LOGDEBUG) dbusBluezManager = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager') dbusManagedObjects = dbusBluezManager.GetManagedObjects() for (path, ifaces) in dbusManagedObjects.items(): @@ -105,64 +105,64 @@ def init_adapter(self): dbusBluezManager = None if self.dbusBluezAdapter != None: self.adapter_powered(self.dbusBluezAdapter, 1) - self.oe.dbg_log('bluetooth::init_adapter', 'exit_function', 0) + self.oe.dbg_log('bluetooth::init_adapter', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('bluetooth::init_adapter', 'ERROR: (' + repr(e) + ')') def adapter_powered(self, adapter, state=1): try: - self.oe.dbg_log('bluetooth::adapter_powered', 'enter_function', 0) - self.oe.dbg_log('bluetooth::adapter_powered::adapter', repr(adapter), 0) - self.oe.dbg_log('bluetooth::adapter_powered::state', repr(state), 0) + self.oe.dbg_log('bluetooth::adapter_powered', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::adapter_powered::adapter', repr(adapter), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::adapter_powered::state', repr(state), self.oe.LOGDEBUG) if int(self.adapter_info(self.dbusBluezAdapter, 'Powered')) != state: - self.oe.dbg_log('bluetooth::adapter_powered', 'set state (' + str(state) + ')', 0) + self.oe.dbg_log('bluetooth::adapter_powered', 'set state (' + str(state) + ')', self.oe.LOGDEBUG) adapter_interface = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', adapter.object_path), 'org.freedesktop.DBus.Properties') adapter_interface.Set('org.bluez.Adapter1', 'Alias', dbus.String(os.environ.get('HOSTNAME', 'libreelec'))) adapter_interface.Set('org.bluez.Adapter1', 'Powered', dbus.Boolean(state)) adapter_interface = None - self.oe.dbg_log('bluetooth::adapter_powered', 'exit_function', 0) + self.oe.dbg_log('bluetooth::adapter_powered', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::adapter_powered', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::adapter_powered', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def adapter_info(self, adapter, name): try: - self.oe.dbg_log('bluetooth::adapter_info', 'enter_function', 0) - self.oe.dbg_log('bluetooth::adapter_info::adapter', repr(adapter), 0) - self.oe.dbg_log('bluetooth::adapter_info::name', repr(name), 0) + self.oe.dbg_log('bluetooth::adapter_info', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::adapter_info::adapter', repr(adapter), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::adapter_info::name', repr(name), self.oe.LOGDEBUG) adapter_interface = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', adapter.object_path), 'org.freedesktop.DBus.Properties') res = adapter_interface.Get('org.bluez.Adapter1', name) adapter_interface = None - self.oe.dbg_log('bluetooth::adapter_info', 'exit_function', 0) + self.oe.dbg_log('bluetooth::adapter_info', 'exit_function', self.oe.LOGDEBUG) return res except Exception as e: - self.oe.dbg_log('bluetooth::adapter_info', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::adapter_info', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def start_discovery(self, listItem=None): try: - self.oe.dbg_log('bluetooth::start_discovery', 'enter_function', 0) + self.oe.dbg_log('bluetooth::start_discovery', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) self.dbusBluezAdapter.StartDiscovery() self.discovering = True self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::start_discovery', 'exit_function', 0) + self.oe.dbg_log('bluetooth::start_discovery', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::start_discovery', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::start_discovery', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop_discovery(self, listItem=None): try: - self.oe.dbg_log('bluetooth::stop_discovery', 'enter_function', 0) + self.oe.dbg_log('bluetooth::stop_discovery', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if hasattr(self, 'discovering'): del self.discovering self.dbusBluezAdapter.StopDiscovery() self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::stop_discovery', 'exit_function', 0) + self.oe.dbg_log('bluetooth::stop_discovery', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::stop_discovery', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::stop_discovery', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) # ################################################################### # # Bluetooth Device @@ -170,7 +170,7 @@ def stop_discovery(self, listItem=None): def get_devices(self): try: - self.oe.dbg_log('bluetooth::get_devices', 'enter_function', 0) + self.oe.dbg_log('bluetooth::get_devices', 'enter_function', self.oe.LOGDEBUG) devices = {} dbusBluezManager = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager') managedObjects = dbusBluezManager.GetManagedObjects() @@ -179,14 +179,14 @@ def get_devices(self): devices[path] = interfaces['org.bluez.Device1'] managedObjects = None dbusBluezManager = None - self.oe.dbg_log('bluetooth::get_devices', 'exit_function', 0) + self.oe.dbg_log('bluetooth::get_devices', 'exit_function', self.oe.LOGDEBUG) return devices except Exception as e: - self.oe.dbg_log('bluetooth::get_devices::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::get_devices::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def init_device(self, listItem=None): try: - self.oe.dbg_log('bluetooth::init_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::init_device', 'exit_function', self.oe.LOGDEBUG) if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: @@ -195,9 +195,9 @@ def init_device(self, listItem=None): self.pair_device(listItem.getProperty('entry')) else: self.connect_device(listItem.getProperty('entry')) - self.oe.dbg_log('bluetooth::init_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::init_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::init_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::init_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def trust_connect_device(self, listItem=None): try: @@ -206,20 +206,20 @@ def trust_connect_device(self, listItem=None): # # This function is used to Pair PS3 Remote without auth # ######################################################## - self.oe.dbg_log('bluetooth::trust_connect_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::trust_connect_device', 'exit_function', self.oe.LOGDEBUG) if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: return self.trust_device(listItem.getProperty('entry')) self.connect_device(listItem.getProperty('entry')) - self.oe.dbg_log('bluetooth::trust_connect_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::trust_connect_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::trust_connect_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::trust_connect_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def enable_device_standby(self, listItem=None): try: - self.oe.dbg_log('bluetooth::enable_device_standby', 'exit_function', 0) + self.oe.dbg_log('bluetooth::enable_device_standby', 'exit_function', self.oe.LOGDEBUG) devices = self.oe.read_setting('bluetooth', 'standby') if not devices == None: devices = devices.split(',') @@ -228,13 +228,13 @@ def enable_device_standby(self, listItem=None): if not listItem.getProperty('entry') in devices: devices.append(listItem.getProperty('entry')) self.oe.write_setting('bluetooth', 'standby', ','.join(devices)) - self.oe.dbg_log('bluetooth::enable_device_standby', 'exit_function', 0) + self.oe.dbg_log('bluetooth::enable_device_standby', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::enable_device_standby', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::enable_device_standby', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def disable_device_standby(self, listItem=None): try: - self.oe.dbg_log('bluetooth::disable_device_standby', 'exit_function', 0) + self.oe.dbg_log('bluetooth::disable_device_standby', 'exit_function', self.oe.LOGDEBUG) devices = self.oe.read_setting('bluetooth', 'standby') if not devices == None: devices = devices.split(',') @@ -243,26 +243,26 @@ def disable_device_standby(self, listItem=None): if listItem.getProperty('entry') in devices: devices.remove(listItem.getProperty('entry')) self.oe.write_setting('bluetooth', 'standby', ','.join(devices)) - self.oe.dbg_log('bluetooth::disable_device_standby', 'exit_function', 0) + self.oe.dbg_log('bluetooth::disable_device_standby', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::disable_device_standby', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::disable_device_standby', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def pair_device(self, path): try: - self.oe.dbg_log('bluetooth::pair_device', 'enter_function', 0) - self.oe.dbg_log('bluetooth::pair_device::path', repr(path), 0) + self.oe.dbg_log('bluetooth::pair_device', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::pair_device::path', repr(path), self.oe.LOGDEBUG) self.oe.set_busy(1) device = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Device1') device.Pair(reply_handler=self.pair_reply_handler, error_handler=self.dbus_error_handler) device = None - self.oe.dbg_log('bluetooth::pair_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::pair_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::pair_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::pair_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def pair_reply_handler(self): try: - self.oe.dbg_log('bluetooth::pair_reply_handler', 'enter_function', 0) + self.oe.dbg_log('bluetooth::pair_reply_handler', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(0) listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: @@ -270,114 +270,114 @@ def pair_reply_handler(self): self.trust_device(listItem.getProperty('entry')) self.connect_device(listItem.getProperty('entry')) self.menu_connections() - self.oe.dbg_log('bluetooth::pair_reply_handler', 'exit_function', 0) + self.oe.dbg_log('bluetooth::pair_reply_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::pair_reply_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::pair_reply_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def trust_device(self, path): try: - self.oe.dbg_log('bluetooth::trust_device', 'enter_function', 0) - self.oe.dbg_log('bluetooth::trust_device::path', repr(path), 0) + self.oe.dbg_log('bluetooth::trust_device', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::trust_device::path', repr(path), self.oe.LOGDEBUG) self.oe.set_busy(1) prop = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.freedesktop.DBus.Properties') prop.Set('org.bluez.Device1', 'Trusted', dbus.Boolean(1)) prop = None self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::trust_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::trust_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::trust_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::trust_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def is_device_connected(self, path): try: - self.oe.dbg_log('bluetooth::is_device_connected', 'enter_function', 0) + self.oe.dbg_log('bluetooth::is_device_connected', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) props = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.freedesktop.DBus.Properties') res = props.Get('org.bluez.Device1', 'Connected') props = None self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::is_device_connected', 'exit_function', 0) + self.oe.dbg_log('bluetooth::is_device_connected', 'exit_function', self.oe.LOGDEBUG) return res except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::is_device_connected', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::is_device_connected', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def connect_device(self, path): try: - self.oe.dbg_log('bluetooth::connect_device', 'enter_function', 0) - self.oe.dbg_log('bluetooth::connect_device::path', repr(path), 0) + self.oe.dbg_log('bluetooth::connect_device', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::connect_device::path', repr(path), self.oe.LOGDEBUG) self.oe.set_busy(1) device = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Device1') device.Connect(reply_handler=self.connect_reply_handler, error_handler=self.dbus_error_handler) device = None - self.oe.dbg_log('bluetooth::connect_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::connect_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::connect_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::connect_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def connect_reply_handler(self): try: - self.oe.dbg_log('bluetooth::connect_reply_handler', 'enter_function', 0) + self.oe.dbg_log('bluetooth::connect_reply_handler', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(0) self.menu_connections() - self.oe.dbg_log('bluetooth::connect_reply_handler', 'exit_function', 0) + self.oe.dbg_log('bluetooth::connect_reply_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::connect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::connect_reply_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def disconnect_device_by_path(self, path): try: - self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'enter_function', 0) + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) device = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Device1') device.Disconnect(reply_handler=self.disconnect_reply_handler, error_handler=self.dbus_error_handler) device = None - self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'exit_function', 0) + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::disconnect_device_by_path', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def disconnect_device_by(self, listItem=None): try: - self.oe.dbg_log('bluetooth::disconnect_device', 'enter_function', 0) + self.oe.dbg_log('bluetooth::disconnect_device', 'enter_function', self.oe.LOGDEBUG) if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: return self.disconnect_device_by_path(listItem.getProperty('entry')) - self.oe.dbg_log('bluetooth::disconnect_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::disconnect_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::disconnect_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::disconnect_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def disconnect_reply_handler(self): try: - self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'enter_function', 0) + self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(0) self.menu_connections() - self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'exit_function', 0) + self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::disconnect_reply_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_device(self, listItem=None): try: - self.oe.dbg_log('bluetooth::remove_device', 'enter_function', 0) + self.oe.dbg_log('bluetooth::remove_device', 'enter_function', self.oe.LOGDEBUG) if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() if listItem is None: return self.oe.set_busy(1) - self.oe.dbg_log('bluetooth::remove_device->entry::', listItem.getProperty('entry'), 0) + self.oe.dbg_log('bluetooth::remove_device->entry::', listItem.getProperty('entry'), self.oe.LOGDEBUG) path = listItem.getProperty('entry') self.dbusBluezAdapter.RemoveDevice(path) self.disable_device_standby(listItem) self.menu_connections(None) self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::remove_device', 'exit_function', 0) + self.oe.dbg_log('bluetooth::remove_device', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('bluetooth::remove_device', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::remove_device', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) # ################################################################### # # Bluetooth Error Handler @@ -385,18 +385,18 @@ def remove_device(self, listItem=None): def dbus_error_handler(self, error): try: - self.oe.dbg_log('bluetooth::dbus_error_handler', 'enter_function', 0) - self.oe.dbg_log('bluetooth::dbus_error_handler::error', repr(error), 0) + self.oe.dbg_log('bluetooth::dbus_error_handler', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::dbus_error_handler::error', repr(error), self.oe.LOGDEBUG) self.oe.set_busy(0) err_message = error.get_dbus_message() - self.oe.dbg_log('bluetooth::dbus_error_handler::err_message', repr(err_message), 0) + self.oe.dbg_log('bluetooth::dbus_error_handler::err_message', repr(err_message), self.oe.LOGDEBUG) self.oe.notify('Bluetooth error', err_message.split('.')[0], 'bt') if hasattr(self, 'pinkey_window'): self.close_pinkey_window() - self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + err_message + ')', 4) - self.oe.dbg_log('bluetooth::dbus_error_handler', 'exit_function', 0) + self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + err_message + ')', self.oe.LOGERROR) + self.oe.dbg_log('bluetooth::dbus_error_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::dbus_error_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) # ################################################################### # # Bluetooth GUI @@ -404,13 +404,13 @@ def dbus_error_handler(self, error): def clear_list(self): try: - self.oe.dbg_log('bluetooth::clear_list', 'enter_function', 0) + self.oe.dbg_log('bluetooth::clear_list', 'enter_function', self.oe.LOGDEBUG) remove = [entry for entry in self.listItems] for entry in remove: del self.listItems[entry] - self.oe.dbg_log('bluetooth::clear_list', 'exit_function', 0) + self.oe.dbg_log('bluetooth::clear_list', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::clear_list', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::clear_list', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def menu_connections(self, focusItem=None): try: @@ -420,24 +420,24 @@ def menu_connections(self, focusItem=None): return 0 if not self.oe.winOeMain.visible: return 0 - self.oe.dbg_log('bluetooth::menu_connections', 'enter_function', 0) + self.oe.dbg_log('bluetooth::menu_connections', 'enter_function', self.oe.LOGDEBUG) if not 'org.bluez' in self.oe.dbusSystemBus.list_names(): self.oe.winOeMain.getControl(1301).setLabel(self.oe._(32346)) self.clear_list() self.oe.winOeMain.getControl(int(self.oe.listObject['btlist'])).reset() - self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (BT Disabled)', 0) + self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (BT Disabled)', self.oe.LOGDEBUG) return if self.dbusBluezAdapter == None: self.oe.winOeMain.getControl(1301).setLabel(self.oe._(32338)) self.clear_list() self.oe.winOeMain.getControl(int(self.oe.listObject['btlist'])).reset() - self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (No Adapter)', 0) + self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (No Adapter)', self.oe.LOGDEBUG) return if int(self.adapter_info(self.dbusBluezAdapter, 'Powered')) != 1: self.oe.winOeMain.getControl(1301).setLabel(self.oe._(32338)) self.clear_list() self.oe.winOeMain.getControl(int(self.oe.listObject['btlist'])).reset() - self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (No Adapter Powered)', 0) + self.oe.dbg_log('bluetooth::menu_connections', 'exit_function (No Adapter Powered)', self.oe.LOGDEBUG) return self.oe.winOeMain.getControl(1301).setLabel(self.oe._(32339)) if not hasattr(self, 'discovery_thread'): @@ -527,13 +527,13 @@ def menu_connections(self, focusItem=None): self.listItems[dbusDevice].setLabel(apName) for dictProperty in dictProperties: self.listItems[dbusDevice].setProperty(dictProperty, dictProperties[dictProperty]) - self.oe.dbg_log('bluetooth::menu_connections', 'exit_function', 0) + self.oe.dbg_log('bluetooth::menu_connections', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::menu_connections', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::menu_connections', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def open_context_menu(self, listItem): try: - self.oe.dbg_log('bluetooth::show_options', 'enter_function', 0) + self.oe.dbg_log('bluetooth::show_options', 'enter_function', self.oe.LOGDEBUG) values = {} if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['btlist']).getSelectedItem() @@ -595,25 +595,25 @@ def open_context_menu(self, listItem): result = select_window.select(title, items) if result >= 0: getattr(self, actions[result])(listItem) - self.oe.dbg_log('bluetooth::show_options', 'exit_function', 0) + self.oe.dbg_log('bluetooth::show_options', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::show_options', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::show_options', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def open_pinkey_window(self, runtime=60, title=32343): try: - self.oe.dbg_log('bluetooth::open_pinkey_window', 'enter_function', 0) + self.oe.dbg_log('bluetooth::open_pinkey_window', 'enter_function', self.oe.LOGDEBUG) self.pinkey_window = oeWindows.pinkeyWindow('service-LibreELEC-Settings-getPasskey.xml', self.oe.__cwd__, 'Default') self.pinkey_window.show() self.pinkey_window.set_title(self.oe._(title)) self.pinkey_timer = pinkeyTimer(self, runtime) self.pinkey_timer.start() - self.oe.dbg_log('bluetooth::open_pinkey_window', 'exit_function', 0) + self.oe.dbg_log('bluetooth::open_pinkey_window', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::open_pinkey_window', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::open_pinkey_window', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def close_pinkey_window(self): try: - self.oe.dbg_log('bluetooth::close_pinkey_window', 'enter_function', 0) + self.oe.dbg_log('bluetooth::close_pinkey_window', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'pinkey_timer'): self.pinkey_timer.stop() self.pinkey_timer = None @@ -622,13 +622,13 @@ def close_pinkey_window(self): self.pinkey_window.close() self.pinkey_window = None del self.pinkey_window - self.oe.dbg_log('bluetooth::close_pinkey_window', 'exit_function', 0) + self.oe.dbg_log('bluetooth::close_pinkey_window', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::close_pinkey_window', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::close_pinkey_window', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def standby_devices(self): try: - self.oe.dbg_log('bluetooth::standby_devices', 'enter_function', 0) + self.oe.dbg_log('bluetooth::standby_devices', 'enter_function', self.oe.LOGDEBUG) if self.dbusBluezAdapter != None: devices = self.oe.read_setting('bluetooth', 'standby') if not devices == None: @@ -637,9 +637,9 @@ def standby_devices(self): if self.is_device_connected(device): self.disconnect_device_by_path(device) self.oe.input_request = False - self.oe.dbg_log('bluetooth::standby_devices', 'exit_function', 0) + self.oe.dbg_log('bluetooth::standby_devices', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::standby_devices', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::standby_devices', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) # ################################################################### # # Bluetooth monitor and agent subclass @@ -649,7 +649,7 @@ class monitor: def __init__(self, oeMain, parent): try: - oeMain.dbg_log('bluetooth::monitor::__init__', 'enter_function', 0) + oeMain.dbg_log('bluetooth::monitor::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.signal_receivers = [] self.NameOwnerWatch = None @@ -657,13 +657,13 @@ def __init__(self, oeMain, parent): self.btAgentPath = '/LibreELEC/bt_agent' self.obAgentPath = '/LibreELEC/ob_agent' self.parent = parent - self.oe.dbg_log('bluetooth::monitor::__init__', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('bluetooth::monitor::__init__', 'ERROR: (' + repr(e) + ')') def add_signal_receivers(self): try: - self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'enter_function', self.oe.LOGDEBUG) self.signal_receivers.append(self.oe.dbusSystemBus.add_signal_receiver(self.InterfacesAdded, bus_name='org.bluez', dbus_interface='org.freedesktop.DBus.ObjectManager', signal_name='InterfacesAdded')) self.signal_receivers.append(self.oe.dbusSystemBus.add_signal_receiver(self.InterfacesRemoved, bus_name='org.bluez', @@ -678,13 +678,13 @@ def add_signal_receivers(self): dbus_interface='org.freedesktop.DBus.Properties', arg0='org.bluez.obex.Transfer1')) self.NameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('org.bluez', self.bluezNameOwnerChanged) self.ObexNameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('org.bluez.obex', self.bluezObexNameOwnerChanged) - self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_signal_receivers(self): try: - self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'enter_function', self.oe.LOGDEBUG) for signal_receiver in self.signal_receivers: signal_receiver.remove() signal_receiver = None @@ -701,24 +701,24 @@ def remove_signal_receivers(self): self.remove_obex_agent() if hasattr(self, 'btAgent'): self.remove_agent() - self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def bluezNameOwnerChanged(self, proxy): try: - self.oe.dbg_log('bluetooth::monitorLoop::bluezNameOwnerChanged', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitorLoop::bluezNameOwnerChanged', 'enter_function', self.oe.LOGDEBUG) if proxy: self.initialize_agent() else: self.remove_agent() - self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::bluezNameOwnerChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def initialize_agent(self): try: - self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'enter_function', self.oe.LOGDEBUG) self.btAgent = bluetoothAgent(self.oe.dbusSystemBus, self.btAgentPath) self.btAgent.oe = self.oe self.btAgent.parent = self.parent @@ -726,13 +726,13 @@ def initialize_agent(self): dbusBluezManager.RegisterAgent(self.btAgentPath, 'KeyboardDisplay') dbusBluezManager.RequestDefaultAgent(self.btAgentPath) dbusBluezManager = None - self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_agent(self): try: - self.oe.dbg_log('bluetooth::monitor::remove_agent', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_agent', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'btAgent'): self.btAgent.remove_from_connection(self.oe.dbusSystemBus, self.btAgentPath) try: @@ -743,24 +743,24 @@ def remove_agent(self): dbusBluezManager = None pass del self.btAgent - self.oe.dbg_log('bluetooth::monitor::remove_agent', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def bluezObexNameOwnerChanged(self, proxy): try: - self.oe.dbg_log('bluetooth::monitorLoop::bluezObexNameOwnerChanged', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitorLoop::bluezObexNameOwnerChanged', 'enter_function', self.oe.LOGDEBUG) if proxy: self.initialize_obex_agent() else: self.remove_obex_agent() - self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::bluezObexNameOwnerChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def initialize_obex_agent(self): try: - self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'enter_function', self.oe.LOGDEBUG) self.obAgent = obexAgent(self.oe.dbusSystemBus, self.obAgentPath) self.obAgent.oe = self.oe self.obAgent.parent = self.parent @@ -768,13 +768,13 @@ def initialize_obex_agent(self): 'org.bluez.obex.AgentManager1') dbusBluezObexManager.RegisterAgent(self.obAgentPath) dbusBluezObexManager = None - self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::initialize_obex_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_obex_agent(self): try: - self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'enter_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'obAgent'): self.obAgent.remove_from_connection(self.oe.dbusSystemBus, self.obAgentPath) try: @@ -786,15 +786,15 @@ def remove_obex_agent(self): dbusBluezObexManager = None pass del self.obAgent - self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::remove_obex_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def InterfacesAdded(self, path, interfaces): try: - self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'enter_function', 0) - self.oe.dbg_log('bluetooth::monitor::InterfacesAdded::path', repr(path), 0) - self.oe.dbg_log('bluetooth::monitor::InterfacesAdded::interfaces', repr(interfaces), 0) + self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::InterfacesAdded::path', repr(path), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::InterfacesAdded::interfaces', repr(interfaces), self.oe.LOGDEBUG) if 'org.bluez.Adapter1' in interfaces: self.parent.dbusBluezAdapter = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez', path), 'org.bluez.Adapter1') self.parent.adapter_powered(self.parent.dbusBluezAdapter, 1) @@ -803,41 +803,41 @@ def InterfacesAdded(self, path, interfaces): self.parent.close_pinkey_window() if self.parent.visible: self.parent.menu_connections() - self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::InterfacesAdded', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def InterfacesRemoved(self, path, interfaces): try: - self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'enter_function', 0) - self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved::path', repr(path), 0) - self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved::interfaces', repr(interfaces), 0) + self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved::path', repr(path), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved::interfaces', repr(interfaces), self.oe.LOGDEBUG) if 'org.bluez.Adapter1' in interfaces: self.parent.dbusBluezAdapter = None if self.parent.visible and not hasattr(self.parent, 'discovery_thread'): self.parent.menu_connections() - self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::InterfacesRemoved', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def AdapterChanged(self, interface, changed, invalidated, path): try: - self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'enter_function', 0) - self.oe.dbg_log('bluetooth::monitor::AdapterChanged::interface', repr(interface), 0) - self.oe.dbg_log('bluetooth::monitor::AdapterChanged::changed', repr(changed), 0) - self.oe.dbg_log('bluetooth::monitor::AdapterChanged::invalidated', repr(invalidated), 0) - self.oe.dbg_log('bluetooth::monitor::AdapterChanged::path', repr(path), 0) - self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged::interface', repr(interface), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged::changed', repr(changed), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged::invalidated', repr(invalidated), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged::path', repr(path), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::AdapterChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def PropertiesChanged(self, interface, changed, invalidated, path): try: - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'enter_function', 0) - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::interface', repr(interface), 0) - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::changed', repr(changed), 0) - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::invalidated', repr(invalidated), 0) - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::path', repr(path), 0) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::interface', repr(interface), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::changed', repr(changed), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::invalidated', repr(invalidated), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged::path', repr(path), self.oe.LOGDEBUG) if self.parent.visible: properties = [ 'Paired', @@ -854,16 +854,16 @@ def PropertiesChanged(self, interface, changed, invalidated, path): self.parent.listItems[path].setProperty(str(prop), str(changed[prop])) else: self.parent.menu_connections() - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::PropertiesChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def TransferChanged(self, path, interface, dummy): try: - self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'enter_function', 0) - self.oe.dbg_log('bluetooth::monitor::TransferChanged::path', repr(path), 0) - self.oe.dbg_log('bluetooth::monitor::TransferChanged::interface', repr(interface), 0) - self.oe.dbg_log('bluetooth::monitor::TransferChanged::dummy', repr(dummy), 0) + self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::TransferChanged::path', repr(path), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::TransferChanged::interface', repr(interface), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::monitor::TransferChanged::dummy', repr(dummy), self.oe.LOGDEBUG) if 'Status' in interface: if interface['Status'] == 'active': self.parent.download_start = time.time() @@ -900,9 +900,9 @@ def TransferChanged(self, path, interface, dummy): itf.Cancel() obj = None itf = None - self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'exit_function', 0) + self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::monitor::TransferChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) #################################################################### @@ -922,137 +922,137 @@ def busy(self): @dbus.service.method('org.bluez.Agent1', in_signature='', out_signature='') def Release(self): try: - self.oe.dbg_log('bluetooth::btAgent::Release', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::Release', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::Release', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::Release', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::Release', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::Release', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='os', out_signature='') def AuthorizeService(self, device, uuid): try: - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::device=', repr(device), 0) - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::uuid=', repr(uuid), 0) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::device=', repr(device), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::uuid=', repr(uuid), self.oe.LOGDEBUG) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno('Bluetooth', 'Authorize service %s?' % uuid) - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::answer=', repr(answer), 0) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService::answer=', repr(answer), self.oe.LOGDEBUG) self.busy() - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'exit_function', self.oe.LOGDEBUG) if answer == 1: self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected('Connection rejected!') except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::AuthorizeService', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='s') def RequestPinCode(self, device): try: - self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::RequestPinCode::device=', repr(device), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestPinCode::device=', repr(device), self.oe.LOGDEBUG) self.oe.input_request = True xbmcKeyboard = xbmc.Keyboard('', 'Enter PIN code') xbmcKeyboard.doModal() pincode = xbmcKeyboard.getText() self.busy() - self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'return->' + pincode, 0) - self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'return->' + pincode, self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'exit_function', self.oe.LOGDEBUG) return dbus.String(pincode) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::RequestPinCode', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='u') def RequestPasskey(self, device): try: - self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::RequestPasskey::device=', repr(device), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestPasskey::device=', repr(device), self.oe.LOGDEBUG) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() passkey = int(xbmcDialog.numeric(0, 'Enter passkey (number in 0-999999)', '0')) - self.oe.dbg_log('bluetooth::btAgent::RequestPasskey::passkey=', repr(passkey), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestPasskey::passkey=', repr(passkey), self.oe.LOGDEBUG) self.busy() - self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'exit_function', self.oe.LOGDEBUG) return dbus.UInt32(passkey) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::RequestPasskey', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='ouq', out_signature='') def DisplayPasskey(self, device, passkey, entered): try: - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::device=', repr(device), 0) - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::passkey=', repr(passkey), 0) - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::entered=', repr(entered), 0) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::device=', repr(device), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::passkey=', repr(passkey), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey::entered=', repr(entered), self.oe.LOGDEBUG) if not hasattr(self.parent, 'pinkey_window'): self.parent.open_pinkey_window() self.parent.pinkey_window.device = device self.parent.pinkey_window.set_label1('Passkey: %06u' % (passkey)) - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::DisplayPasskey', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='os', out_signature='') def DisplayPinCode(self, device, pincode): try: - self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode::device=', repr(device), 0) - self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode::pincode=', repr(pincode), 0) + self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode::device=', repr(device), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode::pincode=', repr(pincode), self.oe.LOGDEBUG) if hasattr(self.parent, 'pinkey_window'): self.parent.close_pinkey_window() self.parent.open_pinkey_window(runtime=30) self.parent.pinkey_window.device = device self.parent.pinkey_window.set_label1('PIN code: %s' % (pincode)) - self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::DisplayPinCode', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='ou', out_signature='') def RequestConfirmation(self, device, passkey): try: - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::device=', repr(device), 0) - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::passkey=', repr(passkey), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::device=', repr(device), self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::passkey=', repr(passkey), self.oe.LOGDEBUG) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno('Bluetooth', 'Confirm passkey %06u' % passkey) - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::answer=', repr(answer), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation::answer=', repr(answer), self.oe.LOGDEBUG) self.busy() - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'exit_function', self.oe.LOGDEBUG) if answer == 1: self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected("Passkey doesn't match") except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::RequestConfirmation', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='o', out_signature='') def RequestAuthorization(self, device): try: - self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'enter_function', 0) - self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::device=', repr(device), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::device=', repr(device), self.oe.LOGDEBUG) self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno('Bluetooth', 'Accept pairing?') - self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::answer=', repr(answer), 0) + self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization::answer=', repr(answer), self.oe.LOGDEBUG) self.busy() - self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'exit_function', self.oe.LOGDEBUG) if answer == 1: self.oe.dictModules['bluetooth'].trust_device(device) return raise Rejected('Pairing rejected') except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::RequestAuthorization', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.Agent1', in_signature='', out_signature='') def Cancel(self): try: - self.oe.dbg_log('bluetooth::btAgent::Cancel', 'enter_function', 0) + self.oe.dbg_log('bluetooth::btAgent::Cancel', 'enter_function', self.oe.LOGDEBUG) if hasattr(self.parent, 'pinkey_window'): self.parent.close_pinkey_window() - self.oe.dbg_log('bluetooth::btAgent::Cancel', 'exit_function', 0) + self.oe.dbg_log('bluetooth::btAgent::Cancel', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::btAgent::Cancel', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::btAgent::Cancel', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) #################################################################### @@ -1067,22 +1067,22 @@ def busy(self): @dbus.service.method('org.bluez.obex.Agent1', in_signature='', out_signature='') def Release(self): try: - self.oe.dbg_log('bluetooth::obexAgent::Release', 'enter_function', 0) - self.oe.dbg_log('bluetooth::obexAgent::Release', 'exit_function', 0) + self.oe.dbg_log('bluetooth::obexAgent::Release', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::obexAgent::Release', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::obexAgent::Release', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::obexAgent::Release', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.obex.Agent1', in_signature='o', out_signature='s') def AuthorizePush(self, path): try: - self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'enter_function', 0) - self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush::path=', repr(path), 0) + self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush::path=', repr(path), self.oe.LOGDEBUG) transfer = dbus.Interface(self.oe.dbusSystemBus.get_object('org.bluez.obex', path), 'org.freedesktop.DBus.Properties') properties = transfer.GetAll('org.bluez.obex.Transfer1') self.oe.input_request = True xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno('Bluetooth', "%s\n\n%s" % (self.oe._(32381), properties['Name'])) - self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush::answer=', repr(answer), 0) + self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush::answer=', repr(answer), self.oe.LOGDEBUG) self.busy() if answer != 1: properties = None @@ -1098,33 +1098,33 @@ def AuthorizePush(self, path): res = properties['Name'] properties = None transfer = None - self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'exit_function', 0) + self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'exit_function', self.oe.LOGDEBUG) return res except Exception as e: - self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::obexAgent::AuthorizePush', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('org.bluez.obex.Agent1', in_signature='', out_signature='') def Cancel(self): try: - self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'enter_function', 0) - self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'exit_function', 0) + self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::obexAgent::Cancel', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) class discoveryThread(threading.Thread): def __init__(self, oeMain): try: - oeMain.dbg_log('bluetooth::discoveryThread::__init__', 'enter_function', 0) + oeMain.dbg_log('bluetooth::discoveryThread::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.last_run = 0 self.stopped = False self.main_menu = self.oe.winOeMain.getControl(self.oe.winOeMain.guiMenList) threading.Thread.__init__(self) - self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'exit_function', 0) + self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::discoveryThread::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop(self): self.stopped = True @@ -1132,7 +1132,7 @@ def stop(self): def run(self): try: - self.oe.dbg_log('bluetooth::discoveryThread::run', 'enter_function', 0) + self.oe.dbg_log('bluetooth::discoveryThread::run', 'enter_function', self.oe.LOGDEBUG) while not self.stopped and not self.oe.xbmcm.abortRequested(): current_time = time.time() if current_time > self.last_run + 5: @@ -1142,16 +1142,16 @@ def run(self): if self.main_menu.getSelectedItem().getProperty('modul') != 'bluetooth': self.stop() self.oe.xbmcm.waitForAbort(1) - self.oe.dbg_log('bluetooth::discoveryThread::run', 'exit_function', 0) + self.oe.dbg_log('bluetooth::discoveryThread::run', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::discoveryThread::run', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::discoveryThread::run', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) class pinkeyTimer(threading.Thread): def __init__(self, parent, runtime=60): try: - parent.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'enter_function', 0) + parent.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'enter_function', parent.oe.LOGDEBUG) self.parent = parent self.oe = parent.oe self.start_time = time.time() @@ -1159,16 +1159,16 @@ def __init__(self, parent, runtime=60): self.stopped = False self.runtime = runtime threading.Thread.__init__(self) - self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'exit_function', 0) + self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::pinkeyTimer::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop(self): self.stopped = True def run(self): try: - self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'enter_function', 0) + self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'enter_function', self.oe.LOGDEBUG) self.endtime = self.start_time + self.runtime while not self.stopped and not self.oe.xbmcm.abortRequested(): current_time = time.time() @@ -1179,6 +1179,6 @@ def run(self): self.parent.close_pinkey_window() else: self.oe.xbmcm.waitForAbort(1) - self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'exit_function', 0) + self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('bluetooth::pinkeyTimer::run', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) diff --git a/src/resources/lib/modules/connman.py b/src/resources/lib/modules/connman.py index 0463001c..5a411f63 100644 --- a/src/resources/lib/modules/connman.py +++ b/src/resources/lib/modules/connman.py @@ -26,7 +26,7 @@ class connmanService(object): def __init__(self, servicePath, oeMain): try: - oeMain.dbg_log('connmanService::__init__', 'enter_function', 0) + oeMain.dbg_log('connmanService::__init__', 'enter_function', oeMain.LOGDEBUG) oeMain.set_busy(1) self.struct = { 'AutoConnect': { @@ -318,31 +318,31 @@ def __init__(self, servicePath, oeMain): self.winOeCon.doModal() del self.winOeCon del self.oe.dictModules['connmanNetworkConfig'] - self.oe.dbg_log('connmanService::__init__', 'exit_function', 0) + self.oe.dbg_log('connmanService::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connmanService::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def cancel(self): try: - self.oe.dbg_log('connmanService::cancel', 'exit_function', 0) + self.oe.dbg_log('connmanService::cancel', 'exit_function', self.oe.LOGDEBUG) self.oe.set_busy(1) self.winOeCon.close() self.oe.set_busy(0) - self.oe.dbg_log('connmanService::cancel', 'exit_function', 0) + self.oe.dbg_log('connmanService::cancel', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connmanService::cancel', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::cancel', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def menu_loader(self, menuItem): try: - self.oe.dbg_log('connmanService::menu_loader', 'enter_function', 0) + self.oe.dbg_log('connmanService::menu_loader', 'enter_function', self.oe.LOGDEBUG) self.winOeCon.showButton(1, 32140, 'connmanNetworkConfig', 'save_network') self.winOeCon.showButton(2, 32212, 'connmanNetworkConfig', 'cancel') self.winOeCon.build_menu(self.struct, fltr=[menuItem.getProperty('category')]) - self.oe.dbg_log('connmanService::menu_loader', 'exit_function', 0) + self.oe.dbg_log('connmanService::menu_loader', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connmanService::menu_loader', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::menu_loader', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def set_value_checkdhcp(self, listItem): try: @@ -350,21 +350,21 @@ def set_value_checkdhcp(self, listItem): ok_window = xbmcgui.Dialog() answer = ok_window.ok('Not allowed', 'IPv4 method is set to DHCP.\n\nChanging this option is not allowed') return - self.oe.dbg_log('connmanService::set_value_checkdhcp', 'enter_function', 0) + self.oe.dbg_log('connmanService::set_value_checkdhcp', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True - self.oe.dbg_log('connmanService::set_value_checkdhcp', 'exit_function', 0) + self.oe.dbg_log('connmanService::set_value_checkdhcp', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connmanService::set_value_checkdhcp', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::set_value_checkdhcp', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def set_value(self, listItem): try: - self.oe.dbg_log('connmanService::set_value', 'enter_function', 0) + self.oe.dbg_log('connmanService::set_value', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True - self.oe.dbg_log('connmanService::set_value', 'exit_function', 0) + self.oe.dbg_log('connmanService::set_value', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connmanService::set_value', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::set_value', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def dbus_config(self, category): try: @@ -397,12 +397,12 @@ def dbus_config(self, category): value.append(getattr(dbus, setting['dbus'])(setting['value'], variant_level=1)) return (category + postfix, value) except Exception as e: - self.oe.dbg_log('connmanService::dbus_config', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::dbus_config', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def save_network(self): try: self.oe.set_busy(1) - self.oe.dbg_log('connmanService::save_network', 'enter_function', 0) + self.oe.dbg_log('connmanService::save_network', 'enter_function', self.oe.LOGDEBUG) if self.struct['IPv4']['settings']['Method']['value'] == 'dhcp': for setting in self.struct['Nameservers']['settings']: self.struct['Nameservers']['settings'][setting]['changed'] = True @@ -424,42 +424,42 @@ def save_network(self): (category, value) = self.dbus_config(category) if value != None: self.service.SetProperty(dbus.String(category), value) - self.oe.dbg_log('connmanService::save_network', 'exit_function', 0) + self.oe.dbg_log('connmanService::save_network', 'exit_function', self.oe.LOGDEBUG) self.oe.set_busy(0) return 'close' except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connmanService::save_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::save_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) return 'close' def delete_network(self): try: - self.oe.dbg_log('connmanService::delete_network', 'enter_function', 0) + self.oe.dbg_log('connmanService::delete_network', 'enter_function', self.oe.LOGDEBUG) self.oe.dictModules['connman'].delete_network(None) - self.oe.dbg_log('connmanService::delete_network', 'exit_function', 0) + self.oe.dbg_log('connmanService::delete_network', 'exit_function', self.oe.LOGDEBUG) return 'close' except Exception as e: - self.oe.dbg_log('connmanService::delete_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::delete_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) return 'close' def connect_network(self): try: - self.oe.dbg_log('connmanService::connect_network', 'enter_function', 0) + self.oe.dbg_log('connmanService::connect_network', 'enter_function', self.oe.LOGDEBUG) self.oe.dictModules['connman'].connect_network(None) - self.oe.dbg_log('connmanService::connect_network', 'exit_function', 0) + self.oe.dbg_log('connmanService::connect_network', 'exit_function', self.oe.LOGDEBUG) return 'close' except Exception as e: - self.oe.dbg_log('connmanService::connect_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::connect_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) return 'close' def disconnect_network(self): try: - self.oe.dbg_log('connmanService::disconnect_network', 'enter_function', 0) + self.oe.dbg_log('connmanService::disconnect_network', 'enter_function', self.oe.LOGDEBUG) self.oe.dictModules['connman'].disconnect_network(None) - self.oe.dbg_log('connmanService::disconnect_network', 'exit_function', 0) + self.oe.dbg_log('connmanService::disconnect_network', 'exit_function', self.oe.LOGDEBUG) return 'close' except Exception as e: - self.oe.dbg_log('connmanService::disconnect_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connmanService::disconnect_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) return 'close' @@ -496,7 +496,7 @@ class connman: def __init__(self, oeMain): try: - oeMain.dbg_log('connman::__init__', 'enter_function', 0) + oeMain.dbg_log('connman::__init__', 'enter_function', oeMain.LOGDEBUG) self.listItems = {} self.struct = { '/net/connman/technology/wifi': { @@ -665,9 +665,9 @@ def __init__(self, oeMain): self.busy = 0 self.oe = oeMain self.visible = False - self.oe.dbg_log('connman::__init__', 'exit_function', 0) + self.oe.dbg_log('connman::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def clear_list(self): try: @@ -676,28 +676,28 @@ def clear_list(self): self.listItems[entry] = None del self.listItems[entry] except Exception as e: - self.oe.dbg_log('connman::clear_list', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::clear_list', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def do_init(self): try: - self.oe.dbg_log('connman::do_init', 'enter_function', 0) + self.oe.dbg_log('connman::do_init', 'enter_function', self.oe.LOGDEBUG) self.visible = True - self.oe.dbg_log('connman::do_init', 'exit_function', 0) + self.oe.dbg_log('connman::do_init', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::do_init', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::do_init', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def exit(self): try: - self.oe.dbg_log('connman::exit', 'enter_function', 0) + self.oe.dbg_log('connman::exit', 'enter_function', self.oe.LOGDEBUG) self.visible = False self.clear_list() - self.oe.dbg_log('connman::exit', 'exit_function', 0) + self.oe.dbg_log('connman::exit', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::exit', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::exit', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def load_values(self): try: - self.oe.dbg_log('connman::load_values', 'enter_function', 0) + self.oe.dbg_log('connman::load_values', 'enter_function', self.oe.LOGDEBUG) # Network Wait @@ -915,14 +915,14 @@ def load_values(self): else: regValue = self.REGDOMAIN_DEFAULT self.struct['/net/connman/technology/wifi']['settings']['regdom']['value'] = str(regValue) - self.oe.dbg_log('connman::load_values', 'exit_function', 0) + self.oe.dbg_log('connman::load_values', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('connman::load_values', 'ERROR: (' + repr(e) + ')') def menu_connections(self, focusItem, services={}, removed={}, force=False): try: - self.oe.dbg_log('connman::menu_connections', 'enter_function', 0) + self.oe.dbg_log('connman::menu_connections', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) # type 1=int, 2=string, 3=array @@ -1032,14 +1032,14 @@ def menu_connections(self, focusItem, services={}, removed={}, force=False): if rebuildList == 1: self.listItems[dbusServicePath] = self.oe.winOeMain.addConfigItem(apName, dictProperties, self.oe.listObject['netlist']) self.oe.set_busy(0) - self.oe.dbg_log('connman::menu_connections', 'exit_function', 0) + self.oe.dbg_log('connman::menu_connections', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::menu_connections', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::menu_connections', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def menu_loader(self, menuItem=None): try: - self.oe.dbg_log('connman::menu_loader', 'enter_function0', 0) + self.oe.dbg_log('connman::menu_loader', 'enter_function0', self.oe.LOGDEBUG) self.oe.set_busy(1) if menuItem == None: menuItem = self.oe.winOeMain.getControl(self.oe.winOeMain.guiMenList).getSelectedItem() @@ -1065,19 +1065,19 @@ def menu_loader(self, menuItem=None): self.struct['Timeservers']['settings'][setting]['value'] = '' self.oe.winOeMain.build_menu(self.struct) self.oe.set_busy(0) - self.oe.dbg_log('connman::menu_loader', 'exit_function', 0) + self.oe.dbg_log('connman::menu_loader', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::menu_loader', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::menu_loader', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def open_context_menu(self, listItem): try: - self.oe.dbg_log('connman::open_context_menu', 'enter_function', 0) + self.oe.dbg_log('connman::open_context_menu', 'enter_function', self.oe.LOGDEBUG) values = {} if listItem is None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['netlist']).getSelectedItem() if listItem is None: - self.oe.dbg_log('connman::open_context_menu', 'exit_function (listItem=None)', 0) + self.oe.dbg_log('connman::open_context_menu', 'exit_function (listItem=None)', self.oe.LOGDEBUG) return if listItem.getProperty('State') in ['ready', 'online']: values[1] = { @@ -1117,40 +1117,40 @@ def open_context_menu(self, listItem): result = select_window.select(title, items) if result >= 0: getattr(self, actions[result])(listItem) - self.oe.dbg_log('connman::open_context_menu', 'exit_function', 0) + self.oe.dbg_log('connman::open_context_menu', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::open_context_menu', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::open_context_menu', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def set_timeservers(self, **kwargs): try: self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) - self.oe.dbg_log('connman::set_timeservers', 'enter_function', 0) + self.oe.dbg_log('connman::set_timeservers', 'enter_function', self.oe.LOGDEBUG) self.clock = dbus.Interface(self.oe.dbusSystemBus.get_object('net.connman', '/'), 'net.connman.Clock') timeservers = dbus.Array([], signature=dbus.Signature('s'), variant_level=1) for setting in sorted(self.struct['Timeservers']['settings']): if self.struct['Timeservers']['settings'][setting]['value'] != '': timeservers.append(self.struct['Timeservers']['settings'][setting]['value']) self.clock.SetProperty(dbus.String('Timeservers'), timeservers) - self.oe.dbg_log('connman::set_timeservers', 'exit_function', 0) + self.oe.dbg_log('connman::set_timeservers', 'exit_function', self.oe.LOGDEBUG) self.oe.set_busy(0) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::set_timeservers', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::set_timeservers', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def set_value(self, listItem=None): try: - self.oe.dbg_log('connman::set_value', 'enter_function', 0) + self.oe.dbg_log('connman::set_value', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['changed'] = True - self.oe.dbg_log('connman::set_value', 'exit_function', 0) + self.oe.dbg_log('connman::set_value', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::set_value', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::set_value', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def set_technologie(self, **kwargs): try: - self.oe.dbg_log('connman::set_technologies', 'enter_function', 0) + self.oe.dbg_log('connman::set_technologies', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -1199,14 +1199,14 @@ def set_technologie(self, **kwargs): self.technologie_properties = None self.menu_loader(None) self.oe.set_busy(0) - self.oe.dbg_log('connman::set_technologies', 'exit_function', 0) + self.oe.dbg_log('connman::set_technologies', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::set_technologies', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::set_technologies', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def custom_regdom(self, **kwargs): try: - self.oe.dbg_log('connman::custom_regdom', 'enter_function', 0) + self.oe.dbg_log('connman::custom_regdom', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: if str((kwargs['listItem']).getProperty('value')) == self.REGDOMAIN_DEFAULT: @@ -1221,26 +1221,26 @@ def custom_regdom(self, **kwargs): self.oe.execute(regScript) self.set_value(kwargs['listItem']) self.oe.set_busy(0) - self.oe.dbg_log('connman::custom_regdom', 'exit_function', 0) + self.oe.dbg_log('connman::custom_regdom', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::custom_regdom', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::custom_regdom', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def configure_network(self, listItem=None): try: - self.oe.dbg_log('connman::configure_network', 'enter_function', 0) + self.oe.dbg_log('connman::configure_network', 'enter_function', self.oe.LOGDEBUG) if listItem == None: listItem = self.oe.winOeMain.getControl(self.oe.listObject['netlist']).getSelectedItem() self.configureService = connmanService(listItem.getProperty('entry'), self.oe) del self.configureService self.menu_connections(None) - self.oe.dbg_log('connman::configure_network', 'exit_function', 0) + self.oe.dbg_log('connman::configure_network', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::configure_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::configure_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def connect_network(self, listItem=None): try: - self.oe.dbg_log('connman::connect_network', 'enter_function', 0) + self.oe.dbg_log('connman::connect_network', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) self.connect_attempt += 1 if listItem == None: @@ -1249,24 +1249,24 @@ def connect_network(self, listItem=None): dbus.Interface(service_object, 'net.connman.Service').Connect(reply_handler=self.connect_reply_handler, error_handler=self.dbus_error_handler) service_object = None - self.oe.dbg_log('connman::connect_network', 'exit_function', 0) + self.oe.dbg_log('connman::connect_network', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::connect_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::connect_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def connect_reply_handler(self): try: - self.oe.dbg_log('connman::connect_reply_handler', 'enter_function', 0) + self.oe.dbg_log('connman::connect_reply_handler', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(0) self.menu_connections(None) - self.oe.dbg_log('connman::connect_reply_handler', 'exit_function', 0) + self.oe.dbg_log('connman::connect_reply_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::connect_reply_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::connect_reply_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def dbus_error_handler(self, error): try: - self.oe.dbg_log('connman::dbus_error_handler', 'enter_function', 0) + self.oe.dbg_log('connman::dbus_error_handler', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(0) err_name = error.get_dbus_name() if 'InProgress' in err_name: @@ -1297,17 +1297,17 @@ def dbus_error_handler(self, error): else: self.notify_error = 1 if self.log_error == 1: - self.oe.dbg_log('connman::dbus_error_handler', 'ERROR: (' + err_message + ')', 4) + self.oe.dbg_log('connman::dbus_error_handler', 'ERROR: (' + err_message + ')', self.oe.LOGERROR) else: self.log_error = 1 - self.oe.dbg_log('connman::dbus_error_handler', 'exit_function', 0) + self.oe.dbg_log('connman::dbus_error_handler', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::dbus_error_handler', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::dbus_error_handler', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def disconnect_network(self, listItem=None): try: - self.oe.dbg_log('connman::disconnect_network', 'enter_function', 0) + self.oe.dbg_log('connman::disconnect_network', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) self.connect_attempt = 0 self.net_disconnected = 1 @@ -1318,14 +1318,14 @@ def disconnect_network(self, listItem=None): service_object = None del service_object self.oe.set_busy(0) - self.oe.dbg_log('connman::disconnect_network', 'exit_function', 0) + self.oe.dbg_log('connman::disconnect_network', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::disconnect_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::disconnect_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def delete_network(self, listItem=None): try: - self.oe.dbg_log('connman::delete_network', 'enter_function', 0) + self.oe.dbg_log('connman::delete_network', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) self.connect_attempt = 0 if listItem == None: @@ -1337,14 +1337,14 @@ def delete_network(self, listItem=None): service_object = None del service_object self.oe.set_busy(0) - self.oe.dbg_log('connman::delete_network', 'exit_function', 0) + self.oe.dbg_log('connman::delete_network', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::delete_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::delete_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def refresh_network(self, listItem=None): try: - self.oe.dbg_log('connman::refresh_network', 'enter_function', 0) + self.oe.dbg_log('connman::refresh_network', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) wifi = self.oe.dbusSystemBus.get_object('net.connman', '/net/connman/technology/wifi') dbus.Interface(wifi, 'net.connman.Technology').Scan() @@ -1352,45 +1352,45 @@ def refresh_network(self, listItem=None): del wifi self.oe.set_busy(0) self.menu_connections(None) - self.oe.dbg_log('connman::refresh_network', 'exit_function', 0) + self.oe.dbg_log('connman::refresh_network', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('connman::refresh_network', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::refresh_network', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def get_service_path(self): try: - self.oe.dbg_log('connman::get_service_path', 'enter_function', 0) + self.oe.dbg_log('connman::get_service_path', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'winOeCon'): return self.winOeCon.service_path else: listItem = self.oe.winOeMain.getControl(self.oe.listObject['netlist']).getSelectedItem() return listItem.getProperty('entry') - self.oe.dbg_log('connman::get_service_path', 'exit_function', 0) + self.oe.dbg_log('connman::get_service_path', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::get_service_path', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::get_service_path', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def start_service(self): try: - self.oe.dbg_log('connman::start_service', 'enter_function', 0) + self.oe.dbg_log('connman::start_service', 'enter_function', self.oe.LOGDEBUG) self.load_values() self.init_netfilter(service=1) - self.oe.dbg_log('connman::start_service', 'exit_function', 0) + self.oe.dbg_log('connman::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('connman::start_service', 'ERROR: (' + repr(e) + ')') def stop_service(self): try: - self.oe.dbg_log('connman::stop_service', 'enter_function', 0) + self.oe.dbg_log('connman::stop_service', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'dbusConnmanManager'): self.dbusConnmanManager = None del self.dbusConnmanManager - self.oe.dbg_log('connman::stop_service', 'exit_function', 0) + self.oe.dbg_log('connman::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::stop_service', 'ERROR: (' + repr(e) + ')') def set_network_wait(self, **kwargs): try: - self.oe.dbg_log('connman::set_network_wait', 'enter_function', 0) + self.oe.dbg_log('connman::set_network_wait', 'enter_function', self.oe.LOGDEBUG) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) if self.struct['advanced']['settings']['wait_for_network']['value'] == '0': @@ -1404,13 +1404,13 @@ def set_network_wait(self, **kwargs): wait_conf.write('WAIT_NETWORK="true"\n') wait_conf.write('WAIT_NETWORK_TIME="%s"\n' % self.struct['advanced']['settings']['wait_for_network_time']['value']) wait_conf.close() - self.oe.dbg_log('connman::set_network_wait', 'exit_function', 0) + self.oe.dbg_log('connman::set_network_wait', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::set_network_wait', 'ERROR: (' + repr(e) + ')') def init_netfilter(self, **kwargs): try: - self.oe.dbg_log('connman::init_netfilter', 'enter_function', 0) + self.oe.dbg_log('connman::init_netfilter', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -1426,13 +1426,13 @@ def init_netfilter(self, **kwargs): state = 0 self.oe.set_service('iptables', options, state) self.oe.set_busy(0) - self.oe.dbg_log('connman::init_netfilter', 'exit_function', 0) + self.oe.dbg_log('connman::init_netfilter', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::init_netfilter', 'ERROR: (' + repr(e) + ')') def do_wizard(self): try: - self.oe.dbg_log('connman::do_wizard', 'enter_function', 0) + self.oe.dbg_log('connman::do_wizard', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.set_wizard_title(self.oe._(32305)) self.oe.winOeMain.set_wizard_text(self.oe._(32306)) self.oe.winOeMain.set_wizard_button_title('') @@ -1449,7 +1449,7 @@ def do_wizard(self): ]).controlLeft(self.oe.winOeMain.getControl(self.oe.winOeMain.buttons[2]['id'])) self.menu_connections(None) - self.oe.dbg_log('connman::do_wizard', 'exit_function', 0) + self.oe.dbg_log('connman::do_wizard', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('connman::do_wizard', 'ERROR: (' + repr(e) + ')') @@ -1457,19 +1457,19 @@ class monitor: def __init__(self, oeMain, parent): try: - oeMain.dbg_log('connman::monitor::__init__', 'enter_function', 0) + oeMain.dbg_log('connman::monitor::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.signal_receivers = [] self.NameOwnerWatch = None self.parent = parent self.wifiAgentPath = '/LibreELEC/agent_wifi' - self.oe.dbg_log('connman::monitor::__init__', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('connman::monitor::__init__', 'ERROR: (' + repr(e) + ')') def add_signal_receivers(self): try: - self.oe.dbg_log('connman::monitor::add_signal_receivers', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::add_signal_receivers', 'enter_function', self.oe.LOGDEBUG) self.signal_receivers.append(self.oe.dbusSystemBus.add_signal_receiver(self.propertyChanged, bus_name='net.connman', dbus_interface='net.connman.Manager', signal_name='PropertyChanged', path_keyword='path')) self.signal_receivers.append(self.oe.dbusSystemBus.add_signal_receiver(self.servicesChanged, bus_name='net.connman', @@ -1481,13 +1481,13 @@ def add_signal_receivers(self): self.signal_receivers.append(self.oe.dbusSystemBus.add_signal_receiver(self.managerPropertyChanged, bus_name='net.connman', signal_name='PropertyChanged', path_keyword='path', interface_keyword='interface')) self.conNameOwnerWatch = self.oe.dbusSystemBus.watch_name_owner('net.connman', self.conNameOwnerChanged) - self.oe.dbg_log('connman::monitor::add_signal_receivers', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::add_signal_receivers', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::add_signal_receivers', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_signal_receivers(self): try: - self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'enter_function', self.oe.LOGDEBUG) for signal_receiver in self.signal_receivers: signal_receiver.remove() signal_receiver = None @@ -1495,37 +1495,37 @@ def remove_signal_receivers(self): self.conNameOwnerWatch = None if hasattr(self, 'wifiAgent'): self.remove_agent() - self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::remove_signal_receivers', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def conNameOwnerChanged(self, proxy): try: - self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'enter_function', self.oe.LOGDEBUG) if proxy: self.initialize_agent() else: self.remove_agent() - self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::nameOwnerChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def initialize_agent(self): try: - self.oe.dbg_log('connman::monitor::initialize_agent', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::initialize_agent', 'enter_function', self.oe.LOGDEBUG) if not hasattr(self, 'wifiAgent'): dbusConnmanManager = dbus.Interface(self.oe.dbusSystemBus.get_object('net.connman', '/'), 'net.connman.Manager') self.wifiAgent = connmanWifiAgent(self.oe.dbusSystemBus, self.wifiAgentPath) self.wifiAgent.oe = self.oe dbusConnmanManager.RegisterAgent(self.wifiAgentPath) dbusConnmanManager = None - self.oe.dbg_log('connman::monitor::initialize_agent', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::initialize_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::initialize_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def remove_agent(self): try: - self.oe.dbg_log('connman::monitor::remove_agent', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::remove_agent', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'wifiAgent'): self.wifiAgent.remove_from_connection(self.oe.dbusSystemBus, self.wifiAgentPath) try: @@ -1535,63 +1535,63 @@ def remove_agent(self): except: dbusConnmanManager = None del self.wifiAgent - self.oe.dbg_log('connman::monitor::remove_agent', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::remove_agent', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::remove_agent', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def managerPropertyChanged(self, name, value, path, interface): try: - self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'enter_function', 0) - self.oe.dbg_log('connman::monitor::managerPropertyChanged::name', repr(name), 0) - self.oe.dbg_log('connman::monitor::managerPropertyChanged::value', repr(value), 0) - self.oe.dbg_log('connman::monitor::managerPropertyChanged::path', repr(path), 0) - self.oe.dbg_log('connman::monitor::managerPropertyChanged::interface', repr(interface), 0) - self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::managerPropertyChanged::name', repr(name), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::managerPropertyChanged::value', repr(value), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::managerPropertyChanged::path', repr(path), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::managerPropertyChanged::interface', repr(interface), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::managerPropertyChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def propertyChanged(self, name, value, path): try: - self.oe.dbg_log('connman::monitor::propertyChanged', 'enter_function', 0) - self.oe.dbg_log('connman::monitor::propertyChanged::name', repr(name), 0) - self.oe.dbg_log('connman::monitor::propertyChanged::value', repr(value), 0) - self.oe.dbg_log('connman::monitor::propertyChanged::path', repr(path), 0) + self.oe.dbg_log('connman::monitor::propertyChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::propertyChanged::name', repr(name), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::propertyChanged::value', repr(value), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::propertyChanged::path', repr(path), self.oe.LOGDEBUG) if self.parent.visible: self.updateGui(name, value, path) - self.oe.dbg_log('connman::monitor::propertyChanged', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::propertyChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::propertyChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::propertyChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def technologyChanged(self, name, value, path): try: - self.oe.dbg_log('connman::monitor::technologyChanged', 'enter_function', 0) - self.oe.dbg_log('connman::monitor::technologyChanged::name', repr(name), 0) - self.oe.dbg_log('connman::monitor::technologyChanged::value', repr(value), 0) - self.oe.dbg_log('connman::monitor::technologyChanged::path', repr(path), 0) + self.oe.dbg_log('connman::monitor::technologyChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::technologyChanged::name', repr(name), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::technologyChanged::value', repr(value), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::technologyChanged::path', repr(path), self.oe.LOGDEBUG) if self.parent.visible: if self.parent.oe.winOeMain.lastMenu == 1: self.parent.oe.winOeMain.lastMenu = -1 self.parent.oe.winOeMain.onFocus(self.parent.oe.winOeMain.guiMenList) else: self.updateGui(name, value, path) - self.oe.dbg_log('connman::monitor::technologyChanged', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::technologyChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::technologyChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::technologyChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def servicesChanged(self, services, removed): try: - self.oe.dbg_log('connman::monitor::servicesChanged', 'enter_function', 0) - self.oe.dbg_log('connman::monitor::servicesChanged::services', repr(services), 0) - self.oe.dbg_log('connman::monitor::servicesChanged::removed', repr(removed), 0) + self.oe.dbg_log('connman::monitor::servicesChanged', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::servicesChanged::services', repr(services), self.oe.LOGDEBUG) + self.oe.dbg_log('connman::monitor::servicesChanged::removed', repr(removed), self.oe.LOGDEBUG) if self.parent.visible: self.parent.menu_connections(None, services, removed, force=True) - self.oe.dbg_log('connman::monitor::servicesChanged', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::servicesChanged', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::servicesChanged', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::servicesChanged', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def updateGui(self, name, value, path): try: - self.oe.dbg_log('connman::monitor::updateGui', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::updateGui', 'enter_function', self.oe.LOGDEBUG) if name == 'Strength': value = str(int(value)) self.parent.listItems[path].setProperty(name, value) @@ -1614,22 +1614,22 @@ def updateGui(self, name, value, path): self.forceRender() if hasattr(self.parent, 'is_wizard'): self.parent.menu_connections(None, {}, {}, force=True) - self.oe.dbg_log('connman::monitor::updateGui', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::updateGui', 'exit_function', self.oe.LOGDEBUG) except KeyError: - self.oe.dbg_log('connman::monitor::updateGui', 'exit_function (KeyError)', 0) + self.oe.dbg_log('connman::monitor::updateGui', 'exit_function (KeyError)', self.oe.LOGDEBUG) self.parent.menu_connections(None, {}, {}, force=True) except Exception as e: - self.oe.dbg_log('connman::monitor::updateGui', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::updateGui', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def forceRender(self): try: - self.oe.dbg_log('connman::monitor::forceRender', 'enter_function', 0) + self.oe.dbg_log('connman::monitor::forceRender', 'enter_function', self.oe.LOGDEBUG) focusId = self.oe.winOeMain.getFocusId() self.oe.winOeMain.setFocusId(self.oe.listObject['netlist']) self.oe.winOeMain.setFocusId(focusId) - self.oe.dbg_log('connman::monitor::forceRender', 'exit_function', 0) + self.oe.dbg_log('connman::monitor::forceRender', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('connman::monitor::forceRender', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::monitor::forceRender', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) class Failed(dbus.DBusException): @@ -1659,14 +1659,14 @@ def busy(self): @dbus.service.method('net.connman.Agent', in_signature='', out_signature='') def Release(self): - self.oe.dbg_log('connman::connmanWifiAgent::Release', 'enter_function', 0) - self.oe.dbg_log('connman::connmanWifiAgent::Release', 'exit_function', 0) + self.oe.dbg_log('connman::connmanWifiAgent::Release', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::connmanWifiAgent::Release', 'exit_function', self.oe.LOGDEBUG) return {} @dbus.service.method('net.connman.Agent', in_signature='oa{sv}', out_signature='a{sv}') def RequestInput(self, path, fields): try: - self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'enter_function', 0) + self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'enter_function', self.oe.LOGDEBUG) self.oe.input_request = True response = {} if 'Name' in fields: @@ -1730,26 +1730,26 @@ def RequestInput(self, path, fields): raise Canceled('canceled') return response self.busy() - self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'exit_function', 0) + self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'exit_function', self.oe.LOGDEBUG) return response except Exception as e: - self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('connman::connmanWifiAgent::RequestInput', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) @dbus.service.method('net.connman.Agent', in_signature='os', out_signature='') def RequestBrowser(self, path, url): - self.oe.dbg_log('connman::connmanWifiAgent::RequestBrowser', 'enter_function', 0) - self.oe.dbg_log('connman::connmanWifiAgent::RequestBrowser', 'exit_function', 0) + self.oe.dbg_log('connman::connmanWifiAgent::RequestBrowser', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::connmanWifiAgent::RequestBrowser', 'exit_function', self.oe.LOGDEBUG) return @dbus.service.method('net.connman.Agent', in_signature='os', out_signature='') def ReportError(self, path, error): - self.oe.dbg_log('connman::connmanWifiAgent::ReportError', 'enter_function', 0) - self.oe.dbg_log('connman::connmanWifiAgent::ReportError', 'exit_function (CANCELED)', 0) + self.oe.dbg_log('connman::connmanWifiAgent::ReportError', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::connmanWifiAgent::ReportError', 'exit_function (CANCELED)', self.oe.LOGDEBUG) raise Failed() return @dbus.service.method('net.connman.Agent', in_signature='', out_signature='') def Cancel(self): - self.oe.dbg_log('connman::connmanWifiAgent::Cancel', 'enter_function', 0) - self.oe.dbg_log('connman::connmanWifiAgent::Cancel', 'exit_function', 0) + self.oe.dbg_log('connman::connmanWifiAgent::Cancel', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('connman::connmanWifiAgent::Cancel', 'exit_function', self.oe.LOGDEBUG) return diff --git a/src/resources/lib/modules/services.py b/src/resources/lib/modules/services.py index 51528258..5c879cbb 100644 --- a/src/resources/lib/modules/services.py +++ b/src/resources/lib/modules/services.py @@ -41,7 +41,7 @@ class services: def __init__(self, oeMain): try: - oeMain.dbg_log('services::__init__', 'enter_function', 0) + oeMain.dbg_log('services::__init__', 'enter_function', oeMain.LOGDEBUG) self.struct = { 'samba': { 'order': 1, @@ -280,57 +280,57 @@ def __init__(self, oeMain): } self.oe = oeMain - oeMain.dbg_log('services::__init__', 'exit_function', 0) + oeMain.dbg_log('services::__init__', 'exit_function', oeMain.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::__init__', 'ERROR: (%s)' % repr(e)) def start_service(self): try: - self.oe.dbg_log('services::start_service', 'enter_function', 0) + self.oe.dbg_log('services::start_service', 'enter_function', self.oe.LOGDEBUG) self.load_values() self.initialize_samba(service=1) self.initialize_ssh(service=1) self.initialize_avahi(service=1) self.initialize_cron(service=1) self.init_bluetooth(service=1) - self.oe.dbg_log('services::start_service', 'exit_function', 0) + self.oe.dbg_log('services::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::start_service', 'ERROR: (%s)' % repr(e)) def stop_service(self): try: - self.oe.dbg_log('services::stop_service', 'enter_function', 0) - self.oe.dbg_log('services::stop_service', 'exit_function', 0) + self.oe.dbg_log('services::stop_service', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('services::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): try: - self.oe.dbg_log('services::do_init', 'exit_function', 0) + self.oe.dbg_log('services::do_init', 'exit_function', self.oe.LOGDEBUG) self.load_values() - self.oe.dbg_log('services::do_init', 'exit_function', 0) + self.oe.dbg_log('services::do_init', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::do_init', 'ERROR: (%s)' % repr(e)) def set_value(self, listItem): try: - self.oe.dbg_log('services::set_value', 'enter_function', 0) + self.oe.dbg_log('services::set_value', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') - self.oe.dbg_log('services::set_value', 'exit_function', 0) + self.oe.dbg_log('services::set_value', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::set_value', 'ERROR: (' + repr(e) + ')') def load_menu(self, focusItem): try: - self.oe.dbg_log('services::load_menu', 'enter_function', 0) + self.oe.dbg_log('services::load_menu', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.build_menu(self.struct) - self.oe.dbg_log('services::load_menu', 'exit_function', 0) + self.oe.dbg_log('services::load_menu', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::load_menu', 'ERROR: (%s)' % repr(e)) def load_values(self): try: - self.oe.dbg_log('services::load_values', 'enter_function', 0) + self.oe.dbg_log('services::load_values', 'enter_function', self.oe.LOGDEBUG) # SAMBA @@ -405,13 +405,13 @@ def load_values(self): else: self.struct['bluez']['hidden'] = 'true' - self.oe.dbg_log('services::load_values', 'exit_function', 0) + self.oe.dbg_log('services::load_values', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::load_values', 'ERROR: (%s)' % repr(e)) def initialize_samba(self, **kwargs): try: - self.oe.dbg_log('services::initialize_samba', 'enter_function', 0) + self.oe.dbg_log('services::initialize_samba', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -443,14 +443,14 @@ def initialize_samba(self, **kwargs): self.struct['samba']['settings']['samba_password']['hidden'] = True self.oe.set_service('samba', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_samba', 'exit_function', 0) + self.oe.dbg_log('services::initialize_samba', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_samba', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('services::initialize_samba', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def initialize_ssh(self, **kwargs): try: - self.oe.dbg_log('services::initialize_ssh', 'enter_function', 0) + self.oe.dbg_log('services::initialize_ssh', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -468,14 +468,14 @@ def initialize_ssh(self, **kwargs): state = 0 self.oe.set_service('sshd', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_ssh', 'exit_function', 0) + self.oe.dbg_log('services::initialize_ssh', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_ssh', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('services::initialize_ssh', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def initialize_avahi(self, **kwargs): try: - self.oe.dbg_log('services::initialize_avahi', 'enter_function', 0) + self.oe.dbg_log('services::initialize_avahi', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -485,14 +485,14 @@ def initialize_avahi(self, **kwargs): state = 0 self.oe.set_service('avahi', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_avahi', 'exit_function', 0) + self.oe.dbg_log('services::initialize_avahi', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_avahi', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('services::initialize_avahi', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def initialize_cron(self, **kwargs): try: - self.oe.dbg_log('services::initialize_cron', 'enter_function', 0) + self.oe.dbg_log('services::initialize_cron', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -502,14 +502,14 @@ def initialize_cron(self, **kwargs): state = 0 self.oe.set_service('crond', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_cron', 'exit_function', 0) + self.oe.dbg_log('services::initialize_cron', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::initialize_cron', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('services::initialize_cron', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def init_bluetooth(self, **kwargs): try: - self.oe.dbg_log('services::init_bluetooth', 'enter_function', 0) + self.oe.dbg_log('services::init_bluetooth', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -526,14 +526,14 @@ def init_bluetooth(self, **kwargs): del self.struct['bluez']['settings']['obex_root']['hidden'] self.oe.set_service('bluez', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::init_bluetooth', 'exit_function', 0) + self.oe.dbg_log('services::init_bluetooth', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::init_bluetooth', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('services::init_bluetooth', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def init_obex(self, **kwargs): try: - self.oe.dbg_log('services::init_obex', 'enter_function', 0) + self.oe.dbg_log('services::init_obex', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) @@ -545,34 +545,34 @@ def init_obex(self, **kwargs): state = 0 self.oe.set_service('obexd', options, state) self.oe.set_busy(0) - self.oe.dbg_log('services::init_obex', 'exit_function', 0) + self.oe.dbg_log('services::init_obex', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::init_obex', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('services::init_obex', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def idle_timeout(self, **kwargs): try: - self.oe.dbg_log('services::idle_timeout', 'enter_function', 0) + self.oe.dbg_log('services::idle_timeout', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if 'listItem' in kwargs: self.set_value(kwargs['listItem']) self.oe.write_setting('bluetooth', 'idle_timeout', self.struct['bluez']['settings']['idle_timeout']['value']) self.oe.set_busy(0) - self.oe.dbg_log('services::idle_timeout', 'exit_function', 0) + self.oe.dbg_log('services::idle_timeout', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('services::idle_timeout', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('services::idle_timeout', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def exit(self): try: - self.oe.dbg_log('services::exit', 'enter_function', 0) - self.oe.dbg_log('services::exit', 'exit_function', 0) + self.oe.dbg_log('services::exit', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('services::exit', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('services::exit', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('services::exit', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def do_wizard(self): try: - self.oe.dbg_log('services::do_wizard', 'enter_function', 0) + self.oe.dbg_log('services::do_wizard', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.set_wizard_title(self.oe._(32311)) # Enable samba @@ -585,13 +585,13 @@ def do_wizard(self): self.oe.winOeMain.set_wizard_text(self.oe._(32312)) self.oe.winOeMain.set_wizard_button_title(self.oe._(32316)) self.set_wizard_buttons() - self.oe.dbg_log('services::do_wizard', 'exit_function', 0) + self.oe.dbg_log('services::do_wizard', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::do_wizard', 'ERROR: (%s)' % repr(e)) def set_wizard_buttons(self): try: - self.oe.dbg_log('services::set_wizard_buttons', 'enter_function', 0) + self.oe.dbg_log('services::set_wizard_buttons', 'enter_function', self.oe.LOGDEBUG) if self.struct['ssh']['settings']['ssh_autostart']['value'] == '1': self.oe.winOeMain.set_wizard_radiobutton_1(self.oe._(32201), self, 'wizard_set_ssh', True) else: @@ -601,13 +601,13 @@ def set_wizard_buttons(self): self.oe.winOeMain.set_wizard_radiobutton_2(self.oe._(32200), self, 'wizard_set_samba', True) else: self.oe.winOeMain.set_wizard_radiobutton_2(self.oe._(32200), self, 'wizard_set_samba') - self.oe.dbg_log('services::set_wizard_buttons', 'exit_function', 0) + self.oe.dbg_log('services::set_wizard_buttons', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::set_wizard_buttons', 'ERROR: (%s)' % repr(e)) def wizard_set_ssh(self): try: - self.oe.dbg_log('services::wizard_set_ssh', 'enter_function', 0) + self.oe.dbg_log('services::wizard_set_ssh', 'enter_function', self.oe.LOGDEBUG) if self.struct['ssh']['settings']['ssh_autostart']['value'] == '1': self.struct['ssh']['settings']['ssh_autostart']['value'] = '0' else: @@ -625,13 +625,13 @@ def wizard_set_ssh(self): if self.struct['ssh']['settings']['ssh_autostart']['value'] == '1': self.wizard_sshpasswd() self.set_wizard_buttons() - self.oe.dbg_log('services::wizard_set_ssh', 'exit_function', 0) + self.oe.dbg_log('services::wizard_set_ssh', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::wizard_set_ssh', 'ERROR: (%s)' % repr(e)) def wizard_set_samba(self): try: - self.oe.dbg_log('services::wizard_set_samba', 'enter_function', 0) + self.oe.dbg_log('services::wizard_set_samba', 'enter_function', self.oe.LOGDEBUG) if self.struct['samba']['settings']['samba_autostart']['value'] == '1': self.struct['samba']['settings']['samba_autostart']['value'] = '0' else: @@ -639,7 +639,7 @@ def wizard_set_samba(self): self.initialize_samba() self.load_values() self.set_wizard_buttons() - self.oe.dbg_log('services::wizard_set_samba', 'exit_function', 0) + self.oe.dbg_log('services::wizard_set_samba', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('services::wizard_set_samba', 'ERROR: (%s)' % repr(e)) @@ -657,7 +657,7 @@ def wizard_sshpasswd(self): def do_sshpasswd(self, **kwargs): try: - self.oe.dbg_log('system::do_sshpasswd', 'enter_function', 0) + self.oe.dbg_log('system::do_sshpasswd', 'enter_function', self.oe.LOGDEBUG) SSHchange = False newpwd = xbmcDialog.input(self.oe._(746)) if newpwd: @@ -673,16 +673,16 @@ def do_sshpasswd(self, **kwargs): readout3 = ssh.stdout.readline() if "Bad password" in readout3: xbmcDialog.ok(self.oe._(32220), self.oe._(32221)) - self.oe.dbg_log('system::do_sshpasswd', 'exit_function password too weak', 0) + self.oe.dbg_log('system::do_sshpasswd', 'exit_function password too weak', self.oe.LOGDEBUG) return elif "Retype password" in readout3: xbmcDialog.ok(self.oe._(32222), self.oe._(32223)) SSHchange = True else: xbmcDialog.ok(self.oe._(32224), self.oe._(32225)) - self.oe.dbg_log('system::do_sshpasswd', 'exit_function', 0) + self.oe.dbg_log('system::do_sshpasswd', 'exit_function', self.oe.LOGDEBUG) else: - self.oe.dbg_log('system::do_sshpasswd', 'user_cancelled', 0) + self.oe.dbg_log('system::do_sshpasswd', 'user_cancelled', self.oe.LOGDEBUG) return SSHchange except Exception as e: self.oe.dbg_log('system::do_sshpasswd', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 1d16352b..03ddca34 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -41,7 +41,7 @@ class system: def __init__(self, oeMain): try: - oeMain.dbg_log('system::__init__', 'enter_function', 0) + oeMain.dbg_log('system::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.struct = { 'ident': { @@ -206,47 +206,47 @@ def __init__(self, oeMain): self.keyboard_layouts = False self.nox_keyboard_layouts = False self.arrVariants = {} - self.oe.dbg_log('system::__init__', 'exit_function', 0) + self.oe.dbg_log('system::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::__init__', 'ERROR: (' + repr(e) + ')') def start_service(self): try: - self.oe.dbg_log('system::start_service', 'enter_function', 0) + self.oe.dbg_log('system::start_service', 'enter_function', self.oe.LOGDEBUG) self.is_service = True self.load_values() self.set_hostname() self.set_keyboard_layout() self.set_hw_clock() del self.is_service - self.oe.dbg_log('system::start_service', 'exit_function', 0) + self.oe.dbg_log('system::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: 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) + self.oe.dbg_log('system::stop_service', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'update_thread'): self.update_thread.stop() - self.oe.dbg_log('system::stop_service', 'exit_function', 0) + self.oe.dbg_log('system::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): try: - self.oe.dbg_log('system::do_init', 'enter_function', 0) - self.oe.dbg_log('system::do_init', 'exit_function', 0) + self.oe.dbg_log('system::do_init', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('system::do_init', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_init', 'ERROR: (' + repr(e) + ')') def exit(self): - self.oe.dbg_log('system::exit', 'enter_function', 0) - self.oe.dbg_log('system::exit', 'exit_function', 0) + self.oe.dbg_log('system::exit', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('system::exit', 'exit_function', self.oe.LOGDEBUG) pass def load_values(self): try: - self.oe.dbg_log('system::load_values', 'enter_function', 0) + self.oe.dbg_log('system::load_values', 'enter_function', self.oe.LOGDEBUG) # Keyboard Layout ( @@ -300,24 +300,24 @@ def load_values(self): def load_menu(self, focusItem): try: - self.oe.dbg_log('system::load_menu', 'enter_function', 0) + self.oe.dbg_log('system::load_menu', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.build_menu(self.struct) - self.oe.dbg_log('system::load_menu', 'exit_function', 0) + self.oe.dbg_log('system::load_menu', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::load_menu', 'ERROR: (' + repr(e) + ')') def set_value(self, listItem): try: - self.oe.dbg_log('system::set_value', 'enter_function', 0) + self.oe.dbg_log('system::set_value', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.oe.write_setting('system', listItem.getProperty('entry'), str(listItem.getProperty('value'))) - self.oe.dbg_log('system::set_value', 'exit_function', 0) + self.oe.dbg_log('system::set_value', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::set_value', 'ERROR: (' + repr(e) + ')') def set_keyboard_layout(self, listItem=None): try: - self.oe.dbg_log('system::set_keyboard_layout', 'enter_function', 0) + self.oe.dbg_log('system::set_keyboard_layout', 'enter_function', self.oe.LOGDEBUG) if not listItem == None: if listItem.getProperty('entry') == 'KeyboardLayout1': if self.struct['keyboard']['settings']['KeyboardLayout1']['value'] != listItem.getProperty('value'): @@ -333,7 +333,7 @@ def set_keyboard_layout(self, listItem=None): ]['KeyboardLayout2']['value']] self.oe.dbg_log('system::set_keyboard_layout', str(self.struct['keyboard']['settings']['KeyboardLayout1']['value']) + ',' + str(self.struct['keyboard']['settings']['KeyboardLayout2']['value']) + ' ' + '-model ' - + str(self.struct['keyboard']['settings']['KeyboardType']['value']), 1) + + str(self.struct['keyboard']['settings']['KeyboardType']['value']), self.oe.LOGINFO) if not os.path.exists(os.path.dirname(self.UDEV_KEYBOARD_INFO)): os.makedirs(os.path.dirname(self.UDEV_KEYBOARD_INFO)) config_file = open(self.UDEV_KEYBOARD_INFO, 'w') @@ -355,24 +355,24 @@ def set_keyboard_layout(self, listItem=None): ] self.oe.execute('setxkbmap ' + ' '.join(parameters)) elif self.nox_keyboard_layouts == True: - self.oe.dbg_log('system::set_keyboard_layout', str(self.struct['keyboard']['settings']['KeyboardLayout1']['value']), 1) + self.oe.dbg_log('system::set_keyboard_layout', str(self.struct['keyboard']['settings']['KeyboardLayout1']['value']), self.oe.LOGINFO) parameter = self.struct['keyboard']['settings']['KeyboardLayout1']['value'] command = 'loadkmap < `ls -1 %s/*/%s.bmap`' % (self.NOX_KEYBOARD_INFO, parameter) - self.oe.dbg_log('system::set_keyboard_layout', command, 1) + self.oe.dbg_log('system::set_keyboard_layout', command, self.oe.LOGINFO) self.oe.execute(command) - self.oe.dbg_log('system::set_keyboard_layout', 'exit_function', 0) + self.oe.dbg_log('system::set_keyboard_layout', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::set_keyboard_layout', 'ERROR: (' + repr(e) + ')') def set_hostname(self, listItem=None): try: - self.oe.dbg_log('system::set_hostname', 'enter_function', 0) + self.oe.dbg_log('system::set_hostname', 'enter_function', self.oe.LOGDEBUG) self.oe.set_busy(1) if not listItem == None: self.set_value(listItem) 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.struct['ident']['settings']['hostname']['value'], 1) + self.oe.dbg_log('system::set_hostname', self.struct['ident']['settings']['hostname']['value'], self.oe.LOGINFO) hostname = open('/proc/sys/kernel/hostname', 'w') hostname.write(self.struct['ident']['settings']['hostname']['value']) hostname.close() @@ -389,16 +389,16 @@ def set_hostname(self, listItem=None): hosts.write('::1\tlocalhost ip6-localhost ip6-loopback %s\n' % self.struct['ident']['settings']['hostname']['value']) hosts.close() else: - self.oe.dbg_log('system::set_hostname', 'is empty', 1) + self.oe.dbg_log('system::set_hostname', 'is empty', self.oe.LOGINFO) self.oe.set_busy(0) - self.oe.dbg_log('system::set_hostname', 'exit_function', 0) + self.oe.dbg_log('system::set_hostname', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) self.oe.dbg_log('system::set_hostname', 'ERROR: (' + repr(e) + ')') def get_keyboard_layouts(self): try: - self.oe.dbg_log('system::get_keyboard_layouts', 'enter_function', 0) + self.oe.dbg_log('system::get_keyboard_layouts', 'enter_function', self.oe.LOGDEBUG) arrLayouts = [] arrVariants = {} arrTypes = [] @@ -452,9 +452,9 @@ def get_keyboard_layouts(self): arrLayouts.sort() arrTypes.sort() else: - self.oe.dbg_log('system::get_keyboard_layouts', 'exit_function (no keyboard layouts found)', 0) + self.oe.dbg_log('system::get_keyboard_layouts', 'exit_function (no keyboard layouts found)', self.oe.LOGDEBUG) return (None, None, None) - self.oe.dbg_log('system::get_keyboard_layouts', 'exit_function', 0) + self.oe.dbg_log('system::get_keyboard_layouts', 'exit_function', self.oe.LOGDEBUG) return ( arrLayouts, arrTypes, @@ -466,15 +466,15 @@ def get_keyboard_layouts(self): def set_hw_clock(self): try: - self.oe.dbg_log('system::set_hw_clock', 'enter_function', 0) + self.oe.dbg_log('system::set_hw_clock', 'enter_function', self.oe.LOGDEBUG) self.oe.execute('%s 2>/dev/null' % self.SET_CLOCK_CMD) - self.oe.dbg_log('system::set_hw_clock', 'exit_function', 0) + self.oe.dbg_log('system::set_hw_clock', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('system::set_hw_clock', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('system::set_hw_clock', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def reset_xbmc(self, listItem=None): try: - self.oe.dbg_log('system::reset_xbmc', 'enter_function', 0) + self.oe.dbg_log('system::reset_xbmc', 'enter_function', self.oe.LOGDEBUG) if self.ask_sure_reset('Soft') == 1: self.oe.set_busy(1) reset_file = open(self.XBMC_RESET_FILE, 'w') @@ -484,14 +484,14 @@ def reset_xbmc(self, listItem=None): self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') self.oe.set_busy(0) - self.oe.dbg_log('system::reset_xbmc', 'exit_function', 0) + self.oe.dbg_log('system::reset_xbmc', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('system::reset_xbmc', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('system::reset_xbmc', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def reset_oe(self, listItem=None): try: - self.oe.dbg_log('system::reset_oe', 'enter_function', 0) + self.oe.dbg_log('system::reset_oe', 'enter_function', self.oe.LOGDEBUG) if self.ask_sure_reset('Hard') == 1: self.oe.set_busy(1) reset_file = open(self.LIBREELEC_RESET_FILE, 'w') @@ -501,14 +501,14 @@ def reset_oe(self, listItem=None): self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') self.oe.set_busy(0) - self.oe.dbg_log('system::reset_oe', 'exit_function', 0) + self.oe.dbg_log('system::reset_oe', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('system::reset_oe', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('system::reset_oe', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def ask_sure_reset(self, part): try: - self.oe.dbg_log('system::ask_sure_reset', 'enter_function', 0) + self.oe.dbg_log('system::ask_sure_reset', 'enter_function', self.oe.LOGDEBUG) xbmcDialog = xbmcgui.Dialog() answer = xbmcDialog.yesno(part + ' Reset', '%s\n\n%s' % (self.oe._(32326), self.oe._(32328))) if answer == 1: @@ -516,14 +516,14 @@ def ask_sure_reset(self, part): return 1 else: return 0 - self.oe.dbg_log('system::ask_sure_reset', 'exit_function', 0) + self.oe.dbg_log('system::ask_sure_reset', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.set_busy(0) - self.oe.dbg_log('system::ask_sure_reset', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('system::ask_sure_reset', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def do_backup(self, listItem=None): try: - self.oe.dbg_log('system::do_backup', 'enter_function', 0) + self.oe.dbg_log('system::do_backup', 'enter_function', self.oe.LOGDEBUG) self.total_backup_size = 1 self.done_backup_size = 1 @@ -568,7 +568,7 @@ def do_backup(self, listItem=None): tar.close() self.backup_dlg.close() del self.backup_dlg - self.oe.dbg_log('system::do_backup', 'exit_function', 0) + self.oe.dbg_log('system::do_backup', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.backup_dlg.close() @@ -576,7 +576,7 @@ def do_backup(self, listItem=None): def do_restore(self, listItem=None): try: - self.oe.dbg_log('system::do_restore', 'enter_function', 0) + self.oe.dbg_log('system::do_restore', 'enter_function', self.oe.LOGDEBUG) copy_success = 0 xbmcDialog = xbmcgui.Dialog() restore_file_path = xbmcDialog.browse( 1, @@ -622,31 +622,31 @@ def do_restore(self, listItem=None): self.oe.xbmcm.waitForAbort(1) xbmc.executebuiltin('Reboot') else: - self.oe.dbg_log('system::do_restore', 'User Abort!', 0) + self.oe.dbg_log('system::do_restore', 'User Abort!', self.oe.LOGDEBUG) self.oe.execute('rm -rf %s' % self.RESTORE_DIR) - self.oe.dbg_log('system::do_restore', 'exit_function', 0) + self.oe.dbg_log('system::do_restore', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_restore', 'ERROR: (' + repr(e) + ')') def do_send_system_logs(self, listItem=None): try: - self.oe.dbg_log('system::do_send_system_logs', 'enter_function', 0) + self.oe.dbg_log('system::do_send_system_logs', 'enter_function', self.oe.LOGDEBUG) self.do_send_logs('/usr/bin/pastekodi') - self.oe.dbg_log('system::do_send_system_logs', 'exit_function', 0) + self.oe.dbg_log('system::do_send_system_logs', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_do_send_system_logs', 'ERROR: (' + repr(e) + ')') def do_send_crash_logs(self, listItem=None): try: - self.oe.dbg_log('system::do_send_crash_logs', 'enter_function', 0) + self.oe.dbg_log('system::do_send_crash_logs', 'enter_function', self.oe.LOGDEBUG) self.do_send_logs('/usr/bin/pastecrash') - self.oe.dbg_log('system::do_send_crash_logs', 'exit_function', 0) + self.oe.dbg_log('system::do_send_crash_logs', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_do_send_crash_logs', 'ERROR: (' + repr(e) + ')') def do_send_logs(self, log_cmd): try: - self.oe.dbg_log('system::do_send_logs', 'enter_function', 0) + self.oe.dbg_log('system::do_send_logs', 'enter_function', self.oe.LOGDEBUG) paste_dlg = xbmcgui.DialogProgress() paste_dlg.create('Pasting log files', 'Pasting...') @@ -658,12 +658,12 @@ def do_send_logs(self, log_cmd): done_dlg = xbmcgui.Dialog() link = result.find('http') if link != -1: - self.oe.dbg_log('system::do_send_logs', result[link:], 2) + self.oe.dbg_log('system::do_send_logs', result[link:], self.oe.LOGWARNING) done_dlg.ok('Paste complete', 'Log files pasted to %s' % result[link:]) else: done_dlg.ok('Failed paste', 'Failed to paste log files, try again') - self.oe.dbg_log('system::do_send_logs', 'exit_function', 0) + self.oe.dbg_log('system::do_send_logs', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_do_send_logs', 'ERROR: (' + repr(e) + ')') @@ -712,7 +712,7 @@ def get_folder_size(self, folder): def init_pinlock(self, listItem=None): try: - self.oe.dbg_log('system::init_pinlock', 'enter_function', 0) + self.oe.dbg_log('system::init_pinlock', 'enter_function', self.oe.LOGDEBUG) if not listItem == None: self.set_value(listItem) @@ -724,13 +724,13 @@ def init_pinlock(self, listItem=None): if self.oe.PIN.isEnabled() and self.oe.PIN.isSet() == False: self.set_pinlock() - self.oe.dbg_log('system::init_pinlock', 'exit_function', 0) + self.oe.dbg_log('system::init_pinlock', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('system::init_pinlock', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('system::init_pinlock', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def set_pinlock(self, listItem=None): try: - self.oe.dbg_log('system::set_pinlock', 'enter_function', 0) + self.oe.dbg_log('system::set_pinlock', 'enter_function', self.oe.LOGDEBUG) newpin = xbmcDialog.input(self.oe._(32226), type=xbmcgui.INPUT_NUMERIC) if len(newpin) == 4 : newpinConfirm = xbmcDialog.input(self.oe._(32227), type=xbmcgui.INPUT_NUMERIC) @@ -744,24 +744,24 @@ def set_pinlock(self, listItem=None): if self.oe.PIN.isSet() == False: self.struct['pinlock']['settings']['pinlock_enable']['value'] = '0' self.oe.PIN.disable() - self.oe.dbg_log('system::set_pinlock', 'exit_function', 0) + self.oe.dbg_log('system::set_pinlock', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('system::set_pinlock', 'ERROR: (%s)' % repr(e), 4) + self.oe.dbg_log('system::set_pinlock', 'ERROR: (%s)' % repr(e), self.oe.LOGERROR) def do_wizard(self): try: - self.oe.dbg_log('system::do_wizard', 'enter_function', 0) + self.oe.dbg_log('system::do_wizard', 'enter_function', self.oe.LOGDEBUG) 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.struct['ident']['settings']['hostname']['value'], self, 'wizard_set_hostname') - self.oe.dbg_log('system::do_wizard', 'exit_function', 0) + self.oe.dbg_log('system::do_wizard', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::do_wizard', 'ERROR: (' + repr(e) + ')') def wizard_set_hostname(self): try: - self.oe.dbg_log('system::wizard_set_hostname', 'enter_function', 0) + self.oe.dbg_log('system::wizard_set_hostname', 'enter_function', self.oe.LOGDEBUG) currentHostname = self.struct['ident']['settings']['hostname']['value'] xbmcKeyboard = xbmc.Keyboard(currentHostname) result_is_valid = False @@ -780,6 +780,6 @@ def wizard_set_hostname(self): self.set_hostname() self.oe.winOeMain.getControl(1401).setLabel(self.struct['ident']['settings']['hostname']['value']) self.oe.write_setting('system', 'hostname', self.struct['ident']['settings']['hostname']['value']) - self.oe.dbg_log('system::wizard_set_hostname', 'exit_function', 0) + self.oe.dbg_log('system::wizard_set_hostname', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('system::wizard_set_hostname', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/updates.py b/src/resources/lib/modules/updates.py index 15eeb68b..310155af 100644 --- a/src/resources/lib/modules/updates.py +++ b/src/resources/lib/modules/updates.py @@ -36,7 +36,7 @@ class updates: def __init__(self, oeMain): try: - oeMain.dbg_log('updates::__init__', 'enter_function', 0) + oeMain.dbg_log('updates::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.struct = { 'update': { @@ -171,40 +171,40 @@ def __init__(self, oeMain): self.nox_keyboard_layouts = False self.last_update_check = 0 self.arrVariants = {} - self.oe.dbg_log('updates::__init__', 'exit_function', 0) + self.oe.dbg_log('updates::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::__init__', 'ERROR: (' + repr(e) + ')') def start_service(self): try: - self.oe.dbg_log('updates::start_service', 'enter_function', 0) + self.oe.dbg_log('updates::start_service', 'enter_function', self.oe.LOGDEBUG) self.is_service = True self.load_values() self.set_auto_update() del self.is_service - self.oe.dbg_log('updates::start_service', 'exit_function', 0) + self.oe.dbg_log('updates::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::start_service', 'ERROR: (' + repr(e) + ')') def stop_service(self): try: - self.oe.dbg_log('updates::stop_service', 'enter_function', 0) + self.oe.dbg_log('updates::stop_service', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'update_thread'): self.update_thread.stop() - self.oe.dbg_log('updates::stop_service', 'exit_function', 0) + self.oe.dbg_log('updates::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::stop_service', 'ERROR: (' + repr(e) + ')') def do_init(self): try: - self.oe.dbg_log('updates::do_init', 'enter_function', 0) - self.oe.dbg_log('updates::do_init', 'exit_function', 0) + self.oe.dbg_log('updates::do_init', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('updates::do_init', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::do_init', 'ERROR: (' + repr(e) + ')') def exit(self): - self.oe.dbg_log('updates::exit', 'enter_function', 0) - self.oe.dbg_log('updates::exit', 'exit_function', 0) + self.oe.dbg_log('updates::exit', 'enter_function', self.oe.LOGDEBUG) + self.oe.dbg_log('updates::exit', 'exit_function', self.oe.LOGDEBUG) pass # Identify connected GPU card (card0, card1 etc.) @@ -227,10 +227,10 @@ def get_hardware_flags_x86_64(self): gpu_driver = "" gpu_card = self.get_gpu_card() - self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'Using card: %s' % gpu_card, 0) + self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'Using card: %s' % gpu_card, self.oe.LOGDEBUG) gpu_path = self.oe.execute('/usr/bin/udevadm info --name=/dev/dri/%s --query path 2>/dev/null' % gpu_card, get_result=1).replace('\n','') - self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'gpu path: %s' % gpu_path, 0) + self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'gpu path: %s' % gpu_path, self.oe.LOGDEBUG) if gpu_path: drv_path = os.path.dirname(os.path.dirname(gpu_path)) @@ -239,7 +239,7 @@ def get_hardware_flags_x86_64(self): if props: for key, value in [x.strip().split('=') for x in props.strip().split('\n')]: gpu_props[key] = value - self.oe.dbg_log('updates::get_gpu_type', 'gpu props: %s' % gpu_props, 0) + self.oe.dbg_log('updates::get_gpu_type', 'gpu props: %s' % gpu_props, self.oe.LOGDEBUG) gpu_driver = gpu_props.get("DRIVER", "") if not gpu_driver: @@ -248,13 +248,13 @@ def get_hardware_flags_x86_64(self): if gpu_driver == 'nvidia' and os.path.realpath('/var/lib/nvidia_drv.so').endswith('nvidia-legacy_drv.so'): gpu_driver = 'nvidia-legacy' - self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'gpu driver: %s' % gpu_driver, 0) + self.oe.dbg_log('updates::get_hardware_flags_x86_64', 'gpu driver: %s' % gpu_driver, self.oe.LOGDEBUG) return gpu_driver if gpu_driver else "unknown" def get_hardware_flags_rpi(self): revision = self.oe.execute('grep "^Revision" /proc/cpuinfo | awk \'{ print $3 }\'',get_result=1).replace('\n','') - self.oe.dbg_log('updates::get_hardware_flags_rpi', 'Revision code: %s' % revision, 0) + self.oe.dbg_log('updates::get_hardware_flags_rpi', 'Revision code: %s' % revision, self.oe.LOGDEBUG) return '{:08x}'.format(int(revision, 16)) @@ -264,7 +264,7 @@ def get_hardware_flags_dtname(self): else: dtname = "unknown" - self.oe.dbg_log('system::get_hardware_flags_dtname', 'ARM board: %s' % dtname, 0) + self.oe.dbg_log('system::get_hardware_flags_dtname', 'ARM board: %s' % dtname, self.oe.LOGDEBUG) return dtname @@ -276,16 +276,16 @@ def get_hardware_flags(self): elif self.oe.PROJECT in ['Allwinner', 'Amlogic', 'NXP', 'Qualcomm', 'Rockchip', 'Samsung' ]: return self.get_hardware_flags_dtname() else: - self.oe.dbg_log('updates::get_hardware_flags', 'Project is %s, no hardware flag available' % self.oe.PROJECT, 0) + self.oe.dbg_log('updates::get_hardware_flags', 'Project is %s, no hardware flag available' % self.oe.PROJECT, self.oe.LOGDEBUG) return "" def load_values(self): try: - self.oe.dbg_log('updates::load_values', 'enter_function', 0) + self.oe.dbg_log('updates::load_values', 'enter_function', self.oe.LOGDEBUG) # Hardware flags self.hardware_flags = self.get_hardware_flags() - self.oe.dbg_log('system::load_values', 'loaded hardware_flag %s' % self.hardware_flags, 0) + self.oe.dbg_log('system::load_values', 'loaded hardware_flag %s' % self.hardware_flags, self.oe.LOGDEBUG) # AutoUpdate @@ -338,31 +338,31 @@ def load_values(self): else: self.struct['rpieeprom']['hidden'] = 'true' - self.oe.dbg_log('updates::load_values', 'exit_function', 0) + self.oe.dbg_log('updates::load_values', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::load_values', 'ERROR: (' + repr(e) + ')') def load_menu(self, focusItem): try: - self.oe.dbg_log('updates::load_menu', 'enter_function', 0) + self.oe.dbg_log('updates::load_menu', 'enter_function', self.oe.LOGDEBUG) self.oe.winOeMain.build_menu(self.struct) - self.oe.dbg_log('updates::load_menu', 'exit_function', 0) + self.oe.dbg_log('updates::load_menu', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::load_menu', 'ERROR: (' + repr(e) + ')') def set_value(self, listItem): try: - self.oe.dbg_log('updates::set_value', 'enter_function', 0) + self.oe.dbg_log('updates::set_value', 'enter_function', self.oe.LOGDEBUG) self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = listItem.getProperty('value') self.oe.write_setting('updates', listItem.getProperty('entry'), str(listItem.getProperty('value'))) - self.oe.dbg_log('updates::set_value', 'exit_function', 0) + self.oe.dbg_log('updates::set_value', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_value', 'ERROR: (' + repr(e) + ')') def set_auto_update(self, listItem=None): try: - self.oe.dbg_log('updates::set_auto_update', 'enter_function', 0) + self.oe.dbg_log('updates::set_auto_update', 'enter_function', self.oe.LOGDEBUG) if not listItem == None: self.set_value(listItem) if not hasattr(self, 'update_disabled'): @@ -371,24 +371,24 @@ def set_auto_update(self, listItem=None): self.update_thread.start() else: self.update_thread.wait_evt.set() - self.oe.dbg_log('updates::set_auto_update', str(self.struct['update']['settings']['AutoUpdate']['value']), 1) - self.oe.dbg_log('updates::set_auto_update', 'exit_function', 0) + self.oe.dbg_log('updates::set_auto_update', str(self.struct['update']['settings']['AutoUpdate']['value']), self.oe.LOGINFO) + self.oe.dbg_log('updates::set_auto_update', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_auto_update', 'ERROR: (' + repr(e) + ')') def set_channel(self, listItem=None): try: - self.oe.dbg_log('updates::set_channel', 'enter_function', 0) + self.oe.dbg_log('updates::set_channel', 'enter_function', self.oe.LOGDEBUG) if not listItem == None: self.set_value(listItem) self.struct['update']['settings']['Build']['values'] = self.get_available_builds() - self.oe.dbg_log('updates::set_channel', 'exit_function', 0) + self.oe.dbg_log('updates::set_channel', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_channel', 'ERROR: (' + repr(e) + ')') def set_custom_channel(self, listItem=None): try: - self.oe.dbg_log('updates::set_custom_channel', 'enter_function', 0) + self.oe.dbg_log('updates::set_custom_channel', 'enter_function', self.oe.LOGDEBUG) if not listItem == None: self.set_value(listItem) self.update_json = self.build_json() @@ -397,7 +397,7 @@ def set_custom_channel(self, listItem=None): if not self.struct['update']['settings']['Channel']['value'] in self.struct['update']['settings']['Channel']['values']: self.struct['update']['settings']['Channel']['value'] = None self.struct['update']['settings']['Build']['values'] = self.get_available_builds() - self.oe.dbg_log('updates::set_custom_channel', 'exit_function', 0) + self.oe.dbg_log('updates::set_custom_channel', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_custom_channel', 'ERROR: (' + repr(e) + ')') @@ -417,20 +417,20 @@ def custom_sort_train(self, a, b): def get_channels(self): try: - self.oe.dbg_log('updates::get_channels', 'enter_function', 0) + self.oe.dbg_log('updates::get_channels', 'enter_function', self.oe.LOGDEBUG) channels = [] - self.oe.dbg_log('updates::get_channels', str(self.update_json), 0) + self.oe.dbg_log('updates::get_channels', str(self.update_json), self.oe.LOGDEBUG) if not self.update_json is None: for channel in self.update_json: channels.append(channel) - self.oe.dbg_log('updates::get_channels', 'exit_function', 0) + self.oe.dbg_log('updates::get_channels', 'exit_function', self.oe.LOGDEBUG) return sorted(list(set(channels)), key=cmp_to_key(self.custom_sort_train)) except Exception as e: self.oe.dbg_log('updates::get_channels', 'ERROR: (' + repr(e) + ')') def do_manual_update(self, listItem=None): try: - self.oe.dbg_log('updates::do_manual_update', 'enter_function', 0) + self.oe.dbg_log('updates::do_manual_update', 'enter_function', self.oe.LOGDEBUG) self.struct['update']['settings']['Build']['value'] = '' update_json = self.build_json(notify_error=True) if update_json is None: @@ -460,13 +460,13 @@ def do_manual_update(self, listItem=None): self.update_in_progress = True self.do_autoupdate() self.struct['update']['settings']['Build']['value'] = '' - self.oe.dbg_log('updates::do_manual_update', 'exit_function', 0) + self.oe.dbg_log('updates::do_manual_update', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::do_manual_update', 'ERROR: (' + repr(e) + ')') def get_json(self, url=None): try: - self.oe.dbg_log('updates::get_json', 'enter_function', 0) + self.oe.dbg_log('updates::get_json', 'enter_function', self.oe.LOGDEBUG) if url is None: url = self.UPDATE_DOWNLOAD_URL % ('releases', 'releases.json') if url.split('/')[-1] != 'releases.json': @@ -476,14 +476,14 @@ def get_json(self, url=None): update_json = json.loads(data) else: update_json = None - self.oe.dbg_log('updates::get_json', 'exit_function', 0) + self.oe.dbg_log('updates::get_json', 'exit_function', self.oe.LOGDEBUG) return update_json except Exception as e: self.oe.dbg_log('updates::get_json', 'ERROR: (' + repr(e) + ')') def build_json(self, notify_error=False): try: - self.oe.dbg_log('updates::build_json', 'enter_function', 0) + self.oe.dbg_log('updates::build_json', 'enter_function', self.oe.LOGDEBUG) update_json = self.get_json() if self.struct['update']['settings']['ShowCustomChannels']['value'] == '1': custom_urls = [] @@ -500,14 +500,14 @@ def build_json(self, notify_error=False): answer = ok_window.ok(self.oe._(32191), 'Custom URL is not valid, or currently inaccessible.\n\n%s' % custom_url) if not answer: return - self.oe.dbg_log('updates::build_json', 'exit_function', 0) + self.oe.dbg_log('updates::build_json', 'exit_function', self.oe.LOGDEBUG) return update_json except Exception as e: self.oe.dbg_log('updates::build_json', 'ERROR: (' + repr(e) + ')') def get_available_builds(self, shortname=None): try: - self.oe.dbg_log('updates::get_available_builds', 'enter_function', 0) + self.oe.dbg_log('updates::get_available_builds', 'enter_function', self.oe.LOGDEBUG) channel = self.struct['update']['settings']['Channel']['value'] update_files = [] build = None @@ -523,7 +523,7 @@ def get_available_builds(self, shortname=None): build = self.update_json[channel]['project'][self.oe.ARCHITECTURE]['releases'][i]['file']['name'] if shortname in build: break - self.oe.dbg_log('updates::get_available_builds', 'exit_function', 0) + self.oe.dbg_log('updates::get_available_builds', 'exit_function', self.oe.LOGDEBUG) if build is None: return update_files else: @@ -533,9 +533,9 @@ def get_available_builds(self, shortname=None): def check_updates_v2(self, force=False): try: - self.oe.dbg_log('updates::check_updates_v2', 'enter_function', 0) + self.oe.dbg_log('updates::check_updates_v2', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'update_in_progress'): - self.oe.dbg_log('updates::check_updates_v2', 'Update in progress (exit)', 0) + self.oe.dbg_log('updates::check_updates_v2', 'Update in progress (exit)', self.oe.LOGDEBUG) return if self.struct['update']['settings']['SubmitStats']['value'] == '1': systemid = self.oe.SYSTEMID @@ -556,9 +556,9 @@ def check_updates_v2(self, force=False): if self.oe.BUILDER_NAME: url += '&b=%s' % self.oe.url_quote(self.oe.BUILDER_NAME) - self.oe.dbg_log('updates::check_updates_v2', 'URL: %s' % url, 0) + self.oe.dbg_log('updates::check_updates_v2', 'URL: %s' % url, self.oe.LOGDEBUG) update_json = self.oe.load_url(url) - self.oe.dbg_log('updates::check_updates_v2', 'RESULT: %s' % repr(update_json), 0) + self.oe.dbg_log('updates::check_updates_v2', 'RESULT: %s' % repr(update_json), self.oe.LOGDEBUG) if update_json != '': update_json = json.loads(update_json) self.last_update_check = time.time() @@ -569,13 +569,13 @@ def check_updates_v2(self, force=False): if self.struct['update']['settings']['AutoUpdate']['value'] == 'auto' and force == False: self.update_in_progress = True self.do_autoupdate(None, True) - self.oe.dbg_log('updates::check_updates_v2', 'exit_function', 0) + self.oe.dbg_log('updates::check_updates_v2', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::check_updates_v2', 'ERROR: (' + repr(e) + ')') def do_autoupdate(self, listItem=None, silent=False): try: - self.oe.dbg_log('updates::do_autoupdate', 'enter_function', 0) + self.oe.dbg_log('updates::do_autoupdate', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'update_file'): if not os.path.exists(self.LOCAL_UPDATE_DIR): os.makedirs(self.LOCAL_UPDATE_DIR) @@ -593,13 +593,13 @@ def do_autoupdate(self, listItem=None, silent=False): else: delattr(self, 'update_in_progress') - self.oe.dbg_log('updates::do_autoupdate', 'exit_function', 0) + self.oe.dbg_log('updates::do_autoupdate', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::do_autoupdate', 'ERROR: (' + repr(e) + ')') def get_rpi_flashing_state(self): try: - self.oe.dbg_log('updates::get_rpi_flashing_state', 'enter_function', 0) + self.oe.dbg_log('updates::get_rpi_flashing_state', 'enter_function', self.oe.LOGDEBUG) jdata = { 'EXITCODE': 'EXIT_FAILED', @@ -619,8 +619,8 @@ def get_rpi_flashing_state(self): state['incompatible'] = False jdata = json.load(machine_out) - self.oe.dbg_log('updates::get_rpi_flashing_state', 'console output: %s' % console_output, 0) - self.oe.dbg_log('updates::get_rpi_flashing_state', 'json values: %s' % jdata, 0) + self.oe.dbg_log('updates::get_rpi_flashing_state', 'console output: %s' % console_output, self.oe.LOGDEBUG) + self.oe.dbg_log('updates::get_rpi_flashing_state', 'json values: %s' % jdata, self.oe.LOGDEBUG) if jdata['BOOTLOADER_CURRENT'] != 0: state['bootloader']['current'] = datetime.datetime.utcfromtimestamp(jdata['BOOTLOADER_CURRENT']).strftime('%Y-%m-%d') @@ -645,8 +645,8 @@ def get_rpi_flashing_state(self): else: state['vl805']['state'] = self.oe._(32029) % state['vl805']['current'] - self.oe.dbg_log('updates::get_rpi_flashing_state', 'state: %s' % state, 0) - self.oe.dbg_log('updates::get_rpi_flashing_state', 'exit_function', 0) + self.oe.dbg_log('updates::get_rpi_flashing_state', 'state: %s' % state, self.oe.LOGDEBUG) + self.oe.dbg_log('updates::get_rpi_flashing_state', 'exit_function', self.oe.LOGDEBUG) return state except Exception as e: self.oe.dbg_log('updates::get_rpi_flashing_state', 'ERROR: (' + repr(e) + ')') @@ -654,23 +654,23 @@ def get_rpi_flashing_state(self): def get_rpi_eeprom(self, device): try: - self.oe.dbg_log('updates::get_rpi_eeprom', 'enter_function', 0) + self.oe.dbg_log('updates::get_rpi_eeprom', 'enter_function', self.oe.LOGDEBUG) values = [] if os.path.exists(self.RPI_FLASHING_TRIGGER): with open(self.RPI_FLASHING_TRIGGER, 'r') as trigger: values = trigger.read().split('\n') - self.oe.dbg_log('updates::get_rpi_eeprom', 'values: %s' % values, 0) - self.oe.dbg_log('updates::get_rpi_eeprom', 'exit_function', 0) + self.oe.dbg_log('updates::get_rpi_eeprom', 'values: %s' % values, self.oe.LOGDEBUG) + self.oe.dbg_log('updates::get_rpi_eeprom', 'exit_function', self.oe.LOGDEBUG) return 'true' if ('%s="yes"' % device) in values else 'false' except Exception as e: self.oe.dbg_log('updates::get_rpi_eeprom', 'ERROR: (' + repr(e) + ')') def set_rpi_eeprom(self): try: - self.oe.dbg_log('updates::set_rpi_eeprom', 'enter_function', 0) + self.oe.dbg_log('updates::set_rpi_eeprom', 'enter_function', self.oe.LOGDEBUG) bootloader = (self.struct['rpieeprom']['settings']['bootloader']['value'] == 'true') vl805 = (self.struct['rpieeprom']['settings']['vl805']['value'] == 'true') - self.oe.dbg_log('updates::set_rpi_eeprom', 'states: [%s], [%s]' % (bootloader, vl805), 0) + self.oe.dbg_log('updates::set_rpi_eeprom', 'states: [%s], [%s]' % (bootloader, vl805), self.oe.LOGDEBUG) if bootloader or vl805: values = [] values.append('BOOTLOADER="%s"' % ('yes' if bootloader else 'no')) @@ -681,33 +681,33 @@ def set_rpi_eeprom(self): if os.path.exists(self.RPI_FLASHING_TRIGGER): os.remove(self.RPI_FLASHING_TRIGGER) - self.oe.dbg_log('updates::set_rpi_eeprom', 'exit_function', 0) + self.oe.dbg_log('updates::set_rpi_eeprom', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_rpi_eeprom', 'ERROR: (' + repr(e) + ')') def set_rpi_bootloader(self, listItem): try: - self.oe.dbg_log('updates::set_rpi_bootloader', 'enter_function', 0) + self.oe.dbg_log('updates::set_rpi_bootloader', 'enter_function', self.oe.LOGDEBUG) value = 'false' if listItem.getProperty('value') == 'true': if xbmcgui.Dialog().yesno('Update RPi Bootloader', '%s\n\n%s' % (self.oe._(32023), self.oe._(32326))): value = 'true' self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() - self.oe.dbg_log('updates::set_rpi_bootloader', 'exit_function', 0) + self.oe.dbg_log('updates::set_rpi_bootloader', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_rpi_bootloader', 'ERROR: (' + repr(e) + ')') def set_rpi_vl805(self, listItem): try: - self.oe.dbg_log('updates::set_rpi_vl805', 'enter_function', 0) + self.oe.dbg_log('updates::set_rpi_vl805', 'enter_function', self.oe.LOGDEBUG) value = 'false' if listItem.getProperty('value') == 'true': if xbmcgui.Dialog().yesno('Update RPi USB3 Firmware', '%s\n\n%s' % (self.oe._(32023), self.oe._(32326))): value = 'true' self.struct[listItem.getProperty('category')]['settings'][listItem.getProperty('entry')]['value'] = value self.set_rpi_eeprom() - self.oe.dbg_log('updates::set_rpi_vl805', 'exit_function', 0) + self.oe.dbg_log('updates::set_rpi_vl805', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::set_rpi_vl805', 'ERROR: (' + repr(e) + ')') @@ -715,28 +715,28 @@ class updateThread(threading.Thread): def __init__(self, oeMain): try: - oeMain.dbg_log('updates::updateThread::__init__', 'enter_function', 0) + oeMain.dbg_log('updates::updateThread::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.stopped = False self.wait_evt = threading.Event() threading.Thread.__init__(self) - self.oe.dbg_log('updates::updateThread', 'Started', 1) - self.oe.dbg_log('updates::updateThread::__init__', 'exit_function', 0) + self.oe.dbg_log('updates::updateThread', 'Started', self.oe.LOGINFO) + self.oe.dbg_log('updates::updateThread::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::updateThread::__init__', 'ERROR: (' + repr(e) + ')') def stop(self): try: - self.oe.dbg_log('updates::updateThread::stop()', 'enter_function', 0) + self.oe.dbg_log('updates::updateThread::stop()', 'enter_function', self.oe.LOGDEBUG) self.stopped = True self.wait_evt.set() - self.oe.dbg_log('updates::updateThread::stop()', 'exit_function', 0) + self.oe.dbg_log('updates::updateThread::stop()', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::updateThread::stop()', 'ERROR: (' + repr(e) + ')') def run(self): try: - self.oe.dbg_log('updates::updateThread::run', 'enter_function', 0) + self.oe.dbg_log('updates::updateThread::run', 'enter_function', self.oe.LOGDEBUG) while self.stopped == False: if not xbmc.Player().isPlaying(): self.oe.dictModules['updates'].check_updates_v2() @@ -746,7 +746,7 @@ def run(self): self.oe.notify(self.oe._(32363), self.oe._(32364)) self.wait_evt.wait(3600) self.wait_evt.clear() - self.oe.dbg_log('updates::updateThread', 'Stopped', 1) - self.oe.dbg_log('updates::updateThread::run', 'exit_function', 0) + self.oe.dbg_log('updates::updateThread', 'Stopped', self.oe.LOGINFO) + self.oe.dbg_log('updates::updateThread::run', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('updates::updateThread::run', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/modules/xdbus.py b/src/resources/lib/modules/xdbus.py index 22252334..b9c1ba6c 100644 --- a/src/resources/lib/modules/xdbus.py +++ b/src/resources/lib/modules/xdbus.py @@ -17,29 +17,29 @@ class xdbus: def __init__(self, oeMain): try: - oeMain.dbg_log('xdbus::__init__', 'enter_function', 0) + oeMain.dbg_log('xdbus::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.dbusSystemBus = self.oe.dbusSystemBus - self.oe.dbg_log('xdbus::__init__', 'exit_function', 0) + self.oe.dbg_log('xdbus::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('xdbus::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('xdbus::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def start_service(self): try: - self.oe.dbg_log('xdbus::start_service', 'enter_function', 0) + self.oe.dbg_log('xdbus::start_service', 'enter_function', self.oe.LOGDEBUG) self.dbusMonitor = dbusMonitor(self.oe) self.dbusMonitor.start() - self.oe.dbg_log('xdbus::start_service', 'exit_function', 0) + self.oe.dbg_log('xdbus::start_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('xdbus::start_service', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('xdbus::start_service', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop_service(self): try: - self.oe.dbg_log('xdbus::stop_service', 'enter_function', 0) + self.oe.dbg_log('xdbus::stop_service', 'enter_function', self.oe.LOGDEBUG) if hasattr(self, 'dbusMonitor'): self.dbusMonitor.stop() del self.dbusMonitor - self.oe.dbg_log('xdbus::stop_service', 'exit_function', 0) + self.oe.dbg_log('xdbus::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('xdbus::stop_service', 'ERROR: (' + repr(e) + ')') @@ -48,10 +48,10 @@ def exit(self): def restart(self): try: - self.oe.dbg_log('xdbus::restart', 'enter_function', 0) + self.oe.dbg_log('xdbus::restart', 'enter_function', self.oe.LOGDEBUG) self.stop_service() self.start_service() - self.oe.dbg_log('xdbus::restart', 'exit_function', 0) + self.oe.dbg_log('xdbus::restart', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('xdbus::restart', 'ERROR: (' + repr(e) + ')') @@ -60,7 +60,7 @@ class dbusMonitor(threading.Thread): def __init__(self, oeMain): try: - oeMain.dbg_log('xdbus::dbusMonitor::__init__', 'enter_function', 0) + oeMain.dbg_log('xdbus::dbusMonitor::__init__', 'enter_function', oeMain.LOGDEBUG) self.monitors = [] self.oe = oeMain self.dbusSystemBus = oeMain.dbusSystemBus @@ -68,13 +68,13 @@ def __init__(self, oeMain): gobject.threads_init() dbus.mainloop.glib.threads_init() threading.Thread.__init__(self) - self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'exit_function', 0) + self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('xdbus::dbusMonitor::__init__', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def run(self): try: - self.oe.dbg_log('xdbus::dbusMonitor::run', 'enter_function', 0) + self.oe.dbg_log('xdbus::dbusMonitor::run', 'enter_function', self.oe.LOGDEBUG) for strModule in sorted(self.oe.dictModules, key=lambda x: list(self.oe.dictModules[x].menu.keys())): module = self.oe.dictModules[strModule] if hasattr(module, 'monitor') and module.ENABLED: @@ -82,22 +82,22 @@ def run(self): monitor.add_signal_receivers() self.monitors.append(monitor) try: - self.oe.dbg_log('xdbus Monitor started.', '', 1) + self.oe.dbg_log('xdbus Monitor started.', '', self.oe.LOGINFO) self.mainLoop.run() - self.oe.dbg_log('xdbus Monitor stopped.', '', 1) + self.oe.dbg_log('xdbus Monitor stopped.', '', self.oe.LOGINFO) except: pass - self.oe.dbg_log('xdbus::dbusMonitor::run', 'exit_function', 0) + self.oe.dbg_log('xdbus::dbusMonitor::run', 'exit_function', self.oe.LOGDEBUG) except Exception as e: - self.oe.dbg_log('xdbus::dbusMonitor::run', 'ERROR: (' + repr(e) + ')', 4) + self.oe.dbg_log('xdbus::dbusMonitor::run', 'ERROR: (' + repr(e) + ')', self.oe.LOGERROR) def stop(self): try: - self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'enter_function', 0) + self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'enter_function', self.oe.LOGDEBUG) self.mainLoop.quit() for monitor in self.monitors: monitor.remove_signal_receivers() monitor = None - self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'exit_function', 0) + self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('xdbus::dbusMonitor::stop_service', 'ERROR: (' + repr(e) + ')') diff --git a/src/resources/lib/oeWindows.py b/src/resources/lib/oeWindows.py index 454e266b..77567da6 100644 --- a/src/resources/lib/oeWindows.py +++ b/src/resources/lib/oeWindows.py @@ -76,7 +76,7 @@ def onInit(self): self.oe.winOeMain = self for strModule in sorted(self.oe.dictModules, key=lambda x: list(self.oe.dictModules[x].menu.keys())): module = self.oe.dictModules[strModule] - self.oe.dbg_log('init module', strModule, 0) + self.oe.dbg_log('init module', strModule, self.oe.LOGDEBUG) if module.ENABLED: if hasattr(module, 'do_init'): Thread(target=module.do_init(), args=()).start() @@ -172,7 +172,7 @@ def build_menu(self, struct, fltr=[], optional='0'): def showButton(self, number, name, module, action, onup=None, onleft=None): try: - self.oe.dbg_log('oeWindows::showButton', 'enter_function', 0) + self.oe.dbg_log('oeWindows::showButton', 'enter_function', self.oe.LOGDEBUG) button = self.getControl(self.buttons[number]['id']) self.buttons[number]['modul'] = module self.buttons[number]['action'] = action @@ -182,7 +182,7 @@ def showButton(self, number, name, module, action, onup=None, onleft=None): if onleft != None: button.controlLeft(self.getControl(onleft)) button.setVisible(True) - self.oe.dbg_log('oeWindows::showButton', 'exit_function', 0) + self.oe.dbg_log('oeWindows::showButton', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('oeWindows.mainWindow::showButton(' + str(number) + ', ' + str(action) + ')', 'ERROR: (' + repr(e) + ')') @@ -229,7 +229,7 @@ def onAction(self, action): self.close() def onClick(self, controlID): - self.oe.dbg_log('oeWindows::onClick', 'enter_function', 0) + self.oe.dbg_log('oeWindows::onClick', 'enter_function', self.oe.LOGDEBUG) try: for btn in self.buttons: if controlID == self.buttons[btn]['id']: @@ -335,7 +335,7 @@ def onClick(self, controlID): self.onFocus(self.guiMenList) self.setFocusId(controlID) self.getControl(controlID).selectItem(selectedPosition) - self.oe.dbg_log('oeWindows::onClick', 'exit_function', 0) + self.oe.dbg_log('oeWindows::onClick', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('oeWindows.mainWindow::onClick(' + str(controlID) + ')', 'ERROR: (' + repr(e) + ')') @@ -499,7 +499,7 @@ def wizard_set_language(self): global lang_str global lang_new try: - self.oe.dbg_log('oeWindows::wizard_set_language', 'enter_function', 0) + self.oe.dbg_log('oeWindows::wizard_set_language', 'enter_function', self.oe.LOGDEBUG) langCodes = {"Bulgarian":"resource.language.bg_bg","Czech":"resource.language.cs_cz","German":"resource.language.de_de","English":"resource.language.en_gb","Spanish":"resource.language.es_es","Basque":"resource.language.eu_es","Finnish":"resource.language.fi_fi","French":"resource.language.fr_fr","Hebrew":"resource.language.he_il","Hungarian":"resource.language.hu_hu","Italian":"resource.language.it_it","Lithuanian":"resource.language.lt_lt","Latvian":"resource.language.lv_lv","Norwegian":"resource.language.nb_no","Dutch":"resource.language.nl_nl","Polish":"resource.language.pl_pl","Portuguese (Brazil)":"resource.language.pt_br","Portuguese":"resource.language.pt_pt","Romanian":"resource.language.ro_ro","Russian":"resource.language.ru_ru","Slovak":"resource.language.sk_sk","Swedish":"resource.language.sv_se","Turkish":"resource.language.tr_tr","Ukrainian":"resource.language.uk_ua"} languagesList = sorted(list(langCodes.keys())) cur_lang = xbmc.getLanguage() @@ -525,7 +525,7 @@ def wizard_set_language(self): self.oe.winOeMain.set_wizard_button_1(langKey, self, 'wizard_set_language') self.showButton(1, 32303) self.setFocusId(self.buttons[1]['id']) - self.oe.dbg_log('oeWindows::wizard_set_language', 'exit_function', 0) + self.oe.dbg_log('oeWindows::wizard_set_language', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('oeWindows::wizard_set_language', 'ERROR: (' + repr(e) + ')') @@ -629,7 +629,7 @@ def onClick(self, controlID): global strModule global prevModule try: - self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'enter_function', 0) + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'enter_function', self.oe.LOGDEBUG) for btn in self.buttons: if controlID == self.buttons[btn]['id'] and self.buttons[btn]['id'] > 2: if hasattr(self.buttons[btn]['modul'], self.buttons[btn]['action']): @@ -653,7 +653,7 @@ def onClick(self, controlID): self.wizards.remove(prevModule) self.oe.remove_node(prevModule) self.onClick(1500) - self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', 0) + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', self.oe.LOGDEBUG) if controlID == 1500: self.getControl(1390).setLabel('1') @@ -701,7 +701,7 @@ def onClick(self, controlID): self.visible = False self.close() xbmc.executebuiltin(lang_str) - self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', 0) + self.oe.dbg_log('wizard::onClick(' + str(controlID) + ')', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('oeWindows.wizard::onClick()', 'ERROR: (' + repr(e) + ')') diff --git a/src/service.py b/src/service.py index de7de54b..5e66a124 100644 --- a/src/service.py +++ b/src/service.py @@ -17,7 +17,7 @@ class service_thread(threading.Thread): def __init__(self, oeMain): try: - oeMain.dbg_log('_service_::__init__', 'enter_function', 0) + oeMain.dbg_log('_service_::__init__', 'enter_function', oeMain.LOGDEBUG) self.oe = oeMain self.wait_evt = threading.Event() self.socket_file = '/var/run/service.libreelec.settings.sock' @@ -30,33 +30,33 @@ def __init__(self, oeMain): self.stopped = False threading.Thread.__init__(self) self.daemon = True - self.oe.dbg_log('_service_::__init__', 'exit_function', 0) + self.oe.dbg_log('_service_::__init__', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('_service_::__init__', 'ERROR: (' + repr(e) + ')') def stop(self): try: - self.oe.dbg_log('_service_::stop', 'enter_function', 0) + self.oe.dbg_log('_service_::stop', 'enter_function', self.oe.LOGDEBUG) self.stopped = True sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(self.socket_file) sock.send(bytes('exit', 'utf-8')) sock.close() self.sock.close() - self.oe.dbg_log('_service_::stop', 'exit_function', 0) + self.oe.dbg_log('_service_::stop', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('_service_::stop', 'ERROR: (' + repr(e) + ')') def run(self): try: - self.oe.dbg_log('_service_::run', 'enter_function', 0) + self.oe.dbg_log('_service_::run', 'enter_function', self.oe.LOGDEBUG) if self.oe.read_setting('libreelec', 'wizard_completed') == None: threading.Thread(target=self.oe.openWizard).start() while self.stopped == False: - self.oe.dbg_log('_service_::run', 'WAITING:', 1) + self.oe.dbg_log('_service_::run', 'WAITING:', self.oe.LOGINFO) conn, addr = self.sock.accept() message = (conn.recv(1024)).decode('utf-8') - self.oe.dbg_log('_service_::run', 'MESSAGE:' + message, 1) + self.oe.dbg_log('_service_::run', 'MESSAGE:' + message, self.oe.LOGINFO) conn.close() if message == 'openConfigurationWindow': if not hasattr(self.oe, 'winOeMain'): @@ -66,7 +66,7 @@ def run(self): threading.Thread(target=self.oe.openConfigurationWindow).start() if message == 'exit': self.stopped = True - self.oe.dbg_log('_service_::run', 'exit_function', 0) + self.oe.dbg_log('_service_::run', 'exit_function', self.oe.LOGDEBUG) except Exception as e: self.oe.dbg_log('_service_::run', 'ERROR: (' + repr(e) + ')') @@ -77,16 +77,16 @@ def __init__(self, *args, **kwargs): xbmc.Monitor.__init__(self) def onScreensaverActivated(self): - oe.__oe__.dbg_log('c_xbmcm::onScreensaverActivated', 'enter_function', 0) + oe.__oe__.dbg_log('c_xbmcm::onScreensaverActivated', 'enter_function', oe.__oe__.LOGDEBUG) if oe.__oe__.read_setting('bluetooth', 'standby'): threading.Thread(target=oe.__oe__.standby_devices).start() - oe.__oe__.dbg_log('c_xbmcm::onScreensaverActivated', 'exit_function', 0) + oe.__oe__.dbg_log('c_xbmcm::onScreensaverActivated', 'exit_function', oe.__oe__.LOGDEBUG) def onDPMSActivated(self): - oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'enter_function', 0) + oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'enter_function', oe.__oe__.LOGDEBUG) if oe.__oe__.read_setting('bluetooth', 'standby'): threading.Thread(target=oe.__oe__.standby_devices).start() - oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'exit_function', 0) + oe.__oe__.dbg_log('c_xbmcm::onDPMSActivated', 'exit_function', oe.__oe__.LOGDEBUG) def onAbortRequested(self): pass @@ -118,7 +118,7 @@ def onAbortRequested(self): continue if xbmc.getGlobalIdleTime() / 60 >= timeout: - oe.__oe__.dbg_log('service', 'idle timeout reached', 0) + oe.__oe__.dbg_log('service', 'idle timeout reached', oe.__oe__.LOGDEBUG) oe.__oe__.standby_devices() if hasattr(oe, 'winOeMain') and hasattr(oe.winOeMain, 'visible'): From 35ac1f5f16c807ecdee230339ee8c813e620f388 Mon Sep 17 00:00:00 2001 From: mglae Date: Sun, 20 Sep 2020 19:24:03 +0200 Subject: [PATCH 49/51] system.py: fix reading UTF-8 keyboard layouts in Python 3.8 --- src/resources/lib/modules/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/lib/modules/system.py b/src/resources/lib/modules/system.py index 03ddca34..1ca5c051 100644 --- a/src/resources/lib/modules/system.py +++ b/src/resources/lib/modules/system.py @@ -409,7 +409,7 @@ def get_keyboard_layouts(self): arrLayouts.sort() arrTypes = None elif os.path.exists(self.KEYBOARD_INFO): - objXmlFile = open(self.KEYBOARD_INFO, 'r') + objXmlFile = open(self.KEYBOARD_INFO, 'r', encoding='utf-8') strXmlText = objXmlFile.read() objXmlFile.close() xml_conf = minidom.parseString(strXmlText) From 0ddea2e9b124807ba17f4795477b627481108800 Mon Sep 17 00:00:00 2001 From: mglae Date: Mon, 21 Sep 2020 19:05:40 +0200 Subject: [PATCH 50/51] Main window: add back button for touch or mouse input --- .../service-LibreELEC-Settings-mainWindow.xml | 14 ++++++++++++++ textures/LibreELEC/icon_button_back.png | Bin 0 -> 541 bytes 2 files changed, 14 insertions(+) create mode 100644 textures/LibreELEC/icon_button_back.png diff --git a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml index 1fced9c1..a6aba5e3 100644 --- a/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml +++ b/skins/Default/1080i/service-LibreELEC-Settings-mainWindow.xml @@ -1225,5 +1225,19 @@ PageUp(1300) Container(1300).HasPrevious + Control.IsVisible(1300) + + + + 1800 + 980 + 48 + 48 + icon_button_back.png + icon_button_back.png + Back + system.getbool(input.enablemouse) + true + + diff --git a/textures/LibreELEC/icon_button_back.png b/textures/LibreELEC/icon_button_back.png new file mode 100644 index 0000000000000000000000000000000000000000..df3b5b24726202080c1da5bbf5db915981a91180 GIT binary patch literal 541 zcmV+&0^9xf+SH+#4P)kD)g;3-WG~^IkF15GU z7}3(+(3ovO4VRJHnM&O~AAIkm%i|9Y@80+QF7S?a1uW14Ezklj&;liZ4;JDNzF$qd@=9i3-3) zjtILY`V9<|X1P|PzrZLtVzm?f1SUA4^S4C5fFX8B*75T`0ed)OtiD7)fN`=!>P_?- z7-WO3s^^6aFhZ7iV~Jh@N66FLXrfoZ07-TTHJ<1Vu#*!K%_VvP946<|3P=D~*`>wj zS*ge^dt6lmJ2+-eW~AFDRSt}iBPum@PJah3lXmU${Hp5`u#F50f^++e0~{pJfbM2t zkwaQ_S06JJ5U#-cgX+aK1~|)wHcG8ChPM0$ z3{3`%olcFCr$-qmzxn{T!v-NBh_BzA5?^3~{0i79=_R^T;>Qpme~{yp^if!;bCf Date: Wed, 7 Oct 2020 02:22:07 +0200 Subject: [PATCH 51/51] update translations from transifex --- language/resource.language.ast_es/strings.po | 147 ++- language/resource.language.bg_bg/strings.po | 187 ++- language/resource.language.cs_cz/strings.po | 359 ++++-- language/resource.language.de_de/strings.po | 153 ++- language/resource.language.es_es/strings.po | 309 +++-- language/resource.language.eu_es/strings.po | 149 ++- language/resource.language.fi_fi/strings.po | 149 ++- language/resource.language.fr_ca/strings.po | 1172 ++++++++++++++++++ language/resource.language.fr_fr/strings.po | 159 ++- language/resource.language.he_il/strings.po | 143 ++- language/resource.language.hu_hu/strings.po | 167 ++- language/resource.language.it_it/strings.po | 149 ++- language/resource.language.ja_jp/strings.po | 149 ++- language/resource.language.ko_kr/strings.po | 155 ++- language/resource.language.lt_lt/strings.po | 149 ++- language/resource.language.lv_lv/strings.po | 154 ++- language/resource.language.nb_no/strings.po | 155 ++- language/resource.language.nl_nl/strings.po | 151 ++- language/resource.language.pl_pl/strings.po | 150 ++- language/resource.language.pt_br/strings.po | 149 ++- language/resource.language.pt_pt/strings.po | 147 ++- language/resource.language.ro_ro/strings.po | 155 ++- language/resource.language.ru_ru/strings.po | 157 ++- language/resource.language.sk_sk/strings.po | 159 ++- language/resource.language.sv_se/strings.po | 153 ++- language/resource.language.tr_tr/strings.po | 187 ++- language/resource.language.uk_ua/strings.po | 145 ++- language/resource.language.zh_cn/strings.po | 149 ++- language/resource.language.zh_tw/strings.po | 1172 ++++++++++++++++++ 29 files changed, 6433 insertions(+), 446 deletions(-) create mode 100644 language/resource.language.fr_ca/strings.po create mode 100644 language/resource.language.zh_tw/strings.po diff --git a/language/resource.language.ast_es/strings.po b/language/resource.language.ast_es/strings.po index 2b096b55..d2cd215b 100644 --- a/language/resource.language.ast_es/strings.po +++ b/language/resource.language.ast_es/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" +msgid "Set to ON to enable the Bluetooth service" msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Crea un ficheru tar con tolos axustes de configuración d'@DISTRONAME@ y Kodi, bases de datos y conteníu de miniatures. Los ficheros de respaldu atroxaránse en /storage/backups" +"/storage/backup/" +msgstr "Crea un ficheru tar con tolos axustes de configuración d'@DISTRONAME@ y Kodi, bases de datos y conteníu de miniatures. Los ficheros de respaldu atroxaránse en /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Servicios" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "" msgctxt "#32013" -msgid "Updates" -msgstr "Anovamientos" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Conexones" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL non válida" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Tocante a" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bienllegáu/ada @DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "" msgctxt "#32399" msgid "Public" msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.bg_bg/strings.po b/language/resource.language.bg_bg/strings.po index 0b5e6ff2..1ca07b88 100644 --- a/language/resource.language.bg_bg/strings.po +++ b/language/resource.language.bg_bg/strings.po @@ -66,7 +66,7 @@ msgctxt "#700" msgid "" "Configure a hostname, keyboard type, perform a reset, update, or backups and" " restores" -msgstr "Задайте име на устройството, тип на клавиатурата, нулирайте, актуализирайте, направете резервно копие или възстановете" +msgstr "Задайте име на устройството, тип на клавиатурата, нулирайте настройките, актуализирайте, направете резервно копие или възстановете старо копие" msgctxt "#701" msgid "Configure network startup options, NTP and VPNs" @@ -103,11 +103,11 @@ msgstr "Задайте име на устройството за Вашата @D msgctxt "#711" msgid "Configure the 1st keyboard software layout" -msgstr "Задайте първа клавишна подредба на софтуерната клавиатурата" +msgstr "Първа клавишна подредба на софтуерната клавиатурата" msgctxt "#712" msgid "Configure the 2nd keyboard software layout" -msgstr "Задайте втора клавишна подредба на софтуерната клавиатурата" +msgstr "Втора клавишна подредба на софтуерната клавиатурата" msgctxt "#713" msgid "Configure the physical keyboard type" @@ -130,25 +130,24 @@ msgctxt "#718" msgid "" "Send boot config files from /flash, kodi.log, kernel log and Samba configs " "to http://ix.io, and display the short URL" -msgstr "Изпращайте конфигурационните файлове за зареждане от /flash, kodi.log, kernel log, журнала на ядрото и конфигурациите на Samba в http://ix.io и показвайте краткия URL адрес" +msgstr "Изпраща конфигурационните файлове от /flash, журналите kodi.log, kernel, и конфигурацията на Samba в http://ix.io. След това показва кратък URL адрес за достъп до качените данни" msgctxt "#719" msgid "" "Send boot config files from /flash, kodi_crash.log, kernel log and Samba " "configs to http://ix.io, and display the short URL" -msgstr "Изпращайте конфигурационните файлове за зареждане от /flash, kodi_crash.log, kernel log, журнала на ядрото и Samba configs на http://ix.io и показвайте краткия URL адрес" +msgstr "Изпраща конфигурационните файлове от /flash, журналите kodi.log, kernel, и конфигурацията на Samba в http://ix.io. След това показва кратък URL адрес за достъп до качените данни" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Включете и Bluetooth устройствата ще бъдат изключвани при активиране на енергоспестяващ режим" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Включете за да активирате Bluetooth" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Създава .tar архив съдържащ всички настройки на @DISTRONAME@ и Kodi, бази данни и миниатюри. Резервните копия се съхраняват в /storage/backups" +"/storage/backup/" +msgstr "Създава .tar архив съдържащ всички настройки на @DISTRONAME@ и Kodi, бази данни и миниатюри. Резервните копия се съхраняват в /storage/backup/" msgctxt "#723" msgid "" @@ -170,7 +169,7 @@ msgstr "[COLOR FFFF0000]HARD RESET[/COLOR]\nНулира настройките msgctxt "#726" msgid "Enable or disable support for Wireless (WLAN) networks" -msgstr "Включване или изключване поддръжката за безжични (WLAN) мрежи" +msgstr "Включва или изключва поддръжката за безжични (WLAN) мрежи" msgctxt "#727" msgid "" @@ -241,12 +240,12 @@ msgctxt "#743" msgid "" "Set to ON if you have copied private SSH keys to your HTPC and would like to" " improve security by disabling SSH username and password authentication." -msgstr "Включете ако сте копирали частните SSH ключове в LibreELEC системата и желаете да повишите нивото на сигурност, като избегнете ползването на потребителско име и парола." +msgstr "Включете ако сте копирали SSH ключове в LibreELEC и желаете да повишите нивото на сигурност, като избегнете ползването на потребителско име и парола." msgctxt "#744" msgid "" "Set to ON to enable the Avahi (Zeroconf/Bonjour) network discovery service" -msgstr "Включете за да активирате услугата Avahi (Zeroconf/Bonjour) за автоматично откриване на устройства, част от мрежата към която сте свързани" +msgstr "Включете за да активирате услугата Avahi (Zeroconf/Bonjour) за автоматично откриване на устройства в мрежата" msgctxt "#745" msgid "Set to ON to enable the cron daemon" @@ -254,7 +253,22 @@ msgstr "Включете за да активирате Cron демона" msgctxt "#746" msgid "Set the password for SSH" -msgstr "Задаване на SSH парола" +msgstr "Задайте SSH парола" + +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" msgctxt "#750" msgid "750" @@ -329,7 +343,14 @@ msgid "" "CPU Arch and Version to the update server. This data is also used to report " "basic statistics for the project. To continue checking for updates while " "opting-out of stats reporting, disable this option." -msgstr "Проверката за нова версия изпраща информация за инсталираната версия, дистрибуцията, проекта и архитектурата на процесора до сървъра за актуализиране. Данните се използват и за генериране на статистически доклади. Деактивирайте опцията ако желаете да проверявате за актуализации, но не желаете да бъдете част статистическите доклади." +msgstr "Проверката за нова версия изпраща информация за инсталираната версия, дистрибуцията, проекта и архитектурата на процесора до сървъра за актуализиране. Данните се ползват и за генериране на статистически доклади. Деактивирайте опцията ако желаете да проверявате за актуализации, но не желаете да изпращате данни за статистическите доклади." + +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" msgctxt "#32001" msgid "Services" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Изберете действие" msgctxt "#32013" -msgid "Updates" -msgstr "Актуализации" +msgid "OS Updates" +msgstr "Актуализации за операционната система" msgctxt "#32014" msgid "Automatic Updates" @@ -393,7 +414,45 @@ msgstr "Налични версии" msgctxt "#32021" msgid "Submit Statistics" -msgstr "Изпратете статистически данни" +msgstr "Изпращане на статистически данни" + +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Актуализации за фърмуера" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Актуализирането ще се извърши след рестартиране на системата." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" msgctxt "#32100" msgid "Connections" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Невалиден URL адрес" +msgctxt "#32192" +msgid "PIN lock" +msgstr "Заключване с ПИН" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Относно" @@ -625,7 +696,7 @@ msgstr "Ползване на удостоверяване с парола за msgctxt "#32203" msgid "Disable SSH Password" -msgstr "Без парола за SSH достъп" +msgstr "Забраняване на SSH достъпа чрез парола" msgctxt "#32204" msgid "Enable Samba" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Възникна грешка.[CR]SSH паролата не е променена." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Въведете нов 4 цифрен ПИН" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Въведете повторно" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Грешка - ПИН кодовете не съвпадат!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Грека - ПИН кодът трябва да съдържа 4 цифти!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "@DISTRONAME@ Настройките са заключени[CR]Въведете 4 цифрен код" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Грешен ПИН!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Няколко пъти въведохте грешен ПИН.[CR][CR]Ще можете да опитанте отново след 5 минути." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Ще можете да въведете ПИН код след: %02d:%02d[CR][CR]Въвели сте няколко пъти грешен ПИН код." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Добре дошли в @DISTRONAME@" @@ -751,7 +882,7 @@ msgstr "За свалянето на изображения (плакати, б msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Предишен" msgctxt "#32308" msgid "Hostname:" @@ -875,7 +1006,7 @@ msgstr "Въведете следния код на вашето устройс msgctxt "#32344" msgid "Enable Bluetooth" -msgstr "Включване на Bluetooth" +msgstr "Включи Bluetooth" msgctxt "#32346" msgid "Bluetooth is disabled" @@ -939,15 +1070,15 @@ msgstr "Прогрес за създаване на резервното коп msgctxt "#32376" msgid "Submit Log" -msgstr "Изпрати журнала" +msgstr "Изпращане на журналите" msgctxt "#32377" msgid "Upload latest Kodi log and configs, and view the short URL" -msgstr "Качете последния журнал и настройки на Kodi и прегледайте краткия URL адрес" +msgstr "Качване на журнала, настройките на Kodi и преглед на URL адреса" msgctxt "#32378" msgid "Upload latest Kodi crash log and configs, and view the short URL" -msgstr "Качете последния журнал за срива и настройки на Kodi и прегледайте краткия URL адрес" +msgstr "Качване журнала (за сривове), настройките на Kodi и преглед на URL адреса" msgctxt "#32379" msgid "There is not enough free storage space to continue!" @@ -973,11 +1104,11 @@ msgstr "Възпроизвеждане на файловете?" msgctxt "#32384" msgid "OBEX Enabled" -msgstr "OBEX е включен" +msgstr "Включи OBEX" msgctxt "#32385" msgid "OBEX Upload Folder" -msgstr "OBEX папка за качване" +msgstr "Папка за файловете качени чрез OBEX" msgctxt "#32386" msgid "Keyboard Layout Variant #1" @@ -1035,3 +1166,7 @@ msgstr "Домашен режим" msgctxt "#32399" msgid "Public" msgstr "Публичен режим" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.cs_cz/strings.po b/language/resource.language.cs_cz/strings.po index 4b6d4a1e..e7636bcc 100644 --- a/language/resource.language.cs_cz/strings.po +++ b/language/resource.language.cs_cz/strings.po @@ -51,7 +51,7 @@ msgid "" "LibreELEC is created by a global team of Linux and Kodi enthusiasts who " "contribute time and effort to manage the project, write code, and provide " "support. We have fun making it. We hope you have fun using it!" -msgstr "LibreELEC je vytvořen globálním týmem nadšenců Linuxu a Kodi, kteří přispívají časem a úsilím k řízení projektu, psaní kódu a poskytování podpory. Máme radost dělat to. Doufáme, že se vám to líbí!" +msgstr "LibreELEC je vytvořen globálním týmem nadšenců Linuxu a Kodi, kteří přispívají časem a úsilím k řízení projektu, psaní kódu a poskytování podpory. Děláme to s nadšením pro věc. Doufáme, že při jeho používání zažijete spoustu zábavy!" msgctxt "#610" msgid "" @@ -60,36 +60,36 @@ msgid "" " in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " "GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " "project expenses are accepted via PayPal:[CR]donations@libreelec.tv" -msgstr "[B]Podpora[/B] je k dispozici na našem fóru:[CR]https://forum.libreelec.tv[CR][CR][B]Dokumentace[/B] https://libreelec.wiki[CR][CR][B]kód[/B] najdete na adrese GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]dary[/B]náklady na projekt jsou přijímány přes PayPal:[CR]donations@libreelec.tv" +msgstr "[B]Podporu[/B] poskytujeme na našem fóru:[CR]https://forum.libreelec.tv[CR][CR][B]Dokumentaci[/B] si můžete přečíst na naší wiki:[CR]https://libreelec.wiki[CR][CR][B]Kód[/B] naleznete na GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Příspěvky[/B] na pokrytí nákladů za chod projektu přijímáme skrze PayPal:[CR]donations@libreelec.tv" msgctxt "#700" msgid "" "Configure a hostname, keyboard type, perform a reset, update, or backups and" " restores" -msgstr "Nastavit jméno systému, typ klávesnice, obnovit výchozí nastavení, aktualizovat, zálohovat nebo obnovit" +msgstr "Nastavit název systému, typ klávesnice, provést obnovení výchozího nastavení, aktualizaci, nebo zálohy a obnovení" msgctxt "#701" msgid "Configure network startup options, NTP and VPNs" -msgstr "Nastavit možnosti sítě, NTP a VPN" +msgstr "Nastavit možnosti sítě, NTP a VPN" msgctxt "#702" msgid "" "Manage the Ethernet, Wireless and VPN connections available to the system" -msgstr "Spravovat dostupné ethernetové, bezdrátové a VPN připojení" +msgstr "Spravovat dostupné ethernetové, bezdrátové a VPN připojení" msgctxt "#703" msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" -msgstr "Nastavit systémové služby jako SMB, SSH. Cron, Avahi nebo Syslog" +msgstr "Nastavit systémové služby jako SMB, SSH, Cron, Avahi nebo Syslog" msgctxt "#704" msgid "Configure and pair Bluetooth devices" -msgstr "Nastavit a párovat Bluetooth zařízení" +msgstr "Nastavit a párovat zařízení Bluetooth" msgctxt "#705" msgid "" "Useful information like version and architecture details, support and " "documentation links, and how to donate and support the project." -msgstr "Užitečné informace, jako jsou podrobnosti o verzi a architektuře, odkazy na podporu a dokumentaci a jak darovat a podporovat projekt." +msgstr "Užitečné informace, jako jsou podrobnosti o verzi a architektuře, odkazy na podporu a dokumentaci a jak přispět a podporovat projekt." msgctxt "#707" msgid "Configure updates" @@ -99,7 +99,7 @@ msgctxt "#710" msgid "" "Configure the Hostname of your @DISTRONAME@ system. This will be used for " "the HTPC \\\\hostname in Windows and SMB server name in the Mac OS Finder" -msgstr "Nastavení jména systému @DISTRONAME@. Toto jméno bude použito v adresním řádku průzkumníku Windows nebo jako jméno SMB serveru v Mac OS Finderu" +msgstr "Nastavení názvu systému @DISTRONAME@. Tento název bude použit v adresním řádku průzkumníku Windows a také jako název SMB serveru v Mac OS Finderu" msgctxt "#711" msgid "Configure the 1st keyboard software layout" @@ -118,55 +118,54 @@ msgid "" "@DISTRONAME@ can be configured for automatic or manual updates. Automatic " "updates are available on stable releases and stable release candidates. " "Automatic update self-disables on beta and development builds" -msgstr "@DISTRONAME@ může být nakonfigurován pro automatické nebo ruční stažení aktualizace. Automatické aktualizace jsou k dispozici na stable a RC verzích systému. Automatické aktualizace nebudou instalovat beta a vývojářské verze" +msgstr "@DISTRONAME@ může být nakonfigurován pro automatické nebo ruční stažení aktualizace. Automatické aktualizace jsou k dispozici na stable a RC verzích systému. Automatické aktualizace jsou v betaverzích a ve vývojových sestaveních vypnuté" msgctxt "#715" msgid "" "Set to ON and an on-screen notification will be displayed when a new update " "is available" -msgstr "Nastavte do polohy povolit, aby se na obrazovce zobrazila informace o nové aktualizaci" +msgstr "Nastavte do polohy [I]povoleno[/I], aby se na obrazovce zobrazovala oznámení o dostupnosti nové aktualizace" msgctxt "#718" msgid "" "Send boot config files from /flash, kodi.log, kernel log and Samba configs " "to http://ix.io, and display the short URL" -msgstr "Odeslat soubory zpouštěcího nastavení z /flash, kodi.log, záznam jádra a nastavení Samby na http://ix.io a zobrazit zkrácenou adresu" +msgstr "Odeslat soubory konfigurace bootování z /flash, kodi.log, záznam jádra a nastavení SMB na http://ix.io a zobrazit zkrácenou adresu URL" msgctxt "#719" msgid "" "Send boot config files from /flash, kodi_crash.log, kernel log and Samba " "configs to http://ix.io, and display the short URL" -msgstr "Odeslat soubory zpouštěcího nastavení z /flash, kodi_crash.log, záznam jádra a nastavení Samby na http://ix.io a zobrazit zkrácenou adresu" +msgstr "Odeslat soubory konfigurace bootování z /flash, kodi_crash.log, záznam jádra a nastavení SMB na http://ix.io a zobrazit zkrácenou adresu URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Nastavte do polohy povolit aby bylo zařízení Bluetooth během módu úspory energie vypnuto." +msgid "Set to ON to enable the Bluetooth service" +msgstr "Nastavte do polohy [I]povoleno[/I] pro povolení služby Bluetooth" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Vytvoří tar archiv, který obsahuje nastavení @DISTRONAME@ a Kodi, zálohu databáze a náhledů. Zálohy budou uložené v adresáři /storage/backups" +"/storage/backup/" +msgstr "Vytvoří tar archiv, který obsahuje nastavení @DISTRONAME@ a Kodi, zálohu databáze a náhledů. Soubory zálohy budou uloženy v adresáři /storage/backup/" msgctxt "#723" msgid "" "Restore a tar archive backup previously created using the backup option " "above" -msgstr "Obnovit z tar archivu, který byl v minulosti vytvořen použitím výše uvedené volby zálohování" +msgstr "Obnovit zálohu z tar archivu, který byl v minulosti vytvořen použitím výše uvedené volby zálohování" msgctxt "#724" msgid "" "[COLOR FF00FF00]SOFT RESET[/COLOR]\n" "Permanently reset @DISTRONAME@ configuration to defaults (resets also Kodi to default including your library. your media - music/videos/etc are not touched)" -msgstr "[COLOR FF00FF00]SOFT RESET[/COLOR]\nObnoví @DISTRONAME@ do výchozího nastavení (včetně nastavení Kodi a knihovny). Vaše multimediální soubory zůstanou netknuté)" +msgstr "[COLOR FF00FF00]SOFT RESET[/COLOR]\nObnoví konfiguraci @DISTRONAME@ na výchozí hodnoty nastavení (včetně nastavení Kodi a knihovny. Vaše multimediální soubory zůstanou netknuté)" msgctxt "#725" msgid "" "[COLOR FFFF0000]HARD RESET[/COLOR]\n" "Permanently reset @DISTRONAME@ and Kodi configuration to defaults (everything in your storage partition will be deleted)" -msgstr "[COLOR FFFF0000]HARD RESET[/COLOR]\nObnoví tovární nastavení @DISTRONAME@ a výchozí konfiguraci Kodi. Všechny vaše soubory na diskovém oddílu budou smazány!" +msgstr "[COLOR FFFF0000]HARD RESET[/COLOR]\nObnoví tovární nastavení @DISTRONAME@ a výchozí konfiguraci Kodi. Všechny vaše soubory na diskovém oddílu budou smazány!" msgctxt "#726" msgid "Enable or disable support for Wireless (WLAN) networks" @@ -177,7 +176,7 @@ msgid "" "Enable a 'tethered' Wireless Access Point. This requires your wireless card " "(and driver) to support bridging and access point mode. Not all cards are " "capable." -msgstr "Povolit 'tethered' bezdrátový přípojný bod. Pro podporu bezdrátového mostu a přístupového bodu je nutná bezdrátová karta (a ovladač). Tuto volbu umožňují pouze některé karty." +msgstr "Povolit „tetherovaný“ bezdrátový přístupový bod. Pro podporu režimu bezdrátového mostu a přístupového bodu je nutná bezdrátová karta (a ovladač). Tuto volbu umožňují pouze některé karty." msgctxt "#728" msgid "Configure the Access Point SSID" @@ -189,73 +188,88 @@ msgstr "Nastavit heslo přístupového bodu" msgctxt "#730" msgid "Enable or disable support for Wired (Ethernet) networks" -msgstr "Povolit nebo zakázat podporu pro drátovou (Ethernetovou) síť" +msgstr "Povolit nebo zakázat podporu pro kabelové (Ethernetové) sítě" msgctxt "#732" msgid "Configure the 1st time (NTP) server" -msgstr "Nastavit 1. zdroj přesného času (NTP)" +msgstr "Nastavit 1. zdroj přesného času (NTP)" msgctxt "#733" msgid "Configure the 2nd time (NTP) server" -msgstr "Nastavit 2. zdroj přesného času (NTP)" +msgstr "Nastavit 2. zdroj přesného času (NTP)" msgctxt "#734" msgid "Configure the 3rd time (NTP) server" -msgstr "Nastavit 3. zdroj přesného času (NTP)" +msgstr "Nastavit 3. zdroj přesného času (NTP)" msgctxt "#736" msgid "" "Set to ON to delay Kodi startup until the network is available. Use this if " "the OS is booting into Kodi before the network is up and central MySQL " "databases are accessible." -msgstr "Nastavte do polohy povolit pro zpoždění startu Kodi do okamžiku, kdy bude síť k dispozici. Použijte pokud se systém spouští dřív, než je síť a centrální MySQL databáze k dispozici." +msgstr "Nastavte do polohy [I]povoleno[/I] pro zpoždění spuštění Kodi do okamžiku, kdy bude síť k dispozici. Použijte toto nastavení, pokud se operační systém spouští dříve, než je síť aktivní a centrální MySQL databáze k dispozici." msgctxt "#737" msgid "Time in seconds to wait for an established network connection." -msgstr "Čas v sekundách počkat na zavedené připojení k síti." +msgstr "Doba v sekundách, po kterou čekat na navázání připojení k síti." msgctxt "#738" msgid "Set to ON to enable the embedded Samba (SMB) filesharing service" -msgstr "Nastavte do polohy povolit, aby jste zapnuli integrovanou službu Samba (SMB) pro sdílení souborů." +msgstr "Nastavte do polohy [I]povoleno[/I], abyste zapnuli integrovanou službu Samba (SMB) pro sdílení souborů" msgctxt "#739" msgid "" "Set to ON to require username/password access to local Samba fileshares" -msgstr "Nastavte do polohy povolit a bude požadováno přihlašovací jméno/heslo pro přístup k lokálním Samba sdíleným souborům" +msgstr "Nastavte do polohy [I]povoleno[/I], aby bylo vyžadováno uživatelské jméno/heslo pro přístup k lokálním souborům sdíleným přes Sambu" msgctxt "#740" msgid "Set the username for Samba sharing" -msgstr "Nastavit uživatelské jméno pro Samba sdílení." +msgstr "Nastavit uživatelské jméno pro Samba sdílení" msgctxt "#741" msgid "Set the password for Samba sharing" -msgstr "Nastavit heslo pro Samba sdílení." +msgstr "Nastavit heslo pro Samba sdílení" msgctxt "#742" msgid "" "Set to ON to enable the embedded SSH server. The SSH console can be accessed" " with username 'root' and password '@ROOT_PASSWORD@'." -msgstr "Nastavte do polohy povolit, aby byl povolen integrovaný SSH server. SSH konzole je přístupná pod uživatelským jménem 'root' a heslem '@ROOT_PASSWORD@'." +msgstr "Nastavte do polohy [I]povoleno[/I], aby byl povolen integrovaný SSH server. SSH konzole je přístupná pod uživatelským jménem „root“ a heslem „@ROOT_PASSWORD@“." msgctxt "#743" msgid "" "Set to ON if you have copied private SSH keys to your HTPC and would like to" " improve security by disabling SSH username and password authentication." -msgstr "Nastavit do polohy povolit, pokud jste překopírovali osobní SSH klíč do svého HTPC a rádi byste zvýšili zabezpečení vypnutím SSH přihlášení pomocí uživatelského jména a hesla." +msgstr "Nastavte do polohy [I]povoleno[/I], pokud jste překopírovali privátní SSH klíče do svého HTPC a rádi byste zvýšili zabezpečení vypnutím SSH přihlášení pomocí uživatelského jména a hesla." msgctxt "#744" msgid "" "Set to ON to enable the Avahi (Zeroconf/Bonjour) network discovery service" -msgstr "Nastavit do polohy povoleno pro zapnutí služby Avahi (Zeroconf/Bonjour) pro prohledání sítě" +msgstr "Nastavte do polohy [I]povoleno[/I] pro zapnutí služby Avahi (Zeroconf/Bonjour) pro prohledání sítě" msgctxt "#745" msgid "Set to ON to enable the cron daemon" -msgstr "Nastavit do polohy povolit pro zapnutí cron daemonu" +msgstr "Nastavte do polohy [I]povoleno[/I] pro zapnutí cron daemonu" msgctxt "#746" msgid "Set the password for SSH" msgstr "Nastavte heslo pro SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Povolte PIN pro přístup do Nastavení @DISTRONAME@" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Změňte zámek PIN pro přístup do Nastavení @DISTRONAME@" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -264,21 +278,21 @@ msgctxt "#751" msgid "" "With OBEX filetransfer you can send files, for example movies or pictures " "over bluetooth to @DISTRONAME@." -msgstr "Pomocí protokolu OBEX je možno posílat přes bluetooth do @DISTRONAME@ soubory jako jsou např. filmy nebo obrázky." +msgstr "Pomocí protokolu OBEX je možné posílat přes Bluetooth do @DISTRONAME@ soubory, jako např. filmy nebo obrázky." msgctxt "#752" msgid "" "Here you can set the folder location where OBEX file transfer should store " "incoming files" -msgstr "Zde je možno nastavit složky, kde budou ukládány soubory přijaté protokolem OBEX." +msgstr "Zde je možné nastavit umístění složky, do které budou ukládány soubory přijaté protokolem OBEX" msgctxt "#753" msgid "Configure the 1st keyboard software Variant" -msgstr "Konfigurovat 1. variantu softwarové klávesnice" +msgstr "Konfigurovat 1. variantu softwarové klávesnice" msgctxt "#754" msgid "Configure the 2nd keyboard software Variant" -msgstr "Konfigurovat 2. variantu softwarové klávesnice" +msgstr "Konfigurovat 2. variantu softwarové klávesnice" msgctxt "#755" msgid "Auto share external drives / partitions" @@ -287,17 +301,17 @@ msgstr "Automaticky sdílet externí disky" msgctxt "#756" msgid "" "Disable older SMB protocols by specifying the minimum supported protocol." -msgstr "Zakázat staré SMB protokoly stanovením minimálního podporovaného protokolu." +msgstr "Zakázat starší verze protokolů SMB stanovením minimálního podporovaného protokolu." msgctxt "#757" msgid "" "Disable more recent SMB protocols for backward compatability with legacy " "clients." -msgstr "Zakázat novější verze protokolu SMB kvůli zpětné kompatibilitě se staršími klienty." +msgstr "Zakázat novější verze protokolů SMB kvůli zpětné kompatibilitě se staršími klienty." msgctxt "#758" msgid "NetBIOS group to which the server belongs. Default is WORKGROUP." -msgstr "Skupina NetBIOS ke které server patří. Výchozí je WORKGROUP." +msgstr "Skupina NetBIOS, ke které server náleží. Výchozí je WORKGROUP." msgctxt "#760" msgid "Select an update channel" @@ -305,11 +319,11 @@ msgstr "Vyberte aktualizační kanál" msgctxt "#761" msgid "Enable to allow entering a custom update url" -msgstr "Umožnit, aby zadávání vlastní URL aktualizovat" +msgstr "Umožnit zadávání vlastní URL pro aktualizaci" msgctxt "#762" msgid "Enter a custom update url (url should be the root of the update files)" -msgstr "Zadejte vlastní URL (musí ukazovat do kořenové složky aktualizačních souborů)" +msgstr "Zadejte vlastní URL pro aktualizaci (musí ukazovat do kořenové složky aktualizačních souborů)" msgctxt "#770" msgid "Select an available version" @@ -321,7 +335,7 @@ msgid "" "from private network ranges (192.168.x.x, 172.16.x.x and 10.x.x.x) only. " "Public blocks all traffic from all networks. Custom uses rules in " "/storage/.config/iptables. Off disables the firewall." -msgstr "Firewall blokuje nežádoucí síťový provoz. Domácí (výchozí) povolí provoz pouze z rozsahů místních sítí (192.168.x.x, 172.16.x.x a 10.x.x.x). Veřejný blokuje všechen provoz ze všech sítí. Vlastní použije pravidla z /storage/.config/iptables. Vypnutý zakáže firewall." +msgstr "Firewall blokuje nežádoucí síťový provoz. Domácí (výchozí) povolí provoz pouze z rozsahů místních sítí (192.168.x.x, 172.16.x.x a 10.x.x.x). Veřejný blokuje veškerý provoz ze všech sítí. Vlastní použije pravidla ze souboru /storage/.config/iptables. Vypnutý zakáže firewall." msgctxt "#772" msgid "" @@ -329,7 +343,14 @@ msgid "" "CPU Arch and Version to the update server. This data is also used to report " "basic statistics for the project. To continue checking for updates while " "opting-out of stats reporting, disable this option." -msgstr "Kontrolování nové verze odešle aktualizačnímu serveru vaší nainstalovanou distribuci, projekt, architekturu procesoru a verzi. Tato data budou použita i k získání základních statistik projektu. Zakažte tuto volbu pokud nechcete tato data odeslat, ale chcete zkontrolovat novou verzi." +msgstr "Při kontrolování nové verze se aktualizačnímu serveru odešlou informace o nainstalované distribuci, projektu, architektuře procesoru a verzi. Tato data budou použita i k získání základních statistik projektu. Zakažte tuto volbu, pokud tato data nechcete odesílat, a chcete pouze zkontrolovat novou verzi." + +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Nastavit časový limit nečinnosti (v minutách) předtím, než budou zařízení odpojena (0 je výchozí hodnota pro žádný časový limit). Platí pro všechna zařízení, u kterých bylo v kontextovém menu LibreELEC Připojení aktivováno nastavení „Povolit pohotovostní režim“." msgctxt "#32001" msgid "Services" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Vyberte akci " msgctxt "#32013" -msgid "Updates" -msgstr "Aktualizace" +msgid "OS Updates" +msgstr "Aktualizace OS" msgctxt "#32014" msgid "Automatic Updates" @@ -377,15 +398,15 @@ msgstr "Ukázat vlastní kanály" msgctxt "#32017" msgid " - Custom Channel 1" -msgstr "- Vlastní kanál 1 " +msgstr "- Vlastní kanál 1 " msgctxt "#32018" msgid " - Custom Channel 2" -msgstr "- Vlastní kanál 2" +msgstr "- Vlastní kanál 2" msgctxt "#32019" msgid " - Custom Channel 3" -msgstr "- Vlastní kanál 3" +msgstr "- Vlastní kanál 3" msgctxt "#32020" msgid "Available Versions" @@ -395,9 +416,47 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Odeslat statistiky" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Aktualizace firmware" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Aktualizace proběhne po restartování systému." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Zavaděč EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Aktualizujte zavaděč EEPROM Raspberry Pi na aktuální verzi. Tato volba se po restartu automaticky zakáže. Pro provedení aktualizace restartujte systém." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3 Firmware" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Aktualizujte Raspberry Pi VIA USB3 firmware na aktuální verzi. Tato volba se po restartu automaticky zakáže. Pro provedení aktualizace restartujte systém." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "aktualizovat z %s na %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "aktuální: %s" + msgctxt "#32100" msgid "Connections" -msgstr "Spojení" +msgstr "Připojení" msgctxt "#32101" msgid "Network" @@ -409,7 +468,7 @@ msgstr "Bezdrátové sítě" msgctxt "#32103" msgid "Wired Networks" -msgstr "Metalické sítě" +msgstr "Kabelové sítě" msgctxt "#32105" msgid "Active" @@ -425,7 +484,7 @@ msgstr "Heslo" msgctxt "#32108" msgid "Enable 'tethered' Wireless Access Point" -msgstr "Povolit 'tethered' bezdrátový přístupový bod" +msgstr "Povolit „tetherovaný“ bezdrátový přístupový bod" msgctxt "#32109" msgid "Connect Automatically" @@ -433,7 +492,7 @@ msgstr "Připojovat automaticky " msgctxt "#32110" msgid "Connection" -msgstr "Spojení" +msgstr "Připojení" msgctxt "#32111" msgid "IPv4" @@ -445,7 +504,7 @@ msgstr "IPv6" msgctxt "#32113" msgid "IP Address Method" -msgstr "Způsob získávání IP adresy" +msgstr "Způsob získávání IP adresy" msgctxt "#32114" msgid "IP Address" @@ -473,15 +532,15 @@ msgstr "DNS servery" msgctxt "#32120" msgid "Nameserver #1" -msgstr "DNS server #1" +msgstr "DNS server #1" msgctxt "#32121" msgid "Nameserver #2" -msgstr "DNS server #2" +msgstr "DNS server #2" msgctxt "#32122" msgid "Nameserver #3" -msgstr "DNS server #3" +msgstr "DNS server #3" msgctxt "#32123" msgid "NTP Servers" @@ -489,15 +548,15 @@ msgstr "NTP servery" msgctxt "#32124" msgid "Timeserver #1" -msgstr "NTP server #1" +msgstr "NTP server #1" msgctxt "#32125" msgid "Timeserver #2" -msgstr "NTP server #2" +msgstr "NTP server #2" msgctxt "#32126" msgid "Timeserver #3" -msgstr "NTP server #3" +msgstr "NTP server #3" msgctxt "#32127" msgid "DNS Domains" @@ -541,7 +600,7 @@ msgstr "Spárovat" msgctxt "#32146" msgid "Hidden Network Name" -msgstr "Jméno skryté sítě" +msgstr "Název skryté sítě" msgctxt "#32147" msgid "Wireless Network Passphrase" @@ -557,11 +616,11 @@ msgstr "Upravit" msgctxt "#32180" msgid "Would you like to update @DISTRONAME@ now?" -msgstr "Chcete aktualizovat @DISTRONAME@?" +msgstr "Přejete si nyní aktualizovat @DISTRONAME@?" msgctxt "#32181" msgid "Filename" -msgstr "Jméno souboru" +msgstr "Název souboru" msgctxt "#32182" msgid "Download speed" @@ -581,7 +640,7 @@ msgstr "Rychlost rozbalování" msgctxt "#32186" msgid "Initialize Archive File" -msgstr "Inicializace Archiv souborů" +msgstr "Inicializace archivního souboru" msgctxt "#32187" msgid "New Version" @@ -589,7 +648,7 @@ msgstr "Nová verze" msgctxt "#32188" msgid "Current Version" -msgstr "Aktuální verze" +msgstr "Stávající verze" msgctxt "#32189" msgid "Identification" @@ -597,11 +656,23 @@ msgstr "Identifikace" msgctxt "#32190" msgid "System Name" -msgstr "Jméno systému" +msgstr "Název systému" msgctxt "#32191" msgid "Invalid URL" -msgstr "neplatné URL" +msgstr "Neplatná adresa URL" + +msgctxt "#32192" +msgid "PIN lock" +msgstr "Zámek PIN" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Povolit zámek PIN pro vstup do Nastavení @DISTRONAME@" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Změnit zámek PIN pro vstup do Nastavení @DISTRONAME@" msgctxt "#32196" msgid "About" @@ -621,15 +692,15 @@ msgstr "SSH" msgctxt "#32202" msgid "Use Samba Password Authentication" -msgstr "Používat u SMB protokolu ověření heslem" +msgstr "Používat u SMB protokolu ověření heslem" msgctxt "#32203" msgid "Disable SSH Password" -msgstr "Deaktivovat SSH heslo" +msgstr "Deaktivovat SSH heslo" msgctxt "#32204" msgid "Enable Samba" -msgstr "Povolit SMB protokol" +msgstr "Povolit SMB protokol" msgctxt "#32205" msgid "Enable SSH" @@ -655,7 +726,7 @@ msgctxt "#32210" msgid "" "The default SSH password is widely known and considered " "insecure.[CR][CR]Setting a personal password is recommended." -msgstr "Výchozí heslo SSH je všeobecně známé a považováno za nejisté.[CR][CR]Doporučuje se nastavit osobní heslo." +msgstr "Výchozí heslo SSH je všeobecně známé a je považováno za nedůvěryhodné.[CR][CR]Doporučuje se nastavit vlastní heslo." msgctxt "#32212" msgid "Cancel" @@ -687,11 +758,11 @@ msgstr "Maximální podporovaný protokol" msgctxt "#32220" msgid "Bad password!" -msgstr "Špatné heslo!" +msgstr "Nesprávné heslo!" msgctxt "#32221" msgid "The entered password is too weak.[CR]SSH password is unchanged." -msgstr "Zadané heslo je příliš slabé. Heslo[CR]SSH zůstává nezměněno." +msgstr "Zadané heslo je příliš slabé.[CR]Heslo SSH zůstává nezměněno." msgctxt "#32222" msgid "Password changed!" @@ -707,11 +778,71 @@ msgstr "Neznámá chyba!" msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." -msgstr "Během procesu došlo k chybě. Heslo[CR]SSH zůstává nezměněno." +msgstr "Během procesu došlo k chybě.[CR]Heslo SSH zůstává nezměněno." + +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Zadejte nový 4číselný PIN " + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Zadejte znovu PIN" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Chyba – PINy se neshodují!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "Zámek PIN pro vstup do Nastavení @DISTRONAME@ nebyl nastaven.[CR][CR]Zkuste to prosím znovu." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "Zámek PIN pro vstup do Nastavení @DISTRONAME@ byl nastaven." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Chyba – PIN není 4číselný!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Nesprávný PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr " zbývající pokusy." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Mnohokrát jste zadali nesprávný PIN.[CR][CR]Před dalším pokusem budete muset počkat 5 minut." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "Nastavení @DISTRONAME@ je uzamčeno!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" msgctxt "#32300" msgid "Welcome to @DISTRONAME@" -msgstr "Vítejte v @DISTRONAME@" +msgstr "Vítejte v @DISTRONAME@" msgctxt "#32301" msgid "Welcome" @@ -723,7 +854,7 @@ msgid "" "@DISTRONAME@ installation - setting your location, timezone and connecting " "you to the internet.[CR][CR]These settings can be changed later by " "navigating to Programs > @DISTRONAME@ Settings." -msgstr "Tento pomocník vás provede procesem nastavení vaší nové @DISTRONAME@ instalace - zadáním vaší polohy, časové zóny a připojí vás k internetu.[CR][CR]Tato nastavení mohou být později změněna pomocí menu: Programy > @DISTRONAME@ Nastavení." +msgstr "Tento pomocník vás provede procesem nastavení vaší nové instalace @DISTRONAME@ – zadáním vaší polohy, časové zóny a připojí vás k internetu.[CR][CR]Tato nastavení mohou být později změněna v menu: Programy > Nastavení @DISTRONAME@." msgctxt "#32303" msgid "Next" @@ -735,7 +866,7 @@ msgid "" "a name.[CR][CR]Try to choose something meaningful - like the room it's in - " "so you'll know what it is when you see it on the network.[CR][CR]This name " "is used when configuring network services, like file sharing using samba." -msgstr "Pro jednoduší identifikaci nového @DISTRONAME@ zařízení je nutný název. [CR][CR]Zkuste si vybrat něco výstižného např. v jakém pokoji se zařízení nachází. Okamžitě tak budete vědět o jaké zařízení se v síti jedná. [CR][CR] Tento název je použit pro nastavení síťových služeb jako je sdílení pomocí SMB." +msgstr "Pro jednodušší síťovou identifikaci nového zařízení @DISTRONAME@ je nutné zadat jeho název.[CR][CR]Zkuste si vybrat nějaký výstižný – např. v jaké místnosti se zařízení nachází. Okamžitě tak budete vědět o jaké zařízení v síti se jedná.[CR][CR]Tento název je použit pro nastavení síťových služeb, jako je sdílení souborů pomocí SMB." msgctxt "#32305" msgid "Networking" @@ -747,15 +878,15 @@ msgid "" "TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " "needs to be connected the Internet.[CR][CR]An Internet connection is also " "required for @DISTRONAME@ to automatically update itself." -msgstr "Aby bylo možné stáhnout pozadí, banery a náhledy pro filmy, TV seriály a pro online sledování obsahu ze stránek jako je YouTube, je nutné, aby by l@DISTRONAME@ připojen k internetu. [CR][CR] Internetové připojení je také nutné pro automatické aktualizace systému @DISTRONAME@." +msgstr "Aby bylo možné stahovat pozadí, banery a náhledy pro filmy a TV seriály a pro možnost online sledování obsahu ze stránek jako je YouTube, je nutné, aby byl systém @DISTRONAME@ připojen k internetu.[CR][CR]Internetové připojení je také nutné pro automatické aktualizace systému @DISTRONAME@." msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Předchozí" msgctxt "#32308" msgid "Hostname:" -msgstr "Hostname:" +msgstr "Název systému:" msgctxt "#32309" msgid "The following Networks are currently available:" @@ -763,11 +894,11 @@ msgstr "K dispozici jsou následující sítě:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Jazyk:" msgctxt "#32311" msgid "Sharing and Remote Access" -msgstr "Sdílení a vzdálený přistup" +msgstr "Sdílení a vzdálený přístup" msgctxt "#32312" msgid "" @@ -775,7 +906,7 @@ msgid "" " who wish to interact with @DISTRONAME@'s underlying operating system. The " "default user is [COLOR blue]root[/COLOR] and the default password is [COLOR " "blue]@ROOT_PASSWORD@[/COLOR]." -msgstr "@DISTRONAME@ také podporuje vzdálený přístup pomocí SSH. Tato možnost je pro pokročilé uživatelé, kteří chtějí komunikovat s jádrem systému @DISTRONAME@. Výchozí uživatelské jméno je [COLOR blue]root[/COLOR] a výchozí heslo je [COLOR blue]@ROOT_PASSWORD@[/COLOR]." +msgstr "@DISTRONAME@ také podporuje vzdálený přístup pomocí SSH. Tato možnost je pro pokročilé uživatele, kteří chtějí komunikovat s jádrem systému @DISTRONAME@. Výchozí uživatelské jméno je [COLOR blue]root[/COLOR] a výchozí heslo je [COLOR blue]@ROOT_PASSWORD@[/COLOR]." msgctxt "#32313" msgid "" @@ -783,7 +914,7 @@ msgid "" "incorporated a samba server. This samba server can be integrated into your " "local network by accessing it in a familiar way with Finder or Windows " "Explorer." -msgstr "Aby bylo možné sdílet soubory mezi počítačem a @DISTRONAME@ zařízením, jsou k dispozici sdílené složky pomocí protokolu samba. Pro přístup ke sdílením složkám je možno jednoduše použít v lokální síti aplikace Finder nebo Windows Explorer." +msgstr "Aby bylo možné sdílet soubory mezi počítačem a zařízením @DISTRONAME@, jsou k dispozici sdílené složky pomocí protokolu SMB. Pro snadný přístup ke sdílením složkám v lokální síti je možné použít všeobecně známé rozhraní aplikací Finder nebo Windows Explorer." msgctxt "#32316" msgid "Configure Services:" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "Instalace @DISTRONAME@ byla dokončena a nyní můžete pokračovat do Kodi, kde si můžete nastavit vaše mediální knihovny. Pokud s tím potřebujete pomoct, můžete si projít návod, který je k dispozici na adrese wiki.kodi.tv.[CR][CR]@DISTRONAME@ je vyvíjen obětavým týmem vývojářů, kteří na něm pracují ve svém volném čase. Přestože jde o dobrovolnický projekt, i tak musíme platit za udržení síťové infrastruktury v chodu a za náklady na vývoj. Pokud se vám @DISTRONAME@ líbí a shledáváte ho užitečným, my pak zase vždy vděčně oceníme finanční příspěvek v jakékoliv výši.[CR][CR]Závěrem doufáme, že vás @DISTRONAME@ baví stejně, jako nás baví ho dávat dohromady. Jestliže s něčím potřebujete dále pomoci, odkazy na naše fórum podpory naleznete na našem webu společně s aktuálními novinkami." msgctxt "#32319" msgid "Cron" @@ -829,15 +960,15 @@ msgstr "Obnovit výchozí nastavení @DISTRONAME@ " msgctxt "#32326" msgid "Are you sure?" -msgstr "Jste si jistý?" +msgstr "Jste si jisti?" msgctxt "#32328" msgid "The system must reboot." -msgstr "Je třeba restartovat systém" +msgstr "Je potřeba restartovat systém." msgctxt "#32329" msgid "Rebooting in %d seconds" -msgstr "Restart za %d sekund" +msgstr "Restartování proběhne za %d s" msgctxt "#32330" msgid "Keyboard Type" @@ -861,29 +992,29 @@ msgstr "Ne" msgctxt "#32338" msgid "No Bluetooth adapter found." -msgstr "Bluetooth adaptér nenalezen." +msgstr "Nebyl nalezen žádný Bluetooth adaptér." msgctxt "#32339" msgid "" "No Bluetooth device found. Please put your Bluetooth device into discovery " "mode[CR]and start the scan" -msgstr "Nebylo nalezeno žádné bluetooth zařízení. Prosím nastavte zařízení do discovery režimu[CR] a spusťte skenování." +msgstr "Nebylo nalezeno žádné zařízení Bluetooth. Nastavte prosím zařízení Bluetooth do zjistitelného režimu[CR]a spusťte prohledávání." msgctxt "#32343" msgid "Enter the following Key on your Device." -msgstr "Zadejte následující klíč na svém zařízení" +msgstr "Zadejte na svém zařízení následující klíč." msgctxt "#32344" msgid "Enable Bluetooth" -msgstr "Povolit bluetooth" +msgstr "Povolit Bluetooth" msgctxt "#32346" msgid "Bluetooth is disabled" -msgstr "Bluetooth je vypnut" +msgstr "Bluetooth je zakázán" msgctxt "#32358" msgid "Trust and Connect" -msgstr "Důvěřovat a připojit" +msgstr "Důvěřovat a připojit" msgctxt "#32362" msgid "Check for updates now:" @@ -895,7 +1026,7 @@ msgstr "@DISTRONAME@" msgctxt "#32364" msgid "Update available" -msgstr "Aktualizace k dispozici" +msgstr "Aktualizace k dispozici" msgctxt "#32365" msgid "Show Update Notifications" @@ -915,7 +1046,7 @@ msgstr "Rozšířené nastavení internetu" msgctxt "#32369" msgid "Wait for network before starting Kodi" -msgstr "Počkat na připojení k sítí před zapnutím Kodi" +msgstr "Počkat na připojení k síti před spuštěním Kodi" msgctxt "#32370" msgid "Maximum Wait Time (Sec.)" @@ -927,7 +1058,7 @@ msgstr "Zálohovat" msgctxt "#32372" msgid "Create System and Kodi Backup" -msgstr "Vytvořit zálohu systému a Kodi" +msgstr "Vytvořit zálohu systému a Kodi" msgctxt "#32373" msgid "Restore Backup" @@ -939,15 +1070,15 @@ msgstr "Průběh zálohování" msgctxt "#32376" msgid "Submit Log" -msgstr "předloží protokol" +msgstr "Odeslat protokol" msgctxt "#32377" msgid "Upload latest Kodi log and configs, and view the short URL" -msgstr "Nahrát poslední záznamy a nastavení z Kodi a zobrazit zkrácenou adresu" +msgstr "Nahrát aktuální protokol (log) a nastavení z Kodi a zobrazit zkrácenou adresu URL" msgctxt "#32378" msgid "Upload latest Kodi crash log and configs, and view the short URL" -msgstr "Nahrát poslední záznamy o pádu Kodi a zobrazit zkrácenou adresu" +msgstr "Nahrát aktuální protokol (log) o pádu a nastavení z Kodi a zobrazit zkrácenou adresu URL" msgctxt "#32379" msgid "There is not enough free storage space to continue!" @@ -957,11 +1088,11 @@ msgctxt "#32380" msgid "" "Restoring system settings requires a reboot. Are you sure you want to " "restore?" -msgstr "Obnovení nastavení systému vyžaduje restart. Skutečně si přejete obnovit?" +msgstr "Obnovení nastavení systému vyžaduje restart. Skutečně si přejete provést obnovení?" msgctxt "#32381" msgid "Accept incoming Bluetooth Filetransfer ?" -msgstr "Povolit příchozí bluetooth přenosy?" +msgstr "Povolit příchozí Bluetooth přenos?" msgctxt "#32382" msgid "Speed" @@ -973,7 +1104,7 @@ msgstr "Přehrát soubory?" msgctxt "#32384" msgid "OBEX Enabled" -msgstr "Povoit OBEX" +msgstr "Povolit OBEX" msgctxt "#32385" msgid "OBEX Upload Folder" @@ -981,11 +1112,11 @@ msgstr "Adresář pro nahrávání OBEX" msgctxt "#32386" msgid "Keyboard Layout Variant #1" -msgstr "Rozložení klávesnice #1" +msgstr "Varianta rozložení klávesnice č. 1" msgctxt "#32387" msgid "Keyboard Layout Variant #2" -msgstr "Rozložení klávesnice #2" +msgstr "Varianta rozložení klávesnice č. 2" msgctxt "#32388" msgid "Enable Standby" @@ -993,15 +1124,15 @@ msgstr "Povolit pohotovostní režim" msgctxt "#32389" msgid "Disable Standby" -msgstr "zakázat pohotovostní režim" +msgstr "Zakázat pohotovostní režim" msgctxt "#32390" msgid "Settings addon is not yet ready, please try again later." -msgstr "Nastavení doplňku není připraveno, prosím zkuste později." +msgstr "Nastavení doplňku ještě není připraveno, zkuste to prosím později." msgctxt "#32393" msgid "** SAFE MODE! ** SAFE MODE! ** SAFE MODE! **" -msgstr "** BEZPEČNÝ REŽIM! ** BEZPEČNÝ REŽIM! ** BEZPEČNÝ REŽIM! **" +msgstr "** NOUZOVÝ REŽIM! ** NOUZOVÝ REŽIM! ** NOUZOVÝ REŽIM! **" msgctxt "#32394" msgid "" @@ -1014,7 +1145,7 @@ msgid "" " assistance. When posting to the forum include the link to your crash log " "which can be viewed by clicking the crash log option in Settings > LibreELEC" " > System > Submit Log." -msgstr "@DISTRONAME@ je z důvodů opakovaných pádů Kodi dočasně spuštěný v bezpečném.[CR][CR]Můžete prověřit příčiny pádů povolením ssh nebo Samby.[CR][CR]Vaše původní instalace Kodi je přístupná přes \"/storage/.kodi.FAILED\" a Samba složku \"Kodi-Failed\".[CR][CR]Restartováním se vrátíte k původní instalaci Kodi.[CR][CR]Navštivte https://forum.libreelec.tv pokud potřebujete další asistenci. Při přispívání do fóra prosím uveďte adresu záznamů o pádu, kterou získáte klepnutím na volbu záznamu o pádu v Nastavení > LibreELEC > Systém > Odeslat záznam." +msgstr "@DISTRONAME@ byl z důvodu opakovaných pádů Kodi dočasně spuštěn v nouzovém režimu.[CR][CR]Můžete prověřit příčiny pádů povolením SSH nebo Samby (SMB).[CR][CR]Vaše původní instalace Kodi je přístupná přes „/storage/.kodi.FAILED“ a sdílenou složku Samba – „Kodi-Failed“.[CR][CR]Restartováním se vrátíte k původní instalaci Kodi.[CR][CR]Pokud potřebujete další pomoc, navštivte https://forum.libreelec.tv. Při přispívání do fóra prosím uveďte adresu protokolu o pádu, kterou získáte klepnutím na volbu Protokol o pádu v Nastavení > LibreELEC > Systém > Odeslat protokol." msgctxt "#32395" msgid "Firewall" @@ -1035,3 +1166,7 @@ msgstr "Domácí" msgctxt "#32399" msgid "Public" msgstr "Veřejný" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Časový limit nečinnosti" diff --git a/language/resource.language.de_de/strings.po b/language/resource.language.de_de/strings.po index cbbad66e..c53a80b7 100644 --- a/language/resource.language.de_de/strings.po +++ b/language/resource.language.de_de/strings.po @@ -99,7 +99,7 @@ msgctxt "#710" msgid "" "Configure the Hostname of your @DISTRONAME@ system. This will be used for " "the HTPC \\\\hostname in Windows and SMB server name in the Mac OS Finder" -msgstr "Konfigurieren Sie den Hostnamen Ihres @DISTRONAME@-Systems. Dies wird für den HTPC \\\\Hostnamen in Windows und für den SMB-Servernamen im Mac OS Finder verwendet werden." +msgstr "Konfigurieren Sie den Hostnamen Ihres @DISTRONAME@ Systems. Dies wird für den HTPC \\\\Hostnamen in Windows und für den SMB-Servernamen im Mac OS Finder verwendet werden." msgctxt "#711" msgid "Configure the 1st keyboard software layout" @@ -139,16 +139,15 @@ msgid "" msgstr "Boot-Konfigurationen von /flash, kodi_crash.log, kernel log und Samba-Konfigurationen an http://ix.io übermitteln und die Kurz-URL anzeigen" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Auf EIN stellen und Bluetooth-Geräte werden während Stromspar-Modi deaktiviert" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Auf EIN stellen, um Bluetooth zu aktivieren" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Erzeugt ein Backup als Tar-Archiv, welches die gesamten Einstellungen, Datenbanken und Vorschaubilder von @DISTRONAME@ und Kodi enthält. Die Backups werden in /storage/backups abgelegt." +"/storage/backup/" +msgstr "Erzeugt ein Backup als tar-Archiv, welches die gesamten Einstellungen, Datenbanken und Vorschaubilder von @DISTRONAME@ und Kodi enthält. Die Sicherungen werden unter /storage/backup/ abgelegt." msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Passwort für SSH setzen" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "PIN für den Zugriff auf die @DISTRONAME@ Einstellungen aktivieren" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "PIN für den Zugriff auf die @DISTRONAME@ Einstellungen ändern" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "Die Behördliche Bestimmungen (für Funkkanäle und Sendeleistung) überschreiben, um mit den örtlichen Gesetzen im Einklang zu stehen." + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Das Überprüfen auf eine neue Version übermittelt die installierte Distribution, das Projekt, die CPU-Architektur und die Version an den Update-Server. Diese Daten werden auch verwendet, um grundlegende Statistiken für das Projekt zu übermitteln. Um weiterhin nach Updates suchen zu können, bei dem das übermitteln der Statistiken deaktiviert ist, bitte diese Option deaktivieren." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Das Leerlauf-Timeout (in Minuten) einstellen, bevor die Geräte getrennt werden (standardmäßig 0 für kein Timeout). Gilt für Geräte, bei denen \"Standby aktivieren\" im Kontextmenü der @DISTRONAME@ Geräteverbindung Menü aktiviert wurde." + msgctxt "#32001" msgid "Services" msgstr "Dienste" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Aktion auswählen" msgctxt "#32013" -msgid "Updates" -msgstr "Aktualisierungen" +msgid "OS Updates" +msgstr "Aktualisierungen des Betriebssystems" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Statistiken übermitteln" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Firmware-Aktualisierungen" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Die Aktualisierung erfolgt nach dem nächsten Neustart des Systems." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "EEPROM-Bootloader" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Den EEPROM-Bootloader des Raspberry Pi auf die neueste Version aktualisieren. Diese Option wird nach dem nächsten Neustart des Systems automatisch wieder deaktiviert. Starte das System neu, um die Aktualisierung durchzuführen." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB 3.0 Firmware" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Die Raspberry-Pi-Firmware des VIA USB 3.0 auf die neueste Version aktualisieren. Diese Option wird nach dem nächsten Neustart automatisch wieder deaktiviert. Starte das System neu, um die Aktualisierung durchzuführen." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "Aktualisierung von %s auf %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "Auf dem neusten Stand: %s" + msgctxt "#32100" msgid "Connections" msgstr "Verbindungen" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Ungültige URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN-Sperre" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "PIN-Sperre für die @DISTRONAME@ Einstellungen aktivieren" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "PIN-Sperre für @DISTRONAME@ Einstellungen ändern" + msgctxt "#32196" msgid "About" msgstr "Über" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Beim Bearbeiten des Vorgangs ist ein Fehler aufgetreten.[CR]SSH-Passwort wurde nicht geändert." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Neue 4-stellige PIN eingeben" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "PIN wiederholen" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Fehler: PINs stimmen nicht überein" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "PIN-Sperre für die @DISTRONAME@ Einstellungen wurde nicht eingerichtet.[CR][CR]Bitte nochmals versuchen." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "PIN-Sperre für die @DISTRONAME@ Einstellungen eingerichtet." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "Deine PIN-Sperre für die @DISTRONAME@ Einstellungen wurde eingestellt auf: " + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Fehler: PIN ist nicht 4-stellig!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "@DISTRONAME@ Einstellungen gesperrt[CR]4-stellige PIN eingeben" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Falsche PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "Verbleibende Eingabeversuche." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Du hast zu oft hintereinander eine falsche PIN eingegeben.[CR][CR]Du musst 5 Minuten warten, bevor Du es erneut versuchen kannst." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@ Einstellungen gesperrt!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Verbleibende Zeit bis die PIN erneut eigegeben werden darf %02d:%02d[CR][CR]Zu viele fehlgeschlagene Versuche." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Behördliche Bestimmungen für Funkkanäle" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Willkommen bei @DISTRONAME@" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "Die Installation von @DISTRONAME@ ist nun abgeschlossen und du wirst als nächstes Kodi zu geleitet. wo du deine Medienbibliotheken einrichten kannst. Hilfe hierzu findest du unter wiki.kodi.tv.[CR][CR]@DISTRONAME@ wird von einem engagierten Team von Freiwilligen entwickelt, die ausschließlich in ihrer Freizeit arbeiten. Selbst als ehrenamtliches Projekt müssen wir immer noch unsere Internet Bandbreite und Entwicklungsressourcen bezahlen. Wenn du @DISTRONAME@ für nützlich hältst, freuen wir uns immer über eine Spende in beliebiger Höhe.[CR][CR]Zum Schluss wünschen wir Dir viel Spaß mit @DISTRONAME@. Wenn du weitere Hilfe benötigst, findest du auf unserer Website Links zu unserem Support-Forum sowie zu unseren News." +msgstr "Die Installation von @DISTRONAME@ ist abgeschlossen. Du darfst nun endlich in die Kodi-Welt eintauchen in der Du Deine Mediatheken einrichten kannst. Falls Du Hilfe benötigst, findest Du unter wiki.kodi.tv Anleitungen und Unterstützung.[CR][CR]@DISTRONAME@ wird von einem engagierten Freiwilligenteam entwickelt, das daran ausschließlich in seiner Freizeit arbeiten. Dennoch müssen wir selbst als ehrenamtliches Projekt unser Internet, die Website, das Webhosting, die Technik und die Entwicklungskosten bezahlen. Wenn Du also @DISTRONAME@ nützlich findest, würden wir uns über eine Spende in beliebiger Höhe freuen.[CR][CR]Zum Schluss wünschen wir Dir mit @DISTRONAME@ genauso viel Spaß, wie wir bei der Entwicklung hatten. Falls Du weitere Hilfe benötigst, findest Du auf unserer Website auch ein Support-Forum und aktuelle Meldungen." msgctxt "#32319" msgid "Cron" @@ -1035,3 +1166,7 @@ msgstr "Privat" msgctxt "#32399" msgid "Public" msgstr "Öffentlich" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Leerlauf-Timeout" diff --git a/language/resource.language.es_es/strings.po b/language/resource.language.es_es/strings.po index 1c7cf2f2..d649f5e2 100644 --- a/language/resource.language.es_es/strings.po +++ b/language/resource.language.es_es/strings.po @@ -12,7 +12,7 @@ msgstr "" msgctxt "#600" msgid "@DISTRONAME@ Settings" -msgstr "Configuraciones de @DISTRONAME@" +msgstr "Configuración de @DISTRONAME@" msgctxt "#601" msgid "Interface" @@ -60,7 +60,7 @@ msgid "" " in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " "GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " "project expenses are accepted via PayPal:[CR]donations@libreelec.tv" -msgstr "Damos [B]soporte[/B] a través del forum:[CR]https://forum.libreelec.tv[CR][CR]La [B]documentación[/B] está disponible en nuestra wiki:[CR]https://libreelec.wiki[CR][CR]El [B]código fuente[/B] se encuentra en GitHub:[CR]https://github.com/LibreELEC[CR][CR]Las [B]donaciones[/B] para el proyecto pueden realizarse a través de PayPal:[CR]donations@libreelec.tv" +msgstr "El [B]soporte[/B] se proporciona a través de nuestro foro:[CR]https://forum.libreelec.tv[CR][CR]La [B]documentación[/B] se puede leer en nuestro wiki:[CR]https://libreelec.wiki[CR][CR]El [B]código[/B] se puede encontrar en GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donaciones[/B] para los gastos del proyecto se aceptan a través de PayPal:[CR]donations@libreelec.tv" msgctxt "#700" msgid "" @@ -75,11 +75,11 @@ msgstr "Configurar las opciones de red al inicio, NTP y VPNs" msgctxt "#702" msgid "" "Manage the Ethernet, Wireless and VPN connections available to the system" -msgstr "Administrar Ethernet, Wireless y conexiones VPN disponibles." +msgstr "Administrar las conexiones Ethernet, inalámbricas y VPN disponibles para el sistema" msgctxt "#703" msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" -msgstr "Configurar servicios de sistema como Samba, SSH, Cron, Avahi y Syslog" +msgstr "Configurar servicios del sistema como Samba, SSH, Cron, Avahi y Syslog" msgctxt "#704" msgid "Configure and pair Bluetooth devices" @@ -89,7 +89,7 @@ msgctxt "#705" msgid "" "Useful information like version and architecture details, support and " "documentation links, and how to donate and support the project." -msgstr "Información útil como: Detalles de la versión y arquitectura, enlaces de soporte y documentación y cómo donar al proyecto." +msgstr "Información útil como detalles de la versión y arquitectura, enlaces de soporte y documentación, y cómo donar al proyecto." msgctxt "#707" msgid "Configure updates" @@ -99,15 +99,15 @@ msgctxt "#710" msgid "" "Configure the Hostname of your @DISTRONAME@ system. This will be used for " "the HTPC \\\\hostname in Windows and SMB server name in the Mac OS Finder" -msgstr "Configure el nombre del equipo de su sistema @DISTRONAME@. Este será usado por el HTPC \\\\nombredeequipo en Windows y en el servidor de nombres SMB de Mac OS Finder" +msgstr "Configura el nombre del equipo de tu sistema @DISTRONAME@. Este será usado por el HTPC \\\\nombredeequipo en Windows y en el servidor de nombres SMB de macOS Finder" msgctxt "#711" msgid "Configure the 1st keyboard software layout" -msgstr "Configure la primera disposición de teclado" +msgstr "Configura la primera disposición de teclado" msgctxt "#712" msgid "Configure the 2nd keyboard software layout" -msgstr "Configure la segunda disposición de teclado" +msgstr "Configura la segunda disposición de teclado" msgctxt "#713" msgid "Configure the physical keyboard type" @@ -118,37 +118,36 @@ msgid "" "@DISTRONAME@ can be configured for automatic or manual updates. Automatic " "updates are available on stable releases and stable release candidates. " "Automatic update self-disables on beta and development builds" -msgstr "@DISTRONAME@ puede ser configurado con actualizaciones manuales o automáticas. Las actualizaciones automáticas están disponibles para las versiones estables y candidatos a versiones estables. Las actualizaciones automáticas no están habilitadas para versiones beta o de desarrollo." +msgstr "@DISTRONAME@ puede ser configurado con actualizaciones manuales o automáticas. Las actualizaciones automáticas están disponibles para las versiones estables y candidatas a versión estable. Las actualizaciones automáticas no están habilitadas para versiones beta o de desarrollo." msgctxt "#715" msgid "" "Set to ON and an on-screen notification will be displayed when a new update " "is available" -msgstr "Active esta función y se mostrará una notificación cuando una nueva versión esté disponible." +msgstr "Habilite esta función y se mostrará una notificación cuando una nueva versión esté disponible." msgctxt "#718" msgid "" "Send boot config files from /flash, kodi.log, kernel log and Samba configs " "to http://ix.io, and display the short URL" -msgstr "Enviar archivos de configuración de arranque de /flash, kodi.log, registro kernel y configuraciones de Samba a http://ix.io, y mostrar URL corta" +msgstr "Envía los archivos de la configuración de arranque de /flash, archivo kodi.log, registro kernel y configuraciones Samba a http://ix.io, y muestra una URL corta" msgctxt "#719" msgid "" "Send boot config files from /flash, kodi_crash.log, kernel log and Samba " "configs to http://ix.io, and display the short URL" -msgstr "Enviar archivos de configuración de arranque de /flash, kodi_crash.log, registro kernel y configuraciones de Samba a http://ix.io, y mostrar URL corta" +msgstr "Envía los archivos de la configuración de arranque de /flash, archivo kodi_crash.log, registro kernel y configuraciones Samba a http://ix.io, y muestra una URL corta" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Active esta función y los dispositivos Bluetooth serán desactivados en el modo de ahorro de energía" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Habilita esta función para habilitar el servicio Bluetooth" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Crea un archivo tar conteniendo toda la configuración de @DISTRONAME@ y Kodi, Base de datos y miniaturas. Los archivos de respaldo se almacenarán en /storage/backups" +"/storage/backup/" +msgstr "Crea un archivo tar conteniendo toda la configuración de @DISTRONAME@ y Kodi, base de datos y miniaturas. Los archivos de respaldo se almacenarán en /storage/backup/" msgctxt "#723" msgid "" @@ -160,55 +159,55 @@ msgctxt "#724" msgid "" "[COLOR FF00FF00]SOFT RESET[/COLOR]\n" "Permanently reset @DISTRONAME@ configuration to defaults (resets also Kodi to default including your library. your media - music/videos/etc are not touched)" -msgstr "[COLOR FF00FF00]SOFT RESET[/COLOR]\nRestaurar la configuración @DISTRONAME@ a los valores por defecto (la configuración de Kodi incluyendo su biblioteca. Su colección, música/videos/etc no será tocada)" +msgstr "[COLOR FF00FF00]SOFT RESET[/COLOR]\nRestaura permanentemente @DISTRONAME@ a los valores por defecto (la configuración de Kodi incluyendo tu biblioteca. Tu colección, música/vídeos/etc no será tocada)" msgctxt "#725" msgid "" "[COLOR FFFF0000]HARD RESET[/COLOR]\n" "Permanently reset @DISTRONAME@ and Kodi configuration to defaults (everything in your storage partition will be deleted)" -msgstr "[COLOR FFFF0000]HARD RESET[/COLOR]\nRestaura permanentemente @DISTRONAME@ y Kodi a su configuración por defecto (todos los datos en su partición storage serán eliminados)" +msgstr "[COLOR FFFF0000]HARD RESET[/COLOR]\nRestaura permanentemente @DISTRONAME@ y Kodi a los valores por defecto (todos los datos en tu partición de almacenamiento serán eliminados)" msgctxt "#726" msgid "Enable or disable support for Wireless (WLAN) networks" -msgstr "Activa o desactiva el soporte para redes inalámbricas (WLAN)" +msgstr "Habilita o deshabilita el soporte para redes inalámbricas (WLAN)" msgctxt "#727" msgid "" "Enable a 'tethered' Wireless Access Point. This requires your wireless card " "(and driver) to support bridging and access point mode. Not all cards are " "capable." -msgstr "Activa un Punto de Acceso Inalámbrico. Requiere que su placa inalámbrica (y controlador) soporte modo AP y puente. No todas las placas soportan esta funcionalidad." +msgstr "Habilita un punto de acceso inalámbrico. Esto requiere que tu placa inalámbrica (y controlador) soporte el modo AP y puente. No todas las placas son capaces." msgctxt "#728" msgid "Configure the Access Point SSID" -msgstr "Configure el SSID del Punto de Acceso" +msgstr "Configure el SSID del Punto de acceso" msgctxt "#729" msgid "Configure the Access Point Passphrase" -msgstr "Configure la contraseña del Punto de Acceso" +msgstr "Configure la contraseña del Punto de acceso" msgctxt "#730" msgid "Enable or disable support for Wired (Ethernet) networks" -msgstr "Activa o desactiva el soporte para redes cableadas (Ethernet)" +msgstr "Habilita o deshabilita el soporte para redes cableadas (Ethernet)" msgctxt "#732" msgid "Configure the 1st time (NTP) server" -msgstr "Configurar el 1er servidor (NTP) de tiempo" +msgstr "Configurar el 1er servidor de tiempo (NTP)" msgctxt "#733" msgid "Configure the 2nd time (NTP) server" -msgstr "Configurar el 2º servidor (NTP) de tiempo" +msgstr "Configurar el 2do servidor de tiempo (NTP)" msgctxt "#734" msgid "Configure the 3rd time (NTP) server" -msgstr "Configurar el 3º servidor (NTP) de tiempo" +msgstr "Configurar el 3er servidor de tiempo (NTP)" msgctxt "#736" msgid "" "Set to ON to delay Kodi startup until the network is available. Use this if " "the OS is booting into Kodi before the network is up and central MySQL " "databases are accessible." -msgstr "Active esta función pare retrasar el arranque de Kodi hasta que la red esté disponible. Use esta función si es necesario que la base de datos MySQL esté accesible antes que inicie Kodi" +msgstr "Habilita esta función para retrasar el arranque de Kodi hasta que la red esté disponible. Usa esta función si es necesario que la base de datos MySQL esté accesible antes que inicie Kodi" msgctxt "#737" msgid "Time in seconds to wait for an established network connection." @@ -216,46 +215,61 @@ msgstr "Segundos restantes para establecer la conexión de red." msgctxt "#738" msgid "Set to ON to enable the embedded Samba (SMB) filesharing service" -msgstr "Active esta función para habilitar el servicio de compartición de archivos Samba (SMB)" +msgstr "Habilita esta función para habilitar el servicio de compartición de archivos Samba (SMB)" msgctxt "#739" msgid "" "Set to ON to require username/password access to local Samba fileshares" -msgstr "Active esta función para solicitar usuario y contraseña para acceder a los archivos compartidos por Samba" +msgstr "Habilite esta función para solicitar usuario y contraseña para acceder a los archivos compartidos por Samba" msgctxt "#740" msgid "Set the username for Samba sharing" -msgstr "Fijar el usuario para compartir Samba" +msgstr "Asignar el usuario para compartir Samba" msgctxt "#741" msgid "Set the password for Samba sharing" -msgstr "Fijar la contraseña para compartir Samba" +msgstr "Asignar la contraseña para compartir Samba" msgctxt "#742" msgid "" "Set to ON to enable the embedded SSH server. The SSH console can be accessed" " with username 'root' and password '@ROOT_PASSWORD@'." -msgstr "Active esta función para habilitar el servidor SSH. La consola puede ser accedida con el usuario 'root' y la contraseña '@ROOT_PASSWORD@'." +msgstr "Habilita esta función para habilitar el servidor SSH. La consola puede ser accedida con el usuario 'root' y la contraseña '@ROOT_PASSWORD@'." msgctxt "#743" msgid "" "Set to ON if you have copied private SSH keys to your HTPC and would like to" " improve security by disabling SSH username and password authentication." -msgstr "Active esta función si usted a copiado las claves SSH a su HTPC y le gustaría desactivar la autenticación por usuario y contraseña para aumentar la seguridad." +msgstr "Habilita esta función si has copiado las claves SSH a tu HTPC y te gustaría deshabilitar la autenticación por usuario y contraseña para aumentar la seguridad." msgctxt "#744" msgid "" "Set to ON to enable the Avahi (Zeroconf/Bonjour) network discovery service" -msgstr "Active esta función para habilitar el servicio de descubrimiento de redes Avahi (Zeroconf/Bonjour)" +msgstr "Habilita esta función para habilitar el servicio de descubrimiento de redes Avahi (Zeroconf/Bonjour)" msgctxt "#745" msgid "Set to ON to enable the cron daemon" -msgstr "Active esta función para habilitar el demonio cron" +msgstr "Habilita esta función para habilitar el demonio cron" msgctxt "#746" msgid "Set the password for SSH" msgstr "Asignar la contraseña para SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Habilitar un PIN para acceder a la configuración de @DISTRONAME@" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Cambiar el PIN de bloqueo para acceder a la configuración de @DISTRONAME@" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "Anular el dominio regulador inalámbrico para que las propiedades de radio (canales y potencia de transmisión) cumplan con las leyes locales o coincidan con la configuración del país de tu router." + msgctxt "#750" msgid "750" msgstr "750" @@ -264,13 +278,13 @@ msgctxt "#751" msgid "" "With OBEX filetransfer you can send files, for example movies or pictures " "over bluetooth to @DISTRONAME@." -msgstr "Con la transferencia de archivos OBEX usted puede enviar archivos (video/imagenes) por Bluetooth a @DISTRONAME@." +msgstr "Con la transferencia de archivos OBEX usted puede enviar archivos (vídeo/imágenes) por Bluetooth a @DISTRONAME@." msgctxt "#752" msgid "" "Here you can set the folder location where OBEX file transfer should store " "incoming files" -msgstr "Aquí puede configurar la ubicación en donde se almacenarán los archivos enviados por OBEX" +msgstr "Aquí puedes configurar la ubicación en donde se almacenarán los archivos enviados por OBEX" msgctxt "#753" msgid "Configure the 1st keyboard software Variant" @@ -305,11 +319,11 @@ msgstr "Selecionar un canal de actualización" msgctxt "#761" msgid "Enable to allow entering a custom update url" -msgstr "Active esta función para introducir una URL de actualización personalizada " +msgstr "Habilita esta función para ingresar una URL de actualización personalizada" msgctxt "#762" msgid "Enter a custom update url (url should be the root of the update files)" -msgstr "Ingrese la URL de actualización personalizada (la URL debe ser la raíz del archivo de actualización)" +msgstr "Ingresa una URL de actualización personalizada (la URL debe ser la raíz del archivo de actualización)" msgctxt "#770" msgid "Select an available version" @@ -321,7 +335,7 @@ msgid "" "from private network ranges (192.168.x.x, 172.16.x.x and 10.x.x.x) only. " "Public blocks all traffic from all networks. Custom uses rules in " "/storage/.config/iptables. Off disables the firewall." -msgstr "El cortafuegos bloquea el tráfico de red no deseado. Hogar (predeterminado) solo permite el tráfico de rangos de red privada (192.168.x.x, 172.16.x.x y 10.x.x.x). Público bloquea todo el tráfico de todas las redes. Personalizado usa reglas en /storage/.config/iptables. Desactivado desactiva el firewall." +msgstr "El cortafuegos bloquea el tráfico de red no deseado. Hogar (predeterminado) solo permite el tráfico de rangos de red privada (192.168.x.x, 172.16.x.x y 10.x.x.x). Público bloquea todo el tráfico de todas las redes. Personalizado usa reglas en /storage/.config/iptables. Desactivado deshabilita el cortafuegos." msgctxt "#772" msgid "" @@ -329,7 +343,14 @@ msgid "" "CPU Arch and Version to the update server. This data is also used to report " "basic statistics for the project. To continue checking for updates while " "opting-out of stats reporting, disable this option." -msgstr "Al comprobar si hay una nueva versión se enviará al servidor de actualización información como la distribución Linux instalada, el proyecto, la arquitectura de la CPU y la versión de KODI. Dicha información también se usa con fines estadísticos básicos sobre el proyecto. Para continuar comprobando actualizaciones sin que su información forme parte de las estadísticas, deshabilite esta opción." +msgstr "Al comprobar si hay una nueva versión se enviará al servidor de actualización información como la distribución Linux instalada, proyecto, arquitectura de la CPU y la versión de KODI. Dicha información también se usa con fines estadísticos básicos sobre el proyecto. Para continuar comprobando actualizaciones sin que su información forme parte de las estadísticas, deshabilite esta opción." + +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Establezca el tiempo de inactividad (en minutos) antes de que se desconecten los dispositivos (el valor por defecto es 0 para que no haya tiempo de espera). Se aplica a los dispositivos en los que se ha activado \"Habilitar modo espera\" en el menú contextual de conexión del dispositivo LibreELEC." msgctxt "#32001" msgid "Services" @@ -357,44 +378,82 @@ msgstr "Disposición de teclado" msgctxt "#32012" msgid "Select Action" -msgstr "Seleccionar Acción" +msgstr "Seleccionar acción" msgctxt "#32013" -msgid "Updates" -msgstr "Actualizaciones" +msgid "OS Updates" +msgstr "Actualizaciones del sistema operativo" msgctxt "#32014" msgid "Automatic Updates" -msgstr "Actualizaciones Automáticas" +msgstr "Actualizaciones automáticas" msgctxt "#32015" msgid "Update Channel" -msgstr "Actualizar Canal" +msgstr "Actualizar canal" msgctxt "#32016" msgid "Show Custom Channels" -msgstr "Mostrar Canales Personalizados" +msgstr "Mostrar canales personalizados" msgctxt "#32017" msgid " - Custom Channel 1" -msgstr "- Canal Personalizado 1" +msgstr "- Canal personalizado 1" msgctxt "#32018" msgid " - Custom Channel 2" -msgstr "- Canal Personalizado 2" +msgstr "- Canal personalizado 2" msgctxt "#32019" msgid " - Custom Channel 3" -msgstr "- Canal Personalizado 3" +msgstr "- Canal personalizado 3" msgctxt "#32020" msgid "Available Versions" -msgstr "Versiones Disponibles" +msgstr "Versiones disponibles" msgctxt "#32021" msgid "Submit Statistics" msgstr "Enviar estadísticas" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Actualizaciones de firmware" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "La actualización se ocurrirá una vez reiniciado el sistema." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Cargador de arranque EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Actualizar el cargador de arranque EEPROM de la Raspberry Pi a la última versión. Esta opción se deshabilita automáticamente después de reiniciar. Reinicie el sistema para aplicar la actualización." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "Firmware VIA USB3" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Actualizar el firmware VIA USB3 de la Raspberry Pi a la última versión. Esta opción se deshabilita automáticamente después de reiniciar. Reinicie el sistema para aplicar la actualización." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "actualizar de %s a %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "actualizado: %s" + msgctxt "#32100" msgid "Connections" msgstr "Conexiones" @@ -425,7 +484,7 @@ msgstr "Contraseña" msgctxt "#32108" msgid "Enable 'tethered' Wireless Access Point" -msgstr "Activar modo Punto de Acceso" +msgstr "Habilitar modo Punto de acceso" msgctxt "#32109" msgid "Connect Automatically" @@ -457,11 +516,11 @@ msgstr "Máscara de subred" msgctxt "#32116" msgid "Default Gateway" -msgstr "Puerta de acceso por defecto" +msgstr "Puerta de enlace por defecto" msgctxt "#32117" msgid "Prefix Length" -msgstr "Largo del prefijo" +msgstr "Longitud del prefijo" msgctxt "#32118" msgid "Privacy" @@ -557,11 +616,11 @@ msgstr "Editar" msgctxt "#32180" msgid "Would you like to update @DISTRONAME@ now?" -msgstr "¿Desea actualizar @DISTRONAME@ ahora?" +msgstr "¿Deseas actualizar @DISTRONAME@ ahora?" msgctxt "#32181" msgid "Filename" -msgstr "Nombre de archivo" +msgstr "Nombre del archivo" msgctxt "#32182" msgid "Download speed" @@ -581,7 +640,7 @@ msgstr "Velocidad de extracción" msgctxt "#32186" msgid "Initialize Archive File" -msgstr "Iniciar Archivado de fichero" +msgstr "Iniciar archivado de fichero" msgctxt "#32187" msgid "New Version" @@ -601,7 +660,19 @@ msgstr "Nombre del sistema" msgctxt "#32191" msgid "Invalid URL" -msgstr "URL Inválida" +msgstr "URL inválida" + +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN de bloqueo" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Habilitar PIN de bloqueo para la configuración de @DISTRONAME@" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Cambiar PIN de bloqueo de la configuración de @DISTRONAME@" msgctxt "#32196" msgid "About" @@ -621,11 +692,11 @@ msgstr "SSH" msgctxt "#32202" msgid "Use Samba Password Authentication" -msgstr "Utilizar Autenticación por Contraseña para Samba" +msgstr "Utilizar autenticación por contraseña para Samba" msgctxt "#32203" msgid "Disable SSH Password" -msgstr "Desactivar contraseña SSH" +msgstr "Deshabilitar contraseña SSH" msgctxt "#32204" msgid "Enable Samba" @@ -655,7 +726,7 @@ msgctxt "#32210" msgid "" "The default SSH password is widely known and considered " "insecure.[CR][CR]Setting a personal password is recommended." -msgstr "La contraseña SSH que se usa por omisión es ampliamente conocida y por tanto considerada insegura..[CR][CR]Se recomienda que asigne una nueva contraseña personal." +msgstr "La contraseña SSH que se usa por omisión es ampliamente conocida y por tanto considerada insegura.[CR][CR]Se recomienda que asigne una nueva contraseña personal." msgctxt "#32212" msgid "Cancel" @@ -675,7 +746,7 @@ msgstr "Nombre del grupo" msgctxt "#32216" msgid "Auto-Share External Drives" -msgstr "Compartir Automáticamente Unidades Externas" +msgstr "Compartir automáticamente unidades externas" msgctxt "#32217" msgid "Minimum supported protocol" @@ -691,7 +762,7 @@ msgstr "¡Contraseña incorrecta!" msgctxt "#32221" msgid "The entered password is too weak.[CR]SSH password is unchanged." -msgstr "La contraseña introducida es muy débil.[CR]La contraseña SSH no se ha cambiado." +msgstr "La contraseña ingresada es muy débil.[CR]La contraseña SSH no se ha cambiado." msgctxt "#32222" msgid "Password changed!" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Ha habido un error durante el proceso.[CR]No se ha cambiado la contraseña SSH." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Ingresa un nuevo PIN de 4 dígitos" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Volver a ingresar PIN" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Error - ¡Los códigos PIN no coinciden!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "El PIN de bloqueo para la configuración de @DISTRONAME@ no está configurado.[CR][CR]Por favor, inténtalo de nuevo." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "PIN de bloqueo establecido para la configuración de @DISTRONAME@." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "El PIN de bloqueo de la configuración de @DISTRONAME@ está configurado en:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Error - ¡El código PIN no tiene 4 dígitos!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "Configuración de @DISTRONAME@ bloqueada[CR]Ingresa un PIN de 4 dígitos" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "¡PIN incorrecto!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "intentos restantes." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Has ingresado un PIN incorrecto demasiadas veces.[CR][CR]Deberás esperar 5 minutos antes de volver a intentarlo." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "¡Configuración de @DISTRONAME@ bloqueada!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Tiempo restante antes de ingresar el PIN: %02d:%02d[CR][CR]Demasiados intentos fallidos." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Dominio regulador inalámbrico" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bienvenido a @DISTRONAME@" @@ -723,7 +854,7 @@ msgid "" "@DISTRONAME@ installation - setting your location, timezone and connecting " "you to the internet.[CR][CR]These settings can be changed later by " "navigating to Programs > @DISTRONAME@ Settings." -msgstr "Este asistente lo guiará a través del proceso de configuración de @DISTRONAME@ . Configurará su ubicación, zona horaria y conexión a Internet.[CR][CR] Estos valores podrán ser modificados luego en Programas > Ajustes de @DISTRONAME@." +msgstr "Este asistente te guiará a través del proceso de configuración de @DISTRONAME@. Configurará tu ubicación, zona horaria y conexión a Internet.[CR][CR]Estos valores podrán ser modificados luego en Programas > Configuración de @DISTRONAME@." msgctxt "#32303" msgid "Next" @@ -735,7 +866,7 @@ msgid "" "a name.[CR][CR]Try to choose something meaningful - like the room it's in - " "so you'll know what it is when you see it on the network.[CR][CR]This name " "is used when configuring network services, like file sharing using samba." -msgstr "Para ser identificado fácilmente en la red, su equipo @DISTRONAME@ necesita un nombre.[CR][CR] Elija un nombre significativo - sala de estar, habitación - de esta manera sabrá que de que equipo se trata cuando lo vea en la red.[CR][CR]Este nombre será usado cuando se configure los servicios de red tales como Samba." +msgstr "Para ser identificado fácilmente en la red, tu equipo @DISTRONAME@ necesita un nombre.[CR][CR] Elige un nombre significativo - sala de estar, habitación - de esta manera sabrás de que equipo se trata cuando lo veas en la red.[CR][CR]Este nombre será usado cuando se configure los servicios de red tales como Samba." msgctxt "#32305" msgid "Networking" @@ -747,15 +878,15 @@ msgid "" "TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " "needs to be connected the Internet.[CR][CR]An Internet connection is also " "required for @DISTRONAME@ to automatically update itself." -msgstr "Para la descarga de fondos, carteles y miniaturas de sus películas, series y para el contenido de streaming de sitios como YouTube, @DISTRONAME@ necesita conectar a Internet.[CR][CR]Además, @DISTRONAME@ requiere conexión a Internet para las actualizaciones automáticas. " +msgstr "Para la descarga de fondos, carteles y miniaturas de tus películas, series y para el contenido de streaming de sitios como YouTube, @DISTRONAME@ necesita conectar a Internet.[CR][CR]Además, @DISTRONAME@ requiere conexión a Internet para las actualizaciones automáticas. " msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Anterior" msgctxt "#32308" msgid "Hostname:" -msgstr "Nombre de equipo;" +msgstr "Nombre del equipo:" msgctxt "#32309" msgid "The following Networks are currently available:" @@ -763,11 +894,11 @@ msgstr "Las siguientes redes están disponibles:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Idioma:" msgctxt "#32311" msgid "Sharing and Remote Access" -msgstr "Compartir y Acceso Remoto" +msgstr "Compartir y acceso remoto" msgctxt "#32312" msgid "" @@ -775,7 +906,7 @@ msgid "" " who wish to interact with @DISTRONAME@'s underlying operating system. The " "default user is [COLOR blue]root[/COLOR] and the default password is [COLOR " "blue]@ROOT_PASSWORD@[/COLOR]." -msgstr "@DISTRONAME@ soporta SSH para acceso remoto. Esto es para usuarios avanzados que desean interactuar con el sistema operativo de @DISTRONAME@. El usuario por defecto es [COLOR blue]root[/COLOR]  y la contraseña por defecto es [COLOR blue]@ROOT_PASSWORD@[/COLOR]." +msgstr "@DISTRONAME@ soporta SSH para acceso remoto. Esto es para usuarios avanzados que desean interactuar con el sistema operativo de @DISTRONAME@. El usuario por defecto es [COLOR blue]root[/COLOR] y la contraseña por defecto es [COLOR blue]@ROOT_PASSWORD@[/COLOR]." msgctxt "#32313" msgid "" @@ -783,11 +914,11 @@ msgid "" "incorporated a samba server. This samba server can be integrated into your " "local network by accessing it in a familiar way with Finder or Windows " "Explorer." -msgstr "Para compartir archivos entre dispositivos @DISTRONAME@ incorpora un servidor Samba. Este puede integrarse con su red local para acceder a él con Finder o el Explorador de Windows." +msgstr "Para compartir archivos entre dispositivos @DISTRONAME@ incorpora un servidor Samba. Este puede integrarse con tu red local para acceder a él con Finder o el Explorador de Windows." msgctxt "#32316" msgid "Configure Services:" -msgstr "Configurar Servicios:" +msgstr "Configurar servicios:" msgctxt "#32317" msgid "Thank you" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "Tu instalación de @DISTRONAME@ ahora está completa y estás a punto de ingresar a Kodi donde puedes configurar tus bibliotecas multimedia. Para obtener ayuda con esto, hay una guía disponible en wiki.kodi.tv[CR][CR]@DISTRONAME@ está desarrollado por un equipo dedicado de desarrolladores que trabajan exclusivamente en su tiempo libre. Incluso como proyecto voluntario, todavía tenemos que pagar por nuestros recursos de desarrollo y ancho de banda de Internet, por lo que si consideras @DISTRONAME@ útil, siempre apreciaremos una donación de cualquier cantidad.[CR][CR]Finalmente, esperamos que disfrutes utilizando @DISTRONAME@ tanto como nosotros disfrutamos construyendo eso. Si necesitas más ayuda, puedes encontrar enlaces a nuestro foro de soporte junto con las últimas noticias en nuestro sitio web." msgctxt "#32319" msgid "Cron" @@ -853,7 +984,7 @@ msgstr "Conectado:" msgctxt "#32334" msgid "Yes" -msgstr "Si" +msgstr "Sí" msgctxt "#32335" msgid "No" @@ -867,11 +998,11 @@ msgctxt "#32339" msgid "" "No Bluetooth device found. Please put your Bluetooth device into discovery " "mode[CR]and start the scan" -msgstr "No se ha encontrado un dispositivo Bluetooth. Por favor, configure su dispositivo Bluetooth en modo descubrir[CR] y comience la exploración." +msgstr "No se ha encontrado un dispositivo Bluetooth. Por favor, configura tu dispositivo Bluetooth en modo descubrir[CR] y comienza la exploración." msgctxt "#32343" msgid "Enter the following Key on your Device." -msgstr "Ingrese la siguiente clave en su dispositivo." +msgstr "Ingresa la siguiente clave en tu dispositivo." msgctxt "#32344" msgid "Enable Bluetooth" @@ -883,11 +1014,11 @@ msgstr "Bluetooth está deshabilitado" msgctxt "#32358" msgid "Trust and Connect" -msgstr "Confiar y Conectar" +msgstr "Confiar y conectar" msgctxt "#32362" msgid "Check for updates now:" -msgstr "Comprobar actualizaciones ahora:" +msgstr "Buscar actualizaciones ahora:" msgctxt "#32363" msgid "@DISTRONAME@" @@ -911,7 +1042,7 @@ msgstr "Extracción de actualización completa" msgctxt "#32368" msgid "Advanced Network Settings" -msgstr "Configuración avanzada de red" +msgstr "Configuración de red avanzada" msgctxt "#32369" msgid "Wait for network before starting Kodi" @@ -943,11 +1074,11 @@ msgstr "Enviar registro" msgctxt "#32377" msgid "Upload latest Kodi log and configs, and view the short URL" -msgstr "Cargar el último archivo de registro Kodi y configuraciones, y mostrar URL corta" +msgstr "Cargar el último archivo de registro y configuraciones, y mostrar una URL corta" msgctxt "#32378" msgid "Upload latest Kodi crash log and configs, and view the short URL" -msgstr "Carga el último archivo de registro de bloqueo Kodi y configuraciones, y mostrar URL corta" +msgstr "Cargar el último archivo de registro de bloqueo y configuraciones, y mostrar una URL corta" msgctxt "#32379" msgid "There is not enough free storage space to continue!" @@ -957,7 +1088,7 @@ msgctxt "#32380" msgid "" "Restoring system settings requires a reboot. Are you sure you want to " "restore?" -msgstr "La restauración del sistema requiere reiniciar. ¿Está seguro que desea restaurar?" +msgstr "La restauración del sistema requiere reiniciar. ¿Estás seguro que deseas restaurar?" msgctxt "#32381" msgid "Accept incoming Bluetooth Filetransfer ?" @@ -973,7 +1104,7 @@ msgstr "¿Reproducir archivos?" msgctxt "#32384" msgid "OBEX Enabled" -msgstr "OBEX Habilitado" +msgstr "OBEX habilitado" msgctxt "#32385" msgid "OBEX Upload Folder" @@ -1001,7 +1132,7 @@ msgstr "El complemento de configuración no está listo, intente nuevamente más msgctxt "#32393" msgid "** SAFE MODE! ** SAFE MODE! ** SAFE MODE! **" -msgstr "** MODO SEGURO! ** MODO SEGURO! ** MODO SEGURO! **" +msgstr "** ¡MODO SEGURO! ** ¡MODO SEGURO! ** ¡MODO SEGURO! **" msgctxt "#32394" msgid "" @@ -1014,7 +1145,7 @@ msgid "" " assistance. When posting to the forum include the link to your crash log " "which can be viewed by clicking the crash log option in Settings > LibreELEC" " > System > Submit Log." -msgstr "@DISTRONAME@ se ha iniciado temporalmente en modo seguro debido a repetidos bloqueos de Kodi.[CR][CR]Ahora puede investigar la causa de los bloqueos activando ssh o Samba.[CR][CR]Puede acceder a su instalación original de Kodi a través de \"/storage/.kodi.FAILED\" y el recurso compartido \"Kodi-Failed\" de Samba.[CR][CR]Reiniciando regresará a su instalación original de Kodi.[CR][CR]Vaya a https://forum.libreelec.tv si necesita más ayuda. Al publicar en el foro, incluya el enlace a su registro de bloqueo que se puede ver haciendo clic en la opción de registro de bloqueo en Configuración > LibreELEC > Sistema > Enviar registro." +msgstr "@DISTRONAME@ se ha iniciado temporalmente en modo seguro debido a repetidos bloqueos de Kodi.[CR][CR]Ahora puedes investigar la causa de los bloqueos habilitando ssh o Samba.[CR][CR]Puedes acceder a tu instalación original de Kodi a través de \"/storage/.kodi.FAILED\" y el recurso compartido \"Kodi-Failed\" de Samba.[CR][CR]Reiniciando regresará a tu instalación original de Kodi.[CR][CR]Ve a https://forum.libreelec.tv si necesitas más ayuda. Al publicar en el foro, se incluye el enlace a tu registro de bloqueo que puedes ver haciendo clic en la opción de registro de bloqueo en Configuración > LibreELEC > Sistema > Enviar registro." msgctxt "#32395" msgid "Firewall" @@ -1035,3 +1166,7 @@ msgstr "Hogar" msgctxt "#32399" msgid "Public" msgstr "Público" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Tiempo de inactividad" diff --git a/language/resource.language.eu_es/strings.po b/language/resource.language.eu_es/strings.po index 62cebc54..af47c74c 100644 --- a/language/resource.language.eu_es/strings.po +++ b/language/resource.language.eu_es/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Bidali /flash, kodi_crash.log, kernel log-eko abioko konfigurazio-fitxategiak eta Samba-ko konfigurazioak http://ix.io helbidera, eta ondoren erakutsi URL laburra." msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Aukeratu ON energia-aurrezte moduetan Bluetooth gailuak desgaitzeko" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Sortu tar fitxategi bat @DISTRONAME@ eta Kodiren konfigurazio fitxategi, datu-base eta edukien miniaturekin. Segurtasun-kopiak /storage/backups karpetan gordeko dira" +"/storage/backup/" +msgstr "Sortu tar fitxategi bat @DISTRONAME@ eta Kodiren konfigurazio fitxategi, datu-base eta edukien miniaturekin. Segurtasun-kopiak /storage/backup/ karpetan gordeko dira" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Bertsio berri bat dagoen egiaztatzeak instalatutako Distribuzioa, Proiektua, CPU arkitektura eta Bertsioa eguneraketa zerbitzarira bidaliko du. Datu hauek proiektuaren estatistiken oinarrizko txostenean ere erabiliko dira. Eguneraketak egiaztatzen jarraitu nahi baduzu estatistiken bidaltzea egin gabe, desgaitu ezazu aukera hau." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Zerbitzuak" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Aukeratu ekintza" msgctxt "#32013" -msgid "Updates" -msgstr "Eguneratzeak" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Bidali Estatistikak" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Konexioak" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL baliogabea" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Honi buruz" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Ongi etorria izan @DISTRONAME@-era" @@ -1035,3 +1166,7 @@ msgstr "Etxekoa" msgctxt "#32399" msgid "Public" msgstr "Publikoa" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.fi_fi/strings.po b/language/resource.language.fi_fi/strings.po index f78e51b3..9e1a3b20 100644 --- a/language/resource.language.fi_fi/strings.po +++ b/language/resource.language.fi_fi/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Lähetä käynnistystiedostot polusta /flash, kodi_crash.log, kernel log ja Samba-asetukset osoitteeseen http://ix.io ja näytä lyhennetty osoite" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Kytke päälle ja Bluetooth-laitteet kytketään pois virransäästötilan ollessa päällä" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Luo tar-paketin, jossa on kaikki @DISTRONAME@:n ja Kodin asetukset, tietokannat ja tallennetut pienoiskuvat. Varmuuskopiopaketti tallennetaan polkuun /storage/backups" +"/storage/backup/" +msgstr "Luo tar-paketin, jossa on kaikki @DISTRONAME@:n ja Kodin asetukset, tietokannat ja tallennetut pienoiskuvat. Varmuuskopiopaketti tallennetaan polkuun /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Aseta SSH-salasana" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Käytä PIN-koodia @DISTRONAME@:n asetusvalikkoon pääsemiseksi" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Vaihda @DISTRONAME@:n asetusvalikon PIN-koodi" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Päivityksen tarkistaminen lähettää jakelun nimen, projektin nimen, prosessoriarkkitehtuurin ja versionumeron päivityspalvelimelle. Näitä perustietoja käytetään myös tilastointitarkoituksiin. Jos haluat tarkistaa päivitykset ilman tilastointia, ota tämä asetus pois käytöstä." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Palvelut" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Valitse toiminto" msgctxt "#32013" -msgid "Updates" -msgstr "Päivitykset" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Lähetä tilastointitiedot" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Päivitys tapahtuu, kun järjestelmä käynnistetään uudelleen." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "EEPROM:n käynnistyslatain" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Päivittää Raspberry Pin EEPROM-piirillä olevan käynnistyslataimen uusimpaan versioon. Asetus menee automaattisesti pois päältä uudelleenkäynnistyksen jälkeen. Käynnistä järjestelmä uudelleen päivittääksesi." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3-ajurit" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Päivittää Raspberry Pin VIA USB3-ajurit uusimpaan versioon. Asetus menee automaattisesti pois päältä uudelleenkäynnistyksen jälkeen. Käynnistä järjestelmä uudelleen päivittääksesi." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Yhteydet" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Virheellinen URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN-koodi" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Kysy PIN-koodia @DISTRONAME@:n asetusvalikossa" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Vaihda @DISTRONAME@:n asetusvalikon PIN-koodi" + msgctxt "#32196" msgid "About" msgstr "Tietoja" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Toimintoa suoritettaessa tapahtui virhe.[CR]SSH-salasanaa ei muutettu." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Anna uusi PIN-koodi (4 numeroa)" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Syötä PIN-koodi uudelleen" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Virhe - PIN-koodit eivät täsmänneet!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@:n asetusten PIN-koodia ei ole asetettu.[CR][CR]Yritä uudelleen." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@:n asetusvalikon PIN-koodi on luotu." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Virhe - PIN-koodissa ei ollut 4:ä numeroa!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Väärä PIN-koodi!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "yritystä jäljellä." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Annoit väärän PIN-koodin liian monta kertaa.[CR][CR]Odota 5 minuuttia ennen uutta yritystä." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@:n asetusvalikko on lukittu!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Tervetuloa @DISTRONAME@:iin" @@ -1035,3 +1166,7 @@ msgstr "Koti" msgctxt "#32399" msgid "Public" msgstr "Julkinen" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.fr_ca/strings.po b/language/resource.language.fr_ca/strings.po new file mode 100644 index 00000000..2fa0bccb --- /dev/null +++ b/language/resource.language.fr_ca/strings.po @@ -0,0 +1,1172 @@ +# Kodi Media Center language file +# Addon Name: @DISTRONAME@ Configuration +# Addon id: service.libreelec.settings +# Addon Provider: LibreELEC +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr_CA\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgctxt "#600" +msgid "@DISTRONAME@ Settings" +msgstr "Paramètres @DISTRONAME@" + +msgctxt "#601" +msgid "Interface" +msgstr "Interface" + +msgctxt "#602" +msgid "Address" +msgstr "Adresse" + +msgctxt "#603" +msgid "Type" +msgstr "Type" + +msgctxt "#604" +msgid "State" +msgstr "État" + +msgctxt "#605" +msgid "Address" +msgstr "Adresse" + +msgctxt "#606" +msgid "Distribution: " +msgstr "Distribution :" + +msgctxt "#607" +msgid "Version: " +msgstr "Version :" + +msgctxt "#608" +msgid "Architecture: " +msgstr "Architecture :" + +msgctxt "#609" +msgid "" +"LibreELEC is created by a global team of Linux and Kodi enthusiasts who " +"contribute time and effort to manage the project, write code, and provide " +"support. We have fun making it. We hope you have fun using it!" +msgstr "LibreELEC est créé par une équipe mondiale de passionnés de Linux et de Kodi qui consacrent leur temps et leur énergie maintenir le projet, à écrire du code et à fournir de l'assistance technique. Nous le faisons pour le plasir. Nous espérons que vous aurez du plaisir à l'utiliser !" + +msgctxt "#610" +msgid "" +"[B]Support[/B] is provided via our " +"forum:[CR]https://forum.libreelec.tv[CR][CR][B]Documentation[/B] can be read" +" in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " +"GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " +"project expenses are accepted via PayPal:[CR]donations@libreelec.tv" +msgstr "[B]Le support[/B] est fourni via notre forum :[CR]https://forum.libreelec.tv[CR][CR][B]La documentation[/B] est accessible sur notre wiki :[CR]https://libreelec.wiki[CR][CR][B]Le code source[/B] est disponible sur GitHub :[CR]https://github.com/LibreELEC[CR][CR][B]Les donations[/B] au projet par PayPal sont acceptées :[CR]donations@libreelec.tv" + +msgctxt "#700" +msgid "" +"Configure a hostname, keyboard type, perform a reset, update, or backups and" +" restores" +msgstr "Configuration du nom d'hôte, le type de clavier, effectuer une remise à zéro, une mise à jour, une sauvegarde ou une restauration" + +msgctxt "#701" +msgid "Configure network startup options, NTP and VPNs" +msgstr "Configuration des options de réseau au démarrage, NTP et VPNs" + +msgctxt "#702" +msgid "" +"Manage the Ethernet, Wireless and VPN connections available to the system" +msgstr "Gérer les connexions filaires, Wifi et les VPN accessibles au système" + +msgctxt "#703" +msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" +msgstr "Configuration des services système tels que Samba, SSH, Cron, Avahi et Syslog" + +msgctxt "#704" +msgid "Configure and pair Bluetooth devices" +msgstr "Configuration et appairage des dispositifs Bluetooth" + +msgctxt "#705" +msgid "" +"Useful information like version and architecture details, support and " +"documentation links, and how to donate and support the project." +msgstr "Informations utiles telles que le détail de la version et de l'architecture, les liens vers le support et la documentation et comment faire un don et supporter le projet." + +msgctxt "#707" +msgid "Configure updates" +msgstr "Configurer les mises à jour" + +msgctxt "#710" +msgid "" +"Configure the Hostname of your @DISTRONAME@ system. This will be used for " +"the HTPC \\\\hostname in Windows and SMB server name in the Mac OS Finder" +msgstr "Configuration du nom d'hôte de votre système @DISTRONAME@. Utilisé pour atteindre le HTPC par \\\\hostname dans Windows et nom du serveur SMB dans le Finder Mac OS" + +msgctxt "#711" +msgid "Configure the 1st keyboard software layout" +msgstr "Configuration de la 1ère disposition logicielle du clavier" + +msgctxt "#712" +msgid "Configure the 2nd keyboard software layout" +msgstr "Configuration de la 2ème disposition logicielle du clavier" + +msgctxt "#713" +msgid "Configure the physical keyboard type" +msgstr "Configuration du type physique de clavier" + +msgctxt "#714" +msgid "" +"@DISTRONAME@ can be configured for automatic or manual updates. Automatic " +"updates are available on stable releases and stable release candidates. " +"Automatic update self-disables on beta and development builds" +msgstr "@DISTRONAME@ peut être configuré pour une mise à jour automatique ou manuelle. Les mises à jour automatiques sont disponibles sur les versions stables et les versions candidates. Les mises à jour sont automatiquement désactivées sur les version beta et de développement" + +msgctxt "#715" +msgid "" +"Set to ON and an on-screen notification will be displayed when a new update " +"is available" +msgstr "Activer cette option affichera une notification à l'écran lorsqu'une mise à jour sera disponible" + +msgctxt "#718" +msgid "" +"Send boot config files from /flash, kodi.log, kernel log and Samba configs " +"to http://ix.io, and display the short URL" +msgstr "Envoyez les fichiers de configuration de démarrage de /flash, kodi.log, les logs du kernel et la configuration Samba à http://ix.io, et affichez l'URL raccourcie." + +msgctxt "#719" +msgid "" +"Send boot config files from /flash, kodi_crash.log, kernel log and Samba " +"configs to http://ix.io, and display the short URL" +msgstr "Envoyer les fichiers de configuration de /flash, kodi_crash.log, kernel log et Samba vers http://ix.io et afficher l'URL raccourcie" + +msgctxt "#720" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" + +msgctxt "#722" +msgid "" +"Create a tar archive containing all @DISTRONAME@ and Kodi configuration " +"settings, databases and thumbnail content. Backup files will be stored in " +"/storage/backup/" +msgstr "Créer une archive tar qui contient tout les paramètres de configuration de @DISTRONAME@ et Kodi, ainsi que les bases de données et les miniatures. Les fichiers sont sauvegardés dans /storage/backup/" + +msgctxt "#723" +msgid "" +"Restore a tar archive backup previously created using the backup option " +"above" +msgstr "Restaure une archive tar précédemment créée en utilisant l'option de sauvegarde ci-dessus" + +msgctxt "#724" +msgid "" +"[COLOR FF00FF00]SOFT RESET[/COLOR]\n" +"Permanently reset @DISTRONAME@ configuration to defaults (resets also Kodi to default including your library. your media - music/videos/etc are not touched)" +msgstr "[COLOR FF00FF00]REINITIALISATION PARTIELLE[/COLOR]\nRemise par défaut de la configuration de @DISTRONAME@ (réinitialise également les paramètres de Kodi y compris les bibliothèques. Vos fichiers - musique/vidéos/etc ne sont pas supprimés)" + +msgctxt "#725" +msgid "" +"[COLOR FFFF0000]HARD RESET[/COLOR]\n" +"Permanently reset @DISTRONAME@ and Kodi configuration to defaults (everything in your storage partition will be deleted)" +msgstr "[COLOR FFFF0000]REINITIALISATION COMPLETE[/COLOR]\nRemise par défaut de la configuration de @DISTRONAME@ et de Kodi (tout le contenu de votre espace de stockage sera supprimé)" + +msgctxt "#726" +msgid "Enable or disable support for Wireless (WLAN) networks" +msgstr "Activer ou désactiver le support du réseau sans fil (WiFi)" + +msgctxt "#727" +msgid "" +"Enable a 'tethered' Wireless Access Point. This requires your wireless card " +"(and driver) to support bridging and access point mode. Not all cards are " +"capable." +msgstr "Active le point d'accès sans fil. Cela nécessite que la carte WiFi (et son pilote) supporte le pontage et le mode \"point d'accès\". Toutes les cartes n'en sont pas capables." + +msgctxt "#728" +msgid "Configure the Access Point SSID" +msgstr "Configurer le point d'accès SSID" + +msgctxt "#729" +msgid "Configure the Access Point Passphrase" +msgstr "Configure le mot de passe du point d'accès" + +msgctxt "#730" +msgid "Enable or disable support for Wired (Ethernet) networks" +msgstr "Activer ou désactiver le support des réseaux câblés (Ethernet)" + +msgctxt "#732" +msgid "Configure the 1st time (NTP) server" +msgstr "Configuration du 1er serveur de temps (NTP)" + +msgctxt "#733" +msgid "Configure the 2nd time (NTP) server" +msgstr "Configuration du 2ème serveur de temps (NTP)" + +msgctxt "#734" +msgid "Configure the 3rd time (NTP) server" +msgstr "Configuration du 3ème serveur de temps (NTP)" + +msgctxt "#736" +msgid "" +"Set to ON to delay Kodi startup until the network is available. Use this if " +"the OS is booting into Kodi before the network is up and central MySQL " +"databases are accessible." +msgstr "Activer cette option pour reporter le démarrage de Kodi jusqu'à ce que l'accès réseau soit disponible. Utilisez cette option si le système démarre Kodi avant que le réseau et la base MySQL ne soient disponibles." + +msgctxt "#737" +msgid "Time in seconds to wait for an established network connection." +msgstr "Délai d'attente en secondes pour établir la connexion réseau." + +msgctxt "#738" +msgid "Set to ON to enable the embedded Samba (SMB) filesharing service" +msgstr "Activer cette option pour permettre l'utilisation du service de partage de fichiers Samba (SMB)" + +msgctxt "#739" +msgid "" +"Set to ON to require username/password access to local Samba fileshares" +msgstr "Activer cette option pour demander un identifiant et un mot de passe pour accéder aux partages Samba locaux" + +msgctxt "#740" +msgid "Set the username for Samba sharing" +msgstr "Configurer l'utilisateur des partages Samba" + +msgctxt "#741" +msgid "Set the password for Samba sharing" +msgstr "Configurer le mot de passe des partages Samba" + +msgctxt "#742" +msgid "" +"Set to ON to enable the embedded SSH server. The SSH console can be accessed" +" with username 'root' and password '@ROOT_PASSWORD@'." +msgstr "Activer cette option pour permettre l'utilisation du serveur SSH. La console SSH peut être atteinte avec le compte 'root' et le mot de passe '@ROOT_PASSWORD@'." + +msgctxt "#743" +msgid "" +"Set to ON if you have copied private SSH keys to your HTPC and would like to" +" improve security by disabling SSH username and password authentication." +msgstr "Activer cette option si vous avez copié des clés privées SSH sur votre HTPC et que vous voulez améliorer la sécurité en désactivant l'accès par identifiant et mot de passe SSH." + +msgctxt "#744" +msgid "" +"Set to ON to enable the Avahi (Zeroconf/Bonjour) network discovery service" +msgstr "Activer cette option pour utiliser le service de découverte réseau Avahi (Zeroconf/Bonjour)" + +msgctxt "#745" +msgid "Set to ON to enable the cron daemon" +msgstr "Activer cette option pour utiliser le démon cron" + +msgctxt "#746" +msgid "Set the password for SSH" +msgstr "Définir le mot de passe SSH" + +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Activer un NIP pour accéder aux paramètres @DISTRONAME@" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Changer le NIP de verrouillage pour accéder aux paramètres @DISTRONAME@" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + +msgctxt "#750" +msgid "750" +msgstr "750" + +msgctxt "#751" +msgid "" +"With OBEX filetransfer you can send files, for example movies or pictures " +"over bluetooth to @DISTRONAME@." +msgstr "Avec le système de transfert OBEX, vous pouvez envoyer des fichiers, par exemple des films ou des images par bluetooth à @DISTRONAME@." + +msgctxt "#752" +msgid "" +"Here you can set the folder location where OBEX file transfer should store " +"incoming files" +msgstr "Vous pouvez saisir ici le dossier dans lequel OBEX doit stocker les fichiers reçus" + +msgctxt "#753" +msgid "Configure the 1st keyboard software Variant" +msgstr "Configure la 1ère variante de clavier logiciel" + +msgctxt "#754" +msgid "Configure the 2nd keyboard software Variant" +msgstr "Configure la 2ème variante de clavier logiciel" + +msgctxt "#755" +msgid "Auto share external drives / partitions" +msgstr "Partage automatique des disques / partitions externes" + +msgctxt "#756" +msgid "" +"Disable older SMB protocols by specifying the minimum supported protocol." +msgstr "Désactiver les anciens protocoles SMB en spécifiant le protocole minimum pris en charge." + +msgctxt "#757" +msgid "" +"Disable more recent SMB protocols for backward compatability with legacy " +"clients." +msgstr "Désactiver les protocoles SMB plus récents pour une compatibilité avec les clients hérités." + +msgctxt "#758" +msgid "NetBIOS group to which the server belongs. Default is WORKGROUP." +msgstr "Groupe NetBIOS auquel appartient le serveur. La valeur par défaut est WORKGROUP." + +msgctxt "#760" +msgid "Select an update channel" +msgstr "Sélectionne un canal de mise à jour" + +msgctxt "#761" +msgid "Enable to allow entering a custom update url" +msgstr "Activer pour permettre d'entrer une url personnalisée de mise à jour" + +msgctxt "#762" +msgid "Enter a custom update url (url should be the root of the update files)" +msgstr "Entrez une url personnalisée de mise à jour (l'url doit être la racine des fichiers de mise à jour)" + +msgctxt "#770" +msgid "Select an available version" +msgstr "Sélectionnez une version disponible" + +msgctxt "#771" +msgid "" +"The firewall blocks unwanted network traffic. Home (default) allows traffic " +"from private network ranges (192.168.x.x, 172.16.x.x and 10.x.x.x) only. " +"Public blocks all traffic from all networks. Custom uses rules in " +"/storage/.config/iptables. Off disables the firewall." +msgstr "Le pare-feu bloque le trafic réseau indésirable. \"Accueil\" (par défaut) permet le trafic à partir de plages de réseau privé (192.168.x.x.x, 172.16.x.x.x et 10.x.x.x.x.x) uniquement. \"Public\" bloque tout le trafic de tous les réseaux. \"Personnalisé\" utilise des règles dans /storage/.config/iptables. \"Éteint\" désactive le pare-feu." + +msgctxt "#772" +msgid "" +"Checking for a new version will submit the installed Distribution, Project, " +"CPU Arch and Version to the update server. This data is also used to report " +"basic statistics for the project. To continue checking for updates while " +"opting-out of stats reporting, disable this option." +msgstr "Vérifier qu'une nouvelle version est disponible enverra la distribution installée, le projet, le type de CPU, et la version au serveur. Ces données sont aussi utilisées pour des statistiques basiques pour le projet. Pour continuer à vérifier les mises à jour sans envoyer les statistiques, désactivez cette option." + +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + +msgctxt "#32001" +msgid "Services" +msgstr "Services" + +msgctxt "#32002" +msgid "System" +msgstr "Système" + +msgctxt "#32003" +msgid "Interface" +msgstr "Interface" + +msgctxt "#32005" +msgid "Updates" +msgstr "Mises à jour" + +msgctxt "#32009" +msgid "Keyboard" +msgstr "Clavier" + +msgctxt "#32010" +msgid "Keyboard Layout" +msgstr "Disposition du clavier" + +msgctxt "#32012" +msgid "Select Action" +msgstr "Sélectionnez une action" + +msgctxt "#32013" +msgid "OS Updates" +msgstr "" + +msgctxt "#32014" +msgid "Automatic Updates" +msgstr "Mises à jour automatiques" + +msgctxt "#32015" +msgid "Update Channel" +msgstr "Canal de mise à jour" + +msgctxt "#32016" +msgid "Show Custom Channels" +msgstr "Afficher les canaux personnalisés" + +msgctxt "#32017" +msgid " - Custom Channel 1" +msgstr "- Canal personnalisé 1" + +msgctxt "#32018" +msgid " - Custom Channel 2" +msgstr "- Canal personnalisé 2" + +msgctxt "#32019" +msgid " - Custom Channel 3" +msgstr "- Canal personnalisé 3" + +msgctxt "#32020" +msgid "Available Versions" +msgstr "Versions disponibles" + +msgctxt "#32021" +msgid "Submit Statistics" +msgstr "Envoyer les statistiques" + +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + +msgctxt "#32100" +msgid "Connections" +msgstr "Connexions" + +msgctxt "#32101" +msgid "Network" +msgstr "Réseau" + +msgctxt "#32102" +msgid "Wireless Networks" +msgstr "Réseaux sans-fil" + +msgctxt "#32103" +msgid "Wired Networks" +msgstr "Réseaux filaires" + +msgctxt "#32105" +msgid "Active" +msgstr "Actif" + +msgctxt "#32106" +msgid "Username" +msgstr "Nom d'utilisateur" + +msgctxt "#32107" +msgid "Passphrase" +msgstr "Phrase secrète" + +msgctxt "#32108" +msgid "Enable 'tethered' Wireless Access Point" +msgstr "Activer le point d'accès sans fil" + +msgctxt "#32109" +msgid "Connect Automatically" +msgstr "Connexion automatique" + +msgctxt "#32110" +msgid "Connection" +msgstr "Connexion" + +msgctxt "#32111" +msgid "IPv4" +msgstr "IPv4" + +msgctxt "#32112" +msgid "IPv6" +msgstr "IPv6" + +msgctxt "#32113" +msgid "IP Address Method" +msgstr "Méthode de récupération de l'adresse IP" + +msgctxt "#32114" +msgid "IP Address" +msgstr "Adresse IP" + +msgctxt "#32115" +msgid "Subnet Mask" +msgstr "Masque de sous-réseau" + +msgctxt "#32116" +msgid "Default Gateway" +msgstr "Passerelle par défaut" + +msgctxt "#32117" +msgid "Prefix Length" +msgstr "Longueur du préfixe" + +msgctxt "#32118" +msgid "Privacy" +msgstr "Confidentialité" + +msgctxt "#32119" +msgid "DNS Servers" +msgstr "Serveurs DNS" + +msgctxt "#32120" +msgid "Nameserver #1" +msgstr "Serveur de nom #1" + +msgctxt "#32121" +msgid "Nameserver #2" +msgstr "Serveur de nom #2" + +msgctxt "#32122" +msgid "Nameserver #3" +msgstr "Serveur de nom #3" + +msgctxt "#32123" +msgid "NTP Servers" +msgstr "Serveurs NTP" + +msgctxt "#32124" +msgid "Timeserver #1" +msgstr "Serveur de temps #1" + +msgctxt "#32125" +msgid "Timeserver #2" +msgstr "Serveur de temps #2" + +msgctxt "#32126" +msgid "Timeserver #3" +msgstr "Serveur de temps #3" + +msgctxt "#32127" +msgid "DNS Domains" +msgstr "Domaines DNS" + +msgctxt "#32128" +msgid "Domain #1" +msgstr "Domaine #1" + +msgctxt "#32129" +msgid "Domain #2" +msgstr "Domaine #2" + +msgctxt "#32130" +msgid "Domain #3" +msgstr "Domaine #3" + +msgctxt "#32140" +msgid "Save" +msgstr "Enregistrer" + +msgctxt "#32141" +msgid "Delete" +msgstr "Supprimer" + +msgctxt "#32142" +msgid "Refresh" +msgstr "Rafraichir" + +msgctxt "#32143" +msgid "Disconnect" +msgstr "Déconnecter" + +msgctxt "#32144" +msgid "Connect" +msgstr "Connecter" + +msgctxt "#32145" +msgid "Pair" +msgstr "Appairer" + +msgctxt "#32146" +msgid "Hidden Network Name" +msgstr "Nom du réseau masqué" + +msgctxt "#32147" +msgid "Wireless Network Passphrase" +msgstr "Phrase secrète du réseau sans-fil" + +msgctxt "#32148" +msgid "Wireless Network Username" +msgstr "Utilisateur du réseau sans-fil" + +msgctxt "#32150" +msgid "Edit" +msgstr "Modifier" + +msgctxt "#32180" +msgid "Would you like to update @DISTRONAME@ now?" +msgstr "Voulez-vous mettre à jour @DISTRONAME@ maintenant ?" + +msgctxt "#32181" +msgid "Filename" +msgstr "Nom de fichier" + +msgctxt "#32182" +msgid "Download speed" +msgstr "Vitesse de téléchargement" + +msgctxt "#32183" +msgid "Time remaining" +msgstr "Temps restant" + +msgctxt "#32184" +msgid "Extract file" +msgstr "Fichier extrait" + +msgctxt "#32185" +msgid "Extract speed" +msgstr "Vitesse d'extraction" + +msgctxt "#32186" +msgid "Initialize Archive File" +msgstr "Initialiser fichier d'archive" + +msgctxt "#32187" +msgid "New Version" +msgstr "Nouvelle version" + +msgctxt "#32188" +msgid "Current Version" +msgstr "Version actuelle" + +msgctxt "#32189" +msgid "Identification" +msgstr "Identification" + +msgctxt "#32190" +msgid "System Name" +msgstr "Nom du système" + +msgctxt "#32191" +msgid "Invalid URL" +msgstr "URL invalide" + +msgctxt "#32192" +msgid "PIN lock" +msgstr "NIP de verrouillage" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Activer le verrouillage NIP des paramètres @DISTRONAME@" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Changer le verrouillage NIP des paramètres @DISTRONAME@" + +msgctxt "#32196" +msgid "About" +msgstr "À propos" + +msgctxt "#32198" +msgid "SSID" +msgstr "SSID" + +msgctxt "#32200" +msgid "Samba" +msgstr "Samba" + +msgctxt "#32201" +msgid "SSH" +msgstr "SSH" + +msgctxt "#32202" +msgid "Use Samba Password Authentication" +msgstr "Utiliser l'authentification par mot de passe pour Samba" + +msgctxt "#32203" +msgid "Disable SSH Password" +msgstr "Désactiver le mot de passe SSH" + +msgctxt "#32204" +msgid "Enable Samba" +msgstr "Activer Samba" + +msgctxt "#32205" +msgid "Enable SSH" +msgstr "Activer SSH" + +msgctxt "#32206" +msgid "Enable Avahi (Zeroconf)" +msgstr "Activer Avahi (Zeroconf)" + +msgctxt "#32207" +msgid "Avahi" +msgstr "Avahi" + +msgctxt "#32208" +msgid "Hidden Wlan" +msgstr "Réseau sans-fil caché" + +msgctxt "#32209" +msgid "SSH Password" +msgstr "Mot de passe SSH" + +msgctxt "#32210" +msgid "" +"The default SSH password is widely known and considered " +"insecure.[CR][CR]Setting a personal password is recommended." +msgstr "Le mot de passe SSH par défaut est largement connu et considéré comme non sécurisé.[CR][CR]Il est recommandé de définir un mot de passe personnalisé." + +msgctxt "#32212" +msgid "Cancel" +msgstr "Annuler" + +msgctxt "#32213" +msgid "Keep Existing" +msgstr "Garder l'existant" + +msgctxt "#32214" +msgid "Set Password" +msgstr "Définir le mot de passe" + +msgctxt "#32215" +msgid "Workgroup name" +msgstr "Nom du groupe de travail" + +msgctxt "#32216" +msgid "Auto-Share External Drives" +msgstr "Partager automatiquement les disques externes" + +msgctxt "#32217" +msgid "Minimum supported protocol" +msgstr "Protocole minimum pris en charge" + +msgctxt "#32218" +msgid "Maximum supported protocol" +msgstr "Protocole maximum pris en charge" + +msgctxt "#32220" +msgid "Bad password!" +msgstr "Mot de passe erroné !" + +msgctxt "#32221" +msgid "The entered password is too weak.[CR]SSH password is unchanged." +msgstr "Le mot de passe choisi est trop faible.[CR]Le mot de passe SSH n'a pas été modifié." + +msgctxt "#32222" +msgid "Password changed!" +msgstr "Mot de passe modifié !" + +msgctxt "#32223" +msgid "The SSH password has been successfully changed." +msgstr "Le mot de passe SSH a été modifié avec succès." + +msgctxt "#32224" +msgid "Unknown error!" +msgstr "Erreur inconnue !" + +msgctxt "#32225" +msgid "There was an error during the process.[CR]SSH password is unchanged." +msgstr "Il y a eu une erreur durant le processus.[CR]Le mot de passe SSH n'a pas été modifié." + +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Entrez un nouveau NIP à 4 chiffres" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Rentrez le NIP à nouveau" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Erreur - les code NIP ne correspondent pas!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "Verrouillage NIP des paramètres @DISTRONAME@ pas configuré.[CR][CR]Veuillez essayer à nouveau." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "Verrouillage NIP des paramètres @DISTRONAME@ configuré." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Erreur - le code NIP n'a pas 4 chiffres!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "NIP incorrect!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr " tentatives restantes." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Vous avez entré un NIP incorrect trop de fois.[CR][CR]Vous devrez attendre 5 minutes avant d'essayer à nouveau." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "Paramètres @DISTRONAME@ verrouillés!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + +msgctxt "#32300" +msgid "Welcome to @DISTRONAME@" +msgstr "Bienvenue sur @DISTRONAME@" + +msgctxt "#32301" +msgid "Welcome" +msgstr "Bienvenue" + +msgctxt "#32302" +msgid "" +"This wizard will guide you through the process of setting up your new " +"@DISTRONAME@ installation - setting your location, timezone and connecting " +"you to the internet.[CR][CR]These settings can be changed later by " +"navigating to Programs > @DISTRONAME@ Settings." +msgstr "Cet assistant va vous guider au travers du processus de configuration de votre nouvelle installation de @DISTRONAME@ - paramétrage de votre localisation, fuseau horaire et connecter votre appareil à Internet.[CR][CR]Ces réglages peuvent être changés plus tard en allant dans Programmes > Paramètres @DISTRONAME@" + +msgctxt "#32303" +msgid "Next" +msgstr "Suivant" + +msgctxt "#32304" +msgid "" +"To be identified easily on the network, your new @DISTRONAME@ machine needs " +"a name.[CR][CR]Try to choose something meaningful - like the room it's in - " +"so you'll know what it is when you see it on the network.[CR][CR]This name " +"is used when configuring network services, like file sharing using samba." +msgstr "Pour être identifié facilement sur le réseau, votre nouvelle machine @DISTRONAME@ doits posséder un nom.[CR][CR]Essayez de choisir quelque chose de parlant - comme la pièce dans laquelle il se trouve - afin de savoir de quoi il s'agit lorsque vous le verrez sur le réseau.[CR][CR]Ce nom est utilisé lorsque vous configurez les services réseaux, comme le partage de fichiers samba." + +msgctxt "#32305" +msgid "Networking" +msgstr "Réseau" + +msgctxt "#32306" +msgid "" +"In order to download backdrops, banners and thumbnails for your movies and " +"TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " +"needs to be connected the Internet.[CR][CR]An Internet connection is also " +"required for @DISTRONAME@ to automatically update itself." +msgstr "Afin de télécharger les fonds d'écran, bannières et miniatures de vos films et séries TV et pour afficher les flux de sites comme YouTube, @DISTRONAME@ a besoin de se connecter à Internet.[CR][CR]Une connexion à Internet est également requise pour que @DISTRONAME@ se mette à jour automatiquement." + +msgctxt "#32307" +msgid "Previous" +msgstr "Précédent" + +msgctxt "#32308" +msgid "Hostname:" +msgstr "Nom d'hôte :" + +msgctxt "#32309" +msgid "The following Networks are currently available:" +msgstr "Les réseaux suivants sont disponibles :" + +msgctxt "#32310" +msgid "Language:" +msgstr "Langue" + +msgctxt "#32311" +msgid "Sharing and Remote Access" +msgstr "Partages et accès distants" + +msgctxt "#32312" +msgid "" +"@DISTRONAME@ also supports SSH for remote access. This is for advanced users" +" who wish to interact with @DISTRONAME@'s underlying operating system. The " +"default user is [COLOR blue]root[/COLOR] and the default password is [COLOR " +"blue]@ROOT_PASSWORD@[/COLOR]." +msgstr "@DISTRONAME@ supporte également SSH pour l'accès distant. Principalement utilisé par les utilisateurs avancés qui souhaitent interagir avec le sous-système de @DISTRONAME@. L'utilisateur par défaut est [COLOR blue]root[/COLOR] et le mot de passe par défaut est [COLOR blue]@ROOT_PASSWORD@[/COLOR]." + +msgctxt "#32313" +msgid "" +"In order to share your files between your computers @DISTRONAME@ has " +"incorporated a samba server. This samba server can be integrated into your " +"local network by accessing it in a familiar way with Finder or Windows " +"Explorer." +msgstr "Pour pouvoir partager vos fichiers entre vos ordinateurs, @DISTRONAME@ embarque un serveur samba. Ce serveur samba peut être intégré à votre réseau local afin d'y accéder facilement via le Finder ou Windows Explorer." + +msgctxt "#32316" +msgid "Configure Services:" +msgstr "Configuration des services :" + +msgctxt "#32317" +msgid "Thank you" +msgstr "Merci" + +msgctxt "#32318" +msgid "" +"Your @DISTRONAME@ installation is now complete and you are about to enter " +"Kodi where you can set up your media libraries. For help with this, there is" +" a guide available at wiki.kodi.tv[CR][CR]@DISTRONAME@ is developed by a " +"dedicated team of developers who work purely in their spare time. Even as a " +"volunteer project, we still have to pay for our internet bandwidth and " +"development resources so if you find @DISTRONAME@ useful we will always " +"appreciate a donation of any amount.[CR][CR]Finally, we hope you enjoy using" +" @DISTRONAME@ as much as we've enjoyed building it. If you need any more " +"help, you can find links to our support forum along with latest news at our " +"website." +msgstr "Votre installation de @DISTRONAME@ est terminée et vous allez entrer dans KODI où vous pourrez paramétrer vos bibliothèques de médias. Pour vous aider, un guide est disponible à wiki.kodi.tv[CR][CR]@DISTRONAME@ est développé par une équipe dédiée de développeurs qui le font sur leur temps libre. Même si le projet est basé sur le volontariat, nous payons notre bande passante et les ressources de développement, aussi, si vous trouvez @DISTRONAME@ utile, nous apprécierons votre donation, quelque soit le montant. [CR][CR]Enfin, nous espérons que vous apprécierez l'utilisation de KODI autant que nous avons apprécié son développement. Si vous avez besoin d'aide, vous trouverez des liens dans notre forum de support ainsi que les dernières nouvelles sur notre site web." + +msgctxt "#32319" +msgid "Cron" +msgstr "Cron" + +msgctxt "#32320" +msgid "Enable Cron" +msgstr "Activer Cron" + +msgctxt "#32323" +msgid "Reset to Defaults" +msgstr "Réinitialiser les paramètres par défaut" + +msgctxt "#32324" +msgid "Reset System Settings to defaults" +msgstr "Réinitialiser les paramètres système par défaut" + +msgctxt "#32325" +msgid "Reset @DISTRONAME@ to defaults" +msgstr "Réinitialiser les paramètres de @DISTRONAME@ par défaut" + +msgctxt "#32326" +msgid "Are you sure?" +msgstr "Êtes-vous sûr(e) ?" + +msgctxt "#32328" +msgid "The system must reboot." +msgstr "Le système doit être redémarré." + +msgctxt "#32329" +msgid "Rebooting in %d seconds" +msgstr "Redémarrage dans %d secondes" + +msgctxt "#32330" +msgid "Keyboard Type" +msgstr "Type de clavier" + +msgctxt "#32331" +msgid "Bluetooth" +msgstr "Bluetooth" + +msgctxt "#32333" +msgid "Connected: " +msgstr "Connecté :" + +msgctxt "#32334" +msgid "Yes" +msgstr "Oui" + +msgctxt "#32335" +msgid "No" +msgstr "Non" + +msgctxt "#32338" +msgid "No Bluetooth adapter found." +msgstr "Pas d'adaptateur Bluetooth trouvé." + +msgctxt "#32339" +msgid "" +"No Bluetooth device found. Please put your Bluetooth device into discovery " +"mode[CR]and start the scan" +msgstr "Aucun périphérique Bluetooth trouvé. Veuillez activer le mode découverte de votre périphérique[CR]et lancer la recherche" + +msgctxt "#32343" +msgid "Enter the following Key on your Device." +msgstr "Entrez la clé suivante sur votre périphérique." + +msgctxt "#32344" +msgid "Enable Bluetooth" +msgstr "Activer le Bluetooth" + +msgctxt "#32346" +msgid "Bluetooth is disabled" +msgstr "Le Bluetooth est désactivé" + +msgctxt "#32358" +msgid "Trust and Connect" +msgstr "Faire confiance et connecter" + +msgctxt "#32362" +msgid "Check for updates now:" +msgstr "Rechercher des mises à jour maintenant :" + +msgctxt "#32363" +msgid "@DISTRONAME@" +msgstr "@DISTRONAME@" + +msgctxt "#32364" +msgid "Update available" +msgstr "Mise à jour disponible" + +msgctxt "#32365" +msgid "Show Update Notifications" +msgstr "Afficher les notifications de mise à jour" + +msgctxt "#32366" +msgid "Update Download Completed" +msgstr "Téléchargement de la mise à jour terminé" + +msgctxt "#32367" +msgid "Update Extract Complete" +msgstr "Extraction de la mise à jour terminée" + +msgctxt "#32368" +msgid "Advanced Network Settings" +msgstr "Paramètres réseau avancés" + +msgctxt "#32369" +msgid "Wait for network before starting Kodi" +msgstr "Attendre le réseau avant de démarrer Kodi" + +msgctxt "#32370" +msgid "Maximum Wait Time (Sec.)" +msgstr "Temps maximum d'attente (secondes)" + +msgctxt "#32371" +msgid "Backup" +msgstr "Sauvegarde" + +msgctxt "#32372" +msgid "Create System and Kodi Backup" +msgstr "Créer une sauvegarde du système et de Kodi" + +msgctxt "#32373" +msgid "Restore Backup" +msgstr "Restaurer une sauvegarde" + +msgctxt "#32375" +msgid "Backup Progress" +msgstr "Progression de la sauvegarde" + +msgctxt "#32376" +msgid "Submit Log" +msgstr "Soumettre des journaux" + +msgctxt "#32377" +msgid "Upload latest Kodi log and configs, and view the short URL" +msgstr "Téléchargez le dernier journal Kodi et les configurations, et affichez l'URL raccourcie." + +msgctxt "#32378" +msgid "Upload latest Kodi crash log and configs, and view the short URL" +msgstr "Téléchargez le dernier journal d'erreurs et les configurations de Kodi, et affichez l'URL raccourcie" + +msgctxt "#32379" +msgid "There is not enough free storage space to continue!" +msgstr "Il n'y a pas assez d'espace libre pour continuer !" + +msgctxt "#32380" +msgid "" +"Restoring system settings requires a reboot. Are you sure you want to " +"restore?" +msgstr "Restaurer les paramètres système nécessite de redémarrer. Êtes-vous sûr(e) de vouloir restaurer ?" + +msgctxt "#32381" +msgid "Accept incoming Bluetooth Filetransfer ?" +msgstr "Accepter le transfert de fichiers entrants par Bluetooth ?" + +msgctxt "#32382" +msgid "Speed" +msgstr "Vitesse" + +msgctxt "#32383" +msgid "Play Files ?" +msgstr "Jouer les fichiers ?" + +msgctxt "#32384" +msgid "OBEX Enabled" +msgstr "OBEX activé" + +msgctxt "#32385" +msgid "OBEX Upload Folder" +msgstr "Dossier de chargement OBEX" + +msgctxt "#32386" +msgid "Keyboard Layout Variant #1" +msgstr "Variante de disposition du clavier #1" + +msgctxt "#32387" +msgid "Keyboard Layout Variant #2" +msgstr "Variante de disposition du clavier #2" + +msgctxt "#32388" +msgid "Enable Standby" +msgstr "Activer la mise en veille" + +msgctxt "#32389" +msgid "Disable Standby" +msgstr "Désactiver la mise en veille" + +msgctxt "#32390" +msgid "Settings addon is not yet ready, please try again later." +msgstr "L'addiciel des paramètres n'est pas encore prêt, veuillez ré-essayer plus tard." + +msgctxt "#32393" +msgid "** SAFE MODE! ** SAFE MODE! ** SAFE MODE! **" +msgstr "** MODE SANS ÉCHEC! ** MODE SANS ÉCHEC! ** MODE SANS ÉCHEC! **" + +msgctxt "#32394" +msgid "" +"@DISTRONAME@ has temporarily started in safe mode due to repeated Kodi " +"crashes.[CR][CR]You may now investigate the cause of the crashes by enabling" +" ssh or Samba.[CR][CR]Your original Kodi installation can be accessed via " +"\"/storage/.kodi.FAILED\" and the Samba \"Kodi-Failed\" " +"share.[CR][CR]Rebooting will return to your original Kodi " +"installation.[CR][CR]Go to https://forum.libreelec.tv if you require further" +" assistance. When posting to the forum include the link to your crash log " +"which can be viewed by clicking the crash log option in Settings > LibreELEC" +" > System > Submit Log." +msgstr "@DISTRONAME@ a démarré temporairement en mode sans échec en raison de plantages répétés de Kodi. [CR][CR] Vous pouvez investiguer sur la cause des plantages en activant ssh ou Samba. [CR][CR] Vous pouvez accéder à votre installation originale de Kodi via \"/storage/.kodi.FAILED\" et au partage \"Kodi-Failed\" de Samba. [CR][CR] Le redémarrage réinitialisera l’installation d’origine de Kodi. [CR][CR] sur https://forum.libreelec.tv si vous avez besoin d’aide supplémentaire. Lors de la publication sur le forum, incluez le lien vers votre journal des pannes qui peut être consulté en cliquant sur l'option Journal des pannes dans Paramètres > LibreELEC > Système > Envoyer journal." + +msgctxt "#32395" +msgid "Firewall" +msgstr "Firewall" + +msgctxt "#32396" +msgid "Custom" +msgstr "Personnalisé" + +msgctxt "#32397" +msgid "Off" +msgstr "Éteint" + +msgctxt "#32398" +msgid "Home" +msgstr "Accueil" + +msgctxt "#32399" +msgid "Public" +msgstr "Public" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.fr_fr/strings.po b/language/resource.language.fr_fr/strings.po index 65260040..86fe20eb 100644 --- a/language/resource.language.fr_fr/strings.po +++ b/language/resource.language.fr_fr/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Envoyer les fichiers de configuration de /flash, kodi_crash.log, kernel log et Samba vers http://ix.io et afficher l'URL raccourcie" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Activer cette option désactivera les périphériques bluetooth durant les phases d'économies d'énergie" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Changez à ON pour activer le service Bluetooth" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Créer une archive tar qui contient tout les paramètres de configuration de @DISTRONAME@ et Kodi, ainsi que les bases de données et les miniatures. Les fichiers sont sauvegardés dans /storage/backups" +"/storage/backup/" +msgstr "Créer une archive tar qui contient tout les paramètres de configuration de @DISTRONAME@ et Kodi, ainsi que les bases de données et les miniatures. Les fichiers sont sauvegardés dans /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Définir le mot de passe SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Activer un NIP pour accéder aux paramètres @DISTRONAME@" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Changer le NIP de verrouillage pour accéder aux paramètres @DISTRONAME@" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Vérifier qu'une nouvelle version est disponible enverra la distribution installée, le projet, le type de CPU, et la version au serveur. Ces données sont aussi utilisées pour des statistiques basiques pour le projet. Pour continuer à vérifier les mises à jour sans envoyer les statistiques, désactivez cette option." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Services" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Sélectionnez une action" msgctxt "#32013" -msgid "Updates" -msgstr "Mises à jour" +msgid "OS Updates" +msgstr "Mises à jour OS" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Envoyer les statistiques" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Mises à jour de Firmware" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "La mise à jour sera effective une fois que le système sera redémarré." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "EEPROM Bootloader" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Mettre à jour le chargeur de démarrage EEPROM du Raspberry Pi à la dernière version. Cette option sera automatiquement désactivée après avoir redémarré. Redémarrez le système pour prendre en compte les mises à jour." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "Firmware VIA USB3" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Mettre à jour le micrologiciel USB3 Raspberry Pi à la dernière version. Cette option sera automatiquement désactivée après avoir redémarré. Redémarrez le système pour prendre en compte les mises à jour." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "mise à jour de %s à %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "à jour: %s" + msgctxt "#32100" msgid "Connections" msgstr "Connexions" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL invalide" +msgctxt "#32192" +msgid "PIN lock" +msgstr "NIP de verrouillage" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Activer le verrouillage NIP des paramètres @DISTRONAME@" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Changer le verrouillage NIP des paramètres @DISTRONAME@" + msgctxt "#32196" msgid "About" msgstr "À propos" @@ -663,7 +734,7 @@ msgstr "Annuler" msgctxt "#32213" msgid "Keep Existing" -msgstr "Continue d'exister" +msgstr "Garder l'existant" msgctxt "#32214" msgid "Set Password" @@ -699,7 +770,7 @@ msgstr "Mot de passe modifié !" msgctxt "#32223" msgid "The SSH password has been successfully changed." -msgstr "Le mot de passe a été modifié avec succès." +msgstr "Le mot de passe SSH a été modifié avec succès." msgctxt "#32224" msgid "Unknown error!" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Il y a eu une erreur durant le processus.[CR]Le mot de passe SSH n'a pas été modifié." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Entrez un nouveau NIP à 4 chiffres" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Rentrez le NIP à nouveau" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Erreur - les code NIP ne correspondent pas!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "Verrouillage NIP des paramètres @DISTRONAME@ pas configuré.[CR][CR]Veuillez essayer à nouveau." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "Verrouillage NIP des paramètres @DISTRONAME@ configuré." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Erreur - le code NIP n'a pas 4 chiffres!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "NIP incorrect!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr " tentatives restantes." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Vous avez entré un NIP incorrect trop de fois.[CR][CR]Vous devrez attendre 5 minutes avant d'essayer à nouveau." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "Paramètres @DISTRONAME@ verrouillés!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Domaine réglementaire des communications sans fil" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bienvenue sur @DISTRONAME@" @@ -751,7 +882,7 @@ msgstr "Afin de télécharger les fonds d'écran, bannières et miniatures de vo msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Précédent" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "Les réseaux suivants sont disponibles :" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Langue" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "Votre installation de @DISTRONAME@ est terminée et vous allez entrer dans KODI où vous pourrez paramétrer vos bibliothèques de médias. Pour vous aider, un guide est disponible à wiki.kodi.tv[CR][CR]@DISTRONAME@ est développé par une équipe dédiée de développeurs qui le font sur leur temps libre. Même si le projet est basé sur le volontariat, nous payons notre bande passante et les ressources de développement, aussi, si vous trouvez @DISTRONAME@ utile, nous apprécierons votre donation, quelque soit le montant. [CR][CR]Enfin, nous espérons que vous apprécierez l'utilisation de KODI autant que nous avons apprécié son développement. Si vous avez besoin d'aide, vous trouverez des liens dans notre forum de support ainsi que les dernières nouvelles sur notre site web." msgctxt "#32319" msgid "Cron" @@ -1035,3 +1166,7 @@ msgstr "Accueil" msgctxt "#32399" msgid "Public" msgstr "Public" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Délai d'inactivité" diff --git a/language/resource.language.he_il/strings.po b/language/resource.language.he_il/strings.po index c8a8c40d..e111714c 100644 --- a/language/resource.language.he_il/strings.po +++ b/language/resource.language.he_il/strings.po @@ -139,15 +139,14 @@ msgid "" msgstr "" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" +msgid "Set to ON to enable the Bluetooth service" msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" +"/storage/backup/" msgstr "" msgctxt "#723" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "" @@ -360,7 +381,7 @@ msgid "Select Action" msgstr "" msgctxt "#32013" -msgid "Updates" +msgid "OS Updates" msgstr "" msgctxt "#32014" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "" @@ -1035,3 +1166,7 @@ msgstr "" msgctxt "#32399" msgid "Public" msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.hu_hu/strings.po b/language/resource.language.hu_hu/strings.po index 7550d6aa..e3c14e4a 100644 --- a/language/resource.language.hu_hu/strings.po +++ b/language/resource.language.hu_hu/strings.po @@ -51,7 +51,7 @@ msgid "" "LibreELEC is created by a global team of Linux and Kodi enthusiasts who " "contribute time and effort to manage the project, write code, and provide " "support. We have fun making it. We hope you have fun using it!" -msgstr "A LibreELEC-et egy Linux és Kodi rajongók globális csapata hozza létre, akik időt és erőfeszítést tesznek a projekt kezelésére, kód írására és támogatásra. Szórakoztunk. Reméljük, hogy szórakoztathatod!" +msgstr "A LibreELEC-et Linux és Kodi rajongók globális csapata hozza létre, akik időt és erőfeszítést áldoznak a projekt kezelésére, kód írására és támogatásra. Örülünk, hogy elkészíthettük. Reméljük, hogy örömmel fogod használni." msgctxt "#610" msgid "" @@ -60,13 +60,13 @@ msgid "" " in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " "GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " "project expenses are accepted via PayPal:[CR]donations@libreelec.tv" -msgstr "[B]Támogatás[/B] a fórumunkon keresztül történik:[CR]https://forum.libreelec.tv[CR][CR][B]A dokumentáció[/B] a wikiben olvasható:[CR]https://libreelec.wiki[CR][CR][B]A kód[/B] megtalálható a GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]adományokkal[/B] a projektköltségeket PayPalon keresztül fogadják el:[CR]donations@libreelec.tv" +msgstr "[B]Támogatás[/B] a fórumunkon keresztül történik:[CR]https://forum.libreelec.tv [CR][CR][B]A dokumentáció[/B] a wikiben olvasható:[CR]https://libreelec.wiki[CR][CR][B]A kód[/B] megtalálható a GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]adományokkal[/B] a projektköltségeket PayPalon keresztül fogadják el:[CR]donations@libreelec.tv" msgctxt "#700" msgid "" "Configure a hostname, keyboard type, perform a reset, update, or backups and" " restores" -msgstr "Host nvének, billentyűzet típusának beállítása, visszaállítás kezdeményezése, frissítés vagy mentés és visszaállítás mentésből" +msgstr "Host névnek, billentyűzet típusának beállítása, visszaállítás kezdeményezése, frissítés vagy mentés és visszaállítás mentésből" msgctxt "#701" msgid "Configure network startup options, NTP and VPNs" @@ -75,7 +75,7 @@ msgstr "Hálózat indulási opciók beállítása, NTP és VPN-ek" msgctxt "#702" msgid "" "Manage the Ethernet, Wireless and VPN connections available to the system" -msgstr "A rendszer számára elérhető vezetések, vezeték nélküli és VPN kapcsolatok kezelése" +msgstr "A rendszer számára elérhető vezetékes, vezeték nélküli és VPN kapcsolatok kezelése" msgctxt "#703" msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" @@ -111,7 +111,7 @@ msgstr "A 2. billentyűzet szofveres beállítása" msgctxt "#713" msgid "Configure the physical keyboard type" -msgstr "Fizikai billenytyűzet típusának beállítása" +msgstr "Fizikai billentyűzet típusának beállítása" msgctxt "#714" msgid "" @@ -139,16 +139,15 @@ msgid "" msgstr "Küldj betöltési konfigurációt /flash-ből, kodi_crash.log-ot, kernel naplót és Samba beállításokat a http://ix.io címre és jelenítsd meg a rövid URL-t" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Állítsd ON-ra és a Bluetooth eszközök kikapcsolásra kerülnek energiatakarékos üzemmódokban" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Kapcsold BE-re a Bluetooth engedélyezéséhez" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "tar archívum készítése a @DISTRONAME@ és a Kodi minden konfigurációs beállításairól, adatbázisairól és előnézeti képeiről. A mentés fájljai a /storage/backups könyvtárban kerül tárolásra. " +"/storage/backup/" +msgstr "tar archívum készítése a @DISTRONAME@ és a Kodi minden konfigurációs beállításairól, adatbázisairól és előnézeti képeiről. A mentés fájljai a /storage/backup/ könyvtárban kerül tárolásra. " msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Jelszó beállítása SSH-ra" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Add meg PIN-kódot a @DISTRONAME@ beállításainak eléréséhez." + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Változtasd meg a PIN-kódot a @DISTRONAME@ beállításainak eléréséhez." + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "Felülírja a vezeték nélküli szabályozási tartományt, hogy a rádió tulajdonságai (csatornák és az átviteli teljesítmény) megfeleljenek a helyi törvényeknek, vagy megfeleljenek a router országos konfigurációjának." + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Egy új verzió ellenőrzése benyújtja a telepített disztribúció, projekt, CPU arch és verzióját a frissítési kiszolgálóhoz. Ezeket az adatokat a projekt alapstatisztikáinak jelentésére is használják. A frissítések ellenőrzésének folytatása a stats jelentések elhagyása mellett tiltsa le ezt a beállítást." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Állítsa be a tétlenségi időt (percben), mielőtt az eszköz lekapcsolódna (alapértelmezés szerint 0, ha nincs időtúllépés). Azokra az eszközökre vonatkozik, amelyekben a „Készenléti állapot engedélyezése” funkció aktiválva van a LibreELEC eszközkapcsolat helyi menüjében." + msgctxt "#32001" msgid "Services" msgstr "Szolgáltatások" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Válassz tevékenységet" msgctxt "#32013" -msgid "Updates" -msgstr "Frissítések" +msgid "OS Updates" +msgstr "Rendszerfrissítés" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Statisztikák küldése" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Firmware frissítés" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "A frissítés a rendszer újraindítása után történik." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Bootloader EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Frissítse a Raspberry Pi Bootloader EEPROM szoftvert a legújabb verzióra. Ez az opció az újraindítás után automatikusan deaktiválásra kerül. Indítsa újra a rendszert a frissítés alkalmazásához." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "USB3 firmware-n keresztül" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Frissítse a Raspberry Pi-t USB3 firmware-n keresztül a legújabb verzióra. Ez az opció az újraindítás után automatikusan deaktiválásra kerül. Indítsa újra a rendszert a frissítés alkalmazásához." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "Frissítés %s-ról %s-ra" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "frissítés: %s" + msgctxt "#32100" msgid "Connections" msgstr "Kapcsolatok" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Érvénytelen URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN Zár" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Engedélyezze a @DISTRONAME@ beállítások PIN zárat" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Változtasd meg a @DISTRONAME@ beállításokat PIN zárat" + msgctxt "#32196" msgid "About" msgstr "Rólunk" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Hiba történt a folyamat során.[CR]SSH jelszó változatlan." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Add meg az új 4 jegyű PIN kódot" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Add meg újra a PIN kódot" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "HIBA - PIN kódok nem egyeznek!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@ beállítások PIN-kód nincs beállítva.[CR][CR] Kérlek, próbálkozz újra." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@ beállítások PIN-kód beállítva." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "A @DISTRONAME@ Beállítások PIN-kódja módosítva lett:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "HIBA - PIN-kód nem 4 számjegyű!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "@DISTRONAME@ Beállítások zárolva [CR]Add meg a 4 jegyű PIN-kódot" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Helytelen PIN-kód!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "próbálkozásod maradt." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Túl sokszor adtál meg rossz PIN-kódot.[CR][CR]Várj 5 percet és utána újra próbálkozhatsz." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@ beállítások zárolva!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Hátralévő idő a PIN megadása előtt: %02d:%02d[CR][CR]Túl sok sikertelen próbálkozás." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Vezeték nélküli szabályozási tartomány" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "A @DISTRONAME@ üdvözöl!" @@ -751,7 +882,7 @@ msgstr "Ahhoz, hogy háttereket, bannereket és előnézeti képeket tölthess l msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Előző" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "A következő hálózatok érhetőek el:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Nyelv:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "A @ DISTRONAME @ telepítése befejeződött, és hamarosan belép a Kodiba, ahol beállíthatja a médiakönyvtárakat. Ennek segítségére egy útmutató található a wiki.kodi.tv weboldalon. [CR][CR]@DISTRONAME@ egy fejlesztői dedikált csapat fejlesztette ki, aki tisztán szabadidejében dolgozik. Még önkéntes projektként is fizetnünk kell az internetes sávszélességünket és a fejlesztési erőforrásainkat, így ha a @DISTRONAME@ hasznosnak találod, mindig értékelünk bármilyen összegű adományt. [CR][CR] Végül reméljük, hogy élvezni fogod a @DISTRONAME@ használatát annyira, mint mi élveztük az építést. Ha további segítségre van szüksége, linkeket talál a támogatási fórumunkhoz és a legfrissebb híreket a weboldalunkon." msgctxt "#32319" msgid "Cron" @@ -1030,8 +1161,12 @@ msgstr "Kikapcsolva" msgctxt "#32398" msgid "Home" -msgstr "Otthoni" +msgstr "Kezdőlap" msgctxt "#32399" msgid "Public" msgstr "Nyilvános" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Tétlenségi Időtúllépés" diff --git a/language/resource.language.it_it/strings.po b/language/resource.language.it_it/strings.po index c2d6f6cf..11be829c 100644 --- a/language/resource.language.it_it/strings.po +++ b/language/resource.language.it_it/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Invia i file di configurazione di boot da /flash, kodi_crash.log, log del kernel e le configurazioni di Samba a http://ix.io e visualizza l'URL breve " msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Imposta su ON per disabilitare i dispositivi Bluetooth nella modalità di risparmio energia" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Crea un archivio tar contenente tutte le impostazioni, i database e le anteprime di @DISTRONAME@ e Kodi. I file verranno salvati in /storage/backups" +"/storage/backup/" +msgstr "Crea un archivio tar contenente tutte le impostazioni, i database e le anteprime di @DISTRONAME@ e Kodi. I file verranno salvati in /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Imposta la password per SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Il controllo di una nuova versione invia al server degli aggiornamenti la distribuzione installata, la versione e l'architettura della CPU. Questi dati vengono utilizzati a fini statistici per il progetto. Per continuare a controllare la prensenza di aggiornamenti senza inviare statistiche, disabilitare questa opzione." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Servizi" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Seleziona azione" msgctxt "#32013" -msgid "Updates" -msgstr "Aggiornamenti" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Invia statistiche" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Connessioni" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL non valida" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Informazioni" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Si è verificato un errore durante il processo.[CR]La password SSH non è stata cambiata." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Benvenuto in @DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "Casa" msgctxt "#32399" msgid "Public" msgstr "Pubblico" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.ja_jp/strings.po b/language/resource.language.ja_jp/strings.po index 5d977f74..9d5dc79e 100644 --- a/language/resource.language.ja_jp/strings.po +++ b/language/resource.language.ja_jp/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "/flash、kodi_crash.log、カーネルログおよびSambaコンフィギュレーションからブートコンフィギュレーションファイルを http://ix.io に送信して、短いURLを表示します" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "ONにすると、パワーセーブモードの間はBluetoothデバイスが無効になります" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "全ての @DISTRONAME@ とKodiコンフィギュレーション設定、データベースとサムネイルコンテンツを含むtar圧縮ファイルを作成します。バックアップファイルは /storage/backups に保存されます" +"/storage/backup/" +msgstr "全ての @DISTRONAME@ とKodiコンフィギュレーション設定、データベースとサムネイルコンテンツを含むtar圧縮ファイルを作成します。バックアップファイルは /storage/backup/ に保存されます" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "SSHのパスワードを設定します" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "新しいバージョンを確認すると、インストールされているDistribution、Project、CPU Arch、およびVersionがアップデートサーバーに送信されます。このデータは、プロジェクトの基本的な統計を報告するためにも使用されます。統計レポートを選択している間もアップデートの確認を続けるには、このオプションを無効にします。" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "サービス" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "動作を選択してください" msgctxt "#32013" -msgid "Updates" -msgstr "アップデート" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "統計データを送信します" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "接続" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URLが間違っています" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "このプログラムについて" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "処理中にエラーが発生しました。[CR]SSHパスワードは変更されていません。" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "@DISTRONAME@ へようこそ" @@ -1035,3 +1166,7 @@ msgstr "ホーム" msgctxt "#32399" msgid "Public" msgstr "パブリック" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.ko_kr/strings.po b/language/resource.language.ko_kr/strings.po index 9470b423..3b80171b 100644 --- a/language/resource.language.ko_kr/strings.po +++ b/language/resource.language.ko_kr/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "/flash, kodi_crash.log, kernel.log, Samba 부트 설정 파일들을 http://ix.io 에 올리고 단축 URL을 표시합니다" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "절전 모드에서 블루투스 장치를 사용하지 않으려면 ON으로 설정합니다" +msgid "Set to ON to enable the Bluetooth service" +msgstr "블루투스 서비스를 사용하려면 ON으로 설정합니다" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "모든 Kodi와 @DISTRONAME@ 설정, 데이터베이스, 썸네일을 tar로 묶습니다. 백업 파일은 /storage/backups에 저장됩니다" +"/storage/backup/" +msgstr "모든 Kodi와 @DISTRONAME@ 설정, 데이터베이스, 썸네일을 tar로 묶습니다. 백업 파일은 /storage/backup/에 저장됩니다" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "SSH 비밀번호 설정" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "@DISTRONAME@ 설정하는 PIN 사용" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "@DISTRONAME@ 설정하는 PIN 잠금 바꾸기" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "무선 라우터의 설정(채널과 전송 세기)이 현지 규정이나 국가 설정에 맞도록 무선 규약 도메인을 덮어씁니다." + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "새 버전 확인은 설치된 배포판, 프로젝트, CPU 아키텍처와 버전을 업데이트 서버에 보냅니다. 이 데이터는 프로젝트를 위한 기초 통계에도 쓰입니다. 통계 보고를 하지 않고 업데이트를 계속하려면 이 옵션을 끕니다." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "장치 연결이 끊어질 때까지 가동되지 않은 시간(분)을 정합니다 (기본 0은 중단 시간 없음). 장치 연결 상황 메뉴의 \"대기시간 사용\"을 활성화한 장치에 적용됩니다. " + msgctxt "#32001" msgid "Services" msgstr "서비스" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "동작 선택" msgctxt "#32013" -msgid "Updates" -msgstr "업데이트" +msgid "OS Updates" +msgstr "OS 업데이트" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "통계 전송" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "펌웨어 업데이트" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "시스템을 다시 시작하면 바로 업데이트됩니다." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "EEPROM 부트로더" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "라즈베리 파이 EEPROM 부트로더를 최신 버전으로 업데이트합니다. 이 옵션은 리부팅 후에 후에 사용할 수 없게 됩니다. 시스템을 다시 시작하면 바로 업데이트됩니다." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3 펌웨어" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "라즈베리 파이 VIA USB3 펌웨어를 최신 버전으로 업데이트합니다. 이 옵션은 리부팅 후에 사용할 수 없게 됩니다. 시스템을 다시 시작하면 바로 업데이트됩니다." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "%s에서%s로 업데이트" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "최신: %s" + msgctxt "#32100" msgid "Connections" msgstr "연결" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "잘못된 URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN 잠금" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "@DISTRONAME@ 설정의 PIN 잠금 사용" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "@DISTRONAME@ 설정의 PIN 잠금 바꾸기" + msgctxt "#32196" msgid "About" msgstr "정보" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "과정에서 오류가 있었습니다.[CR]SSH 비밀번호가 바뀌지 않았습니다." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "새로운 4자리 PIN 입력" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "PIN 다시 입력" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "오류 - PIN 코드 다름!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@ 설정의 PIN 잠금 안 됨.[CR][CR]다시 합니다." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@ 설정의 PIN 잠금." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "@DISTRONAME@ 설정 PIN 잠금:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "오류 - PIN 코드가 4자리가 아님!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "@DISTRONAME@ 설정 잠김[CR]4 자리 PIN 입력" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "PIN 틀림!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "머무름." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "틀린 PIN을 너무 많이 입력하였습니다.[CR][CR]다시 하려면 5분을 기다려야 합니다." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@ 설정 잠김!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "PIN 입력까지 남은 시간: %02d:%02d[CR][CR]이전 시도 모두 실패함." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "무선 규약 도메인" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "@DISTRONAME@에 환영합니다" @@ -751,7 +882,7 @@ msgstr "영화와 TV 쇼의 배경, 배너, 섬네일을 내려 받거나 유튜 msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "이전" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "사용가능한 네트워크 :" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "언어:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -875,7 +1006,7 @@ msgstr "장치에 아래 키를 입력합니다." msgctxt "#32344" msgid "Enable Bluetooth" -msgstr "블르투스 사용" +msgstr "블루투스 사용" msgctxt "#32346" msgid "Bluetooth is disabled" @@ -1035,3 +1166,7 @@ msgstr "집" msgctxt "#32399" msgid "Public" msgstr "공용" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "가동되지 않은 시간" diff --git a/language/resource.language.lt_lt/strings.po b/language/resource.language.lt_lt/strings.po index 8b9056db..7b84fa0d 100644 --- a/language/resource.language.lt_lt/strings.po +++ b/language/resource.language.lt_lt/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Siųsti krovimo konfigūracijos failus iš /flash, kodi_crash.log, branduolio žurnalo ir samba konfigūraciją į http://ix.io ir rodyti trumpą URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Nustatykite ĮJUNGTA ir Bluetooth įrenginiai bus atjungti energijos taupymo režimuose" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Sukurkite tar archyvą su visais @DISTRONAME@ ir Kodi konfigūracijos nustatymais, duomenų bazėmis ir turinio miniatiūromis. Atsarginės kopijos failai bus išsaugoti /storage/backups aplanke" +"/storage/backup/" +msgstr "Sukurkite tar archyvą su visais @DISTRONAME@ ir Kodi konfigūracijos nustatymais, duomenų bazėmis ir turinio miniatiūromis. Atsarginės kopijos failai bus išsaugoti /storage/backup/ aplanke" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Nustatykite SSH slaptažodį" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Tikrinant ar nėra naujos versijos į atnaujinimo serverį bus nusiųsta informacija apie įdiegtą distributyvą, projektą, CPU architektūrą ir versiją. Šie duomenys taip pat bus naudojami bendrai projekto statistikai. Norėdami tikrinti ar nėra atnaujinimų bet nenorėdami atskleisti šios informacijos išjunkite šią parinkty." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Paslaugos" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Pasirinkite veikmą" msgctxt "#32013" -msgid "Updates" -msgstr "Atnaujinimai" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Siųsti statistiką" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Prisijungimai" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Klaidingas URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Apie" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Proceso metu įvyko klaida. [CR] SSH slaptažodis nekeičiamas." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Jus sveikina @DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "Namai" msgctxt "#32399" msgid "Public" msgstr "Viešas" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.lv_lv/strings.po b/language/resource.language.lv_lv/strings.po index d27858f7..3415751b 100644 --- a/language/resource.language.lv_lv/strings.po +++ b/language/resource.language.lv_lv/strings.po @@ -4,7 +4,6 @@ # Addon Provider: LibreELEC msgid "" msgstr "" -"Project-Id-Version: LibreELEC Settings Add-on\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -140,16 +139,15 @@ msgid "" msgstr "/flash boot konfigurācijas faila, kodi_crash.log, kodola žurnāla un Samba konfigurācijas nosūtīšana uz http://ix.io un īsā URL attēlošana" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Ieslēdzot Bluetooth ierīces taupīšanas režīmā tiks atspējotas" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Izveidojiet visu @DISTRONAME@ un Kodi konfigurācijas iestatījumu, datu bāzu un satura sīktēlu tar arhīvu. Rezerves faili tiks saglabāti /storage/backups" +"/storage/backup/" +msgstr "Izveidojiet visu @DISTRONAME@ un Kodi konfigurācijas iestatījumu, datu bāzu un satura sīktēlu tar arhīvu. Rezerves faili tiks saglabāti /storage/backup/" msgctxt "#723" msgid "" @@ -257,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "SSH paroles iestatīšana" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Iespējot @DISTRONAME@ iestatījumu piekļuves PIN kodu" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Mainīt @DISTRONAME@ iestatījumu piekļuves PIN kodu" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -332,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Jaunās versijas pārbaude atjauninājumu serverim iesniegs informāciju par instalēto distributīvu, projekta versiju, CPU arhitektūru un versiju. Šie dati arī tiek izmantoti projekta pamata statistikai. Lai turpinātu pārbaudīt atjauninājumus, atsakoties no statistikas ziņojumiem, atspējojiet šo opciju." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Servisi" @@ -361,8 +381,8 @@ msgid "Select Action" msgstr "Darbības izvēle" msgctxt "#32013" -msgid "Updates" -msgstr "Atjauninājumi" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -396,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Statistikas nosūtīšana" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Savienojumi" @@ -604,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Nederīgs URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN bloķēšana" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Iespējot @DISTRONAME@ iestatījumu PIN bloķēšanu" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Mainīt @DISTRONAME@ iestatījumu PIN bloķēšanu" + msgctxt "#32196" msgid "About" msgstr "Par" @@ -710,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Procesa laikā radās kļūda.[CR]SSH parole nav nomainīta." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Ievadiet jaunu 4 ciparu PIN kodu" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Atkārtoti ievadiet PIN kodu" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Kļūda - PIN kodi nesakrīt!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@ iestatījumu PIN bloķēšana nav iestatīta.[CR][CR]Lūdzu, mēģiniet vēlreiz." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@ iestatījumu PIN bloķēšana iestatīta." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Kļūda - PIN kods nav 4 cipari!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Nepareizs PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr " mēģinājumi atlikuši." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Pārāk daudz reižu ir ievadīts nepareizs PIN kods.[CR][CR]Pagaidiet 5 minūtes un mēģiniet vēlreiz." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@ iestatījumi bloķēti!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Sveicināti @DISTRONAME@" @@ -752,7 +882,7 @@ msgstr "Lai lejupielādētu filmu un seriālu fonus, banerus, sīktēlus un stra msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Iepriekšējais" msgctxt "#32308" msgid "Hostname:" @@ -764,7 +894,7 @@ msgstr "Pašlaik ir pieejami šādi tīkli:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Valoda:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -1036,3 +1166,7 @@ msgstr "Mājas" msgctxt "#32399" msgid "Public" msgstr "Publisks" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.nb_no/strings.po b/language/resource.language.nb_no/strings.po index 15ada0ef..523b4853 100644 --- a/language/resource.language.nb_no/strings.po +++ b/language/resource.language.nb_no/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Send boot config-filer fra /flash, kodi_crash.log, kernel log og Samba konfigurerer til http://ix.io, og viser kort URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Sett til PÅ og Bluetooth-enheter vil deaktiveres under strømsparing modus." +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Lag et tar-arkiv som inneholder alle @DISTRONAME@ og Kodi konfigurasjonsinnstillinger, databaser og miniatyrbilde-innhold. Sikkerhetskopier blir lagret i /storage/backups" +"/storage/backup/" +msgstr "Lag et tar-arkiv som inneholder alle @DISTRONAME@ og Kodi konfigurasjonsinnstillinger, databaser og miniatyrbilde-innhold. Sikkerhetskopier blir lagret i /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Angi passordet for SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Ved å se etter en ny versjon, sendes den installerte distribusjonen, prosjektet, CPU-arken og versjonen til oppdateringsserveren. Disse dataene brukes også til å rapportere grunnleggende statistikk for prosjektet. Hvis du vil fortsette å sjekke for oppdateringer mens du velger bort statistikkrapportering, deaktiver dette alternativet." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Tjenester" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Velg Handling" msgctxt "#32013" -msgid "Updates" -msgstr "Oppdateringer" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Send statistikk" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Tilkoblinger" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Ugyldig URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Om" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Det oppsto en feil under prosessen.[CR]SSH-passordet er uendret." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Velkommen til @DISTRONAME@" @@ -751,7 +882,7 @@ msgstr "For å laste ned bakgrunner, bannere og miniatyrbilder for dine filmer o msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Forrige" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "De følgende Nettverkene er tilgjengelige:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Språk:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "Din @DISTRONAME@ installasjonen er nå fullført, og du er i ferd med å legge inn Kodi hvor du kan sette opp mediebiblioteker. For hjelp med dette, sjekk ut guiden som er tilgjengelig på wiki.kodi.tv[CR] [CR]@DISTRONAME@ som er utviklet av et dedikert team av utviklere som bruker fritiden for å bidra. Selv om det er et frivillig prosjekt så må vi fortsatt betale for internett båndbredde og utviklingsressurser, så hvis du finner @DISTRONAME@ nyttig, setter vi stor pris på donasjon. [CR][CR] Til slutt håper vi at du liker å bruke @DISTRONAME@ så mye som vi har hatt glede av å utvikle den. Hvis du trenger mer hjelp kan du finne lenker til vårt supportforum sammen med de siste nyhetene på vår hjemmeside." msgctxt "#32319" msgid "Cron" @@ -1035,3 +1166,7 @@ msgstr "Hjem" msgctxt "#32399" msgid "Public" msgstr "Allment" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.nl_nl/strings.po b/language/resource.language.nl_nl/strings.po index 27d08751..49b5d3f0 100644 --- a/language/resource.language.nl_nl/strings.po +++ b/language/resource.language.nl_nl/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Verstuur opstartconfiguratiebestanden vanuit /flash, kodi_crash.logs, kernel.log en Samba-configuraties naar http://ix.io , en toon de verkorte URL." msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Inschakelen om Bluetooth-apparaten uit te zetten tijdens powersave-modi" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Maak een tar-archiefbestand met alle @DISTRONAME@ en Kodi-configuratieinstellingen, databases en miniaturen. Archiefbestanden zullen worden opgeslagen in /storage/backup" +"/storage/backup/" +msgstr "Maak een .tar archiefbestand met daarin alle @DISTRONAME@ en Kodi-instellingen, databases en miniaturen. Archiefbestanden zullen opgeslagen worden in /storage/backup ." msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Stel het SSH-wachtwoord in" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "PIN voor @DISTRONAME@ Instellingen inschakelen" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "PIN-slot voor @DISTRONAME@ instellingen wijzigen" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Controle op een nieuwe versie zal data betreffende de geïnstalleerde distributie, project, CPU Arch en versie naar de update-server doorsturen. Deze gegevens worden ook gebruikt voor simpele statistieken aangaande het project. Het uitschakelen van deze statistieken tijdens de controle op nieuwe versies kan via deze optie." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Stel de idle timeout in (in minuten) voordat apparaten wordt ontkoppeld (standaard 0 voor geen timeout). Dit geldt voor apparaten waar \"Standby inschakelen\" geactiveerd is in het LibreELEC apparaatverbinding contextmenu." + msgctxt "#32001" msgid "Services" msgstr "Diensten" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Kies actie" msgctxt "#32013" -msgid "Updates" -msgstr "Updates" +msgid "OS Updates" +msgstr "Systeemupdates" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Statistieken doorgeven" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Firmware-updates" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Het bijwerken gebeurt als het systeem wordt herstart." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Bootloader EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Bijwerken van de Raspberry Pi bootloader EEPROM naar de nieuwste versie. Deze optie wordt automatisch uitgezet na het herstarten. Herstart het systeem om de nieuwe versie door te voeren." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3 Firmware" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Bijwerken van de Raspberry Pi VIA USB3 firmware naar de nieuwste versie. Deze optie wordt automatisch uitgezet na het herstarten. Herstart het systeem om de nieuwe versie door te voeren." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "bijwerken van %s naar %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "bijgewerkt: %s" + msgctxt "#32100" msgid "Connections" msgstr "Connecties" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Foutieve URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN-slot" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Inschakelen van het PIN-slot voor de @DISTRONAME@ instellingen" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Wijzigen van het PIN-slot voor de @DISTRONAME@ instellingen" + msgctxt "#32196" msgid "About" msgstr "Over" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Er is een fout opgetreden tijdens het proces.[CR]Het SSH-wachtwoord is niet veranderd." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Geef 4 nieuwe cijfers voor je PIN" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "PIN opnieuw ingeven" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Fout - PIN codes komen niet overeen!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "PIN-slot voor de @DISTRONAME@ instellingen zijn niet ingesteld.[CR][CR]Probeer het opnieuw." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "Het PIN-slot voor de @DISTRONAME@ instellingen is ingesteld." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "Je PIN-slot voor de @DISTRONAME@ instellingen is ingesteld met:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "FOUT - PIN-waarde moet 4 cijfers zijn!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "Het PIN-slot voor de @DISTRONAME@ is beveiligd.[CR]Geef de 4-cijferige code" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Onjuiste PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "overblijvende pogingen." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "U heeft te vaak een incorrecte code ingevoerd.[CR][CR]U zult 5 minuten moeten wachten voor een nieuwe poging." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "Het PIN-slot voor de @DISTRONAME@ instellingen is beveiligd!." + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Tijd voordat een code ingevoerd kan worden: %02d:%02d [CR][CR]Teveel foutieve invoerpogingen." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Wireless Regulatory Domain" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Welkom bij @DISTRONAME@" @@ -915,7 +1046,7 @@ msgstr "Geavanceerde netwerkinstellingen" msgctxt "#32369" msgid "Wait for network before starting Kodi" -msgstr "Wachten met de netwerkverbinding nadat Kodi gestart is" +msgstr "Wacht op de netwerkverbinding voordat Kodi wordt gestart" msgctxt "#32370" msgid "Maximum Wait Time (Sec.)" @@ -1035,3 +1166,7 @@ msgstr "Thuis" msgctxt "#32399" msgid "Public" msgstr "Publiek" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Idle Timeout" diff --git a/language/resource.language.pl_pl/strings.po b/language/resource.language.pl_pl/strings.po index 30081cbc..9c3fc818 100644 --- a/language/resource.language.pl_pl/strings.po +++ b/language/resource.language.pl_pl/strings.po @@ -4,7 +4,6 @@ # Addon Provider: LibreELEC msgid "" msgstr "" -"Project-Id-Version: LibreELEC Settings Add-on\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -140,16 +139,15 @@ msgid "" msgstr "Wysyłaj pliki konfiguracyjne boot z /flash, kodi_crash.log, log jądra i Samba konfiguruje się do http://ix.io i wyświetlaj krótki URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Włączenie opcji spowoduje wyłączenie urządzeń bluetooth w trybach oszczędzania energii " +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Utwórz archiwum tar zawierające wszystkie ustawienia konfiguracyjne @DISTRONAME@ i Kodi, bazy danych i zawartość miniatur. Pliki kopii zapasowych będą przechowywane w /storage/backups" +"/storage/backup/" +msgstr "Utwórz archiwum tar zawierające wszystkie ustawienia konfiguracyjne @DISTRONAME@ i Kodi, bazy danych i zawartość miniatur. Pliki kopii zapasowych będą przechowywane w /storage/backup/" msgctxt "#723" msgid "" @@ -257,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Ustaw hasło dla SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -332,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Sprawdzenie nowej wersji spowoduje przesłanie zainstalowanej dystrybucji, projektu, architektury procesora i wersji do serwera aktualizacji. Dane te są również wykorzystywane do raportowania podstawowych statystyk dla projektu. Aby kontynuować sprawdzanie aktualizacji bez zgłaszania statystyk, wyłącz tę opcję." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Usługi" @@ -361,8 +381,8 @@ msgid "Select Action" msgstr "Wybierz akcję" msgctxt "#32013" -msgid "Updates" -msgstr "Aktualizacje" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -396,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Prześlij statystyki" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Połączenia" @@ -604,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Nieprawidłowy URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Informacje o" @@ -710,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Podczas procesu wystąpił błąd.[CR]Hasło SSH pozostaje niezmienione." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Witaj w @DISTRONAME@" @@ -1036,3 +1166,7 @@ msgstr "Dom" msgctxt "#32399" msgid "Public" msgstr "Publiczny" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.pt_br/strings.po b/language/resource.language.pt_br/strings.po index 5eb637e9..803a13cd 100644 --- a/language/resource.language.pt_br/strings.po +++ b/language/resource.language.pt_br/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Envie arquivos de configuração de inicialização de /flash, kodi_crash.log, kernel log e configurações do Samba para http://ix.io e exiba a URL curta" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Definido como ON e os dispositivos Bluetooth serão desativados durante os modos de poupança de energia" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Crie um arquivo tar contendo @DISTRONAME@ Configurações do Kodi, bancos de dados e conteúdo em miniatura. Os arquivos de backup serão armazenados em /storage/backups" +"/storage/backup/" +msgstr "Crie um arquivo tar contendo @DISTRONAME@ Configurações do Kodi, bancos de dados e conteúdo em miniatura. Os arquivos de backup serão armazenados em /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Definir a senha para o SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "A verificação de uma nova versão enviará a Distribuição, o Projeto, o Arco da CPU e a Versão instalados para o servidor de atualizações. Esses dados também são usados ​​para relatar estatísticas básicas do projeto. Para continuar a verificar se há atualizações ao desativar o relatório de estatísticas, desative essa opção." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Serviços" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Selecionar Ação" msgctxt "#32013" -msgid "Updates" -msgstr "Atualizações" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Enviar estatísticas" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Conexões" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL Inválida" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Sobre" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Houve um erro durante o processo.[CR]A senha do SSH não foi alterada." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bem Vindo para @DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "Home" msgctxt "#32399" msgid "Public" msgstr "Público" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.pt_pt/strings.po b/language/resource.language.pt_pt/strings.po index ef6c80c5..7ead6772 100644 --- a/language/resource.language.pt_pt/strings.po +++ b/language/resource.language.pt_pt/strings.po @@ -139,15 +139,14 @@ msgid "" msgstr "" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Active esta opção e os dispositivos Bluetooth serão desactivados quanto esteja em modo de poupança de energia" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" +"/storage/backup/" msgstr "" msgctxt "#723" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Definir a palavra passe para SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Serviços" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Selecionar Ação" msgctxt "#32013" -msgid "Updates" -msgstr "Atualizações" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Enviar Estatísticas" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Conexões" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL Inválido" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Sobre" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bem-vindo a @DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "" msgctxt "#32399" msgid "Public" msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.ro_ro/strings.po b/language/resource.language.ro_ro/strings.po index af1bc4ec..27447170 100644 --- a/language/resource.language.ro_ro/strings.po +++ b/language/resource.language.ro_ro/strings.po @@ -139,15 +139,14 @@ msgid "" msgstr "" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" +msgid "Set to ON to enable the Bluetooth service" msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" +"/storage/backup/" msgstr "" msgctxt "#723" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Servicii" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "" msgctxt "#32013" -msgid "Updates" -msgstr "Actualizări" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Conexiuni" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "URL invalid" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Despre" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Bunvenit la @DISTRONAME@" @@ -763,7 +894,7 @@ msgstr "" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Limba:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -809,15 +940,15 @@ msgstr "" msgctxt "#32319" msgid "Cron" -msgstr "" +msgstr "Cron" msgctxt "#32320" msgid "Enable Cron" -msgstr "" +msgstr "Activează Cron" msgctxt "#32323" msgid "Reset to Defaults" -msgstr "" +msgstr "Revino la setările implicite" msgctxt "#32324" msgid "Reset System Settings to defaults" @@ -973,7 +1104,7 @@ msgstr "" msgctxt "#32384" msgid "OBEX Enabled" -msgstr "" +msgstr "OBEX activat" msgctxt "#32385" msgid "OBEX Upload Folder" @@ -1035,3 +1166,7 @@ msgstr "Acasă" msgctxt "#32399" msgid "Public" msgstr "Public" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.ru_ru/strings.po b/language/resource.language.ru_ru/strings.po index 85e61898..ff3c5e74 100644 --- a/language/resource.language.ru_ru/strings.po +++ b/language/resource.language.ru_ru/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Отправьте файлы конфигурации загрузки из /flash, kodi_crash.log, kernel log и настроек Samba на http://ix.io и отобразите короткий URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Включите для автоматического отключения Bluetooth устройств при простоях для экономии энергии" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Включение службы Bluetooth" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Создание tar-архива со всеми настройками @DISTRONAME@ и Kodi, всеми базами данных и миниатюрами. Резервные копии будут сохранены в /storage/backups" +"/storage/backup/" +msgstr "Создание tar-архива со всеми настройками @DISTRONAME@ и Kodi, всеми базами данных и миниатюрами. Резервные копии будут сохранены в /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Установите пароль для SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Включить блокировку по PIN для доступа к настройкам @DISTRONAME@" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Изменить PIN для доступа к настройкам @DISTRONAME@" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "Переопределить радиочастотный регион, чтобы характеристики приемопередатчика (список каналов и мощность) соответствовали местным законам или настройкам вашего роутера." + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Проверка новой версии отправит установленный дистрибутив, Project, CPU Arch и Version на сервер обновлений. Эти данные также используются для составления базовой статистики по проекту. Чтобы продолжить проверку обновлений при отключении статистики, отключите эту опцию." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Установить таймаут отключения неактивных устройств. Задаётся в минутах. По умолчанию отключен значением 0. Применяется к устройствам, для которых включена опция \"Включить режим ожидания\" в контекстном меню \"Соединение\" устройства LibrELEC." + msgctxt "#32001" msgid "Services" msgstr "Службы" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Выберите действие" msgctxt "#32013" -msgid "Updates" -msgstr "Обновления" +msgid "OS Updates" +msgstr "Обновления операционной системы" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Отправить статистику" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Обновления прошивки" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Обновление произойдет после перезагрузки системы." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Загрузчик EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Обновить загрузчик Raspberry Pi до последней версии. Эта опция автоматически отключается после перезагрузки. Перезагрузите систему, чтобы применить обновление." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "Прошивка VIA USB3" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Обновить прошивку VIA USB3 на Raspberry Pi до последней версии. Эта опция автоматически отключается после перезагрузки. Перезагрузите систему, чтобы применить обновление." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "Обновить %s до %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "последняя версия: %s" + msgctxt "#32100" msgid "Connections" msgstr "Соединения" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Неверная ссылка" +msgctxt "#32192" +msgid "PIN lock" +msgstr "Блокировка по PIN " + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Включить PIN блокировку настроек @DISTRONAME@" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Изменить установки PIN для настроек @DISTRONAME@" + msgctxt "#32196" msgid "About" msgstr "Об LibreELEC" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Во время процесса произошла ошибка.[CR]Пароль SSH не изменился." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Введите PIN из 4 цифр" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Повторите PIN" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "PIN-коды не совпадают!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@ PIN блокировка настроек не установлена.[CR][CR]Попробуйте снова." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "Установлен PIN на вход в настройки @DISTRONAME@." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "Ваш PIN для настроек @DISTRONAME@ установлен в значение:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Ошибка - PIN не содержит 4 цифр!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "Вход в настройки @DISTRONAME@ заблокирован[CR]Введите 4 цифры PIN-кода" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Некорректный PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "осталось попыток." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Вы ввели неверный PIN слишком много раз.[CR][CR]Теперь придётся подождать 5 минут до следующей попытки." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "Настройки @DISTRONAME@ заблокированы!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Время до следующей возможности ввести PIN: %02d:%02d[CR][CR]Было слишком много ошибочных попыток." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Радиочастотный регион" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Добро пожаловать в @DISTRONAME@" @@ -727,7 +858,7 @@ msgstr "Этот мастер облегчит настройку при уст msgctxt "#32303" msgid "Next" -msgstr "Следующ." +msgstr "Далее" msgctxt "#32304" msgid "" @@ -751,7 +882,7 @@ msgstr "Для того, чтобы загружать фанарт, банне msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Назад" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "Доступны следующие сети:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Язык:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "Установка @DISTRONAME@ завершена и теперь вы можете войти в Kodi и настроить вашу медиатеку. Если вам необходима помощь, то вы можете найти инструкцию, доступную на сайте wiki.kodi.tv[CR][CR]@DISTRONAME@ разработана группой разработчиков, которые работают в свободное время. Даже будучи волонтерским проектом, мы все равно должны платить за интернет и ресурсы для разработки, поэтому, если вы сочтете @DISTRONAME@ полезным, мы всегда будем признательны за пожертвование любой суммы. Наконец, мы надеемся, что вам понравится использовать @DISTRONAME@ настолько, насколько нам нравится его разрабатывать. Если вам нужна дополнительная помощь, вы можете найти ссылки на наш форум поддержки вместе с последними новостями на нашем сайте." msgctxt "#32319" msgid "Cron" @@ -1035,3 +1166,7 @@ msgstr "Главное меню" msgctxt "#32399" msgid "Public" msgstr "Общественные" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Таймаут неактивности" diff --git a/language/resource.language.sk_sk/strings.po b/language/resource.language.sk_sk/strings.po index dcba46d4..138f637c 100644 --- a/language/resource.language.sk_sk/strings.po +++ b/language/resource.language.sk_sk/strings.po @@ -103,11 +103,11 @@ msgstr "Nakonfigurujte názov hostiteľa vášho systému @DISTRONAME@. Toto sa msgctxt "#711" msgid "Configure the 1st keyboard software layout" -msgstr "Konfigurácia prvého rozloženia softvéru klávesnice" +msgstr "Konfigurácia rozloženia klávesnice č. 1" msgctxt "#712" msgid "Configure the 2nd keyboard software layout" -msgstr "Konfigurácia druhého rozloženia softvéru klávesnice" +msgstr "Konfigurácia rozloženia klávesnice č. 2" msgctxt "#713" msgid "Configure the physical keyboard type" @@ -139,16 +139,15 @@ msgid "" msgstr "Odošlite bootovacie konfiguračné súbory z /flash, kodi_crash.log, kernel log a Samba configs do http://ix.io a zobrazte krátku adresu URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "Nastavte možnosť ZAPNUTÉ a zariadenia Bluetooth sa počas režimov šetrenia energie vypnú" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Vytvorte archív tarov, ktorý obsahuje všetky nastavenia konfigurácie @DISTRONAME@ a Kodi, databázy a obsah miniatúr. Záložné súbory budú uložené v priečinku /storage/backups" +"/storage/backup/" +msgstr "Vytvorte archív tarov, ktorý obsahuje všetky nastavenia konfigurácie @DISTRONAME@ a Kodi, databázy a obsah miniatúr. Záložné súbory budú uložené v priečinku /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Nastaviť heslo pre SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Kontrola novej verzie odosiela nainštalovaný distribučný server, projekt, oblúk CPU a verziu servera na aktualizáciu. Tieto údaje sa používajú aj na oznamovanie základných štatistík projektu. Ak chcete pokračovať v kontrole aktualizácií pri zrušení štatistických prehľadov, zakážte túto možnosť." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Služby" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Zvoliť akciu" msgctxt "#32013" -msgid "Updates" -msgstr "Aktualizácie" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Odoslať štatistiku" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "Pripojenia" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Neplatné URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "O programe" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Počas procesu sa vyskytla chyba.[CR]SSH heslo ostáva nezmenené." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Vitajte v @DISTRONAME@" @@ -747,7 +878,7 @@ msgid "" "TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " "needs to be connected the Internet.[CR][CR]An Internet connection is also " "required for @DISTRONAME@ to automatically update itself." -msgstr "Ak chcete prevziať pozadie, bannery a náhľady pre vaše filmy a televízne relácie a prehrať online obsah z webových stránok, ako je YouTube, musíte pripojiť @DISTRONAME@.[CR][CR]Pri @DISTRONAME@ sa vyžaduje aj internetové pripojenie sa automaticky aktualizuje." +msgstr "Ak chcete prevziať pozadia, bannery a náhľady pre vaše filmy a televízne relácie a prehrať online obsah z webových stránok, ako je YouTube, @DISTRONAME@ sa musí pripojiť na internet.[CR][CR]@DISTRONAME@ vyžaduje internetové pripojenie aj pre automatické aktualizácie." msgctxt "#32307" msgid "Previous" @@ -755,7 +886,7 @@ msgstr "" msgctxt "#32308" msgid "Hostname:" -msgstr "Meno hosťa:" +msgstr "Názov hostiteľa:" msgctxt "#32309" msgid "The following Networks are currently available:" @@ -763,7 +894,7 @@ msgstr "K dispozícii sú tieto siete:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Jazyk" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -1035,3 +1166,7 @@ msgstr "Domov" msgctxt "#32399" msgid "Public" msgstr "Verejné" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.sv_se/strings.po b/language/resource.language.sv_se/strings.po index 61c015f6..c2d064c5 100644 --- a/language/resource.language.sv_se/strings.po +++ b/language/resource.language.sv_se/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "Skicka bootfiler från /flash, kodi_crash.log, kernel.log and Samba konfiguration till http://ix.io, och visa en kort-URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "När inställningen är PÅ och kommer blåtandsenheter inaktiveras vid strömsparläge" +msgid "Set to ON to enable the Bluetooth service" +msgstr "Välj PÅ för att aktivera Bluetooth tjänsten" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Skapa ett tar-arkiv som innehåller alla @DISTRONAME@- och Kodi-inställningar, databaser och miniatyrbilder. Backupfilerna lagras i /storage/backups" +"/storage/backup/" +msgstr "Skapa ett tar-arkiv som innehåller alla @DISTRONAME@- och Kodi-inställningar, databaser och miniatyrbilder. Backupfilerna lagras i /storage/backup/" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "Ställ in lösenord för SSH" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "Aktivera PIN-kod för @DISTRONAME@-inställningar" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "Ändra PIN-kodslås för åtkomst till @DISTRONAME@-inställningar" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "Åsidosätt regelverk för trådlösa radioegenskaper (kanaler och sändningsstyrka) för att matcha landets lagar eller din routerkonfiguration" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "När kontrollen görs skickas information om; Installerad distribution, Projekt, CPU-arkitektur och version till uppdaterings-servern. Informationen används även för att rapportera statistik till projektet. För att uppdatera utan att skicka statistiken, kan du sätta inställningen till AV." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "Ange timeout (i minuter) innan enheten kopplas bort (standard är 0 för ingen timeout). Inställningen gäller för enheter som har \"Aktivera Standby\" aktiverat i LibreELEC-inställningarna för enheternas kontextmeny." + msgctxt "#32001" msgid "Services" msgstr "Tjänster" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Välj åtgärd" msgctxt "#32013" -msgid "Updates" -msgstr "Uppdateringar" +msgid "OS Updates" +msgstr "OS Uppdateringar" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "Skicka statistik" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "Firmware uppdateringar" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Uppdateringen kommer genomföras när systemet startas om." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Bootloader EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Uppdatera Raspberry Pi's bootloader EEPROM till senaste versionen. Denna inställning är automatiskt avstängd efter omstart. Starta om systemet för att lägga på uppdateringen." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3 Firmware" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Uppdatera Raspberry Pi VIA USB3 firmware till senaste versionen. Denna inställning är automatiskt avstängd efter omstart. Starta om systemet för att lägga på uppdateringen." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "uppdatering från %s till %s" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "Aktuell: %s" + msgctxt "#32100" msgid "Connections" msgstr "Anslutningar" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Ogiltig URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN-kodslås" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "Aktivera PIN-kodslås för @DISTRONAME@-inställningar" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "Ändra inställningar för @DISTRONAME@ PIN-kodslås" + msgctxt "#32196" msgid "About" msgstr "Om" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "Det blev ett fel under processen. [CR]SSH lösenordet är oförändrat." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "Ange ny 4-siffrors PIN-kod" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "Ange PIN-kod igen" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Fel - PIN-koderna är olika!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@-inställningar för PIN-kodslås har inte uppdaterats.[CR][CR]Försök igen." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@-inställningar för PIN-kodslås har uppdaterats." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "Dina @DISTRONAME@-inställningar för PIN-lås har satts till:" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Fel: PIN-koden bestod inte av 4 siffror!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "@DISTRONAME@-inställningar är låsta[CR]Ange 4 siffrors PIN" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Fel PIN-kod!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "försök kvarstår." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "Du har angivit fel PIN-kod för många gånger.[CR][CR]Du kommer behöva vänta 5 minuter innan du kan försöka igen." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@-inställningar är låsta!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "Tid innan PIN kan anges på nytt: %02d:%02d[CR][CR]För många tidigare felaktiga försök." + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "Wireless Regulatory Domain" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "Välkommern till @DISTRONAME@" @@ -751,7 +882,7 @@ msgstr "För att ladda ned bakgrundsbilder, banners och miniatyrer till dina TV msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Föregående" msgctxt "#32308" msgid "Hostname:" @@ -763,7 +894,7 @@ msgstr "Följande nätverk finns för närvarande tillgängliga:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Språk:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -1035,3 +1166,7 @@ msgstr "Home" msgctxt "#32399" msgid "Public" msgstr "Public" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "Timeout" diff --git a/language/resource.language.tr_tr/strings.po b/language/resource.language.tr_tr/strings.po index 3a0ea7ec..4299b2e8 100644 --- a/language/resource.language.tr_tr/strings.po +++ b/language/resource.language.tr_tr/strings.po @@ -60,7 +60,7 @@ msgid "" " in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " "GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " "project expenses are accepted via PayPal:[CR]donations@libreelec.tv" -msgstr "" +msgstr "[B]Destek[/B] forum sayfamız aracılığıyla sağlanır:[CR]https://forum.libreelec.tv[CR][CR][B]Belgeler[/B] wiki sayfamızda okunabilir:[CR]https://libreelec.wiki[CR][CR][B]Kod[/B] GitHub sayfamızda bulunur:[CR]https://github.com/LibreELEC[CR][CR][B]Bağışlar[/B] proje harcamalarına yönelik olarak PayPal üzerinden kabul edilir:[CR]donations@libreelec.tv" msgctxt "#700" msgid "" @@ -79,7 +79,7 @@ msgstr "Kullanılabilir Ethernet, Wireless ve VPN bağlantılarını yönetin" msgctxt "#703" msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" -msgstr "Samba, SSH, Cron, Avahi ve Syslog gibi sistem servislerini yapılandırın" +msgstr "Samba, SSH, Cron, Avahi ve Syslog gibi sistem hizmetlerini yapılandırın" msgctxt "#704" msgid "Configure and pair Bluetooth devices" @@ -130,25 +130,24 @@ msgctxt "#718" msgid "" "Send boot config files from /flash, kodi.log, kernel log and Samba configs " "to http://ix.io, and display the short URL" -msgstr "" +msgstr "kodi.log, kernel günlüğü, Samba yapılandırmaları ve /flash dizininden önyükleme yapılandırma dosyalarını http://ix.io adresine yolla ve kısa URL adresini göster" msgctxt "#719" msgid "" "Send boot config files from /flash, kodi_crash.log, kernel log and Samba " "configs to http://ix.io, and display the short URL" -msgstr "" +msgstr "kodi_crash.log, kernel günlüğü, Samba yapılandırmaları ve /flash dizininden önyükleme yapılandırma dosyalarını http://ix.io adresine yolla ve kısa URL adresini göster" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "ON olarak ayarlayın ve güç tasarrufu modları sırasında Bluetooth cihazları devre dışı bırakılır" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "Tüm @DISTRONAME@ ve Kodi konfigürasyon ayarlarını, veritabanlarını ve küçük resim içeriğini içeren bir tar arşivi oluşturun. Yedek dosyalar /storage/backups içinde saklanır" +"/storage/backup/" +msgstr "Tüm @DISTRONAME@ ve Kodi yapılandırma ayarlarını, veritabanlarını ve küçük resim içeriğini içeren bir tar arşivi oluşturun. Yedek dosyalar /storage/backup/ içinde saklanır" msgctxt "#723" msgid "" @@ -193,7 +192,7 @@ msgstr "Kablolu (Ethernet) ağlar için desteği etkinleştirme veya devre dış msgctxt "#732" msgid "Configure the 1st time (NTP) server" -msgstr "1. kez (NTP) sunucuyu yapılandırın" +msgstr "1. saat (NTP) sunucusunu yapılandırın" msgctxt "#733" msgid "Configure the 2nd time (NTP) server" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "SSH için şifreyi ayarlayın" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "@DISTRONAME@ Ayarlarına erişmek için bir PIN ayarlayın" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "@DISTRONAME@ Ayarlarına erişmek için gereken PIN Kilidini Değiştirin" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,9 +345,16 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "Yeni bir sürümün kontrol edilmesi, kurulu Dağıtım, Proje, CPU Arch ve Sürüm'ü güncelleme sunucusuna gönderecektir. Bu veriler aynı zamanda projenin temel istatistiklerini bildirmek için kullanılır. İstatistik raporlarından çıkarken güncellemeleri kontrol etmeye devam etmek için bu seçeneği devre dışı bırakın." +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" -msgstr "Servisler" +msgstr "Hizmetler" msgctxt "#32002" msgid "System" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "Bir İşlem Seçin" msgctxt "#32013" -msgid "Updates" -msgstr "Güncellemeler" +msgid "OS Updates" +msgstr "OS güncellemesi" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "İstatistikleri Gönder" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "Sistem yeniden başlatıldığında güncelleme gerçekleşecektir." + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "Bootloader EEPROM" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Raspberry Pi Önyükleyici EEPROM'u en son sürüme güncelleyin. Bu seçenek, yeniden başlattıktan sonra otomatik olarak devre dışı bırakılır. Güncellemeyi uygulamak için sistemi yeniden başlatın." + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "VIA USB3 Firmware" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "Raspberry Pi VIA USB3 üretici yazılımını en son sürüme güncelleyin. Bu seçenek, yeniden başlattıktan sonra otomatik olarak devre dışı bırakılır. Güncellemeyi uygulamak için sistemi yeniden başlatın." + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "%s sürümü, %ssürümüne güncelleştirildi" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "güncel: %s" + msgctxt "#32100" msgid "Connections" msgstr "Bağlantılar" @@ -457,7 +516,7 @@ msgstr "Alt Ağ Maskesi" msgctxt "#32116" msgid "Default Gateway" -msgstr "Varsayılan giriş" +msgstr "Varsayılan Ağ Geçidi" msgctxt "#32117" msgid "Prefix Length" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "Geçeriz URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "PIN kilidi" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "@DISTRONAME@ Ayarları PIN Kilidini Etkinleştir" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "@DISTRONAME@ Ayarları PIN Kilidini Değiştir" + msgctxt "#32196" msgid "About" msgstr "Hakkında" @@ -629,15 +700,15 @@ msgstr "SSH Parolasını Devre Dışı Bırak" msgctxt "#32204" msgid "Enable Samba" -msgstr "Samba'yı aktifleştir" +msgstr "Samba Hizmetini Etkinleştir" msgctxt "#32205" msgid "Enable SSH" -msgstr "SSH'ı aktifleştir" +msgstr "SSH Hizmetini Etkinleştir" msgctxt "#32206" msgid "Enable Avahi (Zeroconf)" -msgstr "Avahi (Zeroconf) 'yi etkinleştir" +msgstr "Avahi (Zeroconf) Hizmetini Etkinleştir" msgctxt "#32207" msgid "Avahi" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "İşlem sırasında bir hata oluştu[CR]SSH şifresi değişmedi." +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "4 basamaklı yeni bir PIN girin" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "PIN'i yeniden girin" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "Hata - PIN kodları eşleşmedi!" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "@DISTRONAME@ Ayarları PIN kilidi ayarlanmadı.[CR][CR]Lütfen tekrar deneyin." + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "@DISTRONAME@ Ayarları PIN kilidi ayarı." + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "Hata - PIN kodu 4 basamaklı değil!" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "Hatalı PIN!" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "deneme hakkı kaldı." + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "PIN'i çok fazla kez yanlış girdiniz.[CR][CR]Tekrar denemeden önce 5 dakika beklemeniz gerekecek." + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "@DISTRONAME@ Ayarları Kilitli!" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "@DISTRONAME@ 'e hoşgeldiniz" @@ -747,11 +878,11 @@ msgid "" "TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " "needs to be connected the Internet.[CR][CR]An Internet connection is also " "required for @DISTRONAME@ to automatically update itself." -msgstr "Filmleriniz ve TV şovlarınız için fonlar, afişler ve küçük resimler indirmek ve çevrimiçi içeriklerinizi YouTube gibi sitelerden yayınlamak için @DISTRONAME@ İnternet'e bağlı olmalıdır.[CR][CR]@DISTRONAME@ için de bir İnternet bağlantısı gerekir. kendisini otomatik olarak güncellemek için." +msgstr "Filmleriniz ve TV programlarınız için fonlar, afişler ve küçük resimler indirmek ve çevrimiçi içeriklerinizi YouTube gibi sitelerden yayınlamak için @DISTRONAME@ İnternet'e bağlı olmalıdır.[CR][CR]@DISTRONAME@ için de bir İnternet bağlantısı gerekir. kendisini otomatik olarak güncellemek için." msgctxt "#32307" msgid "Previous" -msgstr "" +msgstr "Önceki" msgctxt "#32308" msgid "Hostname:" @@ -759,11 +890,11 @@ msgstr "Sunucu adı:" msgctxt "#32309" msgid "The following Networks are currently available:" -msgstr "Aşağıdaki Şebekeler şu anda mevcuttur:" +msgstr "Aşağıdaki ağlar şu anda kullanılabilir:" msgctxt "#32310" msgid "Language:" -msgstr "" +msgstr "Dil:" msgctxt "#32311" msgid "Sharing and Remote Access" @@ -805,7 +936,7 @@ msgid "" " @DISTRONAME@ as much as we've enjoyed building it. If you need any more " "help, you can find links to our support forum along with latest news at our " "website." -msgstr "" +msgstr "@DISTRONAME@ kurulumunuz şimdi tamamlandı ve medya kitaplıklarınızı kurabileceğiniz Kodi'ye girmek üzeresiniz. Bununla ilgili yardım almak için wiki.kodi.tv adresinde mevcut bir rehber vardır.[CR][CR]@DISTRONAME@ yanlızca boş zamanlarını bu işe ayıran özel bir geliştirici ekibi tarafından geliştirilmiştir. Gönüllü bir proje olarak bile, internet bant genişliğimiz ve geliştirme kaynaklarımız için yine de ödeme yapmak zorundayız, bu yüzden @DISTRONAME@ yazılımını yararlı bulursanız, herhangi bir miktarda yapacağınız bağışı her zaman takdir ederiz.[CR][CR]Umarız @DISTRONAME@ yazılımını yapmaktan zevk aldığımız kadar sizde kullanmaktan zevk alırsınız. Daha fazla yardıma ihtiyacınız olursa, web sitemizdeki son haberlerle birlikte destek forumumuzda birçok bağlantı bulabilirsiniz." msgctxt "#32319" msgid "Cron" @@ -813,7 +944,7 @@ msgstr "Cron" msgctxt "#32320" msgid "Enable Cron" -msgstr "Cron'u aktifleştir" +msgstr "Cron Hizmetini Etkinleştir" msgctxt "#32323" msgid "Reset to Defaults" @@ -875,7 +1006,7 @@ msgstr "Cihazınızda aşağıdaki anahtarı girin." msgctxt "#32344" msgid "Enable Bluetooth" -msgstr "Bluetooth'u aktifleştir" +msgstr "Bluetooth Hizmetini Etkinleştir" msgctxt "#32346" msgid "Bluetooth is disabled" @@ -973,7 +1104,7 @@ msgstr "Dosyalar oynatılsın mı?" msgctxt "#32384" msgid "OBEX Enabled" -msgstr "OBEX aktif" +msgstr "OBEX Etkin" msgctxt "#32385" msgid "OBEX Upload Folder" @@ -989,7 +1120,7 @@ msgstr "Klavye Düzeni Varyantı #2" msgctxt "#32388" msgid "Enable Standby" -msgstr "Bekleme Modunu Aktifleştir" +msgstr "Bekleme Modunu Etkinleştir" msgctxt "#32389" msgid "Disable Standby" @@ -1035,3 +1166,7 @@ msgstr "Ana sayfa" msgctxt "#32399" msgid "Public" msgstr "Genel" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.uk_ua/strings.po b/language/resource.language.uk_ua/strings.po index 516b4c78..c08b9e5a 100644 --- a/language/resource.language.uk_ua/strings.po +++ b/language/resource.language.uk_ua/strings.po @@ -139,15 +139,14 @@ msgid "" msgstr "" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" +msgid "Set to ON to enable the Bluetooth service" msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" +"/storage/backup/" msgstr "" msgctxt "#723" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "Служби" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "" msgctxt "#32013" -msgid "Updates" -msgstr "Оновлення" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "З'єднання" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "Про..." @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "" @@ -1035,3 +1166,7 @@ msgstr "" msgctxt "#32399" msgid "Public" msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.zh_cn/strings.po b/language/resource.language.zh_cn/strings.po index 0f8e6bc2..caa076fa 100644 --- a/language/resource.language.zh_cn/strings.po +++ b/language/resource.language.zh_cn/strings.po @@ -139,16 +139,15 @@ msgid "" msgstr "将启动配置文件从/flash,kodi_crash.log,内核日志和Samba配置发送到http://ix.io,并显示短URL" msgctxt "#720" -msgid "" -"Set to ON and Bluetooth devices will be disabled during power-saving modes" -msgstr "设置为开启,蓝牙设备将在省电模式下被禁用" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" msgctxt "#722" msgid "" "Create a tar archive containing all @DISTRONAME@ and Kodi configuration " "settings, databases and thumbnail content. Backup files will be stored in " -"/storage/backups" -msgstr "创建一个包含所有@DISTRONAME@和Kodi配置设置,数据库和缩略图内容的tar归档文件。 备份文件将存储在/storage/backups中" +"/storage/backup/" +msgstr "创建一个包含所有@DISTRONAME@和Kodi配置设置,数据库和缩略图内容的tar归档文件。 备份文件将存储在/storage/backup/中" msgctxt "#723" msgid "" @@ -256,6 +255,21 @@ msgctxt "#746" msgid "Set the password for SSH" msgstr "为SSH设定密码" +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + msgctxt "#750" msgid "750" msgstr "750" @@ -331,6 +345,13 @@ msgid "" "opting-out of stats reporting, disable this option." msgstr "检查新版本会将已安装的分发,项目,CPU Arch和版本提交给更新服务器。此数据还用于报告项目的基本统计信息。要在选择退出统计信息报告时继续检查更新,请禁用此选项。" +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + msgctxt "#32001" msgid "Services" msgstr "服务" @@ -360,8 +381,8 @@ msgid "Select Action" msgstr "选择操作" msgctxt "#32013" -msgid "Updates" -msgstr "升级" +msgid "OS Updates" +msgstr "" msgctxt "#32014" msgid "Automatic Updates" @@ -395,6 +416,44 @@ msgctxt "#32021" msgid "Submit Statistics" msgstr "提交系统统计信息" +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + msgctxt "#32100" msgid "Connections" msgstr "连接" @@ -603,6 +662,18 @@ msgctxt "#32191" msgid "Invalid URL" msgstr "不可用的URL" +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + msgctxt "#32196" msgid "About" msgstr "关于" @@ -709,6 +780,66 @@ msgctxt "#32225" msgid "There was an error during the process.[CR]SSH password is unchanged." msgstr "出现错误[CR]SSH密码尚未更改" +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + msgctxt "#32300" msgid "Welcome to @DISTRONAME@" msgstr "欢迎来到@DISTRONAME@" @@ -1035,3 +1166,7 @@ msgstr "Home" msgctxt "#32399" msgid "Public" msgstr "公共" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr "" diff --git a/language/resource.language.zh_tw/strings.po b/language/resource.language.zh_tw/strings.po new file mode 100644 index 00000000..5addeb56 --- /dev/null +++ b/language/resource.language.zh_tw/strings.po @@ -0,0 +1,1172 @@ +# Kodi Media Center language file +# Addon Name: @DISTRONAME@ Configuration +# Addon id: service.libreelec.settings +# Addon Provider: LibreELEC +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgctxt "#600" +msgid "@DISTRONAME@ Settings" +msgstr "" + +msgctxt "#601" +msgid "Interface" +msgstr "" + +msgctxt "#602" +msgid "Address" +msgstr "" + +msgctxt "#603" +msgid "Type" +msgstr "" + +msgctxt "#604" +msgid "State" +msgstr "" + +msgctxt "#605" +msgid "Address" +msgstr "" + +msgctxt "#606" +msgid "Distribution: " +msgstr "" + +msgctxt "#607" +msgid "Version: " +msgstr "" + +msgctxt "#608" +msgid "Architecture: " +msgstr "" + +msgctxt "#609" +msgid "" +"LibreELEC is created by a global team of Linux and Kodi enthusiasts who " +"contribute time and effort to manage the project, write code, and provide " +"support. We have fun making it. We hope you have fun using it!" +msgstr "" + +msgctxt "#610" +msgid "" +"[B]Support[/B] is provided via our " +"forum:[CR]https://forum.libreelec.tv[CR][CR][B]Documentation[/B] can be read" +" in our wiki:[CR]https://libreelec.wiki[CR][CR][B]Code[/B] can be found on " +"GitHub:[CR]https://github.com/LibreELEC[CR][CR][B]Donations[/B] towards " +"project expenses are accepted via PayPal:[CR]donations@libreelec.tv" +msgstr "" + +msgctxt "#700" +msgid "" +"Configure a hostname, keyboard type, perform a reset, update, or backups and" +" restores" +msgstr "" + +msgctxt "#701" +msgid "Configure network startup options, NTP and VPNs" +msgstr "" + +msgctxt "#702" +msgid "" +"Manage the Ethernet, Wireless and VPN connections available to the system" +msgstr "" + +msgctxt "#703" +msgid "Configure system services like Samba, SSH, Cron, Avahi and Syslog" +msgstr "" + +msgctxt "#704" +msgid "Configure and pair Bluetooth devices" +msgstr "" + +msgctxt "#705" +msgid "" +"Useful information like version and architecture details, support and " +"documentation links, and how to donate and support the project." +msgstr "" + +msgctxt "#707" +msgid "Configure updates" +msgstr "" + +msgctxt "#710" +msgid "" +"Configure the Hostname of your @DISTRONAME@ system. This will be used for " +"the HTPC \\\\hostname in Windows and SMB server name in the Mac OS Finder" +msgstr "" + +msgctxt "#711" +msgid "Configure the 1st keyboard software layout" +msgstr "" + +msgctxt "#712" +msgid "Configure the 2nd keyboard software layout" +msgstr "" + +msgctxt "#713" +msgid "Configure the physical keyboard type" +msgstr "" + +msgctxt "#714" +msgid "" +"@DISTRONAME@ can be configured for automatic or manual updates. Automatic " +"updates are available on stable releases and stable release candidates. " +"Automatic update self-disables on beta and development builds" +msgstr "" + +msgctxt "#715" +msgid "" +"Set to ON and an on-screen notification will be displayed when a new update " +"is available" +msgstr "" + +msgctxt "#718" +msgid "" +"Send boot config files from /flash, kodi.log, kernel log and Samba configs " +"to http://ix.io, and display the short URL" +msgstr "" + +msgctxt "#719" +msgid "" +"Send boot config files from /flash, kodi_crash.log, kernel log and Samba " +"configs to http://ix.io, and display the short URL" +msgstr "" + +msgctxt "#720" +msgid "Set to ON to enable the Bluetooth service" +msgstr "" + +msgctxt "#722" +msgid "" +"Create a tar archive containing all @DISTRONAME@ and Kodi configuration " +"settings, databases and thumbnail content. Backup files will be stored in " +"/storage/backup/" +msgstr "" + +msgctxt "#723" +msgid "" +"Restore a tar archive backup previously created using the backup option " +"above" +msgstr "" + +msgctxt "#724" +msgid "" +"[COLOR FF00FF00]SOFT RESET[/COLOR]\n" +"Permanently reset @DISTRONAME@ configuration to defaults (resets also Kodi to default including your library. your media - music/videos/etc are not touched)" +msgstr "" + +msgctxt "#725" +msgid "" +"[COLOR FFFF0000]HARD RESET[/COLOR]\n" +"Permanently reset @DISTRONAME@ and Kodi configuration to defaults (everything in your storage partition will be deleted)" +msgstr "" + +msgctxt "#726" +msgid "Enable or disable support for Wireless (WLAN) networks" +msgstr "" + +msgctxt "#727" +msgid "" +"Enable a 'tethered' Wireless Access Point. This requires your wireless card " +"(and driver) to support bridging and access point mode. Not all cards are " +"capable." +msgstr "" + +msgctxt "#728" +msgid "Configure the Access Point SSID" +msgstr "" + +msgctxt "#729" +msgid "Configure the Access Point Passphrase" +msgstr "" + +msgctxt "#730" +msgid "Enable or disable support for Wired (Ethernet) networks" +msgstr "" + +msgctxt "#732" +msgid "Configure the 1st time (NTP) server" +msgstr "" + +msgctxt "#733" +msgid "Configure the 2nd time (NTP) server" +msgstr "" + +msgctxt "#734" +msgid "Configure the 3rd time (NTP) server" +msgstr "" + +msgctxt "#736" +msgid "" +"Set to ON to delay Kodi startup until the network is available. Use this if " +"the OS is booting into Kodi before the network is up and central MySQL " +"databases are accessible." +msgstr "" + +msgctxt "#737" +msgid "Time in seconds to wait for an established network connection." +msgstr "" + +msgctxt "#738" +msgid "Set to ON to enable the embedded Samba (SMB) filesharing service" +msgstr "" + +msgctxt "#739" +msgid "" +"Set to ON to require username/password access to local Samba fileshares" +msgstr "" + +msgctxt "#740" +msgid "Set the username for Samba sharing" +msgstr "" + +msgctxt "#741" +msgid "Set the password for Samba sharing" +msgstr "" + +msgctxt "#742" +msgid "" +"Set to ON to enable the embedded SSH server. The SSH console can be accessed" +" with username 'root' and password '@ROOT_PASSWORD@'." +msgstr "" + +msgctxt "#743" +msgid "" +"Set to ON if you have copied private SSH keys to your HTPC and would like to" +" improve security by disabling SSH username and password authentication." +msgstr "" + +msgctxt "#744" +msgid "" +"Set to ON to enable the Avahi (Zeroconf/Bonjour) network discovery service" +msgstr "" + +msgctxt "#745" +msgid "Set to ON to enable the cron daemon" +msgstr "" + +msgctxt "#746" +msgid "Set the password for SSH" +msgstr "" + +msgctxt "#747" +msgid "Enable a PIN for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#748" +msgid "Change the PIN Lock for @DISTRONAME@ Settings access" +msgstr "" + +msgctxt "#749" +msgid "" +"Overrride the Wireless Regulatory Domain so radio properties (channels and " +"transmit power) comply with local laws or match the country configuration of" +" your router." +msgstr "" + +msgctxt "#750" +msgid "750" +msgstr "" + +msgctxt "#751" +msgid "" +"With OBEX filetransfer you can send files, for example movies or pictures " +"over bluetooth to @DISTRONAME@." +msgstr "" + +msgctxt "#752" +msgid "" +"Here you can set the folder location where OBEX file transfer should store " +"incoming files" +msgstr "" + +msgctxt "#753" +msgid "Configure the 1st keyboard software Variant" +msgstr "" + +msgctxt "#754" +msgid "Configure the 2nd keyboard software Variant" +msgstr "" + +msgctxt "#755" +msgid "Auto share external drives / partitions" +msgstr "" + +msgctxt "#756" +msgid "" +"Disable older SMB protocols by specifying the minimum supported protocol." +msgstr "" + +msgctxt "#757" +msgid "" +"Disable more recent SMB protocols for backward compatability with legacy " +"clients." +msgstr "" + +msgctxt "#758" +msgid "NetBIOS group to which the server belongs. Default is WORKGROUP." +msgstr "" + +msgctxt "#760" +msgid "Select an update channel" +msgstr "" + +msgctxt "#761" +msgid "Enable to allow entering a custom update url" +msgstr "" + +msgctxt "#762" +msgid "Enter a custom update url (url should be the root of the update files)" +msgstr "" + +msgctxt "#770" +msgid "Select an available version" +msgstr "" + +msgctxt "#771" +msgid "" +"The firewall blocks unwanted network traffic. Home (default) allows traffic " +"from private network ranges (192.168.x.x, 172.16.x.x and 10.x.x.x) only. " +"Public blocks all traffic from all networks. Custom uses rules in " +"/storage/.config/iptables. Off disables the firewall." +msgstr "" + +msgctxt "#772" +msgid "" +"Checking for a new version will submit the installed Distribution, Project, " +"CPU Arch and Version to the update server. This data is also used to report " +"basic statistics for the project. To continue checking for updates while " +"opting-out of stats reporting, disable this option." +msgstr "" + +msgctxt "#773" +msgid "" +"Set the idle timeout (in minutes) before devices will be disconnected " +"(defaults to 0 for no timeout). Applies to devices where \"Enable Standby\" " +"has been activated in the LibreELEC device connection context menu." +msgstr "" + +msgctxt "#32001" +msgid "Services" +msgstr "" + +msgctxt "#32002" +msgid "System" +msgstr "" + +msgctxt "#32003" +msgid "Interface" +msgstr "" + +msgctxt "#32005" +msgid "Updates" +msgstr "" + +msgctxt "#32009" +msgid "Keyboard" +msgstr "" + +msgctxt "#32010" +msgid "Keyboard Layout" +msgstr "" + +msgctxt "#32012" +msgid "Select Action" +msgstr "" + +msgctxt "#32013" +msgid "OS Updates" +msgstr "" + +msgctxt "#32014" +msgid "Automatic Updates" +msgstr "" + +msgctxt "#32015" +msgid "Update Channel" +msgstr "" + +msgctxt "#32016" +msgid "Show Custom Channels" +msgstr "" + +msgctxt "#32017" +msgid " - Custom Channel 1" +msgstr "" + +msgctxt "#32018" +msgid " - Custom Channel 2" +msgstr "" + +msgctxt "#32019" +msgid " - Custom Channel 3" +msgstr "" + +msgctxt "#32020" +msgid "Available Versions" +msgstr "" + +msgctxt "#32021" +msgid "Submit Statistics" +msgstr "" + +msgctxt "#32022" +msgid "Firmware Updates" +msgstr "" + +msgctxt "#32023" +msgid "Updating will occur once the system is rebooted." +msgstr "" + +msgctxt "#32024" +msgid "Bootloader EEPROM" +msgstr "" + +msgctxt "#32025" +msgid "" +"Update the Raspberry Pi Bootloader EEPROM to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32026" +msgid "VIA USB3 Firmware" +msgstr "" + +msgctxt "#32027" +msgid "" +"Update the Raspberry Pi VIA USB3 firmware to the latest version. This option" +" is automatically disabled after rebooting. Reboot the system to apply the " +"update." +msgstr "" + +msgctxt "#32028" +msgid "update from %s to %s" +msgstr "" + +msgctxt "#32029" +msgid "up to date: %s" +msgstr "" + +msgctxt "#32100" +msgid "Connections" +msgstr "" + +msgctxt "#32101" +msgid "Network" +msgstr "" + +msgctxt "#32102" +msgid "Wireless Networks" +msgstr "" + +msgctxt "#32103" +msgid "Wired Networks" +msgstr "" + +msgctxt "#32105" +msgid "Active" +msgstr "" + +msgctxt "#32106" +msgid "Username" +msgstr "" + +msgctxt "#32107" +msgid "Passphrase" +msgstr "" + +msgctxt "#32108" +msgid "Enable 'tethered' Wireless Access Point" +msgstr "" + +msgctxt "#32109" +msgid "Connect Automatically" +msgstr "" + +msgctxt "#32110" +msgid "Connection" +msgstr "" + +msgctxt "#32111" +msgid "IPv4" +msgstr "" + +msgctxt "#32112" +msgid "IPv6" +msgstr "" + +msgctxt "#32113" +msgid "IP Address Method" +msgstr "" + +msgctxt "#32114" +msgid "IP Address" +msgstr "" + +msgctxt "#32115" +msgid "Subnet Mask" +msgstr "" + +msgctxt "#32116" +msgid "Default Gateway" +msgstr "" + +msgctxt "#32117" +msgid "Prefix Length" +msgstr "" + +msgctxt "#32118" +msgid "Privacy" +msgstr "" + +msgctxt "#32119" +msgid "DNS Servers" +msgstr "" + +msgctxt "#32120" +msgid "Nameserver #1" +msgstr "" + +msgctxt "#32121" +msgid "Nameserver #2" +msgstr "" + +msgctxt "#32122" +msgid "Nameserver #3" +msgstr "" + +msgctxt "#32123" +msgid "NTP Servers" +msgstr "" + +msgctxt "#32124" +msgid "Timeserver #1" +msgstr "" + +msgctxt "#32125" +msgid "Timeserver #2" +msgstr "" + +msgctxt "#32126" +msgid "Timeserver #3" +msgstr "" + +msgctxt "#32127" +msgid "DNS Domains" +msgstr "" + +msgctxt "#32128" +msgid "Domain #1" +msgstr "" + +msgctxt "#32129" +msgid "Domain #2" +msgstr "" + +msgctxt "#32130" +msgid "Domain #3" +msgstr "" + +msgctxt "#32140" +msgid "Save" +msgstr "" + +msgctxt "#32141" +msgid "Delete" +msgstr "" + +msgctxt "#32142" +msgid "Refresh" +msgstr "" + +msgctxt "#32143" +msgid "Disconnect" +msgstr "" + +msgctxt "#32144" +msgid "Connect" +msgstr "" + +msgctxt "#32145" +msgid "Pair" +msgstr "" + +msgctxt "#32146" +msgid "Hidden Network Name" +msgstr "" + +msgctxt "#32147" +msgid "Wireless Network Passphrase" +msgstr "" + +msgctxt "#32148" +msgid "Wireless Network Username" +msgstr "" + +msgctxt "#32150" +msgid "Edit" +msgstr "" + +msgctxt "#32180" +msgid "Would you like to update @DISTRONAME@ now?" +msgstr "" + +msgctxt "#32181" +msgid "Filename" +msgstr "" + +msgctxt "#32182" +msgid "Download speed" +msgstr "" + +msgctxt "#32183" +msgid "Time remaining" +msgstr "" + +msgctxt "#32184" +msgid "Extract file" +msgstr "" + +msgctxt "#32185" +msgid "Extract speed" +msgstr "" + +msgctxt "#32186" +msgid "Initialize Archive File" +msgstr "" + +msgctxt "#32187" +msgid "New Version" +msgstr "" + +msgctxt "#32188" +msgid "Current Version" +msgstr "" + +msgctxt "#32189" +msgid "Identification" +msgstr "" + +msgctxt "#32190" +msgid "System Name" +msgstr "" + +msgctxt "#32191" +msgid "Invalid URL" +msgstr "" + +msgctxt "#32192" +msgid "PIN lock" +msgstr "" + +msgctxt "#32193" +msgid "Enable @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32194" +msgid "Change @DISTRONAME@ Settings PIN Lock" +msgstr "" + +msgctxt "#32196" +msgid "About" +msgstr "" + +msgctxt "#32198" +msgid "SSID" +msgstr "" + +msgctxt "#32200" +msgid "Samba" +msgstr "" + +msgctxt "#32201" +msgid "SSH" +msgstr "" + +msgctxt "#32202" +msgid "Use Samba Password Authentication" +msgstr "" + +msgctxt "#32203" +msgid "Disable SSH Password" +msgstr "" + +msgctxt "#32204" +msgid "Enable Samba" +msgstr "" + +msgctxt "#32205" +msgid "Enable SSH" +msgstr "" + +msgctxt "#32206" +msgid "Enable Avahi (Zeroconf)" +msgstr "" + +msgctxt "#32207" +msgid "Avahi" +msgstr "" + +msgctxt "#32208" +msgid "Hidden Wlan" +msgstr "" + +msgctxt "#32209" +msgid "SSH Password" +msgstr "" + +msgctxt "#32210" +msgid "" +"The default SSH password is widely known and considered " +"insecure.[CR][CR]Setting a personal password is recommended." +msgstr "" + +msgctxt "#32212" +msgid "Cancel" +msgstr "" + +msgctxt "#32213" +msgid "Keep Existing" +msgstr "" + +msgctxt "#32214" +msgid "Set Password" +msgstr "" + +msgctxt "#32215" +msgid "Workgroup name" +msgstr "" + +msgctxt "#32216" +msgid "Auto-Share External Drives" +msgstr "" + +msgctxt "#32217" +msgid "Minimum supported protocol" +msgstr "" + +msgctxt "#32218" +msgid "Maximum supported protocol" +msgstr "" + +msgctxt "#32220" +msgid "Bad password!" +msgstr "" + +msgctxt "#32221" +msgid "The entered password is too weak.[CR]SSH password is unchanged." +msgstr "" + +msgctxt "#32222" +msgid "Password changed!" +msgstr "" + +msgctxt "#32223" +msgid "The SSH password has been successfully changed." +msgstr "" + +msgctxt "#32224" +msgid "Unknown error!" +msgstr "" + +msgctxt "#32225" +msgid "There was an error during the process.[CR]SSH password is unchanged." +msgstr "" + +msgctxt "#32226" +msgid "Enter new 4 digit PIN" +msgstr "" + +msgctxt "#32227" +msgid "Re-enter PIN" +msgstr "" + +msgctxt "#32228" +msgid "Error - PIN codes did not match!" +msgstr "" + +msgctxt "#32229" +msgid "@DISTRONAME@ Settings PIN lock not set.[CR][CR]Please try again." +msgstr "" + +msgctxt "#32230" +msgid "@DISTRONAME@ Settings PIN lock set." +msgstr "" + +msgctxt "#32231" +msgid "Your @DISTRONAME@ Settings PIN lock has been set to:" +msgstr "" + +msgctxt "#32232" +msgid "Error - PIN code not 4 digits!" +msgstr "" + +msgctxt "#32233" +msgid "@DISTRONAME@ Settings Locked[CR]Enter 4 digit PIN" +msgstr "" + +msgctxt "#32234" +msgid "Incorrect PIN!" +msgstr "" + +msgctxt "#32235" +msgid " attempts remaining." +msgstr "" + +msgctxt "#32236" +msgid "" +"You have entered an incorrect PIN too many times.[CR][CR]You will need to " +"wait 5 minutes before trying again." +msgstr "" + +msgctxt "#32237" +msgid "@DISTRONAME@ Settings Locked!" +msgstr "" + +msgctxt "#32238" +msgid "" +"Time remaining before PIN can be entered: %02d:%02d[CR][CR]Too many previous" +" failed attempts." +msgstr "" + +msgctxt "#32240" +msgid "Wireless Regulatory Domain" +msgstr "" + +msgctxt "#32300" +msgid "Welcome to @DISTRONAME@" +msgstr "" + +msgctxt "#32301" +msgid "Welcome" +msgstr "" + +msgctxt "#32302" +msgid "" +"This wizard will guide you through the process of setting up your new " +"@DISTRONAME@ installation - setting your location, timezone and connecting " +"you to the internet.[CR][CR]These settings can be changed later by " +"navigating to Programs > @DISTRONAME@ Settings." +msgstr "" + +msgctxt "#32303" +msgid "Next" +msgstr "" + +msgctxt "#32304" +msgid "" +"To be identified easily on the network, your new @DISTRONAME@ machine needs " +"a name.[CR][CR]Try to choose something meaningful - like the room it's in - " +"so you'll know what it is when you see it on the network.[CR][CR]This name " +"is used when configuring network services, like file sharing using samba." +msgstr "" + +msgctxt "#32305" +msgid "Networking" +msgstr "" + +msgctxt "#32306" +msgid "" +"In order to download backdrops, banners and thumbnails for your movies and " +"TV shows and to stream online content from sites like YouTube, @DISTRONAME@ " +"needs to be connected the Internet.[CR][CR]An Internet connection is also " +"required for @DISTRONAME@ to automatically update itself." +msgstr "" + +msgctxt "#32307" +msgid "Previous" +msgstr "" + +msgctxt "#32308" +msgid "Hostname:" +msgstr "" + +msgctxt "#32309" +msgid "The following Networks are currently available:" +msgstr "" + +msgctxt "#32310" +msgid "Language:" +msgstr "" + +msgctxt "#32311" +msgid "Sharing and Remote Access" +msgstr "" + +msgctxt "#32312" +msgid "" +"@DISTRONAME@ also supports SSH for remote access. This is for advanced users" +" who wish to interact with @DISTRONAME@'s underlying operating system. The " +"default user is [COLOR blue]root[/COLOR] and the default password is [COLOR " +"blue]@ROOT_PASSWORD@[/COLOR]." +msgstr "" + +msgctxt "#32313" +msgid "" +"In order to share your files between your computers @DISTRONAME@ has " +"incorporated a samba server. This samba server can be integrated into your " +"local network by accessing it in a familiar way with Finder or Windows " +"Explorer." +msgstr "" + +msgctxt "#32316" +msgid "Configure Services:" +msgstr "" + +msgctxt "#32317" +msgid "Thank you" +msgstr "" + +msgctxt "#32318" +msgid "" +"Your @DISTRONAME@ installation is now complete and you are about to enter " +"Kodi where you can set up your media libraries. For help with this, there is" +" a guide available at wiki.kodi.tv[CR][CR]@DISTRONAME@ is developed by a " +"dedicated team of developers who work purely in their spare time. Even as a " +"volunteer project, we still have to pay for our internet bandwidth and " +"development resources so if you find @DISTRONAME@ useful we will always " +"appreciate a donation of any amount.[CR][CR]Finally, we hope you enjoy using" +" @DISTRONAME@ as much as we've enjoyed building it. If you need any more " +"help, you can find links to our support forum along with latest news at our " +"website." +msgstr "" + +msgctxt "#32319" +msgid "Cron" +msgstr "" + +msgctxt "#32320" +msgid "Enable Cron" +msgstr "" + +msgctxt "#32323" +msgid "Reset to Defaults" +msgstr "" + +msgctxt "#32324" +msgid "Reset System Settings to defaults" +msgstr "" + +msgctxt "#32325" +msgid "Reset @DISTRONAME@ to defaults" +msgstr "" + +msgctxt "#32326" +msgid "Are you sure?" +msgstr "" + +msgctxt "#32328" +msgid "The system must reboot." +msgstr "" + +msgctxt "#32329" +msgid "Rebooting in %d seconds" +msgstr "" + +msgctxt "#32330" +msgid "Keyboard Type" +msgstr "" + +msgctxt "#32331" +msgid "Bluetooth" +msgstr "" + +msgctxt "#32333" +msgid "Connected: " +msgstr "" + +msgctxt "#32334" +msgid "Yes" +msgstr "" + +msgctxt "#32335" +msgid "No" +msgstr "" + +msgctxt "#32338" +msgid "No Bluetooth adapter found." +msgstr "" + +msgctxt "#32339" +msgid "" +"No Bluetooth device found. Please put your Bluetooth device into discovery " +"mode[CR]and start the scan" +msgstr "" + +msgctxt "#32343" +msgid "Enter the following Key on your Device." +msgstr "" + +msgctxt "#32344" +msgid "Enable Bluetooth" +msgstr "" + +msgctxt "#32346" +msgid "Bluetooth is disabled" +msgstr "" + +msgctxt "#32358" +msgid "Trust and Connect" +msgstr "" + +msgctxt "#32362" +msgid "Check for updates now:" +msgstr "" + +msgctxt "#32363" +msgid "@DISTRONAME@" +msgstr "" + +msgctxt "#32364" +msgid "Update available" +msgstr "" + +msgctxt "#32365" +msgid "Show Update Notifications" +msgstr "" + +msgctxt "#32366" +msgid "Update Download Completed" +msgstr "" + +msgctxt "#32367" +msgid "Update Extract Complete" +msgstr "" + +msgctxt "#32368" +msgid "Advanced Network Settings" +msgstr "" + +msgctxt "#32369" +msgid "Wait for network before starting Kodi" +msgstr "" + +msgctxt "#32370" +msgid "Maximum Wait Time (Sec.)" +msgstr "" + +msgctxt "#32371" +msgid "Backup" +msgstr "" + +msgctxt "#32372" +msgid "Create System and Kodi Backup" +msgstr "" + +msgctxt "#32373" +msgid "Restore Backup" +msgstr "" + +msgctxt "#32375" +msgid "Backup Progress" +msgstr "" + +msgctxt "#32376" +msgid "Submit Log" +msgstr "" + +msgctxt "#32377" +msgid "Upload latest Kodi log and configs, and view the short URL" +msgstr "" + +msgctxt "#32378" +msgid "Upload latest Kodi crash log and configs, and view the short URL" +msgstr "" + +msgctxt "#32379" +msgid "There is not enough free storage space to continue!" +msgstr "" + +msgctxt "#32380" +msgid "" +"Restoring system settings requires a reboot. Are you sure you want to " +"restore?" +msgstr "" + +msgctxt "#32381" +msgid "Accept incoming Bluetooth Filetransfer ?" +msgstr "" + +msgctxt "#32382" +msgid "Speed" +msgstr "" + +msgctxt "#32383" +msgid "Play Files ?" +msgstr "" + +msgctxt "#32384" +msgid "OBEX Enabled" +msgstr "" + +msgctxt "#32385" +msgid "OBEX Upload Folder" +msgstr "" + +msgctxt "#32386" +msgid "Keyboard Layout Variant #1" +msgstr "" + +msgctxt "#32387" +msgid "Keyboard Layout Variant #2" +msgstr "" + +msgctxt "#32388" +msgid "Enable Standby" +msgstr "" + +msgctxt "#32389" +msgid "Disable Standby" +msgstr "" + +msgctxt "#32390" +msgid "Settings addon is not yet ready, please try again later." +msgstr "" + +msgctxt "#32393" +msgid "** SAFE MODE! ** SAFE MODE! ** SAFE MODE! **" +msgstr "" + +msgctxt "#32394" +msgid "" +"@DISTRONAME@ has temporarily started in safe mode due to repeated Kodi " +"crashes.[CR][CR]You may now investigate the cause of the crashes by enabling" +" ssh or Samba.[CR][CR]Your original Kodi installation can be accessed via " +"\"/storage/.kodi.FAILED\" and the Samba \"Kodi-Failed\" " +"share.[CR][CR]Rebooting will return to your original Kodi " +"installation.[CR][CR]Go to https://forum.libreelec.tv if you require further" +" assistance. When posting to the forum include the link to your crash log " +"which can be viewed by clicking the crash log option in Settings > LibreELEC" +" > System > Submit Log." +msgstr "" + +msgctxt "#32395" +msgid "Firewall" +msgstr "" + +msgctxt "#32396" +msgid "Custom" +msgstr "" + +msgctxt "#32397" +msgid "Off" +msgstr "" + +msgctxt "#32398" +msgid "Home" +msgstr "" + +msgctxt "#32399" +msgid "Public" +msgstr "" + +msgctxt "#32400" +msgid "Idle Timeout" +msgstr ""