# -*- coding: UTF-8 -*- from Screens.Screen import Screen from Screens.ChoiceBox import ChoiceBox from Screens.InfoBarGenerics import InfoBarNotifications, InfoBarSeek, InfoBarShowHide, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarSubtitleSupport from Components.ActionMap import ActionMap from Helpers import debug class MoviePlayer(Screen, InfoBarNotifications, InfoBarSeek, InfoBarShowHide, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarSubtitleSupport): ENABLE_RESUME_SUPPORT = True ALLOW_SUSPEND = True def __init__(self, session, service, restoreService = True, infoCallback = None, getNextService = None, getPrevService = None, stopCallback = None, pauseCallback = None): Screen.__init__(self, session) InfoBarNotifications.__init__(self) InfoBarSeek.__init__(self) InfoBarShowHide.__init__(self) InfoBarAudioSelection.__init__(self) InfoBarSubtitleSupport.__init__(self) InfoBarCueSheetSupport.__init__(self) #TODO FIX THIS HACK # currently we just want to be able to resume playback (if supported by e2), # for now we don't care about cutting or jumpmarks or anything like that... del self["CueSheetActions"] self.session = session self.service = service self.infoCallback = infoCallback self.getNextServiceCB = getNextService self.getPrevServiceCB = getPrevService self.stopCB = stopCallback self.pauseCB = pauseCallback self.callback = None self.screen_timeout = 5000 self.nextservice = None self.is_closing = False self.restoreService = restoreService self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() self["actions"] = ActionMap(["OkCancelActions", "InfobarSeekActions", "MediaPlayerActions", "MovieSelectionActions"], { "cancel": self.leavePlayer, "stop": self.leavePlayer, "playpauseService": self.playpause, "previous": self.playPrev, "next": self.playNext, "showEventInfo": self.showVideoInfo, }, -2) self.returning = False self.onShown.append(self.play) self.onClose.append(self.__onClose) def __onClose(self): if self.stopCB != None: self.stopCB() self.session.nav.stopService() if self.restoreService: self.session.nav.playService(self.oldService) def createSummary(self): return SimpleLCDScreen def playNext(self): if self.getNextServiceCB != None: newservice = self.getNextServiceCB() debug(self, "playNext", "newservice is %s" %newservice) if newservice: self.playService(newservice) return self.leavePlayerConfirmed([True, "quit"]) def playPrev(self): if self.getPrevServiceCB != None: newservice = self.getPrevServiceCB() debug(self, "playPrev", "newservice is %s" %newservice) if newservice: self.playService(newservice) self.leavePlayerConfirmed([True, "quit"]) def playAgain(self): print "playAgain" self.stopCurrent() self.play() def playService(self, newservice): self.stopCurrent() self.service = newservice self.play() def play(self): text = self.service.getPath() debug(self, "play", "path=%s" %text) text = text.split('/')[-1] debug(self, "play", "text=%s" %text) self.summaries.setText(text, 3) self.session.nav.playService(self.service) if self.shown: self.checkSkipShowHideLock() def playpause(self): self.playpauseService() if self.pauseCB != None: self.pauseCB(self.seekstate == self.SEEK_STATE_PLAY) def stopCurrent(self): print "stopCurrent" self.session.nav.stopService() if self.stopCB != None: self.stopCB() def showVideoInfo(self): if self.infoCallback != None: self.infoCallback(self.service) def handleLeave(self, ask = True, error = False): self.is_closing = True if ask: list = [(_("Yes"), "quit"), (_("No, but play video again"), "playAgain")] if self.getNextServiceCB != None: list.append( (_("Yes, but play next service"), "playnext") ) if self.getPrevServiceCB != None: list.append( (_("Yes, but play previous service"), "playprev") ) if error is False: self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("Stop playing this movie?"), list = list) else: self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("No playable video found! Stop playing this movie?"), list = list) else: self.leavePlayerConfirmed([True, "quit"]) def leavePlayer(self): self.handleLeave() def leavePlayerConfirmed(self, answer): answer = answer and answer[1] if answer == "quit": self.close() elif answer == "playnext": self.playNext() elif answer == "playprev": self.playPrev() elif answer == "playAgain": self.playAgain() def doEofInternal(self, playing): if not self.execing: return if not playing : return self.playNext() # -*- coding: UTF-8 -*- from Components.Label import Label from Screens.Screen import Screen class SimpleLCDScreen(Screen): skin = ( """ """, """ """) def __init__(self, session, parent): Screen.__init__(self, session) self["text1"] = Label("Playing") self["text2"] = Label("") self["text3"] = Label("") self["text4"] = Label("") def setText(self, text, line): if line == 1: if len(text) > 15: #TODO remove this hack if text[-4:-3] == ".": text = text[:-4] if len(text) > 15: text = text[-15:] else: if len(text) > 20: #TODO remove this hack if text[-4:-3] == ".": text = text[:-4] if len(text) > 20: text = text[-20:] textleer = " " text = text + textleer*10 if line == 1: self["text1"].setText(text) elif line == 2: self["text2"].setText(text) elif line == 3: self["text3"].setText(text) elif line == 4: self["text4"].setText(text)