1 # -*- coding: UTF-8 -*-
2 from Screens.Screen import Screen
3 from Screens.ChoiceBox import ChoiceBox
4 from Screens.InfoBarGenerics import InfoBarNotifications, InfoBarSeek, InfoBarShowHide, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarSubtitleSupport
6 from Components.ActionMap import ActionMap
8 from Tools.Log import Log
9 from MediaPlayerLCDScreen import MediaPlayerLCDScreen
11 class MoviePlayer(Screen, InfoBarNotifications, InfoBarSeek, InfoBarShowHide, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarSubtitleSupport):
12 ENABLE_RESUME_SUPPORT = True
15 def __init__(self, session, service, infoCallback=None, getNextService=None, getPrevService=None, stopCallback=None):
16 Screen.__init__(self, session)
17 InfoBarNotifications.__init__(self)
18 InfoBarSeek.__init__(self)
19 InfoBarShowHide.__init__(self)
20 InfoBarAudioSelection.__init__(self)
21 InfoBarSubtitleSupport.__init__(self)
22 InfoBarCueSheetSupport.__init__(self)
24 # currently we just want to be able to resume playback (if supported by e2),
25 # for now we don't care about cutting or jumpmarks or anything like that...
26 del self["CueSheetActions"]
28 self.session = session
29 self.service = service
30 self.infoCallback = infoCallback
31 self.getNextServiceCB = getNextService
32 self.getPrevServiceCB = getPrevService
33 self.stopCB = stopCallback
35 self.screen_timeout = 5000
36 self.nextservice = None
37 self.is_closing = False
39 self["actions"] = ActionMap(["MediaCenterActions"],
41 "cancel": self.leavePlayer,
42 "stop": self.leavePlayer,
43 "playpauseService": self.playpauseService,
44 "previous": self.playPrev,
45 "next": self.playNext,
46 # "showentInfo": self.showVideoInfo,
49 self.returning = False
52 self.onShown.append(self.play)
53 self.onClose.append(self.__onClose)
56 if self.stopCB != None:
58 self.session.nav.stopService()
60 def createSummary(self):
61 return MediaPlayerLCDScreen
64 if self.getNextServiceCB != None:
65 newservice = self.getNextServiceCB()
66 Log.i("newservice is %s" % newservice)
68 self.playService(newservice)
71 self.leavePlayerConfirmed([True, "quit"])
74 if self.getPrevServiceCB != None:
75 newservice = self.getPrevServiceCB()
76 Log.i("newservice is %s" % newservice)
78 self.playService(newservice)
80 self.leavePlayerConfirmed([True, "quit"])
84 if self.state != self.STATE_IDLE:
88 def playService(self, newservice):
90 self.service = newservice
94 text = self.service.getPath()
95 text = text.split('/')[-1]
96 Log.i("text=%s" % text)
97 self.summaries.setText(text, 3)
99 self.session.nav.playService(self.service)
101 self.checkSkipShowHideLock()
103 def stopCurrent(self):
105 self.session.nav.stopService()
107 def showVideoInfo(self):
108 if self.infoCallback != None:
109 self.infoCallback(self.service)
111 def handleLeave(self, ask=True, error=False, title=_("Choose an action")):
112 self.is_closing = True
114 list = [(_("Close the player"), "quit"),
115 (_("Play this video again"), "playAgain")]
117 if self.getNextServiceCB != None:
118 list.append((_("Play the next video"), "playnext"))
119 if self.getPrevServiceCB != None:
120 list.append((_("Play the previous video"), "playprev"))
123 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=title, list=list)
125 self.session.openWithCallback(self.leavePlayerConfirmed, ChoiceBox, title=_("This video cannot be played! Choose an action"), list=list)
127 self.leavePlayerConfirmed([True, "quit"])
129 def leavePlayer(self):
132 def leavePlayerConfirmed(self, answer):
133 answer = answer and answer[1]
137 elif answer == "playnext":
140 elif answer == "playprev":
143 elif answer == "playAgain":
146 def doEofInternal(self, playing):
151 self.handleLeave(title=_("End of video. Close the Player?"))