Index: ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/LICENSE
===================================================================
--- ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/LICENSE	(revision 14689)
+++ ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/LICENSE	(revision 14689)
@@ -0,0 +1,12 @@
+This plugin is licensed under the Creative Commons 
+Attribution-NonCommercial-ShareAlike 3.0 Unported 
+License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative
+Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+
+Alternatively, this plugin may be distributed and executed on hardware which
+is licensed by Dream Multimedia GmbH.
+
+This plugin is NOT free software. It is open source, you are allowed to
+modify it (if you keep the license), but it may not be commercially 
+distributed other than under the conditions noted above.
Index: ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/__init__.py
===================================================================
--- ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/__init__.py	(revision 14689)
+++ ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/__init__.py	(revision 14689)
@@ -0,0 +1,1 @@
+ 
Index: ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/keymap.xml
===================================================================
--- ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/keymap.xml	(revision 14689)
+++ ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/keymap.xml	(revision 14689)
@@ -0,0 +1,30 @@
+<keymap>
+	<map context="DVDPlayerActions">
+		<key id="KEY_MENU" mapto="dvdMenu" flags="m" />
+		<key id="KEY_INFO" mapto="toggleInfo" flags="m" />
+		<key id="KEY_CHANNELUP" mapto="nextTitle" flags="m" />
+		<key id="KEY_CHANNELDOWN" mapto="prevTitle" flags="m" />
+		<key id="KEY_YELLOW" mapto="dvdAudioMenu" flags="m"/>
+		<key id="KEY_BLUE" mapto="nextAudioTrack" flags="m"/>
+		<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+		<device name="dreambox remote control (native)">
+			<key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
+			<key id="KEY_NEXT" mapto="nextChapter" flags="m" />
+			<key id="KEY_TV" mapto="tv" flags="m" />
+			<key id="KEY_AUDIO" mapto="dvdAudioMenu" flags="m" />
+			<key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
+			<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+			<key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
+		</device>
+		<device name="dreambox advanced remote control (native)">
+			<key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
+			<key id="KEY_NEXT" mapto="nextChapter" flags="m" />
+			<key id="KEY_TV" mapto="tv" flags="m" />
+			<key id="KEY_STOP" mapto="tv" flags="m" />
+			<key id="KEY_RADIO" mapto="dvdAudioMenu" flags="l" />
+			<key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
+			<key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+			<key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
+		</device>
+	</map>
+</keymap>
Index: ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.py
===================================================================
--- ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.py	(revision 14689)
+++ ipk/source/players_dvdplayer_1_0/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.py	(revision 14689)
@@ -0,0 +1,885 @@
+from os import path as os_path, remove as os_remove, listdir as os_listdir, system
+from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys, getDesktop, eAVSwitch, eConsoleAppContainer, evfd
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
+from Screens.HelpMenu import HelpableScreen
+from Screens.InfoBarGenerics import InfoBarSubtitleSupport, InfoBarAudioSelection, InfoBarSecondInfobar, InfoBarResolutionSelection, InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications
+from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
+from Components.Label import Label
+from Components.Pixmap import Pixmap
+from Components.FileList import FileList
+from Components.MenuList import MenuList
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
+from Components.config import config
+from Tools.Directories import pathExists, fileExists
+from Components.Harddisk import harddiskmanager
+from Components.Console import Console
+from Components.config import config, ConfigYesNo, ConfigSubsection
+try:
+	from Plugins.Extensions.MediaCenter.GlobalFunctions import InfoBarAspectSelection
+except:
+	pass
+import servicedvd # load c++ part of dvd player plugin
+import os
+import time
+
+config.plugins.DVDPlayer = ConfigSubsection()
+config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=False)
+
+lastpath = "/media/"
+tmppolicy = "None"
+
+def command(comandline):
+	comandline = comandline + " >/tmp/command.txt"
+	os.system(comandline)
+	text = ""
+	if os.path.exists("/tmp/command.txt") is True:
+		file = open("/tmp/command.txt", "r")
+		for line in file:
+			text = text + line.strip() + '\n'
+		file.close
+	# if one or last line then remove linefeed
+	if text[-1:] == '\n': text = text[:-1]
+	comandline = text
+	os.system("rm /tmp/command.txt")
+	return comandline
+
+boxversion = command('cat /etc/model')
+
+global HDskin
+global KSskin
+HDskin = False
+KSskin = False
+try:
+	skin_w = getDesktop(0).size().width()
+	if skin_w == 1280:
+		HDskin = True
+		KSskin = False
+	elif skin_w == 1024:
+		HDskin = False
+		KSskin = True
+	else:
+		HDskin = False
+		KSskin = False
+except:
+	HDskin = False
+	KSskin = False
+
+def applySkinVars(skin,dict):
+	for key in dict.keys():
+		try:
+			skin = skin.replace('{'+key+'}',dict[key])
+		except Exception,e:
+			print e,"@key=",key
+	return skin
+
+def tryOpen(filename):
+	try:
+		procFile = open(filename)
+	except IOError:
+		return ""
+	return procFile
+		
+class FileBrowser(Screen):
+	skin = """
+		<screen name="FileBrowser" position="center,center" size="520,376" title="DVD File Browser" >
+			<widget name="filelist" position="0,0" size="520,376" scrollbarMode="showOnDemand" />
+		</screen>"""
+
+	def __init__(self, session, dvd_filelist = [ ]):
+		Screen.__init__(self, session)
+
+		self.dvd_filelist = dvd_filelist
+		if len(dvd_filelist):	
+			self["filelist"] = MenuList(self.dvd_filelist)
+		else:
+			global lastpath
+			if lastpath is not None:
+				currDir = lastpath
+			else:
+				currDir = "/media/dvd/"
+			if not pathExists(currDir):
+				currDir = "/"
+
+			self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(iso)", useServiceRef = True)
+			self["filelist"] = self.filelist
+
+		self["FilelistActions"] = ActionMap(["OkCancelActions"],
+			{
+				"ok": self.ok,
+				"cancel": self.exit
+			})
+
+	def ok(self):
+		if len(self.dvd_filelist):
+			print "OK " + self["filelist"].getCurrent()
+			self.close(self["filelist"].getCurrent())
+		else:
+			global lastpath
+			filename = self["filelist"].getFilename()
+			if filename is not None:
+				if filename.upper().endswith("VIDEO_TS/"):
+					print "dvd structure found, trying to open..."
+					dvdpath = filename[0:-9]
+					lastpath = (dvdpath.rstrip("/").rsplit("/",1))[0]
+					print "lastpath video_ts/=", lastpath
+					self.close(dvdpath)
+					return
+			if self["filelist"].canDescent(): # isDir
+				self["filelist"].descent()
+				pathname = self["filelist"].getCurrentDirectory() or ""
+				if fileExists(pathname+"VIDEO_TS.IFO"):
+					print "dvd structure found, trying to open..."
+					lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
+					print "lastpath video_ts.ifo=", lastpath
+					self.close(pathname)
+			else:
+				lastpath = filename[0:filename.rfind("/")]
+				print "lastpath directory=", lastpath
+				self.close(filename)
+
+	def exit(self):
+		self.close(None)
+
+class DVDSummary(Screen):
+	skin = """
+	<screen position="0,0" size="132,64">
+		<widget source="session.CurrentService" render="Label" position="5,4" size="120,28" font="Regular;12" transparent="1" >
+			<convert type="ServiceName">Name</convert>
+		</widget>
+		<widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;12" transparent="1" />
+		<widget name="Chapter" position="72,30" size="54,16" font="Regular;12" transparent="1" halign="right" />
+		<widget source="session.CurrentService" render="Label" position="66,46" size="60,18" font="Regular;16" transparent="1" halign="right" >
+			<convert type="ServicePosition">Position</convert>
+		</widget>
+		<widget source="session.CurrentService" render="Progress" position="6,46" size="60,18" borderWidth="1" >
+			<convert type="ServicePosition">Position</convert>
+		</widget>
+	</screen>"""
+
+	def __init__(self, session, parent):
+		Screen.__init__(self, session, parent)
+
+		self["DVDPlayer"] = Label("DVD Player")
+		self["Title"] = Label("")
+		self["Time"] = Label("")
+		self["Chapter"] = Label("")
+
+	def updateChapter(self, chapter):
+		self["Chapter"].setText(chapter)
+
+	def setTitle(self, title):
+		self["Title"].setText(title)
+
+class DVDOverlay(Screen):
+	def __init__(self, session, args = None):
+		desktop_size = getDesktop(0).size()
+		DVDOverlay.skin = """<screen name="DVDOverlay" position="0,0" size="%d,%d" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />""" %(desktop_size.width(), desktop_size.height())
+		Screen.__init__(self, session)
+
+class ChapterZap(Screen):
+	skin = """
+	<screen name="ChapterZap" position="center,center" size="250,60" title="Chapter" >
+		<widget name="chapter" position="35,15" size="110,25" font="Regular;23" />
+		<widget name="number" position="145,15" size="80,25" halign="right" font="Regular;23" />
+	</screen>"""
+
+	def quit(self):
+		self.Timer.stop()
+		self.close(0)
+
+	def keyOK(self):
+		self.Timer.stop()
+		self.close(int(self["number"].getText()))
+
+	def keyNumberGlobal(self, number):
+		self.Timer.start(3000, True)		#reset timer
+		self.field = self.field + str(number)
+		self["number"].setText(self.field)
+		if len(self.field) >= 4:
+			self.keyOK()
+
+	def __init__(self, session, number):
+		Screen.__init__(self, session)
+		self.field = str(number)
+
+		self["chapter"] = Label(_("Chapter:"))
+
+		self["number"] = Label(self.field)
+
+		self["actions"] = NumberActionMap( [ "SetupActions" ],
+			{
+				"cancel": self.quit,
+				"ok": self.keyOK,
+				"1": self.keyNumberGlobal,
+				"2": self.keyNumberGlobal,
+				"3": self.keyNumberGlobal,
+				"4": self.keyNumberGlobal,
+				"5": self.keyNumberGlobal,
+				"6": self.keyNumberGlobal,
+				"7": self.keyNumberGlobal,
+				"8": self.keyNumberGlobal,
+				"9": self.keyNumberGlobal,
+				"0": self.keyNumberGlobal
+			})
+
+		self.Timer = eTimer()
+		self.Timer.callback.append(self.keyOK)
+		self.Timer.start(3000, True)
+
+class DVDPlayer(Screen, InfoBarBase, InfoBarSubtitleSupport, InfoBarAudioSelection, InfoBarNotifications, InfoBarSeek, InfoBarPVRState, InfoBarShowHide, HelpableScreen, InfoBarCueSheetSupport, InfoBarAspectSelection, InfoBarSecondInfobar, InfoBarResolutionSelection):
+#	ALLOW_SUSPEND = True
+	ENABLE_RESUME_SUPPORT = True
+	skin = """
+		<screen name="DVDPlayer" flags="wfNoBorder" position="center,433" size="824,110" title="InfoBar" backgroundColor="#42000000">
+			<eLabel backgroundColor="#32000000" position="694,0" size="130,180" zPosition="1"/>
+			<eLabel backgroundColor="#32000000" position="0,0" size="693,35" zPosition="1"/>
+			<ePixmap position="712,10" zPosition="3" size="94,58" backgroundColor="transparent" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaCenter/skins/Default/images/AAF-MC.png" alphatest="on" transparent="1"/>
+			<widget source="session.CurrentService" render="Progress" position="155,60" size="339,8" zPosition="3" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaCenter/skins/Default/images/icons/progress_mp.png">
+				<convert type="ServicePosition">Position</convert>
+			</widget>
+			<ePixmap position="155,70" zPosition="2" size="339,17" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaCenter/skins/Default/images/icons/mp-scale2.png" alphatest="on"/>
+			<widget source="session.CurrentService" render="Label" position="10,6" size="550,23" valign="top" halign="left" zPosition="3" font="Regular;18" transparent="1">
+				<convert type="ServiceName">Name</convert>
+			</widget>
+			<widget source="session.CurrentService" render="Label" position="570,6" size="110,23" font="Regular;21" halign="right" backgroundColor="#251e1f20" foregroundColor="#f0f0f0" zPosition="3" transparent="1">
+				<convert type="ServicePosition">Length</convert>
+			</widget>
+			<widget source="session.CurrentService" render="Label" position="60,53" size="85,30" font="Regular;21" halign="right" backgroundColor="#251e1f20" foregroundColor="#f0f0f0" zPosition="3" transparent="1">
+				<convert type="ServicePosition">Position</convert>
+			</widget>
+			<widget source="session.CurrentService" render="Label" position="505,53" size="80,26" font="Regular;21" halign="left" backgroundColor="#251e1f20" foregroundColor="#f0f0f0" zPosition="3" transparent="1">
+				<convert type="ServicePosition">Remaining</convert>
+			</widget>
+			<widget source="global.CurrentTime" render="Label" position="695,77" zPosition="3" size="85,25" font="Regular;23" transparent="1" foregroundColor="#DBDBDB" halign="right" backgroundColor="#3A0000">
+				<convert type="ClockToText">Format:%H:%M</convert>
+			</widget>
+		</screen>
+	</screen>"""
+
+	def save_infobar_seek_config(self):
+		self.saved_config_speeds_forward = config.seek.speeds_forward.value
+		self.saved_config_speeds_backward = config.seek.speeds_backward.value
+		self.saved_config_enter_forward = config.seek.enter_forward.value
+		self.saved_config_enter_backward = config.seek.enter_backward.value
+		self.saved_config_seek_on_pause = config.seek.on_pause.value
+		self.saved_config_seek_speeds_slowmotion = config.seek.speeds_slowmotion.value
+
+	def change_infobar_seek_config(self):
+		config.seek.speeds_forward.value = [2, 4, 8, 16, 32, 64]
+		config.seek.speeds_backward.value = [8, 16, 32, 64]
+		config.seek.speeds_slowmotion.value = [ ]
+		config.seek.enter_forward.value = "2"
+		config.seek.enter_backward.value = "2"
+		config.seek.on_pause.value = "play"
+
+	def restore_infobar_seek_config(self):
+		config.seek.speeds_forward.value = self.saved_config_speeds_forward
+		config.seek.speeds_backward.value = self.saved_config_speeds_backward
+		config.seek.speeds_slowmotion.value = self.saved_config_seek_speeds_slowmotion
+		config.seek.enter_forward.value = self.saved_config_enter_forward
+		config.seek.enter_backward.value = self.saved_config_enter_backward
+		config.seek.on_pause.value = self.saved_config_seek_on_pause
+
+	def __init__(self, session, dvd_device = None, dvd_filelist = [ ], args = None):
+		try:
+			if HDskin:
+				pos_w = 280
+				pos_h = 500
+			elif KSskin:
+				pos_w = 152
+				pos_h = 380
+			else:
+				pos_w = 0
+				pos_h = 380
+		except:
+			pos_w = 0
+			pos_h = 380
+		
+		self.dict = {
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				}
+		self.skin = applySkinVars(DVDPlayer.skin,self.dict)
+
+		self.debug = command('cat /var/etc/autostart/start-config | grep debug | cut -d = -f2')
+
+		config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=True)
+
+		Screen.__init__(self, session)
+		config.SecondInfobar.Enabled = ConfigYesNo(default=False)
+		InfoBarBase.__init__(self)
+		InfoBarNotifications.__init__(self)
+		InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
+		InfoBarShowHide.__init__(self)
+		HelpableScreen.__init__(self)
+		InfoBarSecondInfobar.__init__(self)
+		InfoBarAspectSelection.__init__(self)
+		InfoBarAudioSelection.__init__(self)
+		InfoBarSubtitleSupport.__init__(self)
+		self.save_infobar_seek_config()
+		self.change_infobar_seek_config()
+		InfoBarSeek.__init__(self)
+		InfoBarPVRState.__init__(self)
+		self.dvdScreen = self.session.instantiateDialog(DVDOverlay)
+
+		self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
+		self.session.nav.stopService()
+		self["audioLabel"] = Label("n/a")
+		self["subtitleLabel"] = Label("")
+		self["angleLabel"] = Label("")
+		self["chapterLabel"] = Label("")
+		self["anglePix"] = Pixmap()
+		self["anglePix"].hide()
+		self.last_audioTuple = None
+		self.last_subtitleTuple = None
+		self.last_angleTuple = None
+		self.totalChapters = 0
+		self.currentChapter = 0
+		self.totalTitles = 0
+		self.currentTitle = 0
+
+		self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
+			{
+				iPlayableService.evStopped: self.__serviceStopped,
+				iPlayableService.evUser: self.__timeUpdated,
+				iPlayableService.evUser+1: self.__statePlay,
+				iPlayableService.evUser+2: self.__statePause,
+				iPlayableService.evUser+3: self.__osdFFwdInfoAvail,
+				iPlayableService.evUser+4: self.__osdFBwdInfoAvail,
+				iPlayableService.evUser+5: self.__osdStringAvail,
+				iPlayableService.evUser+6: self.__osdAudioInfoAvail,
+				iPlayableService.evUser+7: self.__osdSubtitleInfoAvail,
+				iPlayableService.evUser+8: self.__chapterUpdated,
+				iPlayableService.evUser+9: self.__titleUpdated,
+				iPlayableService.evUser+11: self.__menuOpened,
+				iPlayableService.evUser+12: self.__menuClosed,
+				iPlayableService.evUser+13: self.__osdAngleInfoAvail
+			})
+
+		self["DVDPlayerDirectionActions"] = ActionMap(["DirectionActions"],
+			{
+				#MENU KEY DOWN ACTIONS
+				"left": self.keyLeft,
+				"right": self.keyRight,
+				"up": self.keyUp,
+				"down": self.keyDown,
+
+				#MENU KEY REPEATED ACTIONS
+				"leftRepeated": self.doNothing,
+				"rightRepeated": self.doNothing,
+				"upRepeated": self.doNothing,
+				"downRepeated": self.doNothing,
+
+				#MENU KEY UP ACTIONS
+				"leftUp": self.doNothing,
+				"rightUp": self.doNothing,
+				"upUp": self.doNothing,
+				"downUp": self.doNothing,
+			})
+
+		self["OkCancelActions"] = ActionMap(["OkCancelActions"],
+			{
+				"ok": self.keyOk,
+			})
+
+		self["DVDPlayerPlaybackActions"] = HelpableActionMap(self, "DVDPlayerActions",
+			{
+				#PLAYER ACTIONS
+				"dvdMenu": (self.enterDVDMenu, _("show DVD main menu")),
+				"toggleInfo": (self.toggleInfo, _("toggle time, chapter, audio, subtitle info")),
+				"nextChapter": (self.nextChapter, _("forward to the next chapter")),
+				"prevChapter": (self.prevChapter, _("rewind to the previous chapter")),
+				"nextTitle": (self.nextTitle, _("jump forward to the next title")),
+				"prevTitle": (self.prevTitle, _("jump back to the previous title")),
+				"tv": (self.askLeavePlayer, _("exit DVD player or return to file browser")),
+				"dvdAudioMenu": (self.enterDVDAudioMenu, _("(show optional DVD audio menu)")),
+				"nextAudioTrack": (self.nextAudioTrack, _("switch to the next audio track")),
+				"nextSubtitleTrack": (self.nextSubtitleTrack, _("switch to the next subtitle language")),
+				"nextAngle": (self.nextAngle, _("switch to the next angle")),
+				"seekBeginning": self.seekBeginning,
+				"leavePlayer": (self.keyCancel, _("leave movie player...")),
+			}, -2)
+			
+		self["NumberActions"] = NumberActionMap( [ "NumberActions"],
+			{
+				"1": self.keyNumberGlobal,
+				"2": self.keyNumberGlobal,
+				"3": self.keyNumberGlobal,
+				"4": self.keyNumberGlobal,
+				"5": self.keyNumberGlobal,
+				"6": self.keyNumberGlobal,
+				"7": self.keyNumberGlobal,
+				"8": self.keyNumberGlobal,
+				"9": self.keyNumberGlobal,
+				"0": self.keyNumberGlobal,
+			})
+
+		self["ChannelSelectEditActions"] = ActionMap(["ChannelSelectEditActions"],
+			{
+				"contextMenu": self.enterDVDMenu,	
+			})
+
+		self["ChannelSelectEPGActions"] = ActionMap(["ChannelSelectEPGActions"],
+			{
+				"showEPGList": self.enterDVDAudioMenu,
+			})
+
+		self["DvdActions"] = ActionMap(["DvdActions"],
+			{
+				"stop": self.keyCancel,
+				"subtitles": self.subtitleSelection,
+				"prevBouquet": self.prevChapter,
+				"nextBouquet": self.nextChapter,
+				"blue": self.sleepTimer,
+				"red": self.videoTune,
+				"yellow": self.audioSelection,
+				"blue": self.sleepTimer,
+			})
+
+		self.onClose.append(self.__onClose)
+
+		from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+		hotplugNotifier.append(self.hotplugCB)
+		
+		if dvd_device:
+			self.physicalDVD = True
+		else:
+			self.scanHotplug()
+
+		self.dvd_filelist = dvd_filelist
+		self.onFirstExecBegin.append(self.opened)
+		self.service = None
+		self.in_menu = False
+
+	def sleepTimer(self):
+		from Screens.SleepTimerEdit import SleepTimerEdit
+		self.session.open(SleepTimerEdit)
+
+	def videoTune(self):
+		if os_path.isfile("/usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/plugin.pyc") is True:
+			try:
+				from Plugins.Extensions.Aafpanel.plugin import VideoTuneMain
+				self.session.open(VideoTuneMain)
+			except:
+				pass
+
+	def subtitleSelection(self):
+		if self.debug != "off":
+			print "[MC_VideoPlayer] start subtitleSelection"
+		from Screens.AudioSelection import SubtitleSelection
+		self.session.open(SubtitleSelection, self)
+
+	def audioSelection(self):
+		if self.debug != "off":
+			print "[MC_VideoPlayer] start audioSelection"
+		from Screens.AudioSelection import AudioSelection
+		self.session.openWithCallback(self.audioSelected, AudioSelection, infobar=self)		
+
+	def videoSelection(self):
+		if self.debug != "off":
+			print "[MC_VideoPlayer] start videoSelection"
+		from Screens.InfoBarGenerics import InfoBarAudioSelection
+		self.session.open(self.aspectSelection)
+
+	def change_ratio(self):
+		print "change ratio by obi"		
+		policy_input = open("/proc/stb/video/policy", "r")
+		policy = policy_input.read()
+		policy_input.close()
+
+		print "VideoModeLight policy current", policy
+
+		global tmppolicy
+		print "VideoModeLight tmppolicy current", tmppolicy
+
+		if tmppolicy == "None": 
+			tmppolicy = policy
+												
+		if tmppolicy.find("letterbox") != -1:
+			print "VideoModeLight set policy letterbox"
+			tmppolicy = "non"
+#			os.system('echo letterbox > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(0)
+			self.session.open(MessageBox, 'LETTERBOX', MessageBox.TYPE_WARNING, timeout=2)
+
+		elif tmppolicy.find("non") != -1:
+			print "VideoModeLight set policy non"
+			tmppolicy = "panscan"
+#			os.system('echo non > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(3)
+			self.session.open(MessageBox, 'NONLINEAR', MessageBox.TYPE_WARNING, timeout=2)
+
+		elif tmppolicy.find("panscan") != -1:
+			print "VideoModeLight set policy panscan"
+			tmppolicy = "bestfit"
+#			os.system('echo panscan > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(1)
+			self.session.open(MessageBox, 'PANSCAN', MessageBox.TYPE_WARNING, timeout=2)			
+
+		elif tmppolicy.find("bestfit") != -1:
+			print "VideoModeLight set policy bestfit"
+			tmppolicy = "letterbox"
+#			os.system('echo bestfit > /proc/stb/video/policy')
+			eAVSwitch.getInstance().setAspectRatio(2)
+			self.session.open(MessageBox, 'BESTFIT', MessageBox.TYPE_WARNING, timeout=2)
+
+
+	def keyNumberGlobal(self, number):
+		print "You pressed number " + str(number)
+		self.session.openWithCallback(self.numberEntered, ChapterZap, number)
+
+	def numberEntered(self, retval):
+#		print self.servicelist
+		if retval > 0:
+			self.zapToNumber(retval)
+
+	def getServiceInterface(self, iface):
+		service = self.service
+		if service:
+			attr = getattr(service, iface, None)
+			if callable(attr):
+				return attr()
+		return None
+
+	def __serviceStopped(self):
+		self.dvdScreen.hide()
+		subs = self.getServiceInterface("subtitle")
+		if subs:
+			subs.disableSubtitles(self.session.current_dialog.instance)
+
+	def serviceStarted(self): #override InfoBarShowHide function
+		self.dvdScreen.show()
+
+	def doEofInternal(self, playing):
+		if self.in_menu:
+			self.hide()
+
+	def __menuOpened(self):
+		self.hide()
+		self.in_menu = True
+		self["NumberActions"].setEnabled(False)
+
+	def __menuClosed(self):
+		self.show()
+		self.in_menu = False
+		self["NumberActions"].setEnabled(True)
+
+	def setChapterLabel(self):
+		chapterLCD = "Menu"
+		chapterOSD = "DVD Menu"
+		if self.currentTitle > 0:
+			chapterLCD = "%s %d" % (_("Chap."), self.currentChapter)
+			chapterOSD = "DVD %s %d/%d" % (_("Chapter"), self.currentChapter, self.totalChapters)
+			chapterOSD += " (%s %d/%d)" % (_("Title"), self.currentTitle, self.totalTitles)
+		self["chapterLabel"].setText(chapterOSD)
+		try:
+			self.session.summary.updateChapter(chapterLCD)
+		except:
+			pass
+
+	def doNothing(self):
+		pass
+
+	def toggleInfo(self):
+		if not self.in_menu:
+			self.toggleShow()
+
+	def __timeUpdated(self):
+		print "timeUpdated"
+
+	def __statePlay(self):
+		print "statePlay"
+
+	def __statePause(self):
+		print "statePause"
+
+	def __osdFFwdInfoAvail(self):
+		self.setChapterLabel()
+		print "FFwdInfoAvail"
+
+	def __osdFBwdInfoAvail(self):
+		self.setChapterLabel()
+		print "FBwdInfoAvail"
+
+	def __osdStringAvail(self):
+		print "StringAvail"
+
+	def __osdAudioInfoAvail(self):
+		info = self.getServiceInterface("info")
+		audioTuple = info and info.getInfoObject(iServiceInformation.sUser+6)
+		print "AudioInfoAvail ", repr(audioTuple)
+		if audioTuple:
+			audioString = "%d: %s (%s)" % (audioTuple[0],audioTuple[1],audioTuple[2])
+			self["audioLabel"].setText(audioString)
+			if audioTuple != self.last_audioTuple and not self.in_menu:
+				self.doShow()
+		self.last_audioTuple = audioTuple
+
+	def __osdSubtitleInfoAvail(self):
+		info = self.getServiceInterface("info")
+		subtitleTuple = info and info.getInfoObject(iServiceInformation.sUser+7)
+		print "SubtitleInfoAvail ", repr(subtitleTuple)
+		if subtitleTuple:
+			subtitleString = ""
+			if subtitleTuple[0] is not 0:
+				subtitleString = "%d: %s" % (subtitleTuple[0],subtitleTuple[1])
+			self["subtitleLabel"].setText(subtitleString)
+			if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
+				self.doShow()
+		self.last_subtitleTuple = subtitleTuple
+	
+	def __osdAngleInfoAvail(self):
+		info = self.getServiceInterface("info")
+		angleTuple = info and info.getInfoObject(iServiceInformation.sUser+8)
+		print "AngleInfoAvail ", repr(angleTuple)
+		if angleTuple:
+			angleString = ""
+			if angleTuple[1] > 1:
+				angleString = "%d / %d" % (angleTuple[0],angleTuple[1])
+				self["anglePix"].show()
+			else:
+				self["anglePix"].hide()
+			self["angleLabel"].setText(angleString)
+			if angleTuple != self.last_angleTuple and not self.in_menu:
+				self.doShow()
+		self.last_angleTuple = angleTuple
+
+	def __chapterUpdated(self):
+		info = self.getServiceInterface("info")
+		if info:
+			self.currentChapter = info.getInfo(iServiceInformation.sCurrentChapter)
+			self.totalChapters = info.getInfo(iServiceInformation.sTotalChapters)
+			self.setChapterLabel()
+			print "__chapterUpdated: %d/%d" % (self.currentChapter, self.totalChapters)
+
+	def __titleUpdated(self):
+		info = self.getServiceInterface("info")
+		if info:
+			self.currentTitle = info.getInfo(iServiceInformation.sCurrentTitle)
+			self.totalTitles = info.getInfo(iServiceInformation.sTotalTitles)
+			self.setChapterLabel()
+			print "__titleUpdated: %d/%d" % (self.currentTitle, self.totalTitles)
+			if not self.in_menu:
+				self.doShow()
+		
+	def askLeavePlayer(self):
+		choices = [(_("Yes"), "exit"), (_("No"), "play")]
+		self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Stop playing this movie ?"), list = choices)	
+
+	def sendKey(self, key):
+		keys = self.getServiceInterface("keys")
+		if keys:
+			keys.keyPressed(key)
+		return keys
+
+	def nextAudioTrack(self):
+		self.sendKey(iServiceKeys.keyUser)
+
+	def nextSubtitleTrack(self):
+		self.sendKey(iServiceKeys.keyUser+1)
+
+	def enterDVDAudioMenu(self):
+		self.sendKey(iServiceKeys.keyUser+2)
+
+	def nextChapter(self):
+		self.sendKey(iServiceKeys.keyUser+3)
+
+	def prevChapter(self):
+		self.sendKey(iServiceKeys.keyUser+4)
+
+	def nextTitle(self):
+		self.sendKey(iServiceKeys.keyUser+5)
+
+	def prevTitle(self):
+		self.sendKey(iServiceKeys.keyUser+6)
+
+	def enterDVDMenu(self):
+		self.sendKey(iServiceKeys.keyUser+7)
+	
+	def nextAngle(self):
+		self.sendKey(iServiceKeys.keyUser+8)
+
+	def seekBeginning(self):
+		if self.service:
+			seekable = self.getSeek()
+			if seekable:
+				seekable.seekTo(0)
+
+	def zapToNumber(self, number):
+		if self.service:
+			seekable = self.getSeek()
+			if seekable:
+				print "seek to chapter %d" % number
+				seekable.seekChapter(number)
+
+#	MENU ACTIONS
+	def keyRight(self):
+		self.sendKey(iServiceKeys.keyRight)
+
+	def keyLeft(self):
+		self.sendKey(iServiceKeys.keyLeft)
+
+	def keyUp(self):
+		self.sendKey(iServiceKeys.keyUp)
+
+	def keyDown(self):
+		self.sendKey(iServiceKeys.keyDown)
+
+	def keyOk(self):
+		if self.sendKey(iServiceKeys.keyOk) and not self.in_menu:
+#			self.toggleInfo()
+			self.change_ratio()
+
+	def keyCancel(self):
+		self.askLeavePlayer()
+
+	def opened(self):
+		if len(self.dvd_filelist) == 1:
+			# opened via autoplay
+			print "self.FileBrowserClosed(self.dvd_filelist[0])", self.FileBrowserClosed(self.dvd_filelist[0])
+			self.FileBrowserClosed(self.dvd_filelist[0])
+		elif self.physicalDVD:
+			# opened from menu with dvd in drive
+			self.session.openWithCallback(self.playPhysicalCB, MessageBox, text=_("Do you want to play DVD in drive?"), timeout=5 )
+		else:
+			# opened from menu without dvd in drive
+			self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, self.dvd_filelist)
+
+	def playPhysicalCB(self, answer):
+		if answer == True:
+			self.FileBrowserClosed(harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()))
+		else:
+			self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+
+	def showFileInfo(self):
+		print "skip"
+		
+	def FileBrowserClosed(self, val):
+		curref = self.session.nav.getCurrentlyPlayingServiceReference()
+		print "FileBrowserClosed", val
+		if val is None:
+			self.askLeavePlayer()
+		else:
+			newref = eServiceReference(4369, 0, val)
+			if curref is None or curref != newref:
+				self.session.nav.playService(newref)
+				self.service = self.session.nav.getCurrentService()
+				subs = self.getServiceInterface("subtitle")
+				if subs:
+					subs.enableSubtitles(self.dvdScreen.instance, None)
+
+	def exitCB(self, answer):
+		if answer is not None:
+			if answer[1] == "exit":
+				if self.service:
+					self.service = None
+				config.SecondInfobar.Enabled = ConfigYesNo(default=True)
+				config.plugins.DVDPlayer.Enabled = ConfigYesNo(default=False)
+				config.plugins.DVDPlayer.save()
+				self.close()
+
+ 			if answer[1] == "loaddvd":
+ 				os.system('mount /dev/sr0 /media/dvd')
+ 				self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+			if answer[1] == "ejectdvd":
+				os.system('umount /media/dvd')
+				os.system('eject /dev/sr0')
+				self.session.openWithCallback(self.FileBrowserClosed, FileBrowser)
+
+	def __onClose(self):
+		self.restore_infobar_seek_config()
+		self.session.nav.playService(self.oldService)
+		from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+		hotplugNotifier.remove(self.hotplugCB)
+
+	def playLastCB(self, answer): # overwrite infobar cuesheet function
+		print "playLastCB", answer, self.resume_point
+		if self.service:
+			if answer == True:
+				seekable = self.getSeek()
+				if seekable:
+					seekable.seekTo(self.resume_point)
+			pause = self.service.pause()
+			pause.unpause()
+		self.hideAfterResume()
+
+	def showAfterCuesheetOperation(self):
+		if not self.in_menu:
+			self.show()
+
+	def createSummary(self):
+		return DVDSummary
+
+#override some InfoBarSeek functions
+	def doEof(self):
+		self.setSeekState(self.SEEK_STATE_PLAY)
+
+	def calcRemainingTime(self):
+		return 0
+
+	def hotplugCB(self, dev, media_state):
+		print "[hotplugCB]", dev, media_state
+		if dev == harddiskmanager.getCD():
+			if media_state == "1":
+				self.scanHotplug()
+			else:
+				self.physicalDVD = False
+
+	def scanHotplug(self):
+		devicepath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
+		if pathExists(devicepath):
+			from Components.Scanner import scanDevice
+			res = scanDevice(devicepath)
+			list = [ (r.description, r, res[r], self.session) for r in res ]
+			if list:
+				(desc, scanner, files, session) = list[0]
+				for file in files:
+					print file
+					if file.mimetype == "video/x-dvd":
+						print "physical dvd found:", devicepath
+						self.physicalDVD = True
+						return
+		self.physicalDVD = False
+
+from Plugins.Plugin import PluginDescriptor
+
+def filescan_open(list, session, **kwargs):
+	if len(list) == 1 and list[0].mimetype == "video/x-dvd":
+		splitted = list[0].path.split('/')
+		print "splitted", splitted
+		if len(splitted) > 2:
+			if splitted[1] == 'autofs':
+				session.open(DVDPlayer, dvd_device="/dev/%s" %(splitted[2]))
+				return
+			else:
+				print "splitted[0]", splitted[1]
+	else:
+		dvd_filelist = []
+		for x in list:
+			if x.mimetype == "video/x-dvd-iso":
+				dvd_filelist.append(x.path)
+			if x.mimetype == "video/x-dvd":
+				dvd_filelist.append(x.path.rsplit('/',1)[0])			
+		session.open(DVDPlayer, dvd_filelist=dvd_filelist)
+
+def filescan(**kwargs):
+	from Components.Scanner import Scanner, ScanPath
+
+	# Overwrite checkFile to only detect local
+	class LocalScanner(Scanner):
+		def checkFile(self, file):
+			return fileExists(file.path)
+
+	return [
+		LocalScanner(mimetypes = ["video/x-dvd","video/x-dvd-iso"],
+			paths_to_scan =
+				[
+					ScanPath(path = "video_ts", with_subdirs = False),
+					ScanPath(path = "VIDEO_TS", with_subdirs = False),
+					ScanPath(path = "", with_subdirs = False),
+				],
+			name = "DVD",
+			description = _("Play DVD"),
+			openfnc = filescan_open,
+		)]
