from Screens.InputBox import InputBox
from Components.ActionMap import NumberActionMap, HelpableActionMap
from Components.Label import Label
-from Components.Pixmap import Pixmap
+from Components.Pixmap import Pixmap,MultiPixmap
from Components.Label import Label
from Components.FileList import FileList
from Components.MediaPlayer import PlayList
from Components.ServicePosition import ServicePositionGauge
from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS
-from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications
+from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport
from ServiceReference import ServiceReference
from Screens.ChoiceBox import ChoiceBox
from Screens.HelpMenu import HelpableScreen
self.default_pixmap = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
return Pixmap.applySkin(self, desktop, screen)
-class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, HelpableScreen):
+class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen):
ALLOW_SUSPEND = True
ENABLE_RESUME_SUPPORT = True
InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
InfoBarNotifications.__init__(self)
InfoBarBase.__init__(self)
+ InfoBarSubtitleSupport.__init__(self)
HelpableScreen.__init__(self)
self.summary = None
self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
self.addPlaylistParser(PlaylistIOInternal, "e2pls")
# 'None' is magic to start at the list of mountpoints
- self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+ self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|dat)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
self["filelist"] = self.filelist
self.playlist = MyPlayList()
self["genretext"] = Label(_("Genre:"))
self["genre"] = Label("")
self["coverArt"] = MediaPixmap()
+ self["repeat"] = MultiPixmap()
+ self.repeat = False
self.seek_target = None
class MoviePlayerActionMap(NumberActionMap):
"delete": (self.deletePlaylistEntry, _("delete playlist entry")),
"shift_stop": (self.clear_playlist, _("clear playlist")),
"shift_record": (self.playlist.PlayListShuffle, _("shuffle playlist")),
+ "subtitles": (self.subtitleSelection, _("Subtitle selection")),
}, -2)
self["InfobarEPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
self.coverArtFileName = ""
self.isAudioCD = False
self.AudioCD_albuminfo = {}
+ self.savePlaylistOnExit = True
self.playlistIOInternal = PlaylistIOInternal()
list = self.playlistIOInternal.open(resolveFilename(SCOPE_CONFIG, "playlist.e2pls"))
self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
{
- iPlayableService.evUpdatedInfo: self.__evUpdatedInfo
+ iPlayableService.evUpdatedInfo: self.__evUpdatedInfo,
+ iPlayableService.evUser+11: self.__evDecodeError
})
def doNothing(self):
self.playlistIOInternal.clear()
for x in self.playlist.list:
self.playlistIOInternal.addService(ServiceReference(x[0]))
- if not self.isAudioCD:
+ if self.savePlaylistOnExit:
self.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, "playlist.e2pls"))
self.close()
print "[__evUpdatedInfo] title %d of %d (%s)" % (currenttitle, totaltitles, sTitle)
self.readTitleInformation()
+ def __evDecodeError(self):
+ currPlay = self.session.nav.getCurrentService()
+ sVideoType = currPlay.info().getInfoString(iServiceInformation.sVideoType)
+ print "[__evDecodeError] video-codec %s can't be decoded by hardware" % (sVideoType)
+ self.session.open(MessageBox, _("This Dreambox can't decode %s video streams!") % sVideoType, type = MessageBox.TYPE_INFO,timeout = 10 )
+
def delMPTimer(self):
del self.rightKeyTimer
del self.leftKeyTimer
menu.append((_("save playlist"), "saveplaylist"));
menu.append((_("load playlist"), "loadplaylist"));
menu.append((_("delete saved playlist"), "deleteplaylist"));
+ menu.append((_("repeat playlist"), "repeat"));
self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
def menuCallback(self, choice):
self.delete_saved_playlist()
elif choice[1] == "shuffle":
self.playlist.PlayListShuffle()
-
+ elif choice[1] == "repeat":
+ if self.repeat == True:
+ self.repeat = False
+ self["repeat"].setPixmapNum(0)
+ else:
+ self.repeat = True
+ self["repeat"].setPixmapNum(1)
def showEventInformation(self):
from Screens.EventView import EventViewSimple
next = self.playlist.getCurrentIndex() + 1
if next < len(self.playlist):
self.changeEntry(next)
+ elif ( len(self.playlist) > 0 ) and ( self.repeat == True ):
+ self.stopEntry()
+ self.changeEntry(0)
def nextMarkOrEntry(self):
if not self.jumpPreviousNextMark(lambda x: x):
def pauseEntry(self):
self.pauseService()
- self.show()
+ if self.seekstate == self.SEEK_STATE_PAUSE:
+ self.show()
+ else:
+ self.hide()
def stopEntry(self):
self.playlist.stopFile()
def unPauseService(self):
self.setSeekState(self.SEEK_STATE_PLAY)
+
+ def subtitleSelection(self):
+ from Screens.Subtitles import Subtitles
+ self.session.open(Subtitles)
class MediaPlayerLCDScreen(Screen):
skin = """
from enigma import eServiceReference
mp = session.open(MediaPlayer)
+ mp.playlist.clear()
+ mp.savePlaylistOnExit = False
- mp.switchToPlayList()
for file in list:
- ref = eServiceReference(4097, 0, file.path)
+ if file.mimetype == "video/MP2T":
+ stype = 1
+ else:
+ stype = 4097
+ ref = eServiceReference(stype, 0, file.path)
mp.playlist.addFile(ref)
- # TODO: rather play first than last file?
- mp.playServiceRefEntry(ref)
- mp.playlist.updateList()
+ mp.changeEntry(0)
+ mp.switchToPlayList()
def audioCD_open(list, session, **kwargs):
from enigma import eServiceReference
mp = session.open(MediaPlayer)
mp.playlist.clear()
+ mp.savePlaylistOnExit = False
mp.isAudioCD = True
for file in list:
def filescan(**kwargs):
from Components.Scanner import Scanner, ScanPath
mediatypes = [
- Scanner(mimetypes = ["video/mpeg"],
+ Scanner(mimetypes = ["video/mpeg", "video/MP2T", "video/x-msvideo"],
paths_to_scan =
[
ScanPath(path = "", with_subdirs = False),
description = "View Movies...",
openfnc = filescan_open,
),
+ Scanner(mimetypes = ["video/x-vcd"],
+ paths_to_scan =
+ [
+ ScanPath(path = "mpegav", with_subdirs = False),
+ ],
+ name = "Video CD",
+ description = "View Video CD...",
+ openfnc = filescan_open,
+ ),
Scanner(mimetypes = ["audio/mpeg", "audio/x-wav", "application/ogg"],
paths_to_scan =
[
)]
try:
from Plugins.Extensions.CDInfo.plugin import Query
- mediatypes.append(Scanner(mimetypes = ["audio/x-cda", "audio/x-wav"],
+ mediatypes.append(
+ Scanner(mimetypes = ["audio/x-cda"],
paths_to_scan =
[
ScanPath(path = "", with_subdirs = False),