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, InfoBarBase
30 profile("LOAD:HelpableScreen")
31 from Screens.HelpMenu import HelpableScreen
33 class InfoBar(InfoBarBase, 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,
45 def __init__(self, session):
46 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, \
55 InfoBarBase, InfoBarShowHide, \
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
73 assert InfoBar.instance is None, "class InfoBar is a singleton class and just one instance of this class is allowed!"
74 InfoBar.instance = self
77 InfoBar.instance = None
79 def __eventInfoChanged(self):
81 service = self.session.nav.getCurrentService()
82 old_begin_time = self.current_begin_time
83 info = service and service.info()
84 ptr = info and info.getEvent(0)
85 self.current_begin_time = ptr and ptr.getBeginTime() or 0
86 if config.usage.show_infobar_on_event_change.value:
87 if old_begin_time and old_begin_time != self.current_begin_time:
90 def __checkServiceStarted(self):
91 self.__serviceStarted(True)
92 self.onExecBegin.remove(self.__checkServiceStarted)
94 def serviceStarted(self): #override from InfoBarShowHide
95 new = self.servicelist.newServicePlayed()
97 InfoBarShowHide.serviceStarted(self)
98 self.current_begin_time=0
99 elif not self.__checkServiceStarted in self.onShown and new:
100 self.onShown.append(self.__checkServiceStarted)
102 def __checkServiceStarted(self):
103 self.serviceStarted()
104 self.onShown.remove(self.__checkServiceStarted)
107 self.showTvChannelList(True)
110 if config.usage.e1like_radio_mode.value:
111 self.showRadioChannelList(True)
113 self.rds_display.hide() # in InfoBarRdsDecoder
114 self.session.openWithCallback(self.ChannelSelectionRadioClosed, ChannelSelectionRadio, self)
116 def ChannelSelectionRadioClosed(self, *arg):
117 self.rds_display.show() # in InfoBarRdsDecoder
119 def showMovies(self):
120 self.session.openWithCallback(self.movieSelected, MovieSelection)
122 def movieSelected(self, service):
123 if service is not None:
124 self.session.open(MoviePlayer, service)
126 class MoviePlayer(InfoBarBase, InfoBarShowHide, \
128 InfoBarSeek, InfoBarShowMovies, InfoBarAudioSelection, HelpableScreen, InfoBarNotifications,
129 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView,
130 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, Screen, InfoBarTeletextPlugin,
131 InfoBarServiceErrorPopupSupport):
133 ENABLE_RESUME_SUPPORT = True
136 def __init__(self, session, service):
137 Screen.__init__(self, session)
139 self["actions"] = HelpableActionMap(self, "MoviePlayerActions",
141 "leavePlayer": (self.leavePlayer, _("leave movie player..."))
144 for x in HelpableScreen, InfoBarShowHide, InfoBarMenu, \
145 InfoBarBase, InfoBarSeek, InfoBarShowMovies, \
146 InfoBarAudioSelection, InfoBarNotifications, InfoBarSimpleEventView, \
147 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, \
148 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, \
149 InfoBarTeletextPlugin, InfoBarServiceErrorPopupSupport:
152 self.lastservice = self.session.nav.getCurrentlyPlayingServiceReference()
153 self.session.nav.playService(service)
154 self.returning = False
155 self.onClose.append(self.__onClose)
158 self.session.nav.playService(self.lastservice)
160 def leavePlayer(self):
161 self.is_closing = True
163 if config.usage.on_movie_stop.value == "ask":
165 list.append((_("Yes"), "quit"))
166 if config.usage.setup_level.index >= 2: # expert+
167 list.append((_("Yes, returning to movie list"), "movielist"))
168 list.append((_("No"), "continue"))
169 if config.usage.setup_level.index >= 2: # expert+
170 list.append((_("No, but restart from begin"), "restart"))
171 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list)
173 self.leavePlayerConfirmed([True, config.usage.on_movie_stop.value])
175 def leavePlayerConfirmed(self, answer):
176 answer = answer and answer[1]
178 config.movielist.last_videodir.cancel()
180 elif answer == "movielist":
181 ref = self.session.nav.getCurrentlyPlayingServiceReference()
182 self.returning = True
183 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
184 elif answer == "restart":
187 def doEofInternal(self, playing):
192 self.is_closing = True
193 if config.usage.on_movie_eof.value == "ask":
195 list.append((_("Yes"), "quit"))
196 if config.usage.setup_level.index >= 2: # expert+
197 list.append((_("Yes, returning to movie list"), "movielist"))
198 list.append((_("No"), "continue"))
199 if config.usage.setup_level.index >= 2: # expert+
200 list.append((_("No, but restart from begin"), "restart"))
201 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list)
203 self.leavePlayerConfirmed([True, config.usage.on_movie_eof.value])
205 def showMovies(self):
206 ref = self.session.nav.getCurrentlyPlayingServiceReference()
207 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
209 def movieSelected(self, service):
210 if service is not None:
211 self.is_closing = False
212 self.session.nav.playService(service)
213 self.returning = False