some more work on plugin manager
authoracid-burn <acidburn@opendreambox.org>
Mon, 20 Jul 2009 14:07:29 +0000 (16:07 +0200)
committeracid-burn <acidburn@opendreambox.org>
Mon, 20 Jul 2009 14:07:29 +0000 (16:07 +0200)
add experimental plugin meta informations, not yet included in build process
install missing py from TuxboxPlugins plugin
remove Filemanger from plugins build process

71 files changed:
configure.ac
lib/python/Components/DreamInfoHandler.py
lib/python/Plugins/Extensions/CutListEditor/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/CutListEditor/meta/cutlisteditor.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDPlayer/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDPlayer/meta/dvdplayer.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/Makefile.am
lib/python/Plugins/Extensions/MediaPlayer/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/PicturePlayer/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/PicturePlayer/meta/pictureplayer.jpg [new file with mode: 0755]
lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/SocketMMI/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/SocketMMI/meta/plugin_socketmmi.xml [new file with mode: 0755]
lib/python/Plugins/Extensions/TuxboxPlugins/Makefile.am [changed mode: 0644->0755]
lib/python/Plugins/Extensions/TuxboxPlugins/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/Extensions/TuxboxPlugins/meta/plugin_tuxboxplugins.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/plugin_frontprocessorupgrade.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Hotplug/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Hotplug/meta/plugin_hotplug.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/PositionerSetup/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Satfinder/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/install.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png
lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
lib/python/Plugins/SystemPlugins/SoftwareManager/remove.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/upgrade.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/VideoTune/meta/Makefile.am [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/VideoTune/meta/videotune.jpg [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg [new file with mode: 0755]

index 18f08bd..e15e676 100755 (executable)
@@ -131,7 +131,6 @@ lib/python/Plugins/DemoPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
 lib/python/Plugins/Extensions/TuxboxPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
 lib/python/Plugins/Extensions/TuxboxPlugins/Makefile
-lib/python/Plugins/Extensions/FileManager/Makefile
 lib/python/Plugins/Extensions/CutListEditor/Makefile
 lib/python/Plugins/Extensions/MediaScanner/Makefile
 lib/python/Plugins/Extensions/MediaPlayer/Makefile
 lib/python/Plugins/Extensions/CutListEditor/Makefile
 lib/python/Plugins/Extensions/MediaScanner/Makefile
 lib/python/Plugins/Extensions/MediaPlayer/Makefile
@@ -154,3 +153,4 @@ enigma2.pc
 ])
 
 #lib/python/Plugins/Extensions/SimpleRSS/Makefile
 ])
 
 #lib/python/Plugins/Extensions/SimpleRSS/Makefile
+#lib/python/Plugins/Extensions/FileManager/Makefile
index 6cf3b00..075c995 100755 (executable)
@@ -94,6 +94,8 @@ class InfoHandler(xml.sax.ContentHandler):
                                self.attributes["name"] = str(attrs["name"].encode("utf-8"))
                        if attrs.has_key("packagename"):
                                self.attributes["packagename"] = str(attrs["packagename"].encode("utf-8"))
                                self.attributes["name"] = str(attrs["name"].encode("utf-8"))
                        if attrs.has_key("packagename"):
                                self.attributes["packagename"] = str(attrs["packagename"].encode("utf-8"))
+                       if attrs.has_key("packagetype"):
+                               self.attributes["packagetype"] = str(attrs["packagetype"].encode("utf-8"))
                        if attrs.has_key("shortdescription"):
                                self.attributes["shortdescription"] = str(attrs["shortdescription"].encode("utf-8"))
 
                        if attrs.has_key("shortdescription"):
                                self.attributes["shortdescription"] = str(attrs["shortdescription"].encode("utf-8"))
 
diff --git a/lib/python/Plugins/Extensions/CutListEditor/meta/Makefile.am b/lib/python/Plugins/Extensions/CutListEditor/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..7b5bef3
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_cutlisteditor.xml *.jpg
diff --git a/lib/python/Plugins/Extensions/CutListEditor/meta/cutlisteditor.jpg b/lib/python/Plugins/Extensions/CutListEditor/meta/cutlisteditor.jpg
new file mode 100755 (executable)
index 0000000..facef3c
Binary files /dev/null and b/lib/python/Plugins/Extensions/CutListEditor/meta/cutlisteditor.jpg differ
diff --git a/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml b/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml
new file mode 100755 (executable)
index 0000000..23edc8e
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="Recording" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>CutListEditor</name>
+                    <packagename>enigma2-plugin-extensions-cutlisteditor</packagename>
+                    <shortdescription>CutListEditor allows you to edit your movies.</shortdescription>
+                    <description>CutListEditor allows you to edit your movies.\nSeek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\nThen seek to the end, press OK, select 'end cut'. That's it.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/cutlisteditor.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>Schnitteditor</name>
+                    <packagename>enigma2-plugin-extensions-cutlisteditor</packagename>
+                    <shortdescription>Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden.</shortdescription>
+                    <description>Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden.\nSpulen Sie zum Anfang des zu schneidenden Teils der Aufnahme. Drücken Sie dann OK und wählen Sie: 'start cut'.\nDann spulen Sie zum Ende, drücken OK und wählen 'end cut'. Das ist alles.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/cutlisteditor.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-cutlisteditor" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am b/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..f9a3ad7
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_dvdburn.xml
diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml b/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml
new file mode 100755 (executable)
index 0000000..7971539
--- /dev/null
@@ -0,0 +1,23 @@
+<default>
+         <prerequisites>
+                    <tag type="Recording" />
+                    <tag type="Software" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>DVDBurn</name>
+                    <packagename>enigma2-plugin-extensions-dvdburn</packagename>
+                    <shortdescription>With DVDBurn you can burn your recordings to a dvd.</shortdescription>
+                    <description>With DVDBurn you can burn your recordings to a dvd.\nArchive all your favorite movies to recordable dvds with menus if wanted.</description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>DVDBurn</name>
+                    <packagename>enigma2-plugin-extensions-dvdburn</packagename>
+                    <shortdescription>Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD.</shortdescription>
+                    <description>Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD.\nArchivieren Sie Ihre Liblingsfilme auf DVD mit Menus wenn Sie es wünschen.</description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-dvdburn" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/meta/Makefile.am b/lib/python/Plugins/Extensions/DVDPlayer/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..6d2e2ec
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_dvdplayer.xml *.jpg
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/meta/dvdplayer.jpg b/lib/python/Plugins/Extensions/DVDPlayer/meta/dvdplayer.jpg
new file mode 100755 (executable)
index 0000000..92d8b8a
Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDPlayer/meta/dvdplayer.jpg differ
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml b/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml
new file mode 100755 (executable)
index 0000000..2658138
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="Multimedia" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>DVDPlayer</name>
+                    <packagename>enigma2-plugin-extensions-dvdplayer</packagename>
+                    <shortdescription>DVDPlayer plays your DVDs on your Dreambox.</shortdescription>
+                    <description>DVDPlayer plays your DVDs on your Dreambox.\nWith the DVDPlayer you can play your DVDs on your Dreambox from a DVD or even from an iso file or video_ts folder on your harddisc or network.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/dvdplayer.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>DVDPlayer</name>
+                    <packagename>enigma2-plugin-extensions-dvdplayer</packagename>
+                    <shortdescription>Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab.</shortdescription>
+                    <description>Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab.\nMit dem DVDPlayer können Sie Ihre DVDs auf Ihrer Dreambox abspielen. Dabei ist es egal ob Sie von DVD, iso-Datei oder sogar direkt von einer video_ts Ordnerstruktur von Ihrer Festplatte oder dem Netzwerk abspielen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/dvdplayer.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-dvdplayer" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/Makefile.am b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..0d1f4a6
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_graphmultiepg.xml *.jpg
diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg
new file mode 100755 (executable)
index 0000000..8dfdbbf
Binary files /dev/null and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg differ
diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg
new file mode 100755 (executable)
index 0000000..95b6665
Binary files /dev/null and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg differ
diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml
new file mode 100755 (executable)
index 0000000..7b0b134
--- /dev/null
@@ -0,0 +1,26 @@
+<default>
+         <prerequisites>
+                    <tag type="EPG" />
+                    <tag type="Recording" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>GraphMultiEPG</name>
+                    <packagename>eenigma2-plugin-extensions-graphmultiepg</packagename>
+                    <shortdescription>GraphMultiEPG shows a graphical timeline EPG.</shortdescription>
+                    <description>GraphMultiEPG shows a graphical timeline EPG.\nShows a nice overview of all running und upcoming tv shows.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/graphmultiepg_en.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>GraphMultiEPG</name>
+                    <packagename>enigma2-plugin-extensions-graphmultiepg</packagename>
+                    <shortdescription>Zeigt ein grafisches Zeitlinien-EPG.</shortdescription>
+                    <description>Zeigt ein grafisches Zeitlinien-EPG.\nZeigt eine grafische Ãœbersicht aller laufenden und kommenden Sendungen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/graphmultiepg_de.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-graphmultiepg" />
+         </files>
+</default>
index c15e1c2..6958bf5 100755 (executable)
@@ -1 +1 @@
-SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDPlayer DVDBurn Modem
+SUBDIRS = TuxboxPlugins CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDPlayer DVDBurn Modem
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/Makefile.am b/lib/python/Plugins/Extensions/MediaPlayer/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..23d591a
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_mediaplayer.xml *.jpg
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg
new file mode 100755 (executable)
index 0000000..4396161
Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg differ
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg
new file mode 100755 (executable)
index 0000000..e1d3575
Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg differ
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml b/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml
new file mode 100755 (executable)
index 0000000..825793f
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="Multimedia" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>MediaPlayer</name>
+                    <packagename>enigma2-plugin-extensions-mediaplayer</packagename>
+                    <shortdescription>Mediaplayer plays your favorite music and videos.</shortdescription>
+                    <description>Mediaplayer plays your favorite music and videos.\nPlay all your favorite music and video files, organize them in playlists, view cover and album information.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/mediaplayer_en.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>MediaPlayer</name>
+                    <packagename>enigma2-plugin-extensions-mediaplayer</packagename>
+                    <shortdescription>Mediaplayer spielt Ihre Musik und Videos.</shortdescription>
+                    <description>Mediaplayer spielt Ihre Musik und Videos.\nSie können all Ihre Musik- und Videodateien abspielen, in Playlisten organisieren, Cover und Albuminformationen abrufen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/mediaplayer_de.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-mediaplayer" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am b/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..959a1bf
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_mediascanner.xml
diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml b/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml
new file mode 100755 (executable)
index 0000000..d899fdb
--- /dev/null
@@ -0,0 +1,24 @@
+<default>
+         <prerequisites>
+                    <tag type="Multimedia" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>MediaScanner</name>
+                    <packagename>enigma2-plugin-extensions-mediascanner</packagename>
+                    <shortdescription>MediaScanner scans devices for playable media files.</shortdescription>
+                    <description>MediaScanner scans devices for playable media files and displays a menu with possible actions like viewing pictures or playing movies.</description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>MediaScanner</name>
+                    <packagename>enigma2-plugin-extensions-mediascanner</packagename>
+                    <shortdescription>MediaScanner durchsucht Geräte nach Mediendateien.</shortdescription>
+                    <description>MediaScanner durchsucht Geräte nach Mediendateien  und bietet Ihnen die dazu passenden Aktionen an wie z.B. Bilder betrachten oder Videos abspielen.
+                    </description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-mediascanner" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/PicturePlayer/meta/Makefile.am b/lib/python/Plugins/Extensions/PicturePlayer/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..a06416a
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_pictureplayer.xml *.jpg
diff --git a/lib/python/Plugins/Extensions/PicturePlayer/meta/pictureplayer.jpg b/lib/python/Plugins/Extensions/PicturePlayer/meta/pictureplayer.jpg
new file mode 100755 (executable)
index 0000000..631d80e
Binary files /dev/null and b/lib/python/Plugins/Extensions/PicturePlayer/meta/pictureplayer.jpg differ
diff --git a/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml b/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml
new file mode 100755 (executable)
index 0000000..40e59b6
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="Multimedia" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>PicturePlayer</name>
+                    <packagename>enigma2-plugin-extensions-pictureplayer</packagename>
+                    <shortdescription>PicturePlayer displays your photos on the TV.</shortdescription>
+                    <description>The PicturePlayer displays your photos on the TV.\nYou can view them as thumbnails or slideshow.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/pictureplayer.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>Bildbetrachter</name>
+                    <packagename>enigma2-plugin-extensions-pictureplayer</packagename>
+                    <shortdescription>Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an.</shortdescription>
+                    <description>Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an.\nSie können sich Ihre Bilder als Thumbnails, einzeln oder als Slideshow anzeigen lassen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/pictureplayer.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-pictureplayer" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/Extensions/SocketMMI/meta/Makefile.am b/lib/python/Plugins/Extensions/SocketMMI/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..78595de
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_socketmmi.xml
diff --git a/lib/python/Plugins/Extensions/SocketMMI/meta/plugin_socketmmi.xml b/lib/python/Plugins/Extensions/SocketMMI/meta/plugin_socketmmi.xml
new file mode 100755 (executable)
index 0000000..acf8374
--- /dev/null
@@ -0,0 +1,22 @@
+<default>
+         <prerequisites>
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>SocketMMI</name>
+                    <packagename>enigma2-plugin-extensions-socketmmi</packagename>
+                    <shortdescription>Python frontend for /tmp/mmi.socket.</shortdescription>
+                    <description>Python frontend for /tmp/mmi.socket.</description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>SocketMMI</name>
+                    <packagename>enigma2-plugin-extensions-socketmmi</packagename>
+                    <shortdescription>Python frontend für /tmp/mmi.socket.</shortdescription>
+                    <description>Python frontend für /tmp/mmi.socket.</description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-socketmmi" />
+         </files>
+</default>
old mode 100644 (file)
new mode 100755 (executable)
index 6168589..8356154
@@ -3,6 +3,7 @@ installdir = $(LIBDIR)/enigma2/python/Plugins/Extensions/TuxboxPlugins
 install_PYTHON =       \
        __init__.py \
        plugin.py \
 install_PYTHON =       \
        __init__.py \
        plugin.py \
+       pluginrunner.py \
        tuxbox.png
 
  
        tuxbox.png
 
  
diff --git a/lib/python/Plugins/Extensions/TuxboxPlugins/meta/Makefile.am b/lib/python/Plugins/Extensions/TuxboxPlugins/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..8adb1b6
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_tuxboxplugins.xml
diff --git a/lib/python/Plugins/Extensions/TuxboxPlugins/meta/plugin_tuxboxplugins.xml b/lib/python/Plugins/Extensions/TuxboxPlugins/meta/plugin_tuxboxplugins.xml
new file mode 100755 (executable)
index 0000000..734c48f
--- /dev/null
@@ -0,0 +1,22 @@
+<default>
+         <prerequisites>
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>TuxboxPlugins</name>
+                    <packagename>TuxboxPlugins</packagename>
+                    <shortdescription>Allows the execution of TuxboxPlugins.</shortdescription>
+                    <description>Allows the execution of TuxboxPlugins.</description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>TuxboxPlugins</name>
+                    <packagename>enigma2-plugin-extensions-tuxboxplugins</packagename>
+                    <shortdescription>Erlaubt das Ausführen von TuxboxPlugins.</shortdescription>
+                    <description>Erlaubt das Ausführen von TuxboxPlugins.</description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-extensions-tuxboxplugins" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..f192c23
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_commoninterfaceassignment.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg
new file mode 100755 (executable)
index 0000000..120ac82
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml
new file mode 100755 (executable)
index 0000000..bb2bf59
--- /dev/null
@@ -0,0 +1,32 @@
+<default>
+         <prerequisites>
+                    <hardware type="dm8000" />
+                    <tag type="CI" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>CommonInterfaceAssignment</name>
+                    <packagename>enigma2-plugin-systemplugins-commoninterfaceassignment</packagename>
+                    <shortdescription>Assigning providers/services/caids to a dedicated CI module</shortdescription>
+                    <description>With the CommonInterfaceAssignment extension it is possible to use different CI modules
+                    in your Dreambox and assign to each of them dedicated providers/services or caids.\n
+                    So it is then possible to watch a scrambled service while recording another one.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/ciassignment.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>CommonInterfaceAssignment</name>
+                    <packagename>enigma2-plugin-systemplugins-commoninterfaceassignment</packagename>
+                    <shortdescription>Zuweisen von Providern/Services/CAIDs an ein CI Modul</shortdescription>
+                    <description>Mit der CommonInterfaceAssignment Erweiterung ist es möglich jedem CI Modul bestimmte Provider/Services/CAIDs zuzuweisen.\n
+                    So ist es möglich mit einem CI einen Sender aufzunehmen\n
+                    und mit einem anderen einen Sender zu schauen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/ciassignment.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-commoninterfaceassignment" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..c1d432f
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_defaultservicesscanner.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg
new file mode 100755 (executable)
index 0000000..a0fd3b1
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml
new file mode 100755 (executable)
index 0000000..bf0ce25
--- /dev/null
@@ -0,0 +1,28 @@
+<default>
+         <prerequisites>
+                    <tag type="SAT" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>DefaultServicesScanner</name>
+                    <packagename>enigma2-plugin-systemplugins-defaultservicesscanner</packagename>
+                    <shortdescription>Scans default lamedbs sorted by satellite with a connected dish positioner.</shortdescription>
+                    <description>With the DefaultServicesScanner extension you can scan default lamedbs sorted by satellite with a connected dish positioner.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/defaultservicescanner.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>DefaultServicesScanner</name>
+                    <packagename>enigma2-plugin-systemplugins-defaultservicesscanner</packagename>
+                    <shortdescription>Standard Sendersuche nach Satellit mit einem Rotor.</shortdescription>
+                    <description>Mit der DefaultServicesScanner Erweiterung können Sie eine standard Sendersuche nach Satellit mit einem angeschlossenen Rotor durchführen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/defaultservicescanner.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-defaultservicesscanner" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..9d7cc66
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_diseqctester.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg
new file mode 100755 (executable)
index 0000000..c872334
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml
new file mode 100755 (executable)
index 0000000..5415db0
--- /dev/null
@@ -0,0 +1,28 @@
+<default>
+         <prerequisites>
+                    <tag type="SAT" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>DiseqcTester</name>
+                    <packagename>enigma2-plugin-systemplugins-diseqctester</packagename>
+                    <shortdescription>Test your Diseqc equipment.</shortdescription>
+                    <description>With the DiseqcTester extension you can test your satellite equipment for Diseqc compatibility and errors.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/diseqctester.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>DiseqcTester</name>
+                    <packagename>enigma2-plugin-systemplugins-diseqctester</packagename>
+                    <shortdescription>Testet Ihr Diseqc Equipment.</shortdescription>
+                    <description>Mit der DiseqcTester Erweiterung können Sie Ihr Satelliten-Equipment nach Diseqc-Kompatibilität und Fehlern Ã¼berprüfen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/diseqctester.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-diseqctester" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..8a976ad
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_frontprocessorupgrade.xml
diff --git a/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/plugin_frontprocessorupgrade.xml b/lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/meta/plugin_frontprocessorupgrade.xml
new file mode 100755 (executable)
index 0000000..1763f67
--- /dev/null
@@ -0,0 +1,28 @@
+<default>
+         <prerequisites>
+                    <hardware type="dm8000" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>FrontprocessorUpgrade</name>
+                    <packagename>enigma2-plugin-systemplugins-frontprocessorupgrade</packagename>
+                   <packagetype>internal</packagetype> <!-- internal/public , public is default, internal metas are not displayed inside plugin manager -->
+                    <shortdescription>Internal firmware updater.</shortdescription>
+                    <description>This system tool is internally used to program the hardware with firmware updates.
+                    </description>
+         </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>FrontprocessorUpgrade</name>
+                    <packagename>enigma2-plugin-systemplugins-frontprocessorupgrade</packagename>
+                   <packagetype>internal</packagetype> <!-- internal/public , public is default, internal metas are not displayed inside plugin manager -->
+                    <shortdescription>Interner Firmware-Upgrader.</shortdescription>
+                    <description>Dieses Systemtool wird intern benutzt um Firmware-Upgrades für die Hardware aufzuspielen.
+                    </description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-frontprocessorupgrade" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/Hotplug/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Hotplug/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..6bba92b
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_hotplug.xml
diff --git a/lib/python/Plugins/SystemPlugins/Hotplug/meta/plugin_hotplug.xml b/lib/python/Plugins/SystemPlugins/Hotplug/meta/plugin_hotplug.xml
new file mode 100755 (executable)
index 0000000..6c2824c
--- /dev/null
@@ -0,0 +1,25 @@
+<default>
+         <prerequisites>
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>Hotplug</name>
+                    <packagename>enigma2-plugin-systemplugins-hotplug</packagename>
+                    <shortdescription>Hotplugging for removeable devices.</shortdescription>
+                    <description>The Hotplug extension notifies your system of newly added or removed devices.
+                    </description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>Hotplug</name>
+                    <packagename>enigma2-plugin-systemplugins-hotplug</packagename>
+                    <shortdescription>Hotplugging für entfernbare Geräte.</shortdescription>
+                    <description>Mit der Hotplug-Erweiterung wird Ihr System Ã¼ber neu angeschlossene oder entfernte Geräte informiert.
+                    </description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-hotplug" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..d188ac7
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_nfiflash.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg
new file mode 100755 (executable)
index 0000000..0a5fa46
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml
new file mode 100755 (executable)
index 0000000..2de88f0
--- /dev/null
@@ -0,0 +1,31 @@
+<default>
+         <prerequisites>
+                    <hardware type="dm8000" />
+                    <tag type="System" />
+                    <tag type="Software" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>NFIFlash</name>
+                    <packagename>enigma2-plugin-systemplugins-nfiflash</packagename>
+                    <shortdescription>Restore your Dreambox with a USB stick.</shortdescription>
+                    <description>With the NFIFlash extension it is possible to prepare a USB stick with an Dreambox image.\n
+                    It is then possible to flash your Dreambox with the image on that stick.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/nfiflash.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>NFIFlash</name>
+                    <packagename>enigma2-plugin-systemplugins-nfiflash</packagename>
+                    <shortdescription>Wiederherstellen Ihrer Dreambox mittels USB-Stick.</shortdescription>
+                    <description>Mit der NFIFlash Erweiterung können Sie ein Dreambox Image auf einen USB-Stick laden.\
+                    Mit diesem USB-Stick ist es dann möglich Ihre Dreambox zu flashen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/nfiflash.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-nfiflash" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..2efe584
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_positionersetup.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml
new file mode 100755 (executable)
index 0000000..d20b2e6
--- /dev/null
@@ -0,0 +1,29 @@
+<default>
+         <prerequisites>
+                    <tag type="SAT" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>PositionerSetup</name>
+                    <packagename>enigma2-plugin-systemplugins-positionersetup</packagename>
+                    <shortdescription>PositionerSetup helps you installing a motorized dish.</shortdescription>
+                    <description>With the PositionerSetup extension it is easy to install and configure a motorized dish.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/positionersetup.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>PositionerSetup</name>
+                    <packagename>enigma2-plugin-systemplugins-positionersetup</packagename>
+                    <shortdescription>Unterstützt Sie beim installieren eines Rotors.</shortdescription>
+                    <description>Die PositionerSetup Erweiterung unterstützt Sie beim einrichten
+                    und konfigurieren einer motorgesteuerten Satellitenantenne.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/positionersetup.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-positionersetup" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg
new file mode 100755 (executable)
index 0000000..6307213
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..bbec995
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_satelliteequipmentcontrol.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml
new file mode 100755 (executable)
index 0000000..8fa36e5
--- /dev/null
@@ -0,0 +1,29 @@
+<default>
+         <prerequisites>
+                    <tag type="SAT" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>SatelliteEquipmentControl</name>
+                    <name_de>SatelliteEquipmentControl</name_de>
+                    <packagename>enigma2-plugin-systemplugins-satelliteequipmentcontrol</packagename>
+                    <shortdescription>SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings.</shortdescription>
+                    <description>With the SatelliteEquipmentControl extension it is possible to fine-tune DiSEqC-settings.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/satcontrol.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>SatelliteEquipmentControl</name>
+                    <packagename>enigma2-plugin-systemplugins-satelliteequipmentcontrol</packagename>
+                    <shortdescription>Fein-Einstellungen für DiSEqC</shortdescription>
+                    <description>Die SatelliteEquipmentControl-Erweiterung unterstützt Sie beim Feintuning der DiSEqC Einstellungen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/satcontrol.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-satelliteequipmentcontrol" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg
new file mode 100755 (executable)
index 0000000..b9596a6
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Satfinder/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..a6370cd
--- /dev/null
@@ -0,0 +1,4 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_satfinder.xml *.jpg
+
diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml b/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml
new file mode 100755 (executable)
index 0000000..aaab7e4
--- /dev/null
@@ -0,0 +1,30 @@
+<default>
+         <prerequisites>
+                    <tag type="SAT" />
+                    <tag type="Software" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>Satfinder</name>
+                    <packagename>enigma2-plugin-systemplugins-satfinder</packagename>
+                    <shortdescription>Satfinder helps you to align your dish.</shortdescription>
+                    <description>The Satfinder extension helps you to align your dish.\
+                    It shows you informations about signal rate and errors.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/satfinder.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>Satfinder</name>
+                    <packagename>enigma2-plugin-systemplugins-satfinder</packagename>
+                    <shortdescription>Satfinder unterstützt Sie beim ausrichten ihrer Satellitenanlage.</shortdescription>
+                    <description>Die Satfinder-Erweiterung unterstützt Sie beim Ausrichten ihrer Satellitenanlage.\n
+                    Es zeigt Ihnen Daten wie Signalstärke und Fehlerrate an.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/satfinder.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-satfinder" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg b/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg
new file mode 100755 (executable)
index 0000000..c0bba0c
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..5c7f4bb
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_skinselector.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml
new file mode 100755 (executable)
index 0000000..4ce7f1b
--- /dev/null
@@ -0,0 +1,30 @@
+<default>
+         <prerequisites>
+                    <tag type="Display" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>SkinSelector</name>
+                    <packagename>enigma2-plugin-systemplugins-skinselector</packagename>
+                    <shortdescription>SkinSelector shows a menu with selectable skins.</shortdescription>
+                    <description>The SkinSelector shows a menu with selectable skins.\n
+                    It's now easy to change the look and feel of your Dreambox.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/skinselector.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>SkinSelector</name>
+                    <packagename>enigma2-plugin-systemplugins-skinselector</packagename>
+                    <shortdescription>Der SkinSelector zeigt Ihnen ein Menu mit auswählbaren Skins.</shortdescription>
+                    <description>Die SkinSelector Erweiterung zeigt Ihnen ein Menu mit auswählbaren Skins.\n
+                    Sie können nun einfach das Aussehen der grafischen Oberfläche Ihrer Dreambox verändern.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/skinselector.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-skinselector" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg
new file mode 100755 (executable)
index 0000000..74395ea
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/install.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/install.png
new file mode 100755 (executable)
index 0000000..dadd0f3
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/install.png differ
index 710f420..6b9a290 100755 (executable)
Binary files a/lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png and b/lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png differ
index d6a1bc1..e0b663a 100755 (executable)
Binary files a/lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png and b/lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..bf1d349
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_softwaremanager.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml
new file mode 100755 (executable)
index 0000000..fa84670
--- /dev/null
@@ -0,0 +1,31 @@
+<default>
+         <prerequisites>
+                    <tag type="Software" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>SoftwareManager</name>
+                    <packagename>enigma2-plugin-systemplugins-softwaremanager</packagename>
+                    <shortdescription>SoftwareManager manages your Dreambox software.</shortdescription>
+                    <description>The SoftwareManager manages your Dreambox software.\n
+                    It's easy to update your receiver's software, install or remove extensions or even backup and restore your system settings.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/softmanager.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>SoftwareManager</name>
+                    <packagename>enigma2-plugin-systemplugins-softwaremanager</packagename>
+                    <shortdescription>Der SoftwareManager verwaltet Ihre Dreambox Software.</shortdescription>
+                    <description>Der SoftwareManager verwaltet Ihre Dreambox Software.\n
+                    Sie können nun einfach Ihre Dreambox-Software aktualisieren, neue Erweiterungen installieren oder entfernen,
+                    oder ihre Einstellungen sichern und wiederherstellen.
+                    </description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/softmanager.jpg" />
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-softwaremanager" />
+         </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg
new file mode 100755 (executable)
index 0000000..a9d5a62
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg differ
index 20b3bf4..136e9d0 100755 (executable)
@@ -326,7 +326,6 @@ class IPKGSource(Screen):
                desk = getDesktop(0)
                x= int(desk.size().width())
                y= int(desk.size().height())
                desk = getDesktop(0)
                x= int(desk.size().width())
                y= int(desk.size().height())
-               #print "[IPKGSource] mainscreen: current desktop size: %dx%d" % (x,y)
 
                self["closetext"] = Label(_("Cancel"))
                self["edittext"] = Label(_("Save"))
 
                self["closetext"] = Label(_("Cancel"))
                self["edittext"] = Label(_("Save"))
@@ -397,7 +396,6 @@ class IPKGSource(Screen):
                self["text"].deleteBackward()
        
        def keyNumberGlobal(self, number):
                self["text"].deleteBackward()
        
        def keyNumberGlobal(self, number):
-               print "pressed", number
                self["text"].number(number)
 
 
                self["text"].number(number)
 
 
@@ -480,11 +478,11 @@ class PacketManager(Screen):
                        self.statuslist = []
                        divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                        if status == 'update':
                        self.statuslist = []
                        divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)   
                        elif status == 'error':
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)   
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)                           
 
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)                           
 
@@ -654,21 +652,20 @@ class PluginManager(Screen, DreamInfoHandler):
        lastDownloadDate = None
 
        skin = """
        lastDownloadDate = None
 
        skin = """
-               <screen position="80,90" size="560,420" title="Plugin manager..." >
-                       <widget source="list" render="Listbox" position="5,10" size="550,365" scrollbarMode="showOnDemand">
+               <screen position="80,80" size="560,440" title="Plugin manager..." >
+                       <widget source="list" render="Listbox" position="5,5" size="550,360" scrollbarMode="showOnDemand">
                                <convert type="TemplatedMultiContent">
                                {"templates":
                                <convert type="TemplatedMultiContent">
                                {"templates":
-                                       {"default": (52,[
-                                                       MultiContentEntryText(pos = (30, 1), size = (500, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (30, 26), size = (500, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
-                                                       MultiContentEntryPixmapAlphaTest(pos = (480, 2), size = (48, 48), png = 5), # index 5 is the status pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 50), size = (550, 2), png = 6), # index 6 is the div pixmap
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 10), size = (25, 25), png = 7), # index 7 is the selected pixmap
+                                       {"default": (51,[
+                                                       MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (30, 25), size = (470, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
                                                ]),
                                                ]),
-                                       "category": (42,[
-                                                       MultiContentEntryText(pos = (30, 0), size = (500, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (30, 26), size = (500, 14), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 2 is the description
-                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 40), size = (550, 2), png = 3), # index 6 is the div pixmap
+                                       "category": (40,[
+                                                       MultiContentEntryText(pos = (30, 0), size = (500, 23), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (30, 24), size = (500, 14), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 38), size = (550, 2), png = 3), # index 3 is the div pixmap
                                                ])
                                        },
                                        "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
                                                ])
                                        },
                                        "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
@@ -676,15 +673,15 @@ class PluginManager(Screen, DreamInfoHandler):
                                }
                                </convert>
                        </widget>
                                }
                                </convert>
                        </widget>
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="closetext" position="0,380" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="installtext" position="140,380" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="selecttext" position="280,380" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <ePixmap pixmap="skin_default/buttons/blue.png" position="420,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
-                       <widget name="viewtext" position="420,380" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="closetext" position="0,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="installtext" position="140,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="viewtext" position="280,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/buttons/blue.png" position="420,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="bluetext" position="420,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="status" position="10,410" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
                </screen>"""
 
        def __init__(self, session, plugin_path, args = None):
                </screen>"""
 
        def __init__(self, session, plugin_path, args = None):
@@ -701,14 +698,15 @@ class PluginManager(Screen, DreamInfoHandler):
                DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
                self.directory = resolveFilename(SCOPE_METADIR)
 
                DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
                self.directory = resolveFilename(SCOPE_METADIR)
 
-               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions", "InfobarEPGActions", "HelpActions" ],
                {
                {
-                       "ok": self.go,
+                       "ok": self.handleCurrent,
                        "back": self.exit,
                        "red": self.exit,
                        "back": self.exit,
                        "red": self.exit,
-                       "green": self.installPlugins,
-                       "yellow": self.changeSelectionState,
-                       "blue": self.go,
+                       "green": self.handleCurrent,
+                       "yellow": self.handleSelected,
+                       "showEventInfo": self.handleSelected,
+                       "displayHelp": self.handleHelp,
                }, -1)
 
                self.list = []
                }, -1)
 
                self.list = []
@@ -718,12 +716,15 @@ class PluginManager(Screen, DreamInfoHandler):
                self["list"] = List(self.list)
                self["closetext"] = Label(_("Close"))
                self["installtext"] = Label()
                self["list"] = List(self.list)
                self["closetext"] = Label(_("Close"))
                self["installtext"] = Label()
-               self["selecttext"] = Label()
                self["viewtext"] = Label()
                self["viewtext"] = Label()
+               self["bluetext"] = Label()
+               self["status"] = Label()
 
                self.list_updating = True
                self.packetlist = []
                self.installed_packetlist = {}
 
                self.list_updating = True
                self.packetlist = []
                self.installed_packetlist = {}
+               self.available_packetlist = []
+               self.available_updates = 0
                self.Console = Console()
                self.cmdList = []
                self.oktext = _("\nAfter pressing OK, please wait!")
                self.Console = Console()
                self.cmdList = []
                self.oktext = _("\nAfter pressing OK, please wait!")
@@ -735,10 +736,12 @@ class PluginManager(Screen, DreamInfoHandler):
                        self["list"].onSelectionChanged.append(self.selectionChanged)
 
                self["installtext"].hide()
                        self["list"].onSelectionChanged.append(self.selectionChanged)
 
                self["installtext"].hide()
-               self["selecttext"].hide()
+               self["bluetext"].hide()
                self["viewtext"].hide()
                self["viewtext"].hide()
+               self["status"].hide()
                self.currList = ""
                self.currentSelectedTag = None
                self.currList = ""
                self.currentSelectedTag = None
+               self.currentSelectedIndex = None
 
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.rebuildList)
 
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.rebuildList)
@@ -752,40 +755,54 @@ class PluginManager(Screen, DreamInfoHandler):
                        self.currentSelectedTag = None
                        self["list"].style = "category"
                        self['list'].setList(self.categoryList)
                        self.currentSelectedTag = None
                        self["list"].style = "category"
                        self['list'].setList(self.categoryList)
+                       self["list"].setIndex(self.currentSelectedIndex)
+                       self["list"].updateList(self.categoryList)
+                       self.selectionChanged()
                else:
                        self.ipkg.stop()
                        if self.Console is not None:
                                if len(self.Console.appContainers):
                                        for name in self.Console.appContainers.keys():
                                                self.Console.kill(name)
                else:
                        self.ipkg.stop()
                        if self.Console is not None:
                                if len(self.Console.appContainers):
                                        for name in self.Console.appContainers.keys():
                                                self.Console.kill(name)
-                       self.close()
+                       if len(self.cmdList) and len(self.selectedFiles):
+                               self.session.openWithCallback(self.runInstall, PluginManagerInfo, self.skin_path, self.cmdList)
+                       elif not len(self.cmdList) and self.available_updates > 0:
+                               self.cmdList = []
+                               self.cmdList.append((IpkgComponent.CMD_UPGRADE, { "test_only": False }))
+                               self.session.openWithCallback(self.runInstall, PluginManagerInfo, self.skin_path, self.cmdList)
+                       else:
+                               self.close()
 
 
-       def reload(self):
-               if (os_path.exists(self.cache_file) == True):
-                       remove(self.cache_file)
-                       self.list_updating = True
-                       self.rebuildList()
+       def handleHelp(self):
+               if self.currList != "status":
+                       self.session.open(PluginManagerHelp, self.skin_path)
+
+       def runInstall(self, result):
+               if result:
+                       self.session.openWithCallback(self.runExecuteFinished, Ipkg, cmdList = self.cmdList)
+               else:
+                       self.close()
 
        def setState(self,status = None):
                if status:
                        self.currList = "status"
                        self.statuslist = []
                        self["installtext"].hide()
 
        def setState(self,status = None):
                if status:
                        self.currList = "status"
                        self.statuslist = []
                        self["installtext"].hide()
-                       self["selecttext"].hide()
+                       self["bluetext"].hide()
                        self["viewtext"].hide()
                        divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                        if status == 'update':
                        self["viewtext"].hide()
                        divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'sync':
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'sync':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'error':
                                self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
@@ -795,63 +812,49 @@ class PluginManager(Screen, DreamInfoHandler):
 
        def selectionChanged(self):
                current = self["list"].getCurrent()
 
        def selectionChanged(self):
                current = self["list"].getCurrent()
+               self["status"].hide()
                if current:
                        if self.currList == "packages":
                                self["closetext"].setText(_("Back"))
                if current:
                        if self.currList == "packages":
                                self["closetext"].setText(_("Back"))
-                               self["closetext"].show()
-                               self["installtext"].setText(_("Install/\nRemove"))
+                               if current[4] == 'installed':
+                                       self["installtext"].setText(_("Remove"))
+                               elif current[4] == 'installable':
+                                       self["installtext"].setText(_("Install"))
+                               elif current[4] == 'remove':
+                                       self["installtext"].setText(_("Undo\nRemove"))
+                               elif current[4] == 'install':
+                                       self["installtext"].setText(_("Undo\nInstall"))
                                self["installtext"].show()
                                self["installtext"].show()
-                               self["viewtext"].setText(_("Details"))
+                               self["viewtext"].setText(_("View details"))
                                self["viewtext"].show()
                                self["viewtext"].show()
-                               if current[8] == False:
-                                       self["selecttext"].setText(_("Select"))
-                               else:
-                                       self["selecttext"].setText(_("Deselect"))
-                               self["selecttext"].show()
+                               self["bluetext"].hide()
+                               if len(self.selectedFiles) == 0 and self.available_updates is not 0:
+                                       self["status"].setText(_("There are at least ") + str(self.available_updates) + _(" updates available."))
+                                       self["status"].show()
+                               elif len(self.selectedFiles) is not 0:
+                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
+                                       self["status"].show()
                        elif self.currList == "category":
                                self["closetext"].setText(_("Close"))
                        elif self.currList == "category":
                                self["closetext"].setText(_("Close"))
-                               self["closetext"].show()
                                self["installtext"].hide()
                                self["installtext"].hide()
-                               self["selecttext"].hide()
-                               self["viewtext"].setText(_("View"))
-                               self["viewtext"].show()
-
-       def changeSelectionState(self):
-               current = self["list"].getCurrent()
-               if current:
-                       if current[8] is not '':
-                               idx = self["list"].getIndex()
-                               count = 0
-                               newList = []
-                               for x in self.list:
-                                       detailsFile = x[1]
-                                       if idx == count:
-                                               if x[8] == True:
-                                                       SelectState = False
-                                                       for entry in self.selectedFiles:
-                                                               if entry[0] == detailsFile:
-                                                                       self.selectedFiles.remove(entry)
-                                               else:
-                                                       SelectState = True
-                                                       alreadyinList = False
-                                                       for entry in self.selectedFiles:
-                                                               if entry[0] == detailsFile:
-                                                                       alreadyinList = True
-                                                       if not alreadyinList:
-                                                               self.selectedFiles.append((detailsFile,x[4],x[3]))
-                                               newList.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), x[4].strip(), selected = SelectState))
-                                       else:
-                                               newList.append(x)
-                                       count += 1
-                               old_index = self["list"].index
-                               self.list = newList
-                               self["list"].disable_callbacks = True
-                               self["list"].list = self.list
-                               self["list"].disable_callbacks = False
-                               self["list"].setList(self.list)
-                               self["list"].setIndex(old_index)
-                               self["list"].updateList(self.list)
-                               self.selectionChanged()
+                               self["bluetext"].hide()
+                               if len(self.selectedFiles) == 0 and self.available_updates is not 0:
+                                       self["status"].setText(_("There are at least ") + str(self.available_updates) + _(" updates available."))
+                                       self["status"].show()
+                                       self["viewtext"].setText(_("Update"))
+                                       self["viewtext"].show()
+                               elif len(self.selectedFiles) is not 0:
+                                       self["status"].setText(str(len(self.selectedFiles)) + _(" packages selected."))
+                                       self["status"].show()
+                                       self["viewtext"].setText(_("Process"))
+                                       self["viewtext"].show()
+                       self["closetext"].show()
+
+       def getSelectionState(self, detailsFile):
+               for entry in self.selectedFiles:
+                       if entry[0] == detailsFile:
+                               return True
+               return False
 
        def rebuildList(self):
                self.setState('update')
 
        def rebuildList(self):
                self.setState('update')
@@ -862,22 +865,38 @@ class PluginManager(Screen, DreamInfoHandler):
                        self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
                else:
                        print "last update time < 1h"
                        self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
                else:
                        print "last update time < 1h"
-                       self.startInstallMetaPackage()
+                       self.startIpkgList()
 
        def ipkgCallback(self, event, param):
                if event == IpkgComponent.EVENT_ERROR:
                        self.list_updating = False
                        self.setState('error')
                elif event == IpkgComponent.EVENT_DONE:
 
        def ipkgCallback(self, event, param):
                if event == IpkgComponent.EVENT_ERROR:
                        self.list_updating = False
                        self.setState('error')
                elif event == IpkgComponent.EVENT_DONE:
-                       self.startInstallMetaPackage()
+                       self.startIpkgList()
                pass
 
                pass
 
+       def startIpkgList(self):
+               if self.list_updating:
+                       if not self.Console:
+                               self.Console = Console()
+                       cmd = "ipkg list"
+                       self.Console.ePopen(cmd, self.IpkgList_Finished)
+
+       def IpkgList_Finished(self, result, retval, extra_args = None):
+               if len(result):
+                       self.available_packetlist = []
+                       for x in result.splitlines():
+                               split = x.split(' - ')
+                               if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
+                                       self.available_packetlist.append([split[0].strip(), split[1].strip(), split[2].strip()])
+               self.startInstallMetaPackage()
+
        def startInstallMetaPackage(self):
                if self.list_updating:
                        self.list_updating = False
                        if not self.Console:
                                self.Console = Console()
        def startInstallMetaPackage(self):
                if self.list_updating:
                        self.list_updating = False
                        if not self.Console:
                                self.Console = Console()
-                       cmd = "ipkg list" ###  will change into "ipkg install enigma2-plugins-meta"
+                       cmd = "ipkg install enigma2-meta" #dummy,will change probably"
                        self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
 
        def InstallMetaPackage_Finished(self, result, retval, extra_args = None):
                        self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
 
        def InstallMetaPackage_Finished(self, result, retval, extra_args = None):
@@ -896,26 +915,71 @@ class PluginManager(Screen, DreamInfoHandler):
                                split = x.split(' - ')
                                if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
                                        self.installed_packetlist[split[0].strip()] = split[1].strip()
                                split = x.split(' - ')
                                if not any(split[0].strip().endswith(x) for x in self.unwanted_extensions):
                                        self.installed_packetlist[split[0].strip()] = split[1].strip()
+               self.countUpdates()
                if self.currentSelectedTag is None:
                        self.buildCategoryList()
                else:
                        self.buildPacketList(self.currentSelectedTag)
 
                if self.currentSelectedTag is None:
                        self.buildCategoryList()
                else:
                        self.buildPacketList(self.currentSelectedTag)
 
-       def go(self, returnValue = None):
+       def countUpdates(self):
+               self.available_updates = 0
+               for package in self.packagesIndexlist[:]:
+                       attributes = package[0]["attributes"]
+                       packagename = attributes["packagename"]
+                       for x in self.available_packetlist:
+                               if x[0].strip() == packagename:
+                                       if self.installed_packetlist.has_key(packagename):
+                                               if self.installed_packetlist[packagename] != x[1].strip():
+                                                       self.available_updates +=1
+
+       def handleCurrent(self):
                current = self["list"].getCurrent()
                if current:
                        if self.currList == "category":
                current = self["list"].getCurrent()
                if current:
                        if self.currList == "category":
+                               self.currentSelectedIndex = self["list"].index
                                selectedTag = current[2]
                                self.buildPacketList(selectedTag)
                        elif self.currList == "packages":
                                selectedTag = current[2]
                                self.buildPacketList(selectedTag)
                        elif self.currList == "packages":
-                               #self.installPlugins()
-                               #uncomment the above line and comment the bottom lines to have install functionality on OK
-                               if current[8] is not '':
+                               if current[7] is not '':
+                                       idx = self["list"].getIndex()
+                                       detailsFile = self.list[idx][1]
+                                       if self.list[idx][7] == True:
+                                               for entry in self.selectedFiles:
+                                                       if entry[0] == detailsFile:
+                                                               self.selectedFiles.remove(entry)
+                                       else:
+                                               alreadyinList = False
+                                               for entry in self.selectedFiles:
+                                                       if entry[0] == detailsFile:
+                                                               alreadyinList = True
+                                               if not alreadyinList:
+                                                       self.selectedFiles.append((detailsFile,current[4],current[3]))
+                                       if current[4] == 'installed':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'remove', True)
+                                       elif current[4] == 'installable':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'install', True)
+                                       elif current[4] == 'remove':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installed', False)
+                                       elif current[4] == 'install':
+                                               self.list[idx] = self.buildEntryComponent(current[0], current[1], current[2], current[3], 'installable',False)
+                                       self["list"].setList(self.list)
+                                       self["list"].setIndex(idx)
+                                       self["list"].updateList(self.list)
+                                       self.selectionChanged()
+
+       def handleSelected(self):
+               current = self["list"].getCurrent()
+               if current:
+                       if self.currList == "packages":
+                               if current[7] is not '':
                                        detailsfile = self.directory[0] + "/" + current[1]
                                        if (os_path.exists(detailsfile) == True):
                                                self.session.openWithCallback(self.detailsClosed, PluginDetails, self.skin_path, current)
                                        else:
                                                self.session.open(MessageBox, _("Sorry, no Details available!"), MessageBox.TYPE_INFO)
                                        detailsfile = self.directory[0] + "/" + current[1]
                                        if (os_path.exists(detailsfile) == True):
                                                self.session.openWithCallback(self.detailsClosed, PluginDetails, self.skin_path, current)
                                        else:
                                                self.session.open(MessageBox, _("Sorry, no Details available!"), MessageBox.TYPE_INFO)
+                       elif self.currList == "category":
+                               self.installPlugins()
+
        def detailsClosed(self, result):
                if result:
                        if not self.Console:
        def detailsClosed(self, result):
                if result:
                        if not self.Console:
@@ -928,44 +992,52 @@ class PluginManager(Screen, DreamInfoHandler):
 
        def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
                divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
 
        def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
                divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               if selected is False:
-                       selectedicon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_off.png"))
-               else:
-                       selectedicon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
-
                if state == 'installed':
                        installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
                if state == 'installed':
                        installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
-                       return((name, details, description, packagename, state, installedpng, divpng, selectedicon, selected))
-               else:
+                       return((name, details, description, packagename, state, installedpng, divpng, selected))
+               elif state == 'installable':
                        installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
                        installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
-                       return((name, details, description, packagename, state, installablepng, divpng, selectedicon, selected))
+                       return((name, details, description, packagename, state, installablepng, divpng, selected))
+               elif state == 'remove':
+                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                       return((name, details, description, packagename, state, removepng, divpng, selected))
+               elif state == 'install':
+                       installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+                       return((name, details, description, packagename, state, installpng, divpng, selected))
 
        def buildPacketList(self, categorytag = None):
                if categorytag is not None:
                        self.currList = "packages"
                        self.currentSelectedTag = categorytag
 
        def buildPacketList(self, categorytag = None):
                if categorytag is not None:
                        self.currList = "packages"
                        self.currentSelectedTag = categorytag
-                       #print self.packagesIndexlist
                        self.packetlist = []
                        for package in self.packagesIndexlist[:]:
                        self.packetlist = []
                        for package in self.packagesIndexlist[:]:
-                               #print "package--->",package
                                prerequisites = package[0]["prerequisites"]
                                prerequisites = package[0]["prerequisites"]
-                               #print "prerequisite",prerequisites
                                if prerequisites.has_key("tag"):
                                        for foundtag in prerequisites["tag"]:
                                                if categorytag == foundtag:
                                                        attributes = package[0]["attributes"]
                                if prerequisites.has_key("tag"):
                                        for foundtag in prerequisites["tag"]:
                                                if categorytag == foundtag:
                                                        attributes = package[0]["attributes"]
-                                                       #print "attributes---->",attributes
-                                                       self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
+                                                       if attributes.has_key("packagetype"):
+                                                               if attributes["packagetype"] == "internal":
+                                                                       continue
+                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
+                                                       else:
+                                                               self.packetlist.append([attributes["name"], attributes["details"], attributes["shortdescription"], attributes["packagename"]])
                        self.list = []
                        self.list = []
-                       #print "self.packetlist---->",self.packetlist
                        for x in self.packetlist:
                                status = ""
                        for x in self.packetlist:
                                status = ""
+                               selectState = self.getSelectionState(x[1].strip())
                                if self.installed_packetlist.has_key(x[3].strip()):
                                if self.installed_packetlist.has_key(x[3].strip()):
-                                       status = "installed"
-                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = False))
+                                       if selectState == True:
+                                               status = "remove"
+                                       else:
+                                               status = "installed"
+                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = selectState))
                                else:
                                else:
-                                       status = "installable"
-                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = False))
+                                       if selectState == True:
+                                               status = "install"
+                                       else:
+                                               status = "installable"
+                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), x[3].strip(), status, selected = selectState))
                        if len(self.list):
                                self.list.sort(key=lambda x: x[0])
                        self["list"].style = "default"
                        if len(self.list):
                                self.list.sort(key=lambda x: x[0])
                        self["list"].style = "default"
@@ -975,16 +1047,13 @@ class PluginManager(Screen, DreamInfoHandler):
 
        def buildCategoryList(self):
                self.currList = "category"
 
        def buildCategoryList(self):
                self.currList = "category"
-               #print self.packagesIndexlist
                self.categories = []
                self.categoryList = []
                for package in self.packagesIndexlist[:]:
                self.categories = []
                self.categoryList = []
                for package in self.packagesIndexlist[:]:
-                       #print "package--->",package
                        prerequisites = package[0]["prerequisites"]
                        prerequisites = package[0]["prerequisites"]
-                       #print "prerequisite",prerequisites
                        if prerequisites.has_key("tag"):
                                for foundtag in prerequisites["tag"]:
                        if prerequisites.has_key("tag"):
                                for foundtag in prerequisites["tag"]:
-                                       #print "found tag----",foundtag
+                                       attributes = package[0]["attributes"]
                                        if foundtag not in self.categories:
                                                self.categories.append(foundtag)
                                                self.categoryList.append(self.buildCategoryComponent(foundtag))
                                        if foundtag not in self.categories:
                                                self.categories.append(foundtag)
                                                self.categoryList.append(self.buildCategoryComponent(foundtag))
@@ -1026,12 +1095,12 @@ class PluginManager(Screen, DreamInfoHandler):
 
        def installPlugins(self):
                self.cmdList = []
 
        def installPlugins(self):
                self.cmdList = []
+               if self.available_updates > 0:
+                       self.cmdList.append((IpkgComponent.CMD_UPGRADE, { "test_only": False }))
                if self.selectedFiles and len(self.selectedFiles):
                        for plugin in self.selectedFiles:
                if self.selectedFiles and len(self.selectedFiles):
                        for plugin in self.selectedFiles:
-                               #print "processing Plugin-->",plugin
                                detailsfile = self.directory[0] + "/" + plugin[0]
                                if (os_path.exists(detailsfile) == True):
                                detailsfile = self.directory[0] + "/" + plugin[0]
                                if (os_path.exists(detailsfile) == True):
-                                       #print "plugin[1]-->",plugin[1]
                                        self.fillPackageDetails(plugin[0])
                                        self.package = self.packageDetails[0]
                                        if self.package[0].has_key("attributes"):
                                        self.fillPackageDetails(plugin[0])
                                        self.package = self.packageDetails[0]
                                        if self.package[0].has_key("attributes"):
@@ -1041,53 +1110,22 @@ class PluginManager(Screen, DreamInfoHandler):
                                        if plugin[1] == 'installed':
                                                if self.packagefiles:
                                                        for package in self.packagefiles[:]:
                                        if plugin[1] == 'installed':
                                                if self.packagefiles:
                                                        for package in self.packagefiles[:]:
-                                                               #print "removing package: ",package["name"]
                                                                self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
                                                                self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
+                                               else:
+                                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
                                        else:
                                                if self.packagefiles:
                                                        for package in self.packagefiles[:]:
                                        else:
                                                if self.packagefiles:
                                                        for package in self.packagefiles[:]:
-                                                               #print "adding package: ",package["name"]
                                                                self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
                                                                self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
+                                               else:
+                                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
                                else:
                                        if plugin[1] == 'installed':
                                else:
                                        if plugin[1] == 'installed':
-                                               #print "removing package: ",plugin[2]
                                                self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
                                        else:
                                                self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": plugin[2] }))
                                        else:
-                                               #print "adding package: ",plugin[2]
                                                self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
                                                self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": plugin[2] }))
-               else:
-                       current = self["list"].getCurrent()
-                       if current:
-                               if current[8] is not '':
-                                       #print "current[4]-->",current[4]
-                                       detailsfile = self.directory[0] + "/" + current[1]
-                                       if (os_path.exists(detailsfile) == True):
-                                               self.fillPackageDetails(current[1])
-                                               self.package = self.packageDetails[0]
-                                               if self.package[0].has_key("attributes"):
-                                                       self.attributes = self.package[0]["attributes"]
-                                               if self.attributes.has_key("package"):
-                                                       self.packagefiles = self.attributes["package"]
-                                               if current[4] == 'installed':
-                                                       if self.packagefiles:
-                                                               for package in self.packagefiles[:]:
-                                                                       #print "removing package: ",package["name"]
-                                                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
-                                               else:
-                                                       if self.packagefiles:
-                                                               for package in self.packagefiles[:]:
-                                                                       #print "adding package: ",package["name"]
-                                                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
-                                       else:
-                                               if current[4] == 'installed':
-                                                       #print "removing package: ",current[0]
-                                                       self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": current[3] }))
-                                               else:
-                                                       #print "adding package: ",current[0]
-                                                       self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": current[3] }))
                if len(self.cmdList):
                if len(self.cmdList):
-                       print self.cmdList
-                       self.session.openWithCallback(self.runExecute, MessageBox, _("Do you want to continue installing or removing selected plugins?\n") + self.oktext)
+                       self.session.openWithCallback(self.runExecute, PluginManagerInfo, self.skin_path, self.cmdList)
 
        def runExecute(self, result):
                if result:
 
        def runExecute(self, result):
                if result:
@@ -1109,6 +1147,172 @@ class PluginManager(Screen, DreamInfoHandler):
                plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
 
                plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
 
+class PluginManagerInfo(Screen):
+       skin = """
+               <screen position="80,80" size="560,450" title="Plugin manager job information..." >
+                       <widget name="status" position="5,5" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,35" zPosition="10" size="550,2" transparent="1" alphatest="on" />
+                       <widget source="list" render="Listbox" position="5,45" size="550,360" scrollbarMode="showOnDemand" selectionDisabled="1">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (50, 1), size = (150, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (50, 25), size = (540, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
+                                       "itemHeight": 52
+                                       }
+                               </convert>
+                       </widget>
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,410" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="closetext" position="0,410" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,410" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="continuetext" position="140,410" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+               </screen>"""
+
+       def __init__(self, session, plugin_path, cmdlist = None):
+               Screen.__init__(self, session)
+               self.session = session
+               self.skin_path = plugin_path
+               self.cmdlist = cmdlist
+
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               {
+                       "ok": self.process,
+                       "back": self.exit,
+                       "red": self.exit,
+                       "green": self.process,
+               }, -1)
+
+               self.list = []
+               self["list"] = List(self.list)
+               self["closetext"] = Label(_("Cancel"))
+               self["continuetext"] = Label(_("Continue"))
+               self["status"] = Label(_("Following tasks will be done after you press continue."))
+
+               self.onShown.append(self.setWindowTitle)
+               self.onLayoutFinish.append(self.rebuildList)
+
+       def setWindowTitle(self):
+               self.setTitle(_("Plugin manager process information..."))
+
+       def rebuildList(self):
+               self.list = []
+               if self.cmdlist is not None:
+                       for entry in self.cmdlist:
+                               cmd = entry[0]
+                               if cmd == 0:
+                                       action = 'install'
+                               elif cmd == 2:
+                                       action = 'remove'
+                               else:
+                                       action = 'upgrade'
+
+                               args = entry[1]
+                               if cmd == 0:
+                                       info = args['package']
+                               elif cmd == 2:
+                                       info = args['package']
+                               else:
+                                       info = _("Dreambox software because updates are available.")
+
+                               self.list.append(self.buildEntryComponent(action,info))
+                       self['list'].setList(self.list)
+                       self['list'].updateList(self.list)
+
+       def buildEntryComponent(self, action,info):
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+               if action == 'install':
+                       return(( _('Installing'), info, installpng, divpng))
+               elif action == 'remove':
+                       return(( _('Remove'), info, removepng, divpng))
+               else:
+                       return(( _('Upgrade'), info, upgradepng, divpng))
+
+       def exit(self):
+               self.close(False)
+
+       def process(self):
+               self.close(True)
+
+
+class PluginManagerHelp(Screen):
+       skin = """
+               <screen position="80,80" size="560,450" title="Plugin manager help..." >
+                       <widget name="status" position="5,5" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,35" zPosition="10" size="550,2" transparent="1" alphatest="on" />
+                       <widget source="list" render="Listbox" position="5,45" size="550,360" scrollbarMode="showOnDemand" selectionDisabled="1">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (50, 1), size = (540, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (50, 25), size = (540, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 3), # index 3 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
+                                       "itemHeight": 52
+                                       }
+                               </convert>
+                       </widget>
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,410" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="closetext" position="0,410" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+               </screen>"""
+
+       def __init__(self, session, plugin_path):
+               Screen.__init__(self, session)
+               self.session = session
+               self.skin_path = plugin_path
+
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               {
+                       "back": self.exit,
+                       "red": self.exit,
+               }, -1)
+
+               self.list = []
+               self["list"] = List(self.list)
+               self["closetext"] = Label(_("Close"))
+               self["status"] = Label(_("Here is a small overview of the available icon states."))
+
+               self.onShown.append(self.setWindowTitle)
+               self.onLayoutFinish.append(self.rebuildList)
+
+       def setWindowTitle(self):
+               self.setTitle(_("Plugin manager help..."))
+
+       def rebuildList(self):
+               self.list = []
+               self.list.append(self.buildEntryComponent('install'))
+               self.list.append(self.buildEntryComponent('installable'))
+               self.list.append(self.buildEntryComponent('installed'))
+               self.list.append(self.buildEntryComponent('remove'))
+               self['list'].setList(self.list)
+               self['list'].updateList(self.list)
+
+       def buildEntryComponent(self, state):
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+               installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+
+               if state == 'installed':
+                       return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng))
+               elif state == 'installable':
+                       return(( _('This plugin is not installed.'), _('You can install this plugin.'), installablepng, divpng))
+               elif state == 'install':
+                       return(( _('This plugin will be installed.'), _('You can cancel the installation.'), installpng, divpng))
+               elif state == 'remove':
+                       return(( _('This plugin will be removed.'), _('You can cancel the removal.'), removepng, divpng))
+
+       def exit(self):
+               self.close()
+
+
 class PluginDetails(Screen, DreamInfoHandler):
        skin = """
                <screen name="PluginDetails" position="60,90" size="600,420" title="PluginDetails..." >
 class PluginDetails(Screen, DreamInfoHandler):
        skin = """
                <screen name="PluginDetails" position="60,90" size="600,420" title="PluginDetails..." >
@@ -1267,14 +1471,12 @@ class PluginDetails(Screen, DreamInfoHandler):
                if self.pluginstate == 'installed':
                        if self.packagefiles:
                                for package in self.packagefiles[:]:
                if self.pluginstate == 'installed':
                        if self.packagefiles:
                                for package in self.packagefiles[:]:
-                                       #print "removing packagefile: ",package["name"]
                                        self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
                                        if len(self.cmdList):
                                                self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + self.pluginname + "\n" + self.oktext)
                else:
                        if self.packagefiles:
                                for package in self.packagefiles[:]:
                                        self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package["name"] }))
                                        if len(self.cmdList):
                                                self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n") + self.pluginname + "\n" + self.oktext)
                else:
                        if self.packagefiles:
                                for package in self.packagefiles[:]:
-                                       #print "adding packagefile: ",package["name"]
                                        self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
                                        if len(self.cmdList):
                                                self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + self.pluginname + "\n" + self.oktext)
                                        self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package["name"] }))
                                        if len(self.cmdList):
                                                self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n") + self.pluginname + "\n" + self.oktext)
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/remove.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/remove.png
new file mode 100755 (executable)
index 0000000..396316f
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/remove.png differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/upgrade.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/upgrade.png
new file mode 100755 (executable)
index 0000000..6da6e37
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/upgrade.png differ
old mode 100644 (file)
new mode 100755 (executable)
index 0c447f5..cdbcee1
@@ -1,3 +1,3 @@
 installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
 
 installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
 
-install_DATA = plugin_videotune.xml
+install_DATA = plugin_videotune.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/VideoTune/meta/videotune.jpg b/lib/python/Plugins/SystemPlugins/VideoTune/meta/videotune.jpg
new file mode 100755 (executable)
index 0000000..e966479
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/VideoTune/meta/videotune.jpg differ
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..190dd9d
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/meta/
+
+install_DATA = plugin_videomode.xml *.jpg
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml b/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml
new file mode 100755 (executable)
index 0000000..3891e0b
--- /dev/null
@@ -0,0 +1,27 @@
+<default>
+         <prerequisites>
+                    <tag type="Display" />
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>Videomode</name>
+                    <packagename>enigma2-plugin-systemplugins-videomode</packagename>
+                    <shortdescription>Videomode provides advanced video modes.</shortdescription>
+                    <description>The Videomode extension provides advanced video modes.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/videomode.jpg" />
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>Videomode</name>
+                    <packagename>enigma2-plugin-systemplugins-videomode</packagename>
+                    <shortdescription>Videomode bietet erweiterte Video Einstellungen.</shortdescription>
+                    <description>Die Videomode-Erweiterung bietet erweiterte Video-Einstellungen.</description>
+                    <screenshot src="http://www.dreamboxupdate.com/preview/videomode.jpg" />
+          </info>
+
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-videomode" />
+       </files>
+
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg
new file mode 100755 (executable)
index 0000000..adb5646
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg differ