Index: /ipk/source/needupdate_addonmanager_3_04/CONTROL/control
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/CONTROL/control	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/CONTROL/control	(revision 12164)
@@ -0,0 +1,11 @@
+Package: enigma2-plugin-system-addonmanager
+Version: 3.04
+Architecture: sh4
+OE: Addonmanager for your AAF Duckbox
+Section: extra
+Priority: optional
+Maintainer: AAF
+Homepage: http://www.aaf-digital.info
+Source: http://www.aaf-digital.info
+Description: Addonmanager 3.04
+
Index: /ipk/source/needupdate_addonmanager_3_04/CONTROL/postinst
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/CONTROL/postinst	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/CONTROL/postinst	(revision 12164)
@@ -0,0 +1,12 @@
+#!/bin/sh
+TMP=/tmp/.system
+
+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/needupdate_addonmanager_3_04/CONTROL/postrm
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/CONTROL/postrm	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/CONTROL/postrm	(revision 12164)
@@ -0,0 +1,12 @@
+#!/bin/sh
+TMP=/tmp/.system
+
+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/needupdate_addonmanager_3_04/CONTROL/preinst
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/CONTROL/preinst	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/CONTROL/preinst	(revision 12164)
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+TMP=/tmp/.system
+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 - 50`
+	SIZE=280
+	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"
+		echo "you can find the same IPK for your swapstick in swapsystem"
+		exit 1
+	else
+		echo ok
+	fi
+fi   
+echo "installing Addonmanager......"
+buildgroup=`cat /etc/.buildgroup`
+echo "checking OS"	 
+if  [ `cat /etc/motd | grep $buildgroup | grep M | grep rev | wc -l` -eq 0 ]; then 	 	 
+	echo --------------------------- 	 	 
+	echo DONT USE this IPK Package!! 	 	 
+	echo --- 	 	 
+	echo Only for $buildgroup Image!! 	 	 
+	echo --------------------------- 	 	 
+	exit 1 	 	 
+fi
+exit 0
Index: /ipk/source/needupdate_addonmanager_3_04/CONTROL/prerm
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/CONTROL/prerm	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/CONTROL/prerm	(revision 12164)
@@ -0,0 +1,11 @@
+#!/bin/sh
+TMP=/tmp/.system
+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 Addonmanager"
+exit 0
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/backup.sh
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/backup.sh	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/backup.sh	(revision 12164)
@@ -0,0 +1,251 @@
+#!/bin/sh
+# ***********************************************************
+#              Backupscript nach Methode niovs
+#              wird vom Addon-Manager aufgerufen
+#
+#           kann beliebig für jede Box weitert werden
+#
+#           angepasst fuer Fortis-Boxen by Bauernbub
+# ***********************************************************
+
+boxtyp="`cat /proc/stb/info/model`"
+
+# check for saved settings
+if [ ! -e /var/etc/restore.cfg ]; then
+  # make a default and say all yes
+  settings=n
+  binarys=n
+  camconfig=n
+  plugins=n
+  network=n
+  samba=n
+  bilder=n
+  sonstige=n
+  addonmanager=y
+  backup=y
+  cp /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh /var/etc/
+else
+  . /var/etc/restore.cfg   # read config from Addon-Manager
+fi
+
+if [ "$boxtyp" == "dm8000" ]
+  then
+    BOXDIR="backup_vu"
+    echo -e "***********************************************************"
+    echo -e "**************Sicherung VU Plus oder Dreambox**************"
+    echo -e "***********************************************************\n"
+  else
+    BOXDIR="backup_fortis"
+    echo -e "***********************************************************"
+    echo -e "**************Sicherung Fortis Box gestartet **************"
+    echo -e "***********************************************************\n"
+fi
+
+echo -e "\nLege Ordner und die Sicherungsdatei an"
+
+if [ `mount | grep "on /var/swap" | wc -l` -ge 1 ]; then DIR="/var/swap/$BOXDIR"; fi
+if [ `mount | grep "on /media/hdd" | wc -l` -eq 1 ]; then DIR="/media/hdd/$BOXDIR"; fi
+
+
+
+# make a backup copy
+if [ -e "$DIR" ]; then
+  echo -e "\nLege eine Sicherungsdatei des alten Backup an"
+  oldtime=`date +%d.%m_%H.%M`
+  echo "---> $DIR"_"$oldtime"
+  mv  "$DIR" "$DIR"_"$oldtime"
+fi
+
+mkdir -p $DIR/
+rm -f $DIR/backup.log ; touch $DIR/backup.log
+
+if [ "$boxtyp" == "dm8000" ]
+ then
+ if [ "$settings" == "y" ]
+	then
+		tar -cvf $DIR/settings.tar /etc/enigma2/* /etc/tuxbox/* >> $DIR/backup.log
+		echo -e "******** Settings gesichert ********\n"
+	else
+	echo "******** Settings NICHT gesichert ********\n"
+ fi
+
+ if [ "$camconfig" == "y" ]
+  then
+   tar -cvf $DIR/camconfig.tar /var/keys/* /usr/scce/* /etc/CC* /usr/scam/* >> $DIR/backup.log
+   echo -e "******** Camconfig gesichert ********\n"
+  else
+   echo "******** Camconfig NICHT gesichert ********\n"
+ fi
+
+ if [ "$plugins" == "y" ]
+  then
+		ipkg list_installed |grep enigma2-plugin > /tmp/ipkg.list
+		cut -f 1 -d " " /tmp/ipkg.list > $DIR/ipkg.list
+		echo -e "******** Plugins gesichert ********\n"
+  else
+    echo -e "******** Plugins NICHT gesichert ********\n"
+ fi
+
+ if [ "$network" == "y" ]
+  then
+ 		tar -cvf $DIR/network.tar /etc/hostname /etc/resolv.conf /etc/wpa_supplicant.conf /etc/network/interfaces >> $DIR/backup.log
+		echo -e "******** Netzwerkkonfiguration gesichert ********\n"
+  else
+    echo -e "******** Netzwerkkonfiguration NICHT gesichert ********\n"
+ fi
+
+ if [ "$samba" == "y" ]
+  then
+    tar -cvf $DIR/samba.tar /etc/samba/smb.conf >> $DIR/backup.log
+		echo -e "******** Sambakonfiguration gesichert ********\n"
+  else
+    echo -e "******** Sambakonfiguration NICHT gesichert ********\n"
+ fi
+
+ if [ "$bilder" == "y" ]
+  then
+    tar -cvf $DIR/bilder.tar /usr/share/enigma2/*.mvi /usr/share/*.mvi >> $DIR/backup.log
+		echo -e "******** Bootbilder und Radiobild gesichert ********\n"
+  else
+    echo -e "******** Bootbilder und Radiobild NICHT gesichert ********\n"
+ fi
+
+ if [ "$sonstige" == "y" ]
+  then
+		if [ -e /etc/inadyn.conf ]
+    	then
+       tar -cvf $DIR/sonstige.tar /etc/fstab /etc/localtime /etc/inadyn.conf /etc/videomode /etc/ntpserver /etc/passwd>> $DIR/backup.log
+		   echo -e "******** sonstige Konfigurationsdateien gesichert inkl. DynDNS-Config ********\n"
+	 	  else
+       tar -cvf $DIR/sonstige.tar /etc/fstab /etc/localtime /etc/videomode /etc/ntpserver /etc/passwd>> $DIR/backup.
+       echo -e "******** sonstige Konfigurationsdateien gesichert ********\n"
+    fi
+     else
+       echo -e "******** sonstige Konfigurationsdateien NICHT gesichert ********\n"
+ fi
+
+
+else  # Boxtyp is not dm8000 (vubox)
+ if [ "$settings" == "y" ]
+	then
+		tar -cvf $DIR/settings.tar /usr/local/share/enigma2/* /var/etc/enigma2/* /etc/tuxbox/* /var/etc/blueKey >> $DIR/backup.log
+		echo -e "******** Settings gesichert ********\n"
+	else
+	echo "******** Settings NICHT gesichert ********\n"
+ fi
+
+ if [ "$camconfig" == "y" ]
+  then
+   tar -cvf $DIR/camconfig.tar /var/emu/* /var/keys/* /var/etc/*emu /var/etc/active_cam >> $DIR/backup.log
+   echo -e "******** Camconfig gesichert ********\n"
+  else
+   echo "******** Camconfig NICHT gesichert ********\n"
+ fi
+
+ if [ "$binarys" == "y" ]
+  then
+   tar -cvf $DIR/bin.tar /var/bin/* >> $DIR/backup.log
+   echo -e "******** Binarys gesichert ********\n"
+  else
+   echo "******** Binarys NICHT gesichert ********\n"
+ fi
+
+ if [ "$plugins" == "y" ]
+  then
+		ipkg list_installed |grep enigma2-plugin > /tmp/ipkg.list
+		cut -f 1 -d " " /tmp/ipkg.list > $DIR/ipkg.list
+
+    # check ob Referenzliste existiert
+    if [ ! -e /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/dirlist ]; then
+        echo "Aafpanel
+        BoardViewer
+        DVDPlayer
+        GraphMultiEPG
+        IMDb
+        MediaCenter
+        OSDAdjustment
+        PlugLoad
+        SimpleBitrate
+        SocketMMI
+        SplitScreen
+        VFD_Brightness
+        VirtualZap
+        Volume_adjust
+        WebInterface" >/usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/dirlist
+ 		    #wget -O /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/dirlist http://kati910.aaf-board.info/dbase/E2/online/dirlist
+ 		    #chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/dirlist
+    fi
+
+    # welche Plugins wurden zusaetzlich installiert?
+    cd /usr/lib/enigma2/python/Plugins/Extensions
+
+    # welche sind jetzt installiert?
+    ls -A1 >/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/curlist
+    cd /usr/lib/enigma2/python/Plugins/Extensions/AddonManager
+
+    # vergleiche Standartplugins mit installierten
+    diff dirlist curlist >difflist
+    grep "^+[^+_]" difflist | sed ' s/+//g' >difflist2
+
+    list="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/difflist2"
+    dir2="/usr/lib/enigma2/python/Plugins/Extensions/"
+
+    string="$DIR/plugins.tar"
+    for i in $(cat $list); do
+      string=$string" "$dir2$i
+    done
+    tar -cvf $string >> $DIR/backup.log
+ 		tar -cvf $string /var/etc/uninst/*  >> $DIR/backup.log
+
+    rm /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/difflist*
+    rm /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/curlist
+		echo -e "******** Plugins gesichert ********\n"
+  else
+    echo -e "******** Plugins NICHT gesichert ********\n"
+ fi
+
+ if [ "$network" == "y" ]
+  then
+ 		tar -cvf $DIR/network.tar /var/etc/automount/* /var/etc/hostname /var/etc/hosts /var/etc/resolv.conf /var/etc/default_gw /var/etc/wpa_supplicant.conf /var/etc/network/interfaces >> $DIR/backup.log
+		echo -e "******** Netzwerkkonfiguration gesichert ********\n"
+  else
+    echo -e "******** Netzwerkkonfiguration NICHT gesichert ********\n"
+ fi
+
+ if [ "$samba" == "y" ]
+  then
+    tar -cvf $DIR/samba.tar /var/etc/smb.conf >> $DIR/backup.log
+		echo -e "******** Sambakonfiguration gesichert ********\n"
+  else
+    echo -e "******** Sambakonfiguration NICHT gesichert ********\n"
+ fi
+
+if [ "$addonmanager" == "y" ]
+	then
+     	tar -cvf $DIR/am.tar /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/* >> $DIR/backup.log
+			echo -e "******** AddonManager wurde gesichert ********\n"
+  else
+	  	echo -e "******** AddonManager NICHT vorhanden! ********\n"
+fi
+
+ if [ "$sonstige" == "y" ]
+  then
+		if [ -e /var/etc/inadyn.conf ]
+    	then
+       tar -cvf $DIR/sonstige.tar /var/etc/fstab /var/etc/localtime /var/etc/inadyn.conf /var/etc/videomode /var/etc/ntpserver /var/etc/passwd>> $DIR/backup.log
+		   echo -e "******** sonstige Konfigurationsdateien gesichert inkl. DynDNS-Config ********\n"
+	 	  else
+       tar -cvf $DIR/sonstige.tar /var/etc/fstab /var/etc/localtime /var/etc/videomode /var/etc/ntpserver /var/etc/passwd>> $DIR/backup.
+       echo -e "******** sonstige Konfigurationsdateien gesichert ********\n"
+    fi
+     else
+       echo -e "******** sonstige Konfigurationsdateien NICHT gesichert ********\n"
+ fi
+fi
+
+# for automatic restore after flashing
+cp /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh /var/etc/restore.sh
+cp /var/etc/restore.cfg $DIR/restore.cfg
+cp /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh $DIR/restore.sh
+
+exit 0
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/dirlist
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/dirlist	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/dirlist	(revision 12164)
@@ -0,0 +1,16 @@
+Aafpanel
+BoardViewer
+DVDPlayer
+GraphMultiEPG
+IMDb
+MediaCenter
+OSDAdjustment
+PlugLoad
+SimpleBitrate
+SocketMMI
+SplitScreen
+VFD_Brightness
+VirtualZap
+Volume_adjust
+WebInterface
+
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/downloader.py
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/downloader.py	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/downloader.py	(revision 12164)
@@ -0,0 +1,1549 @@
+from Components.ActionMap import HelpableActionMap
+from Plugins.Plugin import PluginDescriptor
+from Screens.PluginBrowser import *
+from Screens.SleepTimerEdit import *
+from Screens.Ipkg import Ipkg
+from Components.Ipkg import IpkgComponent
+from Components.SelectionList import SelectionList
+from Screens.NetworkSetup import *
+from enigma import *
+from Screens.Standby import *
+from Screens.MessageBox import MessageBox
+from Screens.Console import Console
+from Components.ActionMap import ActionMap, NumberActionMap
+from Screens.Screen import Screen
+from Components.MenuList import MenuList
+from Components.Label import Label
+from Components.ScrollLabel import ScrollLabel
+from Components.Pixmap import Pixmap
+from Components.config import config, ConfigSubsection, ConfigText, ConfigSubList, getConfigListEntry, ConfigSelection,  ConfigIP, ConfigYesNo, ConfigSequence, ConfigNumber, ConfigInteger
+from Components.ConfigList import ConfigListScreen
+from Components.MenuList import MenuList
+from Screens.Screen import Screen
+from Screens.ChoiceBox import ChoiceBox
+from Components.Sources.StaticText import StaticText
+from Components.Sources.Progress import Progress
+from Components.Label import Label
+from Components.FileList import FileList
+from Components.MultiContent import MultiContentEntryText
+from Tools.Directories import fileExists
+from Tools.Directories import pathExists
+from Screens.Console import Console
+from os import system, remove, path, walk, makedirs, listdir
+from Screens.VirtualKeyBoard import VirtualKeyBoard
+
+import re
+import urllib
+import os
+import base64
+from subprocess import Popen,PIPE
+import ServiceReference
+
+from twisted.cred import checkers
+from twisted.web import client
+from twisted.internet import reactor, defer
+from twisted.python import failure
+
+global serverurl
+global activenam
+global activesource
+global version
+global checkok
+global menu
+global PreviewPath
+
+# for local compile in the box
+#
+# import py_compile
+# py_compile.compile("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/downloader.py")
+
+version = "3.04"
+serverurl = ""
+activenam = ""
+activesource = ""
+readyflag = 0
+checkok = True
+usblist = ""
+
+RestoreYesNo = [('y',_("yes")),('n',_("no"))]
+RestoreNoYes = [('n',_("no")),('y',_("yes"))]
+
+font = "Regular;16"
+os.system("mkdir -p /tmp/aaf")
+#os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/url_check.sh")
+
+activesource = "http://kati910.aaf-board.info/dbase"
+#activesource = "http://97.74.32.10/dbase/ufs-e2"
+activenam = "Addons-Server"
+serverurl = activesource + "/E2/"
+PreviewPath = "http://97.74.32.10/svn/preview"
+
+# Boytyp lesen
+file = open("/proc/stb/info/model", "r")
+box = file.readline().strip()
+file.close()
+
+# dm8000 is a vu-box
+#box = "dm8000"
+if box == "dm8000":
+  serverurl = activesource + "/vuplus/"
+
+config.AddonManager = ConfigSubsection()
+config.AddonManager.which_server = ConfigInteger(2, limits=(1, 2))
+config.AddonManager.preview_timeout = ConfigInteger(default=600,limits=(50, 2000))
+config.AddonManager.preview_on = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.marker_on = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.marker_off = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.mark_color = ConfigInteger(1, limits=(0, 2))
+config.AddonManager.ungenau = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.Schriftart = ConfigInteger(16, limits=(10, 22))
+
+config.AddonManager2 = ConfigSubsection()
+config.AddonManager2.sett_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.camconfig_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.plug_on = ConfigSelection(RestoreNoYes)
+config.AddonManager2.binarys_on = ConfigSelection(RestoreNoYes)
+config.AddonManager2.network_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.samba_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.bilder_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.sonstige_on = ConfigSelection(RestoreYesNo)
+config.AddonManager2.am_on = ConfigSelection(RestoreNoYes)
+config.AddonManager2.backup_on = ConfigSelection(RestoreYesNo)
+
+
+RESTORE_CONFIG_SKIN = """<screen position="center,center" size="620,360" title="Backup Restore Setup" >
+  <widget name="config" position="20,2" size="570,253" scrollbarMode="showOnDemand" />
+	<widget name="label1" position="10,265" size="610,50" font="Regular;18" zPosition="1" backgroundColor="#251e1f20" transparent="1" />
+	<eLabel backgroundColor="white" position="10,265" size="610,1" zPosition="5"/>
+	<eLabel backgroundColor="red" position="37,330" size="150,3" zPosition="5"/>
+	<eLabel backgroundColor="green" position="224,330" size="150,3" zPosition="5"/>
+	<eLabel backgroundColor="yellow" position="411,330" size="150,3" zPosition="5"/>
+	<widget name="key_red" position="37,296" zPosition="1" size="150,40" font="Regular;20" halign="center" valign="center" transparent="1" />
+	<widget name="key_green" position="224,296" zPosition="1" size="150,40" font="Regular;20" halign="center" valign="center" transparent="1" />
+	<widget name="key_yellow" position="411,296" zPosition="1" size="150,40" font="Regular;20" halign="center" valign="center" transparent="1" />
+</screen>"""
+
+SELECTRESTORE_SKIN = """
+		<screen position="center,center" size="520,376" title="Auswahlmenue fuer Restore" >
+			<ePixmap position="445,0" size="70,53" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/picon_default.png" transparent="1" alphatest="on" />
+			<ePixmap position="90,350" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
+			<ePixmap position="270,350" size="36,20" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
+			<eLabel text="RESTORE - Auswahl" position="70,12" size="480,35" font="Regular;30" foregroundColor="#ffa323" transparent="1" />
+			<eLabel text="Delete" position="130,350" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="Restore" position="310,350" size="240,25" font="Regular;20" transparent="1" />
+			<widget name="filelist" position="10,110" size="520,232" scrollbarMode="showOnDemand" />
+		</screen>"""
+
+
+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 command(comandline):
+  print "[Addon-Manager] command=", comandline
+  comandline = comandline + " >/tmp/command.txt"
+  os.system(comandline)
+  text = ""
+  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
+
+def restore():
+		ffile = open("/var/etc/restore.cfg", "w")
+		ffile.write('settings=' + config.AddonManager2.sett_on.value[0] + '\n' )
+		ffile.write('binarys=' + config.AddonManager2.camconfig_on.value[0] + '\n')
+		ffile.write('camconfig=' + config.AddonManager2.plug_on.value[0] + '\n')
+		ffile.write('plugins=' + config.AddonManager2.network_on.value[0] + '\n')
+		ffile.write('network=' + config.AddonManager2.samba_on.value[0] + '\n')
+		ffile.write('samba=' + config.AddonManager2.bilder_on.value[0] + '\n')
+		ffile.write('sonstige=' + config.AddonManager2.sonstige_on.value[0] + '\n')
+		ffile.write('addonmanager=' + config.AddonManager2.am_on.value[0] + '\n')
+		ffile.close()
+
+restore()
+
+#----- Class Cancel -------------------------------------------------------
+class UserRequestedCancel(Exception):
+	pass
+
+#----- Progressdownloader -------------------------------------------------
+class HTTPProgressDownloader(client.HTTPDownloader):
+	def __init__(self, url, outfile, headers=None):
+		#client.HTTPDownloader.__init__(self, url, outfile, headers={"Authorization":authHeader}, agent="AAF Download Plugin")
+		client.HTTPDownloader.__init__(self, url, outfile, agent="AAF Download Plugin")
+		self.status = None
+		self.progress_callback = None
+		self.deferred = defer.Deferred()
+
+	def noPage(self, reason):
+		if self.status == "304":
+			print reason.getErrorMessage()
+			client.HTTPDownloader.page(self, "")
+		else:
+			client.HTTPDownloader.noPage(self, reason)
+
+	def gotHeaders(self, headers):
+		if self.status == "200":
+			if headers.has_key("content-length"):
+				self.totalbytes = int(headers["content-length"][0])
+			else:
+				self.totalbytes = 0
+			self.currentbytes = 0.0
+		return client.HTTPDownloader.gotHeaders(self, headers)
+
+	def pagePart(self, packet):
+		if self.status == "200":
+			self.currentbytes += len(packet)
+		if self.totalbytes and self.progress_callback:
+			self.progress_callback(self.currentbytes, self.totalbytes)
+		return client.HTTPDownloader.pagePart(self, packet)
+
+	def pageEnd(self):
+		return client.HTTPDownloader.pageEnd(self)
+
+class downloadWithProgress:
+	def __init__(self, url, outputfile, contextFactory=None, *args, **kwargs):
+		scheme, host, port, path = client._parse(url)
+		self.factory = HTTPProgressDownloader(url, outputfile, *args, **kwargs)
+		self.connection = reactor.connectTCP(host, port, self.factory)
+
+	def start(self):
+		return self.factory.deferred
+
+	def stop(self):
+		print "[Addon-Manager] [stop]"
+		self.connection.disconnect()
+		#self.factory.deferred.errback(failure.Failure(UserRequestedCancel))
+
+	def addProgress(self, progress_callback):
+		print "[Addon-Manager] [addProgress]"
+		self.factory.progress_callback = progress_callback
+
+class Feedlist(MenuList):
+	def __init__(self, list=[], enableWrapAround = False):
+		MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
+
+		Schriftart = config.AddonManager.Schriftart.value
+		self.l.setFont(0, gFont("Regular", Schriftart))
+		self.l.setItemHeight(22)
+
+	def clear(self):
+		del self.list[:]
+		self.l.setList(self.list)
+
+	def getPLUGINname(self):
+		l = self.l.getCurrentSelection()
+		return l and l[0][0]
+
+	def getPLUGINurl(self):
+		l = self.l.getCurrentSelection()
+		return l and l[0][1]
+
+	def getLISTname(self):
+		l = self.l.getCurrentSelection()
+		return l and l[0][0][:-2]+"txt"
+
+	def getLISTurl(self):
+		l = self.l.getCurrentSelection()
+		return l and l[0][1][:-2]+"txt"
+
+	def isValid(self):
+		l = self.l.getCurrentSelection()
+		if l[0] == 0:
+			return False
+		else:
+			return True
+
+	def moveSelection(self,idx=0):
+		if self.instance is not None:
+			self.instance.moveSelectionTo(idx)
+
+class PLUGINDownload(Screen):
+	LIST_SOURCE = 1
+	LIST_DEST = 2
+	Skin = """
+		<screen name="PLUGINDownload" position="{screen.pos}" size="{screen.size}" title="{version.text}">
+			<ePixmap pixmap="skin_default/buttons/red.png" position="{red.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="skin_default/buttons/green.png" position="{green.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="skin_default/buttons/yellow.png" position="{yellow.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="skin_default/buttons/blue.png" position="{blue.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pressed.png" position="{red2.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pressed.png" position="{green2.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pressed.png" position="{yellow2.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pressed.png" position="{blue2.pos}" zPosition="0" size="140,40" transparent="1" alphatest="on" />
+			<widget source="key_red" render="Label" position="{red.pos}" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
+			<widget source="key_green" render="Label" position="{green.pos}" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
+			<widget source="key_yellow" render="Label" position="{yellow.pos}" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
+			<widget source="key_blue" render="Label" position="{blue.pos}" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
+			<widget source="key_1" render="Label" position="{red2.pos}" zPosition="1" size="140,40" font="Regular;16" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
+			<widget source="key_2" render="Label" position="{green2.pos}" zPosition="1" size="140,40" font="Regular;16" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
+			<widget source="key_3" render="Label" position="{yellow2.pos}" zPosition="1" size="140,40" font="Regular;16" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
+			<widget source="key_4" render="Label" position="{blue2.pos}" zPosition="1" size="140,40" font="Regular;16" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
+			<widget source="label_top" render="Label" position="10,94" size="340,20" foregroundColor="#3366ff" font="Regular;16" />
+			<widget name="feedlist" position="10,116" size="{feed.size}" scrollbarMode="showOnDemand" />
+			<widget name="destlist" position="0,116" size="{dest.size}" scrollbarMode="showOnDemand" />
+			<widget source="label_bottom" render="Label" position="10,352" size="240,18" foregroundColor="#3366ff" font="Regular;16"/>
+			<widget source="infolabel" render="Label" position="{infolabel.pos}" size="{infolabel.size}" font="Regular;16" />
+			<widget name="Preview" position="{prev.pos}" size="{prev.size}" alphatest="on"/>
+			<widget source="job_progressbar1" render="Progress" position="10,390" size="{progr.size}" borderWidth="1" backgroundColor="#9f1313" />
+			<widget source="job_progresslabel1" render="Label" position="130,394" zPosition="2" font="Regular;18" halign="center" transparent="1" size="{proglabel.size}" foregroundColor="#000000" />
+			<widget source="job_progressbar" render="Progress" position="10,390" size="{progr.size}" borderWidth="1" backgroundColor="#254f7497" />
+			<widget source="job_progresslabel" render="Label" position="130,394" zPosition="2" font="Regular;18" halign="center" transparent="1" size="{proglabel.size}" foregroundColor="#000000" />
+			<widget source="statusbar" render="Label" position="10,420" size="{status.size}" font="Regular;16" foregroundColor="#cccccc" />
+		</screen>"""
+
+# 			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/aaf.png" position="{logo.pos}" zPosition="0" size="160,140" transparent="1" alphatest="on" />
+
+	def __init__(self, session, destdir="/tmp/aaf/"):
+		#switch automatic to current skin
+		current_w = getDesktop(0).size().width()
+		current_h = getDesktop(0).size().height()
+		print "[Addon-Manager] DESKTOPsize is",current_w,current_h
+
+		# define the start koordinates and size
+		if current_w == 1280:
+				size_w = 720
+				size_h = 442
+		else:
+				size_w = 560
+				size_h = 442
+
+		# calculate Skin koordinates
+		font = "Regular;18"
+		vers = "AAF Addon-Manager V " + version
+		pos_w = (current_w - size_w)/2
+		pos_h = (current_h - size_h)/2
+		list_w = size_w - 20
+		list_pos = (size_w - list_w)/2
+		red_pos = size_w/2 - 280
+		green_pos = size_w/2 - 140
+		yellow_pos = size_w/2
+		blue_pos = size_w/2 + 140
+		feed_size = size_w/2 - 30
+		dest_size = feed_size + 10
+		prev_size = size_w/2 - 15
+		prev_pos = size_w/2
+		proglabel_size = size_w/2 + 20
+		infolabel_pos = size_w/2 - 10
+		infolabel_size = size_w/2 - 15
+		logo_pos = size_w -100
+
+		# set Skinvariables
+		self.dict = {
+				'font': font,
+				'version.text': vers,
+				'list.size': "%i,232"%(list_w),
+				'feed.size': "%i,222"%(feed_size),
+				'dest.size': "%i,222"%(dest_size),
+				'prev.size': "%i,284"%(prev_size),
+				'progr.size': "%i,26"%(list_w),
+				'proglabel.size': "%i,22"%(proglabel_size),
+				'status.size': "%i,16"%(list_w),
+
+				'list.pos': "%i,110"%(list_pos),
+				'prev.pos': "%i,120"%(prev_pos),
+				'screen.size': "%i,%i"%(size_w,size_h),
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				'red.pos': "%i,0"%(red_pos),
+				'green.pos': "%i,0"%(green_pos),
+				'yellow.pos': "%i,0"%(yellow_pos),
+				'blue.pos': "%i,0"%(blue_pos),
+				'red2.pos': "%i,40"%(red_pos),
+				'green2.pos': "%i,40"%(green_pos),
+				'yellow2.pos': "%i,40"%(yellow_pos),
+				'blue2.pos': "%i,40"%(blue_pos),
+
+				'infolabel.size': "%i,284"%(infolabel_size),
+				'infolabel.pos': "%i,94"%(infolabel_pos),
+				'logo.pos': "%i,336"%(logo_pos),
+				}
+		self.skin = applySkinVars(PLUGINDownload.Skin,self.dict)
+
+		Screen.__init__(self, session)
+		
+		self["job_progressbar"] = Progress()
+		self["job_progresslabel"] = StaticText()
+		self["job_progressbar1"] = Progress()
+		self["job_progresslabel1"] = StaticText()
+		self["infolabel"] = StaticText()
+		self["statusbar"] = StaticText()
+		self["label_top"] = StaticText()
+		self["label_bottom"] = StaticText()
+		self["path_bottom"] = StaticText()
+		self["key_green"] = StaticText()
+		self["key_yellow"] = StaticText()
+		self["key_blue"] = StaticText()
+		self["key_red"] = StaticText()
+		self["key_1"] = StaticText()
+		self["key_2"] = StaticText()
+		self["key_3"] = StaticText()
+		self["key_4"] = StaticText()
+
+		self["feedlist"] = Feedlist([0,(eListboxPythonMultiContent.TYPE_TEXT, 0, 0,250, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, "feed not available")])
+
+		self.currDir = "/mnt/usb"
+		self["destlist"] = FileList(self.currDir, showDirectories = True, isTop = True)
+		self["destlist"].hide()
+		self["Preview"] = Pixmap()
+		self["Preview"].hide()
+
+		self.download_container = eConsoleAppContainer()
+		self.LIST = ""
+		self.LISTfile = ""
+		self.feedhtml = ""
+		self.focus = None
+		self.download = None
+		self.plug = "all"
+		self.farbe = 1
+		self.ListTyp = "pic"
+
+		self.feed_base = serverurl + "%s/" % self.plug
+		self.plugin_filter = ""
+		#self.showpreview = "on"
+
+		self.showpreview = config.AddonManager.preview_on.value
+		self.previewtimeout = config.AddonManager.preview_timeout.value
+		self.marker_on = config.AddonManager.marker_on.value
+		self.marker_off = config.AddonManager.marker_off.value
+
+		self.ThumbTimer = eTimer()
+		self.ThumbTimer.callback.append(self.list_download)
+
+		self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "EPGSelectActions", "MenuActions", "InfobarTeletextActions", "NumberActions", "MovieSelectionActions", "InfobarActions"],
+			{
+				"cancel": self.closeCB,
+				"red": self.red_download,
+				"green": self.green_download,
+				"yellow": self.yellow_download,
+				"blue": self.blue_download,
+
+				"1": self.eins_download,
+				"2": self.FavMenu,
+				"3": self.drei_download,
+				"4": self.vier_download,
+				"5": self.fuenf_download,
+				"6": self.BackupRestore,
+				"9": self.sh_preview,
+				"0": self.update,
+
+				"prevBouquet": self.switchList,
+				"nextBouquet": self.switchList,
+				"ok": self.check_download,
+				"left": self.left,
+				"right": self.right,
+				"up": self.up,
+				"upRepeated": self.up,
+				"downRepeated": self.down,
+				"menu": self.settings_menu,
+				"startTeletext": self.switch_ListTyp,
+				"showEventInfo": self.info,
+				"showTv": self.FavMenu,
+				"down": self.down
+			}, -1)
+
+		aafpointer = 0
+		#/etc/imageinfo AAF Enigma2
+		fd=open("/etc/imageinfo","r")
+		for line in fd:
+			if line.find("AAF Enigma2") > -1:
+				aafpointer = aafpointer +1
+		fd.close
+
+		# /etc/motd wElc0me to AAF
+		fd=open("/etc/motd","r")
+		for line in fd:
+			if line.find("wElc0me to") > -1:
+				aafpointer = aafpointer +1
+		fd.close
+
+		# Url Check
+		os.system("cat /var/etc/ipkg/official-feed.conf | cut -d '/' -f4 > /tmp/onlineupdate")
+		fd=open("/tmp/onlineupdate","r")
+		url=fd.readline().strip()
+		fd.close()
+
+		if url.find("97.74.32.10") > -1:
+			aafpointer = aafpointer +1
+		if url.find("addons.aaf-board.net") > -1:
+			aafpointer = aafpointer +1
+
+		if str(aafpointer) <= "0":
+		#if str(aafpointer) <= "2":
+			print "Permission denied ", str(aafpointer)
+			self["statusbar"].text = _("Sorry, Permission denied")
+			self.close()
+		else:
+			self.focus = self.LIST_SOURCE
+			self.read_Boxtyp()
+
+			self.plug = "ipk"
+
+			if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/startservice.cfg"):
+				file = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/startservice.cfg","r")
+				self.plugin_filter = str(file.readline().strip())
+				file.close()
+			else:
+				self.plugin_filter = "-"  # show all ipk
+
+			if box <> "dm8000":
+				evfd.getInstance().vfd_write_string("load PlugList")
+			if os.path.exists("/var/etc/ipkg/official-feed.conf") is True:
+				file = open("/var/etc/ipkg/official-feed.conf", "r")
+				self.feed_base = file.readline().strip()
+				self.feed_base = self.feed_base.replace(u"src/gz cross ","")
+				self.feed_base = str(self.feed_base) + "/"
+			elif os.path.exists("/etc/ipkg/official-feed.conf") is True:
+				file = open("/etc/ipkg/official-feed.conf", "r")
+				self.feed_base = file.readline().strip()
+				self.feed_base = self.feed_base.replace(u"src/gz cross ","")
+				self.feed_base = str(self.feed_base) + "/"
+			self.feed_download()
+
+	def FavMenu(self):
+		Filter = "-"
+		self.session.openWithCallback(self.MenuCallback, FilterPanel,Filter)
+
+	def MenuCallback(self):
+		global menu
+		print "FavMenu Callback", menu
+		if menu == "stop":
+				menu = "-"
+		self.plugin_filter = menu
+		self.feed_finished(self.feedhtml)
+
+
+	def BackupRestoreVU(self):
+		self.session.open(RestoreConfigScreenVU)
+
+	def BackupRestore(self):
+			self.session.open(RestoreConfigScreenVU)
+
+	def downloading(self, state=True):
+		if state is True:	
+			self["key_red"].text = _("Cancel")
+			self["key_green"].text = ""
+			self["key_yellow"].text = ""
+			self["key_blue"].text = ""
+		else:
+			self.download = None
+			self["key_red"].text = _("System")
+			self["key_green"].text = (_("Skins"))
+			self["key_yellow"].text = (_("Players"))
+			self["key_blue"].text = (_("Emus"))
+			self["key_1"].text = _("(1) Bootbilder")
+			self["key_2"].text = (_("(2) Select"))
+			self["key_3"].text = (_("(3) SWAP all"))
+			self["key_4"].text = (_("(4) IPK all"))
+
+	def switchList(self,to_where=None):
+		if self.download or not self["feedlist"].isValid():
+			return
+
+		self["job_progressbar"].value = 0
+		self["job_progresslabel"].text = ""
+
+		if self.focus is  self.LIST_DEST:
+			self["statusbar"].text = _("Please select a target device")
+			self["label_top"].text = _("choose destination directory")+":"
+			self["feedlist"].hide()
+			self["destlist"].show()
+
+		if self.focus is self.LIST_SOURCE:
+			self["statusbar"].text = _("Please choose file from AAF Server to download")
+			self["label_top"].text = _("...select file (FAV = Filter)")
+			self["feedlist"].show()
+			self["destlist"].hide()
+			self["label_bottom"].text = _("attached to: ")+ activenam
+
+
+#----- load Menutext or Picture -------------------------------------------------------
+	def switch_ListTyp(self):
+		if self.ListTyp == "txt":
+			self.ListTyp = "pic"
+			self["Preview"].show()
+			LISTurl = self["feedlist"].getLISTurl()
+			LISTurl = LISTurl+".png"
+			print "[Addon-Manager] downloading " + LISTurl
+			self.download = self.list_download
+			self.downloading(True)
+			#client.getPage(LISTurl, headers={"Authorization":authHeader}).addCallback(self.pic_finished).addErrback(self.pic_failed)
+			client.getPage(LISTurl).addCallback(self.pic_finished).addErrback(self.pic_failed)
+
+		if self.ListTyp == "pic":
+			self.ListTyp = "txt"
+			self["statusbar"].text = ""
+			self.LISTfilename = ""
+			self.LIST = ""
+			self["Preview"].hide()
+			LISTurl = self["feedlist"].getLISTurl()
+			#client.getPage(LISTurl, headers={"Authorization":authHeader}).addCallback(self.list_finished).addErrback(self.list_failed)
+			client.getPage(LISTurl).addCallback(self.list_finished).addErrback(self.list_failed)
+			self["statusbar"].text = _("Downloading file description...")
+			self.downloading(False)
+
+#----- Menu Keys are pressed -------------------------------------------------------
+	def up(self):
+		if self.download:
+			return
+		if self.focus is self.LIST_SOURCE:
+			self["feedlist"].up()
+			self.ThumbTimer.start(self.previewtimeout, True)
+		if self.focus is self.LIST_DEST:
+			self["destlist"].up()
+
+	def down(self):
+		if self.download:
+			return
+		if self.focus is self.LIST_SOURCE:
+			self["feedlist"].down()
+			self.ThumbTimer.start(self.previewtimeout, True)
+		if self.focus is self.LIST_DEST:
+			self["destlist"].down()
+
+	def left(self):
+		if self.download:
+			return
+		if self.focus is self.LIST_SOURCE:
+			self["feedlist"].pageUp()
+			self.ThumbTimer.start(self.previewtimeout, True)
+		if self.focus is self.LIST_DEST:
+			self["destlist"].pageUp()
+
+	def right(self):
+		if self.download:
+			return
+		if self.focus is self.LIST_SOURCE:
+			self["feedlist"].pageDown()
+			self.ThumbTimer.start(self.previewtimeout, True)
+		if self.focus is self.LIST_DEST:
+			self["destlist"].pageDown()
+
+	def ok(self):
+		if self.download:
+			return
+		if self.focus is self.LIST_DEST:
+			if self["destlist"].canDescent():
+				self["destlist"].descent()
+
+	def settings_menu(self):
+		self.session.open(AddonConfigScreen)
+
+	def info(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Version V " + version)
+		message = "%s %s\n\n%s" % (_("AAF Addon-Manager\n\n     Version "), version, _("       AAF-Team\n\n@Bauernbub 2009"))
+		self.session.openWithCallback(self.update_now, MessageBox, message, MessageBox.TYPE_INFO)
+
+#----- AM Update -------------------------------------------------------
+	def update(self):
+		versurl = activesource + "/version_e2.txt"
+		h = urllib.urlretrieve(versurl, "/tmp/version_e2.txt")
+		dummy = open("/tmp/version_e2.txt").read()
+		version_server = dummy[0:len(dummy) -2]
+		if version_server == version:
+			print "[Addon-Manager] gleich"
+			message = "%s %s\n%s %s\n\n%s" % (_("Version am Server:"), version_server, _("Version in der Box:"), version, _("Ein Update ist nicht erforderlich!"))
+			if box <> "dm8000":
+				evfd.getInstance().vfd_write_string("No Update")
+			self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+		else:
+			if version_server > version:
+				message = "%s %s\n%s %s\n\n%s" % (_("Version am Server:"), version_server, _("Version in der Box:"), version, _("Ein Update ist empfehlenswert!"))
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("UPDATE is here")
+				self.session.openWithCallback(self.update_now, MessageBox, message, MessageBox.TYPE_YESNO)
+			else:
+				message = "%s %s\n%s %s\n\n%s" % (_("\nKlingt wie ein Scherz, aber die Version am Server ist aelter als die auf ihrer Box!\n\nVersion am Server:"), version_server, _("Version in der Box:"), version, _("NICHT UPDATEN, sie besitzen vermutlich eine fortgeschrittene Betaversion!"))
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("Update is older")
+				self.session.openWithCallback(self.update_now, MessageBox, message, MessageBox.TYPE_YESNO)
+
+	def update_now(self, answer):
+		self.downloading(False)
+		if answer == True:
+
+			if box <> "dm8000":
+				versurl = activesource + "/addon-man_e2.tar.gz"
+			else:
+				versurl = activesource + "/addon-man_vu_e2.tar.gz"
+
+			h = urllib.urlretrieve(versurl, "/tmp/aaf/addon-man_e2.tar.gz")
+
+			os.system("cd /tmp/aaf; tar -xzf addon-man_e2.tar.gz")
+			if os.path.exists("/tmp/aaf/addon-man_e2.tar.gz") is True:
+				os.system("cp -RP /tmp/aaf/* / ; sync")
+				os.system("rm -r /tmp/aaf")
+				os.system("cd / ; rm *tar.gz")
+				os.system("mkdir /tmp/aaf")
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("rebooting ....")
+				message = "%s" % (_("Der Addon-Manager hat einen Neustart angefordert!\nDie Box wird nun neu gestartet!"))
+				self.session.openWithCallback(self.update_now, MessageBox, message, MessageBox.TYPE_YESNO)
+				#self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+				#TryQuitMainloop(self.session,2)
+				os.system("killall -9 enigma2")
+
+#----- Feed Download Procedures -------------------------------------------------------
+	def feed_download(self):
+		self.downloading(True)
+		self.download = self.feed_download
+		print "[feed-download]" +  self.feed_base + "index.txt"
+
+		if os.path.exists("/tmp/aaf") is False:
+				os.system("mkdir /tmp/aaf")
+
+		ipkurl = command('cat /var/etc/ipkg/official-feed.conf | cut -d "/" -f4')
+		os.system("cd /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/; ./ipkdownload")
+		if os.path.exists("/tmp/aaf/index.txt") is True:
+				self.feedhtml = open("/tmp/aaf/index.txt").read()
+				self.feed_finished(self.feedhtml)
+
+
+	def feed_failed(self, failure_instance):
+		print "[Addon-Manager] [feed_failed] " + str(failure_instance)
+		self["infolabel"].text = _("Could not connect to AAF-Plugin Server:") + "\n" + failure_instance.getErrorMessage() + "\n\n" + _("Please check your network settings!")
+		self.downloading(False)
+
+	def feed_finished(self, feedhtml):
+		#print "[Addon-Manager] [feed_finished] " + str(feedhtml)
+		self.downloading(False)
+
+		fileresultmask = re.compile("(?P<name>.*?)\#\#(?P<url>.*?_sh4.ipk)", re.DOTALL)
+		if box == "dm8000":
+				fileresultmask = re.compile("(?P<name>.*?)\#\#(?P<url>.*?.ipk)", re.DOTALL)
+
+		if os.path.exists("/var/etc/uninst") is False:
+			os.system("mkdir -p /var/etc/uninst")
+
+		os.system("ls /var/etc/uninst >/tmp/uninst.txt")
+		os.system("ls /usr/lib/ipkg/info/*.postrm >>/tmp/uninst.txt")
+
+		fd=open("/tmp/uninst.txt")
+		inhalt=fd.read() # Lese die gesamte Datei
+		fd.close()
+		inhalt = inhalt.lower()
+		inhalt = inhalt.replace("\n","")
+		inhalt = inhalt.replace("\r","")
+		searchresults = fileresultmask.finditer(feedhtml)
+
+		ausblenden = 0
+		#self.ungenau = config.AddonManager.ungenau.value
+		self.farbe = config.AddonManager.mark_color.value
+
+		if self.farbe == 0:
+				farbwahl = 16711680
+		elif self.farbe == 1:
+				farbwahl = 65280
+		elif self.farbe == 2:
+				farbwahl = 49151
+		fileresultlist = []
+		if searchresults:
+			for x in searchresults:
+				url = x.group("url")
+
+				# filtering the Filename string
+				if url.find(self.plugin_filter) > -1:
+					#print "url=", url
+					ausblenden = 0
+				else:
+					ausblenden = 1
+
+				if url[0:7] != "http://":
+					url = self.feed_base + x.group("url")
+				name = x.group("name")
+				name_lo = name.lower()
+				name_lo = name_lo.replace("\n","")
+				name_lo = name_lo.replace("\r","")
+				font_s = 0
+				name_lo = name_lo.split("_")[0]
+				#print "name_lo = ", str(name_lo)
+
+				if self.marker_on == True:
+					if inhalt.find(name_lo) > -1 and ausblenden == 0:
+						font_s = 1
+						if self.marker_off != True:
+							ausblenden = 1
+						else:
+							ausblenden = 0
+
+				if ausblenden == 0:
+						if font_s == 1:
+							entry = [[name, url],(eListboxPythonMultiContent.TYPE_TEXT, 0, 0,300, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, name, farbwahl)]
+						else:
+							entry = [[name, url],(eListboxPythonMultiContent.TYPE_TEXT, 0, 0,300, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, name)]
+						fileresultlist.append(entry)
+				else:
+						ausblenden = 0
+
+			self["feedlist"].l.setList(fileresultlist)
+			self["feedlist"].moveSelection(0)
+		if len(fileresultlist) > 0:
+			self.switchList(self.LIST_SOURCE)
+			self.list_download()
+		else:
+			self["infolabel"].text = _("Cannot parse feed directory")
+
+		if box <> "dm8000":
+				evfd.getInstance().vfd_write_string("AddonManager")
+
+
+#----- List Download Procedures -------------------------------------------------------
+	def list_download(self):
+		global PreviewPath
+		global LISTurlText
+		if self.showpreview == True:
+			#print "[Addon-Manager] [check_for_LIST]"
+			if self["feedlist"].isValid():
+				#print "[Addon-Manager] PLUGINname: " + self["feedlist"].getPLUGINname()
+				self["job_progressbar"].value = 0
+				self["job_progresslabel"].text = ""
+				if self["feedlist"].getPLUGINurl() is None:
+					self["key_green"].text = ""
+					return
+				self["key_green"].text = _("Download")
+				LISTurl = self["feedlist"].getLISTurl()
+				LISTurl1 = LISTurl.split("_")[0]
+				UrlLink = LISTurl.split("enigma2-plugin-")[0]
+				LISTName = LISTurl1.split("enigma2-plugin-")[1].split("-")[1]
+				
+				if LISTName.find(".") > -1:
+					LISTName = LISTName.split(".")[0]
+
+				LISTurl = PreviewPath + "/enigma2-pluginpreview-" + LISTName+".png"
+				LISTurlText = PreviewPath + "/enigma2-pluginpreview-" + LISTName+".txt"
+
+				#print "[Addon-Manager] downloading " + LISTurl
+				self.download = self.list_download
+				self.downloading(True)
+				#client.getPage(LISTurl, headers={"Authorization":authHeader}).addCallback(self.pic_finished).addErrback(self.pic_failed)
+				client.getPage(LISTurl).addCallback(self.pic_finished).addErrback(self.pic_failed)
+
+				self["statusbar"].text = _("Downloading file description...")
+
+	def list_failed(self, failure_instance):
+		print "[Addon-Manager] [list_failed] " + str(failure_instance)
+		self["infolabel"].text = _("No details for this file") + "\n" + self["feedlist"].getPLUGINname()
+		self["statusbar"].text = ""
+		self.LISTfilename = ""
+		self.LIST = ""
+		self.downloading(False)
+
+	def list_finished(self,LISTdata=""):
+		#print "[Addon-Manager] [list_finished] " + str(LISTdata)
+		self.downloading(False)
+		self.LIST = LISTdata
+		self.ListTyp = "txt"
+
+		if self.LIST != "":
+			self.LISTfilename = self["feedlist"].getLISTname()
+			self["infolabel"].text = self.LIST
+		else:
+			self.LISTfilename = ""
+			self["infolabel"].text = _("No details for this file")
+		self["statusbar"].text = ""
+
+#----- Pic Download Procedures -------------------------------------------------------
+	def pic_failed(self, failure_instance):
+		print "[Addon-Manager] [list_failed] " + str(failure_instance)
+		self["infolabel"].text = _("No details for this file") + "\n" + self["feedlist"].getPLUGINname()
+		self["statusbar"].text = ""
+		self.LISTfilename = ""
+		self.LIST = ""
+		self["Preview"].hide()
+
+		# no pic-file, now look for txt
+		self["statusbar"].text = _("Downloading file description...")
+		#LISTurl = self["feedlist"].getLISTurl()
+		#client.getPage(LISTurl, headers={"Authorization":authHeader}).addCallback(self.list_finished).addErrback(self.list_failed)
+		global LISTurlText
+		client.getPage(LISTurlText).addCallback(self.list_finished).addErrback(self.list_failed)
+
+		self.downloading(False)
+
+	def pic_finished(self,LISTdata=""):
+		print "[Addon-Manager] [list_finished] " + str(LISTdata)
+		self.downloading(False)
+		self.LIST = LISTdata
+		self.ListTyp = "pic"
+
+		if self.LIST != "":
+			self.LISTfilename = self["feedlist"].getLISTname()
+			self["infolabel"].text = ""
+			# write skin-preview to file
+			ffile = open("/tmp/skin.png", "w")
+			ffile.write(self.LIST)
+			ffile.close()
+			pngpath = "/tmp/skin.png"
+			self.previewPath = pngpath
+			self["Preview"].show()
+			self["Preview"].instance.setPixmapFromFile(self.previewPath)
+		else:
+			self.LISTfilename = ""
+			self["infolabel"].text = _("No details for this file")
+		self["statusbar"].text = ""
+#-----------------------------------------------------------------
+
+	def sh_preview(self):
+		if self.showpreview == 1:
+			self.showpreview = 0
+			self.LISTfilename = self["feedlist"].getLISTname()
+			self["infolabel"].text = _("Preview = off: (press Key 9) ")
+			pngpath = "/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/no_preview.png"
+			self.previewPath = pngpath
+			self["Preview"].show()
+			self["Preview"].instance.setPixmapFromFile(self.previewPath)
+		else:
+			self.showpreview = 1
+			self.LISTfilename = self["feedlist"].getLISTname()
+			self["infolabel"].text = _("Preview = on: ")
+			self["Preview"].hide()
+
+	def read_Boxtyp(self):
+			file = open("/proc/stb/info/model", "r")
+			self.box = file.readline().strip()
+			file.close()
+
+	def red_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Plugins")
+		self.plugin_filter = "system-" 
+		self.feed_finished(self.feedhtml)
+
+	def green_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Settings")
+		self.plugin_filter = "skins-"
+		self.feed_finished(self.feedhtml)
+
+	def yellow_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("EmusConfig")
+		self.plugin_filter = "players-"
+		self.feed_finished(self.feedhtml)
+
+	def blue_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Emus")
+		self.plugin_filter = "emus-"
+		self.feed_finished(self.feedhtml)
+
+
+# ----- Numbers --------
+	def eins_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Bootbilder")
+		self.plugin_filter = "bootlogos-"
+		self.feed_finished(self.feedhtml)
+
+	def zwei_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Radiobilder")
+		self.plugin_filter = "radiologos-"
+		self.feed_finished(self.feedhtml)
+
+	def drei_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("SWAP all")
+		self.plugin_filter = "swap"
+		self.feed_finished(self.feedhtml)
+
+	def vier_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("IPK all")
+		self.plugin_filter = "-"
+		self.feed_finished(self.feedhtml)
+
+	def fuenf_download(self):
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("IPK all")
+		self.plugin_filter = "-" 
+		self.feed_finished(self.feedhtml)
+
+
+
+#----- plugin download ------------------------------------------------------------
+	def check_download(self):
+ 			self.plugin_download()
+
+	def plugin_download(self):
+		print "[Addon-Manager] Plugin-Download"
+		if self["feedlist"].isValid():
+			url = self["feedlist"].getPLUGINurl()
+			print url
+			self.foundipk = re.search('sh4', str(url))
+			self.urlname = url
+			self.error_counter = "0"
+			if len(str(self.foundipk)) == 4:
+				self.PLUGINlocal = '/tmp/aaf/downfile.tar.gz'
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("load Tarfile")
+			else:
+				self.PLUGINlocal = '/tmp/aaf/downfile.sh4.ipk'
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("load IPK")
+
+			#self.box = "dm8000"
+			if box == "dm8000":
+				self.PLUGINlocal = '/tmp/aaf/downfile.sh4.ipk'
+				if box <> "dm8000":
+					evfd.getInstance().vfd_write_string("load IPK")
+
+			self.PluginPath = "E2/image"
+
+			if self.error_counter == "0":
+				self["job_progressbar"].value = 0
+				self["job_progresslabel"].text = ""
+				print "[Addon-Manager] downloading " + url
+				self.download = self.plugin_download
+				self.downloading(True)
+				print "[Addon-Manager] [plugin_download] downloading %s to %s" % (url, self.PLUGINlocal)
+				self.download = downloadWithProgress(url,self.PLUGINlocal)
+				self.download.addProgress(self.plugin_progress)
+				self["job_progressbar"].range = 1000
+
+				self.download.start().addCallback(self.plugin_finished)
+				self.downloading(True)
+
+	def plugin_progress(self, recvbytes, totalbytes):
+		#print "[Addon-Manager] [update_progress] recvbytes=%d, totalbytes=%d" % (recvbytes, totalbytes)
+		self["job_progressbar"].value = int(1000*recvbytes/float(totalbytes))
+		self["job_progresslabel"].text = "%d of %d kBytes (%.2f%%)" % (recvbytes/1024, totalbytes/1024, 100*recvbytes/float(totalbytes))
+
+	def plugin_failed(self, failure_instance=None, error_message=""):
+    # here is an problem, an error was produced! Help me!
+		if error_message == "" and failure_instance is not None:
+			error_message = failure_instance.getErrorMessage()
+		print "[Addon-Manager] [plugin_failed] " + error_message
+		if fileExists(self.PLUGINlocal):
+			message = "%s %s\n%s" % (_("File Download failed:"), error_message, _("Remove the incomplete file?"))
+			self.session.openWithCallback(self.plugin_remove, MessageBox, message, MessageBox.TYPE_YESNO)
+		else:
+			message = "%s %s" % (_(".PLUGIN Download failed:"),error_message)
+			self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+			self.downloading(False)
+
+#------------ plugin finished ----------------------------------------------
+
+	def plugin_finished(self, string=""):
+		ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/inst.log", "w")
+		ffile.write("gedrueckte Kategorie:" + self.plug)
+		ffile.write("\n")
+		ffile.close()
+
+		if len(str(self.foundipk)) == 4:
+				ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/inst.log","a")
+				ffile.write("es ist ein Tarfile ")
+				ffile.write("\n")
+				ffile.close()
+
+		else:
+				ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/inst.log","a")
+				ffile.write("IPK wird entpackt!")
+				ffile.write("\n")
+				ffile.close()
+
+				self["statusbar"].text = _("Decompressing IPK-File...")
+				os.system("cd /tmp/aaf ; ipkg update")
+
+				if config.AddonManager.ungenau.value == 1:
+					self.CpString = "cd /tmp/aaf ; ipkg install /tmp/aaf/downfile.sh4.ipk"
+					self.session.open(Console, title = _("IPK Installer"), cmdlist = ["%s" % self.CpString], closeOnSuccess = False)
+				else:
+					os.system("cd /tmp/aaf ; ipkg install /tmp/aaf/downfile.sh4.ipk")
+
+				##os.system("rm -r /tmp/aaf")
+
+		os.system("mkdir /tmp/aaf")
+		self["statusbar"].text = _("Installation OK!")
+		self.downloading(False)
+		#if self.plug == "skins":
+		#	self.session.open(SkinSelector)
+
+	def restartGUI(self, answer):
+		if answer is True:
+			os.system("killall -9 enigma2")
+
+	def errorstop(self, error_message):
+		print "[Addon-Manager] An error has occurred: %s" % str(error_message)
+		message = ("%s" % error_message)
+		#self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+		self.downloading(False)
+		self.close()
+
+	def errorHandler(self, error_message):
+		print "[Addon-Manager] An error has occurred: %s" % str(error_message)
+		message = "%s %s" % (_(".PLUGIN Download failed:"),error_message)
+		self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+		self.downloading(False)
+    # and then we stop the entire process:
+		reactor.stop()
+
+	def plugin_remove(self, answer):
+		self.downloading(False)
+		if answer == True:
+			PLUGINfilename =  self.PLUGINlocal
+			if fileExists(self.LISTfilename):
+				remove(self.LISTfilename)
+			if fileExists(PLUGINfilename):
+				remove(PLUGINfilename)
+		self.switchList(self.LIST_SOURCE)
+
+	def closeCB(self):
+		if self.download:
+			self.downloading(False)
+		else:
+			self.close()
+
+
+#-----------------------------------------------------------------
+class AddonConfigScreen(ConfigListScreen,Screen):
+    skin = """
+        <screen position="{screen.pos}" size="650,400" title="Addon-Manager Setup" >
+        <widget name="config" position="40,10" size="570,325" scrollbarMode="showOnDemand" />
+        <widget name="buttonred" position="40,360" size="100,40" backgroundColor="red" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/>
+        <widget name="buttongreen" position="160,360" size="100,40" backgroundColor="green" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/>
+        </screen>"""
+
+    def __init__(self, session, args = 0):
+        self.session = session
+        #switch automatic to current skin
+        current_w = getDesktop(0).size().width()
+        current_h = getDesktop(0).size().height()
+        print "[Addon-Manager] DESKTOPsize is",current_w,current_h
+        size_w = 650
+        size_h = 400
+
+        # calculate Skin koordinates
+        pos_w = (current_w - size_w)/2
+        pos_h = (current_h - size_h)/2
+
+        # set Skinvariables
+        self.dict = {
+				   'screen.size': "%i,%i"%(size_w,size_h),
+				   'screen.pos': "%i,%i"%(pos_w,pos_h),
+				   }
+
+        self.skin = applySkinVars(AddonConfigScreen.skin,self.dict)
+        Screen.__init__(self, session)
+        self.list = []
+        self.list.append(getConfigListEntry(_("Fontgroesse (10-22, 14=normal)"), config.AddonManager.Schriftart))
+        self.list.append(getConfigListEntry(_("Downloadserver waehlen (1=Primary 2=Secondary)"), config.AddonManager.which_server))
+        self.list.append(getConfigListEntry(_("Vorschau Einschalten (1=Ein, 0=Aus)"), config.AddonManager.preview_on))
+        self.list.append(getConfigListEntry(_("Wartezeit in msec fuer Vorschau"), config.AddonManager.preview_timeout))
+        self.list.append(getConfigListEntry(_("Installierte Plugins in Liste anzeigen (1=Ein, 0=Aus)"), config.AddonManager.marker_off))
+        self.list.append(getConfigListEntry(_("Installierte Plugins in Liste farbig markieren"), config.AddonManager.marker_on))
+        self.list.append(getConfigListEntry(_("Markierungsfarbe (0=rot, 1=gruen, 2=blau)"), config.AddonManager.mark_color))
+        self.list.append(getConfigListEntry(_("Installations Konsole am Bildschirm (0=Aus, 1=Ein)"), config.AddonManager.ungenau))
+
+        ConfigListScreen.__init__(self, self.list)
+        self["buttonred"] = Label(_("cancel"))
+        self["buttongreen"] = Label(_("ok"))
+        self["setupActions"] = ActionMap(["SetupActions"],
+        {
+            "green": self.save,
+            "red": self.cancel,
+            "save": self.save,
+            "cancel": self.cancel,
+            "ok": self.save,
+        }, -2)
+
+    def save(self):
+        global activesource, activenam
+        for x in self["config"].list:
+			      x[1].save()
+        config.save()
+        self.showpreview = config.AddonManager.preview_on.value
+        self.previewtimeout = config.AddonManager.preview_timeout.value
+        self.farbe = config.AddonManager.mark_color.value
+
+        if config.AddonManager.which_server.value == 1:
+		        activesource = "http://kati910.aaf-board.info/dbase"
+		        activenam = "Primary-Server"
+        else:
+		        activesource = "http://kati910.aaf-board.info/dbase"
+		        activenam = "Secondary-Server"
+        #restore()
+        self.close()
+
+    def cancel(self):
+        print "[Addon-Manager] cancel"
+        for x in self["config"].list:
+            x[1].cancel()
+        self.close(False)
+
+
+#-----------------------------------------------------------------
+class RestoreConfigScreenVU(ConfigListScreen,Screen):
+
+	def __init__(self, session):
+		self.session = session
+		Screen.__init__(self, session)
+		self.skin = RESTORE_CONFIG_SKIN
+		self.onShown.append(self.setWindowTitle)
+
+		RestoreYesNo = [('y',_("yes")),('n',_("no"))]
+		RestoreNoYes = [('n',_("no")),('y',_("yes"))]
+
+		config.RestoreConfig = ConfigSubsection()
+		config.RestoreConfig.settings_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.binarys_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.camconfig_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.plugins_on = ConfigSelection(RestoreNoYes)
+		config.RestoreConfig.network_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.samba_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.bilder_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.sonstige_on = ConfigSelection(RestoreYesNo)
+		config.RestoreConfig.am_on = ConfigSelection(RestoreNoYes)
+		config.RestoreConfig.backup_on = ConfigSelection(RestoreYesNo)
+
+		self.Clist = []
+		self.Clist.append(getConfigListEntry(_("Restore Settings"), config.AddonManager2.sett_on))
+		self.Clist.append(getConfigListEntry(_("Restore CamConfig"), config.AddonManager2.camconfig_on))
+		self.Clist.append(getConfigListEntry(_("Restore Plugins"), config.AddonManager2.plug_on))
+		self.Clist.append(getConfigListEntry(_("Restore Binarys"), config.AddonManager2.binarys_on))
+		self.Clist.append(getConfigListEntry(_("Restore Netzwerk"), config.AddonManager2.network_on))
+		self.Clist.append(getConfigListEntry(_("Restore Samba"), config.AddonManager2.samba_on))
+		self.Clist.append(getConfigListEntry(_("Restore Bootbilder"), config.AddonManager2.bilder_on))
+		self.Clist.append(getConfigListEntry(_("Restore sonstiges"), config.AddonManager2.sonstige_on))
+		self.Clist.append(getConfigListEntry(_("Restore AddonManager"), config.AddonManager2.am_on))
+		self.Clist.append(getConfigListEntry(_("mehrere Backup mit Datum zulassen"), config.AddonManager2.backup_on))
+
+		ConfigListScreen.__init__(self, self.Clist)
+
+		self["key_green"] = Label(_("save Settings"))
+		self["key_yellow"] = Label(_("Backup"))
+		self["key_red"] = Label(_("Restore"))
+		infotext = _('this Settings are allways copied in the Flash/USB installation!')
+		self["label1"] =  ScrollLabel()
+		self["label1"].setText(infotext)
+
+		self["setupActions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
+		{
+			"green": self.save,
+			"save": self.save,
+			"red": self.restore,
+			"yellow": self.backup,
+			"cancel": self.cancel,
+			"ok": self.save,
+			"left": self.left,
+			"right": self.right,
+		}, -2)
+
+	def setWindowTitle(self):
+		self.setTitle(_("Backup / Restore Config"))
+
+	def left(self):
+		ConfigListScreen.keyLeft(self)
+
+	def right(self):
+		ConfigListScreen.keyRight(self)
+
+	def save(self):
+		for x in self["config"].list:
+				x[1].save()
+		config.save()
+		#config.RestoreConfig.save()
+		self.save_settings()
+		print "[AddonManager] RestoreConfig save"
+
+	def cancel(self):
+		print "[AddonManager] RestoreConfig cancel"
+		self.close()
+
+	def backup(self):
+		self.CpString = "/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/backup.sh"
+		self.session.open(Console, title = _("Backup - Settings"), cmdlist = ["%s" % self.CpString], closeOnSuccess = False)
+
+	def restore(self):
+		self.session.open(SelectRestore)
+
+	def save_settings(self):
+		ffile = open("/var/etc/restore.cfg", "w")
+		ffile.write('settings=' + config.AddonManager2.sett_on.value[0] + '\n' )
+		ffile.write('binarys=' + config.AddonManager2.binarys_on.value[0] + '\n')
+		ffile.write('camconfig=' + config.AddonManager2.camconfig_on.value[0] + '\n')
+		ffile.write('plugins=' + config.AddonManager2.plug_on.value[0] + '\n')
+		ffile.write('network=' + config.AddonManager2.network_on.value[0] + '\n')
+		ffile.write('samba=' + config.AddonManager2.samba_on.value[0] + '\n')
+		ffile.write('bilder=' + config.AddonManager2.bilder_on.value[0] + '\n')
+		ffile.write('sonstige=' + config.AddonManager2.sonstige_on.value[0] + '\n')
+		ffile.write('addonmanager=' + config.AddonManager2.am_on.value[0] + '\n')
+		ffile.write('backup=' + config.AddonManager2.backup_on.value[0] + '\n')
+		ffile.close()
+
+#-----------------------------------------------------------------
+
+class SelectRestore(ConfigListScreen,Screen):
+	def __init__(self, session):
+		font = "Regular;18"
+		self.skin = SELECTRESTORE_SKIN
+		Screen.__init__(self, session)
+
+		self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"],
+		{
+			"ok": self.KeyOk,
+			"cancel": self.Exit,
+			"right": self.rightDown,
+			"left": self.leftUp,
+			"up": self.up,
+			"down": self.down,
+			"red": self.delete,
+			"green": self.KeyOk
+		}, -1)
+		self.search()
+
+		if not pathExists(self.currDir):
+			self.currDir = "/"
+
+		self.filelist = FileList(self.currTmp, showDirectories = True, isTop = True , useServiceRef = False)
+		self["filelist"] = self.filelist
+
+		self["aktion"] = StaticText()
+		self["filelist"].show()
+
+	def up(self):
+		self["filelist"].up()
+
+	def down(self):
+		self["filelist"].down()
+
+	def leftUp(self):
+		self["filelist"].pageUp()
+
+	def rightDown(self):
+		self["filelist"].pageDown()
+
+	def search(self):
+		os.system("rm -r /tmp/back")
+		os.system("mkdir -p /tmp/back")
+		self.currTmp = "/tmp/back"
+
+		if pathExists("/var/swap"):
+			self.currDir = "/var/swap"
+
+		if pathExists("/media/hdd"):
+			self.currDir = "/media/hdd"
+
+		if box == "dm8000":
+			CpString = "cd " + self.currDir + "; ls -A1d backup_vu* >/tmp/back/test"
+			os.system(CpString)
+			self.currBox = "backup_vu"
+		else:
+			CpString = "cd " + self.currDir + "; ls -A1d backup_fortis* >/tmp/back/test"
+			os.system(CpString)
+			self.currBox = "backup_fortis"
+
+		text = ""
+		file = open("/tmp/back/test", "r")
+		for line in file:
+			text = line.strip()
+			CpString = "touch /tmp/back/" + text
+			os.system(CpString)
+		file.close
+		os.system("rm /tmp/back/test")
+
+	def delete(self):
+		self.filename = None
+		self.filename = self.filelist.getFilename()
+		self.filename = self.currDir + "/" + self.filename
+		print "[AddonManager] Filename=", self.filename
+		message = "%s %s" % (_("\nDieses Backup loeschen?\n"), self.filename)
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string("Delete Backup")
+		self.session.openWithCallback(self.delete_now, MessageBox, message, MessageBox.TYPE_YESNO)
+
+	def delete_now(self, answer):
+		if answer == True:
+			CpString = "rm -r " + self.filename
+			os.system(CpString)
+			self.search()
+			self["filelist"].refresh()
+
+	def KeyOk(self):
+		self.filename = None
+		self.filename = self.filelist.getFilename()
+		self.fullname = self.currDir + "/" + self.filename
+		print "[AddonManager] Select-Filename=", self.filename
+		self["filelist"].refresh()
+		self.CpString = "/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh " + self.filename + " boot"
+		self.session.open(Console, title = _("Restore - Settings"), cmdlist = ["%s" % self.CpString], closeOnSuccess = False)
+
+
+	def Exit(self):
+		self.close()
+
+# -------------------------------------------------------------------
+class FilterPanelList(MenuList):
+	def __init__(self, list, font0 = 28, font1 = 16, itemHeight = 60, enableWrapAround = True):
+		MenuList.__init__(self, [], False, eListboxPythonMultiContent)
+		self.l.setFont(0, gFont("Regular", font0))
+		self.l.setFont(1, gFont("Regular", font1))
+		self.l.setItemHeight(itemHeight)
+
+# -------------------------------------------------------------------
+class FilterPanel(Screen, HelpableScreen):
+	def __init__(self, session, Filter):
+		self.session = session
+		self.skin = """
+			<screen name="FilterPanel" position="center,center" size="430,440" title="Filterauswahl" backgroundColor="#252525">
+				<widget name="Mlist" position="10,5" size="400,400" zPosition="3" backgroundColor="#252525"  backgroundColorSelected="#565656" scrollbarMode="showOnDemand" />
+
+				<eLabel position="0,410" zPosition="2" size="430,1" backgroundColor="#c1cdc1" />
+				<widget source="key_blue" render="Label" position="260,417" zPosition="2" size="200,30" font="Regular;20" valign="center" halign="left" transparent="1" />
+				<ePixmap position="200,420" size="36,20" pixmap="skin_default/buttons/key_blue.png" transparent="1" alphatest="on" />
+				<widget source="key_red" render="Label" position="80,417" zPosition="2" size="150,30" font="Regular;20" valign="center" halign="left" transparent="1" />
+				<ePixmap position="20,420" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
+
+			</screen>"""
+
+		Screen.__init__(self, session)
+		self.Mlist = []
+
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('bootlogos'), _("bootlogos"), 'bootlogos')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('browsers'), _("browsers"), 'browsers')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('editors'), _("editors"), 'editors')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('emus'), _("emus"), 'emus')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('epg'), _("epg"), 'epg')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('fonts'), _("fonts"), 'fonts')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('games'), _("games"), 'games')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('infos'), _("infos"), 'infos')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('keymaps'), _("keymaps"), 'keymaps')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('mediacenter'), _("mediacenter"), 'mediacenter')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('picons'), _("picons"), 'picons')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('players'), _("players"), 'players')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('radiologos'), _("radiologos"), 'radiologos')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('settings'), _("settings"), 'settings')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('skins'), _("skins"), 'skins')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('spinner'), _("spinner"), 'spinner')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapbrowsers'), _("swapbrowsers"), 'swapbrowsers')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapeditors'), _("swapeditors"), 'swapeditors')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapemus'), _("swapemus"), 'swapemus')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapepg'), _("swapepg"), 'swapepg')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapgames'), _("swapgames"), 'swapgames')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapinfos'), _("swapinfos"), 'swapinfos')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapmediacenter'), _("swapmediacenter"), 'swapmediacenter')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapnetwork'), _("swapnetwork"), 'swapnetwork')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapplayers'), _("swapplayers"), 'swapplayers')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapscreensaver'), _("swapscreensaver"), 'swapscreensaver')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapskins'), _("swapskins"), 'swapskins')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('swapsystem'), _("swapsystem"), 'swapsystem')))
+		self.Mlist.append(self.FilterEntryItem((self.FilterEntryComponent('system'), _("system"), 'system')))
+
+		self.onChangedEntry = []
+		if (getDesktop(0).size().width() == 1280):
+				self["Mlist"] = FilterPanelList([], font0=24, font1=15, itemHeight=40)
+		else:
+				self["Mlist"] = FilterPanelList([], font0=24, font1=15, itemHeight=50)
+		self["Mlist"].l.setList(self.Mlist)
+		self["Mlist"].selectionEnabled(1)
+
+		self["key_blue"] = StaticText()
+		self["key_blue"].text = _("set Start")
+		self["key_red"] = StaticText()
+		self["key_red"].text = _("search")
+
+		HelpableScreen.__init__(self)
+		self["actions"] = HelpableActionMap(self, "AAFKeyActions",
+			{
+				"cancel": (self.Exit, "Beenden"),
+				"left": (self.left, "Seite hoch"),
+				"right": (self.right, "Seite runter"),
+				"up": (self.up, "Hoch"),
+				"down": (self.down, "Runter"),
+				"ok": (self.ok, "OK"),
+				"blue": (self.blue, "Blau"),
+				"red": (self.virtualKB, "Red"),
+			}, -2)
+
+	def up(self):
+		self["Mlist"].up()
+		self["Mlist"].selectionEnabled(1)
+
+	def down(self):
+		self["Mlist"].down()
+		self["Mlist"].selectionEnabled(1)
+
+	def left(self):
+		self["Mlist"].pageUp()
+
+	def right(self):
+		self["Mlist"].pageDown()
+
+	def Exit(self):
+		global menu
+		menu = "stop"
+		self.close()
+
+	def ok(self):
+		global menu
+		menu = self['Mlist'].l.getCurrentSelection()[0][2]
+		self.close()
+
+	def blue(self):
+		menu = self['Mlist'].l.getCurrentSelection()[0][2]
+		fwrite = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/startservice.cfg", "w")
+		fwrite.write(menu)
+		fwrite.close()
+		message = "%s %s" % (_("Dieser Filter wurde als Startfilter gesetzt!\n\n                       "), menu)
+		self.session.open( MessageBox, message, MessageBox.TYPE_INFO, timeout=5)
+
+
+	def FilterEntryComponent(self,file):
+		png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pics/" + file + ".png")
+		if png == None:
+			png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/pics/info.png")
+		res = (png)
+		return res
+
+	def FilterEntryItem(self,entry):
+		rot = 16711680
+		gruen = 60928
+		dgruen = 52480
+		drot = 0xf47d19
+		mblau = 8900346
+		hblau = 11592447
+		dblau = 5215437
+		weiss = 0xffffff
+		orange = 0xf47d19
+		grau = 0x565656
+
+		res = [entry]
+		#	return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color)
+		res.append(MultiContentEntryPixmapAlphaTest(pos=(2, 5), size=(100, 50), png=entry[0]))  # png vorn
+		res.append(MultiContentEntryText(pos=(150, 15), size=(220, 35), font=0, text=entry[1], color=mblau, color_sel=mblau, backcolor_sel=grau))
+		return res
+
+	def virtualKB(self):
+			self.search = ""
+			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, ''), VirtualKeyBoard, title = (_("Suchstring eingeben:")), text = self.search)
+
+	def VirtualKeyBoardCallback(self, callback = None, entry = None):
+		global menu
+		if callback is not None and len(callback):
+			print "[AddonManager] virtual callback",str(callback)
+			menu = callback
+			self.close()
+
+
+#-----------------------------------------------------------------
+
+def tryOpen(filename):
+	try:
+		procFile = open(filename)
+	except IOError:
+		return ""
+	return procFile
+
+
+def main(session, **kwargs):
+   session.open(PLUGINDownload,"/tmp/usb")
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ipkdownload
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ipkdownload	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ipkdownload	(revision 12164)
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+rm /tmp/aaf/*
+
+#  cat Packages | grep Filename: | sed "s/Filename: enigma2-plugin-//" | sed "s/.ipk//" | sed "s/_sh4//" | sed "s/_/ V/" >> PlugList
+
+if [ -e /var/etc/ipkg/official-feed.conf ]; then
+  url="`cat /var/etc/ipkg/official-feed.conf | sed -e 's/src\/gz cross //'`"
+  echo "Flashimage"
+fi
+
+if [ -e /etc/ipkg/official-feed.conf ]; then
+  url="`cat /etc/ipkg/official-feed.conf | sed -e 's/src\/gz cross //'`"
+  echo "BA-Image"
+fi
+
+url=$url"/PlugList"
+echo $url
+
+wget -O /tmp/aaf/test $url
+
+# remove first 2 lines and last 2 lines
+cat /tmp/aaf/test| sed '1,2d'|sed '$d'|sed '$d'| sed -e 's/ V/_/' >/tmp/aaf/first.txt
+
+for i in /tmp/aaf/first.txt; do
+  	while read Zeile
+  	do
+       lines="$Zeile"
+       echo $lines"##enigma2-plugin-"$lines"_sh4.ipk" >>/tmp/aaf/index.txt
+   done < $i
+done
+
+#cat /tmp/aaf/index.txt
+
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/keymap.xml
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/keymap.xml	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/keymap.xml	(revision 12164)
@@ -0,0 +1,42 @@
+<keymap>
+	<map context="AAFKeyActions">
+		<key id="KEY_UP" mapto="up" flags="m" />
+		<key id="KEY_DOWN" mapto="down" flags="m" />
+		<key id="KEY_LEFT" mapto="left" flags="m" />
+		<key id="KEY_RIGHT" mapto="right" flags="m" />
+
+		<key id="KEY_UP" mapto="upRepeated" flags="r" />
+		<key id="KEY_DOWN" mapto="downRepeated" flags="r" />
+		<key id="KEY_LEFT" mapto="leftRepeated" flags="r" />
+		<key id="KEY_RIGHT" mapto="rightRepeated" flags="r" />
+
+		<key id="KEY_RED" mapto="red" flags="m" />
+		<key id="KEY_GREEN" mapto="green" flags="m" />
+		<key id="KEY_YELLOW" mapto="yellow" flags="m" />
+		<key id="KEY_BLUE" mapto="blue" flags="m" />
+
+		<key id="KEY_1" mapto="1" flags="m" />
+		<key id="KEY_2" mapto="2" flags="m" />
+		<key id="KEY_3" mapto="3" flags="m" />
+		<key id="KEY_4" mapto="4" flags="m" />
+		<key id="KEY_5" mapto="5" flags="m" />
+		<key id="KEY_6" mapto="6" flags="m" />
+		<key id="KEY_7" mapto="7" flags="m" />
+		<key id="KEY_8" mapto="8" flags="m" />
+		<key id="KEY_9" mapto="9" flags="m" />
+		<key id="KEY_0" mapto="0" flags="m" />
+
+		<key id="KEY_CHANNELUP" mapto="chup" flags="mr" />
+		<key id="KEY_CHANNELDOWN" mapto="chdown" flags="mr" />
+
+		<key id="KEY_OK" mapto="ok" flags="m" />
+		<key id="KEY_PAGEUP" mapto="nextBouquet" flags="m" />
+		<key id="KEY_PAGEDOWN" mapto="prevBouquet" flags="m" />
+		<key id="KEY_TEXT" mapto="text" flags="m" />
+		<key id="KEY_MENU" mapto="menu" flags="m" />
+		<key id="KEY_EXIT" mapto="cancel" flags="m" />
+		<key id="KEY_HOME" mapto="cancel" flags="m" />
+		<key id="KEY_HELP" mapto="cancel" flags="m" />
+		<key id="\x1b" mapto="cancel" flags="m" />
+	</map>
+</keymap>
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/plugin.py
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/plugin.py	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/plugin.py	(revision 12164)
@@ -0,0 +1,1725 @@
+from Plugins.Plugin import PluginDescriptor
+from Screens.PluginBrowser import *
+from Screens.ServiceInfo import ServiceInfoList, ServiceInfoListEntry
+from Components.SelectionList import SelectionList
+from Tools.Directories import resolveFilename, fileExists, pathExists, createDir, SCOPE_MEDIA
+from enigma import *
+from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
+from Screens.Screen import Screen
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.MenuList import MenuList
+from Components.Label import Label
+from Components.ScrollLabel import ScrollLabel
+from Components.Pixmap import Pixmap
+from Components.config import ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection,  ConfigIP, ConfigYesNo, ConfigSequence, ConfigNumber
+from Components.ConfigList import ConfigListScreen
+
+from Components.FileList import FileList
+from Components.Sources.StaticText import StaticText
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+
+#import ServiceReference
+import os
+import sys
+import subprocess
+from subprocess import Popen,PIPE
+import ServiceReference
+import time
+import urllib
+
+# import py_compile
+# py_compile.compile("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/plugin.py")
+
+from Plugins.Extensions.AddonManager.downloader import *
+#from Plugins.Extensions.AddonManager.FileListBB import FileListBB
+
+config.AddonManager = ConfigSubsection()
+config.AddonManager.which_server = ConfigInteger(1, limits=(1, 2))
+config.AddonManager.preview_timeout = ConfigInteger(default=600,limits=(50, 2000))
+config.AddonManager.preview_on = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.marker_on = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.marker_off = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.mark_color = ConfigInteger(1, limits=(0, 2))
+config.AddonManager.ungenau = ConfigInteger(0, limits=(0, 1))
+config.AddonManager.Schriftart = ConfigInteger(14, limits=(10, 22))
+config.AddonManager.ba_settings_on = ConfigInteger(1, limits=(0, 1))
+config.AddonManager.ba_plugins_on = ConfigInteger(0, limits=(0, 1))
+config.AddonManager.ba_skins_on = ConfigInteger(0, limits=(0, 1))
+config.AddonManager.ba_remove_on = ConfigInteger(0, limits=(0, 1))
+config.AddonManager.ba_usersettings_on = ConfigInteger(0, limits=(0, 1))
+
+
+global version
+global menu
+
+AAF_Panel_Version = 'Addon Manager ' + version
+
+def main(session, **kwargs):
+		file = open("/proc/stb/info/model", "r")
+		box = file.readline().strip()
+		file.close()
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string(AAF_Panel_Version)
+		session.open(Addonpanel)
+
+def Apanel(menuid, **kwargs):
+	if menuid == "mainmenu":
+		return [("Addon-Manager", main, "Addonpanel", None)]
+	else:
+		return []
+
+def Plugins(**kwargs):
+	return [ PluginDescriptor(name="Addon-Manager", description="Addonpanel AAF-Enigma2 07/11/2010", where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc = main) ]
+
+font = "Regular;18"
+
+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
+
+
+# -------------------------------------------------------------------
+class CenterList(MenuList):
+	def __init__(self):
+			MenuList.__init__(self, [], True, eListboxPythonMultiContent)
+			self.l.setItemHeight(25)
+			self.l.setFont(0, gFont('Regular', 20))
+
+
+class PanelList(MenuList):
+	def __init__(self, list, font0 = 24, font1 = 16, itemHeight = 50, enableWrapAround = True):
+		MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
+		self.l.setFont(0, gFont("Regular", font0))
+		self.l.setFont(1, gFont("Regular", font1))
+		self.l.setItemHeight(itemHeight)
+
+def MenuEntryItem(entry):
+	res = [entry]
+	res.append(MultiContentEntryPixmapAlphaTest(pos=(2, 5), size=(100, 40), png=entry[0]))  # png vorn
+	res.append(MultiContentEntryText(pos=(110, 10), size=(440, 40), font=0, text=entry[1]))  # menupunkt
+#	res.append(MultiContentEntryText(pos=(10, 29), size=(340, 14), font=1, text=entry[2])) # menubeschreibung
+	return res
+
+
+def AafEntryComponent(file):
+	png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/pics/" + file + ".png")
+	if png == None:
+		png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/Aafpanel/pics/default.png")
+	res = (png)
+	return res
+
+# -------------------------------------------------------------------
+class Addonpanel(Screen):
+	skin = """
+	<screen name="Addonpanel" position="center,center" size="550, 370" title="Addonpanel">
+		<widget name="Mlist" position="10,10" size="530, 350" scrollbarMode="showOnDemand" enableWrapAround="1" transparent="1" />
+		<widget name="key_red" position="120,5" zPosition="1" size="75,33" font="Regular;12" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+		<widget name="key_green" position="195,5" zPosition="1" size="75,33" font="Regular;12" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+		<widget name="key_yellow" position="270,5" zPosition="1" size="75,33" font="Regular;12" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+		<widget name="key_blue" position="345,5" zPosition="1" size="75,33" font="Regular;12" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+		<widget name="label1" position="121,287" size="200,20" font="Regular;20" transparent="1" foregroundColor="#f2e000" halign="center" />
+	</screen>"""
+
+#-- Start HD skin detection BB
+	def __init__(self, session, services = None):
+		if os.path.exists("/var/baroot/.multipart") is True:
+			self.BAtyp = "new"
+		if os.path.exists("/UFS_Images") is True:
+			self.BAtyp = "old"
+
+		#switch automatic to current skin
+		current_w = getDesktop(0).size().width()
+		current_h = getDesktop(0).size().height()
+		print "DESKTOPsize is",current_w,current_h
+
+		# define the start koordinates and size
+		if current_w == 1280:
+				pos_w = 421
+				pos_h = 200
+		else:
+				pos_w = 141
+				pos_h = 128
+
+		# set Skinvariables
+		self.dict = {
+				'font': font,
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				}
+		self.skin = applySkinVars(Addonpanel.skin,self.dict)
+#-- Ende HD skin detection BB
+
+		self.service = None
+		global skin
+		global servicelist
+		if services is not None:
+			servicelist = services
+		else:
+			servicelist = None
+
+		self.list = []
+
+		Screen.__init__(self, session)
+		self.Mlist = []
+
+# --  changeg by bb for the new png-menu ----------------------------------------------------------
+		self.Mlist.append(MenuEntryItem((AafEntryComponent('Download Manager'), _("Download Manager"), 'Download Manager')))
+		self.Mlist.append(MenuEntryItem((AafEntryComponent('Install from tmp'), _("Install from tmp"), 'Install from tmp')))
+		self.Mlist.append(MenuEntryItem((AafEntryComponent('Uninstall Plugins'), _("Uninstall Plugins"), 'Uninstall Plugins')))
+		self.Mlist.append(MenuEntryItem((AafEntryComponent('Update Addon-Manager'), _("Update Addon-Manager"), 'Update Addon-Manager')))
+		#self.Mlist.append(MenuEntryItem((AafEntryComponent('BA-Image Manager'), _("BA-Image Manager"), 'BA-Image Manager')))
+		if (getDesktop(0).size().width() == 1280):
+				self["Mlist"] = PanelList([], font0 = 24, font1 = 15, itemHeight = 50)
+		else:
+				self["Mlist"] = PanelList([])
+				self["Mlist"] = PanelList([], font0 = 24, font1 = 15, itemHeight = 50)
+
+		self["Mlist"].l.setList(self.Mlist)
+		menu = 0
+
+		file = open("/proc/stb/info/model", "r")
+		box = file.readline().strip()
+		file.close()
+		if box <> "dm8000":
+				evfd.getInstance().vfd_write_string( self['Mlist'].l.getCurrentSelection()[0][1] )
+
+		self["key_green"] = Label(" ")
+		self["key_red"] = Label(" ")
+		self["key_yellow"] = Label(" ")
+		self["key_blue"] = Label(" ")
+		self["label1"] = Label(" ")
+
+		global menu
+		menu = 0
+
+		#// get the remote buttons
+		self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
+		{
+			"cancel": self.Exit,
+			"left": self.left,
+			"right": self.right,
+			"up": self.up,
+			"down": self.down,
+			"ok": self.ok,
+			#"blue": self.blue,
+			"blue": self.check_update,
+			"red": self.Red,
+			"green": self.Green,
+			"yellow": self.yellow,
+		}, 1)
+
+	def up(self):
+		self["Mlist"].up()
+		file = open("/proc/stb/info/model", "r")
+		box = file.readline().strip()
+		file.close()
+		if box <> "dm8000":
+				evfd.getInstance().vfd_write_string( self['Mlist'].l.getCurrentSelection()[0][1] )
+
+
+	def down(self):
+		self["Mlist"].down()
+		file = open("/proc/stb/info/model", "r")
+		box = file.readline().strip()
+		file.close()
+		if box <> "dm8000":
+				evfd.getInstance().vfd_write_string( self['Mlist'].l.getCurrentSelection()[0][1] )
+
+	def left(self):
+		pass
+
+	def right(self):
+		pass
+		
+	def Red(self):
+		pass
+
+	def Green(self):
+		#// Not used
+		pass
+		
+	def yellow(self):
+		pass
+
+	def blue(self):
+		#// Not used
+		pass
+
+	def check_update(self):
+		versurl = activesource + "/version_e2.txt"
+		h = urllib.urlretrieve(versurl, "/tmp/version_e2.txt")
+		dummy = open("/tmp/version_e2.txt").read()
+		version_server = dummy[0:len(dummy) -2]
+		if version_server == version:
+			print "gleich"
+			message = "%s %s\n%s %s\n\n%s" % (_("Version am Server:"), version_server, _("Version in der Box:"), version, _("Ein Update ist nicht erforderlich!"))
+			self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+		else:
+			if version_server > version:
+				message = "%s %s\n%s %s\n\n%s" % (_("Version am Server:"), version_server, _("Version in der Box:"), version, _("Ein Update ist empfehlenswert!"))
+				self.session.openWithCallback(self.update_now2, MessageBox, message, MessageBox.TYPE_YESNO)
+			else:
+				message = "%s %s\n%s %s\n\n%s" % (_("\nKlingt wie ein Scherz, aber die Version am Server ist aelter als die auf ihrer Box!\n\nVersion am Server:"), version_server, _("Version in der Box:"), version, _("NICHT UPDATEN, sie besitzen vermutlich eine fortgeschrittene Betaversion!"))
+				self.session.openWithCallback(self.update_now2, MessageBox, message, MessageBox.TYPE_YESNO)
+
+	def update_now2(self, answer):
+		if answer == True:
+			versurl = activesource + "/addon-man_e2.tar.gz"
+			h = urllib.urlretrieve(versurl, "/tmp/aaf/addon-man_e2.tar.gz")
+			os.system("cd /tmp/aaf; tar -xzf addon-man_e2.tar.gz")
+			if os.path.exists("/tmp/aaf/addon-man_e2.tar.gz") is True:
+				os.system("cp -RP /tmp/aaf/* / ; sync")
+				os.system("rm -r /tmp/aaf")
+				os.system("cd / ; rm *tar.gz")
+				os.system("mkdir /tmp/aaf")
+				message = "%s" % (_("Der Addon-Manager hat einen Neustart angefordert!\nDie Box wird nun neu gestartet!"))
+				self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+				TryQuitMainloop(self.session,2)
+
+
+	def Exit(self):
+		#// Exit Aafpanel when pressing the EXIT button or go back to the MainMenu
+		self.service = self.session.nav.getCurrentlyPlayingServiceReference()
+		service = self.service.toCompareString()
+		servicename = ServiceReference.ServiceReference(service).getServiceName().replace('\xc2\x87', '').replace('\xc2\x86', '').ljust(16)
+		file = open("/proc/stb/info/model", "r")
+		box = file.readline().strip()
+		file.close()
+		if box <> "dm8000":
+			evfd.getInstance().vfd_write_string( servicename )
+		self.close()
+
+	def ok(self):
+		#// Menu Selection
+#		menu = self["Mlist"].getCurrent()
+#		global AAFCONF
+		menu = self['Mlist'].l.getCurrentSelection()[0][2]
+		if menu == "Download Manager":
+			self.session.open(PLUGINDownload,"/tmp/usb")
+		elif menu == "Uninstall Plugins":
+			self.session.open(FileBrowse)
+		elif menu == "Install from tmp":
+			self.session.open(TmpBrowse)	
+		elif menu == "Update Addon-Manager":
+			self.check_update()
+		elif menu == "BA-Image Manager":
+			self.session.open(DelImage)
+		else:
+			pass
+
+#------------------------------------------------------------------------------------------
+#------------------------------------------------------------------------------------------
+class FileBrowse(Screen):
+	LIST_FILE = 1
+	LIST_IPK = 2
+	rebootflag = False
+
+	skin = """
+		<screen position="{screen.pos}" size="{screen.size}" title="Uninstall AAF Plugins" >
+			<ePixmap position="{logo.pos}" size="70,53" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/picon_default.png" transparent="1" alphatest="on" />
+			<ePixmap position="{red_led.pos}" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
+			<ePixmap position="{green_led.pos}" size="36,20" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
+			<eLabel text="UNINSTALL" position="{label.pos}" size="240,35" font="Regular;30" foregroundColor="#ffa323" transparent="1" />
+			<eLabel text="Tar-Files" position="{red.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="IPK-Files" position="{green.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<widget name="filelist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget name="ipklist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget source="global.CurrentTime" render="Label" position="{date.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%d.%m.%Y</convert>
+			</widget>
+			<widget source="global.CurrentTime" render="Label" position="{time.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%H:%M:%S</convert>
+			</widget>
+		</screen>"""
+
+	def __init__(self, session):
+		#switch automatic to current skin
+		current_w = getDesktop(0).size().width()
+		current_h = getDesktop(0).size().height()
+		print "DESKTOPsize is",current_w,current_h
+
+		# define the start koordinates and size
+		if current_w == 1280:
+				size_w = 720
+				size_h = 376
+		else:
+				size_w = 520
+				size_h = 376
+
+		# calculate Skin koordinates
+		font = "Regular;18"
+		pos_w = (current_w - size_w)/2
+		pos_h = (current_h - size_h)/2
+		list_w = size_w - 20
+		list_pos = (size_w - list_w)/2
+		red_pos = size_w/2 - 130
+		green_pos = size_w/2 + 50
+		red_led_pos = red_pos - 40
+		green_led_pos = green_pos - 40
+		label_pos = size_w/2 -90
+		logo_pos = size_w -75
+		date_pos = red_led_pos
+		time_pos = green_pos
+
+		# set Skinvariables
+		self.dict = {
+				'font': font,
+				'list.size': "%i,232"%(list_w),
+				'list.pos': "%i,110"%(list_pos),
+				'screen.size': "%i,%i"%(size_w,size_h),
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				'red.pos': "%i,57"%(red_pos),
+				'green.pos': "%i,57"%(green_pos),
+				'red_led.pos': "%i,57"%(red_led_pos),
+				'green_led.pos': "%i,57"%(green_led_pos),
+				'label.pos': "%i,12"%(label_pos),
+				'logo.pos': "%i,0"%(logo_pos),
+				'date.pos': "%i,360"%(date_pos),
+				'time.pos': "%i,360"%(time_pos),
+				}
+
+		self.skin = applySkinVars(FileBrowse.skin,self.dict)
+		Screen.__init__(self, session)
+
+		self.focus = None
+		
+		self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"],
+		{
+			"ok": self.KeyOk,
+			"cancel": self.Exit,
+			"right": self.rightDown,
+			"left": self.leftUp,
+			"up": self.up,
+			"down": self.down,
+			"red": self.plugin_remove,
+			"green": self.ipk_remove
+		}, -1)
+
+		self.SearchPattern = "(?i)^.*\.(sh|postrm)"
+		self.currDir = "/usr/lib/ipkg/info/"
+		if not pathExists(self.currDir):
+			self.currDir = "/"
+
+		self.ipklist = []
+		self.filelist = []
+		
+		self.ipklist = FileList(self.currDir, showDirectories = False, isTop = True, matchingPattern = self.SearchPattern)
+		self["ipklist"] = self.ipklist
+
+		self.currDir = "/var/etc/uninst/"
+		if not pathExists(self.currDir):
+			self.currDir = "/"
+
+		self.filelist = FileList(self.currDir, showDirectories = False, isTop = True, matchingPattern = self.SearchPattern)
+		self["filelist"] = self.filelist
+
+		self["ipklist"].hide()
+		self["filelist"].show()
+		
+		#set the focus to the primary filelist
+		self.focus = self.LIST_FILE
+
+	def up(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].up()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].up()
+
+	def down(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].down()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].down()
+
+	def leftUp(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageUp()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageUp()
+		
+	def rightDown(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageDown()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageDown()
+
+	def plugin_remove(self):
+		self["ipklist"].hide()
+		self["filelist"].show()
+		self.focus = self.LIST_FILE
+
+	def ipk_remove(self):
+		self["filelist"].hide()
+		self["ipklist"].show()
+		self.focus = self.LIST_IPK
+
+	def KeyOk(self):
+		# call the uninstall-Script with subprocess or with os.system
+		message = "%s" % (_("Sind sie sicher das Plugin zu loeschen?"))
+		self.session.openWithCallback(self.list_remove, MessageBox, message, MessageBox.TYPE_YESNO)
+
+	def list_remove(self, answer):
+		if answer == True:
+			if self.focus is self.LIST_IPK:
+				self.currDir = "/usr/lib/ipkg/info/"
+				self.filename = self.ipklist.getFilename()
+				self.fullfile = self.currDir + self.filename
+				ipkpack = self.filename.split(".")
+
+				#Check for reboot
+				if fileExists(self.fullfile):
+					rebootcontent = open(self.fullfile, "r").read()
+					pos = rebootcontent.find("reboot")
+					if pos > 0:
+							self.rebootflag = True
+							inhalt = rebootcontent[pos:pos+9]
+							rebootcontent = rebootcontent.replace(u"reboot","#reboot")
+							g = open(self.fullfile, "w")
+							g.write(rebootcontent)
+							g.close()
+
+			 	argument="remove " + ipkpack[0] + "*"
+			 	os.system("ipkg %s" % argument)
+			 
+			if self.focus is self.LIST_FILE:
+			 self.currDir = "/var/etc/uninst/"
+			 self.filename = self.filelist.getFilename()
+			 self.fullfile = self.currDir + self.filename
+			 cmd=[self.fullfile]
+			 #subprocess.call(cmd)
+			 os.system("%s" % self.fullfile)
+
+		self["filelist"].refresh()
+		self["ipklist"].refresh()
+
+	def Exit(self):
+		if self.rebootflag:
+			#self["statusbar"].text = _("rebooting...")
+			message = "%s" % (_("Ein Plugin hat einen Neustart angefordert!\nDie Box wird nun rebootet!"))
+			self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+			TryQuitMainloop(self.session,2)
+		self.close()
+#------------------------------------------------------------------------------------------
+#------------------------------------------------------------------------------------------
+#------------------------------------------------------------------------------------------
+class TmpBrowse(Screen):
+	LIST_FILE = 1
+	LIST_IPK = 2
+
+	skin = """
+		<screen position="{screen.pos}" size="{screen.size}" title="Install AAF Plugins aus tmp" >
+			<ePixmap position="{logo.pos}" size="70,53" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/picon_default.png" transparent="1" alphatest="on" />
+			<ePixmap position="{red_led.pos}" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
+			<ePixmap position="{green_led.pos}" size="36,20" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
+			<eLabel text="INSTALL-TMP" position="{label.pos}" size="240,35" font="Regular;30" foregroundColor="#ffa323" transparent="1" />
+			<eLabel text="Tar-Files" position="{red.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="IPK-Files" position="{green.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<widget name="filelist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget name="ipklist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget source="global.CurrentTime" render="Label" position="{date.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%d.%m.%Y</convert>
+			</widget>
+			<widget source="global.CurrentTime" render="Label" position="{time.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%H:%M:%S</convert>
+			</widget>
+		</screen>"""
+
+	def __init__(self, session):
+		#switch automatic to current skin
+		current_w = getDesktop(0).size().width()
+		current_h = getDesktop(0).size().height()
+		print "DESKTOPsize is",current_w,current_h
+
+		# define the start koordinates and size
+		if current_w == 1280:
+				size_w = 720
+				size_h = 376
+		else:
+				size_w = 520
+				size_h = 376
+
+		# calculate Skin koordinates
+		font = "Regular;18"
+		pos_w = (current_w - size_w)/2
+		pos_h = (current_h - size_h)/2
+		list_w = size_w - 20
+		list_pos = (size_w - list_w)/2
+		red_pos = size_w/2 - 130
+		green_pos = size_w/2 + 50
+		red_led_pos = red_pos - 40
+		green_led_pos = green_pos - 40
+		label_pos = size_w/2 -90
+		logo_pos = size_w -75
+		date_pos = red_led_pos
+		time_pos = green_pos
+
+		# set Skinvariables
+		self.dict = {
+				'font': font,
+				'list.size': "%i,232"%(list_w),
+				'list.pos': "%i,110"%(list_pos),
+				'screen.size': "%i,%i"%(size_w,size_h),
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				'red.pos': "%i,57"%(red_pos),
+				'green.pos': "%i,57"%(green_pos),
+				'red_led.pos': "%i,57"%(red_led_pos),
+				'green_led.pos': "%i,57"%(green_led_pos),
+				'label.pos': "%i,12"%(label_pos),
+				'logo.pos': "%i,0"%(logo_pos),
+				'date.pos': "%i,360"%(date_pos),
+				'time.pos': "%i,360"%(time_pos),
+				}
+
+		self.skin = applySkinVars(TmpBrowse.skin,self.dict)
+		Screen.__init__(self, session)
+
+		self.focus = None
+		
+		self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"],
+		{
+			"ok": self.KeyOk,
+			"cancel": self.Exit,
+			"right": self.rightDown,
+			"left": self.leftUp,
+			"up": self.up,
+			"down": self.down,
+			"red": self.plugin_remove,
+			"green": self.ipk_remove,
+			"yellow": self.ipk_remove
+		}, -1)
+
+		self.SearchPattern = "(?i)^.*\.(ipk)"
+		self.currDir = "/tmp/"
+		if not pathExists(self.currDir):
+			self.currDir = "/"
+
+		self.ipklist = FileList(self.currDir, showDirectories = False, isTop = True, matchingPattern = self.SearchPattern)
+		self["ipklist"] = self.ipklist
+
+
+		self.SearchPattern = "(?i)^.*\.(gz|tgz)"
+		self.currDir = "/tmp/"
+		if not pathExists(self.currDir):
+			self.currDir = "/"
+
+		self.filelist = FileList(self.currDir, showDirectories = False, isTop = True, matchingPattern = self.SearchPattern)
+		self["filelist"] = self.filelist
+		
+		self["aktion"] = StaticText()
+#		self["ausschrift"] = Pixmap()
+		self["ipklist"].hide()
+		self["filelist"].show()
+#		self["ausschrift"].hide()
+		self["aktion"].text = "Install TAR"
+#		self["ausschrift"].text = "Install is running"
+		
+		#set the focus to the primary filelist
+		self.focus = self.LIST_FILE
+
+	def up(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].up()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].up()
+
+	def down(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].down()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].down()
+
+	def leftUp(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageUp()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageUp()
+		
+	def rightDown(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageDown()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageDown()
+
+	def plugin_remove(self):
+		self["ipklist"].hide()
+		self["aktion"].text = "Install TAR"
+		self["filelist"].show()
+		self.focus = self.LIST_FILE
+
+	def ipk_remove(self):
+		self["filelist"].hide()
+		self["aktion"].text = "Install IPK"
+		self["ipklist"].show()
+		self.focus = self.LIST_IPK
+
+	def KeyOk(self):
+		# call the uninstall-Script with subprocess or with os.system
+		self.filename = None
+		if self.focus is self.LIST_FILE:
+			self.filename = self.filelist.getFilename()
+			if self.filename is not None:
+				self["filelist"].hide()
+#				self["ausschrift"].show()
+				self.fullfile = self.currDir + self.filename
+				os.system("mkdir /tmp/AAFInst")
+				os.system("cd /tmp/AAFInst; tar -xzf  %s" % self.fullfile)
+				if os.path.exists("/tmp/AAFInst/inst.sh") is True:
+					os.system("cd /tmp/AAFInst; ./inst.sh" )
+				else:
+					os.system("cp -RP /tmp/AAFInst/* / ; sync")
+					os.system("rm -r /tmp/AAFInst")
+				self["filelist"].show()
+#				self["ausschrift"].hide()	
+		
+		if self.focus is self.LIST_IPK:
+			self.filename = self.ipklist.getFilename()
+			if self.filename is not None:
+				self["ipklist"].hide()
+#				self["ausschrift"].show()
+				self.fullfile = self.currDir + self.filename
+				cmd=["ipkg", "install", self.fullfile] 
+				subprocess.call(cmd)
+				self["ipklist"].show()
+#				self["ausschrift"].hide()	
+					
+		if self.filename is not None:
+			cmd=["rm", self.fullfile]
+			subprocess.call(cmd)
+			cmd=["sync"]
+			subprocess.call(cmd)
+			self["filelist"].refresh()
+			self["ipklist"].refresh()
+			#self.close()
+
+	def Exit(self):
+		self.close()
+
+#------------------------------------------------------------------------------------------
+#------------------------------------------------------------------------------------------
+# import py_compile
+# py_compile.compile("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/plugin.py")
+
+
+class DelImage(Screen):
+	LIST_FILE = 1
+	LIST_IPK = 2
+	LIST_DEVICE = 3
+	rebootflag = False
+
+	skin = """
+		<screen position="{screen.pos}" size="{screen.size}" title="BA-Images" >
+			<ePixmap position="{logo.pos}" size="70,53" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/picon_default.png" transparent="1" alphatest="on" />
+			<ePixmap position="{red_led.pos}" size="36,23" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
+			<ePixmap position="{green_led.pos}" size="36,23" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
+			<ePixmap position="{yellow_led.pos}" size="36,23" pixmap="skin_default/buttons/key_yellow.png" transparent="1" alphatest="on" />
+			<ePixmap position="{blue_led.pos}" size="36,23" pixmap="skin_default/buttons/key_blue.png" transparent="1" alphatest="on" />
+
+			<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/satlogo.png" position="20,95" size="100,300" alphatest="on" />
+
+			<eLabel text="Select" position="{red.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="Install" position="{green.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="Settings-copy" position="{yellow.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<eLabel text="Delete" position="{blue.pos}" size="240,25" font="Regular;20" transparent="1" />
+			<widget name="filelist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget name="ipklist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget name="devicelist" position="{list.pos}" size="{list.size}" scrollbarMode="showOnDemand" />
+			<widget source="statusbar" render="Label" position="10,310" size="490,25" font="Regular;22" foregroundColor="#ffa323" />
+			<widget source="textbar" render="Label" position="{label.pos}" size="240,35" font="Regular;30" foregroundColor="#ffa323" transparent="1" />
+
+			<widget source="global.CurrentTime" render="Label" position="{date.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%d.%m.%Y</convert>
+			</widget>
+			<widget source="global.CurrentTime" render="Label" position="{time.pos}" size="90,23" font="Regular;18" halign="left" valign="top" foregroundColor="#3366ff" transparent="1">
+				<convert type="ClockToText">Format:%H:%M:%S</convert>
+			</widget>
+		</screen>"""
+
+	#<eLabel text="BA - Images" position="{label.pos}" size="240,35" font="Regular;30" foregroundColor="#ffa323" transparent="1" />
+	def __init__(self, session):
+		#switch automatic to current skin
+		current_w = getDesktop(0).size().width()
+		current_h = getDesktop(0).size().height()
+		print "DESKTOPsize is",current_w,current_h
+
+		# define the start koordinates and size
+		if current_w == 1280:
+				size_w = 720
+				size_h = 376
+		else:
+				size_w = 520
+				size_h = 376
+
+		# calculate Skin koordinates
+		font = "Regular;18"
+		pos_w = (current_w - size_w)/2
+		pos_h = (current_h - size_h)/2
+		list_w = size_w - 200
+		list_pos = 150
+		red_pos = size_w/4 - 80
+		green_pos = size_w/4 + 35
+		yellow_pos = size_w/4 + 145
+		blue_pos = size_w/4 + 320
+
+		red_led_pos = red_pos - 35
+		green_led_pos = green_pos - 35
+		yellow_led_pos = yellow_pos - 35
+		blue_led_pos = blue_pos - 35
+		label_pos = size_w/2 -90
+		logo_pos = size_w -92
+		date_pos = size_w/2 - 100
+		time_pos = size_w/2 + 50
+
+		# set Skinvariables
+		self.dict = {
+				'font': font,
+				'list.size': "%i,232"%(list_w),
+				'list.pos': "%i,90"%(list_pos),
+				'screen.size': "%i,%i"%(size_w,size_h),
+				'screen.pos': "%i,%i"%(pos_w,pos_h),
+				'red.pos': "%i,53"%(red_pos),
+				'green.pos': "%i,53"%(green_pos),
+				'blue.pos': "%i,53"%(blue_pos),
+				'yellow.pos': "%i,53"%(yellow_pos),
+				'red_led.pos': "%i,53"%(red_led_pos),
+				'green_led.pos': "%i,53"%(green_led_pos),
+				'yellow_led.pos': "%i,53"%(yellow_led_pos),
+				'blue_led.pos': "%i,53"%(blue_led_pos),
+				'label.pos': "%i,12"%(label_pos),
+				'logo.pos': "%i,295"%(logo_pos),
+				'date.pos': "%i,355"%(date_pos),
+				'time.pos': "%i,355"%(time_pos),
+				}
+
+		self.skin = applySkinVars(DelImage.skin,self.dict)
+		Screen.__init__(self, session)
+
+		self["statusbar"] = StaticText()
+		self["textbar"] = StaticText()
+		self.focus = None
+		self["textbar"].text = _("Image-Select")
+		self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MenuActions", "MovieSelectionActions"],
+		{
+			"ok": self.KeyOk,
+			"menu": self.settings_menu,
+			"cancel": self.Exit,
+			"right": self.rightDown,
+			"left": self.leftUp,
+			"up": self.up,
+			"down": self.down,
+			"red": self.plugin_select,
+			"yellow": self.settings_para,
+			"blue": self.plugin_remove,
+			"green": self.ipk_remove
+		}, -1)
+
+		self.ipklist = []
+		self.filelist = []
+		self.devicelist = []
+		self.select = "1"
+		self.BAtyp = "new"
+
+		self.BAtyp = ""
+		self.currDir = "/mnt/usb"
+		self.devicelist = FileList(self.currDir, showDirectories = True, isTop = True)
+		self["devicelist"] = self.devicelist
+
+		if os.path.exists("/var/baroot/activImage") is True:
+			self.BAtyp = "new"
+		else:
+			if os.path.exists("/var/baroot") is False:
+				os.system("mkdir /var/baroot")
+			os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/mountbaroot.sh")
+			if os.path.exists("/var/baroot/UFS_images") is True:
+				self.BAtyp = "old"
+
+
+		if self.BAtyp == "new":
+			self.currDir = "/var/baroot/UFS_Images/"
+			if not pathExists(self.currDir):
+				self.currDir = "/"
+			self.ipklist = FileList(self.currDir, showDirectories = True, isTop = True)
+			self.BAtyp = "new"
+
+		else:
+			# it is an old BA < 5.4.3
+			self.SearchPattern = "(?i)^.*\.(tar.gz)"
+			self.currDir = "/var/baroot/UFS_Images/"
+			self.ipklist = FileList(self.currDir, showDirectories = True, isTop = True, matchingPattern = self.SearchPattern)
+			if not pathExists(self.currDir):
+				self.currDir = "/"
+
+
+			self.currDir = "/mnt/usb"
+			self.devicelist = FileList(self.currDir, showDirectories = True, isTop = True)
+			self["devicelist"] = self.devicelist
+
+		self["ipklist"] = self.ipklist
+
+
+		if self.BAtyp == "new":
+			self.currDir = "/var/baroot/ba/ba/"
+			#if os.path.exists("/var/baroot/ba/ba/Flash") is False:
+			#	os.system("mkdir -p /var/baroot/ba/ba/Flash")
+			if not pathExists(self.currDir):
+				self.currDir = "/"
+			self.BAtyp = "new"
+		else:
+			# it is an old BA < 5.4.3
+			self.currDir = "/mnt/usb"
+			self.devicelist = FileList(self.currDir, showDirectories = True, isTop = True)
+			self["devicelist"] = self.devicelist
+
+			self.currDir = "/var/baroot/ba/ba/"
+			if not pathExists(self.currDir):
+				self.currDir = "/"
+			self.BAtyp = "old"
+
+		self.filelist = FileList(self.currDir, showDirectories = True, isTop = True)
+		self["filelist"] = self.filelist
+
+		self["ipklist"].hide()
+		self["devicelist"].hide()
+		self["filelist"].show()
+
+		#set the focus to the primary filelist
+		self.focus = self.LIST_FILE
+
+	def up(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].up()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].up()
+		if self.focus is self.LIST_DEVICE:
+			self["devicelist"].up()
+
+	def down(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].down()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].down()
+		if self.focus is self.LIST_DEVICE:
+			self["devicelist"].down()
+
+
+	def leftUp(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageUp()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageUp()
+		if self.focus is self.LIST_DEVICE:
+			self["devicelist"].pageUp()
+
+
+	def rightDown(self):
+		if self.focus is self.LIST_FILE:
+			self["filelist"].pageDown()
+		if self.focus is self.LIST_IPK:
+			self["ipklist"].pageDown()
+		if self.focus is self.LIST_DEVICE:
+			self["devicelist"].pageDown()
+
+
+	def settings_para(self):
+		if self.BAtyp == "new":
+			self["ipklist"].hide()
+			self["filelist"].show()
+			self["devicelist"].hide()
+			self.focus = self.LIST_FILE
+			self.select = "2"
+			self["textbar"].text = _("Settings-Copy")
+			#if os.path.exists("/var/baroot/ba/ba/Flash") is True:
+			#	os.system("rm -r /var/baroot/ba/ba/Flash")
+			self["filelist"].refresh()
+
+	def plugin_remove(self):
+		self["ipklist"].hide()
+		self["filelist"].show()
+		self.focus = self.LIST_FILE
+		self.select = "0"
+		self["textbar"].text = _("Image-Delete")
+		#if os.path.exists("/var/baroot/ba/ba/Flash") is True:
+		#	os.system("rm -r /var/baroot/ba/ba/Flash")
+		self["filelist"].refresh()
+
+	def plugin_select(self):
+		self["ipklist"].hide()
+		self["filelist"].show()
+		self.focus = self.LIST_FILE
+		self.select = "1"
+		self["textbar"].text = _("Image-Select")
+		#if self.BAtyp == "new":
+		#		if os.path.exists("/var/baroot/ba/ba/Flash") is False:
+		#			os.system("mkdir -p /var/baroot/ba/ba/Flash")
+		#		self["filelist"].refresh()
+
+	def ipk_remove(self):
+			self["filelist"].hide()
+			self["devicelist"].hide()
+			self["ipklist"].show()
+			self.focus = self.LIST_IPK
+			self["textbar"].text = _("Image-Install")
+
+	def KeyOk(self):
+		# call the uninstall-Script with os.system
+		if self.focus is self.LIST_DEVICE:
+			self.currDir = "/var/baroot/ba/ba/"
+			message = "%s %s" % (_("Wollen sie in diesem Device installieren?"),self.devicelist.getFilename())
+			self.session.openWithCallback(self.oldimage_install, MessageBox, message, MessageBox.TYPE_YESNO)
+
+
+		if self.focus is self.LIST_IPK:
+			if self.BAtyp == "old":
+			 	 self.focus = self.LIST_DEVICE
+			 	 self["filelist"].hide()
+			 	 self["devicelist"].show()
+			 	 self["ipklist"].hide()
+			 	 self["textbar"].text = _("Zieldevice")
+			 	 self["filelist"].refresh()
+			 	 self["ipklist"].refresh()
+			 	 self["devicelist"].refresh()
+			else:
+			 	 self.currDir = "/var/baroot/ba/ba/"
+			 	 message = "%s %s" % (_("Wollen sie dieses Image wirklich installieren?"),self.ipklist.getFilename())
+			 	 self.session.openWithCallback(self.image_install, MessageBox, message, MessageBox.TYPE_YESNO)
+
+		if self.focus is self.LIST_FILE:
+			self.urlname = self.filelist.getFilename()
+			if self.BAtyp == "new":
+			 	 self.urlname2 = self.urlname.replace("/var/baroot/ba/ba/","")
+			else:
+			 	 self.urlname2 = self.urlname.replace("/var/baroot/ba/ba/","")
+			self.urlname2 = self.urlname2.replace("/","")
+
+			if self.select == "0":
+			 	 self.currDir = "/var/baroot/UFS_Images/"
+			 	 message = "%s %s" % (_("Sind sie sicher dieses Image zu loeschen?"),self.urlname2)
+			 	 self.session.openWithCallback(self.image_install, MessageBox, message, MessageBox.TYPE_YESNO)
+
+			if self.select == "1":
+			 	 if self.BAtyp == "new":
+			 	 		self.currDir = "/var/baroot/UFS_Images/"
+			 	 else:
+			 	 		self.currDir = "/var/baroot/UFS_Images/"
+			 	 message = "%s %s" % (_("Dieses Image auswaehlen?"),self.urlname2)
+			 	 self.session.openWithCallback(self.image_install, MessageBox, message, MessageBox.TYPE_YESNO)
+
+			if self.select == "2":
+			 	 if self.BAtyp == "new":
+			 	 		self.currDir = "/var/baroot/UFS_Images/"
+			 	 		message = "%s %s" % (_("Settings in dieses Image kopieren?"),self.urlname2)
+			 	 		self.session.openWithCallback(self.settings_copy, MessageBox, message, MessageBox.TYPE_YESNO)
+
+
+	def image_install(self, answer):
+		if answer == True:
+      # install Image
+			if self.focus is self.LIST_IPK:
+				self["filelist"].refresh()
+				self["ipklist"].refresh()
+				self.currDir = "/var/baroot/UFS_Images/"
+				self.urlname = self.ipklist.getFilename()
+				self.error_counter = "0"
+
+				if os.path.exists("/bootp.conf") is False:
+						message = "%s" % (_("Das ist kein Multiboot BA!\nbootp.conf fehlt"))
+						self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+						self.error_counter = "1"
+
+				if os.path.exists("/var/baroot/activImage") is False:
+						message = "%s" % (_("Das ist kein Multiboot BA!\nactivImage fehlt!"))
+						self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+						self.error_counter = "1"
+
+				if os.path.exists("/var/baroot/activImage") is True:
+					# is enough freespace on stick?
+					os.system("df /var/baroot |grep rootfs|cut -c41-50 >/tmp/free.txt")
+					if os.path.exists("/tmp/free.txt") is True:
+						f = open("/tmp/free.txt", "r" )
+						for line in f:
+							freesize = line.lstrip()
+						f.close
+						freesize = freesize.replace("\n","")
+						freesize = int(freesize)
+
+					if 42000 > freesize:
+						print "nicht OK"
+						message = "%s" % (_("Zu wenig Speicher im Stick frei!\n  Speicher = " + str(freesize)))
+						self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+						self.error_counter = "1"
+					else:
+						print "OK" + str(freesize)
+						if os.path.exists("/var/baroot/ba/ba.sh") is False:
+							if os.path.exists("/var/baroot") is False:
+								os.system("mkdir /var/baroot")
+
+				# is it an multiboot environment?
+				if self.error_counter == "0":
+				#if os.path.exists("/var/baroot/activImage") is True:
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+							evfd.getInstance().vfd_write_string("Install Image")
+					self["statusbar"].text = _("Decompressing Image in progress...")
+					#message = "%s" % (_("Das Image wird nun entpackt und installiert!"))
+					#self.session.open(MessageBox, message, MessageBox.TYPE_INFO,10)
+
+					# this is the Imagename in /var/baroot/UFS_Images
+					self.urlnameorg = self.urlname
+					self.urlname = self.urlname.replace(".tar.gz","")
+					self.urlname_org = self.urlname
+					# chek if exist Image, then make a newer
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_2"
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_3"
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_4"
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_5"
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_6"
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_7"
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_8"
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_9"
+					TargetDir = "/var/baroot/ba/ba/" + self.urlname
+					if os.path.exists(TargetDir) is True:
+						self.urlname = self.urlname_org + "_10"
+
+
+					TargetDir = "mkdir -p /var/baroot/ba/ba/" + self.urlname
+					os.system(TargetDir)
+
+					# write name to userfile
+					TargetDir = "NewDir=" + self.urlname
+					ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_url", "w")
+					ffile.write(TargetDir)
+					ffile.close()
+
+					TarString = "cd /var/baroot/UFS_Images; tar -xzf " + self.urlnameorg + " -C /var/baroot/ba/ba/" + self.urlname
+					os.system(TarString)
+					#self.session.open(Console, title = "decompressing is running", cmdlist = [TarString])
+
+					CpString = "cp /bootp.conf /var/baroot/ba/ba/" + self.urlname
+					os.system(CpString)
+					if os.path.exists("/bootp2.conf") is True:
+						CpString = "cp /bootp2.conf /var/baroot/ba/ba/" + self.urlname
+						os.system(CpString)
+
+					#CpString = "cp /etc/init.d/rcS /var/baroot/ba/ba/" + self.urlname + "/etc/init.d/rcS"
+					#os.system(CpString)
+
+					RCS = "/var/baroot/ba/ba/" + self.urlname + "/etc/init.d/rcS"
+					#CpString = "cat /usr/lib/enigma2/python/Plugins/Extensions/AddonManager/rcs_header > /tmp/rcs.txt"
+					#os.system(CpString)
+
+					CpString = "sed -e 's*#!/bin/sh*#*g' -i " + RCS
+					os.system(CpString)
+
+					ffile = open("/tmp/rcs.txt", "w")
+					CpString = "#!/bin/sh"
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = ""
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = "if [ -e /activImage ]; then"
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = "  echo \"Starte chroot\""
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = "  mount -o bind /baroot /activImage/var/baroot"
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = "  exec chroot /activImage /etc/init.d/rcS"
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = "fi"
+					ffile.write(CpString)
+					ffile.write("\n")
+					CpString = ""
+					ffile.write(CpString)
+					ffile.write("\n")
+					ffile.close()
+
+					CpString = "cat " + RCS + " >> /tmp/rcs.txt"
+					os.system(CpString)
+					CpString = "cp /tmp/rcs.txt " + RCS
+					os.system(CpString)
+					CpString = "chmode 755 " + RCS
+					os.system(CpString)
+					CpString = "sed -e 's/fsck /#fsck /g' -i /var/baroot/ba/ba/" + self.urlname + "/etc/init.d/mountvirtfs"
+					os.system(CpString)
+					CpString = "mkdir -p /var/baroot/ba/ba/" + self.urlname + "/var/baroot"
+					os.system(CpString)
+					os.system("sync")
+
+          # set automount in rcs
+					os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/makercs.sh")
+
+
+          # and now we copy the settings
+					if config.AddonManager.ba_settings_on.value == 1:
+						file = open("/proc/stb/info/model", "r")
+						box = file.readline().strip()
+						file.close()
+						if box <> "dm8000":
+							evfd.getInstance().vfd_write_string("install Settings")
+						self["statusbar"].text = _("Settings werden uebernommen....")
+
+						CpString = "rm /var/baroot/ba/ba/" + self.urlname + "/var/etc/.firstboot"
+						os.system(CpString)
+						CpString = "cp -RP /var/emu /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp -RP /var/keys /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /var/etc/active_cam /var/baroot/ba/ba/" + self.urlname + "/var/etc/active_cam"
+						os.system(CpString)
+						CpString = "cp /var/etc/*emu /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/smbfs /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/upnpfs /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+
+
+						CpString = "cp /var/*emu /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/lamedb /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/bouquets* /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/userbouquet* /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /etc/tuxbox/satellites.xml /var/baroot/ba/ba/" + self.urlname + "/etc/tuxbox/satellites.xml"
+						os.system(CpString)
+						#CpString = "cp /usr/local/share/enigma2/settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						#os.system(CpString)
+						CpString = "cp /usr/automount/amount.ini /var/baroot/ba/ba/" + self.urlname + "/usr/automount/amount.ini"
+						os.system(CpString)
+
+						#// Check for default skin
+						defaultSkin = 0
+						PathString = "/var/baroot/ba/ba/" + self.urlname + "/var/usr/local/share/enigma2/settings"
+						if os.path.exists(PathString) is True:
+							em = open(PathString)
+							e = em.readlines()
+							em.close()
+							for line in e:
+								if line.find("config.skin.primary_skin") > -1:
+										defaultSkin = 1
+										PrimarySkin = line
+
+						CpString = "cp /usr/local/share/enigma2/settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+
+						if defaultSkin == 1:
+								em = open(PathString, "a")
+								em.write(PrimarySkin)
+								em.close()
+
+
+					if config.AddonManager.ba_skins_on.value == 1:
+							CpString = "cp -RP /usr/local/share/enigma2/ /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/"
+							os.system(CpString)
+
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions/InfoBarConfig/ /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/Extensions/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxCryptoInfo.pyc /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxServiceInfo.pyc /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							if os.path.exists("/usr/share/enigma2/picon/") is True:
+								CpString = "cp -RP /usr/share/enigma2/picon/ /var/baroot/ba/ba/" + self.urlname + "/usr/share/enigma2/"
+								os.system(CpString)
+
+					if config.AddonManager.ba_plugins_on.value == 1:
+							# save AddonManager + Aafpanel, because in new image is newer
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/AddonManager /tmp/")
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel /tmp/")
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							# restore AddonManager + Aafpanel
+							CpString = "cp -RP /tmp/AddonManager /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							CpString = "cp -RP /tmp/Aafpanel /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+
+					if config.AddonManager.ba_remove_on.value == 1:
+							CpString = "rm -r /var/baroot/UFS_Images/" + self.urlnameorg
+							os.system(CpString)
+
+					if config.AddonManager.ba_usersettings_on.value == 1:
+						if os.path.exists("/var/baroot/default_settings") is True:
+							CpString = "cp /var/baroot/default_settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/settings"
+							os.system(CpString)
+
+					if os.path.exists("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh") is True:
+						os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh")
+
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+						evfd.getInstance().vfd_write_string("Image Ready!")
+					restartbox = self.session.openWithCallback(self.restart,MessageBox,_("Das Image ist nun fertig installiert!\nSoll ein Neustart durchgefuehrt werden?"), MessageBox.TYPE_YESNO)
+					restartbox.setTitle(_("UFS-Box starten?"))
+
+
+      # delete Image
+			if self.focus is self.LIST_FILE:
+				self.imagename = self.filelist.getFilename()
+				if self.imagename == "/var/baroot/ba/":
+					print "/var/baroot/ba/"
+				else:
+					#if self.BAtyp == "new":
+					fd=open("/var/baroot/ba/.baboot")
+					imgname=fd.read()
+					fd.close()
+					imgname = imgname.replace("\n","")
+					imgname = "/var/baroot/ba/ba/" + imgname + "/"
+
+					# delete Image
+					if self.select == "0":
+						if self.imagename == imgname:
+							message = "%s" % (_("WARNUNG\nDas aktive Image kann NICHT geloescht werden!"))
+							self.session.open(MessageBox, message, MessageBox.TYPE_INFO,5)
+						else:
+							message = "%s" % (_("Das Image wird jetzt geloescht!"))
+							self.session.open(MessageBox, message, MessageBox.TYPE_INFO,3)
+							if self.BAtyp == "new":
+								os.system("rm -r %s" % self.imagename)
+							else:
+								# and now we read the devicename
+								fileread = open(self.imagename + "bootp.conf", "r" )
+								for line in fileread:
+									if line.split('=')[0] == "BADEVICE":
+											self.device = line.split('=')[1]
+											self.device = self.device.replace("\n","")
+								fileread.close()
+
+								# read mountpoint
+								procfile = open("/proc/mounts")
+								for n in procfile.readlines():
+										if n.split(' ')[0] == self.device:
+											self.device = n.split(' ')[1]
+								procfile.close()
+								os.system("rm -r %s" % self.device)
+								os.system("rm -r %s" % self.imagename)
+
+					# select Image
+					if self.select == "1":
+						if self.imagename == imgname:
+							message = "%s" % (_("Dieses Image ist bereits AKTIV!"))
+							self.session.open(MessageBox, message, MessageBox.TYPE_INFO,5)
+						else:
+							self.urlname = self.imagename.replace("/var/baroot/ba/ba/","")
+							self.urlname = self.urlname.replace("/","")
+
+							restartbox = self.session.openWithCallback(self.restart,MessageBox,_("Soll nun ein Neustart durchgefuehrt werden?"), MessageBox.TYPE_YESNO)
+							restartbox.setTitle(_("UFS-Box starten?"))
+
+		self["filelist"].refresh()
+		self["ipklist"].refresh()
+		self["devicelist"].refresh()
+
+	def restart(self, answer):
+		if answer is True:
+			# make bootimage active for restart
+			if self.BAtyp == "new":
+				ffile = open("/var/baroot/ba/.baboot", "w")
+				ffile.write(self.urlname)
+				ffile.write("\n")
+				ffile.close()
+				#if os.path.exists("/var/baroot/ba/ba/Flash") is True:
+				#	os.system("rm -r /var/baroot/ba/ba/Flash")
+			else:
+
+				ffile = open("/var/baroot/ba/.baboot", "w")
+				ffile.write(self.urlname_org)
+				ffile.write("\n")
+				ffile.close()
+				# and now we write the devicename
+				fileread = open("/var/baroot/ba/ba/" + self.urlname_org + "/bootp.conf", "r" )
+				for line in fileread:
+					if line.split('=')[0] == "BADEVICE":
+							self.device = line.split('=')[1]
+							ffile = open("/var/baroot/ba/.badevice", "w")
+							ffile.write(self.device)
+							#ffile.write("\n")
+							ffile.close()
+				fileread.close()
+
+			os.system("sync")
+			os.system("reboot -f")
+
+
+	def Exit(self):
+		if self.rebootflag:
+			#self["statusbar"].text = _("rebooting...")
+			message = "%s" % (_("Ein Plugin hat einen Neustart angefordert!\nDie Box wird nun rebootet!"))
+			self.session.open( MessageBox, message, MessageBox.TYPE_INFO)
+			TryQuitMainloop(self.session,2)
+		self.close()
+
+	def settings_menu(self):
+		self.session.open(AddonConfigScreen)
+
+
+
+	def settings_copy(self, answer):
+		if answer == True:
+      # install Image
+			if self.focus is self.LIST_FILE:
+				self["filelist"].refresh()
+				self["ipklist"].refresh()
+				self.currDir = "/var/baroot/UFS_Images/"
+				self.urlname = self.urlname2
+				self.error_counter = "0"
+
+				if os.path.exists("/bootp.conf") is False:
+						message = "%s" % (_("Das ist kein Multiboot BA!\nbootp.conf fehlt"))
+						self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+						self.error_counter = "1"
+
+				if os.path.exists("/var/baroot/activImage") is False:
+						message = "%s" % (_("Das ist kein Multiboot BA!\nactivImage fehlt!"))
+						self.session.open(MessageBox, message, MessageBox.TYPE_ERROR)
+						self.error_counter = "1"
+
+				# is it an multiboot environment?
+				if self.error_counter == "0":
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+						evfd.getInstance().vfd_write_string("Settings copy")
+
+					# write name to userfile
+					TargetDir = "NewDir=" + self.urlname
+					ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_url", "w")
+					ffile.write(TargetDir)
+					ffile.close()
+
+					CpString = "cp /bootp.conf /var/baroot/ba/ba/" + self.urlname
+					os.system(CpString)
+					if os.path.exists("/bootp2.conf") is True:
+						CpString = "cp /bootp2.conf /var/baroot/ba/ba/" + self.urlname
+						os.system(CpString)
+
+          # and now we copy the settings
+					if config.AddonManager.ba_settings_on.value == 1:
+						file = open("/proc/stb/info/model", "r")
+						box = file.readline().strip()
+						file.close()
+						if box <> "dm8000":
+							evfd.getInstance().vfd_write_string("install Settings")
+						self["statusbar"].text = _("Settings werden uebernommen....")
+
+						CpString = "rm /var/baroot/ba/ba/" + self.urlname + "/var/etc/.firstboot"
+						os.system(CpString)
+						CpString = "cp -RP /var/emu /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp -RP /var/keys /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /var/etc/active_cam /var/baroot/ba/ba/" + self.urlname + "/var/etc/active_cam"
+						os.system(CpString)
+						CpString = "cp /var/etc/*emu /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/smbfs /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/upnpfs /var/baroot/ba/ba/" + self.urlname + "/var/etc/"
+						os.system(CpString)
+
+
+						CpString = "cp /var/*emu /var/baroot/ba/ba/" + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/lamedb /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/bouquets* /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/userbouquet* /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /etc/tuxbox/satellites.xml /var/baroot/ba/ba/" + self.urlname + "/etc/tuxbox/satellites.xml"
+						os.system(CpString)
+						#CpString = "cp /usr/local/share/enigma2/settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						#os.system(CpString)
+						CpString = "cp /usr/automount/amount.ini /var/baroot/ba/ba/" + self.urlname + "/usr/automount/amount.ini"
+						os.system(CpString)
+
+						#// Check for default skin
+						defaultSkin = 0
+						PathString = "/var/baroot/ba/ba/" + self.urlname + "/var/usr/local/share/enigma2/settings"
+						if os.path.exists(PathString) is True:
+							em = open(PathString)
+							e = em.readlines()
+							em.close()
+							for line in e:
+								if line.find("config.skin.primary_skin") > -1:
+										defaultSkin = 1
+										PrimarySkin = line
+
+						CpString = "cp /usr/local/share/enigma2/settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+
+						if defaultSkin == 1:
+								em = open(PathString, "a")
+								em.write(PrimarySkin)
+								em.close()
+
+
+					if config.AddonManager.ba_skins_on.value == 1:
+							CpString = "cp -RP /usr/local/share/enigma2/ /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/"
+							os.system(CpString)
+
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions/InfoBarConfig/ /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/Extensions/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxCryptoInfo.pyc /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxServiceInfo.pyc /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							if os.path.exists("/usr/share/enigma2/picon/") is True:
+								CpString = "cp -RP /usr/share/enigma2/picon/ /var/baroot/ba/ba/" + self.urlname + "/usr/share/enigma2/"
+								os.system(CpString)
+
+					if config.AddonManager.ba_plugins_on.value == 1:
+							# save AddonManager + Aafpanel, because in new image is newer
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/AddonManager /tmp/")
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel /tmp/")
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							# restore AddonManager + Aafpanel
+							CpString = "cp -RP /tmp/AddonManager /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							CpString = "cp -RP /tmp/Aafpanel /var/baroot/ba/ba/" + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+
+					if config.AddonManager.ba_remove_on.value == 1:
+							CpString = "rm -r /var/baroot/UFS_Images/" + self.urlnameorg
+							os.system(CpString)
+
+					if config.AddonManager.ba_usersettings_on.value == 1:
+						if os.path.exists("/var/baroot/default_settings") is True:
+							CpString = "cp /var/baroot/default_settings /var/baroot/ba/ba/" + self.urlname + "/usr/local/share/enigma2/settings"
+							os.system(CpString)
+
+					if os.path.exists("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh") is True:
+						os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh")
+
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+						evfd.getInstance().vfd_write_string("Image Ready!")
+					restartbox = self.session.openWithCallback(self.restart,MessageBox,_("Die Settings wurden kopiert!\nSoll ein Neustart durchgefuehrt werden?"), MessageBox.TYPE_YESNO)
+					restartbox.setTitle(_("UFS-Box starten?"))
+
+	def oldimage_install(self, answer):
+		if answer == True:
+      # install Old-Image
+			if self.focus is self.LIST_DEVICE:
+				self.focus = self.LIST_IPK
+				self["filelist"].hide()
+				self["devicelist"].hide()
+				self["ipklist"].show()
+				self["textbar"].text = _("Install-Image")
+				self["filelist"].refresh()
+				self["ipklist"].refresh()
+				self["devicelist"].refresh()
+
+				self.target = self.devicelist.getFilename()
+				self.currDir = "/UFS_Images/"
+				self.urlname = self.ipklist.getFilename()
+				self.error_counter = "0"
+
+
+      # install Old-Image
+				if self.BAtyp == "old":
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+						evfd.getInstance().vfd_write_string("Install Image")
+					self["statusbar"].text = _("Decompressing Image in progress...")
+
+					# this is the Imagename in /var/baroot/UFS_Images
+					self.urlnameorg = self.urlname
+					self.urlname = self.urlname.replace(".img.tar.gz","")
+					self.urlname = self.urlname.replace(".tar.gz","")
+					self.urlname_org = self.urlname
+
+					# write name to userfile
+					TargetDir = "NewDir=" + self.urlname_org
+					ffile = open("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_url", "w")
+					ffile.write(TargetDir)
+					ffile.close()
+
+ 					self.fulltarget = "/mnt/usb/" + self.target
+					TarString = "cd /UFS_Images; tar -xzf " + self.urlnameorg + " -C " + self.fulltarget
+					os.system(TarString)
+
+					os.system("sync")
+ 					self.device = "/dev/sda2"
+ 					# read mountpoint
+					procfile = open("/proc/mounts")
+					for n in procfile.readlines():
+						if n.split(' ')[1] == self.fulltarget:
+							self.device = n.split(' ')[0]
+					procfile.close()
+
+					# read current imagename
+					if os.path.exists("/ba/.baboot") is True:
+						f = open("/ba/.baboot", "r" )
+						for line in f:
+							self.sourceimg = line.lstrip()
+						f.close
+						self.sourceimg = self.sourceimg.replace("\n","")
+
+					TarString = "mkdir -p /ba/ba/" + self.urlname
+					os.system(TarString)
+
+					self.devid = "0:" + self.device[8:9]
+					fileread = open("/ba/ba/" + self.sourceimg + "/bootp.conf", "r" )
+					filewrite = open("/ba/ba/" + self.urlname + "/bootp.conf", "w" )
+
+					self.urlname = self.fulltarget
+
+					for line in fileread:
+								if line.split('=')[0] == "BADEVICE":
+											line = "BADEVICE=" + self.device + "\n"
+								if line.split('=')[0] == "BADEVID":
+											line = "BADEVID=" + self.devid + "\n"
+								filewrite.write(line)
+					fileread.close()
+					filewrite.close()
+
+          # and now we copy the settings
+					if config.AddonManager.ba_settings_on.value == 1:
+						file = open("/proc/stb/info/model", "r")
+						box = file.readline().strip()
+						file.close()
+						if box <> "dm8000":
+							evfd.getInstance().vfd_write_string("install Settings")
+						self["statusbar"].text = _("Settings werden uebernommen....")
+
+						CpString = "rm  " + self.urlname + "/var/etc/.firstboot"
+						os.system(CpString)
+						CpString = "cp -RP /var/emu " + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp -RP /var/keys " + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /var/etc/active_cam " + self.urlname + "/var/etc/active_cam"
+						os.system(CpString)
+						CpString = "cp /var/etc/*emu " + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/smbfs " + self.urlname + "/var/etc/"
+						os.system(CpString)
+						CpString = "cp /var/etc/upnpfs " + self.urlname + "/var/etc/"
+						os.system(CpString)
+
+
+						CpString = "cp /var/*emu " + self.urlname + "/var/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/lamedb " + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/bouquets* " + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /usr/local/share/enigma2/userbouquet* " + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+						CpString = "cp /etc/tuxbox/satellites.xml " + self.urlname + "/etc/tuxbox/satellites.xml"
+						os.system(CpString)
+						#CpString = "cp /usr/local/share/enigma2/settings " + self.urlname + "/usr/local/share/enigma2/"
+						#os.system(CpString)
+						CpString = "cp /usr/automount/amount.ini " + self.urlname + "/usr/automount/amount.ini"
+						os.system(CpString)
+
+						#// Check for default skin
+						defaultSkin = 0
+						PathString = self.urlname + "/var/usr/local/share/enigma2/settings"
+						if os.path.exists(PathString) is True:
+							em = open(PathString)
+							e = em.readlines()
+							em.close()
+							for line in e:
+								if line.find("config.skin.primary_skin") > -1:
+										defaultSkin = 1
+										PrimarySkin = line
+
+						CpString = "cp /usr/local/share/enigma2/settings " + self.urlname + "/usr/local/share/enigma2/"
+						os.system(CpString)
+
+						if defaultSkin == 1:
+								em = open(PathString, "a")
+								em.write(PrimarySkin)
+								em.close()
+
+
+					if config.AddonManager.ba_skins_on.value == 1:
+							CpString = "cp -RP /usr/local/share/enigma2/ " + self.urlname + "/usr/local/share/"
+							os.system(CpString)
+
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions/InfoBarConfig/ " + self.urlname + "/usr/lib/enigma2/python/Plugins/Extensions/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxCryptoInfo.pyc " + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							CpString = "cp /usr/lib/enigma2/python/Components/Converter/MaxServiceInfo.pyc " + self.urlname + "/usr/lib/enigma2/python/Components/Converter/"
+							os.system(CpString)
+
+							if os.path.exists("/usr/share/enigma2/picon/") is True:
+								CpString = "cp -RP /usr/share/enigma2/picon/ " + self.urlname + "/usr/share/enigma2/"
+								os.system(CpString)
+
+					if config.AddonManager.ba_plugins_on.value == 1:
+							# save AddonManager + Aafpanel, because in new image is newer
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/AddonManager /tmp/")
+							os.system("cp -RP /usr/lib/enigma2/python/Plugins/Extensions/Aafpanel /tmp/")
+							CpString = "cp -RP /usr/lib/enigma2/python/Plugins/Extensions " + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							# restore AddonManager + Aafpanel
+							CpString = "cp -RP /tmp/AddonManager " + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+							CpString = "cp -RP /tmp/Aafpanel " + self.urlname + "/usr/lib/enigma2/python/Plugins/"
+							os.system(CpString)
+
+					if config.AddonManager.ba_remove_on.value == 1:
+							CpString = "rm -r /var/baroot/ba/UFS_Images/" + self.urlname
+							os.system(CpString)
+
+					if config.AddonManager.ba_usersettings_on.value == 1:
+						if os.path.exists("/default_settings") is True:
+							CpString = "cp /default_settings " + self.urlname + "/usr/local/share/enigma2/settings"
+							os.system(CpString)
+
+					if os.path.exists("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh") is True:
+						os.system("/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/ba_script.sh")
+
+					file = open("/proc/stb/info/model", "r")
+					box = file.readline().strip()
+					file.close()
+					if box <> "dm8000":
+						evfd.getInstance().vfd_write_string("Image Ready!")
+					#restartbox = self.session.openWithCallback(self.restart,MessageBox,_("Das Image ist nun fertig installiert!\nSoll ein Neustart durchgefuehrt werden?"), MessageBox.TYPE_YESNO)
+					#restartbox.setTitle(_("UFS-Box starten?"))
+		 	 		message = "%s" % (_("Das Image ist nun fertig installiert!\nSoll ein Neustart durchgefuehrt werden?"))
+		 	 		self.session.openWithCallback(self.restart, MessageBox, message, MessageBox.TYPE_YESNO)
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.cfg
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.cfg	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.cfg	(revision 12164)
@@ -0,0 +1,10 @@
+settings=y
+binarys=y
+camconfig=y
+plugins=y
+network=y
+samba=y
+bilder=y
+sonstige=y
+addonmanager=y
+backup=y
Index: /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh
===================================================================
--- /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh	(revision 12164)
+++ /ipk/source/needupdate_addonmanager_3_04/usr/lib/enigma2/python/Plugins/Extensions/AddonManager/restore.sh	(revision 12164)
@@ -0,0 +1,195 @@
+#!/bin/sh
+# ***********************************************************
+#              Backupscript nach Methode niovs
+#              wird vom Addon-Manager aufgerufen
+#
+#           kann beliebig für jede Box weitert werden
+#
+#           angepasst fuer Fortis-Boxen by Bauernbub
+# ***********************************************************
+
+filename=$1
+rebootnow=$2
+
+# check for saved settings
+if [ ! -e /var/etc/restore.cfg ]; then
+  # make a default and say all yes
+  settings=n
+  binarys=n
+  camconfig=n
+  plugins=n
+  network=n
+  samba=n
+  bilder=n
+  sonstige=n
+  addonmanager=y
+  backup=y
+else
+. /var/etc/restore.cfg   # read config from Addon-Manager
+fi
+
+echo -e "***********************************************************"
+echo -e "**********Wiederherstellung VU Plus oder Dreambox**********"
+echo -e "***********************************************************\n"
+
+boxtyp="`cat /proc/stb/info/model`"
+
+if [ "$filename" ]; then
+  BOXDIR="$filename"
+else
+  if [ "$boxtyp" == "dm8000" ]
+    then
+      BOXDIR="backup_vu"
+    else
+      BOXDIR="backup_fortis"
+  fi
+fi
+
+if [ `mount | grep "on /var/swap" | wc -l` -ge 1 ]; then DIR="/var/swap/$BOXDIR"; fi
+if [ `mount | grep "on /media/hdd" | wc -l` -eq 1 ]; then DIR="/media/hdd/$BOXDIR"; fi
+
+rm -f $DIR/restore.log ; touch $DIR/restore.log
+
+# Neustart nach Flashinstallation, restore AM
+if [ -e /var/swap/backup/.firstrun ] || [ -e /media/hdd/backup/.firstrun ] ; then
+  if [ -e $DIR/restore.cfg ]; then
+    . $DIR/restore.cfg
+  else
+    settings=n
+    binarys=n
+    camconfig=n
+    plugins=n
+    network=n
+    samba=n
+    bilder=n
+    sonstige=n
+    addonmanager=y
+    backup=y
+  fi
+fi
+
+
+if [ "$plugins" = "y" ]
+ then
+ if [ -d $DIR/pakete ]
+  then
+   ipkg install  $DIR/pakete/*.ipk
+   ipkg update
+   for i in `cat $DIR/ipkg.list ` ; do ipkg install $i ; done
+     echo -e "******** Plugins wiederhergestellt ********\n"
+ elif [ -e $DIR/ipkg.list ]
+  then
+   ipkg update
+   for i in `cat $DIR/ipkg.list ` ; do ipkg install $i ; done
+     echo -e "******** IPK-Plugins wiederhergestellt ********\n"
+ else
+   echo -e "******** Kein Backup der IPK-Plugins vorhanden! ********\n"
+ fi
+ if [ -e $DIR/plugins.tar ]
+  then
+      tar -xvf $DIR/plugins.tar -C / >> $DIR/restore.log
+      echo -e "******** Extension/Plugins wiederhergestellt ********\n"
+  else
+      echo -e "******** Kein Backup der Plugins vorhanden! ********\n"
+ fi
+fi
+
+if [ "$network" = "y" ]
+ then
+ if [ -e $DIR/network.tar ]
+  then
+      tar -xvf $DIR/network.tar -C / >> $DIR/restore.log
+      echo -e "******** Netzwerkkonfiguration wurde wiederhergestellt ********\n"
+  else
+      echo -e "******** Kein Backup der Netzwerkkonfiguration vorhanden! ********\n"
+ fi
+fi
+
+
+if [ "$samba" = "y" ]
+ then
+ if [ -e $DIR/samba.tar ]
+  then
+      tar -xvf $DIR/samba.tar -C / >> $DIR/restore.log
+      echo -e "******** Sambakonfiguration wurde wiederhergestellt ********\n"
+  else
+      echo -e  "******** Kein Backup der Sambakonfiguration vorhanden! ********\n"
+ fi
+fi
+
+if [ "$bilder" = "y" ]
+ then
+ if [ -e $DIR/bilder.tar ]
+  then
+      tar -xvf $DIR/bilder.tar -C / >> $DIR/restore.log
+      echo -e "******** Bootbilder und das Radiobild wurde wiederhergestellt ********\n"
+  else
+      echo -e "******** Kein Backup der Bootbilder und des Radiobildes vorhanden! ********\n"
+ fi
+fi
+
+if [ "$sonstige" = "y" ]
+ then
+ if [ -e $DIR/sonstige.tar ]
+  then
+      tar -xvf $DIR/sonstige.tar -C / >> $DIR/restore.log
+      echo -e "******** sonstige Konfigurationsdateien wurden wiederhergestellt ********\n"
+  else
+      echo -e "******** Kein Backup der sonstigen Konfigurationsdateien vorhanden! ********\n"
+ fi
+fi
+
+if [ "$camconfig" = "y" ]
+ then
+ if [ -e $DIR/camconfig.tar ]
+	then
+     	tar -xvf $DIR/camconfig.tar -C / >> $DIR/restore.log
+			echo -e "******** Camconfig wurde wiederhergestellt ********\n"
+  else
+	  	echo -e "******** Kein Backup der Camconfig vorhanden! ********\n"
+ fi
+fi
+
+if [ "$binarys" = "y" ]
+ then
+ if [ -e $DIR/bin.tar ]
+	then
+     	tar -xvf $DIR/bin.tar -C / >> $DIR/restore.log
+			echo -e "******** Binarys wurde wiederhergestellt ********\n"
+  else
+	  	echo -e "******** Kein Backup der Binarys vorhanden! ********\n"
+ fi
+fi
+
+if [ "$addonmanager" = "y" ]; then
+ if [ -e $DIR/am.tar ]
+	then
+     	tar -xvf $DIR/am.tar -C / >> $DIR/restore.log
+			echo -e "******** AddonManager wurde wiederhergestellt ********\n"
+  else
+	  	echo -e "******** Kein Backup vom AddonManager vorhanden! ********\n"
+ fi
+fi
+
+if [ "$settings" = "y" ]
+ then
+ if [ -e $DIR/settings.tar ]
+  then
+      if [ $rebootnow ]; then
+        echo -e "******** Settings und Automounts wiederhergestellt ********\n"
+        echo -e "********************************************"
+        echo -e "******** Box wird nun neu gestartet ********\n"
+        echo -e "********************************************"
+        sleep 3
+        init 4 # kill enigma
+        tar -xvf $DIR/settings.tar -C / >> $DIR/restore.log
+        reboot -f  # reboot, make the settings resistant
+      else
+        tar -xvf $DIR/settings.tar -C / >> $DIR/restore.log
+      fi
+  else
+      echo -e "******** Kein Backup der Settings vorhanden! ********\n"
+  fi
+fi
+
+exit 0
