diff --git a/CONTROL/control b/CONTROL/control index 8488fc21..85ed5807 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,5 +1,5 @@ Package: enigma2-plugin-extensions-linuxsat-panel -Version: 3.0.5 +Version: 3.0.6 Description: addons panel Section: extra Priority: optional diff --git a/README.md b/README.md index c1eff867..bfe34f36 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- Version + Version @@ -54,7 +54,16 @@ ## 🗓️ Version History -### v3.0.5 (Current) +### v3.0.6 (Current) +- Security: removed --no-check-certificate from every wget install/update call +- Hardened lsConsole and checkskin temp files against local symlink attacks +- Fixed LCN scan (Order LCN Bouquet) always logging a false error even on success +- Fixed possible crash/misfile reading lcndb entries with an unexpected mode +- Fixed commits cache never actually loading (str repr vs JSON mismatch) +- Fixed crash risk in RTL/Arabic font loading (add_skin_fonts) +- Removed unused translate_utils.py and duplicate code + +### v3.0.5 - Added Commit History viewer (INFO button -> Commit History) - LSinfo now supports 3 modes: info/about/commits - Commit list shows date, author, message and hash diff --git a/installer.sh b/installer.sh index 18d7c661..952ab31b 100644 --- a/installer.sh +++ b/installer.sh @@ -1,7 +1,7 @@ #!/bin/bash -version='3.0.5' -changelog="\n--Added Commit History viewer (INFO button -> Commit History)\n--LSinfo now supports 3 modes: info/about/commits\n--Commit list shows date, author, message and hash\n--Added cache system for commits (saves to commits_cache.json)\n--Auto-refresh cache every 24 hours\n--Rate limit handling with fallback to cached data\n--Updated info.txt with clean formatting (no special chars)\n--Fixed AsyncMixin inheritance for LSinfo\n--Fixed console output for script execution (removed redirections)\n--Updated README.md to v3.0.5" +version='3.0.6' +changelog="\n--Security: removed --no-check-certificate from every wget install/update call\n--Hardened lsConsole and checkskin temp files against local symlink attacks\n--Fixed LCN scan (Order LCN Bouquet) always logging a false error\n--Fixed possible crash reading lcndb/service data with an unexpected mode\n--Fixed commits cache never actually loading (str repr vs JSON mismatch)\n--Fixed crash risk in RTL/Arabic font loading (add_skin_fonts)\n--Removed unused translate_utils.py and duplicate code\n--Updated README.md to v3.0.6" TMPPATH=/tmp/LinuxsatPanel-install FILEPATH=/tmp/LinuxsatPanel-main.tar.gz @@ -87,7 +87,7 @@ install_pkg() { install_pkg "$Packagerequests" echo "Downloading LinuxsatPanel..." -wget --no-check-certificate 'https://github.com/Belfagor2005/LinuxsatPanel/archive/refs/heads/main.tar.gz' -O "$FILEPATH" +wget 'https://github.com/Belfagor2005/LinuxsatPanel/archive/refs/heads/main.tar.gz' -O "$FILEPATH" if [ $? -ne 0 ]; then echo "Failed to download LinuxsatPanel package!" cleanup diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/Lcn.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/Lcn.py index 172e9183..dd9bc8f8 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/Lcn.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/Lcn.py @@ -193,6 +193,9 @@ def readE2Services(self, serviceType): refstr = '%s ORDER BY name' % (self.service_types_tv) elif serviceType == "RADIO": refstr = '%s ORDER BY name' % (self.service_types_radio) + else: + print("Unknown serviceType '%s', skipping." % serviceType) + return ref = eServiceReference(refstr) serviceHandler = eServiceCenter.getInstance() servicelist = serviceHandler.list(ref) diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/plugin.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/plugin.py index d18a9ed5..ab674ae3 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/plugin.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/LCNScanner/plugin.py @@ -257,6 +257,11 @@ def matchLCNsAndServices(mode, lcndb, services, duplicate, renumbers): elif data[self.LCNS_MEDIUM] in ("A", "T"): lcnCache = terrestrialCache serviceLCNs = terrestrialLCNs + else: + print( + "[LCNScanner] Warning: Unknown medium '{}' for service '{}', skipping!".format( + data[self.LCNS_MEDIUM], data[self.LCNS_SERVICEREFERENCE])) + continue if service in services: if lcn in lcnCache: diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/__init__.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/__init__.py index b78206a0..7e42de80 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/__init__.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/__init__.py @@ -35,7 +35,7 @@ __email__ = "ekekaz@gmail.com" __copyright__ = 'Copyright (c) 2024 Lululla' __license__ = "GPL-v2" -__version__ = "3.0.5" +__version__ = "3.0.6" def check_and_install_requests(): @@ -75,10 +75,6 @@ def check_and_install_requests(): PluginLanguagePath = 'Extensions/LinuxsatPanel/locale' plugin_path = dirname(sys.modules[__name__].__file__) AgentRequest = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.3' -# used by translate_utils -DEBUG = False -HEADERS = {"User-Agent": AgentRequest} -SYSTEM_DIR = plugin_path infourl = 'https://raw.githubusercontent.com/Belfagor2005/upload/main/fill/info.txt' abouturl = 'https://raw.githubusercontent.com/Belfagor2005/upload/main/fill/about.txt' xmlurl = 'https://raw.githubusercontent.com/Belfagor2005/upload/main/fill/addons_2024.xml' @@ -506,6 +502,11 @@ def add_skin_fonts(): from enigma import addFont FNTPath = join(plugin_path, "fonts") font_config = { + RT_HALIGN_RIGHT: { + 'regular': 'DejaVuSans.otf', + 'medium': 'DejaVuSans.otf', + 'bold': 'DejaVuSans.otf' + }, RT_HALIGN_LEFT: { 'regular': 'ls-regular.ttf', 'medium': 'ls-medium.ttf', diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/NewOeSk.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/NewOeSk.py index 1f40b469..cba5c5f0 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/NewOeSk.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/NewOeSk.py @@ -61,16 +61,6 @@ def newOE(): return boo -patterns_to_remove = [ - r'scrollbarWidth="[^"]*"', - r'scrollbarSliderBorderWidth="[^"]*"', - r'textoffsets\s*="[^"]*"', - r'secondfont\s*="[^"]*"', - r'scrollbarBorderWidth="[^"]*"', - r'scrollbarForegroundColor="[^"]*"', - r'scrollbarBorderColor="[^"]*"' -] - # scrollbarMode=" patterns_to_remove = [ r'scrollbarWidth="[^"]*"', diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/checkskin.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/checkskin.py index 5b06a9b1..928a4b70 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/checkskin.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/addons/checkskin.py @@ -45,16 +45,21 @@ user_log = tmplog + 'my_debug.log' +def _safe_open(path, mode): + """Open a fixed, predictable /tmp path for write/append without + following a symlink another local user may have planted there.""" + flags = os.O_CREAT | os.O_WRONLY | os.O_NOFOLLOW + flags |= os.O_APPEND if 'a' in mode else os.O_TRUNC + fd = os.open(path, flags, 0o600) + if PY3: + return os.fdopen(fd, mode, encoding="utf-8") + return os.fdopen(fd, mode) + + # Funzione di logging compatibile con Python 2 e 3 try: - if PY3: - # Python 3: usa encoding - with open(user_log, "w", encoding="utf-8") as log_file: - log_file.write("Log Initialized\n") - else: - # Python 2: no encoding parameter - with open(user_log, "w") as log_file: - log_file.write("Log Initialized\n") + with _safe_open(user_log, "w") as log_file: + log_file.write("Log Initialized\n") except Exception as e: print("Error initializing log: %s" % str(e)) @@ -63,12 +68,11 @@ def checklogskin(data): try: print(colorstart + str(data) + colorend) # stampa sul terminale if PY3: - # Python 3 - with open(user_log, "a", encoding="utf-8") as log_file: + with _safe_open(user_log, "a") as log_file: log_file.write("\n:> " + str(data)) else: # Python 2 - with open(user_log, "a") as log_file: + with _safe_open(user_log, "a") as log_file: log_file.write("\n:> " + str(data).encode('utf-8')) except Exception as e: print("Error logging data: %s" % str(e)) @@ -202,11 +206,11 @@ def check_module_skin(): if user_skin: user_skin = "\n" + user_skin + "\n" if PY3: - with open(user_skin_file, "w", encoding="utf-8") as myFile: + with _safe_open(user_skin_file, "w") as myFile: checklogskin("write myFile %s" % user_skin_file) myFile.write(user_skin) else: - with open(user_skin_file, "w") as myFile: + with _safe_open(user_skin_file, "w") as myFile: checklogskin("write myFile %s" % user_skin_file) myFile.write(user_skin.encode('utf-8')) diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/lsConsole.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/lsConsole.py index 121d87d7..34d245f1 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/lsConsole.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/lsConsole.py @@ -15,6 +15,7 @@ import sys import codecs import os +import tempfile import gettext _ = gettext.gettext @@ -106,6 +107,7 @@ def __init__( self.container.dataAvail_conn = self.container.dataAvail.connect( self.dataAvail) self.onLayoutFinish.append(self.startRun) + self._scripts = [] def updateTitle(self): self.setTitle(self.newtitle) @@ -119,18 +121,34 @@ def execScript(self, cmd): directly. Writing the command to a real temp script and running that removes every one of those differences - a script file is always interpreted by /bin/sh exactly as written. + + The file is created with mkstemp (unique name, opened exclusively, + 0600 by default) rather than a predictable path, to avoid a local + symlink/race attack on the shared /tmp directory. """ - script = '/tmp/.lsconsole_%d.sh' % self.run try: - with codecs.open(script, 'w', encoding='utf-8') as f: - f.write('#!/bin/sh\n') - f.write(cmd + '\n') - os.chmod(script, 0o755) + fd, script = tempfile.mkstemp( + prefix='.lsconsole_', suffix='.sh', dir='/tmp') + content = '#!/bin/sh\n' + cmd + '\n' + if not isinstance(content, bytes): + content = content.encode('utf-8') + with os.fdopen(fd, 'wb') as f: + f.write(content) + os.chmod(script, 0o700) except (IOError, OSError) as e: print('[Console] cannot write run script:', e) return self.container.execute(cmd) # last-resort fallback + self._scripts.append(script) return self.container.execute('/bin/sh ' + script) + def _cleanupScripts(self): + while self._scripts: + script = self._scripts.pop() + try: + os.remove(script) + except OSError: + pass + def startRun(self): if self.showStartStopText: self['text'].setText(_('Execution progress\n\n')) @@ -204,6 +222,7 @@ def cancelCallback(self, ret=None): self.container.appClosed_conn = None self.container.dataAvail_conn = None self.container.kill() + self._cleanupScripts() self.close() def closeConsole(self): @@ -214,6 +233,7 @@ def closeConsole(self): except BaseException: self.container.appClosed_conn = None self.container.dataAvail_conn = None + self._cleanupScripts() self.close() else: self.show() diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/plugin.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/plugin.py index a162988b..c1488c13 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/plugin.py +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/plugin.py @@ -177,7 +177,7 @@ import io import time from datetime import datetime as dt -from json import loads +from json import loads, dumps from re import compile, search, DOTALL from shutil import copy2 from sys import version_info @@ -1283,7 +1283,7 @@ def _update_confirmed(self, answer=False): lsConsole, "Updating Linuxsat Panel...", cmdlist=[ - "wget -q --no-check-certificate " + + "wget -q " + b64decoder(installer_url) + " -O - | /bin/sh"], finishedCallback=self._update_finished, @@ -1566,7 +1566,7 @@ def __init__(self, session, name): self.urls, "Acherone Script Command", "acherone_script_command.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/acherone-script/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/acherone-script/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1574,7 +1574,7 @@ def __init__(self, session, name): self.urls, "Advanced Screeshots", "advanced_screeshots.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/AdvancedScreenshot/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/AdvancedScreenshot/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1582,7 +1582,7 @@ def __init__(self, session, name): self.urls, "Apod", "apod.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/apod/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/apod/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1590,7 +1590,7 @@ def __init__(self, session, name): self.urls, "Apsattv", "apsat.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Apsattv/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Apsattv/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1598,7 +1598,7 @@ def __init__(self, session, name): self.urls, "Archimede M3u Converter", "archimede_m3u_converter.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Archimede-M3UConverter/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Archimede-M3UConverter/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1606,7 +1606,7 @@ def __init__(self, session, name): self.urls, "Calendar", "calendar.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Calendar/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Calendar/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1614,7 +1614,7 @@ def __init__(self, session, name): self.urls, "DDRSS Reader", "ddrss.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/DDRSSReader/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/DDRSSReader/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1622,7 +1622,7 @@ def __init__(self, session, name): self.urls, "EPGImport 99", "epgimport_99.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh -O - | /bin/bash") + "wget -q https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh -O - | /bin/bash") add_menu_item( menu_list, self.titles, @@ -1630,7 +1630,7 @@ def __init__(self, session, name): self.urls, "EPGImport Source", "epgsource.png", - "wget -q --no-check-certificate \"https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh?inline=false\" -O - | /bin/sh") + "wget -q \"https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh?inline=false\" -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1638,7 +1638,7 @@ def __init__(self, session, name): self.urls, "Filmon", "filmon.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Filmon/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Filmon/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1646,7 +1646,7 @@ def __init__(self, session, name): self.urls, "ForecaOne", "ForecaOne.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/ForecaOne/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/ForecaOne/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1654,7 +1654,7 @@ def __init__(self, session, name): self.urls, "Freearhey", "freearhey.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/freearhey/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/freearhey/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1662,7 +1662,7 @@ def __init__(self, session, name): self.urls, "HasBahCa", "hasbahca.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/HasBahCa/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/HasBahCa/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1670,7 +1670,7 @@ def __init__(self, session, name): self.urls, "Horoscope", "horoscope.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Horoscope/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Horoscope/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1678,7 +1678,7 @@ def __init__(self, session, name): self.urls, "mmPicons", "mmpicons.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/mmPicons/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/mmPicons/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1686,7 +1686,7 @@ def __init__(self, session, name): self.urls, "Oroscopo Italia", "oroscopoitalia.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/oroscopo_radioitalia/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/oroscopo_radioitalia/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1694,7 +1694,7 @@ def __init__(self, session, name): self.urls, "Parsa Tv", "parsatv.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/tvParsa/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/tvParsa/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1702,7 +1702,7 @@ def __init__(self, session, name): self.urls, "Radio80", "radio80.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/Radio-80-s/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/Radio-80-s/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1710,7 +1710,7 @@ def __init__(self, session, name): self.urls, "Radio Git", "radio_git.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/RadioGit/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/RadioGit/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1718,7 +1718,7 @@ def __init__(self, session, name): self.urls, "Rai Play", "rai_play.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/RaiPlay/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/RaiPlay/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1726,7 +1726,7 @@ def __init__(self, session, name): self.urls, "Rsi Live", "rsilive.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/OwnerPlugins/rsilive/main/installer.sh -O - | /bin/bash") + "wget -q https://raw.githubusercontent.com/OwnerPlugins/rsilive/main/installer.sh -O - | /bin/bash") add_menu_item( menu_list, self.titles, @@ -1734,7 +1734,7 @@ def __init__(self, session, name): self.urls, "Rss Reader", "rss_reader.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/RSSReader/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/RSSReader/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1742,7 +1742,7 @@ def __init__(self, session, name): self.urls, "Scsearch", "scsearch.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/OwnerPlugins/scsearch/main/installer.sh -O - | /bin/bash") + "wget -q https://raw.githubusercontent.com/OwnerPlugins/scsearch/main/installer.sh -O - | /bin/bash") add_menu_item( menu_list, self.titles, @@ -1750,7 +1750,7 @@ def __init__(self, session, name): self.urls, "StreamProxy", "streamproxy.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/OwnerPlugins/StreamProxy/main/installer.sh -O - | /bin/bash") + "wget -q https://raw.githubusercontent.com/OwnerPlugins/StreamProxy/main/installer.sh -O - | /bin/bash") add_menu_item( menu_list, self.titles, @@ -1758,7 +1758,7 @@ def __init__(self, session, name): self.urls, "SlWebcams", "slwebcams.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/OwnerPlugins/SLwebcams/main/installer.sh -O - | /bin/bash") + "wget -q https://raw.githubusercontent.com/OwnerPlugins/SLwebcams/main/installer.sh -O - | /bin/bash") add_menu_item( menu_list, self.titles, @@ -1766,7 +1766,7 @@ def __init__(self, session, name): self.urls, "Softcam Manager", "softcam_manager.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/tvManager/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/tvManager/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1774,7 +1774,7 @@ def __init__(self, session, name): self.urls, "Stalker Portal Converter", "stalker_portal_converter.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/StalkerPortalConverter/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/StalkerPortalConverter/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1782,7 +1782,7 @@ def __init__(self, session, name): self.urls, "Stvcl", "stvcl.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/S.T.V.C.L-/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/S.T.V.C.L-/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1790,7 +1790,7 @@ def __init__(self, session, name): self.urls, "TvDream", "tvdream.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/tvDream/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/tvDream/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1798,7 +1798,7 @@ def __init__(self, session, name): self.urls, "TVGarden", "tvgarden.png", - "wget -q --no-check-certificate \"https://raw.githubusercontent.com/Belfagor2005/TVGarden/main/installer.sh\" -O - | /bin/sh") + "wget -q \"https://raw.githubusercontent.com/Belfagor2005/TVGarden/main/installer.sh\" -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1806,7 +1806,7 @@ def __init__(self, session, name): self.urls, "TvSettings", "tvsettings.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/tvSettings/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/tvSettings/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1814,7 +1814,7 @@ def __init__(self, session, name): self.urls, "TvToM3u", "tvtom3u.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/TvToM3u/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/TvToM3u/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1822,7 +1822,7 @@ def __init__(self, session, name): self.urls, "Vavoo", "vavoo.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/vavoo/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/vavoo/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1830,7 +1830,7 @@ def __init__(self, session, name): self.urls, "WiFi Manager", "wifi_manager.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/WiFi-Manager/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/WiFi-Manager/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1838,7 +1838,7 @@ def __init__(self, session, name): self.urls, "Worldcam", "worldcam.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/WorldCam/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/WorldCam/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1846,7 +1846,7 @@ def __init__(self, session, name): self.urls, "XC Forever", "xc.png", - "wget -q --no-check-certificate \"https://raw.githubusercontent.com/Belfagor2005/xc_plugin_forever/main/installer.sh?inline=false\" -O - | /bin/sh") + "wget -q \"https://raw.githubusercontent.com/Belfagor2005/xc_plugin_forever/main/installer.sh?inline=false\" -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1854,7 +1854,7 @@ def __init__(self, session, name): self.urls, "XXX Plugin", "xxx_plugin.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/xxxplugin/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/Belfagor2005/xxxplugin/main/installer.sh -O - | /bin/sh") self.initGrid(menu_list) @@ -1928,7 +1928,7 @@ def __init__(self, session, name): self.urls, "CiefpBouquetUpdater", "ciefp_bu.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpBouquetUpdater/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpBouquetUpdater/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1936,7 +1936,7 @@ def __init__(self, session, name): self.urls, "CiefpChannelManager", "ciefp_cman.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpChannelManager/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpChannelManager/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1944,7 +1944,7 @@ def __init__(self, session, name): self.urls, "CiefpE2Converter", "ciefp_ec.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpE2Converter/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpE2Converter/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1952,7 +1952,7 @@ def __init__(self, session, name): self.urls, "CiefpKingSat", "ciefpkingsat.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpKingSat/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpKingSat/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1960,7 +1960,7 @@ def __init__(self, session, name): self.urls, "CiefpIptvBouquets", "ciefp_ib.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpIPTVBouquets/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpIPTVBouquets/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1968,7 +1968,7 @@ def __init__(self, session, name): self.urls, "CiefpMojTvEPG", "ciefp_mojtvepg.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpMojTvEPG/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpMojTvEPG/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1976,7 +1976,7 @@ def __init__(self, session, name): self.urls, "CiefpOpenDirectory", "ciefp_opdir.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpOpenDirectories/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpOpenDirectories/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1984,7 +1984,7 @@ def __init__(self, session, name): self.urls, "CiefpOscamEditor", "ciefp_oe.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpOscamEditor/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpOscamEditor/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -1992,7 +1992,7 @@ def __init__(self, session, name): self.urls, "CiefpParabolaCZ", "CiefpParabolaCZ.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpParabolaCZ/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpParabolaCZ/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2000,7 +2000,7 @@ def __init__(self, session, name): self.urls, "CiefpRottenTomatoes", "ciefprottentomatoes.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpRottenTomatoes/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpRottenTomatoes/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2008,7 +2008,7 @@ def __init__(self, session, name): self.urls, "CiefpSatelliteAnalizer", "ciefp_satan.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSatelliteAnalyzer/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSatelliteAnalyzer/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2016,7 +2016,7 @@ def __init__(self, session, name): self.urls, "CiefpSatelliteXmlEditor", "ciefp_xed.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSatelliteXmlEditor/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSatelliteXmlEditor/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2024,7 +2024,7 @@ def __init__(self, session, name): self.urls, "CiefpSelectSatellite", "ciefp_ss.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSelectSatellite/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSelectSatellite/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2032,7 +2032,7 @@ def __init__(self, session, name): self.urls, "CiefpSettingsDownloader", "ciefp_sd.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSettingsDownloader/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSettingsDownloader/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2040,7 +2040,7 @@ def __init__(self, session, name): self.urls, "CiefpSettingsStreamrelay PY2", "ciefp_sr2.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSettingsStreamrelayPY2/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSettingsStreamrelayPY2/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2048,7 +2048,7 @@ def __init__(self, session, name): self.urls, "CiefpSettingsStreamrelay PY3", "ciefp_sr3.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSettingsStreamrelay/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSettingsStreamrelay/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2056,7 +2056,7 @@ def __init__(self, session, name): self.urls, "CiefpSettingsT2miAbertis PLi", "ciefp_t2mpli.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSettingsT2miAbertisOpenPLi/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSettingsT2miAbertisOpenPLi/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2064,7 +2064,7 @@ def __init__(self, session, name): self.urls, "CiefpSettingsT2miAbertis", "ciefp_t2m.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpSettingsT2miAbertis/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpSettingsT2miAbertis/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2072,7 +2072,7 @@ def __init__(self, session, name): self.urls, "CiefTitloviBrowser", "titlovibrowser.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/TitloviBrowser/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/TitloviBrowser/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2080,7 +2080,7 @@ def __init__(self, session, name): self.urls, "CiefpTMDBSearch", "ciefp_tmdb.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpTMDBSearch/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpTMDBSearch/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2088,7 +2088,7 @@ def __init__(self, session, name): self.urls, "CiefpVibes", "ciefp_vibes.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpVibes/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpVibes/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2096,7 +2096,7 @@ def __init__(self, session, name): self.urls, "CiefpWhitelistStreamrelay", "ciefp_wls.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpWhitelistStreamrelay/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpWhitelistStreamrelay/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2104,7 +2104,7 @@ def __init__(self, session, name): self.urls, "CiefpsettingsMotor", "ciefp_sm.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpsettingsMotor/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpsettingsMotor/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2112,7 +2112,7 @@ def __init__(self, session, name): self.urls, "CiefpsettingsPanel", "ciefp_sp.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/CiefpsettingsPanel/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/CiefpsettingsPanel/main/installer.sh -O - | /bin/sh") add_menu_item( menu_list, self.titles, @@ -2120,7 +2120,7 @@ def __init__(self, session, name): self.urls, "WebCamE2PrenjSF", "ciefp_webcam.png", - "wget -q --no-check-certificate https://raw.githubusercontent.com/ciefp/WebCamE2PrenjSF/main/installer.sh -O - | /bin/sh") + "wget -q https://raw.githubusercontent.com/ciefp/WebCamE2PrenjSF/main/installer.sh -O - | /bin/sh") self.initGrid(menu_list) @@ -2203,7 +2203,7 @@ def __init__(self, session, name): self.urls, "Add Libssl Libcrypto", "AddLibssl.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Add_Libssl1_Libcrypto1.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Add_Libssl1_Libcrypto1.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2211,7 +2211,7 @@ def __init__(self, session, name): self.urls, "Add Symlink Libssl", "AddSymlink.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Symlink_Creator.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Symlink_Creator.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2219,7 +2219,7 @@ def __init__(self, session, name): self.urls, "Ajpanel AMAJamry", "Ajpanel.png", - 'wget --no-check-certificate "https://raw.githubusercontent.com/biko-73/AjPanel/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget "https://raw.githubusercontent.com/biko-73/AjPanel/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2227,7 +2227,7 @@ def __init__(self, session, name): self.urls, "Arabic Savior", "arabicsav.png", - 'wget --no-check-certificate "https://raw.githubusercontent.com/fairbird/ArabicSavior/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget "https://raw.githubusercontent.com/fairbird/ArabicSavior/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2236,7 +2236,7 @@ def __init__(self, session, name): self.urls, "Biss Feed Autokey", "BissFeedAutokey.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Bissfeedautokey.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Bissfeedautokey.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2244,7 +2244,7 @@ def __init__(self, session, name): self.urls, "Chocholousek Picons", "ChocholousekPicons.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Chocholousek_picons.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Chocholousek_picons.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2253,7 +2253,7 @@ def __init__(self, session, name): self.urls, "Dns Cloudfaire", "DnsCloudfaire.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsCloudflare.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsCloudflare.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2261,7 +2261,7 @@ def __init__(self, session, name): self.urls, "Dns Google", "DnsGoogle.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsGoogle.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsGoogle.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2269,7 +2269,7 @@ def __init__(self, session, name): self.urls, "Dns Quad9", "DnsQuad9.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsQuad9.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/DnsQuad9.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2278,7 +2278,7 @@ def __init__(self, session, name): self.urls, "E2player E2-MIRROR", "E2iPlayer.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/oe-mirrors/e2iplayer/refs/heads/python3/e2iplayer_install.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/oe-mirrors/e2iplayer/refs/heads/python3/e2iplayer_install.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2286,7 +2286,7 @@ def __init__(self, session, name): self.urls, "E2player BYKO-73", "E2playerBiko-73.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/biko-73/E2IPlayer/main/installer-tar.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/biko-73/E2IPlayer/main/installer-tar.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2294,7 +2294,7 @@ def __init__(self, session, name): self.urls, "E2player MAXBAMBY", "E2playerMAXBAMBY.png", - 'wget -q --no-check-certificate "https://gitlab.com/maxbambi/e2iplayer/-/raw/master/install-e2iplayer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://gitlab.com/maxbambi/e2iplayer/-/raw/master/install-e2iplayer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2302,8 +2302,8 @@ def __init__(self, session, name): self.urls, "E2player ZADMARIO", "E2playerZADMARIO.png", - 'wget -q --no-check-certificate "https://gitlab.com/zadmario/e2iplayer/-/raw/master/install-e2iplayer.sh?inline=false" -O - | /bin/sh') - # add_menu_item(menu_list, self.titles, self.pics, self.urls, "E2player XXX", "E2playerXXX.png", 'wget -q --no-check-certificate "https://gitlab.com/iptv-host-xxx/iptv-host-xxx/-/raw/master/IPTVPlayer/iptvupdate/custom/xxx.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://gitlab.com/zadmario/e2iplayer/-/raw/master/install-e2iplayer.sh?inline=false" -O - | /bin/sh') + # add_menu_item(menu_list, self.titles, self.pics, self.urls, "E2player XXX", "E2playerXXX.png", 'wget -q "https://gitlab.com/iptv-host-xxx/iptv-host-xxx/-/raw/master/IPTVPlayer/iptvupdate/custom/xxx.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2312,7 +2312,7 @@ def __init__(self, session, name): self.urls, "EPGImport - source", "epgsource.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/EPGImport-99/main/installer_source.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2321,7 +2321,7 @@ def __init__(self, session, name): self.urls, "History Zap Selector", "HistoryZapSelector.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Historyzapselector_dorik.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Historyzapselector_dorik.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2329,7 +2329,7 @@ def __init__(self, session, name): self.urls, "Ipaudio Pro", "ipaudio.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Ipaudiopro_1.4.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Ipaudiopro_1.4.sh?inline=false" -O - | /bin/sh') # add_menu_item(menu_list, self.titles, self.pics, self.urls, "Ipaudio Pro", "ipaudio.png", 'wget https://raw.githubusercontent.com/biko-73/ipaudio/main/ipaudiopro.sh?inline=false" -O - | /bin/sh') add_menu_item( @@ -2339,7 +2339,7 @@ def __init__(self, session, name): self.urls, "Keys Adder", "keysadd.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/fairbird/KeyAdder/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/fairbird/KeyAdder/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2347,7 +2347,7 @@ def __init__(self, session, name): self.urls, "Keys Update", "keys.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Keys_Updater.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Keys_Updater.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2355,7 +2355,7 @@ def __init__(self, session, name): self.urls, "Levi45 Manager", "Levi45Manager.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/levi-45/Manager/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/levi-45/Manager/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2363,7 +2363,7 @@ def __init__(self, session, name): self.urls, "Linuxsat Addons Panel", "Linuxsat.png", - 'wget -q --no-check-certificate https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/installer.sh -O - | /bin/sh') + 'wget -q https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/installer.sh -O - | /bin/sh') add_menu_item( menu_list, @@ -2372,9 +2372,9 @@ def __init__(self, session, name): self.urls, "Mountpoints", "Mountpoints.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Mountpoints.sh?inline=false" -O - | /bin/sh') - # add_menu_item(menu_list, self.titles, self.pics, self.urls, "Multistalker Pro Ziko Biko", "Multistalker.png", 'wget -q --no-check-certificate "https://raw.githubusercontent.com/biko-73/Multi-Stalker/main/pro/installer.sh -O - | /bin/sh?inline=false" -O - | /bin/sh; wget -q --no-check-certificate "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" -O - | /bin/sh') - # add_menu_item(menu_list, self.titles, self.pics, self.urls, "Multistalker Pro Ziko", "MultistalkerPro.png", 'wget -q --no-check-certificate "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/refs/heads/main/installer.sh?inline=false" -O - | /bin/sh; wget -q --no-check-certificate "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Mountpoints.sh?inline=false" -O - | /bin/sh') + # add_menu_item(menu_list, self.titles, self.pics, self.urls, "Multistalker Pro Ziko Biko", "Multistalker.png", 'wget -q "https://raw.githubusercontent.com/biko-73/Multi-Stalker/main/pro/installer.sh -O - | /bin/sh?inline=false" -O - | /bin/sh; wget -q "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" -O - | /bin/sh') + # add_menu_item(menu_list, self.titles, self.pics, self.urls, "Multistalker Pro Ziko", "MultistalkerPro.png", 'wget -q "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/refs/heads/main/installer.sh?inline=false" -O - | /bin/sh; wget -q "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2382,7 +2382,7 @@ def __init__(self, session, name): self.urls, "Multistalker Pro Ziko", "MultistalkerPro.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/refs/heads/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh?inline=false" -O - | /bin/sh;wget -q --no-check-certificate "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/refs/heads/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh?inline=false" -O - | /bin/sh;wget -q "https://gitlab.com/hmeng80/extensions/-/raw/main/multistalker/portal/Portal_multistalker.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2390,7 +2390,7 @@ def __init__(self, session, name): self.urls, "New VirtualKeyboard", "NewVirtualKeyboard.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/fairbird/NewVirtualKeyBoard/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/fairbird/NewVirtualKeyBoard/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2399,7 +2399,7 @@ def __init__(self, session, name): self.urls, "Oscam Generator LINGSAT", "lingsat.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_lyngsat.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_lyngsat.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2407,7 +2407,7 @@ def __init__(self, session, name): self.urls, "Oscam Generator KINGOFSAT", "kingofsat.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_kingofsat.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_kingofsat.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2415,7 +2415,7 @@ def __init__(self, session, name): self.urls, "Oscam Generator SATELINATV", "satelinatv.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_satelitnatv.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_satelitnatv.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2423,7 +2423,7 @@ def __init__(self, session, name): self.urls, "Oscam Generator TWOJEIP", "twojeip.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_twojeip.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Oscam_srvid_generator_twojeip.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, @@ -2432,7 +2432,7 @@ def __init__(self, session, name): self.urls, "Quicksignal Raed", "Quicksignal.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/fairbird/RaedQuickSignal/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/fairbird/RaedQuickSignal/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2440,7 +2440,7 @@ def __init__(self, session, name): self.urls, "WireGuard Vpn", "WireGuard.png", - 'wget -qO- --no-check-certificate "https://raw.githubusercontent.com/m4dhouse/Wireguard-Vpn/python-3.12/WireGuard.sh" -O - | /bin/sh') + 'wget -qO- "https://raw.githubusercontent.com/m4dhouse/Wireguard-Vpn/python-3.12/WireGuard.sh" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2448,7 +2448,7 @@ def __init__(self, session, name): self.urls, "XC Forever", "xc.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/xc_plugin_forever/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/xc_plugin_forever/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2456,7 +2456,7 @@ def __init__(self, session, name): self.urls, "Xstreamity", "xstreamity.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/biko-73/xstreamity/main/installer.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/biko-73/xstreamity/main/installer.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2464,9 +2464,9 @@ def __init__(self, session, name): self.urls, "Xtraevent", "xtraevent.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Xtraevent.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Xtraevent.sh?inline=false" -O - | /bin/sh') - # add_menu_item(menu_list, self.titles, self.pics, self.urls, "X-Klass", "xklass.png", 'wget -qO- --no-check-certificate "https://gitlab.com/MOHAMED_OS/dz_store/-/raw/main/XKlass/online-setup" | -O - | /bin/sh') + # add_menu_item(menu_list, self.titles, self.pics, self.urls, "X-Klass", "xklass.png", 'wget -qO- "https://gitlab.com/MOHAMED_OS/dz_store/-/raw/main/XKlass/online-setup" | -O - | /bin/sh') # Adding more options without URLs if not has_dpkg: @@ -2497,7 +2497,7 @@ def __init__(self, session, name): self.urls, "Send Emm", "SendEmm.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Emm_Sender.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Emm_Sender.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2505,7 +2505,7 @@ def __init__(self, session, name): self.urls, "Subsupport addon", "SubSupportAddon.png", - 'wget -q --no-check-certificate "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Subsupport_addon.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://raw.githubusercontent.com/Belfagor2005/LinuxsatPanel/main/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Subsupport_addon.sh?inline=false" -O - | /bin/sh') add_menu_item( menu_list, self.titles, @@ -2513,7 +2513,7 @@ def __init__(self, session, name): self.urls, "Transmission addon", "transmission.png", - 'wget -q --no-check-certificate "https://dreambox4u.com/dreamarabia/Transmission_e2/Transmission_e2.sh?inline=false" -O - | /bin/sh') + 'wget -q "https://dreambox4u.com/dreamarabia/Transmission_e2/Transmission_e2.sh?inline=false" -O - | /bin/sh') if not has_dpkg: add_menu_item( menu_list, @@ -2563,13 +2563,8 @@ def LcnXX(self, answer=None): print("Starting LCN scan...") try: lcn_scanner_instance = LCNScanner() - LCN = lcn_scanner_instance.lcnScan() - print("LCN Scanner returned:", LCN) - - if LCN: - self.session.open(LCN) - else: - print("Error: LCN scan did not return a valid screen.") + lcn_scanner_instance.lcnScan() + print("LCN scan completed.") except Exception as e: print("Exception during LCN scan:", e) @@ -3371,13 +3366,8 @@ def LcnXX(self, answer=None): print("Starting LCN scan...") try: lcn_scanner_instance = LCNScanner() - LCN = lcn_scanner_instance.lcnScan() - print("LCN Scanner returned:", LCN) - - if LCN: - self.session.open(LCN) - else: - print("Error: LCN scan did not return a valid screen.") + lcn_scanner_instance.lcnScan() + print("LCN scan completed.") except Exception as e: print("Exception during LCN scan:", e) @@ -3813,7 +3803,7 @@ def install_update(self, answer=False): lsConsole, "Upgrading...", cmdlist=[ - "wget -q --no-check-certificate " + + "wget -q " + b64decoder(installer_url) + " -O - | /bin/sh"], finishedCallback=self.myCallback, @@ -3994,7 +3984,7 @@ def _save_commits_to_cache(self, commits): cache_path = self._get_cache_path() try: with open(cache_path, "w") as f: - f.write(str(commits)) + f.write(dumps(commits)) return True except BaseException: return False diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Multistalker_pro.sh b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Multistalker_pro.sh index 8c8afc4f..6239620b 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Multistalker_pro.sh +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/Multistalker_pro.sh @@ -85,7 +85,7 @@ sleep 1; if grep -qs -i 'mips' cat $CHECK ; then echo "[ Your device is MIPS ]" if [ "$PYTHON" = "PY2" ]; then -wget -q "--no-check-certificate "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py2.7_mips32el.tar.gz" -O /tmp/multi-stalkerpro-py2.7_mips32el.tar.gz +wget -q ""https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py2.7_mips32el.tar.gz" -O /tmp/multi-stalkerpro-py2.7_mips32el.tar.gz tar -xzf /tmp/multi-stalkerpro-py2.7_mips32el.tar.gz -C / sleep 2; rm -f /tmp/multi-stalkerpro-py2.7_mips32el.tar.gz @@ -194,7 +194,7 @@ fi elif grep -qs -i 'armv7l' cat $CHECK ; then echo "[ Your device is armv7l ]" if [ "$PYTHONLASTV" = "PY3" ]; then -wget -q --no-check-certificate "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py3.11_arm.tar.gz" -O /tmp/multi-stalkerpro-py3.11_arm.tar.gz +wget -q "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py3.11_arm.tar.gz" -O /tmp/multi-stalkerpro-py3.11_arm.tar.gz tar -xzf /tmp/multi-stalkerpro-py3.11_arm.tar.gz -C / sleep 2; rm -f /tmp/multi-stalkerpro-py3.11_arm.tar.gz @@ -299,7 +299,7 @@ echo "" fi fi if [ "$PYTHON" = "PY2" ]; then -wget -q --no-check-certificate "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py2.7_arm.tar.gz" -O /tmp/multi-stalkerpro-py2.7_arm.tar.gz +wget -q "https://raw.githubusercontent.com/emilnabil/multi-stalkerpro/main/multi-stalkerpro-py2.7_arm.tar.gz" -O /tmp/multi-stalkerpro-py2.7_arm.tar.gz sleep 1; tar -xzf /tmp/multi-stalkerpro-py2.7_arm.tar.gz -C / sleep 2; @@ -374,7 +374,7 @@ echo "" sleep 2; fi echo "" -wget -q --no-check-certificate "https://github.com/emilnabil/multi-stalkerpro/raw/refs/heads/main/icon.png" -O /$PLUGINPATH/icon.png +wget -q "https://github.com/emilnabil/multi-stalkerpro/raw/refs/heads/main/icon.png" -O /$PLUGINPATH/icon.png echo "#########################################################" echo "** *" echo "** multi-stalkerpro *" diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh index 1a18ed0d..1cca8596 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro12_eliesat.sh @@ -203,7 +203,7 @@ else #Download & install package echo "> Downloading $plugin-$version package please wait ..." sleep 3 - wget --show-progress -qO $temp_dir/$targz_file --no-check-certificate $url + wget --show-progress -qO $temp_dir/$targz_file $url set -e if [ -e /etc/enigma2/MultiStalkerPro.json ]; then mv -f /etc/enigma2/MultiStalkerPro.json /tmp diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro1_eliesat.sh b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro1_eliesat.sh index 008efac4..17748be4 100644 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro1_eliesat.sh +++ b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/sh/multisalker_pro1_eliesat.sh @@ -107,7 +107,7 @@ else echo "> Downloading $plugin-$version package please wait ..." sleep 3s - wget -O $package --no-check-certificate $url + wget -O $package $url tar -xzf $package -C / extract=$? rm -rf $package > /dev/null 2>&1 diff --git a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/translate_utils.py b/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/translate_utils.py deleted file mode 100644 index e88fd0f3..00000000 --- a/usr/lib/enigma2/python/Plugins/Extensions/LinuxsatPanel/translate_utils.py +++ /dev/null @@ -1,621 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- -# Copyright (c) @Lululla 2026 -# Google Translate API for Foreca One Weather Plugin - -import hashlib -import json -import socket -import time -from json import JSONDecodeError, loads -from os import makedirs, remove -from os.path import dirname, exists, join - -from urllib.error import HTTPError, URLError -from urllib.parse import urlencode -from urllib.request import Request, urlopen - -from Components.config import config - -from . import DEBUG, HEADERS, SYSTEM_DIR - -# ============================================================ -# CUSTOM CONFIGURATION -# ============================================================ - -# Translation API URL (can be changed if needed) -TRANSLATE_API_URL = "https://translate.googleapis.com/translate_a/single" - -# Timeout for HTTP requests (in seconds) -REQUEST_TIMEOUT = 8 - -# Character limit for batch translation (to avoid errors) -MAX_CHARS_PER_REQUEST = 2000 - -# Local cache to avoid repetitive requests -CACHE_FILE = join(SYSTEM_DIR, "translation_cache.json") -_translation_cache = {} -_cache_hits = 0 -_cache_misses = 0 -_cache_dirty = False # flag to know if there are changes to save - -# Enable logging -ENABLE_LOGGING = True - - -# ============================================================ -# CACHE PERSISTENCE -# ============================================================ - - -def _ensure_cache_dir(): - """Create the directory for the cache file if it does not exist.""" - cache_dir = dirname(CACHE_FILE) - if not exists(cache_dir): - try: - makedirs(cache_dir) - except Exception as e: - _log(f"Error creating cache directory: {e}") - - -def load_cache_from_disk(): - """Load the cache from the JSON file at startup.""" - global _translation_cache - _ensure_cache_dir() - if exists(CACHE_FILE): - try: - with open(CACHE_FILE, 'r', encoding='utf-8') as f: - _translation_cache = json.load(f) - _log(f"Cache loaded from disk ({len(_translation_cache)} entries)") - except Exception as e: - _log(f"Error loading cache: {e}") - _translation_cache = {} - else: - _translation_cache = {} - - -def save_cache_to_disk(): - """Save the cache to disk if there are changes.""" - global _cache_dirty - if not _cache_dirty: - return - _ensure_cache_dir() - try: - with open(CACHE_FILE, 'w', encoding='utf-8') as f: - json.dump(_translation_cache, f, ensure_ascii=False, indent=2) - _log(f"Cache saved to disk ({len(_translation_cache)} entries)") - _cache_dirty = False - except Exception as e: - _log(f"Error saving cache: {e}") - - -# ============================================================ -# UTILITY FUNCTIONS -# ============================================================ - - -def _log(message): - """Custom logging""" - if ENABLE_LOGGING and DEBUG: - timestamp = time.time() - print(f"[Foreca-1-Translate][{timestamp:.2f}] {message}") - - -def _get_system_language(): - """Get system language in short format""" - try: - lang = config.misc.language.value - return lang.split('_')[0].lower() - except Exception: - lang = config.osd.language.value - return lang.split('_')[0].lower() - -# print("System Language:", _get_system_language()) - - -def _to_unicode(text): - """Convert any input into a Unicode string.""" - if text is None: - return "" - - if isinstance(text, str): - return text - - if isinstance(text, bytes): - try: - return text.decode("utf-8", errors="ignore") - except Exception: - return str(text, errors="ignore") - - try: - return str(text) - except Exception: - return "" - - -def _clean_whitespace(text): - text_unicode = _to_unicode(text) - while " " in text_unicode: - text_unicode = text_unicode.replace(" ", " ") - return text_unicode.strip() - - -# ============================================================ -# ARABIC LANGUAGE DETECTION -# ============================================================ - - -def _is_arabic_char(char): - """Check if a character is Arabic""" - try: - code = ord(char) - # Unicode ranges for Arabic characters - return ( - 0x0600 <= code <= 0x06FF or - 0x0750 <= code <= 0x077F or - 0x08A0 <= code <= 0x08FF or - 0xFB50 <= code <= 0xFDFF or - 0xFE70 <= code <= 0xFEFF - ) - except Exception: - return False - - -def _is_text_arabic(text): - """ - Determines whether a text is predominantly Arabic. - Returns True if more than 60% of alphabetic characters are Arabic. - """ - text_unicode = _to_unicode(text) - if not text_unicode: - return False - - total_letters = 0 - arabic_letters = 0 - - for char in text_unicode: - # Consider only alphabetic characters (exclude spaces, numbers, - # punctuation) - if char.isalpha(): - total_letters += 1 - if _is_arabic_char(char): - arabic_letters += 1 - - # If there are no letters, it's not Arabic - if total_letters == 0: - return False - - # Calculate percentage - arabic_ratio = float(arabic_letters) / float(total_letters) - - # Threshold to consider the text Arabic (60%) - return arabic_ratio >= 0.6 - - -# ============================================================ -# CACHE AND PERFORMANCE -# ============================================================ - - -def _get_cache_key(text, target_lang): - """Generate a unique cache key using MD5 (stable across runs)""" - # Use MD5 because it is fast and deterministic - key_string = f"{target_lang}:{text}".encode('utf-8') - return hashlib.md5(key_string).hexdigest() - - -def _cache_translation(text, target_lang, translated): - """Store a translation in the cache and save immediately to disk.""" - global _cache_dirty - cache_key = _get_cache_key(text, target_lang) - _translation_cache[cache_key] = translated - _cache_dirty = True - save_cache_to_disk() - return translated - - -def _get_cached_translation(text, target_lang): - """Retrieve a translation from the cache""" - global _cache_hits, _cache_misses - cache_key = _get_cache_key(text, target_lang) - - if cache_key in _translation_cache: - _cache_hits += 1 - return _translation_cache[cache_key] - - _cache_misses += 1 - return None - - -def get_cache_stats(): - """Return cache statistics""" - return { - 'hits': _cache_hits, - 'misses': _cache_misses, - 'size': len(_translation_cache), - 'hit_rate': _cache_hits / max(1, _cache_hits + _cache_misses) - } - - -def clear_cache(): - """Clear the translation cache and delete the file""" - global _cache_hits, _cache_misses, _cache_dirty - _translation_cache.clear() - _cache_hits = 0 - _cache_misses = 0 - _cache_dirty = False - if exists(CACHE_FILE): - try: - remove(CACHE_FILE) - except Exception as e: - _log(f"Error deleting cache file: {e}") - _log("Cache cleared") - - -# ============================================================ -# MAIN TRANSLATION FUNCTION -# ============================================================ - -def translate_text(text, target_lang=None, use_cache=True): - """ - Translates text using the Google Translate API. - - Args: - text (str): Text to translate - target_lang (str): Target language (e.g. 'it', 'en', 'de') - If None, uses the system language - use_cache (bool): Whether to use the local cache - - Returns: - str: Translated text or original text in case of error - """ - start_time = time.time() - _log(f"Target language: '{target_lang}'") - # Input validation - if not text: - return "" - - # Convert to Unicode - text_unicode = _to_unicode(text) - - # Use system language if not specified - if target_lang is None: - target_lang = _get_system_language() - - # Normalize language (ensure lowercase) - target_lang = target_lang.lower() - - # If the text is already Arabic, do not translate it - if _is_text_arabic(text_unicode): - _log(f"Arabic text detected, not translated: '{text_unicode[:50]}...'") - return text_unicode - - # Check cache if enabled - if use_cache: - cached = _get_cached_translation(text_unicode, target_lang) - if cached is not None: - _log(f"Cache HIT: '{text_unicode[:30]}...' -> '{cached[:30]}...'") - return cached - - # Error handling for overly long texts - if len(text_unicode) > MAX_CHARS_PER_REQUEST: - _log("Text too long (" + - str(len(text_unicode)) + - " chars), truncated to " + - str(MAX_CHARS_PER_REQUEST)) - text_unicode = text_unicode[:MAX_CHARS_PER_REQUEST] - - # Prepare the request - params = { - "client": "gtx", # Fake client to bypass restrictions - "sl": "auto", # Automatic source language - "tl": target_lang, # Target language - "dt": "t", # Response type: translation only - "q": text_unicode, # Text to translate - } - - try: - # Build the URL - query_string = urlencode(params) - url = f"{TRANSLATE_API_URL}?{query_string}" - - _log(f"Translating: '{text_unicode[:40]}...' -> {target_lang}") - - # Set timeout to avoid blocking - socket.setdefaulttimeout(REQUEST_TIMEOUT) - - # Perform the request - req = Request(url) - for key, value in HEADERS.items(): - req.add_header(key, value) - response = urlopen(req, timeout=REQUEST_TIMEOUT) - raw_data = response.read() - - # Decode the response - if isinstance(raw_data, bytes): - raw_data = raw_data.decode('utf-8') - - # Parse JSON response - data = loads(raw_data) - - # Extract the translation from the JSON structure - translated_text = "" - if isinstance(data, list) and data: - # Typical structure: [[[translation, original], ...], ...] - for item in data[0]: - if item and isinstance(item, list) and item[0]: - translated_text += item[0] - - # Clean the result - if translated_text: - translated_text = _clean_whitespace(translated_text) - - # Save to cache - if use_cache: - _cache_translation(text_unicode, target_lang, translated_text) - - elapsed = time.time() - start_time - _log(( - f"Translation completed in {elapsed:.2f}s: '{text_unicode[:30]}...' -> " - f"'{translated_text[:30]}...'" - )) - - return translated_text - else: - _log(f"Empty API response for: '{text_unicode[:30]}...'") - return text_unicode - - except socket.timeout: - _log(f"TIMEOUT during translation: '{text_unicode[:30]}...'") - return text_unicode - - except (URLError, HTTPError) as e: - _log(f"HTTP error {getattr(e, 'code', 'N/A')}: {str(e)}") - return text_unicode - - except JSONDecodeError as e: - _log(f"JSON error: {str(e)}") - return text_unicode - - except Exception as e: - error_type = type(e).__name__ - _log(f"Error {error_type}: {str(e)}") - return text_unicode - - finally: - # Restore default timeout - socket.setdefaulttimeout(None) - - -# ============================================================ -# AUXILIARY FUNCTIONS FOR SPECIAL CASES -# ============================================================ - - -def translate_batch(texts, target_lang=None, use_cache=True): - """ - Translates a list of texts in batch. - Optimized to reduce the number of HTTP requests. - - Args: - texts (list): List of texts to translate - target_lang (str): Target language - use_cache (bool): Use cache - - Returns: - list: List of translated texts - """ - if not texts: - return [] - - # Use system language if not specified - if target_lang is None: - target_lang = _get_system_language() - results = [] - batch_text = [] - batch_indices = [] - - for i, text in enumerate(texts): - text_unicode = _to_unicode(text) - - # Check cache - if use_cache: - cached = _get_cached_translation(text_unicode, target_lang) - if cached is not None: - results.append(cached) - continue - - # If the text is Arabic, do not translate it - if _is_text_arabic(text_unicode): - results.append(text_unicode) - continue - - # Add to batch - batch_text.append(text_unicode) - batch_indices.append(i) - results.append(None) # Placeholder - - # If there are texts to translate in batch - if batch_text: - try: - # Join texts with a special separator - separator = u" ||| " - combined_text = separator.join(batch_text) - - # Translate the batch - combined_translated = translate_text( - combined_text, - target_lang, - use_cache=False # Do not use cache for batch - ) - - # Split results - if separator in combined_translated: - translated_parts = combined_translated.split(separator) - else: - # Fallback: split by approximate number - translated_parts = [combined_translated] * len(batch_text) - - # Update results - for idx, translated in zip(batch_indices, translated_parts): - results[idx] = translated - - # Save to cache - if use_cache and idx < len(texts): - text_unicode = _to_unicode(texts[idx]) - _cache_translation(text_unicode, target_lang, translated) - - except Exception as e: - _log(f"Batch translation error: {str(e)}") - # Fallback: translate individually - for idx in batch_indices: - if results[idx] is None and idx < len(texts): - results[idx] = translate_text( - texts[idx], target_lang, use_cache) - - # Replace None with original text - for i in range(len(results)): - if results[i] is None: - results[i] = _to_unicode(texts[i]) - - return results - - -def safe_translate(text, fallback=None, **kwargs): - """ - Safe version of translate_text that always returns a valid string. - Args: - text (str): Text to translate - fallback (str): Fallback text if translation fails - **kwargs: Additional arguments for translate_text - Returns: - str: Translated text, fallback or original - """ - try: - translated = translate_text(text, **kwargs) - if translated and translated.strip(): - return translated - - # If translation is empty, use fallback - if fallback is not None: - return _to_unicode(fallback) - - return _to_unicode(text) - - except Exception as e: - _log(f"Error in safe_translate: {str(e)}") - if fallback is not None: - return _to_unicode(fallback) - return _to_unicode(text) - - -def trans(text, target_lang=None): - """ - Simplified translation function for single strings. - Uses cache and translate_text. - """ - if target_lang is None: - target_lang = _get_system_language() - target_lang = target_lang.lower() - - if not text or not isinstance(text, str): - return text or "" - - text = text.strip() - if not text: - return "" - - # Do not translate Arabic text - if _is_text_arabic(text): - return text - - # Check cache using full key (language + hash) - cached = _get_cached_translation(text, target_lang) - if cached is not None: - return cached - - # Translate (translate_text already handles internal caching if - # use_cache=True) - translated = translate_text(text, target_lang, use_cache=True) - if translated and translated != text: - return translated - return text - - -def translate_batch_strings(texts, target_lang=None): - """ - High-level batch translation for a list of strings. - """ - if not texts: - return [] - valid_texts = [str(t).strip() for t in texts if t and str(t).strip()] - if not valid_texts: - return [] - - # Use the existing cache via translate_batch - return translate_batch(valid_texts, target_lang, use_cache=True) - - -# ============================================================ -# TEST FUNCTION (for debugging) -# ============================================================ - - -def test_translation(): - """Test function to verify functionality""" - test_cases = [ - ("Hello world", "it", "Ciao mondo"), - ("Weather forecast", "es", "Pronóstico del tiempo"), - ("Temperature", "fr", "Température"), - ] - if DEBUG: - print("=" * 60) - print("Foreca One TRANSLATION TEST") - print("=" * 60) - - all_passed = True - - for original, lang, expected in test_cases: - result = translate_text(original, lang) - - if result and result.lower() == expected.lower(): - status = "✓ PASS" - else: - status = "✗ FAIL" - all_passed = False - if DEBUG: - print( - f"{status}: '{original}' -> '{result}' (expected: '{expected}')") - if DEBUG: - print("=" * 60) - stats = get_cache_stats() - print(( - f"Cache statistics: {stats['hits']} hits, {stats['misses']} misses, " - f"rate: {stats['hit_rate']:.1%}" - )) - print("=" * 60) - - return all_passed - - -# ============================================================ -# INITIALIZATION -# ============================================================ - -# Load cache at module startup -load_cache_from_disk() - -if __name__ == "__main__": - # Test mode when run directly - if DEBUG: - print("Google Translate API for Foreca") - print("Enhanced custom version") - - if test_translation(): - print("✓ All tests passed!") - else: - print("✗ Some tests failed") -else: - # Imported as a module - _log("Foreca One translation module loaded") - _log(f"System language: {_get_system_language()}")