Skip to content

Commit

Permalink
Refreshes the extensions menu if it displays a job with progress
Browse files Browse the repository at this point in the history
  • Loading branch information
Taapat authored and Huevos committed Oct 6, 2023
1 parent f5ada9b commit 108eb0b
Showing 1 changed file with 41 additions and 6 deletions.
47 changes: 41 additions & 6 deletions lib/python/Screens/InfoBarGenerics.py
Original file line number Diff line number Diff line change
Expand Up @@ -2688,6 +2688,38 @@ def __init__(self):
from Screens.PiPSetup import PiPSetup # noqa: E402


class ExtensionsList(ChoiceBox):
def __init__(self, session, clist, keys, refresh_list):
ChoiceBox.__init__(self, session, title=_("Please choose an extension..."), list=clist, keys=keys, skin_name="ExtensionsList", reorderConfig="extension_order", windowTitle=_("Extensions menu"))
if refresh_list:
self.refresh_timer = eTimer()
self.refresh_timer.callback.append(self.update_list)
self.refresh_timer.start(1000)

def update_list(self):
updated = False
removed = []
for idx, x in enumerate(self.list):
text = x[0][1][0]()
if x[0][0] != text: # Update text if changed
x[0] = (text, *x[0][1:])
x[1] = x[1][:7] + (text,)
self.summarylist[idx] = (self.summarylist[idx][0], text)
updated = True
elif not x[0][1][2](): # Remove job if not active
updated = True
removed.append(idx)
if updated:
for idx, x in enumerate(removed):
del self.list[x - idx]
del self.summarylist[x - idx]
self["list"].setList(self.list)
self.updateSummary(self["list"].getSelectionIndex())
if removed:
for f in self.onLayoutFinish: # For screen resize
exec(f)


class InfoBarExtensions:
EXTENSION_SINGLE = 0
EXTENSION_LIST = 1
Expand Down Expand Up @@ -2781,7 +2813,7 @@ def addExtension(self, extension, key=None, type=EXTENSION_SINGLE):

def updateExtension(self, extension, key=None):
self.extensionsList.append(extension)
if key is not None and key in self.extensionKeys:
if key not in (None, "refresh") and key in self.extensionKeys:
key = None

if key is None:
Expand All @@ -2808,22 +2840,22 @@ def showExtensionSelection(self):
self.updateExtensions()
extensionsList = self.extensionsList[:]
keys = []
list = []
clist = []
for x in self.availableKeys:
if x in self.extensionKeys:
entry = self.extensionKeys[x]
extension = self.extensionsList[entry]
if extension[2]():
name = str(extension[0]()) # noqa: F841 variable 'name' assigned, not used
list.append((extension[0](), extension))
clist.append((extension[0](), extension))
keys.append(x)
extensionsList.remove(extension)
else:
extensionsList.remove(extension)
list.extend([(x[0](), x) for x in extensionsList])
clist.extend([(x[0](), x) for x in extensionsList])

keys += [""] * len(extensionsList)
self.session.openWithCallback(self.extensionCallback, ChoiceBox, title=_("Please choose an extension"), list=list, keys=keys, skin_name="ExtensionsList", reorderConfig="extension_order")
self.session.openWithCallback(self.extensionCallback, ExtensionsList, clist=clist, keys=keys, refresh_list="refresh" in self.extensionKeys)

def extensionCallback(self, answer):
if answer is not None:
Expand Down Expand Up @@ -2966,7 +2998,7 @@ def __init__(self):

def getJobList(self):
if config.usage.jobtaskextensions.value:
return [((boundFunction(self.getJobName, job), boundFunction(self.showJobView, job), lambda: True), None) for job in job_manager.getPendingJobs()]
return [((boundFunction(self.getJobName, job), boundFunction(self.showJobView, job), boundFunction(self.isActiveJob, job)), "refresh") for job in job_manager.getPendingJobs()]
else:
return []

Expand All @@ -2978,6 +3010,9 @@ def showJobView(self, job):
job_manager.in_background = False
self.session.openWithCallback(self.JobViewCB, JobView, job)

def isActiveJob(self, job):
return job.status in (job.IN_PROGRESS, job.NOT_STARTED)

def JobViewCB(self, in_background):
job_manager.in_background = in_background

Expand Down

0 comments on commit 108eb0b

Please sign in to comment.