Skip to content

Commit

Permalink
Merge commit 'fe76d324dac6eac96a4794ce39dcf702df61e1b0' into Python3.11
Browse files Browse the repository at this point in the history
  • Loading branch information
Ev0-BH committed Jan 25, 2024
2 parents 07fe79e + fe76d32 commit 95a80d2
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 13 deletions.
7 changes: 7 additions & 0 deletions data/display800/skin_display_templates.xml
Expand Up @@ -437,5 +437,12 @@
<widget source="parent.summarytext" render="Label" position="40,0" size="720,100" foregroundColor="white" font="FdLcD;85" halign="center" valign="center" zPosition="2" />
<widget source="parent.summarylangname" render="Label" position="40,200" size="720,160" foregroundColor="white" font="FdLcDLight;65" halign="center" valign="top" zPosition="2" />
</screen>

<screen name="PackageManagerSummary" position="fill">
<widget source="Title" render="Label" position="top" size="*,180" font="FdLcD;60" halign="center" valign="center"/>
<widget source="parent.list" render="Label" position="fill" font="FdLcD;50" halign="center" valign="center">
<convert type="StringListSelection" />
</widget>
</screen>

</skin>
5 changes: 4 additions & 1 deletion lib/python/Components/Addons/Pager.py
Expand Up @@ -35,8 +35,11 @@ def onContainerShown(self):
if hasattr(self.source, "instance") and hasattr(self.source.instance, "setScrollbarMode"):
self.source.instance.setScrollbarMode(2)

if self.initPager not in self.source.onSelectionChanged:
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)

self.initPager()

GUI_WIDGET = eListbox
Expand Down
7 changes: 5 additions & 2 deletions lib/python/Plugins/SystemPlugins/OBH/ImageManager.py
Expand Up @@ -246,12 +246,15 @@ def __init__(self, session):
if self.selectionChanged not in self["list"].onSelectionChanged:
self["list"].onSelectionChanged.append(self.selectionChanged)

def createSummary(self):
from Screens.PluginBrowser import PluginBrowserSummary
return PluginBrowserSummary

def selectionChanged(self):
# Where is this used? self.onChangedEntry does not appear to be populated anywhere. Maybe dead code.
item = self["list"].getCurrent() # (name, link)
desc = self["backupstatus"].text
if item:
name = item[1]
name = item[0]
else:
name = ""
for cb in self.onChangedEntry:
Expand Down
79 changes: 69 additions & 10 deletions lib/python/Plugins/SystemPlugins/OBH/PackageManager.py
Expand Up @@ -13,7 +13,7 @@

from Screens.Ipkg import Ipkg
from Screens.MessageBox import MessageBox
from Screens.Screen import Screen
from Screens.Screen import Screen, ScreenSummary
from Screens.Standby import TryQuitMainloop

from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN
Expand Down Expand Up @@ -47,6 +47,11 @@ def load_cache(cache_file):
return pickle.load(open(cache_file, "rb"))


class PackageManagerSummary(ScreenSummary):
def __init__(self, session, parent):
ScreenSummary.__init__(self, session, parent=parent)


class PackageManager(Screen, NumericalTextInput):
skin = ["""
<screen name="PackageManager" position="center,center" size="%d,%d" title="Packet manager" >
Expand Down Expand Up @@ -85,15 +90,14 @@ class PackageManager(Screen, NumericalTextInput):
def __init__(self, session):
Screen.__init__(self, session)
NumericalTextInput.__init__(self)
self.setTitle(_("Package manager"))
self.title = _("Package manager")

self.setUseableChars("1234567890abcdefghijklmnopqrstuvwxyz")

self["shortcuts"] = NumberActionMap(["SetupActions", "InputAsciiActions"],
{
"ok": self.go,
"cancel": self.exit,
"save": self.reload,
"gotAsciiCode": self.keyGotAscii,
"1": self.keyNumberGlobal,
"2": self.keyNumberGlobal,
Expand All @@ -107,11 +111,21 @@ def __init__(self, session):
"0": self.keyNumberGlobal
}, -1)

self["filterActions"] = NumberActionMap(["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(_("Refresh list"))
self["key_green"] = StaticText()
self["key_previous"] = StaticText()
self["key_next"] = StaticText()

self.imagePath = "%s/images/" % os.path.dirname(os.path.realpath(__file__))
self.list_updating = True
Expand All @@ -125,6 +139,11 @@ def __init__(self, session):
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.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.ipkg = IpkgComponent()
self.ipkg.addCallback(self.ipkgCallback)
Expand Down Expand Up @@ -334,18 +353,16 @@ def buildEntryComponent(self, name, version, description, state):
if not description:
description = "No description available."
if state == "installed":
installedpng = LoadPixmap(cached=True, path=self.imagePath + "installed.png")
return ((name, version, _(description), state, installedpng, divpng))
return ((name, version, _(description), state, self.installedpng, divpng))
elif state == "upgradeable":
upgradeablepng = LoadPixmap(cached=True, path=self.imagePath + "upgradeable.png")
return ((name, version, _(description), state, upgradeablepng, divpng))
return ((name, version, _(description), state, self.upgradeablepng, divpng))
else:
installablepng = LoadPixmap(cached=True, path=self.imagePath + "installable.png")
return ((name, version, _(description), state, installablepng, divpng))
return ((name, version, _(description), state, self.installablepng, 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:
Expand All @@ -372,6 +389,48 @@ def buildPacketList(self):
self.cachelist.append([x[0], x[1], x[2], status])
write_cache(self.cache_file, self.cachelist)
self["list"].setList(self.list)
self.updateTexts()

def filterPrev(self):
self.i -= 1
self.filterList()

def filterNext(self):
self.i += 1
self.filterList()

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.updateTexts()

def getCurrentFilter(self):
return list(self.filters.keys())[self.i % len(self.filters)]

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))

def createSummary(self):
return PackageManagerSummary

0 comments on commit 95a80d2

Please sign in to comment.