|
2 | 2 | from os.path import exists |
3 | 3 | from time import ctime, time |
4 | 4 |
|
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 |
6 | 6 |
|
7 | 7 | import NavigationInstance |
8 | 8 | import RecordTimer |
@@ -45,9 +45,14 @@ def __init__(self, wakeupData=None): |
45 | 45 | raise NavigationInstance.instance |
46 | 46 | NavigationInstance.instance = self # This is needed to prevent circular imports |
47 | 47 | self.ServiceHandler = eServiceCenter.getInstance() |
| 48 | + self.activeStreamings = [] |
| 49 | + self.indicatorRecordingsCount = None |
| 50 | + self.anyRecordingsCount = None |
| 51 | + self.realRecordingsCount = None |
48 | 52 | self.pnav = pNavigation() |
49 | 53 | self.pnav.m_event.get().append(self.dispatchEvent) |
50 | 54 | self.pnav.m_record_event.get().append(self.dispatchRecordEvent) |
| 55 | + eStreamServer.getInstance().streamStatusChanged.get().append(self.streamStatusChangedCB) |
51 | 56 | self.event = [] |
52 | 57 | self.record_event = [] |
53 | 58 | self.currentBouquetName = "" |
@@ -284,6 +289,9 @@ def dispatchEvent(self, i): |
284 | 289 |
|
285 | 290 | def dispatchRecordEvent(self, rec_service, event): |
286 | 291 | # print(f"[Navigation] Record_event {rec_service}, {event}.") |
| 292 | + self.anyRecordingsCount = None |
| 293 | + self.indicatorRecordingsCount = None |
| 294 | + self.realRecordingsCount = None |
287 | 295 | for x in self.record_event: |
288 | 296 | x(rec_service, event) |
289 | 297 |
|
@@ -497,8 +505,25 @@ def stopRecordService(self, service): |
497 | 505 | ret = self.pnav and self.pnav.stopRecordService(service) |
498 | 506 | return ret |
499 | 507 |
|
| 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 | + |
500 | 522 | 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) |
502 | 527 |
|
503 | 528 | def getRecordingsServices(self, type=pNavigation.isAnyRecording): |
504 | 529 | return self.pnav and self.pnav.getRecordingsServices(type) |
@@ -544,13 +569,19 @@ def getCurrentService(self): |
544 | 569 | return self.currentlyPlayingService |
545 | 570 |
|
546 | 571 | 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 |
548 | 575 |
|
549 | 576 | 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 |
551 | 580 |
|
552 | 581 | 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 |
554 | 585 |
|
555 | 586 | def stopService(self): |
556 | 587 | if self.pnav: |
|
0 commit comments