Skip to content

Commit 1a9127a

Browse files
committed
[Navigation]
* use cache for getAnyRecordingsCount, getIndicatorRecordingsCount and getRealRecordingsCount * add new activeStreamings
1 parent 69d302e commit 1a9127a

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

lib/python/Navigation.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from os.path import exists
33
from time import ctime, time
44

5-
from enigma import eServiceCenter, eServiceReference, eTimer, getBestPlayableServiceReference, iPlayableService, iServiceInformation, iRecordableServicePtr, pNavigation
5+
from enigma import eServiceCenter, eServiceReference, eStreamServer, eTimer, getBestPlayableServiceReference, iPlayableService, iServiceInformation, iRecordableService, iRecordableServicePtr, pNavigation
66

77
import NavigationInstance
88
import RecordTimer
@@ -45,9 +45,14 @@ def __init__(self, wakeupData=None):
4545
raise NavigationInstance.instance
4646
NavigationInstance.instance = self # This is needed to prevent circular imports
4747
self.ServiceHandler = eServiceCenter.getInstance()
48+
self.activeStreamings = []
49+
self.indicatorRecordingsCount = None
50+
self.anyRecordingsCount = None
51+
self.realRecordingsCount = None
4852
self.pnav = pNavigation()
4953
self.pnav.m_event.get().append(self.dispatchEvent)
5054
self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
55+
eStreamServer.getInstance().streamStatusChanged.get().append(self.streamStatusChangedCB)
5156
self.event = []
5257
self.record_event = []
5358
self.currentBouquetName = ""
@@ -284,6 +289,9 @@ def dispatchEvent(self, i):
284289

285290
def dispatchRecordEvent(self, rec_service, event):
286291
# print(f"[Navigation] Record_event {rec_service}, {event}.")
292+
self.anyRecordingsCount = None
293+
self.indicatorRecordingsCount = None
294+
self.realRecordingsCount = None
287295
for x in self.record_event:
288296
x(rec_service, event)
289297

@@ -497,8 +505,25 @@ def stopRecordService(self, service):
497505
ret = self.pnav and self.pnav.stopRecordService(service)
498506
return ret
499507

508+
def streamStatusChangedCB(self, status, sref):
509+
recService = iRecordableServicePtr() # This is only a dummy variable
510+
if status == 0:
511+
self.activeStreamings = [recService] # TODO: Check if this is correct. Add support for multiple streams.
512+
else:
513+
self.activeStreamings = []
514+
515+
self.anyRecordingsCount = None
516+
self.indicatorRecordingsCount = None
517+
self.realRecordingsCount = None
518+
519+
for x in self.record_event:
520+
x(recService, iRecordableService.evStart if status == 0 else iRecordableService.evEnd)
521+
500522
def getRecordings(self, simulate=False, type=pNavigation.isAnyRecording):
501-
return self.pnav and self.pnav.getRecordings(simulate, type)
523+
if ((type == pNavigation.isAnyRecording) or (type & pNavigation.isStreaming == pNavigation.isStreaming)) and self.activeStreamings:
524+
return self.pnav and self.pnav.getRecordings(simulate, type) + self.activeStreamings
525+
else:
526+
return self.pnav and self.pnav.getRecordings(simulate, type)
502527

503528
def getRecordingsServices(self, type=pNavigation.isAnyRecording):
504529
return self.pnav and self.pnav.getRecordingsServices(type)
@@ -544,13 +569,19 @@ def getCurrentService(self):
544569
return self.currentlyPlayingService
545570

546571
def getAnyRecordingsCount(self):
547-
return len(self.getRecordings(False, pNavigation.isAnyRecording))
572+
if self.anyRecordingsCount is None:
573+
self.anyRecordingsCount = len(self.getRecordings(False, pNavigation.isAnyRecording))
574+
return self.anyRecordingsCount
548575

549576
def getIndicatorRecordingsCount(self):
550-
return len(self.getRecordings(False, recType(config.recording.show_rec_symbol_for_rec_types.getValue())))
577+
if self.indicatorRecordingsCount is None:
578+
self.indicatorRecordingsCount = len(self.getRecordings(False, recType(config.recording.show_rec_symbol_for_rec_types.getValue())))
579+
return self.indicatorRecordingsCount
551580

552581
def getRealRecordingsCount(self):
553-
return len(self.getRecordings(False, pNavigation.isRealRecording))
582+
if self.realRecordingsCount is None:
583+
self.realRecordingsCount = len(self.getRecordings(False, pNavigation.isRealRecording))
584+
return self.realRecordingsCount
554585

555586
def stopService(self):
556587
if self.pnav:

0 commit comments

Comments
 (0)