Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/control
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/control	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/control	(revision 8775)
@@ -0,0 +1,10 @@
+Package: enigma2-plugin-swapmediacenter-vlcplayer
+Version: 2.6
+Architecture: sh4
+OE: VlcPlayer
+Section: players
+Priority: optional
+Maintainer: alex@laetsch.de
+Homepage: http://www.aaf-digital.info
+Source: http://www.aaf-digital.info
+Description: VlcPlayer Plugin to view videos over vlc! SWAPSTICK IS NEEDED!
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postinst
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postinst	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postinst	(revision 8775)
@@ -0,0 +1,12 @@
+#!/bin/sh
+TMP=/tmp/.VlcPlayer
+
+echo "successfully installed"
+echo "syncing disk"
+sync
+if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
+	SPACE=`df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1`
+	FREE=`expr $SPACE - 100`
+	echo new freespace size $FREE kb
+fi
+exit 0
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postrm
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postrm	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/postrm	(revision 8775)
@@ -0,0 +1,14 @@
+#!/bin/sh
+TMP=/tmp/.VlcPlayer
+PLUGINDIR=/var/swap/extensions/VlcPlayer
+rm -r $PLUGINDIR > /dev/null 2>&1
+
+echo "successfully removed"
+echo "syncing disk"
+sync
+if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
+	SPACE=`df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1`
+	FREE=`expr $SPACE - 100`
+	echo new freespace size $FREE kb
+fi
+exit 0
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/preinst
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/preinst	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/preinst	(revision 8775)
@@ -0,0 +1,55 @@
+#!/bin/sh
+#
+TMP=/tmp/.VlcPlayer
+echo "syncing disk"
+sync
+
+model=`cat /etc/model`
+
+echo""
+echo "Checking your Boxtype...."
+echo "Some Plugins will not work correctly on your $model!"
+echo ""
+if [ "$model" = "" ]; then
+	echo "Sorry! This Plugin is not available for your $model because it will not work correctly!!!"
+	echo "Aborting installation..."
+	exit 1
+else
+	echo "Boxtype: $model OK"
+fi
+
+if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
+	SPACE=`df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1`
+	FREE=`expr $SPACE - 100`
+	SIZE=180
+	echo "checking freespace"
+	echo packege size $SIZE kb
+	echo freespace size $FREE kb
+	if  [ "$FREE" -lt "$SIZE" ]; then
+		echo "sorry no freespace left on device"
+		exit 1
+	else
+		echo ok
+	fi
+fi 
+
+echo "checking swapstick"
+if [ ! -d /var/swap/extensions/ ]; then
+  echo "--------------------------"
+	echo "no swapstick found...."
+	echo "--------------------------"
+	exit 1
+fi
+echo "swapstick found...."
+
+echo "installing VlcPlayer plugin to Swapstick..."
+echo "checking OS"
+if  [ `cat /etc/motd | grep AAF | grep M | grep rev | wc -l` -eq 0 ]; then                      
+	echo ---------------------------
+	echo DONT USE this IPK Package!!
+	echo ---
+	echo Only for AAF Image!!
+	echo ---------------------------
+	exit 1
+fi
+exit 0
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/prerm
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/prerm	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/CONTROL/prerm	(revision 8775)
@@ -0,0 +1,11 @@
+#!/bin/sh
+TMP=/tmp/.VlcPlayer
+echo "syncing disk"
+sync
+if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
+	SPACE=`df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1`
+	FREE=`expr $SPACE - 100`
+	echo freespace size $FREE kb
+fi
+echo "removing Vlc plugin..."
+exit 0
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcFileList.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcFileList.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcFileList.py	(revision 8775)
@@ -0,0 +1,182 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+import re
+
+from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, gFont
+from Tools.LoadPixmap import LoadPixmap
+from Tools.Directories import SCOPE_SKIN_IMAGE, SCOPE_PLUGINS, resolveFilename
+from Components.MenuList import MenuList
+
+from pyexpat import ExpatError
+
+from skin import parseFont
+
+MEDIA_EXTENSIONS = {
+		"mp3": "music",
+		"wav": "music",
+		"ogg": "music",
+		"ts": "movie",
+		"avi": "movie",
+		"mpg": "movie",
+		"mpeg": "movie",
+		"wmv": "movie",
+		"mov": "movie",
+		"iso": "movie",
+		"mkv": "movie",
+		"flv": "movie"
+	}
+
+
+PLAYLIST_EXTENSIONS = {
+		"m3u": "playlist.png",
+		"pls": "playlist.png",
+		"xspf": "playlist.png",
+	}
+
+
+class VlcFileList(MenuList):
+	def __init__(self, getFilesAndDirsCB, baseDir, matchingPattern):
+		MenuList.__init__(self, list, False, eListboxPythonMultiContent)
+		self.font = gFont("Regular", 18)
+		self.l.setFont(0, self.font)
+		self.l.setItemHeight(23)
+		self.l.setBuildFunc(self.buildListboxEntry)
+		self.currentDirectory = baseDir
+		self.getFilesAndDirsCB = getFilesAndDirsCB
+		self.changeRegex(matchingPattern)
+
+	def applySkin(self, desktop, parent):
+		attribs = [ ]
+		if self.skinAttributes is not None:
+			for (attrib, value) in self.skinAttributes:
+				if attrib == "font":
+					self.font = parseFont(value, ((1,1),(1,1)))
+					self.l.setFont(0, self.font)
+				elif attrib == "itemHeight":
+					self.l.setItemHeight(int(value))
+				else:
+					attribs.append((attrib, value))
+			self.skinAttributes = attribs
+		return MenuList.applySkin(self, desktop, parent)
+
+	def buildListboxEntry(self, path, isDir, name):
+		size = self.l.getItemSize()
+		height = size.height()
+		res = [
+			(path, isDir, name),
+			(eListboxPythonMultiContent.TYPE_TEXT, height + 15, 0, size.width() - height - 15, height, 0, RT_HALIGN_LEFT, name)
+		]
+
+		if isDir:
+			png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+		else:
+			extension = name.split('.')
+			extension = extension[-1].lower()
+			if MEDIA_EXTENSIONS.has_key(extension):
+				png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + MEDIA_EXTENSIONS[extension] + ".png"))
+			elif PLAYLIST_EXTENSIONS.has_key(extension):
+				png = LoadPixmap(resolveFilename(SCOPE_PLUGINS, "Extensions/VlcPlayer/") + PLAYLIST_EXTENSIONS[extension])
+			else:
+				png = None
+
+		if png is not None:
+			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 0, height, height, png))
+
+		return res
+
+	def update(self):
+		success = False
+		filelistEntries = self.getFilesAndDirsCB(self.currentDirectory, self.regex)
+		fileEntries = []
+		directoryEntries = []
+		if filelistEntries is not None:
+			files, directories = filelistEntries
+			for file in files:
+				name, path = file
+				fileEntries.append((path, False, name))
+			for directory in directories:
+				name, path = directory
+				directoryEntries.append((path, True, name))
+			fileEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
+			directoryEntries.sort(cmp = lambda x, y: cmp(x[0], y[0]))
+			success = True
+		self.list = directoryEntries + fileEntries
+		self.l.setList(self.list)
+		self.moveToIndex(0)
+		return success
+
+	def isVideoTS(self):
+		for e in self.list:
+			if e[1] == True and e[0].upper().endswith("VIDEO_TS"):
+				return True
+		return False
+
+	def changeDirectory(self, directory):
+		previousDirectory = self.currentDirectory
+		self.currentDirectory = directory
+		try:
+			if self.update():
+				if self.isVideoTS():
+					ret = "dvdsimple://" + self.currentDirectory + "/VIDEO_TS", self.currentDirectory
+					self.currentDirectory = previousDirectory
+					self.update()
+				else:
+					ret = None, self.currentDirectory
+			else:
+				self.currentDirectory = previousDirectory
+				ret = None, None
+		except ExpatError, e:
+			print e
+			self.currentDirectory = previousDirectory
+			self.update()
+			ret = None, self.currentDirectory
+		return ret
+
+	def activate(self):
+		cur = self.getCurrent()
+		if cur is not None:
+			if cur[1]:
+				ret = self.changeDirectory(cur[0])
+			else:
+				ret = cur[0], cur[2]
+		else:
+			ret = None, None
+		return ret
+
+	def changeRegex(self, matchingPattern):
+		if matchingPattern is not None:
+			self.regex = re.compile(matchingPattern)
+		else:
+			self.regex = None
+
+	def getNextFile(self):
+		i = self.getSelectedIndex() + 1
+		Len = len(self.list)
+		while i < Len:
+			cur = self.list[i]
+			if cur[1] == False:
+				self.moveToIndex(i)
+				return cur[0], cur[2]
+			i = i + 1
+		return None, None
+
+	def getPrevFile(self):
+		i = self.getSelectedIndex() - 1
+		while i > -1:
+			cur = self.list[i]
+			if cur[1] == False:
+				self.moveToIndex(i)
+				return cur[0], cur[2]
+			i = i - 1
+		return None, None
+
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcMediaList.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcMediaList.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcMediaList.py	(revision 8775)
@@ -0,0 +1,228 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from Components.ActionMap import ActionMap
+from Components.Label import Label
+from Components.Button import Button
+from Components.Pixmap import Pixmap
+from Screens.MessageBox import MessageBox
+from Screens.Screen import Screen
+
+from pyexpat import ExpatError
+
+from VlcFileList import VlcFileList
+from VlcPlayList import VlcPlayList
+from . import _
+
+
+class VlcMediaListScreen(Screen):
+	skin ="""
+		<screen size="560,400" position="80,100" name="VlcMediaListScreen" >
+			<ePixmap name="red"    position="0,355"   zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
+			<ePixmap name="green"  position="140,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
+			<ePixmap name="yellow" position="280,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
+			<ePixmap name="blue"   position="420,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
+			<widget name="key_red" position="0,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_green" position="140,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_yellow" position="280,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_blue" position="420,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<!--ePixmap size="551,325" alphatest="on" position="5,30" pixmap="skin_default/border_epg.png" />
+			<widget size="320,25" alphatest="on" position="5,10" zPosition="1" name="filelist_button_sel" pixmap="skin_default/epg_now.png" />
+			<widget size="320,25" alphatest="on" position="5,10" zPosition="1" name="playlist_button_sel" pixmap="skin_default/epg_next.png" /-->
+			<widget valign="center" transparent="1" size="108,22" backgroundColor="#25062748" position="5,10" zPosition="2" name="filelist_text" halign="center" font="Regular;18" />
+			<widget valign="center" transparent="1" size="108,22" backgroundColor="#25062748" position="111,10" zPosition="2" name="playlist_text" halign="center" font="Regular;18" />
+			<widget size="540,320" scrollbarMode="showOnDemand" position="11,35" name="filelist" />
+			<widget size="540,320" scrollbarMode="showOnDemand" position="11,35" name="playlist" />
+		</screen>"""
+	
+	defaultFilter = "(?i)\.(avi|mpeg|mpg|divx|xvid|mp4|mov|ts|vob|wmv|mkv|iso|m3u|pls|xspf|flv)$"
+
+	def __init__(self, session, server):
+		Screen.__init__(self, session)
+		self.session = session
+		self.server = server
+		self["filelist"] = VlcFileList(self.getFilesAndDirsCB, server.getBasedir(), self.defaultFilter)
+		self["playlist"] = VlcPlayList(self.getPlaylistEntriesCB)
+		self["key_red"] = Button(_("filter off"))
+		self["key_green"] = Button(_("refresh"))
+		self["key_yellow"] = Button(_("Serverlist"))
+		self["key_blue"] = Button(_("play DVD"))
+		self["filelist_button_sel"] = Pixmap()
+		self["playlist_button_sel"] = Pixmap()
+		self["more_button_sel"] = Pixmap()
+		self["filelist_text"] = Label(_("Filelist"))
+		self["playlist_text"] = Label(_("Playlist"))
+		self["server_name"] = Label(server.getName())
+		self["current_dir"] = Label()
+		
+		self["actions"] = ActionMap(["WizardActions", "MenuActions", "ShortcutActions", "MoviePlayerActions", "EPGSelectActions"],
+			{
+			 "back": 	self.close,
+			 "red": 	self.keyToggleFilter,
+			 "green":	self.keyUpdate,
+			 "yellow":	self.keyOpenServerlist,
+			 "blue":	self.keyDvd,
+			 "up": 		self.up,
+			 "down": 	self.down,
+			 "left": 	self.left,
+			 "right": 	self.right,
+			 "ok":		self.ok,
+			 "prevBouquet": self.switchToFileList,
+			 "nextBouquet": self.switchToPlayList,
+			 }, -1)
+		self.currentList = None
+		self.playlistIds = []
+
+		self.onClose.append(self.__onClose)
+		self.onFirstExecBegin.append(self.__onFirstExecBegin)
+
+	def __onFirstExecBegin(self):
+		self.setTitle("vlc://" + (self.server.getName() or self.server.getHost()) + "/" + self.server.getBasedir())
+		self["current_dir"].setText(self.server.getBasedir())
+			
+	def __onClose(self):
+		try:
+			for id in self.playlistIds:
+				self.server.delete(id)
+		except Exception, e:
+			pass
+			
+	def close(self, proceed = False):
+		Screen.close(self, proceed)
+
+	def keyUpdate(self):
+		self.updateFilelist()
+		self.updatePlaylist()
+		if self.currentList == self["playlist"]:
+			self.switchToPlayList()
+		else:
+			self.switchToFileList()
+
+	def updatePlaylist(self):
+		self["playlist"].update()
+
+	def updateFilelist(self):
+		self["filelist"].update()
+
+	def keyToggleFilter(self):
+		if self["filelist"].regex is None:
+			self["filelist"].changeRegex(self.defaultFilter)
+			self["key_red"].setText(_("filter off"))
+		else:
+			self["filelist"].changeRegex(None)
+			self["key_red"].setText(_("filter on"))
+		try:
+			self.updateFilelist()
+		except Exception, e:
+			self.session.open(
+				MessageBox, _("Error updating filelist from server %(server)s:\n%(error)s" % (
+						{"server" : self.server.getName(), "error" : e})
+					), MessageBox.TYPE_ERROR)
+
+	def keyDvd(self):
+		self.play("dvdsimple://" + self.server.getDvdPath(), "DVD")
+
+	def keyOpenServerlist(self):
+		self.close(True)
+
+	def up(self):
+		self.currentList.up()
+
+	def down(self):
+		self.currentList.down()
+
+	def left(self):
+		self.currentList.pageUp()
+
+	def right(self):
+		self.currentList.pageDown()
+
+	def play(self, media, name):
+		self.server.play(self.session, media, name, self.currentList)
+
+	def ok(self):
+		media, name = self.currentList.activate()
+		if media is not None:
+			if media.lower().endswith(".m3u") or media.lower().endswith(".pls") or media.lower().endswith(".xspf"):
+				try:
+					id = self.server.loadPlaylist(media)
+					if id is not None:
+						self.playlistIds.append(id)
+						self.updatePlaylist()
+						self.switchToPlayList()
+				except Exception, e:
+					self.session.open(
+						MessageBox, _("Error loading playlist %(media)s into server %(server)s:\n%(error)s" % (
+								{"media" : media, "server" : self.server.getName(), "error" : e})
+							), MessageBox.TYPE_ERROR)
+			elif media.lower().endswith(".iso"):
+				self.play("dvdsimple://" + media, "DVD")
+			else:
+				self.play(media, name)
+		elif name is not None:
+			self.setTitle("vlc://" + (self.server.getName() or self.server.getHost()) + "/" + name)
+			self["current_dir"].setText(name)
+
+	def getFilesAndDirsCB(self, currentDirectory, regex):
+		try:
+			return self.server.getFilesAndDirs(currentDirectory, regex)
+		except ExpatError, e:
+			self.session.open(
+				MessageBox, _("Error loading playlist into server %(server)s:\n%(error)s" % (
+						{"server" : self.server.getName(), "error" : e })
+					), MessageBox.TYPE_ERROR)
+			raise ExpatError, e
+		except Exception, e:
+			self.session.open(
+				MessageBox, _("Error loading filelist into server %(server)s:\n%(error)s" % (
+						{"server" : self.server.getName(), "error" : e })
+					), MessageBox.TYPE_ERROR)
+		return None
+
+	def getPlaylistEntriesCB(self):
+		try:
+			return self.server.getPlaylistEntries()
+		except ExpatError, e:
+			self.session.open(
+				MessageBox, _("Error loading playlist into server %(server)s:\n%(error)s" % (
+						{"server" : self.server.getName(), "error" : e })
+					), MessageBox.TYPE_ERROR)
+		except Exception, e:
+			self.session.open(
+				MessageBox, _("Error loading playlist into server %(server)s:\n%(error)s" % (
+						{"server" : self.server.getName(), "error" : e })
+					), MessageBox.TYPE_ERROR)
+		return None
+
+	def switchLists(self):
+		if self.currentList == self["filelist"]:
+			self.switchToPlayList()
+		else:
+			self.switchToFileList()
+
+	def switchToFileList(self):
+		self["filelist"].selectionEnabled(1)
+		self["filelist"].show()
+		self["filelist_button_sel"].show()
+		self["playlist"].selectionEnabled(0)
+		self["playlist"].hide()
+		self["playlist_button_sel"].hide()
+		self.currentList = self["filelist"]
+
+	def switchToPlayList(self):
+		self["filelist"].selectionEnabled(0)
+		self["filelist"].hide()
+		self["filelist_button_sel"].hide()
+		self["playlist"].selectionEnabled(1)
+		self["playlist"].show()
+		self["playlist_button_sel"].show()
+		self.currentList = self["playlist"]
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayList.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayList.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayList.py	(revision 8775)
@@ -0,0 +1,91 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, gFont
+
+from Tools.LoadPixmap import LoadPixmap
+from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Components.MenuList import MenuList
+
+from skin import parseFont
+
+class VlcPlayList(MenuList):
+	def __init__(self, getPlaylistEntriesCB):
+		MenuList.__init__(self, list, False, eListboxPythonMultiContent)
+		self.font = gFont("Regular", 18)
+		self.l.setFont(0, self.font)
+		self.l.setItemHeight(23)
+		self.l.setBuildFunc(self.buildListboxEntry)
+		self.getPlaylistEntriesCB = getPlaylistEntriesCB
+
+	def applySkin(self, desktop, parent):
+		attribs = [ ]
+		if self.skinAttributes is not None:
+			for (attrib, value) in self.skinAttributes:
+				if attrib == "font":
+					self.font = parseFont(value, ((1,1),(1,1)))
+					self.l.setFont(0, self.font)
+				elif attrib == "itemHeight":
+					self.l.setItemHeight(int(value))
+				else:
+					attribs.append((attrib, value))
+			self.skinAttributes = attribs
+		return MenuList.applySkin(self, desktop, parent)
+
+
+	def buildListboxEntry(self, name, path):
+		size = self.l.getItemSize()
+		height = size.height()
+		res = [
+			(path, name),
+			(eListboxPythonMultiContent.TYPE_TEXT, height + 15, 0, size.width() - height - 15, height, 0, RT_HALIGN_LEFT, name)
+		]
+
+		png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/movie.png"))
+
+		if png is not None:
+			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 0, height, height, png))
+
+		return res
+
+	def update(self):
+		files = self.getPlaylistEntriesCB()
+		fileEntries = []
+		if files is not None:
+			for file in files:
+				name, path = file
+				fileEntries.append((name, path))
+			fileEntries.sort(cmp = lambda x, y: cmp(x[1][7], y[1][7]))
+		self.list = fileEntries
+		self.l.setList(self.list)
+		self.moveToIndex(0)
+
+	def activate(self):
+		cur = self.getCurrent()
+		if cur is not None:
+			return cur
+		return None, None
+
+	def getNextFile(self):
+		i = self.getSelectedIndex() + 1
+		if i < len(self.list):
+			self.moveToIndex(i)
+			return self.getCurrent()
+		return None, None
+
+	def getPrevFile(self):
+		i = self.getSelectedIndex() - 1
+		if i < len(self.list):
+			self.moveToIndex(i)
+			return self.getCurrent()
+		return None, None
+
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayer.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayer.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcPlayer.py	(revision 8775)
@@ -0,0 +1,527 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from time import time
+
+from enigma import iPlayableServicePtr
+from enigma import iPlayableService
+from enigma import iServiceInformation
+from enigma import iSeekableService
+from enigma import eServiceReference
+from enigma import eServiceCenter
+from enigma import eTimer
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Screens.MinuteInput import MinuteInput
+from Screens.InfoBarGenerics import InfoBarNotifications, InfoBarAudioSelection
+from Components.Sources.Source import Source
+from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ActionMap import ActionMap
+from Components.config import config
+
+
+def isValidServiceId(id):
+	testSRef = eServiceReference(id, 0, "Just a TestReference")
+	info = eServiceCenter.getInstance().info(testSRef)
+	return info is not None
+
+ENIGMA_SERVICEGS_ID = 0x1001
+ENIGMA_SERVICETS_ID = 0x1002
+
+ENIGMA_SERVICE_ID = 0
+
+print "[VLC] Checking for buildin servicets ... ",
+if isValidServiceId(ENIGMA_SERVICETS_ID):
+	print "yes"
+	ENIGMA_SERVICE_ID = ENIGMA_SERVICETS_ID
+	STOP_BEFORE_UNPAUSE = False
+else:
+	print "no"
+	print "[VLC] Checking for existing and usable servicets.so ... ",
+	try:
+		import servicets
+	except Exception, e:
+		print e
+		print "[VLC] Checking for usable gstreamer service ... ",
+		if isValidServiceId(ENIGMA_SERVICEGS_ID):
+			print "yes"
+			ENIGMA_SERVICE_ID = ENIGMA_SERVICEGS_ID
+			STOP_BEFORE_UNPAUSE = True
+		else:
+			print "no"
+			print "[VLC] No valid VLC-Service found - VLC-streaming not supported"
+	else:
+		print "yes"
+		ENIGMA_SERVICE_ID = ENIGMA_SERVICETS_ID
+		STOP_BEFORE_UNPAUSE = False
+
+DEFAULT_VIDEO_PID = 0x44
+DEFAULT_AUDIO_PID = 0x45
+
+
+def isDvdUrl(url):
+	return url.startswith("dvd://") or url.startswith("dvdsimple://")
+
+
+def splitDvdUrl(url):
+	pos = url.rfind("@", len(url)-8)
+	if pos > 0:
+		track = url[pos+1:]
+		url = url[0:pos]
+		if track.find(":") >= 0:
+			track, chapter = track.split(":")
+		else:
+			chapter = None
+	else:
+		track, chapter = (None, None)
+	return (url, track, chapter)
+
+
+class VlcService(Source, iPlayableServicePtr, iSeekableService):
+	refreshInterval = 3000
+
+	class Info(iServiceInformation):
+		def __init__(self, name=""):
+			self.name = name
+
+		def getName(self):
+			return self.name
+
+		def getInfoObject(self, *args, **kwargs):
+			return { }
+
+		def getInfo(self, what):
+			return -1
+
+		def getInfoString(self, *args, **kwargs):
+			return self.name
+
+		def isPlayable(self):
+			return True
+
+		def getEvent(self, what):
+			return None
+
+	def __init__(self, player):
+		Source.__init__(self)
+		self.__info = VlcService.Info()
+		self.server = None
+		self.service = self
+		self.player = player
+		self.lastrefresh = time()
+		self.stats = None
+
+	def setName(self, name):
+		i = name.rfind("/")
+		if i >= 0:
+			name = name[i+1:]
+		i = name.rfind("\\")
+		if i >= 0:
+			name = name[i+1:]
+		self.__info.name = name
+		self.setChanged()
+
+	def setChanged(self):
+		self.changed( (self.CHANGED_SPECIFIC, iPlayableService.evStart) )
+
+	def setServer(self, server):
+		self.server = server
+
+	def __onRefresh(self):
+		if self.server is None:
+			self.stats = None
+			return
+		print "[VLC] refresh"
+		try:
+			self.stats = self.server.status()
+			self.lastrefresh = time()
+			if self.stats and self.stats.has_key("time"):
+				print "Time: ", self.stats["time"]
+		except Exception, e:
+			print e
+
+	def refresh(self):
+		self.__onRefresh()
+
+	def info(self):
+		return self.__info
+
+	# iSeekableService
+	def seek(self):
+		return self
+
+	def getPlayPosition(self):
+		if self.stats and self.stats.has_key("time"):
+			pos = float(self.stats["time"])
+			if self.player.state == VlcPlayer.STATE_PLAYING:
+				pos += time() - self.lastrefresh
+			return (False, int(pos*90000))
+		else:
+			return (True, 0)
+
+	def getLength(self):
+		if self.stats and self.stats.has_key("length"):
+			return (False, int(self.stats["length"])*90000)
+		else:
+			return (True, 0)
+
+	# iPlayableService
+	def cueSheet(self): return None
+	def pause(self): return self.player
+	def audioTracks(self):
+		return self.player.audioTracks()
+
+	def audioChannel(self): return None
+	def subServices(self): return None
+	def frontendInfo(self): return None
+	def timeshift(self): return None
+	def subtitle(self): return None
+	def audioDelay(self): return None
+	def rdsDecoder(self): return None
+	def stream(self): return None
+	def start(self):
+		self.player.play()
+	def stop(self):
+		self.player.stop()
+
+
+class VlcPlayerSummary(Screen):
+	skin = """
+	<screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64">
+		<widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
+			<convert type="ServiceName">Name</convert>
+		</widget>
+		<widget source="session.CurrentService" render="Progress" position="16,27" size="100,5" borderWidth="1">
+			<convert type="ServicePosition">Position</convert>
+		</widget>
+		<widget source="global.CurrentTime" render="Label" position="6,32" size="120,32" font="Regular;32" halign="center" valign="center">
+			<convert type="ClockToText">Format:%H:%M</convert>
+		</widget>
+		<widget source="session.RecordState" render="FixedLabel" text=" " position="6,32" zPosition="1" size="120,32">
+			<convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+			<convert type="ConditionalShowHide">Blink</convert>
+		</widget>
+	</screen>"""
+
+	def __init__(self, session, parent):
+		Screen.__init__(self, session)
+		self.skinName = "InfoBarMoviePlayerSummary"
+		
+
+class VlcPlayer(Screen, InfoBarNotifications, InfoBarAudioSelection):
+	screen_timeout = 5000
+
+	STATE_IDLE = 0
+	STATE_PLAYING = 1
+	STATE_PAUSED = 2
+
+	def __init__(self, session, server, currentList):
+		Screen.__init__(self, session)
+		InfoBarNotifications.__init__(self)
+		InfoBarAudioSelection.__init__(self)
+		self.server = server
+		self.currentList = currentList
+		self.skinName = "MoviePlayer"
+		self.state = self.STATE_IDLE
+		self.oldservice = self.session.screen["CurrentService"]
+		self.oldNavService = self.session.nav.getCurrentlyPlayingServiceReference()
+		self.session.nav.stopService()
+		self.vlcservice = VlcService(self)
+		self.session.screen["CurrentService"] = self.vlcservice
+		self.hidetimer = eTimer()
+		self.hidetimer.timeout.get().append(self.ok)
+		self.onClose.append(self.__onClose)
+
+		class VlcPlayerActionMap(ActionMap):
+			def __init__(self, player, contexts = [ ], actions = { }, prio=0):
+				ActionMap.__init__(self, contexts, actions, prio)
+				self.player = player
+
+			def action(self, contexts, action):
+				if action[:5] == "seek:":
+					time = int(action[5:])
+					self.player.seekRelative(time)
+					return 1
+				elif action[:8] == "seekdef:":
+					key = int(action[8:])
+					time = [-config.seek.selfdefined_13.value, False, config.seek.selfdefined_13.value,
+							-config.seek.selfdefined_46.value, False, config.seek.selfdefined_46.value,
+							-config.seek.selfdefined_79.value, False, config.seek.selfdefined_79.value][key-1]
+					self.player.seekRelative(time)
+					return 1
+				else:
+					return ActionMap.action(self, contexts, action)
+
+		self["actions"] = VlcPlayerActionMap(self, ["OkCancelActions", "TvRadioActions", "InfobarSeekActions", "MediaPlayerActions"],
+		{
+				"ok": self.ok,
+				"cancel": self.stop,
+				"keyTV": self.stop,
+				"stop": self.stop,
+				"pauseService": self.pause,
+				"playpauseService": self.pause,
+				"unPauseService": self.play,
+				"play": self.play,
+				"seekFwd": self.seekFwd,
+				"seekBack": self.seekBack,
+				"seekFwdDown": self.seekFwd,
+				"seekBackDown": self.seekBack,
+				"seekFwdManual": self.seekManual,
+				"seekBackManual": self.seekManual,
+				"next": self.playNextFile,
+				"previous": self.playPrevFile
+			}, -2)
+
+		print "[VLC] evEOF=%d" % iPlayableService.evEOF
+		self.__event_tracker = ServiceEventTracker(screen = self, eventmap =
+			{
+				iPlayableService.evEOF: self.__evEOF,
+				iPlayableService.evSOF: self.__evSOF
+			})
+
+	def createSummary(self):
+		print "[VLC] createSummary"
+		return VlcPlayerSummary
+
+	def __onClose(self):
+		self.session.screen["CurrentService"] = self.oldservice
+		self.session.nav.playService(self.oldNavService)
+
+	def __evEOF(self):
+		print "[VLC] Event EOF"
+		self.stop()
+
+	def __evSOF(self):
+		print "[VLC] Event SOF"
+		self.vlcservice.refresh()
+
+	def playfile(self, path, name):
+		if self.state != self.STATE_IDLE:
+			self.stopCurrent()
+		self.filename = path
+		self.vlcservice.setName(name)
+		self.play()
+
+	def play(self):
+		if self.state == self.STATE_PLAYING:
+			return
+		if self.state == self.STATE_PAUSED:
+			self.unpause()
+			return
+		print "[VLC] setupStream: " + self.filename
+		if ENIGMA_SERVICE_ID == 0:
+			self.hide()
+			self.session.open(
+					MessageBox, _("No valid Enigma-Service to play a VLC-Stream\nCheck your installation and try again!"), MessageBox.TYPE_ERROR
+			)
+			self.close()
+			return
+		try:
+			url = self.server.playFile(self.filename, DEFAULT_VIDEO_PID, DEFAULT_AUDIO_PID)
+			print "[VLC] url: " + url
+		except Exception, e:
+			self.hide()
+			self.session.open(
+					MessageBox, _("Error with VLC server:\n%s" % e), MessageBox.TYPE_ERROR
+			)
+			self.close()
+			return
+		if url is not None:
+			sref = eServiceReference(ENIGMA_SERVICE_ID, 0, url)
+			print "sref valid=", sref.valid()
+			sref.setData(0, DEFAULT_VIDEO_PID)
+			sref.setData(1, DEFAULT_AUDIO_PID)
+			self.session.nav.playService(sref)
+			self.state = self.STATE_PLAYING
+			if self.shown:
+				self.__setHideTimer()
+			self.vlcservice.setServer(self.server)
+
+	def pause(self):
+		print "[VLC] pause"
+		if self.state == self.STATE_PLAYING:
+			self.session.nav.pause(True)
+			self.server.pause()
+			self.state = self.STATE_PAUSED
+			self.vlcservice.refresh()
+			if not self.shown:
+				self.hidetimer.stop()
+				self.show()
+		elif self.state == self.STATE_PAUSED:
+			self.unpause()
+
+	def unpause(self):
+		print "[VLC] unpause"
+		try:
+			self.server.seek("-2")
+			self.server.unpause()
+		except Exception, e:
+			self.session.open(
+				MessageBox, _("Error with VLC server:\n%s" % e), MessageBox.TYPE_ERROR
+			)
+			self.stop()
+			return
+		if STOP_BEFORE_UNPAUSE:
+			self.session.nav.stopService()
+			sref = self.session.nav.getCurrentlyPlayingServiceReference()
+			sref.setData(0, DEFAULT_VIDEO_PID)
+			sref.setData(1, DEFAULT_AUDIO_PID)
+			self.session.nav.playService(sref)
+		else:
+			self.session.nav.pause(False)
+		self.state = self.STATE_PLAYING
+		self.vlcservice.refresh()
+		if self.shown:
+			self.__setHideTimer()
+
+	def stopCurrent(self):
+		print "[VLC] stopCurrent"
+		self.session.nav.stopService()
+		if self.state == self.STATE_IDLE:
+			self.close()
+			return
+		try:
+			self.server.stop()
+			self.server.deleteCurrentTree()
+		except Exception, e:
+			self.session.open(
+				MessageBox, _("Error with VLC server:\n%s" % e), MessageBox.TYPE_ERROR
+			)
+		self.state = self.STATE_IDLE
+		self.vlcservice.setServer(None)
+		self.vlcservice.refresh()
+
+	def stop(self):
+		print "[VLC] stop"
+		self.stopCurrent()
+		self.close()
+
+	def __setHideTimer(self):
+		self.hidetimer.start(self.screen_timeout)
+
+	def showInfobar(self):
+		self.vlcservice.refresh()
+		self.show()
+		if self.state == self.STATE_PLAYING:
+			self.__setHideTimer()
+		else:
+			pass
+
+	def hideInfobar(self):
+		self.hide()
+		self.hidetimer.stop()
+
+	def ok(self):
+		if self.shown:
+			self.hideInfobar()
+		else:
+			self.showInfobar()
+
+	def playNextFile(self):
+		print "[VLC] playNextFile"
+		if isDvdUrl(self.filename):
+			url, track, chapter = splitDvdUrl(self.filename)
+			if track is None:
+				track = 1
+			else:
+				track = int(track)
+			if chapter is None:
+				chapter = 2
+			else:
+				chapter = int(chapter) + 1
+			url = "%s@%d:%d" % (url, track, chapter)
+			self.playfile(url, "DVD")
+			self.showInfobar()
+		else:
+			if self.currentList != None:
+				media, name = self.currentList.getNextFile()
+				if media is None:
+					self.session.open(
+							MessageBox, _("No more files in this directory"), MessageBox.TYPE_INFO
+					)
+					self.close()
+				else:
+					self.playfile(media, name)
+					self.showInfobar()
+
+	def playPrevFile(self):
+		print "[VLC] playPrevFile"
+		if isDvdUrl(self.filename):
+			url, track, chapter = splitDvdUrl(self.filename)
+			if track is None:
+				track = 1
+			else:
+				track = int(track)
+			if chapter is not None and int(chapter) > 1:
+				chapter = int(chapter) - 1
+			else:
+				chapter = 1
+			url = "%s@%d:%d" % (url, track, chapter)
+			self.playfile(url, "DVD")
+			self.showInfobar()
+		else:
+			if self.currentList != None:
+				media, name = self.currentList.getPrevFile()
+				if media is None:
+					self.session.open(
+							MessageBox, _("No previous file in this directory"), MessageBox.TYPE_INFO
+					)
+					self.close()
+				else:
+					self.playfile(media, name)
+					self.showInfobar()
+
+	def audioTracks(self):
+		return self.session.nav.getCurrentService() and self.session.nav.getCurrentService().audioTracks();
+
+	def seekRelative(self, delta):
+		"""delta is seconds as integer number
+		positive=forwards, negative=backwards"""
+		if self.state != self.STATE_IDLE:
+			if (delta >= 0):
+				self.server.seek("+" + str(delta))
+			else:
+				self.server.seek(str(delta))
+		self.showInfobar()
+
+	def seekFwd(self):
+		if isDvdUrl(self.filename):
+			url, track, chapter = splitDvdUrl(self.filename)
+			if track is None:
+				track = 2
+			else:
+				track = int(track) + 1
+			url = "%s@%d" % (url, track)
+			self.playfile(url, "DVD")
+			self.showInfobar()
+		else:
+			self.seekRelative(600)
+
+	def seekBack(self):
+		if isDvdUrl(self.filename):
+			url, track, chapter = splitDvdUrl(self.filename)
+			if track is not None and int(track) > 2:
+				track = int(track) - 1
+				url = "%s@%d" % (url, track)
+			else:
+				track = 1
+			self.playfile(url, "DVD")
+			self.showInfobar()
+		else:
+			self.seekRelative(-600)
+
+	def seekToMinute(self, minutes):
+		self.server.seek(str(int(minutes)*60))
+		self.showInfobar()
+
+	def seekManual(self):
+		self.session.openWithCallback(self.seekToMinute, MinuteInput)
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServer.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServer.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServer.py	(revision 8775)
@@ -0,0 +1,317 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+import re
+import posixpath
+from sys import maxint
+from random import randint, seed
+from urllib import urlencode
+from urllib2 import urlopen
+from xml.dom.minidom import parse
+from VlcPlayer import VlcPlayer, isDvdUrl
+
+seed()
+
+def normpath(path):
+	if path is None:
+		return None
+	path = path.replace("\\","/").replace("//", "/")
+	if path == "/..":
+		return None
+	if len(path) > 0 and path[0] != '/':
+		path = posixpath.normpath('/' + path)[1:]
+	else:
+		path = posixpath.normpath(path)
+
+	if len(path) == 0 or path == "//":
+		return "/"
+	elif path == ".":
+		return None
+	return path
+	
+
+class VlcServer:
+	def __init__(self, cfg):
+		self.cfg = cfg
+
+	def getCfg(self):
+		return self.cfg
+
+	def getName(self):
+		return self.cfg.name.value
+
+	def name(self):
+		return self.cfg.name
+
+	def getAddressType(self):
+		return self.cfg.addressType.value
+
+	def addressType(self):
+		return self.cfg.addressType
+
+	def getHost(self):
+		return self.cfg.hostip.tostring(self.cfg.hostip.value)
+
+	def host(self):
+		return self.cfg.hostip
+
+	def getHttpPort(self):
+		return self.cfg.httpport.value
+
+	def httpPort(self):
+		return self.cfg.httpport
+
+	def getBasedir(self):
+		return self.cfg.basedir.value
+
+	def basedir(self):
+		return self.cfg.basedir
+
+	def getVideoCodec(self):
+		return self.cfg.videocodec.value
+
+	def videoCodec(self):
+		return self.cfg.videocodec
+
+	def getVideoBitrate(self):
+		return self.cfg.videobitrate.value
+
+	def videoBitrate(self):
+		return self.cfg.videobitrate
+
+	def getAudioCodec(self):
+		return self.cfg.audiocodec.value
+
+	def audioCodec(self):
+		return self.cfg.audiocodec
+
+	def getAudioBitrate(self):
+		return self.cfg.audiobitrate.value
+
+	def audioBitrate(self):
+		return self.cfg.audiobitrate
+
+	def getSamplerate(self):
+		return self.cfg.samplerate.value
+
+	def samplerate(self):
+		return self.cfg.samplerate
+
+	def getAudioChannels(self):
+		return self.cfg.audiochannels.value
+
+	def audioChannels(self):
+		return self.cfg.audiochannels
+
+	def getVideoNorm(self):
+		return self.cfg.videonorm.value
+
+	def videoNorm(self):
+		return self.cfg.videonorm
+
+	def getOverscanCorrection(self):
+		return self.cfg.overscancorrection.value
+
+	def overscanCorrection(self):
+		return self.cfg.overscancorrection
+
+	def getSOverlay(self):
+		return self.cfg.soverlay.value
+
+	def sOverlay(self):
+		return self.cfg.soverlay
+
+	def getTranscodeVideo(self):
+		return self.cfg.transcodeVideo.value
+
+	def transcodeVideo(self):
+		return self.cfg.transcodeVideo
+
+	def getTranscodeAudio(self):
+		return self.cfg.transcodeAudio.value
+
+	def transcodeAudio(self):
+		return self.cfg.transcodeAudio
+
+	def dvdPath(self):
+		return self.cfg.dvdPath
+
+	def getDvdPath(self):
+		return self.cfg.dvdPath.value
+
+	def __xmlRequest(self, request, params):
+		uri = "/requests/" + request + ".xml"
+		if params is not None: uri = uri + "?" + urlencode(params).replace('+', '%20')
+		location = "%s:%d" % (self.getHost(), self.getHttpPort())
+		resp = urlopen("http://" + location + uri)
+		print "[Vlcserver] request: http://%s%s" % (location,uri)
+		if resp is None:
+			raise IOError, "No response from Server"
+		xml = parse(resp)
+		resp.close()
+		return xml
+
+	def getFilesAndDirs(self, directory, regex):
+		files = []
+		directories = []
+		response = self.__xmlRequest("browse", {"dir": directory})
+		for element in response.getElementsByTagName("element"):
+			if element.hasAttribute("type"):
+				name = element.getAttribute("name").encode("utf8")
+				path = normpath(element.getAttribute("path").encode("utf8"))
+				if path is not None:
+					elementType = element.getAttribute("type")
+					if elementType == "directory":
+						directories.append([name, path])
+					elif elementType == "file":
+						if regex is None or regex.search(path):
+							files.append([name, path])
+		return (files, directories)
+
+	def getPlaylistEntries(self):
+		xml = self.__xmlRequest("playlist", None)
+		files = []
+		for e in xml.getElementsByTagName("leaf"):
+			if e.hasAttribute("uri") is not None:
+				name = e.getAttribute("name").encode("utf8")
+				if len(name) >= 50:
+					name = "..." + name[-50:]
+				path = e.getAttribute("uri").encode("utf8")
+				files.append([name, path])
+		return files
+
+	def getCurrentElement(self):
+		xml = self.__xmlRequest("playlist", None)
+		for e in xml.getElementsByTagName("leaf"):
+			if e.hasAttribute("current"):
+				return e
+		return None
+
+	def play(self, session, media, name, currentList = None, player = None):
+		if player is None:
+# or not isinstance(player, VlcPlayer):
+			player = VlcPlayer
+		dlg = session.open(player, self, currentList)
+		dlg.playfile(media, name)
+		return dlg
+	
+	def playFile(self, filename, videoPid, audioPid):
+		streamName = "dream" + str(randint(0, maxint))
+		transcode = []
+
+		doDirect = isDvdUrl(filename) or re.match("(?i).*\.(mpg|mpeg|ts)$", filename.lower())
+
+		if not doDirect or self.getTranscodeVideo():
+			videoNormList = self.getVideoNorm().split(",")
+			# Video settings
+			transcode.append("vcodec=%s,vb=%d,venc=ffmpeg,fps=%s" % (
+				self.getVideoCodec(),self.getVideoBitrate(),
+				videoNormList[3]
+			))
+			#New canvas - since VLC 0.9
+			transcode.append("vfilter=canvas{width=%s,height=%s,aspect=%s}" % (
+				str(int(float(videoNormList[0]) - float(videoNormList[0]) * float(self.getOverscanCorrection()) / 100)),
+				str(int(float(videoNormList[1]) - float(videoNormList[1]) * float(self.getOverscanCorrection()) / 100)),
+				videoNormList[2]
+			))
+			if self.getSOverlay():
+				transcode.append("soverlay")
+		if not doDirect or self.getTranscodeAudio():
+			transcode.append("acodec=%s,ab=%d,channels=%d,samplerate=%s" % (
+				self.getAudioCodec(),
+				self.getAudioBitrate(),
+				self.getAudioChannels(),
+				self.getSamplerate()
+			))
+		if re.match("[a-zA-Z]:", filename):
+			# Fix for subtitles with VLC on Windows.
+			filename = filename.replace("/", "\\")
+
+		filename = filename.replace("\\", "\\\\").replace("'", "\\'")
+		input = filename + " :sout=#"
+
+		if len(transcode) > 0:
+			input += "transcode{%s}:" % (",".join(transcode))
+
+		mux="ts{pid-video=%d,pid-audio=%d}" % (videoPid, audioPid)
+		input += "std{access=http,mux=%s,dst=/%s.ts} :sout-all :sout-keep" % (mux, streamName)
+
+		print "[VLC] playfile", input
+
+		xml = self.__xmlRequest("status", {"command": "in_play", "input": input})
+		error = xml.getElementsByTagName("error")
+		if error is not None and len(error) > 0:
+			self.lastError = getText(error[0].childNodes).strip()
+			if len(self.lastError) == 0:
+				self.lastError = None
+			else:
+				print "[VLC] VlcControl error:", self.lastError
+			return None
+		else:
+			self.lastError = None
+		return "http://%s:%d/%s.ts" % (self.getHost(), self.getHttpPort(), streamName)
+
+	def unpause(self):
+		self.__xmlRequest("status", {"command": "pl_pause"})
+
+	def stop(self):
+		self.__xmlRequest("status", {"command": "pl_stop"})
+
+	def pause(self):
+		self.__xmlRequest("status", {"command": "pl_pause"})
+
+	def delete(self, id):
+		self.__xmlRequest("status", {"command": "pl_delete", "id": str(id)})
+
+	def deleteCurrentTree(self):
+		print "[VLC] delete current tree"
+		currentElement = self.getCurrentElement()
+		while currentElement is not None and currentElement.parentNode.getAttribute("ro") != "ro":
+			currentElement = currentElement.parentNode
+		id = int(currentElement.getAttribute("id"))
+		self.delete(id)
+		
+	def seek(self, value):
+		"""  Allowed values are of the form:
+  [+ or -][<int><H or h>:][<int><M or m or '>:][<int><nothing or S or s or ">]
+  or [+ or -]<int>%
+  (value between [ ] are optional, value between < > are mandatory)
+examples:
+  1000 -> seek to the 1000th second
+  +1H:2M -> seek 1 hour and 2 minutes forward
+  -10% -> seek 10% back"""
+		self.__xmlRequest("status", {"command": "seek", "val": str(value)})
+
+	def status(self):
+		xml = self.__xmlRequest("status", None)
+		stats = {}
+		for e in xml.documentElement.childNodes:
+			if e.nodeType == e.ELEMENT_NODE:
+				if e.firstChild is None:
+					stats[e.nodeName.encode("latin_1", "replace")] = None
+				else:
+					stats[e.nodeName.encode("latin_1", "replace")] = e.firstChild.nodeValue.encode("latin_1", "replace")
+		return stats
+
+	def loadPlaylist(self, playlist):
+		self.__xmlRequest("status", {"command": "in_play", "input": playlist})
+		self.__xmlRequest("status", {"command": "pl_stop"})
+		xml = self.__xmlRequest("playlist", None)
+		id = None
+		for n in xml.getElementsByTagName("node"):
+			if n.hasAttribute("name") is not None:
+				if n.getAttribute("name").encode("utf8", "replace") == playlist:
+					if id is None:
+						id = n.getAttribute("id")
+					elif int(id) < int(n.getAttribute("id")):
+						id = n.getAttribute("id")
+		return id
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerConfig.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerConfig.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerConfig.py	(revision 8775)
@@ -0,0 +1,339 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from Components.ActionMap import ActionMap
+from Components.Button import Button
+from Components.ConfigList import ConfigListScreen
+from Components.config import ConfigElement
+from Components.config import ConfigIP
+from Components.config import ConfigInteger
+from Components.config import ConfigSelection
+from Components.config import ConfigSubList
+from Components.config import ConfigSubsection
+from Components.config import ConfigSlider
+from Components.config import ConfigText
+from Components.config import ConfigYesNo
+from Components.config import config
+from Components.config import getConfigListEntry
+from Screens.Screen import Screen
+from VlcServer import VlcServer
+from . import _
+
+class ConfigMutable(ConfigElement):
+	def __init__(self, configElementDict, defaultKey):
+		ConfigElement.__init__(self)
+		self.configElementDict = configElementDict
+		if self.configElementDict.has_key(defaultKey):
+			self.currentConfig = self.configElementDict[defaultKey]
+			self.currentKey = defaultKey
+			self.defaultKey = self.currentKey
+
+	def addConfigElement(self, key, configElement):
+		self.elements[key] = configElement
+
+	def setAsCurrent(self, key):
+		if self.configElementDict.has_key(key):
+			self.currentConfig = self.configElementDict[key]
+			self.currentKey = key
+			self.saved_value = self.currentConfig.saved_value
+			
+	def setValue(self, val):
+		self.currentConfig.value = val
+		self.changed()
+
+	def set_Value(self, val):
+		self.currentConfig._value = val
+		self.changed()
+
+	def getValue(self):
+		return self.currentConfig.value
+	
+	def get_Value(self):
+		return self.currentConfig._value
+
+	_value = property(get_Value, set_Value)
+	
+	def fromstring(self, value):
+		return self.currentConfig.fromstring(value)
+
+	def load(self):
+		self.currentConfig.saved_value = self.saved_value
+		self.currentConfig.load()
+
+	def tostring(self, value):
+		return self.currentConfig.tostring(value)
+
+	def save(self):
+		self.currentConfig.save()
+		self.defaultKey = self.currentKey
+		self.saved_value = self.currentConfig.saved_value
+
+	def cancel(self):
+		self.setAsCurrent(self.defaultKey)
+		self.load()
+		
+	def isChanged(self):
+		return self.currentConfig.isChanged()
+
+	def changed(self):
+		for x in self.notifiers:
+			x(self)
+			
+	def addNotifier(self, notifier, initial_call = True):
+		assert callable(notifier), "notifiers must be callable"
+		self.notifiers.append(notifier)
+		if initial_call:
+			notifier(self)
+
+	def disableSave(self):
+		self.currentConfig.disableSave()
+
+	def __call__(self, selected):
+		return self.currentConfig(selected)
+
+	def onSelect(self, session):
+		self.currentConfig.onSelect(session)
+
+	def onDeselect(self, session):
+		self.currentConfig.onDeselect(session)
+
+	def handleKey(self, key):
+		self.currentConfig.handleKey(key)
+
+	def getHTML(self, id):
+		return self.currentConfig.getHTML(id)
+
+	def genText(self):
+		return self.currentConfig.genText()
+
+	def getText(self):
+		return self.currentConfig.getText()
+
+	def getMulti(self, selected):
+		return self.currentConfig.getMulti(selected)
+
+
+class ConfigSelectionExtended(ConfigSelection):
+	def __init__(self, choices, default = None):
+		ConfigSelection.__init__(self, choices, default)
+
+	def deleteNotifier(self, notifier):
+		self.notifiers.remove(notifier)
+
+
+class __VlcServerConfig():
+	def __init__(self):
+		self.serverlist = []
+		config.plugins.vlcplayer = ConfigSubsection()
+		config.plugins.vlcplayer.servercount = ConfigInteger(0)
+		config.plugins.vlcplayer.servers = ConfigSubList()
+		config.plugins.vlcplayer.defaultserver = ConfigText("", False)
+		for servernum in range(0, config.plugins.vlcplayer.servercount.value):
+			self.new()
+
+	# Add a new server or load a configsection if existing
+	def new(self):
+		newServerConfigSubsection = ConfigSubsection()
+		config.plugins.vlcplayer.servers.append(newServerConfigSubsection)
+		newServerConfigSubsection.name = ConfigText("Server " + str(self.__getServerCount()), False)
+		if newServerConfigSubsection.name.value == newServerConfigSubsection.name.default:
+			newServerConfigSubsection.name.default = ""
+		newServerConfigSubsection.addressType = ConfigSelectionExtended(
+				[("FQDN", "FQDN"),
+				 ("IP", "IP-Address")
+				], "IP")
+		newServerConfigSubsection.hostip = ConfigMutable(
+				{"IP": ConfigIP([192,168,1,1]),
+				 "FQDN": ConfigText("fqdname", False)
+				}, newServerConfigSubsection.addressType.value)
+		newServerConfigSubsection.httpport = ConfigInteger(8080, (0,65535))
+		newServerConfigSubsection.basedir = ConfigText("/", False)
+		newServerConfigSubsection.dvdPath = ConfigText("", False)
+		newServerConfigSubsection.transcodeVideo = ConfigYesNo()
+		newServerConfigSubsection.transcodeAudio = ConfigYesNo(True)
+		newServerConfigSubsection.videocodec = ConfigSelection(
+				[("mp1v", "MPEG1"),
+				 ("mp2v", "MPEG2")
+				], "mp2v")
+		newServerConfigSubsection.videobitrate = ConfigInteger(2000, (100, 9999))
+		newServerConfigSubsection.audiocodec = ConfigSelection(
+				[("mpga", "MPEG Layer 1 (mpga)"),
+				 ("mp2a", "MPEG Layer 2 (mp2a)"),
+				 ("mp3", "MPEG Layer 3 (mp3)")
+				], "mp2a")
+		newServerConfigSubsection.audiobitrate = ConfigInteger(128, (64, 320))
+		newServerConfigSubsection.samplerate = ConfigSelection(
+				[("32000", "32000"),
+				 ("44100", "44100"),
+				 ("48000", "48000")
+				], "44100")
+		newServerConfigSubsection.audiochannels = ConfigInteger(2, (1, 9))
+		newServerConfigSubsection.videonorm = ConfigSelection(
+				[("720,576,4:3,25,i", "720 x 576 (4:3) @ 25fps (PAL)"),
+				 ("720,576,16:9,25,i", "720 x 576 (16:9) @ 25fps (PAL)"),
+				 ("704,576,4:3,25,i", "704 x 576 (4:3) @ 25fps (PAL)"),
+				 ("704,576,16:9,25,i", "704 x 576 (16:9) @ 25fps (PAL)"),
+				 ("544,576,4:3,25,i", "544 x 576 (4:3) @ 25fps (PAL)"),
+				 ("544,576,16:9,25,i", "544 x 576 (16:9) @ 25fps (PAL)"),
+				 ("480,576,4:3,25,i", "480 x 576 (4:3) @ 25fps (PAL)"),
+				 ("480,576,16:9,25,i", "480 x 576 (16:9) @ 25fps (PAL)"),
+				 ("480,288,4:3,25,i", "480 x 288 (4:3) @ 25fps (PAL)"),
+				 ("480,288,16:9,25,i", "480 x 288 (16:9) @ 25fps (PAL)"),
+				 ("352,576,4:3,25,i", "352 x 576 (4:3) @ 25fps (PAL)"),
+				 ("352,576,16:9,25,i", "352 x 576 (16:9) @ 25fps (PAL)"),
+				 ("352,288,4:3,25,i", "352 x 288 (4:3) @ 25fps (PAL)"),
+				 ("352,288,16:9,25,i", "352 x 288 (16:9) @ 25fps (PAL)"),
+				 ("720,480,4:3,30,i", "720 x 480 (4:3) @ 30fps (NTSC)"),
+				 ("720,480,16:9,30,i", "720 x 480 (16:9) @ 30fps (NTSC)"),
+				 ("640,480,4:3,30,i", "640 x 480 (4:3) @ 30fps (NTSC)"),
+				 ("640,480,16:9,30,i", "640 x 480 (16:9) @ 30fps (NTSC)"),
+				 ("544,480,4:3,30,i", "544 x 480 (4:3) @ 30fps (NTSC)"),
+				 ("544,480,16:9,30,i", "544 x 480 (16:9) @ 30fps (NTSC)"),
+				 ("480,480,4:3,30,i", "480 x 480 (4:3) @ 30fps (NTSC)"),
+				 ("480,480,16:9,30,i", "480 x 480 (16:9) @ 30fps (NTSC)"),
+				 ("480,240,4:3,30,i", "480 x 240 (4:3) @ 30fps (NTSC)"),
+				 ("480,240,16:9,30,i", "480 x 240 (16:9) @ 30fps (NTSC)"),
+				 ("353,480,4:3,30,i", "353 x 480 (4:3) @ 30fps (NTSC)"),
+				 ("353,480,16:9,30,i", "353 x 480 (16:9) @ 30fps (NTSC)"),
+				 ("352,240,4:3,30,i", "352 x 240 (4:3) @ 30fps (NTSC)"),
+				 ("352,240,16:9,30,i", "352 x 240 (16:9) @ 30fps (NTSC)"),
+				 ("1920,1080,16:9,50,p", "1920 x 1080 (16:9) @ 50p (HTDV)"),
+				 ("1920,1080,16:9,25,p", "1920 x 1080 (16:9) @ 25p (HTDV)"),
+				 ("1920,1080,16:9,25,i", "1920 x 1080 (16:9) @ 25i (HTDV)"),
+				 ("1440,1080,16:9,25,p", "1440 x 1080 (16:9) @ 25p (HTDV)"),
+				 ("1440,1080,16:9,25,i", "1440 x 1080 (16:9) @ 25i (HTDV)"),
+				 ("1280,720,16:9,50,p", "1280 x 720 (16:9) @ 50p (HDTV)"),
+				 ("1280,720,16:9,25,p", "1280 x 720 (16:9) @ 25p (HDTV)"),
+				 ("720,576,16:9,50,p", "720 x 576 (16:9) @ 50p (HDTV)")
+				], "352,288,4:3,25,i")
+		newServerConfigSubsection.overscancorrection = ConfigInteger(0, (0, 100))
+		newServerConfigSubsection.soverlay = ConfigYesNo()
+		newServer = VlcServer(newServerConfigSubsection)
+
+		self.serverlist.append(newServer)
+
+		return newServer
+
+	# Add was canceled or existing server should be removed
+	def delete(self, server):
+		config.plugins.vlcplayer.servers.remove(server.getCfg())
+		self.serverlist.remove(server)
+		self.__save()
+
+	# Edit or Add should complete
+	def save(self, server):
+		server.getCfg().save()
+		self.__save()
+
+	# Edit has been canceled
+	def cancel(self, server):
+		for element in server.getCfg().dict().values():
+			element.cancel()
+
+	def getServerlist(self):
+		return self.serverlist
+
+	def getServerByName(self, name):
+		for server in self.serverlist:
+			if server.getName() == name:
+				return server
+		return None
+
+	def getDefaultServer(self):
+		return self.getServerByName(config.plugins.vlcplayer.defaultserver.value)
+
+	def setAsDefault(self, defaultServer):
+		if defaultServer is not None:
+			config.plugins.vlcplayer.defaultserver.value = defaultServer.getName()
+			config.plugins.vlcplayer.defaultserver.save()
+
+	def __save(self):
+		config.plugins.vlcplayer.servercount.value = self.__getServerCount()
+		config.plugins.vlcplayer.servercount.save()
+
+	def __getServerCount(self):
+		return len(config.plugins.vlcplayer.servers)
+
+
+vlcServerConfig = __VlcServerConfig()
+
+
+class VlcServerConfigScreen(Screen, ConfigListScreen):
+	skin = """
+		<screen name="VlcServerConfigScreen" position="80,100" size="560,320" title="Edit VLC Server">
+			<widget name="config" position="10,10" size="540,250" scrollbarMode="showOnDemand" />
+			<ePixmap name="red"    position="0,280"   zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
+			<ePixmap name="green"  position="140,280" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
+			<ePixmap name="yellow" position="280,280" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
+			<ePixmap name="blue"   position="420,280" zPosition="4" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
+			<widget name="key_red" position="0,280" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_green" position="140,280" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_yellow" position="280,280" zPosition="5" size="140,40" valign="center" halign="center"  font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_blue" position="420,280" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+		</screen>"""
+
+	def __init__(self, session, server):
+		Screen.__init__(self, session)
+		self.server = server
+		self["actions"] = ActionMap(["SetupActions", "ColorActions"],
+		{
+			"green": self.keySave,
+			"red": self.keyCancel,
+			"cancel": self.keyCancel
+		}, -2)
+
+		self["key_red"] = Button(_("Cancel"))
+		self["key_green"] = Button(_("OK"))
+		self["key_yellow"] = Button("")
+		self["key_blue"] = Button("")
+
+		cfglist = []
+		cfglist.append(getConfigListEntry(_("Server Profile Name"), server.name()))
+		cfglist.append(getConfigListEntry(_("Enter VLC-Server as FQDN or IP-Address"), server.addressType()))
+		self.hostConfigListEntry = getConfigListEntry(_("Server Address"), server.host())
+		cfglist.append(self.hostConfigListEntry)
+		cfglist.append(getConfigListEntry(_("HTTP Port"), server.httpPort()))
+		cfglist.append(getConfigListEntry(_("Movie Directory"), server.basedir()))
+		cfglist.append(getConfigListEntry(_("DVD Device (leave empty for default)"), server.dvdPath()))
+
+		cfglist.append(getConfigListEntry(_("Transcode MPEG/DVD Video"), server.transcodeVideo()))
+		cfglist.append(getConfigListEntry(_("Video Codec"), server.videoCodec()))
+		cfglist.append(getConfigListEntry(_("Video Bitrate"), server.videoBitrate()))
+		cfglist.append(getConfigListEntry(_("Video Norm"), server.videoNorm()))
+		cfglist.append(getConfigListEntry(_("Overscan Correction [in %(percentsign)s of Video width]") % { "percentsign" : "%"}, server.overscanCorrection()))
+
+		cfglist.append(getConfigListEntry(_("Subtitle overlay"), server.sOverlay()))
+
+		cfglist.append(getConfigListEntry(_("Transcode MPEG/DVD Audio"), server.transcodeAudio()))
+		cfglist.append(getConfigListEntry(_("Audio Codec"), server.audioCodec()))
+		cfglist.append(getConfigListEntry(_("Audio Bitrate"), server.audioBitrate()))
+		cfglist.append(getConfigListEntry(_("Audio Samplerate"), server.samplerate()))
+		cfglist.append(getConfigListEntry(_("Audio Channels"), server.audioChannels()))
+
+		ConfigListScreen.__init__(self, cfglist, session)
+
+		server.addressType().addNotifier(self.switchAddressType, False)
+		
+		self.onClose.append(self.__onClose)
+		
+	def __onClose(self):
+		self.server.addressType().deleteNotifier(self.switchAddressType)
+
+	def switchAddressType(self, configElement):
+		self.server.host().setAsCurrent(configElement.value)
+		self["config"].invalidate(self.hostConfigListEntry)
+
+	def keySave(self):
+		self.close(True, self.server)
+
+	def keyCancel(self):
+		self.close(False, self.server)
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerList.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerList.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/VlcServerList.py	(revision 8775)
@@ -0,0 +1,188 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from Components.ActionMap import ActionMap
+from Components.Button import Button
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Screens.MessageBox import MessageBox
+from Screens.Screen import Screen
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS
+from Tools.LoadPixmap import LoadPixmap
+from VlcServerConfig import vlcServerConfig
+from VlcServerConfig import VlcServerConfigScreen
+from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, gFont
+from . import _
+
+from skin import parseFont
+
+class VlcServerList(MenuList):
+	def __init__(self):
+		MenuList.__init__(self, list, False, eListboxPythonMultiContent)
+		self.font = gFont("Regular", 18)
+		self.l.setFont(0, self.font)
+		self.l.setItemHeight(23)
+		self.l.setBuildFunc(self.buildListboxEntry)
+
+	def applySkin(self, desktop, parent):
+		attribs = [ ]
+		if self.skinAttributes is not None:
+			for (attrib, value) in self.skinAttributes:
+				if attrib == "font":
+					self.font = parseFont(value, ((1,1),(1,1)))
+					self.l.setFont(0, self.font)
+				elif attrib == "itemHeight":
+					self.l.setItemHeight(int(value))
+				else:
+					attribs.append((attrib, value))
+			self.skinAttributes = attribs
+		return MenuList.applySkin(self, desktop, parent)
+
+	def buildListboxEntry(self, vlcServer, defaultServer):
+		size = self.l.getItemSize()
+		height = size.height()
+		res = [
+			vlcServer,
+			(eListboxPythonMultiContent.TYPE_TEXT, height + 15, 0, size.width() - height - 15, height, 0, RT_HALIGN_LEFT, vlcServer.getName())
+		]
+
+		if defaultServer is not None and defaultServer.getName() == vlcServer.getName():
+			png = LoadPixmap(resolveFilename(SCOPE_PLUGINS, "Extensions/VlcPlayer/vlc_default.png"))
+		else:
+			png = LoadPixmap(resolveFilename(SCOPE_PLUGINS, "Extensions/VlcPlayer/vlc.png"))
+
+		if png is not None:
+			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 0, height, height, png))
+
+		return res
+
+	def update(self, serverList, defaultServer):
+		self.list = [(server, defaultServer) for server in serverList]
+		self.l.setList(self.list)
+		self.moveToIndex(0)
+
+	def getSelection(self):
+		cur = self.l.getCurrentSelection()
+		return cur and cur[0]
+
+class VlcServerListScreen(Screen):
+	skin = """
+		<screen position="80,100" size="560,400" title="VLC Video Player V2.5 - Select a VLC-Server Profile" >
+			<widget name="serverlabel" position="10,10" size="550,20" font="Regular;18"/>
+			<widget name="serverlist" position="10,35" size="550,310"  scrollbarMode="showOnDemand"/>
+			<ePixmap name="red"    position="0,355"   zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
+			<ePixmap name="green"  position="140,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
+			<ePixmap name="yellow" position="280,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
+			<ePixmap name="blue"   position="420,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
+			<widget name="key_red" position="0,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_green" position="140,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_yellow" position="280,355" zPosition="5" size="140,40" valign="center" halign="center"  font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+			<widget name="key_blue" position="420,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
+		</screen>"""
+
+	def __init__(self, session, defaultServer):
+		Screen.__init__(self, session)
+		self.session = session
+		self.serverlist = VlcServerList()
+		self.defaultServer = defaultServer
+
+		self["serverlabel"] = Label(_("List of known VLC-Server Profiles"))
+		self["serverlist"] = self.serverlist
+		self["key_red"] = Button(_("delete server"))
+		self["key_green"] = Button(_("add server"))
+		self["key_yellow"] = Button(_("edit server"))
+		self["key_blue"] = Button(_("set default"))
+
+		self["actions"] = ActionMap(["WizardActions", "ColorActions"],
+			{
+			 "back": 	self.close,
+			 "red": 	self.keyDelete,
+			 "green": 	self.keyAddServer,
+			 "yellow": 	self.keyEditServer,
+			 "blue":	self.keySetAsDefault,
+			 "up": 		self.up,
+			 "down": 	self.down,
+			 "left": 	self.left,
+			 "right": 	self.right,
+			 "ok":		self.ok,
+            }, -1)
+
+		self.onLayoutFinish.append(self.initialServerlistUpdate)
+
+	def initialServerlistUpdate(self):
+		self.updateServerlist()
+		if self.defaultServer is not None:
+			defaultIndex = vlcServerConfig.getServerlist().index(self.defaultServer)
+			self.serverlist.moveToIndex(defaultIndex)
+
+	def updateServerlist(self):
+		self.serverlist.update(vlcServerConfig.getServerlist(), self.defaultServer)
+
+	def keyAddServer(self):
+		newServer = vlcServerConfig.new()
+		self.session.openWithCallback(self.addCallback, VlcServerConfigScreen, newServer)
+
+	def addCallback(self, result, server):
+		if result:
+			vlcServerConfig.save(server)
+			self.updateServerlist()
+		else:
+			vlcServerConfig.delete(server)
+
+	def keyDelete(self):
+		server = self.serverlist.getSelection()
+		if server is not None:
+			self.session.openWithCallback(self.deleteCallback, MessageBox, _("Really delete this Server?"))
+
+	def deleteCallback(self, result):
+		if result:
+			vlcServerConfig.delete(self.serverlist.getSelection())
+			self.updateServerlist()
+
+	def keyEditServer(self):
+		server = self.serverlist.getSelection()
+		if server is not None:
+			self.session.openWithCallback(self.editCallback, VlcServerConfigScreen, server)
+
+	def editCallback(self, result, server):
+		if result:
+			vlcServerConfig.save(server)
+			index = self.serverlist.getSelectedIndex()
+			self.updateServerlist()
+			self.serverlist.moveToIndex(index)
+		else:
+			vlcServerConfig.cancel(server)
+
+	def keySetAsDefault(self):
+		self.defaultServer = self.serverlist.getSelection()
+		index = self.serverlist.getSelectedIndex()
+		self.updateServerlist()
+		self.serverlist.moveToIndex(index)
+
+	def up(self):
+		self.serverlist.up()
+
+	def down(self):
+		self.serverlist.down()
+
+	def left(self):
+		self.serverlist.pageUp()
+
+	def right(self):
+		self.serverlist.pageDown()
+
+	def close(self, server = None):
+		Screen.close(self, server, self.defaultServer)
+
+	def ok(self):
+		self.close(self.serverlist.getSelection())
+
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/__init__.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/__init__.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/__init__.py	(revision 8775)
@@ -0,0 +1,30 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+from Components.Language import language
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
+import os,gettext
+
+def localeInit():
+	lang = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
+	os.environ["LANGUAGE"] = lang # Enigma doesn't set this (or LC_ALL, LC_MESSAGES, LANG). gettext needs it!
+	gettext.bindtextdomain("enigma2", resolveFilename(SCOPE_LANGUAGE))
+	gettext.textdomain("enigma2")
+	gettext.bindtextdomain("VlcPlayer", resolveFilename(SCOPE_PLUGINS, "Extensions/VlcPlayer/locale"))
+
+def _(txt):
+	t = gettext.dgettext("VlcPlayer", txt)
+	if t == txt:
+		print "[VLC] fallback to default translation for", txt
+		t = gettext.gettext(txt)
+	return t
+
+localeInit()
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/maintainer.info
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/maintainer.info	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/maintainer.info	(revision 8775)
@@ -0,0 +1,2 @@
+alex@laetsch.de
+VlcPlayer
Index: /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/plugin.py
===================================================================
--- /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/plugin.py	(revision 8775)
+++ /ipk/source.sh4/swapmediacenter_vlcplayer_2_6/var/swap/extensions/VlcPlayer/plugin.py	(revision 8775)
@@ -0,0 +1,70 @@
+# -*- coding: ISO-8859-1 -*-
+#===============================================================================
+# VLC Player Plugin by A. Lätsch 2007
+#                   modified by Volker Christian 2008
+#
+# This is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#===============================================================================
+
+
+from Plugins.Plugin import PluginDescriptor
+
+from VlcServerList import VlcServerListScreen
+from VlcMediaList import VlcMediaListScreen
+from VlcServerConfig import vlcServerConfig
+
+import gettext
+
+def _(txt):
+	t = gettext.dgettext("VlcPlayer", txt)
+	if t == txt:
+		print "[VLC] fallback to default translation for", txt
+		t = gettext.gettext(txt)
+	return t
+	
+
+class __VlcManager():
+	def __init__(self, session):
+		print "[VLC] VlcManager"
+		self.session = session
+
+	def startSession(self):
+		defaultServer = vlcServerConfig.getDefaultServer()
+		if defaultServer is None:
+			self.openServerlist()
+		else:
+			self.openMedialist(defaultServer)
+		
+	def openServerlist(self):
+		print "[VLC] openServerlist"
+		defaultServer = vlcServerConfig.getDefaultServer()
+		self.session.openWithCallback(self.serverlistClosed, VlcServerListScreen, defaultServer)
+
+	def serverlistClosed(self, selectedServer, defaultServer):
+		vlcServerConfig.setAsDefault(defaultServer)
+		self.openMedialist(selectedServer)
+		
+	def openMedialist(self, selectedServer):
+		print "[VLC] openMedialist"
+		if selectedServer is not None:
+			self.session.openWithCallback(self.medialistClosed, VlcMediaListScreen, selectedServer).keyUpdate()
+
+	def medialistClosed(self, proceed = False):
+		print "[VLC] medialistClosed"
+		if proceed:
+			self.openServerlist()
+
+
+def main(session, **kwargs):
+	__VlcManager(session).startSession()
+
+
+def Plugins(**kwargs):
+	return PluginDescriptor(
+		name="VLC Video Player",
+		description=_("A video streaming solution based on VLC"),
+		where = [ PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_PLUGINMENU ],
+		icon = "plugin.png", fnc = main)
