1 from Tools.Profile import profile, profile_final
3 from Screen import Screen
6 from enigma import iPlayableService
8 profile("LOAD:ChannelSelectionRadio")
9 from Screens.ChannelSelection import ChannelSelectionRadio
10 profile("LOAD:MovieSelection")
11 from Screens.MovieSelection import MovieSelection
12 profile("LOAD:ChoiceBox")
13 from Screens.ChoiceBox import ChoiceBox
15 profile("LOAD:InfoBarGenerics")
16 from Screens.InfoBarGenerics import InfoBarShowHide, \
17 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \
18 InfoBarEPG, InfoBarSeek, InfoBarInstantRecord, \
19 InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, \
20 InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift, \
21 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
22 InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
23 InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport
25 profile("LOAD:InitBar_Components")
26 from Components.ActionMap import HelpableActionMap
27 from Components.config import config
28 from Components.ServiceEventTracker import ServiceEventTracker
30 profile("LOAD:HelpableScreen")
31 from Screens.HelpMenu import HelpableScreen
33 class InfoBar(InfoBarShowHide,
34 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
35 InfoBarInstantRecord, InfoBarAudioSelection,
36 HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
37 InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
38 InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
39 InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport,
44 def __init__(self, session):
45 Screen.__init__(self, session)
47 self["actions"] = HelpableActionMap(self, "InfobarActions",
49 "showMovies": (self.showMovies, _("Play recorded movies...")),
50 "showRadio": (self.showRadio, _("Show the radio player...")),
51 "showTv": (self.showTv, _("Show the tv player...")),
54 for x in HelpableScreen, \
56 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \
57 InfoBarInstantRecord, InfoBarAudioSelection, \
58 InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
59 InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
60 InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarSleepTimer, \
61 InfoBarPlugins, InfoBarServiceErrorPopupSupport:
64 self.helpList.append((self["actions"], "InfobarActions", [("showMovies", _("view recordings..."))]))
65 self.helpList.append((self["actions"], "InfobarActions", [("showRadio", _("hear radio..."))]))
67 self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
69 iPlayableService.evUpdatedEventInfo: self.__eventInfoChanged
72 self.current_begin_time=0
74 def __eventInfoChanged(self):
76 service = self.session.nav.getCurrentService()
77 old_begin_time = self.current_begin_time
78 info = service and service.info()
79 ptr = info and info.getEvent(0)
80 self.current_begin_time = ptr and ptr.getBeginTime() or 0
81 if config.usage.show_infobar_on_event_change.value:
82 if old_begin_time and old_begin_time != self.current_begin_time:
85 def __checkServiceStarted(self):
86 self.__serviceStarted(True)
87 self.onExecBegin.remove(self.__checkServiceStarted)
89 def serviceStarted(self): #override from InfoBarShowHide
90 new = self.servicelist.newServicePlayed()
92 InfoBarShowHide.serviceStarted(self)
93 self.current_begin_time=0
94 elif not self.__checkServiceStarted in self.onShown and new:
95 self.onShown.append(self.__checkServiceStarted)
97 def __checkServiceStarted(self):
99 self.onShown.remove(self.__checkServiceStarted)
102 self.showTvChannelList(True)
105 if config.usage.e1like_radio_mode.value:
106 self.showRadioChannelList(True)
108 self.rds_display.hide() # in InfoBarRdsDecoder
109 self.session.openWithCallback(self.ChannelSelectionRadioClosed, ChannelSelectionRadio, self)
111 def ChannelSelectionRadioClosed(self, *arg):
112 self.rds_display.show() # in InfoBarRdsDecoder
114 def showMovies(self):
115 self.session.openWithCallback(self.movieSelected, MovieSelection)
117 def movieSelected(self, service):
118 if service is not None:
119 self.session.open(MoviePlayer, service)
121 class MoviePlayer(InfoBarShowHide, \
123 InfoBarSeek, InfoBarShowMovies, InfoBarAudioSelection, HelpableScreen, InfoBarNotifications,
124 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView,
125 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, Screen, InfoBarTeletextPlugin,
126 InfoBarServiceErrorPopupSupport):
128 ENABLE_RESUME_SUPPORT = True
131 def __init__(self, session, service):
132 Screen.__init__(self, session)
134 self["actions"] = HelpableActionMap(self, "MoviePlayerActions",
136 "leavePlayer": (self.leavePlayer, _("leave movie player..."))
139 for x in HelpableScreen, InfoBarShowHide, InfoBarMenu, \
140 InfoBarSeek, InfoBarShowMovies, \
141 InfoBarAudioSelection, InfoBarNotifications, InfoBarSimpleEventView, \
142 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, \
143 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, \
144 InfoBarTeletextPlugin, InfoBarServiceErrorPopupSupport:
147 self.lastservice = self.session.nav.getCurrentlyPlayingServiceReference()
148 self.session.nav.playService(service)
149 self.returning = False
151 def leavePlayer(self):
152 self.is_closing = True
154 if config.usage.on_movie_stop.value == "ask":
156 list.append((_("Yes"), "quit"))
157 if config.usage.setup_level.index >= 2: # expert+
158 list.append((_("Yes, returning to movie list"), "movielist"))
159 list.append((_("No"), "continue"))
160 if config.usage.setup_level.index >= 2: # expert+
161 list.append((_("No, but restart from begin"), "restart"))
162 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list)
164 self.leavePlayerConfirmed([True, config.usage.on_movie_stop.value])
166 def leavePlayerConfirmed(self, answer):
167 answer = answer and answer[1]
169 self.session.nav.playService(self.lastservice)
170 config.movielist.last_videodir.cancel()
172 elif answer == "movielist":
173 ref = self.session.nav.getCurrentlyPlayingServiceReference()
174 self.returning = True
175 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
176 self.session.nav.playService(self.lastservice)
177 elif answer == "restart":
180 def doEofInternal(self, playing):
185 self.is_closing = True
186 if config.usage.on_movie_eof.value == "ask":
188 list.append((_("Yes"), "quit"))
189 if config.usage.setup_level.index >= 2: # expert+
190 list.append((_("Yes, returning to movie list"), "movielist"))
191 list.append((_("No"), "continue"))
192 if config.usage.setup_level.index >= 2: # expert+
193 list.append((_("No, but restart from begin"), "restart"))
194 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list)
196 self.leavePlayerConfirmed([True, config.usage.on_movie_eof.value])
198 def showMovies(self):
199 ref = self.session.nav.getCurrentlyPlayingServiceReference()
200 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
202 def movieSelected(self, service):
203 if service is not None:
204 self.is_closing = False
205 self.session.nav.playService(service)
206 self.returning = False