diff --git a/data/display480/skin_display.xml b/data/display480/skin_display.xml
index dd7a1c8d3f..0fda59b286 100644
--- a/data/display480/skin_display.xml
+++ b/data/display480/skin_display.xml
@@ -564,10 +564,17 @@
-
+
+
+
+
+
+
+
+
diff --git a/lib/base/eerror.cpp b/lib/base/eerror.cpp
index e14a6d134e..192357a549 100644
--- a/lib/base/eerror.cpp
+++ b/lib/base/eerror.cpp
@@ -144,7 +144,8 @@ int formatTime(char *buf, int bufferSize, int flags)
if (!(flags & _DBGFLG_NOTIME)) {
if (debugTime & 1) {
clock_gettime(CLOCK_MONOTONIC, &tp);
- pos += snprintf(buf, bufferSize, "<%6lu.%04lu> ", tp.tv_sec, tp.tv_nsec/100000);
+/* Cast to (long long) is to cater for older 32-bit time fields */
+ pos += snprintf(buf, bufferSize, "<%6lld.%04lld> ", (long long)tp.tv_sec, (long long)tp.tv_nsec/100000);
}
if (debugTime & 2) {
@@ -152,8 +153,9 @@ int formatTime(char *buf, int bufferSize, int flags)
struct timeval tim;
gettimeofday(&tim, NULL);
localtime_r(&tim.tv_sec, &loctime);
- pos += snprintf(buf + pos, bufferSize - pos, "%02d:%02d:%02d.%04lu ",
- loctime.tm_hour, loctime.tm_min, loctime.tm_sec, tim.tv_usec / 100L);
+/* Cast to (long long) is to cater for older 32-bit time fields */
+ pos += snprintf(buf + pos, bufferSize - pos, "%02d:%02d:%02d.%04lld ",
+ loctime.tm_hour, loctime.tm_min, loctime.tm_sec, (long long)tim.tv_usec / 100L);
}
}
diff --git a/lib/python/Components/Addons/Pager.py b/lib/python/Components/Addons/Pager.py
index 967017e91a..ba575edba1 100644
--- a/lib/python/Components/Addons/Pager.py
+++ b/lib/python/Components/Addons/Pager.py
@@ -33,12 +33,12 @@ def __init__(self):
def onContainerShown(self):
# disable listboxes default scrollbars
if hasattr(self.source, "instance") and hasattr(self.source.instance, "setScrollbarMode"):
- self.source.instance.setScrollbarMode(2)
+ self.source.instance.setScrollbarMode(eListbox.showNever)
- if hasattr(self.source, "onSelectionChanged") and self.initPager not in self.source.onSelectionChanged:
- self.source.onSelectionChanged.append(self.initPager)
- if hasattr(self.source, "onSelChanged") and self.initPager not in self.source.onSelChanged:
- self.source.onSelChanged.append(self.initPager)
+ onSelectionChanged = x if (x := getattr(self.source, "onSelectionChanged", None)) else getattr(self.source, "onSelChanged", None)
+
+ if isinstance(onSelectionChanged, list) and self.initPager not in onSelectionChanged:
+ onSelectionChanged.append(self.initPager)
self.initPager()
diff --git a/lib/python/Components/EpgListGrid.py b/lib/python/Components/EpgListGrid.py
index 06ecea72d4..e0dbc8f8de 100644
--- a/lib/python/Components/EpgListGrid.py
+++ b/lib/python/Components/EpgListGrid.py
@@ -91,6 +91,7 @@ def __init__(self, session, isInfobar, selChangedCB=None):
self.eventBorderWidth = 1
self.eventNamePadding = 3
self.serviceNumberWidth = 0
+ self.eventTextSidesMargin = 0
self.l.setBuildFunc(self.buildEntry)
self.loadConfig()
@@ -146,6 +147,9 @@ def applySkin(self, desktop, screen):
elif attrib == "EntryForegroundColorNowSelected":
self.foreColorNowSelected = parseColor(value).argb()
+ elif attrib == "EventTextSidesMargin":
+ self.eventTextSidesMargin = parseScale(value)
+
elif attrib == "ServiceBorderColor":
self.borderColorService = parseColor(value).argb()
elif attrib == "ServiceBorderWidth":
@@ -615,6 +619,10 @@ def buildEntry(self, service, serviceName, events, picon, channel):
pos=(left + xpos + self.eventBorderWidth, evY), size=(ewidth - 2 * self.eventBorderWidth, evH),
png=infoPix, flags=BT_ALIGN_CENTER))
else:
+ evW -= self.eventTextSidesMargin * 2
+ evX += self.eventTextSidesMargin
+ if evW < 0:
+ evW = 0
res.append(MultiContentEntryText(
pos=(evX, evY), size=(evW, evH),
font=1, flags=int(config.epgselection.grid.event_alignment.value),
@@ -655,16 +663,19 @@ def buildEntry(self, service, serviceName, events, picon, channel):
pix_size = timerIcon.size()
pix_width = pix_size.width()
pix_height = pix_size.height()
+ isTimerIconAdded = False
if config.epgselection.grid.rec_icon_height.value == "middle":
recIconHeight = top + (height - pix_height) // 2
elif config.epgselection.grid.rec_icon_height.value == "top":
recIconHeight = top + 3
else:
- recIconHeight = top + height - pix_height - applySkinFactor(5)
+ recIconHeight = top + height - pix_height - 10
if matchType == 0:
- pos = (left + xpos + ewidth - pix_width - applySkinFactor(5), recIconHeight)
+ pos = (left + xpos + ewidth - pix_width - 10, recIconHeight)
+ isTimerIconAdded = True
else:
- pos = (left + xpos + ewidth - pix_width - applySkinFactor(5), recIconHeight)
+ pos = (left + xpos + ewidth - pix_width - 10, recIconHeight)
+ isTimerIconAdded = True
res.append(MultiContentEntryPixmapAlphaBlend(
pos=pos, size=(pix_width, pix_height),
png=timerIcon))
@@ -673,7 +684,7 @@ def buildEntry(self, service, serviceName, events, picon, channel):
pix_width = pix_size.width()
pix_height = pix_size.height()
res.append(MultiContentEntryPixmapAlphaBlend(
- pos=(pos[0] - pix_width - applySkinFactor(5), pos[1]), size=(pix_width, pix_height),
+ pos=(pos[0] - pix_width - (5 if isTimerIconAdded else 10), pos[1]), size=(pix_width, pix_height),
png=autoTimerIcon))
return res
diff --git a/lib/python/Components/EpgListSingle.py b/lib/python/Components/EpgListSingle.py
index 1af1b1d0d1..61f81d93e1 100644
--- a/lib/python/Components/EpgListSingle.py
+++ b/lib/python/Components/EpgListSingle.py
@@ -91,13 +91,14 @@ def buildEntry(self, service, eventId, beginTime, duration, eventName):
pix_width = pix_size.width()
pix_height = pix_size.height()
eventW -= pix_width
- res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHABLEND, r3.left() + r3.width() - pix_width, (r3.height() - pix_height) // 2, pix_width, pix_height, timerIcon))
+ posX = r3.left() + r3.width() - pix_width
+ res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHABLEND, posX, (r3.height() - pix_height) // 2, pix_width, pix_height, timerIcon))
if autoTimerIcon:
pix_size = autoTimerIcon.size()
pix_width = pix_size.width()
pix_height = pix_size.height()
- eventW -= pix_width
- res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHABLEND, r3.left() + r3.width() - pix_width * 2 - 10, (r3.height() - pix_height) // 2, pix_width, pix_height, autoTimerIcon))
+ eventW -= pix_width + 6
+ res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHABLEND, posX - pix_width - 6, (r3.height() - pix_height) // 2, pix_width, pix_height, autoTimerIcon))
res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), eventW, r3.height(), 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, eventName))
return res
diff --git a/lib/python/Plugins/SystemPlugins/OBH/Makefile.am b/lib/python/Plugins/SystemPlugins/OBH/Makefile.am
index 8f573e3d72..4fa7447db2 100644
--- a/lib/python/Plugins/SystemPlugins/OBH/Makefile.am
+++ b/lib/python/Plugins/SystemPlugins/OBH/Makefile.am
@@ -4,7 +4,6 @@ SUBDIRS = images
install_PYTHON = *.py
-install_DATA = *.png \
- *.xml \
+install_DATA = *.xml \
LICENSE \
maintainer.info
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py b/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py
index 7c4114319e..a276b7adfb 100644
--- a/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py
+++ b/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py
@@ -1,13 +1,9 @@
-import os
-import time
-import pickle
-
-from enigma import eRCInput, getPrevAsciiCode
+from time import time
from Components.Console import Console
from Components.Ipkg import IpkgComponent
from Components.Sources.List import List
-from Components.ActionMap import NumberActionMap
+from Components.ActionMap import ActionMap
from Components.PluginComponent import plugins
from Components.Sources.StaticText import StaticText
@@ -16,35 +12,8 @@
from Screens.Screen import Screen, ScreenSummary
from Screens.Standby import TryQuitMainloop
-from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
from Tools.LoadPixmap import LoadPixmap
-from Tools.NumericalTextInput import NumericalTextInput
-
-
-def write_cache(cache_file, cache_data):
- try:
- path = os.path.dirname(cache_file)
- if not os.path.isdir(path):
- os.mkdir(path)
- pickle.dump(cache_data, open(cache_file, "wb"), -1)
- except Exception as ex:
- print("Failed to write cache data to %s:" % cache_file, ex)
-
-
-def valid_cache(cache_file, cache_ttl):
- try:
- mtime = os.stat(cache_file)[os.stat.ST_MTIME]
- except:
- return 0
- curr_time = time.time()
- if (curr_time - mtime) > cache_ttl:
- return 0
- else:
- return 1
-
-
-def load_cache(cache_file):
- return pickle.load(open(cache_file, "rb"))
class PackageManagerSummary(ScreenSummary):
@@ -52,7 +21,7 @@ def __init__(self, session, parent):
ScreenSummary.__init__(self, session, parent=parent)
-class PackageManager(Screen, NumericalTextInput):
+class PackageManager(Screen):
skin = ["""
@@ -89,196 +58,98 @@ class PackageManager(Screen, NumericalTextInput):
def __init__(self, session):
Screen.__init__(self, session)
- NumericalTextInput.__init__(self)
self.title = _("Package manager")
- self.setUseableChars("1234567890abcdefghijklmnopqrstuvwxyz")
-
- self["shortcuts"] = NumberActionMap(["SetupActions", "InputAsciiActions"],
+ self["actions"] = ActionMap(["SetupActions"],
{
"ok": self.go,
- "cancel": self.exit,
- "gotAsciiCode": self.keyGotAscii,
- "1": self.keyNumberGlobal,
- "2": self.keyNumberGlobal,
- "3": self.keyNumberGlobal,
- "4": self.keyNumberGlobal,
- "5": self.keyNumberGlobal,
- "6": self.keyNumberGlobal,
- "7": self.keyNumberGlobal,
- "8": self.keyNumberGlobal,
- "9": self.keyNumberGlobal,
- "0": self.keyNumberGlobal
+ "save": self.rebuildList,
+ "cancel": self.cancel,
}, -1)
- self["filterActions"] = NumberActionMap(["SetupActions"],
+ self["filterActions"] = ActionMap(["SetupActions"],
{
"deleteBackward": self.filterPrev,
"deleteForward": self.filterNext,
- "save": self.reload,
}, -1)
self["filterActions"].setEnabled(False)
self.list = []
- self.statuslist = []
self["list"] = List(self.list)
self["key_red"] = StaticText(_("Close"))
- self["key_green"] = StaticText()
+ self["key_green"] = StaticText(_("opkg update"))
self["key_previous"] = StaticText()
self["key_next"] = StaticText()
- self.imagePath = "%s/images/" % os.path.dirname(os.path.realpath(__file__))
- self.list_updating = True
+ self.list_updating = False # because IpkgComponent sends multiple responses and we only want to react to one of them
self.packetlist = []
self.installed_packetlist = {}
self.upgradeable_packages = {}
self.Console = Console()
- self.cmdList = []
- self.cachelist = []
- self.cache_ttl = 86400 #600 is default, 0 disables, Seconds cache is considered valid (24h should be ok for caching opkgs)
- self.cache_file = "/etc/enigma2/packetmanager.cache" # Path to cache directory
- self.oktext = _("\nAfter pressing OK, please wait!")
self.unwanted_extensions = ("-dbg", "-dev", "-doc", "-staticdev", "-src", "busybox")
- self.filters = {"All": _("All"), "Installed": _("Installed"), "Upgradeable": _("Upgradeable"), "Installable": _("Installable")}
+ self.filters = {"all": _("All"), "installed": _("Installed"), "upgradeable": _("Upgradeable"), "installable": _("Installable")}
- self.installedpng = LoadPixmap(cached=True, path=self.imagePath + "installed.png")
- self.upgradeablepng = LoadPixmap(cached=True, path=self.imagePath + "upgradeable.png")
- self.installablepng = LoadPixmap(cached=True, path=self.imagePath + "installable.png")
+ self.installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "icons/installed.png"))
+ self.upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "icons/upgradeable.png"))
+ self.installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "icons/installable.png"))
+ self.divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "div-h.png"))
+ self.upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "icons/upgrade.png"))
+ self.removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "icons/remove.png"))
self.ipkg = IpkgComponent()
self.ipkg.addCallback(self.ipkgCallback)
- self.onLayoutFinish.append(self.rebuildList)
-
- rcinput = eRCInput.getInstance()
- rcinput.setKeyboardMode(rcinput.kmAscii)
-
- def keyNumberGlobal(self, val):
- key = self.getKey(val)
- if key is not None:
- keyvalue = key.encode("utf-8")
- if len(keyvalue) == 1:
- self.setNextIdx(keyvalue[0])
-
- def keyGotAscii(self):
- keyvalue = chr(getPrevAsciiCode()).encode("utf-8")
- if len(keyvalue) == 1:
- self.setNextIdx(keyvalue[0])
-
- def setNextIdx(self, char):
- if char in ("0", "1", "a"):
- self["list"].setIndex(0)
- else:
- idx = self.getNextIdx(char)
- if idx and idx <= self["list"].count:
- self["list"].setIndex(idx)
-
- def getNextIdx(self, char):
- for idx, i in enumerate(self["list"].list):
- if i[0] and (i[0][0] == char):
- return idx
-
- def exit(self):
+ self.onLayoutFinish.append(self.buildList)
+
+ def cancel(self):
self.ipkg.stop()
- if self.Console is not None:
- self.Console.killAll()
- rcinput = eRCInput.getInstance()
- rcinput.setKeyboardMode(rcinput.kmNone)
+ self.Console.killAll()
self.close()
- def reload(self):
- if os.path.exists(self.cache_file):
- os.unlink(self.cache_file)
- self.list_updating = True
- self.rebuildList()
-
- def setStatus(self, status=None):
- if status:
- self.statuslist = []
- divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "div-h.png"))
- if status == "update":
- statuspng = LoadPixmap(cached=True, path=self.imagePath + "upgrade.png")
- self.statuslist.append((_("Package list update"), "", _("Downloading a new packet list. Please wait..."), "", statuspng, divpng))
- self["list"].setList(self.statuslist)
- elif status == "error":
- statuspng = LoadPixmap(cached=True, path=self.imagePath + "remove.png")
- self.statuslist.append((_("Error"), "", _("An error occurred while downloading the packetlist. Please try again."), "", statuspng, divpng))
- self["list"].setList(self.statuslist)
+ def setStatus(self, status):
+ if status == "updating":
+ self["list"].setList([(_("Running opkg update"), "", _("Downloading the latest package list. Please wait..."), "", self.upgradepng, self.divpng)])
+ elif status == "loading":
+ self["list"].setList([(_("Package list loading"), "", _("Loading the package list. Please wait..."), "", self.upgradepng, self.divpng)])
+ elif status == "error":
+ self["list"].setList([(_("Error"), "", _("An error occurred while downloading the packetlist. Please try again."), "", self.removepng, self.divpng)])
def rebuildList(self):
- self.setStatus("update")
- self.inv_cache = 0
- self.vc = valid_cache(self.cache_file, self.cache_ttl)
- if self.cache_ttl > 0 and self.vc != 0:
- try:
- self.buildPacketList()
- except:
- self.inv_cache = 1
- if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
- self.run = 0
- self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+ if not self.list_updating:
+ self.list_updating = True
+ self.setStatus("updating")
+ self.ipkg.startCmd(IpkgComponent.CMD_UPDATE) # sync opkg with the feeds
def go(self, returnValue=None):
- cur = self["list"].getCurrent()
- if cur:
+ if cur := self["list"].getCurrent():
status = cur[3]
package = cur[0]
- self.cmdList = []
+ self.wasRemove = False
if status == "installed":
- self.cmdList.append((IpkgComponent.CMD_REMOVE, {"package": package}))
- if len(self.cmdList):
- self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + package + "\n" + self.oktext)
+ self.wasRemove = True
+ self.cmd = (IpkgComponent.CMD_REMOVE, {"package": package})
+ self.session.openWithCallback(self.runCommand, MessageBox, _("Do you want to remove the package:\n") + package)
elif status == "upgradeable":
- self.cmdList.append((IpkgComponent.CMD_INSTALL, {"package": package}))
- if len(self.cmdList):
- self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to update the package:\n") + package + "\n" + self.oktext)
+ self.cmd = (IpkgComponent.CMD_INSTALL, {"package": package})
+ self.session.openWithCallback(self.runCommand, MessageBox, _("Do you want to update the package:\n") + package)
elif status == "installable":
- self.cmdList.append((IpkgComponent.CMD_INSTALL, {"package": package}))
- if len(self.cmdList):
- self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + package + "\n" + self.oktext)
+ self.cmd = (IpkgComponent.CMD_INSTALL, {"package": package})
+ self.session.openWithCallback(self.runCommand, MessageBox, _("Do you want to install the package:\n") + package)
- def runRemove(self, result):
- if result:
- self.session.openWithCallback(self.runRemoveFinished, Ipkg, cmdList=self.cmdList)
-
- def runRemoveFinished(self):
- self.session.openWithCallback(self.RemoveReboot, MessageBox, _("Removal has completed.") + "\n" + _("Do you want to reboot your receiver?"), MessageBox.TYPE_YESNO)
-
- def RemoveReboot(self, result):
- if result is None:
- return
- if not result:
- cur = self["list"].getCurrent()
- if cur:
- item = self["list"].getIndex()
- self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], "installable")
- self.cachelist[item] = [cur[0], cur[1], cur[2], "installable"]
- self["list"].setList(self.list)
- write_cache(self.cache_file, self.cachelist)
- self.reloadPluginlist()
+ def runCommand(self, result):
if result:
- self.session.open(TryQuitMainloop, retvalue=3)
+ self.session.openWithCallback(self.runCommandFinished, Ipkg, cmdList=[self.cmd])
- def runUpgrade(self, result):
- if result:
- self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList=self.cmdList)
-
- def runUpgradeFinished(self):
- self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Update has completed.") + "\n" + _("Do you want to reboot your receiver?"), MessageBox.TYPE_YESNO)
-
- def UpgradeReboot(self, result):
- if result is None:
- return
- if not result:
- cur = self["list"].getCurrent()
- if cur:
- item = self["list"].getIndex()
- self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], "installed")
- self.cachelist[item] = [cur[0], cur[1], cur[2], "installed"]
- self["list"].setList(self.list)
- write_cache(self.cache_file, self.cachelist)
- self.reloadPluginlist()
+ def runCommandFinished(self):
+ msg = _("Removal has completed.") if self.wasRemove else _("Update has completed.")
+ self.session.openWithCallback(self.Reboot, MessageBox, msg + "\n" + _("Do you want to reboot your receiver?"), MessageBox.TYPE_YESNO)
+
+ def Reboot(self, result):
if result:
self.session.open(TryQuitMainloop, retvalue=3)
+ elif cur := self["list"].getCurrent():
+ self.list[self.list.index(cur)] = self.buildEntryComponent(cur[0], cur[1], cur[2], "installable" if self.wasRemove else "installed")
+ self.filterList()
+ self.reloadPluginlist()
def ipkgCallback(self, event, param):
if event == IpkgComponent.EVENT_ERROR:
@@ -287,11 +158,12 @@ def ipkgCallback(self, event, param):
elif event == IpkgComponent.EVENT_DONE:
if self.list_updating:
self.list_updating = False
- if not self.Console:
- self.Console = Console()
- cmd = self.ipkg.ipkg + " list"
- self.Console.ePopen(cmd, self.OpkgList_Finished)
- pass
+ self.buildList()
+
+ def buildList(self):
+ self.setStatus("loading")
+ cmd = self.ipkg.ipkg + " list"
+ self.Console.ePopen(cmd, self.OpkgList_Finished)
def OpkgList_Finished(self, result, retval, extra_args=None):
if result:
@@ -315,80 +187,50 @@ def OpkgList_Finished(self, result, retval, extra_args=None):
last_packet = self.packetlist[-1]
last_packet[2] = last_packet[2] + x
self.packetlist[:-1] + last_packet
-
- if not self.Console:
- self.Console = Console()
cmd = self.ipkg.ipkg + " list_installed"
self.Console.ePopen(cmd, self.OpkgListInstalled_Finished)
def OpkgListInstalled_Finished(self, result, retval, extra_args=None):
if result:
- self.installed_packetlist = {}
- for x in result.splitlines():
- tokens = x.split(" - ")
- name = tokens[0].strip()
- if not any(name.endswith(x) for x in self.unwanted_extensions):
- l = len(tokens)
- version = l > 1 and tokens[1].strip() or ""
- self.installed_packetlist[name] = version
- if not self.Console:
- self.Console = Console()
- cmd = "opkg list-upgradable"
+ self.installed_packetlist = self.parseResult(result)
+ cmd = self.ipkg.ipkg + " list-upgradable"
self.Console.ePopen(cmd, self.OpkgListUpgradeable_Finished)
def OpkgListUpgradeable_Finished(self, result, retval, extra_args=None):
if result:
- self.upgradeable_packages = {}
- for x in result.splitlines():
- tokens = x.split(" - ")
- name = tokens[0].strip()
- if not any(name.endswith(x) for x in self.unwanted_extensions):
- l = len(tokens)
- version = l > 2 and tokens[2].strip() or ""
- self.upgradeable_packages[name] = version
+ self.upgradeable_packages = self.parseResult(result)
self.buildPacketList()
+ def parseResult(self, result):
+ packages = {}
+ for x in result.splitlines():
+ tokens = x.split(" - ")
+ name = tokens[0].strip()
+ if not any(name.endswith(x) for x in self.unwanted_extensions):
+ l = len(tokens)
+ version = l > 1 and tokens[-1].strip() or ""
+ packages[name] = version
+ return packages
+
def buildEntryComponent(self, name, version, description, state):
- divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "div-h.png"))
- if not description:
- description = "No description available."
- if state == "installed":
- return ((name, version, _(description), state, self.installedpng, divpng))
- elif state == "upgradeable":
- return ((name, version, _(description), state, self.upgradeablepng, divpng))
- else:
- return ((name, version, _(description), state, self.installablepng, divpng))
+ description = _(description) if description else _("No description available.")
+ png = state == "installed" and self.installedpng or state == "upgradeable" and self.upgradeablepng or self.installablepng
+ return ((name, version, description, state, png, self.divpng))
def buildPacketList(self):
self.list = []
- self.cachelist = []
self.i = 0
- if self.cache_ttl > 0 and self.vc != 0:
- print("Loading packagelist cache from ", self.cache_file)
- try:
- self.cachelist = load_cache(self.cache_file)
- if len(self.cachelist) > 0:
- for x in self.cachelist:
- self.list.append(self.buildEntryComponent(x[0], x[1], x[2], x[3]))
- self["list"].setList(self.list)
- except:
- self.inv_cache = 1
-
- if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
- print("rebuilding fresh package list")
- for x in self.packetlist:
- status = ""
- if x[0] in self.installed_packetlist:
- if x[0] in self.upgradeable_packages:
- status = "upgradeable"
- else:
- status = "installed"
+ for x in self.packetlist:
+ status = ""
+ if x[0] in self.installed_packetlist:
+ if x[0] in self.upgradeable_packages:
+ status = "upgradeable"
else:
- status = "installable"
- self.list.append(self.buildEntryComponent(x[0], x[1], x[2], status))
- self.cachelist.append([x[0], x[1], x[2], status])
- write_cache(self.cache_file, self.cachelist)
- self["list"].setList(self.list)
+ status = "installed"
+ else:
+ status = "installable"
+ self.list.append(self.buildEntryComponent(x[0], x[1], x[2], status))
+ self["list"].setList(self.list)
self.updateTexts()
def filterPrev(self):
@@ -401,15 +243,7 @@ def filterNext(self):
def filterList(self):
if self.list:
- filter = self.getCurrentFilter()
- if filter == "All":
- self["list"].setList(self.list)
- elif filter == "Installed":
- self["list"].setList([x for x in self.list if x[4] is self.installedpng])
- elif filter == "Upgradeable":
- self["list"].setList([x for x in self.list if x[4] is self.upgradeablepng])
- elif filter == "Installable":
- self["list"].setList([x for x in self.list if x[4] is self.installablepng])
+ self["list"].setList(self.list if (filter := self.getCurrentFilter()) == "all" else [x for x in self.list if x[3] == filter])
self.updateTexts()
def getCurrentFilter(self):
@@ -419,15 +253,8 @@ def updateTexts(self):
if self.list:
self["filterActions"].setEnabled(True)
self.title = _("Package manager") + " - " + self.filters[self.getCurrentFilter()]
- self["key_green"].text = _("Refresh list")
self["key_previous"].text = _("PREVIOUS")
self["key_next"].text = _("NEXT")
- else:
- self["filterActions"].setEnabled(False)
- self.title = _("Package manager")
- self["key_green"].text = ""
- self["key_previous"].text = ""
- self["key_next"].text = ""
def reloadPluginlist(self):
plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
diff --git a/lib/python/Plugins/SystemPlugins/OBH/images/installable.png b/lib/python/Plugins/SystemPlugins/OBH/images/installable.png
deleted file mode 100644
index f52b66c25b..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/images/installable.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/images/installed.png b/lib/python/Plugins/SystemPlugins/OBH/images/installed.png
deleted file mode 100644
index 479088db9c..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/images/installed.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/images/remove.png b/lib/python/Plugins/SystemPlugins/OBH/images/remove.png
deleted file mode 100644
index 28b29c0553..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/images/remove.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/images/upgrade.png b/lib/python/Plugins/SystemPlugins/OBH/images/upgrade.png
deleted file mode 100644
index 860d3f1360..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/images/upgrade.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/images/upgradeable.png b/lib/python/Plugins/SystemPlugins/OBH/images/upgradeable.png
deleted file mode 100644
index a75373c2b7..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/images/upgradeable.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/install.png b/lib/python/Plugins/SystemPlugins/OBH/install.png
deleted file mode 100644
index 1287c35a68..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/install.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/installable.png b/lib/python/Plugins/SystemPlugins/OBH/installable.png
deleted file mode 100644
index 09baa812ce..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/installable.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/installed.png b/lib/python/Plugins/SystemPlugins/OBH/installed.png
deleted file mode 100644
index 75dfc4f33a..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/installed.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/noprev.png b/lib/python/Plugins/SystemPlugins/OBH/noprev.png
deleted file mode 100644
index 0a7cf2b480..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/noprev.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/remove.png b/lib/python/Plugins/SystemPlugins/OBH/remove.png
deleted file mode 100644
index 4d00781e5f..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/remove.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/update.png b/lib/python/Plugins/SystemPlugins/OBH/update.png
deleted file mode 100644
index 0ece6c76a7..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/update.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/upgrade.png b/lib/python/Plugins/SystemPlugins/OBH/upgrade.png
deleted file mode 100644
index 135058409c..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/upgrade.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/OBH/upgradeable.png b/lib/python/Plugins/SystemPlugins/OBH/upgradeable.png
deleted file mode 100644
index 1702177f7b..0000000000
Binary files a/lib/python/Plugins/SystemPlugins/OBH/upgradeable.png and /dev/null differ