1 from Tools.Profile import profile
3 # workaround for required config entry dependencies.
4 from Screens.MovieSelection import MovieSelection
6 from Screen import Screen
9 from enigma import iPlayableService
11 profile("LOAD:InfoBarGenerics")
12 from Screens.InfoBarGenerics import InfoBarShowHide, \
13 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \
14 InfoBarEPG, InfoBarSeek, InfoBarInstantRecord, \
15 InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, \
16 InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift, \
17 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
18 InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
19 InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman
21 profile("LOAD:InitBar_Components")
22 from Components.ActionMap import HelpableActionMap
23 from Components.config import config
24 from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
26 profile("LOAD:HelpableScreen")
27 from Screens.HelpMenu import HelpableScreen
29 class InfoBar(InfoBarBase, InfoBarShowHide,
30 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
31 InfoBarInstantRecord, InfoBarAudioSelection,
32 HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
33 InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
34 InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
35 InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman,
41 def __init__(self, session):
42 Screen.__init__(self, session)
43 self["actions"] = HelpableActionMap(self, "InfobarActions",
45 "showMovies": (self.showMovies, _("Play recorded movies...")),
46 "showRadio": (self.showRadio, _("Show the radio player...")),
47 "showTv": (self.showTv, _("Show the tv player...")),
50 for x in HelpableScreen, \
51 InfoBarBase, InfoBarShowHide, \
52 InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \
53 InfoBarInstantRecord, InfoBarAudioSelection, \
54 InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
55 InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
56 InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarJobman, \
57 InfoBarSleepTimer, InfoBarPlugins, InfoBarServiceErrorPopupSupport:
60 self.helpList.append((self["actions"], "InfobarActions", [("showMovies", _("view recordings..."))]))
61 self.helpList.append((self["actions"], "InfobarActions", [("showRadio", _("hear radio..."))]))
63 self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
65 iPlayableService.evUpdatedEventInfo: self.__eventInfoChanged
68 self.current_begin_time=0
69 assert InfoBar.instance is None, "class InfoBar is a singleton class and just one instance of this class is allowed!"
70 InfoBar.instance = self
73 InfoBar.instance = None
75 def __eventInfoChanged(self):
77 service = self.session.nav.getCurrentService()
78 old_begin_time = self.current_begin_time
79 info = service and service.info()
80 ptr = info and info.getEvent(0)
81 self.current_begin_time = ptr and ptr.getBeginTime() or 0
82 if config.usage.show_infobar_on_event_change.value:
83 if old_begin_time and old_begin_time != self.current_begin_time:
86 def __checkServiceStarted(self):
87 self.__serviceStarted(True)
88 self.onExecBegin.remove(self.__checkServiceStarted)
90 def serviceStarted(self): #override from InfoBarShowHide
91 new = self.servicelist.newServicePlayed()
93 InfoBarShowHide.serviceStarted(self)
94 self.current_begin_time=0
95 elif not self.__checkServiceStarted in self.onShown and new:
96 self.onShown.append(self.__checkServiceStarted)
98 def __checkServiceStarted(self):
100 self.onShown.remove(self.__checkServiceStarted)
103 self.showTvChannelList(True)
106 if config.usage.e1like_radio_mode.value:
107 self.showRadioChannelList(True)
109 self.rds_display.hide() # in InfoBarRdsDecoder
110 from Screens.ChannelSelection import ChannelSelectionRadio
111 self.session.openWithCallback(self.ChannelSelectionRadioClosed, ChannelSelectionRadio, self)
113 def ChannelSelectionRadioClosed(self, *arg):
114 self.rds_display.show() # in InfoBarRdsDecoder
116 def showMovies(self):
117 from Screens.MovieSelection import MovieSelection
118 self.session.openWithCallback(self.movieSelected, MovieSelection)
120 def movieSelected(self, service):
121 if service is not None:
122 self.session.open(MoviePlayer, service)
124 class MoviePlayer(InfoBarBase, InfoBarShowHide, \
126 InfoBarSeek, InfoBarShowMovies, InfoBarAudioSelection, HelpableScreen, InfoBarNotifications,
127 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView,
128 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, Screen, InfoBarTeletextPlugin,
129 InfoBarServiceErrorPopupSupport, InfoBarExtensions, InfoBarPlugins):
131 ENABLE_RESUME_SUPPORT = True
134 def __init__(self, session, service):
135 Screen.__init__(self, session)
137 self["actions"] = HelpableActionMap(self, "MoviePlayerActions",
139 "leavePlayer": (self.leavePlayer, _("leave movie player..."))
142 for x in HelpableScreen, InfoBarShowHide, InfoBarMenu, \
143 InfoBarBase, InfoBarSeek, InfoBarShowMovies, \
144 InfoBarAudioSelection, InfoBarNotifications, InfoBarSimpleEventView, \
145 InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, \
146 InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, \
147 InfoBarTeletextPlugin, InfoBarServiceErrorPopupSupport, InfoBarExtensions, \
151 self.lastservice = self.session.nav.getCurrentlyPlayingServiceReference()
152 self.session.nav.playService(service)
153 self.returning = False
154 self.onClose.append(self.__onClose)
157 self.session.nav.playService(self.lastservice)
159 def handleLeave(self, how):
160 self.is_closing = True
163 list.append((_("Yes"), "quit"))
164 if config.usage.setup_level.index >= 2: # expert+
165 list.append((_("Yes, returning to movie list"), "movielist"))
166 if config.usage.setup_level.index >= 2: # expert+
167 list.append((_("Yes, and delete this movie"), "quitanddelete"))
168 list.append((_("No"), "continue"))
169 if config.usage.setup_level.index >= 2: # expert+
170 list.append((_("No, but restart from begin"), "restart"))
172 from Screens.ChoiceBox import ChoiceBox
173 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list)
175 self.leavePlayerConfirmed([True, how])
177 def leavePlayer(self):
178 self.handleLeave(config.usage.on_movie_stop.value)
180 def deleteConfirmed(self, answer):
182 self.leavePlayerConfirmed((True, "quitanddeleteconfirmed"))
184 def leavePlayerConfirmed(self, answer):
185 answer = answer and answer[1]
187 if answer in ["quitanddelete", "quitanddeleteconfirmed"]:
188 ref = self.session.nav.getCurrentlyPlayingServiceReference()
189 from enigma import eServiceCenter
190 serviceHandler = eServiceCenter.getInstance()
191 info = serviceHandler.info(ref)
192 name = info and info.getName(ref) or _("this recording")
194 if answer == "quitanddelete":
195 from Screens.MessageBox import MessageBox
196 self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Do you really want to delete %s?") % name)
199 if answer == "quitanddeleteconfirmed":
200 offline = serviceHandler.offlineOperations(ref)
201 if offline.deleteFromDisk(0):
202 from Screens.MessageBox import MessageBox
203 self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR)
206 if answer in ["quit", "quitanddeleteconfirmed"]:
207 config.movielist.last_videodir.cancel()
209 elif answer == "movielist":
210 ref = self.session.nav.getCurrentlyPlayingServiceReference()
211 self.returning = True
212 from Screens.MovieSelection import MovieSelection
213 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
214 self.session.nav.stopService()
215 elif answer == "restart":
218 def doEofInternal(self, playing):
223 self.handleLeave(config.usage.on_movie_eof.value)
225 def showMovies(self):
226 ref = self.session.nav.getCurrentlyPlayingServiceReference()
227 from Screens.MovieSelection import MovieSelection
228 self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
230 def movieSelected(self, service):
231 if service is not None:
232 self.is_closing = False
233 self.session.nav.playService(service)
234 self.returning = False