Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 16 Feb 2009 17:25:23 +0000 (18:25 +0100)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 16 Feb 2009 17:25:23 +0000 (18:25 +0100)
87 files changed:
configure.ac [changed mode: 0644->0755]
data/countries/lv.png [new file with mode: 0644]
data/imagewizard.xml [deleted file]
data/menu.xml
data/skin_default.xml
lib/python/Components/Console.py [changed mode: 0644->0755]
lib/python/Components/Converter/StringList.py
lib/python/Components/EpgList.py
lib/python/Components/FileList.py [changed mode: 0644->0755]
lib/python/Components/Harddisk.py [changed mode: 0644->0755]
lib/python/Components/HelpMenuList.py
lib/python/Components/Ipkg.py [changed mode: 0644->0755]
lib/python/Components/Language.py
lib/python/Components/NimManager.py
lib/python/Components/Sources/List.py
lib/python/Components/TimerSanityCheck.py
lib/python/Components/config.py
lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
lib/python/Plugins/Extensions/DVDPlayer/plugin.py
lib/python/Plugins/Extensions/IpkgInstaller/Makefile.am [deleted file]
lib/python/Plugins/Extensions/IpkgInstaller/plugin.py [deleted file]
lib/python/Plugins/Extensions/Makefile.am [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaScanner/plugin.py [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore [deleted file]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py [deleted file]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png [deleted file]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py [deleted file]
lib/python/Plugins/SystemPlugins/Makefile.am [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/.cvsignore [moved from lib/python/Plugins/Extensions/IpkgInstaller/.cvsignore with 100% similarity]
lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/LICENSE [moved from lib/python/Plugins/SystemPlugins/ConfigurationBackup/LICENSE with 75% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/__init__.py [moved from lib/python/Plugins/Extensions/IpkgInstaller/__init__.py with 100% similarity]
lib/python/Plugins/SystemPlugins/SoftwareManager/blue.png [moved from lib/python/Plugins/SystemPlugins/ConfigurationBackup/blue.png with 100% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/green.png [moved from lib/python/Plugins/SystemPlugins/ConfigurationBackup/green.png with 100% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/imagewizard.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/red.png [moved from lib/python/Plugins/SystemPlugins/ConfigurationBackup/red.png with 100% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/update.png [moved from lib/python/Plugins/SystemPlugins/SoftwareUpdate/update.png with 100% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/upgradeable.png [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareManager/yellow.png [moved from lib/python/Plugins/SystemPlugins/ConfigurationBackup/yellow.png with 100% similarity, mode: 0755]
lib/python/Plugins/SystemPlugins/SoftwareUpdate/.cvsignore [deleted file]
lib/python/Plugins/SystemPlugins/SoftwareUpdate/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/SoftwareUpdate/__init__.py [deleted file]
lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py [deleted file]
lib/python/Screens/FactoryReset.py [new file with mode: 0644]
lib/python/Screens/ImageWizard.py [deleted file]
lib/python/Screens/Ipkg.py [changed mode: 0644->0755]
lib/python/Screens/LocationBox.py
lib/python/Screens/Makefile.am
lib/python/Screens/TimerEdit.py
lib/python/Screens/VirtualKeyBoard.py
lib/service/servicedvb.cpp
mytest.py [changed mode: 0644->0755]
po/Makefile.am [changed mode: 0644->0755]
po/ar.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en.po
po/enigma2.pot
po/enigma2_rel25.pot [new file with mode: 0644]
po/es.po
po/fi.po
po/fr.po
po/fy.po
po/hr.po
po/hu.po
po/is.po
po/it.po
po/lt.po
po/lv.po [new file with mode: 0644]
po/nl.po
po/no.po
po/pl.po
po/pt.po
po/ru.po
po/sv.po
po/tr.po
po/uk.po
skin.py

old mode 100644 (file)
new mode 100755 (executable)
index 719baa1..b94272d
@@ -108,11 +108,10 @@ lib/python/Components/Sources/Makefile
 lib/python/Screens/Makefile
 lib/python/Plugins/Makefile
 lib/python/Plugins/SystemPlugins/Makefile
-lib/python/Plugins/SystemPlugins/SoftwareUpdate/Makefile
+lib/python/Plugins/SystemPlugins/SoftwareManager/Makefile
 lib/python/Plugins/SystemPlugins/FrontprocessorUpgrade/Makefile
 lib/python/Plugins/SystemPlugins/PositionerSetup/Makefile
 lib/python/Plugins/SystemPlugins/Hotplug/Makefile
-lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile
 lib/python/Plugins/SystemPlugins/DefaultServicesScanner/Makefile
 lib/python/Plugins/SystemPlugins/NFIFlash/Makefile
 lib/python/Plugins/SystemPlugins/Satfinder/Makefile
@@ -124,7 +123,6 @@ lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile
 lib/python/Plugins/DemoPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
-lib/python/Plugins/Extensions/IpkgInstaller/Makefile
 lib/python/Plugins/Extensions/TuxboxPlugins/Makefile
 lib/python/Plugins/Extensions/FileManager/Makefile
 lib/python/Plugins/Extensions/CutListEditor/Makefile
diff --git a/data/countries/lv.png b/data/countries/lv.png
new file mode 100644 (file)
index 0000000..3a29dad
Binary files /dev/null and b/data/countries/lv.png differ
diff --git a/data/imagewizard.xml b/data/imagewizard.xml
deleted file mode 100644 (file)
index 8c40e3f..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<wizard>
-               <step id="restorequestion">
-                       <condition>
-from Screens.ImageWizard import checkConfigBackup
-self.backuppath = checkConfigBackup()
-self.condition = (self.backuppath is not None)
-                       </condition>
-                       <text value="Do you want to restore your settings?" />
-                       <list>
-                               <listentry caption="Yes, restore the settings now" step="restore" />
-                               <listentry caption="No, just start my dreambox" step="end" />
-                       </list>
-               </step>
-
-               <step id="welcome">
-                       <text value="Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware." />
-                       <list>
-                               <listentry caption="OK, guide me through the upgrade process" step="backupquestion" />
-                               <listentry caption="Exit the wizard" step="end" />
-                       </list>
-               </step>
-
-               <step id="backupquestion">
-                       <text value="The wizard can backup your current settings. Do you want to do a backup now?" />
-                       <list>
-                               <listentry caption="Yes, backup my settings!" step="backupwhere" />
-                               <listentry caption="No backup needed" step="upgrade" />
-                       </list>
-               </step>
-
-               <step id="backupwhere">
-                       <text value="Where do you want to backup your settings?" />
-                       <list>
-                               <listentry caption="Harddisk" step="hdd" />
-                               <listentry caption="Compact flash card" step="cf" />
-                               <listentry caption="USB" step="usb" />
-                               <listentry caption="Somewhere else" step="file" />
-                       </list>
-               </step>
-
-               <step id="hdd" nextstep="backup">
-                       <condition>
-from Components.Harddisk import harddiskmanager
-self.condition = harddiskmanager.HDDCount() > 0
-                       </condition>
-                       <text value="You have chosen to backup to your harddisk. Please press OK to start the backup now." />
-                       <code pos="after">
-self.backuppath = '/media/hdd/'
-                       </code>
-               </step>
-
-               <step id="hddfailed" nextstep="backupwhere">
-                       <condition>
-from Components.Harddisk import harddiskmanager
-self.condition = harddiskmanager.HDDCount() == 0
-                       </condition>
-                       <text value="You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you." />
-               </step>
-               
-               <step id="cf" nextstep="backup">
-                       <text value="You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\nPlease press OK to start the backup now." />
-                       <code pos="after">
-self.backuppath = '/media/cf/'
-                       </code>
-               </step>
-
-               <step id="usb" nextstep="backup">
-                       <text value="You have chosen to backup to an usb drive. Better backup to the harddisk!\nPlease press OK to start the backup now." />
-                       <code pos="after">
-self.backuppath = '/media/usb/'
-                       </code>
-               </step>
-
-               <step id="file" nextstep="backupwhere">
-                       <text value="This is unsupported at the moment." />
-               </step>
-
-               <step id="backup" nextstep="backupresult">
-                       <code>
-from Screens.ImageWizard import doBackup
-doBackup(self.backuppath)
-                       </code>
-                       <text value="Backup is done. Please press OK to see the result." />
-               </step>
-               
-               <step id="backupresult" nextstep="upgrade">
-                       <condition>
-from Screens.ImageWizard import checkConfigBackup
-self.backuppath = checkConfigBackup()
-self.condition = (self.backuppath is not None)
-                       </condition>
-                       <text value="Your backup succeeded. We will now continue to explain the further upgrade process." />
-               </step>
-
-               <step id="backupresultfailed" nextstep="backupwhere">
-                       <condition>
-from Screens.ImageWizard import checkConfigBackup
-self.backuppath = checkConfigBackup()
-self.condition = (self.backuppath is None)
-                       </condition>
-                       <text value="The backup failed. Please choose a different backup location." />
-               </step>
-               
-               <step id="restore" nextstep="activate">
-                       <code>
-from Screens.ImageWizard import doRestore
-doRestore(self.backuppath)
-                       </code>
-                       <text value="Restoring the settings is done. Please press OK to activate the restored settings now." />
-               </step>
-               
-               <step id="activate" nextstep="activate">
-                       <code>
-import os
-from Screens.ImageWizard import backupfile
-print 'mv ' + self.backuppath + backupfile + ' ' + self.backuppath + backupfile + '.old'
-os.system('mv ' + self.backuppath + backupfile + ' ' + self.backuppath + backupfile + '.old')
-os.system('killall -9 enigma2') # ugly... no better solution atm
-                       </code>
-               </step>
-               
-               <step id="upgrade">
-                       <text value="You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\nYour dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings." />
-                       <list>
-                               <listentry caption="Yes, perform a shutdown now." step="shutdown" />
-                               <listentry caption="No, do nothing." step="end" />
-                       </list>
-               </step>
-
-               <step id="shutdown" nextstep="shutdown">
-                       <code>
-from enigma import quitMainloop
-quitMainloop(1)
-                       </code>
-                       <text value="Your dreambox is shutting down. Please stand by..." />
-               </step>
-               
-               <step id="end">
-                       <text value="The wizard is finished now." />
-               </step>
-</wizard>
index 7dc764a..56b3ee6 100644 (file)
@@ -82,20 +82,17 @@ self.session.open(DefaultWizard, silent = False)
 </code>
                        </item>
                        <item level="0" text="Factory reset" entryID="factory_reset">
-<code>
-from Screens.MessageBox import MessageBox
+                               <code>
+from Screens.FactoryReset import FactoryReset
 def msgClosed(ret):
        if ret:
                from os import system, _exit
                system("rm -R /etc/enigma2")
                system("cp -R /usr/share/enigma2/defaults /etc/enigma2")
                _exit(0)
-
-self.session.openWithCallback(msgClosed, MessageBox, _("When you do a factory reset, you will lose ALL your configuration data\n"
-       "(including bouquets, services, satellite data ...)\n"
-       "After completion of factory reset, your receiver will restart automatically!\n\n"
-       "Really do a factory reset?"), MessageBox.TYPE_YESNO)
-</code></item>
+self.session.openWithCallback(msgClosed, FactoryReset)
+</code>
+                       </item>
                        <!--<item text="Parental Control"><setup id="parental" /></item>-->
                        <!--<item text="Expert -disabled-"><setup id="expert" /></item>-->
                </menu>
index d60933e..f99e1a7 100755 (executable)
@@ -368,12 +368,6 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count &gt; 7 and 2 or 3)
                <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
                <widget name="long_key" position="320,520" size="350,50" font="Regular;25" halign="right" foregroundColor="yellow" />
        </screen>
-       <!-- Image Wizard -->
-       <screen name="ImageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder">
-               <widget name="text" position="50,100" size="440,250" font="Regular;22" />
-               <widget name="list" position="50,350" zPosition="1" size="440,200" />
-               <widget name="config" position="50,350" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
-       </screen>
        <!-- Inputbox -->
        <screen name="InputBox" position="80,250" size="550,90" title="Input">
                <widget name="text" position="10,20" size="550,25" font="Regular;23" />
old mode 100644 (file)
new mode 100755 (executable)
index f1f3fd9..a41317e
@@ -55,3 +55,12 @@ class Console(object):
                if self.callbacks[name]:
                        self.callbacks[name](data,retval,extra_args)
                del self.callbacks[name]
+
+       def kill(self,name):
+               if name in self.appContainers:
+                       print "[Console] killing: ",self.appContainers[name]
+                       self.appContainers[name].kill()
+
+       def killAll(self):
+               for name in self.appContainers:
+                       self.kill(name)
index d424d39..226247c 100644 (file)
@@ -18,6 +18,8 @@ class StringList(Converter):
 
        def selectionChanged(self, index):
                self.source.selectionChanged(index)
+
+       def setIndex(self, index):
                # update all non-master targets
                print "changed selection in listbox!"
                for x in self.downstream_elements:
@@ -26,6 +28,11 @@ class StringList(Converter):
                                print "is not master, so update to index", index
                                x.index = index
 
+       def getIndex(self, index):
+               return None
+       
+       index = property(getIndex, setIndex)
+
        @cached
        def getCurrent(self):
                if self.source is None or self.index is None or self.index >= len(self.source.list):
index 8bd8e75..2494ca0 100644 (file)
@@ -289,6 +289,7 @@ class EPGList(HTMLComponent, GUIComponent):
                        else:
                                assert(type == 0)
                                list.sort(key=lambda x: x[2])
+                       self.l.invalidate()
                        self.moveToEventId(event_id)
 
        def getSelectedEventId(self):
old mode 100644 (file)
new mode 100755 (executable)
index 84abf32..f969709
@@ -248,3 +248,189 @@ class FileList(MenuList):
                self.refreshMountpoints()
                if self.current_directory is None:
                        self.refresh()
+
+
+def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected = False):
+       res = [ (absolute, isDir, selected, name) ]
+       res.append((eListboxPythonMultiContent.TYPE_TEXT, 55, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
+       if isDir:
+               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+       else:
+               extension = name.split('.')
+               extension = extension[-1].lower()
+               if EXTENSIONS.has_key(extension):
+                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
+               else:
+                       png = None
+       if png is not None:
+               res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 30, 2, 20, 20, png))
+
+       if not name.startswith('<'):
+               if selected is False:
+                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_off.png"))
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
+               else:
+                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
+       
+       return res
+
+
+class MultiFileSelectList(FileList):
+       def __init__(self, preselectedFiles, directory, showMountpoints = False, matchingPattern = None, showDirectories = True, showFiles = True,  useServiceRef = False, inhibitDirs = False, inhibitMounts = False, isTop = False, enableWrapAround = False, additionalExtensions = None):
+               self.selectedFiles = preselectedFiles
+               if self.selectedFiles is None:
+                       self.selectedFiles = []
+               FileList.__init__(self, directory, showMountpoints = showMountpoints, matchingPattern = matchingPattern, showDirectories = showDirectories, showFiles = showFiles,  useServiceRef = useServiceRef, inhibitDirs = inhibitDirs, inhibitMounts = inhibitMounts, isTop = isTop, enableWrapAround = enableWrapAround, additionalExtensions = additionalExtensions)
+               self.changeDir(directory)                       
+               self.l.setItemHeight(25)
+               self.l.setFont(0, gFont("Regular", 20))
+               self.onSelectionChanged = [ ]
+
+       def selectionChanged(self):
+               for f in self.onSelectionChanged:
+                       f()
+
+       def changeSelectionState(self):
+               idx = self.l.getCurrentSelectionIndex()
+               count = 0
+               newList = []
+               for x in self.list:
+                       if idx == count:
+                               if x[0][3].startswith('<'):
+                                       newList.append(x)
+                               else:
+                                       if x[0][1] is True:
+                                               realPathname = x[0][0]
+                                       else:
+                                               realPathname = self.current_directory + x[0][0]
+                                       if x[0][2] == True:
+                                               SelectState = False
+                                               for entry in self.selectedFiles:
+                                                       if entry == realPathname:
+                                                               self.selectedFiles.remove(entry)
+       
+                                       else:
+                                               SelectState = True
+                                               alreadyinList = False   
+                                               for entry in self.selectedFiles:
+                                                       if entry == realPathname:
+                                                               alreadyinList = True
+                                               if not alreadyinList:
+                                                       self.selectedFiles.append(realPathname)
+                                       newList.append(MultiFileSelectEntryComponent(name = x[0][3], absolute = x[0][0], isDir = x[0][1], selected = SelectState ))
+                       else:
+                               newList.append(x)
+                       
+                       count += 1
+               
+               self.list = newList
+               self.l.setList(self.list)
+       
+       def getSelectedList(self):
+               return self.selectedFiles
+
+       def changeDir(self, directory, select = None):
+               self.list = []
+
+               # if we are just entering from the list of mount points:
+               if self.current_directory is None:
+                       if directory and self.showMountpoints:
+                               self.current_mountpoint = self.getMountpointLink(directory)
+                       else:
+                               self.current_mountpoint = None
+               self.current_directory = directory
+               directories = []
+               files = []
+
+               if directory is None and self.showMountpoints: # present available mountpoints
+                       for p in harddiskmanager.getMountedPartitions():
+                               path = os_path.join(p.mountpoint, "")
+                               if path not in self.inhibitMounts and not self.inParentDirs(path, self.inhibitDirs):
+                                       self.list.append(MultiFileSelectEntryComponent(name = p.description, absolute = path, isDir = True))
+                       files = [ ]
+                       directories = [ ]
+               elif directory is None:
+                       files = [ ]
+                       directories = [ ]
+               elif self.useServiceRef:
+                       root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory)
+                       if self.additional_extensions:
+                               root.setName(self.additional_extensions)
+                       serviceHandler = eServiceCenter.getInstance()
+                       list = serviceHandler.list(root)
+
+                       while 1:
+                               s = list.getNext()
+                               if not s.valid():
+                                       del list
+                                       break
+                               if s.flags & s.mustDescent:
+                                       directories.append(s.getPath())
+                               else:
+                                       files.append(s)
+                       directories.sort()
+                       files.sort()
+               else:
+                       if os_path.exists(directory):
+                               files = listdir(directory)
+                               files.sort()
+                               tmpfiles = files[:]
+                               for x in tmpfiles:
+                                       if os_path.isdir(directory + x):
+                                               directories.append(directory + x + "/")
+                                               files.remove(x)
+
+               if directory is not None and self.showDirectories and not self.isTop:
+                       if directory == self.current_mountpoint and self.showMountpoints:
+                               self.list.append(MultiFileSelectEntryComponent(name = "<" +_("List of Storage Devices") + ">", absolute = None, isDir = True))
+                       elif (directory != "/") and not (self.inhibitMounts and self.getMountpoint(directory) in self.inhibitMounts):
+                               self.list.append(MultiFileSelectEntryComponent(name = "<" +_("Parent Directory") + ">", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True))
+
+               if self.showDirectories:
+                       for x in directories:
+                               if not (self.inhibitMounts and self.getMountpoint(x) in self.inhibitMounts) and not self.inParentDirs(x, self.inhibitDirs):
+                                       name = x.split('/')[-2]
+                                       alreadySelected = False
+                                       for entry in self.selectedFiles:
+                                               if entry  == x:
+                                                       alreadySelected = True                                  
+                                       if alreadySelected:             
+                                               self.list.append(MultiFileSelectEntryComponent(name = name, absolute = x, isDir = True, selected = True))
+                                       else:
+                                               self.list.append(MultiFileSelectEntryComponent(name = name, absolute = x, isDir = True, selected = False))
+                                               
+               if self.showFiles:
+                       for x in files:
+                               if self.useServiceRef:
+                                       path = x.getPath()
+                                       name = path.split('/')[-1]
+                               else:
+                                       path = directory + x
+                                       name = x
+
+                               if (self.matchingPattern is None) or re_compile(self.matchingPattern).search(path):
+                                       alreadySelected = False
+                                       for entry in self.selectedFiles:
+                                               if os_path.basename(entry)  == x:
+                                                       alreadySelected = True  
+                                       if alreadySelected:
+                                               self.list.append(MultiFileSelectEntryComponent(name = name, absolute = x , isDir = False, selected = True))
+                                       else:
+                                               self.list.append(MultiFileSelectEntryComponent(name = name, absolute = x , isDir = False, selected = False))
+
+               self.l.setList(self.list)
+
+               if select is not None:
+                       i = 0
+                       self.moveToIndex(0)
+                       for x in self.list:
+                               p = x[0][0]
+                               
+                               if isinstance(p, eServiceReference):
+                                       p = p.getPath()
+                               
+                               if p == select:
+                                       self.moveToIndex(i)
+                               i += 1
+
old mode 100644 (file)
new mode 100755 (executable)
index d165e26..75d68fa
@@ -519,4 +519,18 @@ class HarddiskManager:
                        description += " (Partition %d)" % part
                return description
 
+       def addMountedPartition(self, device, desc):
+               already_mounted = False
+               for x in self.partitions[:]:
+                       if x.mountpoint == device:
+                               already_mounted = True
+               if not already_mounted:
+                       self.partitions.append(Partition(mountpoint = device, description = desc))
+               
+       def removeMountedPartition(self, mountpoint):
+               for x in self.partitions[:]:
+                       if x.mountpoint == mountpoint:
+                               self.partitions.remove(x)
+                               self.on_partition_list_change("remove", x)
+
 harddiskmanager = HarddiskManager()
index 2a7bd99..ddf871a 100755 (executable)
@@ -7,7 +7,7 @@ from Tools.KeyBindings import queryKeyBinding, getKeyDescription
 # [ ( actionmap, context, [(action, help), (action, help), ...] ), (actionmap, ... ), ... ]
 
 class HelpMenuList(GUIComponent):
-       def __init__(self, list, callback):
+       def __init__(self, helplist, callback):
                GUIComponent.__init__(self)
                self.onSelChanged = [ ]
                self.l = eListboxPythonMultiContent()
@@ -15,7 +15,7 @@ class HelpMenuList(GUIComponent):
                self.extendedHelp = False
 
                l = [ ]
-               for (actionmap, context, actions) in list:
+               for (actionmap, context, actions) in helplist:
                        for (action, help) in actions:
                                entry = [ ]
 
old mode 100644 (file)
new mode 100755 (executable)
index 31889bc..0ba1165
@@ -52,6 +52,8 @@ class IpkgComponent:
                                self.runCmd("list")
                elif cmd == self.CMD_INSTALL:
                        self.runCmd("install " + args['package'])
+               elif cmd == self.CMD_REMOVE:
+                       self.runCmd("remove " + args['package'])
                self.setCurrentCommand(cmd)
        
        def cmdFinished(self, retval):
@@ -90,6 +92,8 @@ class IpkgComponent:
                                self.callCallbacks(self.EVENT_UPGRADE, data.split('    ', 1)[1].split(' ')[0])
                        elif data.find('Installing') == 0:
                                self.callCallbacks(self.EVENT_INSTALL, data.split(' ', 1)[1].split(' ')[0])
+                       elif data.find('Removing') == 0:
+                               self.callCallbacks(self.EVENT_REMOVE, data.split(' ', 1)[1].split(' ')[1])
                        elif data.find('Configuring') == 0:
                                self.callCallbacks(self.EVENT_CONFIGURING, data.split(' ', 1)[1].split(' ')[0])
                        elif data.find('An error occurred') == 0:
index 395f682..74dd67d 100644 (file)
@@ -26,6 +26,7 @@ class Language:
                self.addLanguage(_("Greek"), "el", "GR")
                self.addLanguage(_("Hungarian"), "hu", "HU")
                self.addLanguage(_("Lithuanian"), "lt", "LT")
+               self.addLanguage(_("Latvian"), "lv", "LV")
                self.addLanguage(_("Icelandic"), "is", "IS")
                self.addLanguage(_("Italian"), "it", "IT")
                self.addLanguage(_("Norwegian"), "no", "NO")
index 4be10d5..6dc49dc 100644 (file)
@@ -287,8 +287,8 @@ class SecConfigure:
                                                sec.setLNBSatCR(manufacturer.scr[product_name].index)
                                                sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000)
                                        elif currLnb.unicable.value == "unicable_lnb":
-                                               manufacturer_name = currLnb.unicableMatrixManufacturer.value
-                                               manufacturer = currLnb.unicableMatrix[manufacturer_name]
+                                               manufacturer_name = currLnb.unicableLnbManufacturer.value
+                                               manufacturer = currLnb.unicableLnb[manufacturer_name]
                                                product_name = manufacturer.product.value
                                                sec.setLNBSatCR(manufacturer.scr[product_name].index)
                                                sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000)
index 23b5395..dbe442d 100644 (file)
@@ -40,6 +40,11 @@ to generate HTML."""
                if self.disable_callbacks:
                        return
 
+               # update all non-master targets
+               for x in self.downstream_elements:
+                       if x is not self.master:
+                               x.index = index
+
                for x in self.onSelectionChanged:
                        x()
 
index cf02459..cf50502 100644 (file)
@@ -1,11 +1,12 @@
 import NavigationInstance
-from time import localtime
+from time import localtime, mktime, gmtime
 from ServiceReference import ServiceReference
 from enigma import iServiceInformation, eServiceCenter, eServiceReference
 
 class TimerSanityCheck:
        def __init__(self, timerlist, newtimer=None):
                print "sanitycheck"
+               self.localtimediff = 25*3600 - mktime(gmtime(25*3600))
                self.timerlist = timerlist
                self.newtimer = newtimer
                self.simultimer = []
@@ -70,6 +71,10 @@ class TimerSanityCheck:
                        rflags = ((rflags & 0x7F)>> 3)|((rflags & 0x07)<<4)
                        if rflags:
                                begin = self.newtimer.begin % 86400 # map to first day
+                               if (self.localtimediff > 0) and ((begin + self.localtimediff) > 86400):
+                                       rflags = ((rflags >> 1)& 0x3F)|((rflags << 6)& 0x40)
+                               elif (self.localtimediff < 0) and (begin < self.localtimediff):
+                                       rflags = ((rflags << 1)& 0x7E)|((rflags >> 6)& 0x01)
                                while rflags: # then arrange on the week
                                        if rflags & 1:
                                                self.rep_eventlist.append((begin, -1))
@@ -87,6 +92,10 @@ class TimerSanityCheck:
                                        rflags = timer.repeated
                                        rflags = ((rflags & 0x7F)>> 3)|((rflags & 0x07)<<4)
                                        begin = timer.begin % 86400 # map all to first day
+                                       if (self.localtimediff > 0) and ((begin + self.localtimediff) > 86400):
+                                               rflags = ((rflags >> 1)& 0x3F)|((rflags << 6)& 0x40)
+                                       elif (self.localtimediff < 0) and (begin < self.localtimediff):
+                                               rflags = ((rflags << 1)& 0x7E)|((rflags >> 6)& 0x01)
                                        while rflags:
                                                if rflags & 1:
                                                        self.rep_eventlist.append((begin, idx))
index a813d3c..a6d3415 100755 (executable)
@@ -1385,7 +1385,7 @@ class ConfigLocations(ConfigElement):
 # nothing.
 class ConfigNothing(ConfigSelection):
        def __init__(self):
-               ConfigSelection.__init__(self, choices = [""])
+               ConfigSelection.__init__(self, choices = [("","")])
 
 # until here, 'saved_value' always had to be a *string*.
 # now, in ConfigSubsection, and only there, saved_value
index 7ea32df..660234f 100644 (file)
@@ -2,8 +2,8 @@ from Tools.Directories import fileExists
 from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigSubList
 
 class ConfigColor(ConfigSequence):
-       def __init__(self):
-               ConfigSequence.__init__(self, seperator = "#", limits = [(0,255),(0,255),(0,255)])
+       def __init__(self, default = [128,128,128]):
+               ConfigSequence.__init__(self, seperator = "#", limits = [(0,255),(0,255),(0,255)], default = default)
 
 class ConfigFilename(ConfigText):
        def __init__(self):
index 421a2b4..8e2a9f3 100644 (file)
@@ -369,9 +369,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                self.onFirstExecBegin.append(self.showFileBrowser)
                self.service = None
                self.in_menu = False
-               self.old_aspect = open("/proc/stb/video/aspect", "r").read()
-               self.old_policy = open("/proc/stb/video/policy", "r").read()
-               self.old_wss = open("/proc/stb/denc/0/wss", "r").read()
 
        def keyNumberGlobal(self, number):
                print "You pressed number " + str(number)
@@ -635,11 +632,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                pass
 
        def __onClose(self):
-               for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)):
-                       try:
-                               open(i[0], "w").write(i[1])
-                       except IOError:
-                               print "restore", i[0], "failed"
                self.restore_infobar_seek_config()
                self.session.nav.playService(self.oldService)
 
diff --git a/lib/python/Plugins/Extensions/IpkgInstaller/Makefile.am b/lib/python/Plugins/Extensions/IpkgInstaller/Makefile.am
deleted file mode 100644 (file)
index ece0698..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-installdir = $(LIBDIR)/enigma2/python/Plugins/Extensions/IpkgInstaller
-
-install_PYTHON =       \
-       __init__.py \
-       plugin.py 
diff --git a/lib/python/Plugins/Extensions/IpkgInstaller/plugin.py b/lib/python/Plugins/Extensions/IpkgInstaller/plugin.py
deleted file mode 100644 (file)
index 4893dc4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-from Components.ActionMap import ActionMap
-from Components.Ipkg import IpkgComponent
-from Components.Label import Label
-from Components.SelectionList import SelectionList
-from Plugins.Plugin import PluginDescriptor
-from Screens.Ipkg import Ipkg
-from Screens.Screen import Screen
-
-class IpkgInstaller(Screen):
-       skin = """
-               <screen position="100,100" size="550,400" title="..." >
-                       <widget name="red" halign="center" valign="center" position="0,0" size="140,60" backgroundColor="red" font="Regular;21" />
-                       <widget name="green" halign="center" valign="center" position="140,0" text="Install selected" size="140,60" backgroundColor="green" font="Regular;21" />
-                       <widget name="yellow" halign="center" valign="center" position="280,0" size="140,60" backgroundColor="yellow" font="Regular;21" />
-                       <widget name="blue" halign="center" valign="center" position="420,0" size="140,60" backgroundColor="blue" font="Regular;21" />
-                       <widget name="list" position="0,60" size="550,360" />
-               </screen>
-               """
-       
-       def __init__(self, session, list):
-               self.skin = IpkgInstaller.skin
-               Screen.__init__(self, session)
-
-               self.list = SelectionList()
-               self["list"] = self.list
-               for listindex in range(len(list)):
-                       self.list.addSelection(list[listindex], list[listindex], listindex, True)
-
-               self["red"] = Label()
-               self["green"] = Label()
-               self["yellow"] = Label()
-               self["blue"] = Label()
-               
-               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], 
-               {
-                       "ok": self.list.toggleSelection, 
-                       "cancel": self.close, 
-                       "green": self.install
-               }, -1)
-               
-       def install(self):
-               list = self.list.getSelectionsList()
-               cmdList = []
-               for item in list:
-                       cmdList.append((IpkgComponent.CMD_INSTALL, { "package": item[1] }))
-               print cmdList
-               self.session.open(Ipkg, cmdList = cmdList)
-
-def filescan_open(list, session, **kwargs):
-       filelist = [x.path for x in list]
-       session.open(IpkgInstaller, filelist) # list
-
-def filescan(**kwargs):
-       from Components.Scanner import Scanner, ScanPath
-       return \
-               Scanner(mimetypes = ["application/x-debian-package"], 
-                       paths_to_scan = 
-                               [
-                                       ScanPath(path = "ipk", with_subdirs = True), 
-                                       ScanPath(path = "", with_subdirs = False), 
-                               ], 
-                       name = "Ipkg", 
-                       description = "Install software updates...", 
-                       openfnc = filescan_open, )
-
-def Plugins(**kwargs):
-       return [ PluginDescriptor(name="Ipkg", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan) ]
old mode 100644 (file)
new mode 100755 (executable)
index 9f3737a..edbd208
@@ -1 +1 @@
-SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer IpkgInstaller GraphMultiEPG SocketMMI DVDPlayer DVDBurn
+SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDPlayer DVDBurn
old mode 100644 (file)
new mode 100755 (executable)
index 88b917e..2c31197
@@ -42,6 +42,9 @@ def scan(session):
 
        parts = [ (r.description, r.mountpoint, session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
        if len(parts):
+               for x in parts:
+                       if not access(x[1], F_OK|R_OK):
+                               parts.remove(x) 
                session.openWithCallback(mountpoint_choosen, ChoiceBox, title = _("Please Select Medium to be Scanned"), list = parts)
 
 def main(session, **kwargs):
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore
deleted file mode 100644 (file)
index 138b9cc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.pyo
-Makefile
-Makefile.in
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am
deleted file mode 100644 (file)
index d50236d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/ConfigurationBackup
-
-install_PYTHON =       \
-       __init__.py \
-       plugin.py       red.png yellow.png green.png blue.png backup.png
-
-install_DATA = LICENSE
-
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png
deleted file mode 100644 (file)
index 4962a05..0000000
Binary files a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py
deleted file mode 100644 (file)
index 7a918da..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-from Screens.Screen import Screen
-from Screens.MessageBox import MessageBox
-from Screens.Console import Console
-from Components.ActionMap import ActionMap, NumberActionMap
-from Components.Pixmap import Pixmap
-from Components.Label import Label
-from Components.MenuList import MenuList
-from Components.config import ConfigSelection, ConfigSubsection, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry
-from Components.ConfigList import ConfigList
-from Plugins.Plugin import PluginDescriptor
-
-from Tools.Directories import *
-from os import path, makedirs, listdir
-from time import localtime
-from datetime import date
-
-plugin_path = ""
-
-# FIXME: harddiskmanager has a better overview about available mointpoints!
-BackupPath = {
-               "hdd" : "/media/hdd/backup",
-               "usb" : "/media/usb/backup",
-               "cf" : "/media/cf/backup"
-       }
-
-MountPoints = {
-               "hdd" : "/media/hdd",
-               "usb" : "/media/usb",
-               "cf" : "/media/cf"
-       }
-
-class BackupSetup(Screen):
-       skin = """
-               <screen position="135,144" size="450,300" title="Backup and Restore" >
-                       <widget name="config" position="10,10" size="430,240" />
-                       <widget name="cancel" position="10,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />
-                       <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
-                       <widget name="ok" position="120,255" size="100,40" pixmap="~/green.png" transparent="1" alphatest="on" />
-                       <widget name="oktext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
-                       <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
-                       <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
-                       <widget name="backup" position="340,255" size="100,40" pixmap="~/blue.png" transparent="1" alphatest="on" />
-                       <widget name="backuptext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
-               </screen>"""
-               
-       def keyLeft(self):
-               self["config"].handleKey(KEY_LEFT)
-
-       def keyRight(self):
-               self["config"].handleKey(KEY_RIGHT)
-
-       def keyNumberGlobal(self, number):
-               print "You pressed number", number
-               if (self["config"].getCurrent()[1].parent.enabled == True):
-                       self["config"].handleKey(KEY_0+number)
-
-       def keyCancel(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-               self.close()
-
-       def keySave(self):
-               for x in self["config"].list:
-                       x[1].save()
-               self.close()
-
-       def __init__(self, session, args = None):
-               Screen.__init__(self, session)
-               self.skin_path = plugin_path
-               
-               self["oktext"] = Label(_("OK"))
-               self["canceltext"] = Label(_("Cancel"))
-               self["backuptext"] = Label(_("Backup"))
-               self["restoretext"] = Label(_("Restore"))
-               self["restore"] = Pixmap()
-               self["backup"] = Pixmap()
-               self["ok"] = Pixmap()
-               self["cancel"] = Pixmap()
-               
-               self.path = ""
-               self.list = []
-               self["config"] = ConfigList(self.list)
-               self.createSetup()
-               
-               self["actions"] = NumberActionMap(["SetupActions"],
-               {
-                       "ok": self.keySave,
-                       "cancel": self.keyCancel,
-                       "left": self.keyLeft,
-                       "right": self.keyRight
-               }, -1)
-               
-               self["shortcuts"] = ActionMap(["ShortcutActions"],
-               {
-                       "red": self.keyCancel,
-                       "green": self.keySave,
-                       "blue": self.Backup,
-                       "yellow": self.Restore,
-               })
-               
-
-       def createSetup(self):
-               print "Creating BackupSetup"
-               self.list = [ ]
-               self["config"] = ConfigList(self.list)
-               self.backup = ConfigSubsection()
-               self.backup.type = ConfigSelection(choices = [("settings", _("enigma2 and network")), ("var", _("/var directory")), ("skin", _("/usr/share/enigma2 directory"))], default="settings")
-               self.backup.location = ConfigSelection(choices = [("hdd", _("Harddisk")), ("usb", _("USB Stick")), ("cf", _("CF Drive"))])
-               self.list.append(getConfigListEntry(_("Backup Mode"), self.backup.type))
-               self.list.append(getConfigListEntry(_("Backup Location"), self.backup.location))
-
-       def createBackupfolders(self):
-               self.path = BackupPath[self.backup.location.value]
-               print "Creating Backup Folder if not already there..."
-               if (path.exists(self.path) == False):
-                       makedirs(self.path)
-
-       def Backup(self):
-               print "this will start the backup now!"
-               self.session.openWithCallback(self.runBackup, MessageBox, _("Do you want to backup now?\nAfter pressing OK, please wait!"))     
-
-       def Restore(self):
-               print "this will start the restore now!"
-               self.session.open(RestoreMenu, self.backup)
-
-       def runBackup(self, result):
-               if result:
-                       if path.ismount(MountPoints[self.backup.location.value]):
-                               self.createBackupfolders()
-                               d = localtime()
-                               dt = date(d.tm_year, d.tm_mon, d.tm_mday)
-                               self.path = BackupPath[self.backup.location.value]
-                               if self.backup.type.value == "settings":
-                                       print "Backup Mode: Settings"
-                                       self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + self.path + "/" + str(dt) + "_settings_backup.tar.gz /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"])
-                               elif self.backup.type.value == "var":
-                                       print "Backup Mode: var"
-                                       self.session.open(Console, title = "Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_var_backup.tar.gz /var/"])
-                               elif self.backup.type.value == "skin":
-                                       print "Backup Mode: skin"
-                                       self.session.open(Console, title ="Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_skin_backup.tar.gz /usr/share/enigma2/"])
-                       else:
-                               self.session.open(MessageBox, _("Sorry your Backup destination does not exist\n\nPlease choose an other one."), MessageBox.TYPE_INFO)
-
-class RestoreMenu(Screen):
-       skin = """
-               <screen position="135,144" size="450,300" title="Restore Backups" >
-               <widget name="filelist" position="10,10" size="430,240" scrollbarMode="showOnDemand" />
-               <widget name="cancel" position="120,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />             
-               <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
-               <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
-               <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
-               </screen>"""
-
-       def __init__(self, session, backup):
-               Screen.__init__(self, session)
-               self.skin_path = plugin_path
-               self.backup = backup
-
-               self["canceltext"] = Label(_("Cancel"))
-               self["restoretext"] = Label(_("Restore"))
-               self["restore"] = Pixmap()
-               self["cancel"] = Pixmap()
-
-               self.sel = []
-               self.val = []
-               self.entry = False
-               self.exe = False
-               
-               self.path = ""
-
-               self["actions"] = NumberActionMap(["SetupActions"],
-               {
-                       "ok": self.KeyOk,
-                       "cancel": self.keyCancel
-               }, -1)
-
-               self["shortcuts"] = ActionMap(["ShortcutActions"],
-               {
-                       "red": self.keyCancel,
-                       "yellow": self.KeyOk,
-               })
-               self.flist = []
-               self["filelist"] = MenuList(self.flist)
-               self.fill_list()
-
-       def fill_list(self):
-               self.flist = []
-               self.path = BackupPath[self.backup.location.value]
-               if (path.exists(self.path) == False):
-                       makedirs(self.path)
-               for file in listdir(self.path):
-                       if (file.endswith(".tar.gz")):
-                               self.flist.append((file))
-                               self.entry = True
-                               self["filelist"].l.setList(self.flist)
-
-       def KeyOk(self):
-               if (self.exe == False) and (self.entry == True):
-                       self.sel = self["filelist"].getCurrent()
-                       self.val = self.path + self.sel
-                       self.session.openWithCallback(self.startRestore, MessageBox, _("are you sure you want to restore\nfollowing backup:\n" + self.sel + "\nEnigma2 will restart after the restore"))
-
-       def keyCancel(self):
-               self.close()
-
-       def startRestore(self, ret = False):
-               if (ret == True):
-                       self.exe = True
-                       self.session.open(Console, title = "Restore running", cmdlist = ["tar -xzvf " + self.path + "/" + self.sel + " -C /", "killall -9 enigma2"])
-
-       def Exit(self):
-               self.close()
-
-def BackupMain(session, **kwargs):
-       session.open(BackupSetup)
-
-def Plugins(path, **kwargs):
-       global plugin_path
-       plugin_path = path
-       return PluginDescriptor(name="Backup/Restore", description="Backup and Restore your Settings", icon="backup.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=BackupMain)
old mode 100644 (file)
new mode 100755 (executable)
index 4491eaf..10151f2
@@ -1 +1 @@
-SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash DiseqcTester
+SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash DiseqcTester
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
new file mode 100755 (executable)
index 0000000..947452e
--- /dev/null
@@ -0,0 +1,312 @@
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Screens.Console import Console
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.Pixmap import Pixmap
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.config import getConfigListEntry, configfile, ConfigSelection, ConfigSubsection, ConfigText, ConfigLocations
+from Components.config import config
+from Components.ConfigList import ConfigList,ConfigListScreen
+from Components.FileList import MultiFileSelectList
+from Plugins.Plugin import PluginDescriptor
+from enigma import eTimer
+from Tools.Directories import *
+from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK
+from time import gmtime, strftime, localtime
+from datetime import date
+
+
+config.plugins.configurationbackup = ConfigSubsection()
+config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+
+def getBackupPath():
+       backuppath = config.plugins.configurationbackup.backuplocation.value
+       if backuppath.endswith('/'):
+               return backuppath + 'backup'
+       else:
+               return backuppath + '/backup'
+
+def getBackupFilename():
+       return "enigma2settingsbackup.tar.gz"
+               
+
+class BackupScreen(Screen, ConfigListScreen):
+       skin = """
+               <screen position="135,144" size="350,310" title="Backup running..." >
+               <widget name="config" position="10,10" size="330,250" transparent="1" scrollbarMode="showOnDemand" />
+               </screen>"""
+               
+       def __init__(self, session, runBackup = False):
+               Screen.__init__(self, session)
+               self.session = session
+               self.runBackup = runBackup
+               self["actions"] = ActionMap(["WizardActions", "DirectionActions"], 
+               {
+                       "ok": self.close,
+                       "back": self.close,
+                       "cancel": self.close,
+               }, -1)
+               self.finished_cb = None
+               self.backuppath = getBackupPath()
+               self.backupfile = getBackupFilename()
+               self.fullbackupfilename = self.backuppath + "/" + self.backupfile
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               self.onLayoutFinish.append(self.layoutFinished)
+               if self.runBackup:
+                       self.onShown.append(self.doBackup)
+
+       def layoutFinished(self):
+               self.setWindowTitle()
+
+       def setWindowTitle(self):
+               self.setTitle(_("Backup running..."))
+
+       def doBackup(self):
+               try:
+                       if (path.exists(self.backuppath) == False):
+                               makedirs(self.backuppath)
+                       self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
+                       if path.exists(self.fullbackupfilename):
+                               dt = str(date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
+                               self.newfilename = self.backuppath + "/" + dt + '-' + self.backupfile
+                               if path.exists(self.newfilename):
+                                       remove(self.newfilename)
+                               rename(self.fullbackupfilename,self.newfilename)
+                       if self.finished_cb:
+                               self.session.openWithCallback(self.finished_cb, Console, title = _("Backup running"), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB,closeOnSuccess = True)
+                       else:
+                               self.session.open(Console, title = _("Backup running"), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB, closeOnSuccess = True)
+               except OSError:
+                       if self.finished_cb:
+                               self.session.openWithCallback(self.finished_cb, MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO)
+                       else:
+                               self.session.openWithCallback(self.backupErrorCB,MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO)
+
+       def backupFinishedCB(self,retval = None):
+               self.close(True)
+
+       def backupErrorCB(self,retval = None):
+               self.close(False)
+
+       def runAsync(self, finished_cb):
+               self.finished_cb = finished_cb
+               self.doBackup()
+               
+
+class BackupSelection(Screen):
+       skin = """
+       <screen position="135,125" size="450,310" title="Select files/folders to backup...">
+               <widget name="checkList" position="10,10" size="430,250" transparent="1" scrollbarMode="showOnDemand" />
+               <ePixmap position="0,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
+               <widget name="key_red" position="0,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />       
+               <ePixmap position="135,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
+               <widget name="key_green" position="135,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+               <ePixmap position="270,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
+               <widget name="key_yellow" position="270,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+       </screen>"""
+
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               self["key_red"] = Label(_("Cancel"))
+               self["key_green"] = Label(_("Save"))
+               self["key_yellow"] = Label()
+               
+               self.selectedFiles = config.plugins.configurationbackup.backupdirs.value
+               defaultDir = '/'
+               inhibitDirs = ["/bin", "/boot", "/dev", "/autofs", "/lib", "/proc", "/sbin", "/sys", "/hdd", "/tmp", "/mnt", "/media"]
+               self.filelist = MultiFileSelectList(self.selectedFiles, defaultDir, inhibitDirs = inhibitDirs )
+               self["checkList"] = self.filelist
+               
+               self["actions"] = ActionMap(["DirectionActions", "OkCancelActions", "ShortcutActions"],
+               {
+                       "cancel": self.exit,
+                       "red": self.exit,
+                       "yellow": self.changeSelectionState,
+                       "green": self.saveSelection,
+                       "ok": self.okClicked,
+                       "left": self.left,
+                       "right": self.right,
+                       "down": self.down,
+                       "up": self.up
+               }, -1)
+               if not self.selectionChanged in self["checkList"].onSelectionChanged:
+                       self["checkList"].onSelectionChanged.append(self.selectionChanged)
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               idx = 0
+               self["checkList"].moveToIndex(idx)
+               self.setWindowTitle()
+               self.selectionChanged()
+
+       def setWindowTitle(self):
+               self.setTitle(_("Select files/folders to backup..."))
+
+       def selectionChanged(self):
+               current = self["checkList"].getCurrent()[0]
+               if current[2] is True:
+                       self["key_yellow"].setText(_("Deselect"))
+               else:
+                       self["key_yellow"].setText(_("Select"))
+               
+       def up(self):
+               self["checkList"].up()
+
+       def down(self):
+               self["checkList"].down()
+
+       def left(self):
+               self["checkList"].pageUp()
+
+       def right(self):
+               self["checkList"].pageDown()
+
+       def changeSelectionState(self):
+               self["checkList"].changeSelectionState()
+               self.selectedFiles = self["checkList"].getSelectedList()
+
+       def saveSelection(self):
+               self.selectedFiles = self["checkList"].getSelectedList()
+               config.plugins.configurationbackup.backupdirs.value = self.selectedFiles
+               config.plugins.configurationbackup.backupdirs.save()
+               config.plugins.configurationbackup.save()
+               config.save()
+               self.close(None)
+
+       def exit(self):
+               self.close(None)
+
+       def okClicked(self):
+               if self.filelist.canDescent():
+                       self.filelist.descent()
+
+
+class RestoreMenu(Screen):
+       skin = """
+               <screen position="135,144" size="450,300" title="Restore backups..." >
+               <widget name="filelist" position="10,10" size="430,240" scrollbarMode="showOnDemand" />
+               <widget name="cancel" position="120,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />             
+               <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
+               <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
+               <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+               </screen>"""
+
+       def __init__(self, session, plugin_path):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               
+               self["canceltext"] = Label(_("Cancel"))
+               self["restoretext"] = Label(_("Restore"))
+               self["restore"] = Pixmap()
+               self["cancel"] = Pixmap()
+
+               self.sel = []
+               self.val = []
+               self.entry = False
+               self.exe = False
+               
+               self.path = ""
+
+               self["actions"] = NumberActionMap(["SetupActions"],
+               {
+                       "ok": self.KeyOk,
+                       "cancel": self.keyCancel
+               }, -1)
+
+               self["shortcuts"] = ActionMap(["ShortcutActions"],
+               {
+                       "red": self.keyCancel,
+                       "yellow": self.KeyOk,
+               })
+               self.flist = []
+               self["filelist"] = MenuList(self.flist)
+               self.fill_list()
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setWindowTitle()
+
+       def setWindowTitle(self):
+               self.setTitle(_("Restore backups..."))
+
+
+       def fill_list(self):
+               self.flist = []
+               self.path = getBackupPath()
+               if (path.exists(self.path) == False):
+                       makedirs(self.path)
+               for file in listdir(self.path):
+                       if (file.endswith(".tar.gz")):
+                               self.flist.append((file))
+                               self.entry = True
+                               self["filelist"].l.setList(self.flist)
+
+       def KeyOk(self):
+               if (self.exe == False) and (self.entry == True):
+                       self.sel = self["filelist"].getCurrent()
+                       self.val = self.path + self.sel
+                       self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore\nfollowing backup:\n" + self.sel + "\nSystem will restart after the restore!"))
+
+       def keyCancel(self):
+               self.close()
+
+       def startRestore(self, ret = False):
+               if (ret == True):
+                       self.exe = True
+                       self.session.open(Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.path + "/" + self.sel + " -C /", "killall -9 enigma2"])
+
+       def Exit(self):
+               self.close()
+
+class RestoreScreen(Screen, ConfigListScreen):
+       skin = """
+               <screen position="135,144" size="350,310" title="Restore running..." >
+               <widget name="config" position="10,10" size="330,250" transparent="1" scrollbarMode="showOnDemand" />
+               </screen>"""
+               
+       def __init__(self, session, runRestore = False):
+               Screen.__init__(self, session)
+               self.session = session
+               self.runRestore = runRestore
+               self["actions"] = ActionMap(["WizardActions", "DirectionActions"], 
+               {
+                       "ok": self.close,
+                       "back": self.close,
+                       "cancel": self.close,
+               }, -1)
+               self.finished_cb = None
+               self.backuppath = getBackupPath()
+               self.backupfile = getBackupFilename()
+               self.fullbackupfilename = self.backuppath + "/" + self.backupfile
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               self.onLayoutFinish.append(self.layoutFinished)
+               if self.runRestore:
+                       self.onShown.append(self.doRestore)
+
+       def layoutFinished(self):
+               self.setWindowTitle()
+
+       def setWindowTitle(self):
+               self.setTitle(_("Restore running..."))
+
+       def doRestore(self):
+               if self.finished_cb:
+                       self.session.openWithCallback(self.finished_cb, Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "killall -9 enigma2"])
+               else:
+                       self.session.open(Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "killall -9 enigma2"])
+
+       def backupFinishedCB(self,retval = None):
+               self.close(True)
+
+       def backupErrorCB(self,retval = None):
+               self.close(False)
+
+       def runAsync(self, finished_cb):
+               self.finished_cb = finished_cb
+               self.doRestore()
+               
+       
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
new file mode 100755 (executable)
index 0000000..1797e4f
--- /dev/null
@@ -0,0 +1,120 @@
+from Screens.Wizard import WizardSummary
+from Screens.WizardLanguage import WizardLanguage
+from Screens.Wizard import wizardManager
+from Screens.Rc import Rc
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
+from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
+from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK
+
+from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations, ConfigBoolean
+from Components.Harddisk import harddiskmanager
+config.misc.firstrun = ConfigBoolean(default = True)
+config.plugins.configurationbackup = ConfigSubsection()
+config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+
+
+backupfile = "enigma2settingsbackup.tar.gz"
+
+def checkConfigBackup():
+       parts = [ (r.description, r.mountpoint) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
+       for x in parts:
+               if x[1] == '/':
+                       parts.remove(x)
+       if len(parts):
+               for x in parts:
+                       if x[1].endswith('/'):
+                               fullbackupfile =  x[1] + 'backup/' + backupfile
+                               if fileExists(fullbackupfile):
+                                       config.plugins.configurationbackup.backuplocation.value = str(x[1])
+                                       config.plugins.configurationbackup.backuplocation.save()
+                                       config.plugins.configurationbackup.save()
+                                       return x
+                       else:
+                               fullbackupfile =  x[1] + '/backup/' + backupfile
+                               if fileExists(fullbackupfile):
+                                       config.plugins.configurationbackup.backuplocation.value = str(x[1])
+                                       config.plugins.configurationbackup.backuplocation.save()
+                                       config.plugins.configurationbackup.save()
+                                       return x
+               return None             
+
+def checkBackupFile():
+       backuplocation = config.plugins.configurationbackup.backuplocation.value
+       if backuplocation.endswith('/'):
+               fullbackupfile =  backuplocation + 'backup/' + backupfile
+               if fileExists(fullbackupfile):
+                       return True
+               else:
+                       return False
+       else:
+               fullbackupfile =  backuplocation + '/backup/' + backupfile
+               if fileExists(fullbackupfile):
+                       return True
+               else:
+                       return False
+
+if checkConfigBackup() is None:
+       backupAvailable = 0
+else:
+       backupAvailable = 1
+
+class ImageWizard(WizardLanguage, Rc):
+       skin = """
+               <screen name="ImageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
+                       <widget name="text" position="153,40" size="340,330" font="Regular;22" />
+                       <widget source="list" render="Listbox" position="43,340" size="490,180" scrollbarMode="showOnDemand" >
+                               <convert type="StringList" />
+                       </widget>
+                       <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
+                       <ePixmap pixmap="skin_default/buttons/button_red.png" position="40,225" zPosition="0" size="15,16" transparent="1" alphatest="on" />
+                       <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" />
+                       <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" alphatest="on" />
+                       <widget name="rc" pixmaps="skin_default/rc.png,skin_default/rcold.png" position="530,50" zPosition="10" size="154,500" alphatest="on" />
+                       <widget name="arrowdown" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowdown2" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowup" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+               </screen>"""
+       def __init__(self, session):
+               self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/imagewizard.xml")
+               WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False)
+               Rc.__init__(self)
+               self.session = session
+               self["wizard"] = Pixmap()
+               self.selectedDevice = None
+               
+       def markDone(self):
+               pass
+
+       def listDevices(self):
+               list = [ (r.description, r.mountpoint) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
+               for x in list:
+                       result = access(x[1], W_OK) and access(x[1], R_OK)
+                       if result is False or x[1] == '/':
+                               list.remove(x)
+               for x in list:
+                       if x[1].startswith('/autofs/'):
+                               list.remove(x)  
+               return list
+
+       def deviceSelectionMade(self, index):
+               self.deviceSelect(index)
+               
+       def deviceSelectionMoved(self):
+               self.deviceSelect(self.selection)
+               
+       def deviceSelect(self, device):
+               self.selectedDevice = device
+               config.plugins.configurationbackup.backuplocation.value = self.selectedDevice
+               config.plugins.configurationbackup.backuplocation.save()
+               config.plugins.configurationbackup.save()
+
+       
+if config.misc.firstrun.value:
+       wizardManager.registerWizard(ImageWizard, backupAvailable, priority = 10)
+
old mode 100644 (file)
new mode 100755 (executable)
similarity index 75%
rename from lib/python/Plugins/SystemPlugins/ConfigurationBackup/LICENSE
rename to lib/python/Plugins/SystemPlugins/SoftwareManager/LICENSE
index 9970059..835b9dc
@@ -10,3 +10,8 @@ is licensed by Dream Multimedia GmbH.
 This plugin is NOT free software. It is open source, you are allowed to
 modify it (if you keep the license), but it may not be commercially 
 distributed other than under the conditions noted above.
+
+Some Icons used are taken from NX10 icons by Mazenl77
+(http://www.iconspedia.com/pack/nx10-1-6/)
+licensed under Creative Commons Attribution 3.0 Unported
+http://creativecommons.org/licenses/by/3.0/
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/Makefile.am b/lib/python/Plugins/SystemPlugins/SoftwareManager/Makefile.am
new file mode 100755 (executable)
index 0000000..f94498f
--- /dev/null
@@ -0,0 +1,12 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/SoftwareManager
+
+install_PYTHON =       \
+       __init__.py \
+       plugin.py \
+       BackupRestore.py \
+       ImageWizard.py \
+       imagewizard.xml \
+       *.png 
+
+install_DATA = LICENSE
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/imagewizard.xml b/lib/python/Plugins/SystemPlugins/SoftwareManager/imagewizard.xml
new file mode 100755 (executable)
index 0000000..98658b7
--- /dev/null
@@ -0,0 +1,100 @@
+<wizard>\r
+       <step id="restorequestion">\r
+               <condition>\r
+from Plugins.SystemPlugins.SoftwareManager.ImageWizard import checkConfigBackup\r
+self.backuppath = checkConfigBackup()\r
+self.condition = (self.backuppath is not None and config.misc.firstrun.value)\r
+               </condition>\r
+               <text value="Do you want to restore your settings?" />\r
+               <list>\r
+                       <listentry caption="Yes, restore the settings now" step="restore" />\r
+                       <listentry caption="No, just start my dreambox" step="end" />\r
+               </list>\r
+               <code>\r
+self.clearSelectedKeys()\r
+self.selectKey("OK")\r
+               </code>\r
+       </step>\r
+\r
+       <step id="welcome">\r
+               <text value="Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware." />\r
+               <list>\r
+                       <listentry caption="OK, guide me through the upgrade process" step="backupquestion" />\r
+                       <listentry caption="Exit the wizard" step="end" />\r
+               </list>\r
+       </step>\r
+\r
+       <step id="backupquestion">\r
+               <text value="The wizard can backup your current settings. Do you want to do a backup now?" />\r
+               <list>\r
+                       <listentry caption="Yes, backup my settings!" step="backupwhere" />\r
+                       <listentry caption="No backup needed" step="upgrade" />\r
+               </list>\r
+       </step>\r
+\r
+       <step id="backupwhere" nextstep="backup">\r
+               <text value="Where do you want to backup your settings?" />\r
+               <list type="dynamic" source="listDevices" evaluation="deviceSelectionMade" onselect="deviceSelectionMoved" />\r
+       </step>\r
+\r
+       <step id="backup" nextstep="backupresult">\r
+               <text value="You have chosen to backup your settings. Please press OK to start the backup now." />\r
+               <config screen="BackupScreen" module="Plugins.SystemPlugins.SoftwareManager.BackupRestore" type="ConfigList" />\r
+               <code pos="after" async="yes">\r
+self.currStep = self.getStepWithID('backupresult')\r
+self.afterAsyncCode()\r
+               </code> \r
+       </step>\r
+               \r
+       <step id="backupresult" nextstep="upgrade">\r
+               <condition>\r
+from Plugins.SystemPlugins.SoftwareManager.ImageWizard import checkBackupFile\r
+self.backuppath = checkBackupFile()\r
+self.condition = (self.backuppath is True)\r
+               </condition>\r
+               <text value="Your backup succeeded. We will now continue to explain the further upgrade process." />\r
+       </step>\r
+\r
+       <step id="backupresult" nextstep="backupwhere">\r
+               <condition>\r
+from Plugins.SystemPlugins.SoftwareManager.ImageWizard import checkBackupFile\r
+self.backuppath = checkBackupFile()\r
+self.condition = (self.backuppath is False)\r
+               </condition>\r
+               <text value="The backup failed. Please choose a different backup location." />\r
+       </step>\r
+\r
+       <step id="restore" nextstep="backupresult">\r
+               <text value="You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now." />\r
+               <config screen="RestoreScreen" module="Plugins.SystemPlugins.SoftwareManager.BackupRestore" type="ConfigList" />\r
+       </step>\r
+               \r
+\r
+       <step id="upgradehow">\r
+               <text value="The wizard can backup your current settings. Do you want to do a backup now?" />\r
+               <list>\r
+                       <listentry caption="Install a new image with your web browser" step="upgrade" />\r
+                       <listentry caption="Install a new image with a USB stick" step="upgradeUSB" />\r
+               </list>\r
+       </step>\r
+               \r
+       <step id="upgrade">\r
+               <text value="You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\nYour dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings." />\r
+               <list>\r
+                       <listentry caption="Yes, perform a shutdown now." step="shutdown" />\r
+                       <listentry caption="No, do nothing." step="end" />\r
+               </list>\r
+       </step>\r
+\r
+       <step id="shutdown" nextstep="shutdown">\r
+               <code>\r
+from enigma import quitMainloop\r
+quitMainloop(1)\r
+               </code>\r
+               <text value="Your dreambox is shutting down. Please stand by..." />\r
+       </step>\r
+               \r
+       <step id="end">\r
+               <text value="The wizard is finished now." />\r
+       </step>\r
+</wizard>\r
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png
new file mode 100755 (executable)
index 0000000..710f420
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/installable.png differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png
new file mode 100755 (executable)
index 0000000..d6a1bc1
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/installed.png differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
new file mode 100755 (executable)
index 0000000..09b61bd
--- /dev/null
@@ -0,0 +1,738 @@
+from Plugins.Plugin import PluginDescriptor
+from Screens.Console import Console
+from Screens.ChoiceBox import ChoiceBox
+from Screens.MessageBox import MessageBox
+from Screens.Screen import Screen
+from Screens.Ipkg import Ipkg
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.Input import Input
+from Components.Ipkg import IpkgComponent
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.Sources.List import List
+from Components.Slider import Slider
+from Components.Harddisk import harddiskmanager
+from Components.config import config,getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations
+from Components.Console import Console
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+from Components.SelectionList import SelectionList
+from Components.PluginComponent import plugins
+from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.LoadPixmap import LoadPixmap
+from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont
+from cPickle import dump, load
+
+from os import path as os_path, system as os_system, unlink, stat, mkdir, popen, makedirs, listdir, access, rename, remove, W_OK, R_OK, F_OK
+from time import time, gmtime, strftime, localtime
+from stat import ST_MTIME
+from datetime import date
+
+from ImageWizard import ImageWizard
+from BackupRestore import BackupSelection, RestoreMenu, BackupScreen, RestoreScreen, getBackupPath, getBackupFilename
+
+config.plugins.configurationbackup = ConfigSubsection()
+config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+
+def write_cache(cache_file, cache_data):
+       #Does a cPickle dump
+       if not os_path.isdir( os_path.dirname(cache_file) ):
+               try:
+                       mkdir( os_path.dirname(cache_file) )
+               except OSError:
+                           print os_path.dirname(cache_file), 'is a file'
+       fd = open(cache_file, 'w')
+       dump(cache_data, fd, -1)
+       fd.close()
+
+def valid_cache(cache_file, cache_ttl):
+       #See if the cache file exists and is still living
+       try:
+               mtime = stat(cache_file)[ST_MTIME]
+       except:
+               return 0
+       curr_time = time()
+       if (curr_time - mtime) > cache_ttl:
+               return 0
+       else:
+               return 1
+
+def load_cache(cache_file):
+       #Does a cPickle load
+       fd = open(cache_file)
+       cache_data = load(fd)
+       fd.close()
+       return cache_data
+
+
+class UpdatePluginMenu(Screen):
+       skin = """
+               <screen name="UpdatePluginMenu" position="90,130" size="550,330" title="Softwaremanager..." >
+                       <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
+                       <widget source="menu" render="Listbox" position="20,20" size="230,260" scrollbarMode="showOnDemand">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (2, 2), size = (230, 22), flags = RT_HALIGN_LEFT, text = 1), # index 0 is the MenuText,
+                                               ],
+                                       "fonts": [gFont("Regular", 20)],
+                                       "itemHeight": 25
+                                       }
+                               </convert>
+                       </widget>
+                       <widget source="menu" render="Listbox" position="280,10" size="230,300" scrollbarMode="showNever" selectionDisabled="1">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (2, 2), size = (230, 300), flags = RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, text = 2), # index 0 is the MenuText,
+                                               ],
+                                       "fonts": [gFont("Regular", 20)],
+                                       "itemHeight": 230
+                                       }
+                               </convert>
+                       </widget>
+               </screen>"""
+               
+       def __init__(self, session, args = 0):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               self.menu = args
+               self.list = []
+               self.oktext = _("\nPress OK on your remote control to continue.")
+               self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
+               if self.menu == 0:
+                       self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + self.oktext) )
+                       self.list.append(("software-restore", _("Software restore"), _("\nRestore your Dreambox with a new firmware." ) + self.oktext))
+                       self.list.append(("system-backup", _("Backup system settings"), _("\nBackup your Dreambox settings." ) + self.oktext))
+                       self.list.append(("system-restore",_("Restore system settings"), _("\nRestore your Dreambox settings." ) + self.oktext))
+                       if config.usage.setup_level.index >= 2: # expert+
+                               self.list.append(("advanced", _("Advanced Options"), _("\nAdvanced options and settings." ) + self.oktext))
+               elif self.menu == 1:
+                       self.list.append(("ipkg-manager", _("Packet management"),  _("\nView, install and remove available or installed packages." ) + self.oktext))
+                       self.list.append(("ipkg-install", _("Install local IPKG"),  _("\nScan for local packages and install them." ) + self.oktext))
+                       self.list.append(("advancedrestore", _("Advanced restore"), _("\nRestore your backups by date." ) + self.oktext))
+                       self.list.append(("backuplocation", _("Choose backup location"),  _("\nSelect your backup device.\nCurrent device: " ) + config.plugins.configurationbackup.backuplocation.value + self.oktext ))
+                       self.list.append(("backupfiles", _("Choose backup files"),  _("Select files for backup. Currently selected:\n" ) + self.backupdirs + self.oktext))
+                       self.list.append(("ipkg-source",_("Choose upgrade source"), _("\nEdit the upgrade source address." ) + self.oktext))
+
+               self["menu"] = List(self.list)
+                               
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],
+               {
+                       "ok": self.go,
+                       "back": self.close,
+                       "red": self.close,
+               }, -1)
+
+               self.onLayoutFinish.append(self.layoutFinished)
+               self.backuppath = getBackupPath()
+               self.backupfile = getBackupFilename()
+               self.fullbackupfilename = self.backuppath + "/" + self.backupfile
+               self.onShown.append(self.setWindowTitle)
+               
+       def layoutFinished(self):
+               idx = 0
+               self["menu"].index = idx
+               
+       def setWindowTitle(self):
+               self.setTitle(_("Software manager..."))
+               
+       def go(self):
+               current = self["menu"].getCurrent()
+               if current:
+                       current = current[0]
+                       if self.menu == 0:
+                               if (current == "software-restore"):
+                                       self.session.open(ImageWizard)
+                               elif (current == "software-update"):
+                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to update your Dreambox?")+"\n"+_("\nAfter pressing OK, please wait!"))
+                               elif (current == "advanced"):
+                                       self.session.open(UpdatePluginMenu, 1)
+                               elif (current == "system-backup"):
+                                       self.session.openWithCallback(self.backupDone,BackupScreen, runBackup = True)
+                               elif (current == "system-restore"):
+                                       if os_path.exists(self.fullbackupfilename):
+                                               self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore your Enigma2 backup?\nEnigma2 will restart after the restore"))
+                                       else:   
+                                               self.session.open(MessageBox, _("Sorry no backups found!"), MessageBox.TYPE_INFO)
+                       elif self.menu == 1:
+                               if (current == "ipkg-manager"):
+                                       self.session.open(PacketManager, self.skin_path)
+                               elif (current == "ipkg-source"):
+                                       self.session.open(IPKGSource)
+                               elif (current == "ipkg-install"):
+                                       try:
+                                               from Plugins.Extensions.MediaScanner.plugin import main
+                                               main(self.session)
+                                       except:
+                                               self.session.open(MessageBox, _("Sorry MediaScanner is not installed!"), MessageBox.TYPE_INFO)
+                               elif (current == "backuplocation"):
+                                       parts = [ (r.description, r.mountpoint, self.session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
+                                       for x in parts:
+                                               if not access(x[1], F_OK|R_OK|W_OK) or x[1] == '/':
+                                                       parts.remove(x)
+                                       for x in parts:
+                                               if x[1].startswith('/autofs/'):
+                                                       parts.remove(x)
+                                       if len(parts):
+                                               self.session.openWithCallback(self.backuplocation_choosen, ChoiceBox, title = _("Please select medium to use as backup location"), list = parts)
+                               elif (current == "backupfiles"):
+                                       self.session.openWithCallback(self.backupfiles_choosen,BackupSelection)
+                               elif (current == "advancedrestore"):
+                                       self.session.open(RestoreMenu, self.skin_path)
+
+       def backupfiles_choosen(self, ret):
+               self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
+
+       def backuplocation_choosen(self, option):
+               if option is not None:
+                       config.plugins.configurationbackup.backuplocation.value = str(option[1])
+               config.plugins.configurationbackup.backuplocation.save()
+               config.plugins.configurationbackup.save()
+               config.save()
+               self.createBackupfolders()
+       
+       def runUpgrade(self, result):
+               if result:
+                       self.session.open(UpdatePlugin, self.skin_path)
+
+       """def runFinished(self):
+               self.session.openWithCallback(self.reboot, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+               
+       def reboot(self, result):
+               if result is None:
+                       return
+               if result:
+                       quitMainloop(3)"""
+
+       def createBackupfolders(self):
+               print "Creating backup folder if not already there..."
+               self.backuppath = getBackupPath()
+               try:
+                       if (os_path.exists(self.backuppath) == False):
+                               makedirs(self.backuppath)
+               except OSError:
+                       self.session.open(MessageBox, _("Sorry, your backup destination is not writeable.\n\nPlease choose another one."), MessageBox.TYPE_INFO)
+
+       def backupDone(self,retval = None):
+               if retval is True:
+                       self.session.open(MessageBox, _("Backup done."), MessageBox.TYPE_INFO)
+               else:
+                       self.session.open(MessageBox, _("Backup failed."), MessageBox.TYPE_INFO)
+
+       def startRestore(self, ret = False):
+               if (ret == True):
+                       self.exe = True
+                       self.session.open(RestoreScreen, runRestore = True)
+
+
+class IPKGSource(Screen):
+       skin = """
+               <screen position="100,100" size="550,60" title="IPKG source" >
+                       <widget name="text" position="0,0" size="550,25" font="Regular;20" backgroundColor="background" foregroundColor="#cccccc" />
+               </screen>"""
+               
+       def __init__(self, session, args = None):
+               Screen.__init__(self, session)
+               self.session = session
+
+               #FIXMEEEE add handling for more than one feed conf file!
+               text = ""
+               try:
+                       fp = file('/etc/ipkg/official-feed.conf', 'r')
+                       sources = fp.readlines()
+                       if sources:
+                               text = sources[0]
+                       fp.close()
+               except IOError:
+                       pass
+
+               self["text"] = Input(text, maxSize=False, type=Input.TEXT)
+
+               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "TextEntryActions", "KeyboardInputActions"], 
+               {
+                       "ok": self.go,
+                       "back": self.close,
+                       "left": self.keyLeft,
+                       "right": self.keyRight,
+                       "home": self.keyHome,
+                       "end": self.keyEnd,
+                       "deleteForward": self.keyDeleteForward,
+                       "deleteBackward": self.keyDeleteBackward,
+                       "1": self.keyNumberGlobal,
+                       "2": self.keyNumberGlobal,
+                       "3": self.keyNumberGlobal,
+                       "4": self.keyNumberGlobal,
+                       "5": self.keyNumberGlobal,
+                       "6": self.keyNumberGlobal,
+                       "7": self.keyNumberGlobal,
+                       "8": self.keyNumberGlobal,
+                       "9": self.keyNumberGlobal,
+                       "0": self.keyNumberGlobal
+               }, -1)
+               
+       def go(self):
+               text = self["text"].getText()
+               if text:
+                       fp = file('/etc/ipkg/official-feed.conf', 'w')
+                       fp.write()
+                       fp.close()
+               self.close()
+               
+       def keyLeft(self):
+               self["text"].left()
+       
+       def keyRight(self):
+               self["text"].right()
+       
+       def keyHome(self):
+               self["text"].home()
+       
+       def keyEnd(self):
+               self["text"].end()
+       
+       def keyDeleteForward(self):
+               self["text"].delete()
+       
+       def keyDeleteBackward(self):
+               self["text"].deleteBackward()
+       
+       def keyNumberGlobal(self, number):
+               print "pressed", number
+               self["text"].number(number)
+
+
+class PacketManager(Screen):
+       skin = """
+               <screen position="90,80" size="530,420" title="IPKG upgrade..." >
+                       <widget source="list" render="Listbox" position="5,10" size="520,365" scrollbarMode="showOnDemand">
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [
+                                                       MultiContentEntryText(pos = (5, 1), size = (440, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (5, 26), size = (440, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+                                                       MultiContentEntryPixmapAlphaTest(pos = (445, 2), size = (48, 48), png = 4), # index 4 is the status pixmap
+                                                       MultiContentEntryPixmapAlphaTest(pos = (5, 50), size = (510, 2), png = 5), # index 4 is the div pixmap
+                                               ],
+                                       "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
+                                       "itemHeight": 52
+                                       }
+                               </convert>
+                       </widget>
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="closetext" position="20,390" size="140,21" zPosition="10" font="Regular;21" transparent="1" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="160,380" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="reloadtext" position="170,390" size="300,21" zPosition="10" font="Regular;21" transparent="1" />
+               </screen>"""
+               
+       def __init__(self, session, plugin_path, args = None):
+               Screen.__init__(self, session)
+               self.session = session
+               self.skin_path = plugin_path
+
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"], 
+               {
+                       "ok": self.go,
+                       "back": self.exit,
+                       "red": self.exit,
+                       "green": self.reload,
+               }, -1)
+               
+               self.list = []
+               self.statuslist = []
+               self["list"] = List(self.list)
+               self["closetext"] = Label(_("Close"))
+               self["reloadtext"] = Label(_("Reload"))
+
+               self.list_updating = True
+               self.packetlist = []
+               self.installed_packetlist = {}
+               self.Console = Console()
+               self.cmdList = []
+               self.cachelist = []
+               self.cache_ttl = 86400  #600 is default, 0 disables, Seconds cache is considered valid (24h should be ok for caching ipkgs)
+               self.cache_file = '/usr/lib/enigma2/python/Plugins/SystemPlugins/SoftwareManager/packetmanager.cache' #Path to cache directory   
+               self.oktext = _("\nAfter pressing OK, please wait!")
+
+               self.ipkg = IpkgComponent()
+               self.ipkg.addCallback(self.ipkgCallback)
+               self.onShown.append(self.setWindowTitle)
+               self.onLayoutFinish.append(self.rebuildList)
+
+       def exit(self):
+               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()
+
+       def reload(self):
+               if (os_path.exists(self.cache_file) == True):
+                       remove(self.cache_file)
+                       self.list_updating = True
+                       self.rebuildList()
+                       
+       def setWindowTitle(self):
+               self.setTitle(_("Packet manager"))
+
+       def setStatus(self,status = None):
+               if status:
+                       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"))
+                               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"))
+                               self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
+                               self['list'].setList(self.statuslist)                           
+
+       def rebuildList(self):
+               self.setStatus('update')
+               self.inv_cache = 0
+               self.vc = valid_cache(self.cache_file, self.cache_ttl)
+               if self.cache_ttl > 0 and self.vc != 0:
+                       try:
+                               self.buildPacketList()
+                       except:
+                               self.inv_cache = 1
+               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
+                       self.run = 0
+                       self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+
+       def go(self, returnValue = None):
+               cur = self["list"].getCurrent()
+               if cur:
+                       status = cur[3]
+                       package = cur[0]
+                       self.cmdList = []
+                       if status == 'installed':
+                               self.cmdList.append((IpkgComponent.CMD_REMOVE, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runRemove, MessageBox, _("Do you want to remove the package:\n" + package + "\n" + self.oktext))
+                       elif status == 'upgradeable':
+                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to upgrade the package:\n" + package + "\n" + self.oktext))
+                       elif status == "installable":
+                               self.cmdList.append((IpkgComponent.CMD_INSTALL, { "package": package }))
+                               if len(self.cmdList):
+                                       self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to install the package:\n" + package + "\n" + self.oktext))
+
+       def runRemove(self, result):
+               if result:
+                       self.session.openWithCallback(self.runRemoveFinished, Ipkg, cmdList = self.cmdList)
+
+       def runRemoveFinished(self):
+               self.session.openWithCallback(self.RemoveReboot, MessageBox, _("Remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+
+       def RemoveReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       cur = self["list"].getCurrent()
+                       if cur:
+                               item = self['list'].getIndex()
+                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installable')
+                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installable']
+                               self['list'].setList(self.list)
+                               write_cache(self.cache_file, self.cachelist)
+                               self.reloadPluginlist()
+               if result:
+                       quitMainloop(3)
+
+       def runUpgrade(self, result):
+               if result:
+                       self.session.openWithCallback(self.runUpgradeFinished, Ipkg, cmdList = self.cmdList)
+
+       def runUpgradeFinished(self):
+               self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
+               
+       def UpgradeReboot(self, result):
+               if result is None:
+                       return
+               if result is False:
+                       cur = self["list"].getCurrent()
+                       if cur:
+                               item = self['list'].getIndex()
+                               self.list[item] = self.buildEntryComponent(cur[0], cur[1], cur[2], 'installed')
+                               self.cachelist[item] = [cur[0], cur[1], cur[2], 'installed']
+                               self['list'].setList(self.list)
+                               write_cache(self.cache_file, self.cachelist)
+                               self.reloadPluginlist()
+               if result:
+                       quitMainloop(3)
+
+       def ipkgCallback(self, event, param):
+               if event == IpkgComponent.EVENT_ERROR:
+                       self.list_updating = False
+                       self.setStatus('error')
+               elif event == IpkgComponent.EVENT_DONE:
+                       if self.list_updating:
+                               self.list_updating = False
+                               if not self.Console:
+                                       self.Console = Console()
+                               cmd = "ipkg list"
+                               self.Console.ePopen(cmd, self.IpkgList_Finished)
+               #print event, "-", param
+               pass
+
+       def IpkgList_Finished(self, result, retval, extra_args = None):
+               if len(result):
+                       self.packetlist = []
+                       for x in result.splitlines():
+                               split = x.split(' - ')
+                               if not (split[0].strip().endswith('-dbg') or split[0].strip().endswith('-dev')):
+                                       self.packetlist.append([split[0].strip(), split[1].strip(),split[2].strip()])
+               if not self.Console:
+                       self.Console = Console()
+               cmd = "ipkg list_installed"
+               self.Console.ePopen(cmd, self.IpkgListInstalled_Finished)
+
+       def IpkgListInstalled_Finished(self, result, retval, extra_args = None):
+               if len(result):
+                       self.installed_packetlist = {}
+                       for x in result.splitlines():
+                               split = x.split(' - ')
+                               if not (split[0].strip().endswith('-dbg') or split[0].strip().endswith('-dev')):
+                                       self.installed_packetlist[split[0].strip()] = split[1].strip()
+               self.buildPacketList()
+
+       def buildEntryComponent(self, name, version, description, state):
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               if state == 'installed':
+                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                       return((name, version, description, state, installedpng, divpng))       
+               elif state == 'upgradeable':
+                       upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgradeable.png"))
+                       return((name, version, description, state, upgradeablepng, divpng))     
+               else:
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                       return((name, version, description, state, installablepng, divpng))
+
+       def buildPacketList(self):
+               self.list = []
+               self.cachelist = []
+
+               if self.cache_ttl > 0 and self.vc != 0:
+                       print 'Loading packagelist cache from ',self.cache_file
+                       try:
+                               self.cachelist = load_cache(self.cache_file)
+                               if len(self.cachelist) > 0:
+                                       for x in self.cachelist:
+                                               self.list.append(self.buildEntryComponent(x[0], x[1], x[2], x[3]))
+                                       self['list'].setList(self.list)
+                       except:
+                               self.inv_cache = 1
+
+               if self.cache_ttl == 0 or self.inv_cache == 1 or self.vc == 0:
+                       print 'rebuilding fresh package list'
+                       for x in self.packetlist:
+                               status = ""
+                               if self.installed_packetlist.has_key(x[0].strip()):
+                                       if self.installed_packetlist[x[0].strip()] == x[1].strip():
+                                               status = "installed"
+                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                                       else:
+                                               status = "upgradeable"
+                                               self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                               else:
+                                       status = "installable"
+                                       self.list.append(self.buildEntryComponent(x[0].strip(), x[1].strip(), x[2].strip(), status))
+                               if not (x[0].strip().endswith('-dbg') or x[0].strip().endswith('-dev')):
+                                       self.cachelist.append([x[0].strip(), x[1].strip(), x[2].strip(), status])       
+                       write_cache(self.cache_file, self.cachelist)
+                       self['list'].setList(self.list)
+
+       def reloadPluginlist(self):
+               plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
+
+class UpdatePlugin(Screen):
+       skin = """
+               <screen position="100,100" size="550,200" title="Software Update..." >
+                       <widget name="activityslider" position="0,0" size="550,5"  />
+                       <widget name="slider" position="0,100" size="550,30"  />
+                       <widget name="package" position="10,30" size="540,20" font="Regular;18"/>
+                       <widget name="status" position="10,60" size="540,45" font="Regular;18"/>
+               </screen>"""
+               
+       def __init__(self, session, args = None):
+               self.skin = UpdatePlugin.skin
+               Screen.__init__(self, session)
+               
+               self.sliderPackages = { "dreambox-dvb-modules": 1, "enigma2": 2, "tuxbox-image-info": 3 }
+               
+               self.slider = Slider(0, 4)
+               self["slider"] = self.slider
+               self.activityslider = Slider(0, 100)
+               self["activityslider"] = self.activityslider
+               self.status = Label(_("Upgrading Dreambox... Please wait"))
+               self["status"] = self.status
+               self.package = Label()
+               self["package"] = self.package
+               
+               self.packages = 0
+               self.error = 0
+               
+               self.activity = 0
+               self.activityTimer = eTimer()
+               self.activityTimer.callback.append(self.doActivityTimer)
+               self.activityTimer.start(100, False)
+                               
+               self.ipkg = IpkgComponent()
+               self.ipkg.addCallback(self.ipkgCallback)
+               
+               self.updating = True
+               self.package.setText(_("Package list update"))
+               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
+                       
+               self["actions"] = ActionMap(["WizardActions"], 
+               {
+                       "ok": self.exit,
+                       "back": self.exit
+               }, -1)
+               
+       def doActivityTimer(self):
+               self.activity += 1
+               if self.activity == 100:
+                       self.activity = 0
+               self.activityslider.setValue(self.activity)
+               
+       def ipkgCallback(self, event, param):
+               if event == IpkgComponent.EVENT_DOWNLOAD:
+                       self.status.setText(_("Downloading"))
+               elif event == IpkgComponent.EVENT_UPGRADE:
+                       if self.sliderPackages.has_key(param):
+                               self.slider.setValue(self.sliderPackages[param])
+                       self.package.setText(param)
+                       self.status.setText(_("Upgrading"))
+                       self.packages += 1
+               elif event == IpkgComponent.EVENT_INSTALL:
+                       self.package.setText(param)
+                       self.status.setText(_("Installing"))
+                       self.packages += 1
+               elif event == IpkgComponent.EVENT_CONFIGURING:
+                       self.package.setText(param)
+                       self.status.setText(_("Configuring"))
+               elif event == IpkgComponent.EVENT_MODIFIED:
+                       self.session.openWithCallback(
+                               self.modificationCallback,
+                               MessageBox,
+                               _("A configuration file (%s) was modified since Installation.\nDo you want to keep your version?") % (param)
+                       )
+               elif event == IpkgComponent.EVENT_ERROR:
+                       self.error += 1
+               elif event == IpkgComponent.EVENT_DONE:
+                       if self.updating:
+                               self.updating = False
+                               self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE, args = {'test_only': False})
+                       elif self.error == 0:
+                               self.slider.setValue(4)
+                               
+                               self.activityTimer.stop()
+                               self.activityslider.setValue(0)
+                               
+                               self.package.setText("")
+                               self.status.setText(_("Done - Installed or upgraded %d packages") % self.packages)
+                       else:
+                               self.activityTimer.stop()
+                               self.activityslider.setValue(0)
+                               error = _("your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox.")
+                               if self.packages == 0:
+                                       error = _("No packages were upgraded yet. So you can check your network and try again.")
+                               if self.updating:
+                                       error = _("Your dreambox isn't connected to the internet properly. Please check it and try again.")
+                               self.status.setText(_("Error") +  " - " + error)
+               #print event, "-", param
+               pass
+
+       def modificationCallback(self, res):
+               self.ipkg.write(res and "N" or "Y")
+
+       def exit(self):
+               if not self.ipkg.isRunning():
+                       if self.packages != 0 and self.error == 0:
+                               self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"))
+                       else:
+                               self.close()
+                       
+       def exitAnswer(self, result):
+               if result is not None and result:
+                       quitMainloop(2)
+               self.close()
+
+
+
+class IpkgInstaller(Screen):
+       skin = """
+               <screen position="100,100" size="550,400" title="..." >
+                       <widget name="red" halign="center" valign="center" position="0,0" size="140,60" backgroundColor="red" font="Regular;21" />
+                       <widget name="green" halign="center" valign="center" position="140,0" text="Install selected" size="140,60" backgroundColor="green" font="Regular;21" />
+                       <widget name="yellow" halign="center" valign="center" position="280,0" size="140,60" backgroundColor="yellow" font="Regular;21" />
+                       <widget name="blue" halign="center" valign="center" position="420,0" size="140,60" backgroundColor="blue" font="Regular;21" />
+                       <widget name="list" position="0,60" size="550,360" />
+               </screen>
+               """
+       
+       def __init__(self, session, list):
+               self.skin = IpkgInstaller.skin
+               Screen.__init__(self, session)
+
+               self.list = SelectionList()
+               self["list"] = self.list
+               for listindex in range(len(list)):
+                       self.list.addSelection(list[listindex], list[listindex], listindex, True)
+
+               self["red"] = Label()
+               self["green"] = Label()
+               self["yellow"] = Label()
+               self["blue"] = Label()
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], 
+               {
+                       "ok": self.list.toggleSelection, 
+                       "cancel": self.close, 
+                       "green": self.install
+               }, -1)
+               
+       def install(self):
+               list = self.list.getSelectionsList()
+               cmdList = []
+               for item in list:
+                       cmdList.append((IpkgComponent.CMD_INSTALL, { "package": item[1] }))
+               self.session.open(Ipkg, cmdList = cmdList)
+
+def filescan_open(list, session, **kwargs):
+       filelist = [x.path for x in list]
+       session.open(IpkgInstaller, filelist) # list
+
+def filescan(**kwargs):
+       from Components.Scanner import Scanner, ScanPath
+       return \
+               Scanner(mimetypes = ["application/x-debian-package"], 
+                       paths_to_scan = 
+                               [
+                                       ScanPath(path = "ipk", with_subdirs = True), 
+                                       ScanPath(path = "", with_subdirs = False), 
+                               ], 
+                       name = "Ipkg", 
+                       description = "Install software updates...", 
+                       openfnc = filescan_open, )
+
+def UpgradeMain(session, **kwargs):
+       session.open(UpdatePluginMenu)
+
+def startSetup(menuid):
+       if menuid != "setup": 
+               return [ ]
+       return [(_("Software manager") + "...", UpgradeMain, "software_manager", 50)]
+
+def Plugins(path, **kwargs):
+       global plugin_path
+       plugin_path = path
+       list = [
+               PluginDescriptor(name=_("Software manager"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup), 
+               PluginDescriptor(name=_("Ipkg"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)
+       ]
+       if config.usage.setup_level.index >= 2: # expert+       
+               list.append(PluginDescriptor(name=_("Software manager"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=UpgradeMain))     
+       return list
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/upgradeable.png b/lib/python/Plugins/SystemPlugins/SoftwareManager/upgradeable.png
new file mode 100755 (executable)
index 0000000..edbbdee
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/upgradeable.png differ
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/.cvsignore b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/.cvsignore
deleted file mode 100644 (file)
index 138b9cc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.pyo
-Makefile
-Makefile.in
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/Makefile.am b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/Makefile.am
deleted file mode 100644 (file)
index 9848f3d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/SoftwareUpdate
-
-install_PYTHON =       \
-       __init__.py \
-       plugin.py       \
-       update.png 
-
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/__init__.py b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py
deleted file mode 100644 (file)
index 8127514..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-from Components.ActionMap import ActionMap, NumberActionMap
-from Components.GUIComponent import GUIComponent
-from Components.Input import Input
-from Components.Ipkg import IpkgComponent
-from Components.Label import Label
-from Components.MenuList import MenuList
-from Components.Slider import Slider
-from Plugins.Plugin import PluginDescriptor
-from Screens.Console import Console
-from Screens.ImageWizard import ImageWizard
-from Screens.MessageBox import MessageBox
-from Screens.MessageBox import MessageBox
-from Screens.Screen import Screen
-from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont
-from os import popen
-
-
-class UpdatePluginMenu(Screen):
-       skin = """
-               <screen position="200,100" size="300,250" title="Update..." >
-                       <widget name="menu" position="10,10" size="290,175" scrollbarMode="showOnDemand" />
-               </screen>"""
-               
-       def __init__(self, session, args = 0):
-               self.skin = UpdatePluginMenu.skin
-               Screen.__init__(self, session)
-               
-               self.menu = args
-               
-               list = []
-               if self.menu == 0:
-                       list.append((_("Image-Upgrade"), "image"))
-                       list.append((_("Online-Upgrade"), "upgrade"))
-                       list.append((_("Advanced"), "advanced"))
-               elif self.menu == 1:
-                       list.append((_("Choose source"), "source"))
-                       list.append((_("Packet management"), "ipkg"))
-                       list.append((_("Settings"), "setup"))
-               
-               self["menu"] = MenuList(list)
-                               
-               self["actions"] = ActionMap(["WizardActions", "DirectionActions"], 
-               {
-                       "ok": self.go,
-                       "back": self.close,
-               }, -1)
-               
-       def go(self):
-               if self.menu == 0:
-                       if (self["menu"].l.getCurrentSelection()[1] == "image"):
-                               self.session.open(ImageWizard)
-                       if (self["menu"].l.getCurrentSelection()[1] == "upgrade"):
-                               self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to update your Dreambox?\nAfter pressing OK, please wait!"))
-                       if (self["menu"].l.getCurrentSelection()[1] == "advanced"):
-                               self.session.open(UpdatePluginMenu, 1)
-               if self.menu == 1:
-                       if (self["menu"].l.getCurrentSelection()[1] == "source"):
-                               self.session.open(IPKGSource)
-                       elif (self["menu"].l.getCurrentSelection()[1] == "ipkg"):
-                               self.session.open(Ipkg)
-                       elif (self["menu"].l.getCurrentSelection()[1] == "setup"):
-                               self.session.open(MessageBox, _("Function not yet implemented"), MessageBox.TYPE_ERROR)
-       
-       def runUpgrade(self, result):
-               if result:
-                       self.session.open(Console, title = "Upgrade running...", cmdlist = ["ipkg update", "ipkg upgrade -force-defaults -force-overwrite"], finishedCallback = self.runFinished)
-
-       def runFinished(self):
-               self.session.openWithCallback(self.reboot, MessageBox, _("Upgrade finished. Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
-               
-       def reboot(self, result):
-               if result is None:
-                       return
-               if result:
-                       quitMainloop(3)
-
-class IPKGSource(Screen):
-       skin = """
-               <screen position="100,100" size="550,60" title="IPKG source" >
-                       <widget name="text" position="0,0" size="550,25" font="Regular;20" />
-               </screen>"""
-               
-       def __init__(self, session, args = None):
-               self.skin = IPKGSource.skin
-               Screen.__init__(self, session)
-               
-               fp = file('/etc/ipkg/official-feed.conf', 'r')
-               sources = fp.readlines()
-               fp.close()
-               
-               self["text"] = Input(sources[0], maxSize=False, type=Input.TEXT)
-                               
-               self["actions"] = NumberActionMap(["WizardActions", "InputActions", "TextEntryActions", "KeyboardInputActions"], 
-               {
-                       "ok": self.go,
-                       "back": self.close,
-                       "left": self.keyLeft,
-                       "right": self.keyRight,
-                       "home": self.keyHome,
-                       "end": self.keyEnd,
-                       "deleteForward": self.deleteForward,
-                       "deleteBackward": self.deleteBackward,
-                       "1": self.keyNumberGlobal,
-                       "2": self.keyNumberGlobal,
-                       "3": self.keyNumberGlobal,
-                       "4": self.keyNumberGlobal,
-                       "5": self.keyNumberGlobal,
-                       "6": self.keyNumberGlobal,
-                       "7": self.keyNumberGlobal,
-                       "8": self.keyNumberGlobal,
-                       "9": self.keyNumberGlobal,
-                       "0": self.keyNumberGlobal
-               }, -1)
-               
-       def go(self):
-               fp = file('/etc/ipkg/official-feed.conf', 'w')
-               fp.write(self["text"].getText())
-               fp.close()
-               self.close()
-               
-       def keyLeft(self):
-               self["text"].left()
-       
-       def keyRight(self):
-               self["text"].right()
-       
-       def keyHome(self):
-               self["text"].home()
-       
-       def keyEnd(self):
-               self["text"].end()
-       
-       def keyDeleteForward(self):
-               self["text"].delete()
-       
-       def keyDeleteBackward(self):
-               self["text"].deleteBackward()
-       
-       def keyNumberGlobal(self, number):
-               print "pressed", number
-               self["text"].number(number)
-
-def PacketEntryComponent(packet):
-       res = [ packet ]
-       
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0,250, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[0]))
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 250, 0, 200, 30, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[1]))
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 450, 0, 100, 30, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[2]))
-       return res
-
-class PacketList(GUIComponent):
-       def __init__(self, list):
-               GUIComponent.__init__(self)
-               self.l = eListboxPythonMultiContent()
-               self.l.setList(list)
-               self.l.setFont(0, gFont("Regular", 20))
-               self.l.setFont(1, gFont("Regular", 18))
-       
-       def getCurrent(self):
-               return self.l.getCurrentSelection()
-       
-       def GUIcreate(self, parent):
-               self.instance = eListbox(parent)
-               self.instance.setContent(self.l)
-               self.instance.setItemHeight(30)
-       
-       def GUIdelete(self):
-               self.instance.setContent(None)
-               self.instance = None
-
-       def invalidate(self):
-               self.l.invalidate()
-
-class Ipkg2(Screen):
-       skin = """
-               <screen position="100,100" size="550,400" title="IPKG upgrade..." >
-                       <widget name="list" position="0,0" size="550,400" scrollbarMode="showOnDemand" />
-               </screen>"""
-               
-       def __init__(self, session, args = None):
-               self.skin = Ipkg.skin
-               Screen.__init__(self, session)
-       
-               list = []
-               self.list = list
-               self.fillPacketList()
-
-               self["list"] = PacketList(self.list)
-                               
-               self["actions"] = ActionMap(["WizardActions"], 
-               {
-                       "ok": self.close,
-                       "back": self.close
-               }, -1)
-               
-
-       def fillPacketList(self):
-               lines = popen("ipkg list", "r").readlines()
-               packetlist = []
-               for x in lines:
-                       split = x.split(' - ')
-                       packetlist.append([split[0].strip(), split[1].strip()])
-               
-               lines = popen("ipkg list_installed", "r").readlines()
-               
-               installedlist = {}
-               for x in lines:
-                       split = x.split(' - ')
-                       installedlist[split[0].strip()] = split[1].strip()
-               
-               for x in packetlist:
-                       status = ""
-                       if installedlist.has_key(x[0]):
-                               if installedlist[x[0]] == x[1]:
-                                       status = "installed"
-                               else:
-                                       status = "upgradable"
-                       self.list.append(PacketEntryComponent([x[0], x[1], status]))
-               
-       def go(self):
-               if self.update:
-                       self.session.openWithCallback(self.doUpdate, MessageBox, _("Do you want to update your Dreambox?\nAfter pressing OK, please wait!"))            
-               else:
-                       self.close()
-       
-       def doUpdateDelay(self):
-               lines = popen("ipkg update && ipkg upgrade", "r").readlines()
-               string = ""
-               for x in lines:
-                       string += x
-               self["text"].setText(_("Updating finished. Here is the result:") + "\n\n" + string)
-               self.update = False
-                       
-       
-       def doUpdate(self, val = False):
-               if val == True:
-                       self["text"].setText(_("Updating... Please wait... This can take some minutes..."))
-                       self.delayTimer.start(0, 1)
-               else:
-                       self.close()
-                       
-class UpdatePlugin(Screen):
-       skin = """
-               <screen position="100,100" size="550,200" title="Software Update..." >
-                       <widget name="activityslider" position="0,0" size="550,5"  />
-                       <widget name="slider" position="0,100" size="550,30"  />
-                       <widget name="package" position="10,30" size="540,20" font="Regular;18"/>
-                       <widget name="status" position="10,60" size="540,45" font="Regular;18"/>
-               </screen>"""
-               
-       def __init__(self, session, args = None):
-               self.skin = UpdatePlugin.skin
-               Screen.__init__(self, session)
-               
-               self.sliderPackages = { "dreambox-dvb-modules": 1, "enigma2": 2, "tuxbox-image-info": 3 }
-               
-               self.slider = Slider(0, 4)
-               self["slider"] = self.slider
-               self.activityslider = Slider(0, 100)
-               self["activityslider"] = self.activityslider
-               self.status = Label(_("Upgrading Dreambox... Please wait"))
-               self["status"] = self.status
-               self.package = Label()
-               self["package"] = self.package
-               
-               self.packages = 0
-               self.error = 0
-               
-               self.activity = 0
-               self.activityTimer = eTimer()
-               self.activityTimer.callback.append(self.doActivityTimer)
-               self.activityTimer.start(100, False)
-                               
-               self.ipkg = IpkgComponent()
-               self.ipkg.addCallback(self.ipkgCallback)
-               
-               self.updating = True
-               self.package.setText(_("Package list update"))
-               self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-                       
-               self["actions"] = ActionMap(["WizardActions"], 
-               {
-                       "ok": self.exit,
-                       "back": self.exit
-               }, -1)
-               
-       def doActivityTimer(self):
-               self.activity += 1
-               if self.activity == 100:
-                       self.activity = 0
-               self.activityslider.setValue(self.activity)
-               
-       def ipkgCallback(self, event, param):
-               if event == IpkgComponent.EVENT_DOWNLOAD:
-                       self.status.setText(_("Downloading"))
-               elif event == IpkgComponent.EVENT_UPGRADE:
-                       if self.sliderPackages.has_key(param):
-                               self.slider.setValue(self.sliderPackages[param])
-                       self.package.setText(param)
-                       self.status.setText(_("Upgrading"))
-                       self.packages += 1
-               elif event == IpkgComponent.EVENT_INSTALL:
-                       self.package.setText(param)
-                       self.status.setText(_("Installing"))
-                       self.packages += 1
-               elif event == IpkgComponent.EVENT_CONFIGURING:
-                       self.package.setText(param)
-                       self.status.setText(_("Configuring"))
-               elif event == IpkgComponent.EVENT_MODIFIED:
-                       self.session.openWithCallback(
-                               self.modificationCallback,
-                               MessageBox,
-                               _("A configuration file (%s) was modified since Installation.\nDo you want to keep your version?") % (param)
-                       )
-               elif event == IpkgComponent.EVENT_ERROR:
-                       self.error += 1
-               elif event == IpkgComponent.EVENT_DONE:
-                       if self.updating:
-                               self.updating = False
-                               self.ipkg.startCmd(IpkgComponent.CMD_UPGRADE, args = {'test_only': False})
-                       elif self.error == 0:
-                               self.slider.setValue(4)
-                               
-                               self.activityTimer.stop()
-                               self.activityslider.setValue(0)
-                               
-                               self.package.setText("")
-                               self.status.setText(_("Done - Installed or upgraded %d packages") % self.packages)
-                       else:
-                               self.activityTimer.stop()
-                               self.activityslider.setValue(0)
-                               error = _("your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox.")
-                               if self.packages == 0:
-                                       error = _("No packages were upgraded yet. So you can check your network and try again.")
-                               if self.updating:
-                                       error = _("Your dreambox isn't connected to the internet properly. Please check it and try again.")
-                               self.status.setText(_("Error") +  " - " + error)
-               #print event, "-", param
-               pass
-
-       def modificationCallback(self, res):
-               self.ipkg.write(res and "N" or "Y")
-
-       def exit(self):
-               if not self.ipkg.isRunning():
-                       if self.packages != 0 and self.error == 0:
-                               self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished. Do you want to reboot your Dreambox?"))
-                       else:
-                               self.close()
-                       
-       def exitAnswer(self, result):
-               if result is not None and result:
-                       quitMainloop(2)
-               self.close()
-
-def UpgradeMain(session, **kwargs):
-       session.open(UpdatePlugin)
-
-def Plugins(**kwargs):
-       return PluginDescriptor(name="Softwareupdate", description=_("Updates your receiver's software"), icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=UpgradeMain)
diff --git a/lib/python/Screens/FactoryReset.py b/lib/python/Screens/FactoryReset.py
new file mode 100644 (file)
index 0000000..ce5aaeb
--- /dev/null
@@ -0,0 +1,9 @@
+from Screens.MessageBox import MessageBox
+
+class FactoryReset(MessageBox):
+       def __init__(self, session):
+               MessageBox.__init__(self, session, _("When you do a factory reset, you will lose ALL your configuration data\n"
+                       "(including bouquets, services, satellite data ...)\n"
+                       "After completion of factory reset, your receiver will restart automatically!\n\n"
+                       "Really do a factory reset?"), MessageBox.TYPE_YESNO)
+               self.skinName = "MessageBox"
\ No newline at end of file
diff --git a/lib/python/Screens/ImageWizard.py b/lib/python/Screens/ImageWizard.py
deleted file mode 100644 (file)
index faf6120..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-from Wizard import Wizard, wizardManager
-
-from Tools.Directories import fileExists
-
-import os
-
-backupfile = "backupenigma2settings.tar"
-
-def checkConfigBackup():
-       paths = ['/media/hdd/', '/media/cf/']
-       for x in paths:
-               if fileExists(x + backupfile):
-                       return x
-       return None
-
-if checkConfigBackup() is None:
-       backupAvailable = 0
-else:
-       backupAvailable = 1
-
-class ImageWizard(Wizard):
-       def __init__(self, session):
-               self.xmlfile = "imagewizard.xml"
-               Wizard.__init__(self, session, showSteps=False, showStepSlider=False, showList=True, showConfig=True)
-
-       def markDone(self):
-               pass
-
-wizardManager.registerWizard(ImageWizard, backupAvailable, priority = 10)
-
-def doBackup(path):
-       os.system('tar cvpf ' + path + backupfile + ' /etc/enigma2')
-
-def doRestore(path):
-       os.system('cd / && /bin/tar xvpf ' + path + backupfile)
-       
-
-               
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index eac0347..9687633
@@ -54,7 +54,7 @@ class Ipkg(Screen):
                        self.slider.setValue(len(self.cmdList))
                                
                        self.package.setText("")
-                       self.status.setText(_("Done - Installed or upgraded %d packages with %d errors") % (self.packages, self.error))
+                       self.status.setText(_("Done - Installed, upgraded or removed %d packages with %d errors") % (self.packages, self.error))
                        return False
                else:
                        cmd = self.cmdList[self.runningCmd]
@@ -90,6 +90,10 @@ class Ipkg(Screen):
                        self.package.setText(param)
                        self.status.setText(_("Installing"))
                        self.packages += 1
+               elif event == IpkgComponent.EVENT_REMOVE:
+                       self.package.setText(param)
+                       self.status.setText(_("Removing"))
+                       self.packages += 1
                elif event == IpkgComponent.EVENT_CONFIGURING:
                        self.package.setText(param)
                        self.status.setText(_("Configuring"))
index 389d362..fa47b1f 100644 (file)
@@ -409,7 +409,7 @@ class LocationBox(Screen, NumericalTextInput, HelpableScreen):
                                        ))
                        else:
                                menu = (
-                                       (_("switch to filelist"), self.switchToFileList)
+                                       (_("switch to filelist"), self.switchToFileList),
                                        (_("remove bookmark"), self.addRemoveBookmark)
                                )
 
index cde2d6c..ca67f73 100755 (executable)
@@ -9,10 +9,10 @@ install_PYTHON = \
        InfoBarGenerics.py HelpMenu.py Wizard.py __init__.py \
        Dish.py LanguageSelection.py StartWizard.py PiPSetup.py Subtitles.py \
        TutorialWizard.py PluginBrowser.py MinuteInput.py Scart.py PVRState.py \
-       Console.py InputBox.py ChoiceBox.py SimpleSummary.py ImageWizard.py \
+       Console.py InputBox.py ChoiceBox.py SimpleSummary.py \
        TimerSelection.py PictureInPicture.py TimeDateInput.py \
        SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \
        SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \
        SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \
-       TextBox.py
+       TextBox.py FactoryReset.py
 
index cdff4c5..6499ef5 100644 (file)
@@ -273,7 +273,7 @@ class TimerEditList(Screen):
                                        else:
                                                success = True
                        else:
-                               succsess = True
+                               success = True
                        if success:
                                print "Sanity check passed"
                                self.session.nav.RecordTimer.timeChanged(entry)
index 53970ab..5dc1a09 100755 (executable)
@@ -5,19 +5,10 @@ from Components.Label import Label
 from Components.Pixmap import Pixmap\r
 from Components.MenuList import MenuList\r
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest\r
-from enigma import eListboxPythonMultiContent, gFont, loadPNG, RT_HALIGN_CENTER, RT_VALIGN_CENTER\r
+from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER\r
 from Screen import Screen\r
 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE\r
-\r
-key_backspace = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))\r
-key_bg = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))\r
-key_clr = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))\r
-key_esc = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))\r
-key_ok = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))\r
-key_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))\r
-key_shift = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))\r
-key_shift_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))\r
-key_space = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))\r
+from Tools.LoadPixmap import LoadPixmap\r
 \r
 class VirtualKeyBoardList(MenuList):\r
        def __init__(self, list, enableWrapAround=False):\r
@@ -26,6 +17,16 @@ class VirtualKeyBoardList(MenuList):
                self.l.setItemHeight(45)\r
 \r
 def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):\r
+       key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))\r
+       key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))\r
+       key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))\r
+       key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))\r
+       key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))\r
+       key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))\r
+       key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))\r
+       key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))\r
+       key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))\r
+       \r
        res = [ (keys) ]\r
        \r
        x = 0\r
@@ -116,6 +117,7 @@ class VirtualKeyBoard(Screen):
                                [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],\r
                                [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],\r
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
+\r
                                [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]]\r
                else:\r
                        self.keys_list = [\r
index 2f91971..14c849d 100644 (file)
@@ -525,6 +525,7 @@ eServiceFactoryDVB::eServiceFactoryDVB()
        {
                std::list<std::string> extensions;
                extensions.push_back("ts");
+               extensions.push_back("trp");
                sc->addServiceFactory(eServiceFactoryDVB::id, this, extensions);
        }
 
old mode 100644 (file)
new mode 100755 (executable)
index 8f23bea..c335bf2
--- a/mytest.py
+++ b/mytest.py
@@ -76,7 +76,6 @@ from Components.PluginComponent import plugins
 profile("LOAD:Wizard")
 from Screens.Wizard import wizardManager
 from Screens.DefaultWizard import *
-from Screens.ImageWizard import *
 from Screens.StartWizard import *
 from Screens.TutorialWizard import *
 import Screens.Rc
@@ -343,6 +342,9 @@ class PowerKey:
                        self.session.open(Screens.Standby.TryQuitMainloop, 1)
 
        def powerlong(self):
+               if Screens.Standby.inTryQuitMainloop or (self.session.current_dialog and not self.session.current_dialog.ALLOW_SUSPEND):
+                       return
+
                self.standbyblocked = 1
                action = config.usage.on_long_powerpress.value
                if action == "shutdown":
old mode 100644 (file)
new mode 100755 (executable)
index 26518b5..d724f58
@@ -5,7 +5,7 @@ GETTEXT=xgettext
 #MSGFMT = ./msgfmt.py
 MSGFMT = msgfmt
 
-LANGS := ar ca cs da de el en es fi fr fy hr hu is it lt nl no pl pt ru sv tr uk
+LANGS := ar ca cs da de el en es fi fr fy hr hu is it lt lv nl no pl pt ru sv tr uk
 LANGPO := $(foreach LANG, $(LANGS),$(LANG).po)
 LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo)
 
@@ -30,6 +30,8 @@ enigma2.pot:
 
        ./xml2po.py     ../data/ >> enigma2.pot
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/Videomode/ >> enigma2.pot
+       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/SoftwareManager/ >> enigma2.pot
+       cat enigma2_rel25.pot | tail -n +19 >> enigma2.pot
        msguniq -o enigma2uniq.pot enigma2.pot
        $(RM) enigma2.pot
        mv enigma2uniq.pot enigma2.pot
index 83c3c5a..fd2d5d0 100755 (executable)
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
+"POT-Creation-Date: 2009-02-16 00:05+0100\n"
 "PO-Revision-Date: 2006-01-10 01:17+0300\n"
 "Last-Translator: hazem <moustafagamal@hotmail.com>\n"
 "Language-Team: Arabic <moustafagamal@hotmail.com>\n"
@@ -19,6 +19,67 @@ msgstr ""
 "X-Poedit-Country: EGYPT\n"
 "X-Poedit-SourceCharset: iso-8859-15\n"
 
+msgid ""
+"\n"
+"Advanced options and settings."
+msgstr ""
+
+msgid ""
+"\n"
+"After pressing OK, please wait!"
+msgstr ""
+
+msgid ""
+"\n"
+"Backup your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Edit the upgrade source address."
+msgstr ""
+
+msgid ""
+"\n"
+"Online update of your Dreambox software."
+msgstr ""
+
+msgid ""
+"\n"
+"Press OK on your remote control to continue."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox with a new firmware."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your backups by date."
+msgstr ""
+
+msgid ""
+"\n"
+"Scan for local packages and install them."
+msgstr ""
+
+msgid ""
+"\n"
+"Select your backup device.\n"
+"Current device: "
+msgstr ""
+
+msgid ""
+"\n"
+"View, install and remove available or installed packages."
+msgstr ""
+
 msgid " "
 msgstr ""
 
@@ -98,9 +159,6 @@ msgstr ""
 msgid ".NFI Download failed:"
 msgstr ""
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -283,12 +341,6 @@ msgstr "AC3 المعتاده"
 msgid "AC3 downmix"
 msgstr ""
 
-msgid "AGC"
-msgstr ""
-
-msgid "AGC:"
-msgstr ""
-
 msgid "About"
 msgstr "عن"
 
@@ -344,9 +396,15 @@ msgstr ""
 msgid "Advanced"
 msgstr "متقدم"
 
+msgid "Advanced Options"
+msgstr ""
+
 msgid "Advanced Video Setup"
 msgstr ""
 
+msgid "Advanced restore"
+msgstr ""
+
 msgid "After event"
 msgstr ""
 
@@ -364,9 +422,6 @@ msgstr "الكل"
 msgid "All Satellites"
 msgstr ""
 
-msgid "All..."
-msgstr ""
-
 msgid "Alpha"
 msgstr "الفا"
 
@@ -379,6 +434,9 @@ msgstr ""
 msgid "An empty filename is illegal."
 msgstr ""
 
+msgid "An error occured!"
+msgstr ""
+
 msgid "An unknown error occured!"
 msgstr ""
 
@@ -395,6 +453,16 @@ msgid ""
 "\n"
 msgstr ""
 
+msgid ""
+"Are you sure you want to restore\n"
+"following backup:\n"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restore your Enigma2 backup?\n"
+"Enigma2 will restart after the restore"
+msgstr ""
+
 msgid "Artist"
 msgstr ""
 
@@ -464,9 +532,24 @@ msgstr ""
 msgid "Backup Mode"
 msgstr ""
 
+msgid "Backup done."
+msgstr ""
+
+msgid "Backup failed."
+msgstr ""
+
 msgid "Backup is done. Please press OK to see the result."
 msgstr ""
 
+msgid "Backup running"
+msgstr ""
+
+msgid "Backup running..."
+msgstr ""
+
+msgid "Backup system settings"
+msgstr ""
+
 msgid "Band"
 msgstr ""
 
@@ -574,6 +657,9 @@ msgstr "قناه"
 msgid "Channel Selection"
 msgstr "إختيار القناه"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "قناه:"
 
@@ -598,6 +684,12 @@ msgstr ""
 msgid "Choose Tuner"
 msgstr ""
 
+msgid "Choose backup files"
+msgstr ""
+
+msgid "Choose backup location"
+msgstr ""
+
 msgid "Choose bouquet"
 msgstr ""
 
@@ -607,9 +699,18 @@ msgstr ""
 msgid "Choose target folder"
 msgstr ""
 
+msgid "Choose upgrade source"
+msgstr ""
+
 msgid "Choose your Skin"
 msgstr ""
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr ""
 
@@ -707,15 +808,16 @@ msgstr ""
 msgid "Contrast"
 msgstr "التباين"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr ""
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr ""
 
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
+msgstr ""
+
 msgid "Create DVD-ISO"
 msgstr ""
 
@@ -786,9 +888,6 @@ msgstr ""
 msgid "Date"
 msgstr ""
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "وضع الاستعداد"
 
@@ -819,6 +918,9 @@ msgstr ""
 msgid "Description"
 msgstr "الوصـف"
 
+msgid "Deselect"
+msgstr ""
+
 msgid "Destination directory"
 msgstr ""
 
@@ -881,6 +983,9 @@ msgstr ""
 msgid "Display 4:3 content as"
 msgstr ""
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr ""
 
@@ -905,9 +1010,6 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr ""
 
-msgid "Do you really want to exit?"
-msgstr ""
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -941,18 +1043,30 @@ msgstr ""
 msgid "Do you want to install default sat lists?"
 msgstr ""
 
+msgid "Do you want to install the package:\n"
+msgstr ""
+
 msgid "Do you want to play DVD in drive?"
 msgstr ""
 
 msgid "Do you want to preview this DVD before burning?"
 msgstr ""
 
+msgid "Do you want to reboot your Dreambox?"
+msgstr ""
+
+msgid "Do you want to remove the package:\n"
+msgstr ""
+
 msgid "Do you want to restore your settings?"
 msgstr ""
 
 msgid "Do you want to resume this playback?"
 msgstr ""
 
+msgid "Do you want to update your Dreambox?"
+msgstr ""
+
 msgid ""
 "Do you want to update your Dreambox?\n"
 "After pressing OK, please wait!"
@@ -960,6 +1074,9 @@ msgstr ""
 "هل تريد تحديث الدريم بوكس\n"
 "إضغط OK ثم إنتظر!"
 
+msgid "Do you want to upgrade the package:\n"
+msgstr ""
+
 msgid "Do you want to view a tutorial?"
 msgstr "هل تريد مشاهده الشرح ؟"
 
@@ -974,6 +1091,10 @@ msgstr ""
 msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr ""
 
+#, python-format
+msgid "Done - Installed, upgraded or removed %d packages with %d errors"
+msgstr ""
+
 msgid "Download"
 msgstr ""
 
@@ -995,9 +1116,6 @@ msgstr ""
 msgid "Downloading"
 msgstr ""
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr ""
 
@@ -1080,9 +1198,6 @@ msgstr ""
 msgid "Encryption Type"
 msgstr ""
 
-msgid "End"
-msgstr "النهايه"
-
 msgid "End time"
 msgstr ""
 
@@ -1148,6 +1263,9 @@ msgstr ""
 msgid "Execution finished!!"
 msgstr ""
 
+msgid "Exif"
+msgstr ""
+
 msgid "Exit"
 msgstr ""
 
@@ -1221,24 +1339,21 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr ""
 
-msgid "Fix USB stick"
-msgstr ""
-
 msgid "Flash"
 msgstr ""
 
 msgid "Flashing failed"
 msgstr ""
 
-msgid "Font size"
-msgstr ""
-
 msgid "Format"
 msgstr ""
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr ""
 
+msgid "Frame size in full view"
+msgstr ""
+
 msgid "French"
 msgstr ""
 
@@ -1260,6 +1375,9 @@ msgstr ""
 msgid "Friday"
 msgstr "الجمعه"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr ""
 
@@ -1326,6 +1444,9 @@ msgstr ""
 msgid "Hierarchy mode"
 msgstr ""
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr ""
 
@@ -1407,6 +1528,15 @@ msgstr "تفعيل القرص الصلب"
 msgid "Input"
 msgstr ""
 
+msgid "Install a new image with a USB stick"
+msgstr ""
+
+msgid "Install a new image with your web browser"
+msgstr ""
+
+msgid "Install local IPKG"
+msgstr ""
+
 msgid "Installing"
 msgstr ""
 
@@ -1450,6 +1580,9 @@ msgstr "عكـس"
 msgid "Invert display"
 msgstr ""
 
+msgid "Ipkg"
+msgstr ""
+
 msgid "Italian"
 msgstr ""
 
@@ -1496,6 +1629,9 @@ msgstr ""
 msgid "Latitude"
 msgstr "خط العرض"
 
+msgid "Latvian"
+msgstr ""
+
 msgid "Leave DVD Player?"
 msgstr ""
 
@@ -1545,6 +1681,9 @@ msgstr ""
 msgid "Lock:"
 msgstr ""
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr ""
 
@@ -1572,12 +1711,18 @@ msgstr ""
 msgid "Make this mark just a mark"
 msgstr ""
 
+msgid "Manage your receiver's software"
+msgstr ""
+
 msgid "Manual Scan"
 msgstr "بحـث يدوى"
 
 msgid "Manual transponder"
 msgstr ""
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr ""
 
@@ -1602,6 +1747,9 @@ msgstr "قائمه"
 msgid "Message"
 msgstr "رسـاله"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr ""
 
@@ -1746,6 +1894,9 @@ msgstr ""
 "لا يوجد قرص صلب\n"
 "أو ان القرص الصلب لم يبدأ"
 
+msgid "No Networks found"
+msgstr ""
+
 msgid "No backup needed"
 msgstr ""
 
@@ -1776,6 +1927,9 @@ msgstr ""
 msgid "No satellite frontend found!!"
 msgstr ""
 
+msgid "No tags are set on these movies."
+msgstr ""
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr ""
 
@@ -1857,12 +2011,6 @@ msgid "Now Playing"
 msgstr ""
 
 msgid ""
-"Now please insert the USB stick (minimum size is 64 MB) that you want to "
-"format and use as .NFI image flasher. Press OK after you've put the stick "
-"back in."
-msgstr ""
-
-msgid ""
 "Now, use the contrast setting to turn up the brightness of the background as "
 "much as possible, but make sure that you can still see the difference "
 "between the two brightest levels of shades.If you have done that, press OK."
@@ -1898,9 +2046,6 @@ msgstr ""
 msgid "Orbital Position"
 msgstr ""
 
-msgid "Other..."
-msgstr ""
-
 msgid "PAL"
 msgstr ""
 
@@ -1913,6 +2058,9 @@ msgstr ""
 msgid "Packet management"
 msgstr ""
 
+msgid "Packet manager"
+msgstr ""
+
 msgid "Page"
 msgstr ""
 
@@ -1935,15 +2083,15 @@ msgstr ""
 msgid "Parental control type"
 msgstr ""
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr ""
 
 msgid "PiPSetup"
 msgstr ""
 
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr ""
@@ -1987,6 +2135,11 @@ msgstr ""
 msgid "Please choose the default services lists you want to install."
 msgstr ""
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr ""
 
@@ -2040,7 +2193,10 @@ msgstr ""
 msgid "Please select a subservice..."
 msgstr ""
 
-msgid "Please select keyword to filter..."
+msgid "Please select medium to use as backup location"
+msgstr ""
+
+msgid "Please select tag to filter..."
 msgstr ""
 
 msgid "Please select target directory or medium"
@@ -2072,7 +2228,7 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr ""
 
-msgid "Please wait for md5 signature verification..."
+msgid "Please wait while scanning is in progress..."
 msgstr ""
 
 msgid "Please wait while we configure your network..."
@@ -2150,6 +2306,10 @@ msgstr "اضغط موافق لتفعيل الاعدادات"
 msgid "Press OK to edit the settings."
 msgstr ""
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "اضغط موافق للبحث"
 
@@ -2165,6 +2325,9 @@ msgstr ""
 msgid "Primary DNS"
 msgstr ""
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr ""
 
@@ -2183,6 +2346,9 @@ msgstr ""
 msgid "Providers"
 msgstr "مقدمو الخدمه"
 
+msgid "Quick"
+msgstr ""
+
 msgid "Quickzap"
 msgstr ""
 
@@ -2204,13 +2370,13 @@ msgstr ""
 msgid "Ram Disk"
 msgstr ""
 
-msgid "Really close without saving settings?"
+msgid "Random"
 msgstr ""
 
-msgid "Really delete done timers?"
+msgid "Really close without saving settings?"
 msgstr ""
 
-msgid "Really delete this timer?"
+msgid "Really delete done timers?"
 msgstr ""
 
 msgid "Really exit the subservices quickzap?"
@@ -2234,6 +2400,10 @@ msgstr ""
 msgid "Record"
 msgstr "تسجيل"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr ""
 
@@ -2255,7 +2425,7 @@ msgstr ""
 msgid "Refresh rate selection."
 msgstr ""
 
-msgid "Remounting stick partition..."
+msgid "Reload"
 msgstr ""
 
 msgid "Remove Bookmark"
@@ -2270,6 +2440,9 @@ msgstr ""
 msgid "Remove currently selected title"
 msgstr ""
 
+msgid "Remove finished."
+msgstr ""
+
 msgid "Remove plugins"
 msgstr ""
 
@@ -2279,9 +2452,15 @@ msgstr ""
 msgid "Remove the incomplete .NFI file?"
 msgstr ""
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr ""
 
+msgid "Removing"
+msgstr ""
+
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
 msgstr ""
@@ -2331,6 +2510,18 @@ msgstr ""
 msgid "Restore"
 msgstr ""
 
+msgid "Restore backups..."
+msgstr ""
+
+msgid "Restore running"
+msgstr ""
+
+msgid "Restore running..."
+msgstr ""
+
+msgid "Restore system settings"
+msgstr ""
+
 msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
 "settings now."
@@ -2505,6 +2696,9 @@ msgstr ""
 msgid "Seek"
 msgstr "بحـث"
 
+msgid "Select"
+msgstr ""
+
 msgid "Select HDD"
 msgstr "اختار القرص الصلب"
 
@@ -2526,6 +2720,12 @@ msgstr ""
 msgid "Select channel to record from"
 msgstr "اختار القناه التى تريد ان تسجل منها"
 
+msgid "Select files for backup. Currently selected:\n"
+msgstr ""
+
+msgid "Select files/folders to backup..."
+msgstr ""
+
 msgid "Select image"
 msgstr ""
 
@@ -2698,18 +2898,47 @@ msgstr ""
 msgid "Slow Motion speeds"
 msgstr ""
 
+msgid "Software manager"
+msgstr ""
+
+msgid "Software manager..."
+msgstr ""
+
+msgid "Software restore"
+msgstr ""
+
+msgid "Software update"
+msgstr ""
+
 msgid "Some plugins are not available:\n"
 msgstr ""
 
 msgid "Somewhere else"
 msgstr ""
 
+msgid "Sorry MediaScanner is not installed!"
+msgstr ""
+
+msgid "Sorry no backups found!"
+msgstr ""
+
 msgid ""
 "Sorry your Backup destination does not exist\n"
 "\n"
 "Please choose an other one."
 msgstr ""
 
+msgid ""
+"Sorry your backup destination is not writeable.\n"
+"Please choose an other one."
+msgstr ""
+
+msgid ""
+"Sorry, your backup destination is not writeable.\n"
+"\n"
+"Please choose another one."
+msgstr ""
+
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort A-Z"
 msgstr ""
@@ -2736,9 +2965,6 @@ msgstr "الاستعداد"
 msgid "Standby / Restart"
 msgstr "الاستعداد/إعاده التشغيل"
 
-msgid "Start"
-msgstr "أبـدأ"
-
 msgid "Start from the beginning"
 msgstr ""
 
@@ -2781,6 +3007,12 @@ msgstr "إيقاف عرض هذا الفيلم؟"
 msgid "Stop test"
 msgstr ""
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr ""
 
@@ -2839,12 +3071,27 @@ msgstr "التليفزبـون"
 msgid "Table of content for collection"
 msgstr ""
 
+msgid "Tag 1"
+msgstr ""
+
+msgid "Tag 2"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
 msgid "Terrestrial"
 msgstr ""
 
 msgid "Terrestrial provider"
 msgstr "Region"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "وضع الاختبار"
 
@@ -2860,18 +3107,16 @@ msgid ""
 msgstr ""
 
 msgid ""
-"The .NFI Image flasher USB stick is now ready to use. Please download an ."
-"NFI image file from the feed server and save it on the stick. Then reboot "
-"and hold the 'Down' key on the front panel to boot the .NFI flasher from the "
-"stick!"
-msgstr ""
-
-msgid ""
 "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
 "create a Dreambox format data DVD (which will not play in stand-alone DVD "
 "players) instead?"
 msgstr ""
 
+msgid ""
+"The USB stick is now bootable. Do you want to download the latest image from "
+"the feed server and save it on the stick?"
+msgstr ""
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr ""
 
@@ -2925,6 +3170,10 @@ msgstr ""
 msgid "The pin codes you entered are different."
 msgstr ""
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr ""
 
@@ -3031,6 +3280,9 @@ msgstr ""
 msgid "Thu"
 msgstr ""
 
+msgid "Thumbnails"
+msgstr ""
+
 msgid "Thursday"
 msgstr "الخميس"
 
@@ -3078,21 +3330,28 @@ msgstr ""
 msgid "Timeshift not possible!"
 msgstr ""
 
+msgid "Timeshift path..."
+msgstr ""
+
 msgid "Timezone"
 msgstr "منطقه الوقت"
 
-msgid "Title properties"
+msgid "Title"
 msgstr ""
 
-msgid "Title"
+msgid "Title properties"
 msgstr ""
 
 msgid "Titleset mode"
 msgstr ""
 
 msgid ""
-"To make sure you intend to do this, please remove the target USB stick now "
-"and stick it back in upon prompt. Press OK when you have taken the stick out."
+"To update your Dreambox firmware, please follow these steps:\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB "
+"stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed "
+"for 10 seconds.\n"
+"3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 
 msgid "Today"
@@ -3170,6 +3429,9 @@ msgstr ""
 msgid "Two"
 msgstr "اثنين"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
 msgstr "نوع البحث"
 
@@ -3182,6 +3444,12 @@ msgstr ""
 msgid "USB Stick"
 msgstr ""
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3195,6 +3463,15 @@ msgstr ""
 msgid "Uncommitted DiSEqC command"
 msgstr ""
 
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
+
 msgid "Universal LNB"
 msgstr ""
 
@@ -3213,6 +3490,9 @@ msgstr "إنتهاء التحديث، وهذه هى النتيجه"
 msgid "Updating... Please wait... This can take some minutes..."
 msgstr "جارى التحديث ..انتظر..قد يستغرق بعض الوقت"
 
+msgid "Upgrade finished."
+msgstr ""
+
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr ""
 
@@ -3222,6 +3502,9 @@ msgstr ""
 msgid "Upgrading Dreambox... Please wait"
 msgstr ""
 
+msgid "Use"
+msgstr ""
+
 msgid "Use DHCP"
 msgstr "استخدمDHCP"
 
@@ -3287,6 +3570,9 @@ msgstr "وصله فيديو كاسيت"
 msgid "VMGM (intro trailer)"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr ""
 
@@ -3350,9 +3636,6 @@ msgstr ""
 msgid "Waiting"
 msgstr ""
 
-msgid "Waiting for USB stick to settle..."
-msgstr ""
-
 msgid ""
 "We will now test if your TV can also display this resolution at 50hz. If "
 "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
@@ -3403,9 +3686,21 @@ msgstr "غرب"
 msgid "What do you want to scan?"
 msgstr "ماذا تريد ان تبحث ؟"
 
+msgid ""
+"When you do a factory reset, you will lose ALL your configuration data\n"
+"(including bouquets, services, satellite data ...)\n"
+"After completion of factory reset, your receiver will restart "
+"automatically!\n"
+"\n"
+"Really do a factory reset?"
+msgstr ""
+
 msgid "Where do you want to backup your settings?"
 msgstr ""
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
 msgid "Wireless"
 msgstr ""
 
@@ -3421,9 +3716,6 @@ msgstr ""
 msgid "Writing NFI image file to flash completed"
 msgstr ""
 
-msgid "Writing image file to NAND Flash"
-msgstr ""
-
 msgid "YPbPr"
 msgstr ""
 
@@ -3506,10 +3798,20 @@ msgid ""
 msgstr ""
 
 msgid ""
+"You have chosen to backup your settings. Please press OK to start the backup "
+"now."
+msgstr ""
+
+msgid ""
 "You have chosen to create a new .NFI flasher bootable USB stick. This will "
 "repartition the USB stick and therefore all data on it will be erased."
 msgstr ""
 
+msgid ""
+"You have chosen to restore your settings. Enigma2 will restart after "
+"restore. Please press OK to start the restore now."
+msgstr ""
+
 #, python-format
 msgid "You have to wait %s!"
 msgstr ""
@@ -3523,12 +3825,6 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You need to define some keywords first!\n"
-"Press the menu-key to define keywords.\n"
-"Do you want to define keywords now?"
-msgstr ""
-
-msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
 "Do you want to set the pin now?"
@@ -3668,23 +3964,32 @@ msgstr ""
 msgid "audio tracks"
 msgstr ""
 
+msgid "auto"
+msgstr ""
+
 msgid "back"
 msgstr "للخلف"
 
 msgid "background image"
 msgstr ""
 
+msgid "backgroundcolor"
+msgstr ""
+
 msgid "better"
 msgstr ""
 
+msgid "black"
+msgstr ""
+
 msgid "blacklist"
 msgstr ""
 
-#, python-format
-msgid "burn audio track (%s)"
+msgid "blue"
 msgstr ""
 
-msgid "by Exif"
+#, python-format
+msgid "burn audio track (%s)"
 msgstr ""
 
 msgid "change recording (duration)"
@@ -3708,9 +4013,6 @@ msgstr "دائرى يمين"
 msgid "clear playlist"
 msgstr ""
 
-msgid "color"
-msgstr ""
-
 msgid "complex"
 msgstr ""
 
@@ -3738,10 +4040,10 @@ msgstr "يومى"
 msgid "day"
 msgstr ""
 
-msgid "delete"
+msgid "delete cut"
 msgstr ""
 
-msgid "delete cut"
+msgid "delete file"
 msgstr ""
 
 msgid "delete playlist entry"
@@ -3846,13 +4148,13 @@ msgstr ""
 msgid "failed"
 msgstr ""
 
-msgid "filename"
+msgid "fileformats (BMP, PNG, JPG, GIF)"
 msgstr ""
 
-msgid "fine-tune your display"
+msgid "filename"
 msgstr ""
 
-msgid "font face"
+msgid "fine-tune your display"
 msgstr ""
 
 msgid "forward to the next chapter"
@@ -3870,7 +4172,7 @@ msgstr ""
 msgid "go to standby"
 msgstr ""
 
-msgid "headline"
+msgid "green"
 msgstr ""
 
 msgid "hear radio..."
@@ -3879,13 +4181,13 @@ msgstr ""
 msgid "help..."
 msgstr "مساعده"
 
-msgid "hide extended description"
+msgid "hidden network"
 msgstr ""
 
-msgid "hide player"
+msgid "hide extended description"
 msgstr ""
 
-msgid "highlighted button"
+msgid "hide player"
 msgstr ""
 
 msgid "horizontal"
@@ -4017,9 +4319,6 @@ msgstr "لا."
 msgid "no HDD found"
 msgstr "لم يتم العثور على قرص صلب"
 
-msgid "no Picture found"
-msgstr ""
-
 msgid "no module found"
 msgstr "لم يتم العثور على كامه"
 
@@ -4035,6 +4334,9 @@ msgstr "لا احد"
 msgid "not locked"
 msgstr ""
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr ""
 
@@ -4098,15 +4400,15 @@ msgstr ""
 msgid "previous channel in history"
 msgstr ""
 
-msgid "rebooting..."
-msgstr ""
-
 msgid "record"
 msgstr ""
 
 msgid "recording..."
 msgstr ""
 
+msgid "red"
+msgstr ""
+
 msgid "remove a nameserver entry"
 msgstr ""
 
@@ -4155,9 +4457,15 @@ msgstr ""
 msgid "right"
 msgstr ""
 
+msgid "save last directory on exit"
+msgstr ""
+
 msgid "save playlist"
 msgstr ""
 
+msgid "save playlist on exit"
+msgstr ""
+
 msgid "scan done!"
 msgstr "انتهـى البحث!"
 
@@ -4210,6 +4518,9 @@ msgstr ""
 msgid "show EPG..."
 msgstr "إظهار دليل البرامج الالكترونى"
 
+msgid "show Infoline"
+msgstr ""
+
 msgid "show all"
 msgstr ""
 
@@ -4222,10 +4533,10 @@ msgstr ""
 msgid "show extended description"
 msgstr ""
 
-msgid "show first tag"
+msgid "show first selected tag"
 msgstr ""
 
-msgid "show second tag"
+msgid "show second selected tag"
 msgstr ""
 
 msgid "show shutdown menu"
@@ -4261,10 +4572,10 @@ msgstr ""
 msgid "skip forward (enter time)"
 msgstr ""
 
-msgid "sort by date"
+msgid "slide picture in loop"
 msgstr ""
 
-msgid "spaces (top, between rows, left)"
+msgid "sort by date"
 msgstr ""
 
 msgid "standard"
@@ -4276,6 +4587,9 @@ msgstr ""
 msgid "start cut here"
 msgstr ""
 
+msgid "start directory"
+msgstr ""
+
 msgid "start timeshift"
 msgstr ""
 
@@ -4306,13 +4620,19 @@ msgstr ""
 msgid "switch to playlist"
 msgstr ""
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr ""
 
 msgid "switch to the next subtitle language"
 msgstr ""
 
-msgid "text"
+msgid "template file"
+msgstr ""
+
+msgid "textcolor"
 msgstr ""
 
 msgid "this recording"
@@ -4363,6 +4683,12 @@ msgstr "اسبوعى"
 msgid "whitelist"
 msgstr ""
 
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr ""
+
 msgid "yes"
 msgstr "نعـم"
 
@@ -4411,6 +4737,9 @@ msgstr ""
 #~ "هل تريد إلغـاء التسجيل\n"
 #~ "الحالى؟"
 
+#~ msgid "End"
+#~ msgstr "النهايه"
+
 #~ msgid "Expert Setup"
 #~ msgstr "قائمه اعدادت الخبراء"
 
@@ -4468,6 +4797,9 @@ msgstr ""
 #~ msgid "Skip confirmations"
 #~ msgstr "تخطى التأكيد"
 
+#~ msgid "Start"
+#~ msgstr "أبـدأ"
+
 #~ msgid "Step "
 #~ msgstr "خطوه "
 
index 2ab753c..1618cf1 100755 (executable)
--- a/po/ca.po
+++ b/po/ca.po
@@ -1,14 +1,14 @@
 # translation of ca.po to
 # Copyright (C) 2006 THE tuxbox-enigma'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the tuxbox-enigma package.
-# 
+#
 # Automatically generated, 2006.
 # Oriol Pellicer i Sabrià <oriol@elsud.org>, 2006, 2007.
 msgid ""
 msgstr ""
 "Project-Id-Version: ca\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
+"POT-Creation-Date: 2009-02-16 00:05+0100\n"
 "PO-Revision-Date: 2007-08-14 10:23+0200\n"
 "Last-Translator: Oriol Pellicer <oriol@elsud.org>\n"
 "Language-Team: \n"
@@ -21,6 +21,67 @@ msgstr ""
 "X-Poedit-SourceCharset: iso-8859-1\n"
 "X-Generator: KBabel 1.11.4\n"
 
+msgid ""
+"\n"
+"Advanced options and settings."
+msgstr ""
+
+msgid ""
+"\n"
+"After pressing OK, please wait!"
+msgstr ""
+
+msgid ""
+"\n"
+"Backup your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Edit the upgrade source address."
+msgstr ""
+
+msgid ""
+"\n"
+"Online update of your Dreambox software."
+msgstr ""
+
+msgid ""
+"\n"
+"Press OK on your remote control to continue."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox with a new firmware."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your backups by date."
+msgstr ""
+
+msgid ""
+"\n"
+"Scan for local packages and install them."
+msgstr ""
+
+msgid ""
+"\n"
+"Select your backup device.\n"
+"Current device: "
+msgstr ""
+
+msgid ""
+"\n"
+"View, install and remove available or installed packages."
+msgstr ""
+
 msgid " "
 msgstr ""
 
@@ -102,9 +163,6 @@ msgstr ""
 msgid ".NFI Download failed:"
 msgstr ""
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -308,12 +366,6 @@ msgstr "AC3 per defecte"
 msgid "AC3 downmix"
 msgstr ""
 
-msgid "AGC"
-msgstr ""
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Quant a"
 
@@ -369,9 +421,15 @@ msgstr ""
 msgid "Advanced"
 msgstr "Avançat"
 
+msgid "Advanced Options"
+msgstr ""
+
 msgid "Advanced Video Setup"
 msgstr ""
 
+msgid "Advanced restore"
+msgstr ""
+
 msgid "After event"
 msgstr "Després del programa"
 
@@ -391,9 +449,6 @@ msgstr "Tot"
 msgid "All Satellites"
 msgstr ""
 
-msgid "All..."
-msgstr "Tot..."
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -406,6 +461,9 @@ msgstr ""
 msgid "An empty filename is illegal."
 msgstr ""
 
+msgid "An error occured!"
+msgstr ""
+
 msgid "An unknown error occured!"
 msgstr ""
 
@@ -422,6 +480,16 @@ msgid ""
 "\n"
 msgstr ""
 
+msgid ""
+"Are you sure you want to restore\n"
+"following backup:\n"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restore your Enigma2 backup?\n"
+"Enigma2 will restart after the restore"
+msgstr ""
+
 msgid "Artist"
 msgstr "Artista"
 
@@ -491,9 +559,24 @@ msgstr "Localització del backup"
 msgid "Backup Mode"
 msgstr "Mode del backup"
 
+msgid "Backup done."
+msgstr ""
+
+msgid "Backup failed."
+msgstr ""
+
 msgid "Backup is done. Please press OK to see the result."
 msgstr "Backup realitzat. Prem OK per a veure els resultats."
 
+msgid "Backup running"
+msgstr ""
+
+msgid "Backup running..."
+msgstr ""
+
+msgid "Backup system settings"
+msgstr ""
+
 msgid "Band"
 msgstr "Banda"
 
@@ -602,6 +685,9 @@ msgstr "Canal"
 msgid "Channel Selection"
 msgstr "Selecció de canal"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Canal:"
 
@@ -626,6 +712,12 @@ msgstr ""
 msgid "Choose Tuner"
 msgstr "Escull sintonitzador"
 
+msgid "Choose backup files"
+msgstr ""
+
+msgid "Choose backup location"
+msgstr ""
+
 msgid "Choose bouquet"
 msgstr "Escollir llista"
 
@@ -635,9 +727,18 @@ msgstr "Escull origen"
 msgid "Choose target folder"
 msgstr ""
 
+msgid "Choose upgrade source"
+msgstr ""
+
 msgid "Choose your Skin"
 msgstr ""
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr "Netejar"
 
@@ -738,15 +839,16 @@ msgstr ""
 msgid "Contrast"
 msgstr "Contrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr ""
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr ""
 
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
+msgstr ""
+
 msgid "Create DVD-ISO"
 msgstr ""
 
@@ -817,9 +919,6 @@ msgstr "Danès"
 msgid "Date"
 msgstr "Data"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "Apagat complet"
 
@@ -850,6 +949,9 @@ msgstr ""
 msgid "Description"
 msgstr "Descripció"
 
+msgid "Deselect"
+msgstr ""
+
 msgid "Destination directory"
 msgstr ""
 
@@ -915,6 +1017,9 @@ msgstr ""
 msgid "Display 4:3 content as"
 msgstr ""
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Configurar Display"
 
@@ -939,9 +1044,6 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr ""
 
-msgid "Do you really want to exit?"
-msgstr "Segur que vols sortir?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -979,18 +1081,30 @@ msgstr "Vols habilitar el control parental?"
 msgid "Do you want to install default sat lists?"
 msgstr ""
 
+msgid "Do you want to install the package:\n"
+msgstr ""
+
 msgid "Do you want to play DVD in drive?"
 msgstr ""
 
 msgid "Do you want to preview this DVD before burning?"
 msgstr ""
 
+msgid "Do you want to reboot your Dreambox?"
+msgstr ""
+
+msgid "Do you want to remove the package:\n"
+msgstr ""
+
 msgid "Do you want to restore your settings?"
 msgstr "Vols restaurar la configuració?"
 
 msgid "Do you want to resume this playback?"
 msgstr "Vols continuar on ho havies deixat?"
 
+msgid "Do you want to update your Dreambox?"
+msgstr ""
+
 msgid ""
 "Do you want to update your Dreambox?\n"
 "After pressing OK, please wait!"
@@ -998,6 +1112,9 @@ msgstr ""
 "Vols actualitzar la Dreambox?\n"
 "Després de prémer OK, espera!"
 
+msgid "Do you want to upgrade the package:\n"
+msgstr ""
+
 msgid "Do you want to view a tutorial?"
 msgstr "Vols veure un manual?"
 
@@ -1012,6 +1129,10 @@ msgstr "Fet. %d paquets instal·lats o actualitzats"
 msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr "Fet. %d paquets instal·lats o actualitzats amb %d errors"
 
+#, python-format
+msgid "Done - Installed, upgraded or removed %d packages with %d errors"
+msgstr ""
+
 msgid "Download"
 msgstr ""
 
@@ -1033,9 +1154,6 @@ msgstr "Plugins descarregables"
 msgid "Downloading"
 msgstr "Descarregant"
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Descarregant informació del plugin. Espera..."
 
@@ -1118,9 +1236,6 @@ msgstr ""
 msgid "Encryption Type"
 msgstr ""
 
-msgid "End"
-msgstr "Fi"
-
 msgid "End time"
 msgstr "Hora final"
 
@@ -1192,6 +1307,9 @@ msgstr "Progrés d'execució:"
 msgid "Execution finished!!"
 msgstr "Ha finalitzat l'execució"
 
+msgid "Exif"
+msgstr ""
+
 msgid "Exit"
 msgstr ""
 
@@ -1266,24 +1384,21 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr ""
 
-msgid "Fix USB stick"
-msgstr ""
-
 msgid "Flash"
 msgstr ""
 
 msgid "Flashing failed"
 msgstr ""
 
-msgid "Font size"
-msgstr ""
-
 msgid "Format"
 msgstr ""
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr ""
 
+msgid "Frame size in full view"
+msgstr ""
+
 msgid "French"
 msgstr "Francès"
 
@@ -1306,6 +1421,9 @@ msgstr "Div"
 msgid "Friday"
 msgstr "Divendres"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr "Adreça IP de Fritz!Box FON"
 
@@ -1374,6 +1492,9 @@ msgstr "Informació jeràrquica"
 msgid "Hierarchy mode"
 msgstr "Mode jeràrquic"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Quants minuts vols gravar?"
 
@@ -1458,6 +1579,15 @@ msgstr "Inicialitzant disc dur..."
 msgid "Input"
 msgstr "Entrada"
 
+msgid "Install a new image with a USB stick"
+msgstr ""
+
+msgid "Install a new image with your web browser"
+msgstr ""
+
+msgid "Install local IPKG"
+msgstr ""
+
 msgid "Installing"
 msgstr "Instal·lant"
 
@@ -1501,6 +1631,9 @@ msgstr "Inversió"
 msgid "Invert display"
 msgstr "Invertir display"
 
+msgid "Ipkg"
+msgstr ""
+
 msgid "Italian"
 msgstr "Italià"
 
@@ -1547,6 +1680,9 @@ msgstr ""
 msgid "Latitude"
 msgstr "Latitud"
 
+msgid "Latvian"
+msgstr ""
+
 msgid "Leave DVD Player?"
 msgstr ""
 
@@ -1596,6 +1732,9 @@ msgstr ""
 msgid "Lock:"
 msgstr ""
 
+msgid "Log results to harddisk"
+msgstr ""
+
 #, fuzzy
 msgid "Long Keypress"
 msgstr "Prémer tecla llarg"
@@ -1624,12 +1763,18 @@ msgstr "Fer que aquesta marca sigui un punt 'out'"
 msgid "Make this mark just a mark"
 msgstr "Fer que aquesta marca sigui només una marca"
 
+msgid "Manage your receiver's software"
+msgstr ""
+
 msgid "Manual Scan"
 msgstr "Recerca manual"
 
 msgid "Manual transponder"
 msgstr "Transponedor manual"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Marge després de gravar"
 
@@ -1654,6 +1799,9 @@ msgstr "Menú"
 msgid "Message"
 msgstr "Missatge"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Ha fallat el mkfs"
 
@@ -1796,6 +1944,9 @@ msgstr ""
 msgid "No HDD found or HDD not initialized!"
 msgstr "No hi ha disc dur o no està inicialitzat!"
 
+msgid "No Networks found"
+msgstr ""
+
 msgid "No backup needed"
 msgstr "No cal backup"
 
@@ -1829,6 +1980,9 @@ msgstr "No s'ha trobat cap motor."
 msgid "No satellite frontend found!!"
 msgstr "No s'ha trobat cap sintonitzador de satèŀlit!!"
 
+msgid "No tags are set on these movies."
+msgstr ""
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr ""
 "No hi ha cap sintonitzador configurat per a utilitzar amb un motor diseqc!"
@@ -1921,12 +2075,6 @@ msgid "Now Playing"
 msgstr "Reproduint"
 
 msgid ""
-"Now please insert the USB stick (minimum size is 64 MB) that you want to "
-"format and use as .NFI image flasher. Press OK after you've put the stick "
-"back in."
-msgstr ""
-
-msgid ""
 "Now, use the contrast setting to turn up the brightness of the background as "
 "much as possible, but make sure that you can still see the difference "
 "between the two brightest levels of shades.If you have done that, press OK."
@@ -1962,9 +2110,6 @@ msgstr ""
 msgid "Orbital Position"
 msgstr "Posició orbital"
 
-msgid "Other..."
-msgstr "Altres..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -1978,6 +2123,9 @@ msgstr "Actualització de la llista de paquets"
 msgid "Packet management"
 msgstr "Gestió de paquets"
 
+msgid "Packet manager"
+msgstr ""
+
 msgid "Page"
 msgstr "Pàgina"
 
@@ -2000,15 +2148,15 @@ msgstr "Configuració control parental"
 msgid "Parental control type"
 msgstr "Tipus de control parental"
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr ""
 
 msgid "PiPSetup"
 msgstr "Configuració PiP"
 
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr ""
@@ -2052,6 +2200,11 @@ msgstr ""
 msgid "Please choose the default services lists you want to install."
 msgstr ""
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Sisplau, no canviïs els valors si no n'estàs segur!"
 
@@ -2105,8 +2258,11 @@ msgstr "Sisplau selecciona un subservei a gravar..."
 msgid "Please select a subservice..."
 msgstr "Sisplau selecciona un subservei..."
 
-msgid "Please select keyword to filter..."
-msgstr "Sisplau selecciona la paraula a filtrar..."
+msgid "Please select medium to use as backup location"
+msgstr ""
+
+msgid "Please select tag to filter..."
+msgstr ""
 
 msgid "Please select target directory or medium"
 msgstr ""
@@ -2140,7 +2296,7 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr ""
 
-msgid "Please wait for md5 signature verification..."
+msgid "Please wait while scanning is in progress..."
 msgstr ""
 
 msgid "Please wait while we configure your network..."
@@ -2218,6 +2374,10 @@ msgstr "Prem OK per a activar la configuració."
 msgid "Press OK to edit the settings."
 msgstr ""
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "Prem OK per a buscar"
 
@@ -2233,6 +2393,9 @@ msgstr ""
 msgid "Primary DNS"
 msgstr ""
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr ""
 
@@ -2251,6 +2414,9 @@ msgstr "Proveïdor a escanejar"
 msgid "Providers"
 msgstr "Proveïdors"
 
+msgid "Quick"
+msgstr ""
+
 msgid "Quickzap"
 msgstr "Zappeig ràpid"
 
@@ -2272,15 +2438,15 @@ msgstr ""
 msgid "Ram Disk"
 msgstr "Disc en RAM"
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "Sortir sense guardar els canvis?"
 
 msgid "Really delete done timers?"
 msgstr "Vols esborrar les programacions ja finalitzades?"
 
-msgid "Really delete this timer?"
-msgstr "Esborrar aquesta programació?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Sortir del zappeig ràpid dels subserveis?"
 
@@ -2302,6 +2468,10 @@ msgstr "Configuració de recepció"
 msgid "Record"
 msgstr "Gravar"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Arxius gravats..."
 
@@ -2323,7 +2493,7 @@ msgstr ""
 msgid "Refresh rate selection."
 msgstr ""
 
-msgid "Remounting stick partition..."
+msgid "Reload"
 msgstr ""
 
 msgid "Remove Bookmark"
@@ -2338,6 +2508,9 @@ msgstr "Esborrar una marca"
 msgid "Remove currently selected title"
 msgstr "Esborra el títol seleccionat"
 
+msgid "Remove finished."
+msgstr ""
+
 msgid "Remove plugins"
 msgstr "Esborrar plugins"
 
@@ -2347,9 +2520,15 @@ msgstr ""
 msgid "Remove the incomplete .NFI file?"
 msgstr ""
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr "Esborra títol"
 
+msgid "Removing"
+msgstr ""
+
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
 msgstr ""
@@ -2399,6 +2578,18 @@ msgstr ""
 msgid "Restore"
 msgstr "Restaurar"
 
+msgid "Restore backups..."
+msgstr ""
+
+msgid "Restore running"
+msgstr ""
+
+msgid "Restore running..."
+msgstr ""
+
+msgid "Restore system settings"
+msgstr ""
+
 msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
 "settings now."
@@ -2574,6 +2765,9 @@ msgstr ""
 msgid "Seek"
 msgstr "Posicionar"
 
+msgid "Select"
+msgstr ""
+
 msgid "Select HDD"
 msgstr "Seleccionar disc dur"
 
@@ -2595,6 +2789,12 @@ msgstr "Seleccionar pista d'àudio"
 msgid "Select channel to record from"
 msgstr "Selecciona el canal a gravar"
 
+msgid "Select files for backup. Currently selected:\n"
+msgstr ""
+
+msgid "Select files/folders to backup..."
+msgstr ""
+
 msgid "Select image"
 msgstr ""
 
@@ -2773,6 +2973,18 @@ msgstr "Lent"
 msgid "Slow Motion speeds"
 msgstr ""
 
+msgid "Software manager"
+msgstr ""
+
+msgid "Software manager..."
+msgstr ""
+
+msgid "Software restore"
+msgstr ""
+
+msgid "Software update"
+msgstr ""
+
 #, fuzzy
 msgid "Some plugins are not available:\n"
 msgstr "Alguns plugins no estan disponibles:\n"
@@ -2780,6 +2992,12 @@ msgstr "Alguns plugins no estan disponibles:\n"
 msgid "Somewhere else"
 msgstr "A algun altre lloc"
 
+msgid "Sorry MediaScanner is not installed!"
+msgstr ""
+
+msgid "Sorry no backups found!"
+msgstr ""
+
 msgid ""
 "Sorry your Backup destination does not exist\n"
 "\n"
@@ -2789,6 +3007,17 @@ msgstr ""
 "\n"
 "Sisplau, escull-ne un altre."
 
+msgid ""
+"Sorry your backup destination is not writeable.\n"
+"Please choose an other one."
+msgstr ""
+
+msgid ""
+"Sorry, your backup destination is not writeable.\n"
+"\n"
+"Please choose another one."
+msgstr ""
+
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort A-Z"
 msgstr ""
@@ -2815,9 +3044,6 @@ msgstr "Repòs"
 msgid "Standby / Restart"
 msgstr "Repòs / Reiniciar"
 
-msgid "Start"
-msgstr "Iniciar"
-
 msgid "Start from the beginning"
 msgstr ""
 
@@ -2860,6 +3086,12 @@ msgstr "Aturar la reproducció de la pel·lícula?"
 msgid "Stop test"
 msgstr ""
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr "Guardar la posició"
 
@@ -2918,12 +3150,27 @@ msgstr "Sistema de TV"
 msgid "Table of content for collection"
 msgstr ""
 
+msgid "Tag 1"
+msgstr ""
+
+msgid "Tag 2"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
 msgid "Terrestrial"
 msgstr "Terrestre"
 
 msgid "Terrestrial provider"
 msgstr "Proveïdor terrestre"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "Mode test"
 
@@ -2942,18 +3189,16 @@ msgstr ""
 "Sisplau, prem OK per a començar a fer-la servir."
 
 msgid ""
-"The .NFI Image flasher USB stick is now ready to use. Please download an ."
-"NFI image file from the feed server and save it on the stick. Then reboot "
-"and hold the 'Down' key on the front panel to boot the .NFI flasher from the "
-"stick!"
-msgstr ""
-
-msgid ""
 "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
 "create a Dreambox format data DVD (which will not play in stand-alone DVD "
 "players) instead?"
 msgstr ""
 
+msgid ""
+"The USB stick is now bootable. Do you want to download the latest image from "
+"the feed server and save it on the stick?"
+msgstr ""
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "El backup ha fallat. Escull un altre destí."
 
@@ -3007,6 +3252,10 @@ msgstr "El pin és incorrecte"
 msgid "The pin codes you entered are different."
 msgstr "Els pins entrats són diferents"
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr "S'ha activat la programació d'aturada."
 
@@ -3115,6 +3364,9 @@ msgstr "Llindar"
 msgid "Thu"
 msgstr "Dij"
 
+msgid "Thumbnails"
+msgstr ""
+
 msgid "Thursday"
 msgstr "Dijous"
 
@@ -3162,6 +3414,9 @@ msgstr "Pausa"
 msgid "Timeshift not possible!"
 msgstr "No és possible la pausa!"
 
+msgid "Timeshift path..."
+msgstr ""
+
 msgid "Timezone"
 msgstr "Zona horària"
 
@@ -3175,8 +3430,12 @@ msgid "Titleset mode"
 msgstr ""
 
 msgid ""
-"To make sure you intend to do this, please remove the target USB stick now "
-"and stick it back in upon prompt. Press OK when you have taken the stick out."
+"To update your Dreambox firmware, please follow these steps:\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB "
+"stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed "
+"for 10 seconds.\n"
+"3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 
 msgid "Today"
@@ -3259,6 +3518,9 @@ msgstr "Turc"
 msgid "Two"
 msgstr "Dos"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
 msgstr "Tipus de recerca"
 
@@ -3271,6 +3533,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "Memòria USB"
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3284,6 +3552,15 @@ msgstr ""
 msgid "Uncommitted DiSEqC command"
 msgstr "Comanda DiSEqC no enviada"
 
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
+
 msgid "Universal LNB"
 msgstr "LNB universal"
 
@@ -3302,6 +3579,9 @@ msgstr "Actualització acabada. Resultat:"
 msgid "Updating... Please wait... This can take some minutes..."
 msgstr "Actualitzant... espera... Pot trigar uns quants minuts..."
 
+msgid "Upgrade finished."
+msgstr ""
+
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr "S'ha acabat l'actualització. Vols tornar a arrancar la Dreambox?"
 
@@ -3311,6 +3591,9 @@ msgstr "Actualitzant"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Actualitzant la Dreambox... Sisplau espera"
 
+msgid "Use"
+msgstr ""
+
 msgid "Use DHCP"
 msgstr "Utilitzar DHCP"
 
@@ -3378,6 +3661,9 @@ msgstr "Euroconnector VCR"
 msgid "VMGM (intro trailer)"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr ""
 
@@ -3442,9 +3728,6 @@ msgstr "WSS en 4:3"
 msgid "Waiting"
 msgstr ""
 
-msgid "Waiting for USB stick to settle..."
-msgstr ""
-
 msgid ""
 "We will now test if your TV can also display this resolution at 50hz. If "
 "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
@@ -3500,9 +3783,21 @@ msgstr "Oest"
 msgid "What do you want to scan?"
 msgstr "Què vols buscar?"
 
+msgid ""
+"When you do a factory reset, you will lose ALL your configuration data\n"
+"(including bouquets, services, satellite data ...)\n"
+"After completion of factory reset, your receiver will restart "
+"automatically!\n"
+"\n"
+"Really do a factory reset?"
+msgstr ""
+
 msgid "Where do you want to backup your settings?"
 msgstr "On vols guardar el backup de la configuració?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
 msgid "Wireless"
 msgstr ""
 
@@ -3518,9 +3813,6 @@ msgstr ""
 msgid "Writing NFI image file to flash completed"
 msgstr ""
 
-msgid "Writing image file to NAND Flash"
-msgstr ""
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
@@ -3613,10 +3905,20 @@ msgstr ""
 "Has escollit fer un backup al disc dur. Prem OK per a començar el backup ara."
 
 msgid ""
+"You have chosen to backup your settings. Please press OK to start the backup "
+"now."
+msgstr ""
+
+msgid ""
 "You have chosen to create a new .NFI flasher bootable USB stick. This will "
 "repartition the USB stick and therefore all data on it will be erased."
 msgstr ""
 
+msgid ""
+"You have chosen to restore your settings. Enigma2 will restart after "
+"restore. Please press OK to start the restore now."
+msgstr ""
+
 #, python-format
 msgid "You have to wait %s!"
 msgstr ""
@@ -3635,15 +3937,6 @@ msgstr ""
 "configuració."
 
 msgid ""
-"You need to define some keywords first!\n"
-"Press the menu-key to define keywords.\n"
-"Do you want to define keywords now?"
-msgstr ""
-"Prèviament has de definir paraules clau\n"
-"(per a fer-ho prem el botó del menú).\n"
-"Vols definir-les ara?"
-
-msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
 "Do you want to set the pin now?"
@@ -3793,25 +4086,34 @@ msgstr ""
 msgid "audio tracks"
 msgstr ""
 
+msgid "auto"
+msgstr ""
+
 msgid "back"
 msgstr "enrere"
 
 msgid "background image"
 msgstr ""
 
+msgid "backgroundcolor"
+msgstr ""
+
 msgid "better"
 msgstr "millorat"
 
+msgid "black"
+msgstr ""
+
 msgid "blacklist"
 msgstr "llista negra"
 
+msgid "blue"
+msgstr ""
+
 #, python-format
 msgid "burn audio track (%s)"
 msgstr ""
 
-msgid "by Exif"
-msgstr "per Exif"
-
 msgid "change recording (duration)"
 msgstr "canviar la gravació (durada)"
 
@@ -3833,9 +4135,6 @@ msgstr "circular dreta"
 msgid "clear playlist"
 msgstr "netejar la llista"
 
-msgid "color"
-msgstr ""
-
 msgid "complex"
 msgstr "complexe"
 
@@ -3863,12 +4162,12 @@ msgstr "diàriament"
 msgid "day"
 msgstr ""
 
-msgid "delete"
-msgstr "esborrar"
-
 msgid "delete cut"
 msgstr "esborrar tall"
 
+msgid "delete file"
+msgstr ""
+
 msgid "delete playlist entry"
 msgstr "esborrar entrada de la llista"
 
@@ -3971,13 +4270,13 @@ msgstr ""
 msgid "failed"
 msgstr ""
 
-msgid "filename"
+msgid "fileformats (BMP, PNG, JPG, GIF)"
 msgstr ""
 
-msgid "fine-tune your display"
+msgid "filename"
 msgstr ""
 
-msgid "font face"
+msgid "fine-tune your display"
 msgstr ""
 
 msgid "forward to the next chapter"
@@ -3995,7 +4294,7 @@ msgstr "aturar completament"
 msgid "go to standby"
 msgstr "posar en repòs"
 
-msgid "headline"
+msgid "green"
 msgstr ""
 
 msgid "hear radio..."
@@ -4004,15 +4303,15 @@ msgstr "escoltar la ràdio..."
 msgid "help..."
 msgstr "ajuda..."
 
+msgid "hidden network"
+msgstr ""
+
 msgid "hide extended description"
 msgstr ""
 
 msgid "hide player"
 msgstr "amagar reproductor"
 
-msgid "highlighted button"
-msgstr ""
-
 msgid "horizontal"
 msgstr "horitzontal"
 
@@ -4145,9 +4444,6 @@ msgstr "no"
 msgid "no HDD found"
 msgstr "no hi ha disc dur"
 
-msgid "no Picture found"
-msgstr "no s'han trobat imatges"
-
 msgid "no module found"
 msgstr "no hi ha el mòdul"
 
@@ -4165,6 +4461,9 @@ msgstr "cap"
 msgid "not locked"
 msgstr "desbloquejat"
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr "res connectat"
 
@@ -4228,15 +4527,15 @@ msgstr "canal anterior"
 msgid "previous channel in history"
 msgstr "canal anterior en l'històric"
 
-msgid "rebooting..."
-msgstr ""
-
 msgid "record"
 msgstr "gravar"
 
 msgid "recording..."
 msgstr "gravant..."
 
+msgid "red"
+msgstr ""
+
 msgid "remove a nameserver entry"
 msgstr ""
 
@@ -4285,9 +4584,15 @@ msgstr ""
 msgid "right"
 msgstr "dreta"
 
+msgid "save last directory on exit"
+msgstr ""
+
 msgid "save playlist"
 msgstr "grava llista"
 
+msgid "save playlist on exit"
+msgstr ""
+
 msgid "scan done!"
 msgstr ""
 
@@ -4340,6 +4645,9 @@ msgstr ""
 msgid "show EPG..."
 msgstr "mostrar EPG..."
 
+msgid "show Infoline"
+msgstr ""
+
 msgid "show all"
 msgstr ""
 
@@ -4352,10 +4660,10 @@ msgstr "mostrar detalls del programa"
 msgid "show extended description"
 msgstr ""
 
-msgid "show first tag"
+msgid "show first selected tag"
 msgstr ""
 
-msgid "show second tag"
+msgid "show second selected tag"
 msgstr ""
 
 msgid "show shutdown menu"
@@ -4391,10 +4699,10 @@ msgstr "saltar endavant"
 msgid "skip forward (enter time)"
 msgstr "saltar endavant (introduint el temps)"
 
-msgid "sort by date"
+msgid "slide picture in loop"
 msgstr ""
 
-msgid "spaces (top, between rows, left)"
+msgid "sort by date"
 msgstr ""
 
 msgid "standard"
@@ -4406,6 +4714,9 @@ msgstr "en repòs"
 msgid "start cut here"
 msgstr "començar tall aquí"
 
+msgid "start directory"
+msgstr ""
+
 msgid "start timeshift"
 msgstr "activar pausa"
 
@@ -4436,14 +4747,20 @@ msgstr "canviar a la llista de fitxers"
 msgid "switch to playlist"
 msgstr "canviar a la llista"
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr ""
 
 msgid "switch to the next subtitle language"
 msgstr ""
 
-msgid "text"
-msgstr "text"
+msgid "template file"
+msgstr ""
+
+msgid "textcolor"
+msgstr ""
 
 msgid "this recording"
 msgstr "aquesta gravació"
@@ -4493,6 +4810,12 @@ msgstr "setmanalment"
 msgid "whitelist"
 msgstr "llista blanca"
 
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr ""
+
 msgid "yes"
 msgstr "si"
 
@@ -4531,9 +4854,15 @@ msgstr "zappejat"
 #~ msgid "#77ffffff"
 #~ msgstr "#77ffffff"
 
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "Add title..."
 #~ msgstr "Afegir títol..."
 
+#~ msgid "All..."
+#~ msgstr "Tot..."
+
 #~ msgid "Burn"
 #~ msgstr "Gravar"
 
@@ -4560,6 +4889,9 @@ msgstr "zappejat"
 #~ "Segur que vols descarregar\n"
 #~ "el plugin \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Segur que vols sortir?"
+
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "Vols veure un manual d'edició?"
 
@@ -4569,6 +4901,9 @@ msgstr "zappejat"
 #~ msgid "Edit title..."
 #~ msgstr "Editar títol..."
 
+#~ msgid "End"
+#~ msgstr "Fi"
+
 #~ msgid "Games / Plugins"
 #~ msgstr "Jocs / plugins"
 
@@ -4581,6 +4916,15 @@ msgstr "zappejat"
 #~ msgid "New DVD"
 #~ msgstr "Nou DVD"
 
+#~ msgid "Other..."
+#~ msgstr "Altres..."
+
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Sisplau selecciona la paraula a filtrar..."
+
+#~ msgid "Really delete this timer?"
+#~ msgstr "Esborrar aquesta programació?"
+
 #, fuzzy
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
@@ -4611,6 +4955,9 @@ msgstr "zappejat"
 #~ msgid "Save..."
 #~ msgstr "Gravar..."
 
+#~ msgid "Start"
+#~ msgstr "Iniciar"
+
 #~ msgid "Startwizard"
 #~ msgstr "Assistent d'inici"
 
@@ -4632,6 +4979,21 @@ msgstr "zappejat"
 #~ msgid "You have to wait for"
 #~ msgstr "Has d'esperar"
 
+#~ msgid ""
+#~ "You need to define some keywords first!\n"
+#~ "Press the menu-key to define keywords.\n"
+#~ "Do you want to define keywords now?"
+#~ msgstr ""
+#~ "Prèviament has de definir paraules clau\n"
+#~ "(per a fer-ho prem el botó del menú).\n"
+#~ "Vols definir-les ara?"
+
+#~ msgid "by Exif"
+#~ msgstr "per Exif"
+
+#~ msgid "delete"
+#~ msgstr "esborrar"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "igual al Socket A"
 
@@ -4644,6 +5006,9 @@ msgstr "zappejat"
 #~ msgid "minutes and"
 #~ msgstr "minuts i"
 
+#~ msgid "no Picture found"
+#~ msgstr "no s'han trobat imatges"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "només el directori /etc/enigma2"
 
@@ -4689,3 +5054,6 @@ msgstr "zappejat"
 
 #~ msgid "skip forward (self defined)"
 #~ msgstr "saltar endavant (definir)"
+
+#~ msgid "text"
+#~ msgstr "text"
index 82191ec..53f6310 100755 (executable)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
+"POT-Creation-Date: 2009-02-16 00:05+0100\n"
 "PO-Revision-Date: 2008-09-28 18:09+0100\n"
 "Last-Translator: ws79 <ws79@centrum.cz>\n"
 "Language-Team: \n"
@@ -15,6 +15,67 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid ""
+"\n"
+"Advanced options and settings."
+msgstr ""
+
+msgid ""
+"\n"
+"After pressing OK, please wait!"
+msgstr ""
+
+msgid ""
+"\n"
+"Backup your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Edit the upgrade source address."
+msgstr ""
+
+msgid ""
+"\n"
+"Online update of your Dreambox software."
+msgstr ""
+
+msgid ""
+"\n"
+"Press OK on your remote control to continue."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox with a new firmware."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your backups by date."
+msgstr ""
+
+msgid ""
+"\n"
+"Scan for local packages and install them."
+msgstr ""
+
+msgid ""
+"\n"
+"Select your backup device.\n"
+"Current device: "
+msgstr ""
+
+msgid ""
+"\n"
+"View, install and remove available or installed packages."
+msgstr ""
+
 msgid " "
 msgstr " "
 
@@ -96,9 +157,6 @@ msgstr ""
 msgid ".NFI Download failed:"
 msgstr ""
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -290,12 +348,6 @@ msgstr "AC3 implicitní"
 msgid "AC3 downmix"
 msgstr "AC3 downmix"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "O Dreamboxu"
 
@@ -355,9 +407,15 @@ msgstr ""
 msgid "Advanced"
 msgstr "Rozšířené"
 
+msgid "Advanced Options"
+msgstr ""
+
 msgid "Advanced Video Setup"
 msgstr "Rozšířené nastavení videa"
 
+msgid "Advanced restore"
+msgstr ""
+
 msgid "After event"
 msgstr "Po události"
 
@@ -377,9 +435,6 @@ msgstr "Vše"
 msgid "All Satellites"
 msgstr ""
 
-msgid "All..."
-msgstr "Vše..."
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -392,6 +447,9 @@ msgstr "Alternativní "
 msgid "An empty filename is illegal."
 msgstr "Neplatný název souboru."
 
+msgid "An error occured!"
+msgstr ""
+
 msgid "An unknown error occured!"
 msgstr ""
 
@@ -410,6 +468,16 @@ msgstr ""
 "Jste si jistý, že chcete síťové rozhraní?\n"
 "\n"
 
+msgid ""
+"Are you sure you want to restore\n"
+"following backup:\n"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restore your Enigma2 backup?\n"
+"Enigma2 will restart after the restore"
+msgstr ""
+
 msgid "Artist"
 msgstr "Herec"
 
@@ -479,9 +547,24 @@ msgstr "Umístění zálohování"
 msgid "Backup Mode"
 msgstr "Zálohovací mód"
 
+msgid "Backup done."
+msgstr ""
+
+msgid "Backup failed."
+msgstr ""
+
 msgid "Backup is done. Please press OK to see the result."
 msgstr "Záloha je hotova. Zmáčkněte OK pro zobrazení výsledků."
 
+msgid "Backup running"
+msgstr ""
+
+msgid "Backup running..."
+msgstr ""
+
+msgid "Backup system settings"
+msgstr ""
+
 msgid "Band"
 msgstr "Pásmo"
 
@@ -589,6 +672,9 @@ msgstr "Program"
 msgid "Channel Selection"
 msgstr "Výběr programu"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Program:"
 
@@ -613,6 +699,12 @@ msgstr "Ověřuji souborový systém..."
 msgid "Choose Tuner"
 msgstr "Vyber tuner"
 
+msgid "Choose backup files"
+msgstr ""
+
+msgid "Choose backup location"
+msgstr ""
+
 msgid "Choose bouquet"
 msgstr "Vybrat buket"
 
@@ -622,9 +714,18 @@ msgstr "Vyber zdroj"
 msgid "Choose target folder"
 msgstr "Vyberte cílovou složku"
 
+msgid "Choose upgrade source"
+msgstr ""
+
 msgid "Choose your Skin"
 msgstr "Vyber vzhled"
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr "Vyčistit"
 
@@ -725,15 +826,16 @@ msgstr "Pokračovat v přehrávání"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr ""
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr ""
 
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
+msgstr ""
+
 msgid "Create DVD-ISO"
 msgstr ""
 
@@ -804,9 +906,6 @@ msgstr "Dánsky"
 msgid "Date"
 msgstr "Datum"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "Hluboký spánek"
 
@@ -839,6 +938,9 @@ msgstr ""
 msgid "Description"
 msgstr "Popis"
 
+msgid "Deselect"
+msgstr ""
+
 msgid "Destination directory"
 msgstr ""
 
@@ -904,6 +1006,9 @@ msgstr "Zobrazit obraz 16:9 jako"
 msgid "Display 4:3 content as"
 msgstr "Zobrazit obraz 4:3 jako"
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Nastavení displeje"
 
@@ -930,9 +1035,6 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr ""
 
-msgid "Do you really want to exit?"
-msgstr "Opravdu chcete ukončit?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -970,18 +1072,30 @@ msgstr "Chcete povolit rodičovskou kontrolu na vašem Dreamboxu?"
 msgid "Do you want to install default sat lists?"
 msgstr ""
 
+msgid "Do you want to install the package:\n"
+msgstr ""
+
 msgid "Do you want to play DVD in drive?"
 msgstr "Chcete přehrát DVD v mechanice?"
 
 msgid "Do you want to preview this DVD before burning?"
 msgstr ""
 
+msgid "Do you want to reboot your Dreambox?"
+msgstr ""
+
+msgid "Do you want to remove the package:\n"
+msgstr ""
+
 msgid "Do you want to restore your settings?"
 msgstr "Chcete obnovit vaše nastavení?"
 
 msgid "Do you want to resume this playback?"
 msgstr "Chcete obnovit přehrávání?"
 
+msgid "Do you want to update your Dreambox?"
+msgstr ""
+
 msgid ""
 "Do you want to update your Dreambox?\n"
 "After pressing OK, please wait!"
@@ -989,6 +1103,9 @@ msgstr ""
 "Chcete updatovat váš Dreambox?\n"
 "Po stisku OK počkejte!"
 
+msgid "Do you want to upgrade the package:\n"
+msgstr ""
+
 msgid "Do you want to view a tutorial?"
 msgstr "Chcete zobrazit tutorial?"
 
@@ -1003,6 +1120,10 @@ msgstr "Hotovo - nainstalováno nebo aktualizováno %d baličků"
 msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr "Hotovo - nainstalováno nebo aktualizováno %d baličků s %d chyb"
 
+#, python-format
+msgid "Done - Installed, upgraded or removed %d packages with %d errors"
+msgstr ""
+
 msgid "Download"
 msgstr ""
 
@@ -1024,9 +1145,6 @@ msgstr "Stažitelné pluginy"
 msgid "Downloading"
 msgstr "Stahuji"
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Stahuji informace o pluginu. Prosím počkejte..."
 
@@ -1109,9 +1227,6 @@ msgstr ""
 msgid "Encryption Type"
 msgstr "Typ šifrování"
 
-msgid "End"
-msgstr "Konec"
-
 msgid "End time"
 msgstr "Konečný čas"
 
@@ -1183,6 +1298,9 @@ msgstr "Začátek programu:"
 msgid "Execution finished!!"
 msgstr "Konec programu!"
 
+msgid "Exif"
+msgstr ""
+
 msgid "Exit"
 msgstr "Ukončit"
 
@@ -1256,24 +1374,21 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr ""
 
-msgid "Fix USB stick"
-msgstr ""
-
 msgid "Flash"
 msgstr ""
 
 msgid "Flashing failed"
 msgstr ""
 
-msgid "Font size"
-msgstr ""
-
 msgid "Format"
 msgstr ""
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Počet opakování obrázku během skokového přetáčení"
 
+msgid "Frame size in full view"
+msgstr ""
+
 msgid "French"
 msgstr "Francouzsky"
 
@@ -1295,6 +1410,9 @@ msgstr "Pá"
 msgid "Friday"
 msgstr "Pátek"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP adresu"
 
@@ -1363,6 +1481,9 @@ msgstr "Hierarchické informace"
 msgid "Hierarchy mode"
 msgstr "Hiearchický mód"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Kolik minut chcete nahrát?"
 
@@ -1455,6 +1576,15 @@ msgstr "Inicializovat pevný disk..."
 msgid "Input"
 msgstr "Vstup"
 
+msgid "Install a new image with a USB stick"
+msgstr ""
+
+msgid "Install a new image with your web browser"
+msgstr ""
+
+msgid "Install local IPKG"
+msgstr ""
+
 msgid "Installing"
 msgstr "Instaluji"
 
@@ -1498,6 +1628,9 @@ msgstr "Inverze"
 msgid "Invert display"
 msgstr "Invertovat display"
 
+msgid "Ipkg"
+msgstr ""
+
 msgid "Italian"
 msgstr "Italsky"
 
@@ -1544,6 +1677,9 @@ msgstr "Poslední rychlost"
 msgid "Latitude"
 msgstr "Zeměpisná šířka"
 
+msgid "Latvian"
+msgstr ""
+
 msgid "Leave DVD Player?"
 msgstr "Opustit přehrávání DVD?"
 
@@ -1593,6 +1729,9 @@ msgstr "Umístění"
 msgid "Lock:"
 msgstr "Zámek:"
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr "Dlouhé stlačení klávesy"
 
@@ -1620,12 +1759,18 @@ msgstr "Udělat z této značky 'out' point"
 msgid "Make this mark just a mark"
 msgstr "Udat z toho jen značku"
 
+msgid "Manage your receiver's software"
+msgstr ""
+
 msgid "Manual Scan"
 msgstr "Manuální prohledávání"
 
 msgid "Manual transponder"
 msgstr "Ruční transponder"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Rezerva po skončení pořadu"
 
@@ -1650,6 +1795,9 @@ msgstr "Menu"
 msgid "Message"
 msgstr "Vzkaz"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Mkfs selhalo"
 
@@ -1792,6 +1940,9 @@ msgstr "Nelze nastavit 50 Hz"
 msgid "No HDD found or HDD not initialized!"
 msgstr "HDD nebyl nalezen nebo HDD není inicializován!"
 
+msgid "No Networks found"
+msgstr ""
+
 msgid "No backup needed"
 msgstr "Záloha není potřeba"
 
@@ -1826,6 +1977,9 @@ msgstr "Ždáný schopný positioner nebyl nalezen."
 msgid "No satellite frontend found!!"
 msgstr "Žádný satelitní frontend nenalezen!"
 
+msgid "No tags are set on these movies."
+msgstr ""
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Žádný tuner není nakofigurovat pro použití s diseqc positionerem!"
 
@@ -1917,12 +2071,6 @@ msgid "Now Playing"
 msgstr "Nyní hraje"
 
 msgid ""
-"Now please insert the USB stick (minimum size is 64 MB) that you want to "
-"format and use as .NFI image flasher. Press OK after you've put the stick "
-"back in."
-msgstr ""
-
-msgid ""
 "Now, use the contrast setting to turn up the brightness of the background as "
 "much as possible, but make sure that you can still see the difference "
 "between the two brightest levels of shades.If you have done that, press OK."
@@ -1961,9 +2109,6 @@ msgstr ""
 msgid "Orbital Position"
 msgstr "Orbitální pozice"
 
-msgid "Other..."
-msgstr "Ostatní..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -1976,6 +2121,9 @@ msgstr "Aktualizován seznam balíčků"
 msgid "Packet management"
 msgstr "Správa paketů"
 
+msgid "Packet manager"
+msgstr ""
+
 msgid "Page"
 msgstr "Strana"
 
@@ -1998,15 +2146,15 @@ msgstr "Nastavení rodičovského zámku"
 msgid "Parental control type"
 msgstr "Typ rodičovského zámku"
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr "Zastavit film na konci"
 
 msgid "PiPSetup"
 msgstr "Nastavení PiP"
 
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2050,6 +2198,11 @@ msgstr "Prosím vyberte balíček..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Vyberte prosím setting, který chcete nainstalovat."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Prosíme neměňte hodnoty pokud nevíte co děláte!"
 
@@ -2103,8 +2256,11 @@ msgstr "Prosím vyberte podprogram pro nahrávání..."
 msgid "Please select a subservice..."
 msgstr "Prosím vyberte podprogram..."
 
-msgid "Please select keyword to filter..."
-msgstr "Prosím vyberte klíčové slovo pro filtr..."
+msgid "Please select medium to use as backup location"
+msgstr ""
+
+msgid "Please select tag to filter..."
+msgstr ""
 
 msgid "Please select target directory or medium"
 msgstr ""
@@ -2138,7 +2294,7 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr ""
 
-msgid "Please wait for md5 signature verification..."
+msgid "Please wait while scanning is in progress..."
 msgstr ""
 
 msgid "Please wait while we configure your network..."
@@ -2216,6 +2372,10 @@ msgstr "Stiskněte OK k aktivovaní nastavení."
 msgid "Press OK to edit the settings."
 msgstr ""
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "Stiskněte OK pro prohledávání"
 
@@ -2231,6 +2391,9 @@ msgstr ""
 msgid "Primary DNS"
 msgstr "Primární DNS"
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr ""
 
@@ -2249,6 +2412,9 @@ msgstr "Poskytovatel k proskenování"
 msgid "Providers"
 msgstr "Poskytovatelé"
 
+msgid "Quick"
+msgstr ""
+
 msgid "Quickzap"
 msgstr "Rychlé přepínání"
 
@@ -2270,15 +2436,15 @@ msgstr "Rádio"
 msgid "Ram Disk"
 msgstr ""
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "Opravdu uzavřít bez uložení nastavení?"
 
 msgid "Really delete done timers?"
 msgstr "Opravdu smazat dokončené časovače?"
 
-msgid "Really delete this timer?"
-msgstr "Opravdu smazat tento časovač?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Opravdu vyskočit z rychlého přepínání podprogramů?"
 
@@ -2300,6 +2466,10 @@ msgstr "Nastavení příjmu"
 msgid "Record"
 msgstr "Náhrát"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Nahrané pořady..."
 
@@ -2321,7 +2491,7 @@ msgstr "Obnovovací frekvence"
 msgid "Refresh rate selection."
 msgstr "Výběr obnovovací rychlosti. (?)"
 
-msgid "Remounting stick partition..."
+msgid "Reload"
 msgstr ""
 
 msgid "Remove Bookmark"
@@ -2336,6 +2506,9 @@ msgstr "Odebrat značku"
 msgid "Remove currently selected title"
 msgstr "Odstranit vybraný titul"
 
+msgid "Remove finished."
+msgstr ""
+
 msgid "Remove plugins"
 msgstr "Odebrat plugin"
 
@@ -2345,9 +2518,15 @@ msgstr ""
 msgid "Remove the incomplete .NFI file?"
 msgstr ""
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr "Odebrat titul"
 
+msgid "Removing"
+msgstr ""
+
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
 msgstr ""
@@ -2397,6 +2576,18 @@ msgstr "Restartovat síťové připojení a rozhraní.\n"
 msgid "Restore"
 msgstr "Obnovit"
 
+msgid "Restore backups..."
+msgstr ""
+
+msgid "Restore running"
+msgstr ""
+
+msgid "Restore running..."
+msgstr ""
+
+msgid "Restore system settings"
+msgstr ""
+
 msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
 "settings now."
@@ -2575,6 +2766,9 @@ msgstr "Sekundární DNS"
 msgid "Seek"
 msgstr "Posunout (min)"
 
+msgid "Select"
+msgstr ""
+
 msgid "Select HDD"
 msgstr "Vyber HDD"
 
@@ -2596,6 +2790,12 @@ msgstr "Vybrat zvukovou stopu"
 msgid "Select channel to record from"
 msgstr "Vyberat program pro nahrávání"
 
+msgid "Select files for backup. Currently selected:\n"
+msgstr ""
+
+msgid "Select files/folders to backup..."
+msgstr ""
+
 msgid "Select image"
 msgstr ""
 
@@ -2774,12 +2974,30 @@ msgstr "Pomalu"
 msgid "Slow Motion speeds"
 msgstr "Rychlosti zpomaleného filmu"
 
+msgid "Software manager"
+msgstr ""
+
+msgid "Software manager..."
+msgstr ""
+
+msgid "Software restore"
+msgstr ""
+
+msgid "Software update"
+msgstr ""
+
 msgid "Some plugins are not available:\n"
 msgstr "Některé pluginy nejsou dostupné:\n"
 
 msgid "Somewhere else"
 msgstr "Někde jinde"
 
+msgid "Sorry MediaScanner is not installed!"
+msgstr ""
+
+msgid "Sorry no backups found!"
+msgstr ""
+
 msgid ""
 "Sorry your Backup destination does not exist\n"
 "\n"
@@ -2789,6 +3007,17 @@ msgstr ""
 "\n"
 "Prosím vyberte jiný."
 
+msgid ""
+"Sorry your backup destination is not writeable.\n"
+"Please choose an other one."
+msgstr ""
+
+msgid ""
+"Sorry, your backup destination is not writeable.\n"
+"\n"
+"Please choose another one."
+msgstr ""
+
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort A-Z"
 msgstr "Srovnat A-Z"
@@ -2815,9 +3044,6 @@ msgstr "Pohotovostní režim"
 msgid "Standby / Restart"
 msgstr "Standby / Restart"
 
-msgid "Start"
-msgstr "Začátek"
-
 msgid "Start from the beginning"
 msgstr "Spustit od začátku"
 
@@ -2860,6 +3086,12 @@ msgstr "Zastavit přehrávání toho filmu?"
 msgid "Stop test"
 msgstr "Zastavit test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr "Ulož pozici"
 
@@ -2924,12 +3156,27 @@ msgstr "TV systém"
 msgid "Table of content for collection"
 msgstr ""
 
+msgid "Tag 1"
+msgstr ""
+
+msgid "Tag 2"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
 msgid "Terrestrial"
 msgstr "Pozemní"
 
 msgid "Terrestrial provider"
 msgstr "Pozemní poskytovatel"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "Testovací mód"
 
@@ -2947,18 +3194,16 @@ msgstr ""
 "Stiskněte OK a můžete začít používat váš Dreambox."
 
 msgid ""
-"The .NFI Image flasher USB stick is now ready to use. Please download an ."
-"NFI image file from the feed server and save it on the stick. Then reboot "
-"and hold the 'Down' key on the front panel to boot the .NFI flasher from the "
-"stick!"
-msgstr ""
-
-msgid ""
 "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
 "create a Dreambox format data DVD (which will not play in stand-alone DVD "
 "players) instead?"
 msgstr ""
 
+msgid ""
+"The USB stick is now bootable. Do you want to download the latest image from "
+"the feed server and save it on the stick?"
+msgstr ""
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Zálohování selhalo. Prosím vyberte jiné umístění zálohy."
 
@@ -3017,6 +3262,10 @@ msgstr "Zadaný PIN je špatný."
 msgid "The pin codes you entered are different."
 msgstr "Zadané PINy se neshodují."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr "Časovač byl aktivován."
 
@@ -3146,6 +3395,9 @@ msgstr "Práh"
 msgid "Thu"
 msgstr "Čt"
 
+msgid "Thumbnails"
+msgstr ""
+
 msgid "Thursday"
 msgstr "Čtvrtek"
 
@@ -3193,6 +3445,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Časový posun není možný!"
 
+msgid "Timeshift path..."
+msgstr ""
+
 msgid "Timezone"
 msgstr "Čas. pásmo"
 
@@ -3206,8 +3461,12 @@ msgid "Titleset mode"
 msgstr ""
 
 msgid ""
-"To make sure you intend to do this, please remove the target USB stick now "
-"and stick it back in upon prompt. Press OK when you have taken the stick out."
+"To update your Dreambox firmware, please follow these steps:\n"
+"1) Turn off your box with the rear power switch and plug in the bootable USB "
+"stick.\n"
+"2) Turn mains back on and hold the DOWN button on the front panel pressed "
+"for 10 seconds.\n"
+"3) Wait for bootup and follow instructions of the wizard."
 msgstr ""
 
 msgid "Today"
@@ -3287,6 +3546,9 @@ msgstr "Turecky"
 msgid "Two"
 msgstr "Dva"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
 msgstr "Typ prohledávání"
 
@@ -3299,6 +3561,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB disk"
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3316,6 +3584,15 @@ msgstr ""
 msgid "Uncommitted DiSEqC command"
 msgstr "Nepotvrzený DiSEqC příkaz"
 
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
+
 msgid "Universal LNB"
 msgstr "Univerzální LNB"
 
@@ -3334,6 +3611,9 @@ msgstr "Aktualizace hotova. Tady je výsledek:"
 msgid "Updating... Please wait... This can take some minutes..."
 msgstr "Aktualizují... Prosím čekejte... Toto může trvat několik minut..."
 
+msgid "Upgrade finished."
+msgstr ""
+
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
 msgstr "Upgrade skončil. Chcete restartovat váš Dreambox?"
 
@@ -3343,6 +3623,9 @@ msgstr "Aktualizuji"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Aktualizuji Dreambox... Prosím čekejte"
 
+msgid "Use"
+msgstr ""
+
 msgid "Use DHCP"
 msgstr "Použit DHCP"
 
@@ -3409,6 +3692,9 @@ msgstr "VCR scart"
 msgid "VMGM (intro trailer)"
 msgstr ""
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr "Doladění obrazu..."
 
@@ -3478,9 +3764,6 @@ msgstr "WSS na 4:3"
 msgid "Waiting"
 msgstr "Čekání"
 
-msgid "Waiting for USB stick to settle..."
-msgstr ""
-
 msgid ""
 "We will now test if your TV can also display this resolution at 50hz. If "
 "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n"
@@ -3538,9 +3821,21 @@ msgstr "Západ"
 msgid "What do you want to scan?"
 msgstr "Co chcete prohledat?"
 
+msgid ""
+"When you do a factory reset, you will lose ALL your configuration data\n"
+"(including bouquets, services, satellite data ...)\n"
+"After completion of factory reset, your receiver will restart "
+"automatically!\n"
+"\n"
+"Really do a factory reset?"
+msgstr ""
+
 msgid "Where do you want to backup your settings?"
 msgstr "Kam chcete zazálohovat vaše nastavení?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
 msgid "Wireless"
 msgstr "Bezdrátové"
 
@@ -3556,9 +3851,6 @@ msgstr ""
 msgid "Writing NFI image file to flash completed"
 msgstr ""
 
-msgid "Writing image file to NAND Flash"
-msgstr ""
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
@@ -3656,10 +3948,20 @@ msgstr ""
 "zálohování."
 
 msgid ""
+"You have chosen to backup your settings. Please press OK to start the backup "
+"now."
+msgstr ""
+
+msgid ""
 "You have chosen to create a new .NFI flasher bootable USB stick. This will "
 "repartition the USB stick and therefore all data on it will be erased."
 msgstr ""
 
+msgid ""
+"You have chosen to restore your settings. Enigma2 will restart after "
+"restore. Please press OK to start the restore now."
+msgstr ""
+
 #, python-format
 msgid "You have to wait %s!"
 msgstr ""
@@ -3677,15 +3979,6 @@ msgstr ""
 "instrukcí na té stránce se vás váš dreambox zeptá na obnovu nastavení."
 
 msgid ""
-"You need to define some keywords first!\n"
-"Press the menu-key to define keywords.\n"
-"Do you want to define keywords now?"
-msgstr ""
-"Za prvné potřebujete nastavit nějaké klíčové slova!\n"
-"Stiskněte klávesu MENU pro nastavení.\n"
-"Chcete nyní nastavit klíčová slova?"
-
-msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
 "Do you want to set the pin now?"
@@ -3836,25 +4129,34 @@ msgstr ""
 msgid "audio tracks"
 msgstr ""
 
+msgid "auto"
+msgstr ""
+
 msgid "back"
 msgstr "Zpět"
 
 msgid "background image"
 msgstr ""
 
+msgid "backgroundcolor"
+msgstr ""
+
 msgid "better"
 msgstr "lepší"
 
+msgid "black"
+msgstr ""
+
 msgid "blacklist"
 msgstr "černá listina"
 
+msgid "blue"
+msgstr ""
+
 #, python-format
 msgid "burn audio track (%s)"
 msgstr ""
 
-msgid "by Exif"
-msgstr "podle exif"
-
 msgid "change recording (duration)"
 msgstr "Změnit nahrávání (dobu)"
 
@@ -3876,9 +4178,6 @@ msgstr "pravá kruhová (polarizace)"
 msgid "clear playlist"
 msgstr "vymazat playlist"
 
-msgid "color"
-msgstr ""
-
 msgid "complex"
 msgstr "komplexní"
 
@@ -3906,12 +4205,12 @@ msgstr "denně"
 msgid "day"
 msgstr ""
 
-msgid "delete"
-msgstr "smazat"
-
 msgid "delete cut"
 msgstr "smazat střih"
 
+msgid "delete file"
+msgstr ""
+
 msgid "delete playlist entry"
 msgstr "smazat položku playlistu"
 
@@ -4014,15 +4313,15 @@ msgstr ""
 msgid "failed"
 msgstr ""
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr ""
+
 msgid "filename"
 msgstr ""
 
 msgid "fine-tune your display"
 msgstr "doladit váš display"
 
-msgid "font face"
-msgstr ""
-
 msgid "forward to the next chapter"
 msgstr "přeskočit na další kapitolu"
 
@@ -4038,7 +4337,7 @@ msgstr "přejít do hlubokého spánku"
 msgid "go to standby"
 msgstr "přejít do pohotovostního režimu"
 
-msgid "headline"
+msgid "green"
 msgstr ""
 
 msgid "hear radio..."
@@ -4047,15 +4346,15 @@ msgstr "Poslouchat rádio..."
 msgid "help..."
 msgstr "Pomoc..."
 
+msgid "hidden network"
+msgstr ""
+
 msgid "hide extended description"
 msgstr "skrýt rozšířený popis"
 
 msgid "hide player"
 msgstr "schovat přehrávač"
 
-msgid "highlighted button"
-msgstr ""
-
 msgid "horizontal"
 msgstr "horizontální"
 
@@ -4187,9 +4486,6 @@ msgstr "ne"
 msgid "no HDD found"
 msgstr "HDD nenalezen"
 
-msgid "no Picture found"
-msgstr "žádný obrázek nenalezen"
-
 msgid "no module found"
 msgstr "Modul nenalezen"
 
@@ -4205,6 +4501,9 @@ msgstr "žádný"
 msgid "not locked"
 msgstr "nezamčeno"
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr "nic není připojeno"
 
@@ -4268,15 +4567,15 @@ msgstr "předchozí program"
 msgid "previous channel in history"
 msgstr "předchozí program v historii"
 
-msgid "rebooting..."
-msgstr ""
-
 msgid "record"
 msgstr "nahrát"
 
 msgid "recording..."
 msgstr "nahrávání.."
 
+msgid "red"
+msgstr ""
+
 msgid "remove a nameserver entry"
 msgstr ""
 
@@ -4325,9 +4624,15 @@ msgstr "převinout na předchozí kapitolu"
 msgid "right"
 msgstr "vpravo"
 
+msgid "save last directory on exit"
+msgstr ""
+
 msgid "save playlist"
 msgstr "uložit playlist"
 
+msgid "save playlist on exit"
+msgstr ""
+
 msgid "scan done!"
 msgstr ""
 
@@ -4380,6 +4685,9 @@ msgstr "zobrazit hlavní DVD menu"
 msgid "show EPG..."
 msgstr "Zobrazit EPG..."
 
+msgid "show Infoline"
+msgstr ""
+
 msgid "show all"
 msgstr "zobrazit vše"
 
@@ -4392,11 +4700,11 @@ msgstr "zobraz podrobnosti události"
 msgid "show extended description"
 msgstr "zobrazit rozšířený popis"
 
-msgid "show first tag"
-msgstr "zobrazit prvni tag"
+msgid "show first selected tag"
+msgstr ""
 
-msgid "show second tag"
-msgstr "zobrazit druhý tag"
+msgid "show second selected tag"
+msgstr ""
 
 msgid "show shutdown menu"
 msgstr "Zobrazit "
@@ -4431,12 +4739,12 @@ msgstr "Posun vpřed"
 msgid "skip forward (enter time)"
 msgstr "Posun vpřed (zadat čas)"
 
+msgid "slide picture in loop"
+msgstr ""
+
 msgid "sort by date"
 msgstr "srovnat podle data"
 
-msgid "spaces (top, between rows, left)"
-msgstr ""
-
 msgid "standard"
 msgstr "standard"
 
@@ -4446,6 +4754,9 @@ msgstr "pohotovostní režim"
 msgid "start cut here"
 msgstr "začít střih zde"
 
+msgid "start directory"
+msgstr ""
+
 msgid "start timeshift"
 msgstr "Spustit časový posun"
 
@@ -4476,14 +4787,20 @@ msgstr "Přepnout na seznam souborů"
 msgid "switch to playlist"
 msgstr "Přepnout na playlist"
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr "přepnout na další zvukovou stopu"
 
 msgid "switch to the next subtitle language"
 msgstr "přepnout na další jazyk ve skrytých titulcích"
 
-msgid "text"
-msgstr "text"
+msgid "template file"
+msgstr ""
+
+msgid "textcolor"
+msgstr ""
 
 msgid "this recording"
 msgstr "toto nahrávání"
@@ -4533,6 +4850,12 @@ msgstr "týdně"
 msgid "whitelist"
 msgstr "bílá listina"
 
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr ""
+
 msgid "yes"
 msgstr "ano"
 
@@ -4571,9 +4894,18 @@ msgstr "přepnutý"
 #~ msgid "#77ffffff"
 #~ msgstr "#77ffffff"
 
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "Add title..."
 #~ msgstr "Přidat titul..."
 
+#~ msgid "All..."
+#~ msgstr "Vše..."
+
 #~ msgid ""
 #~ "Are you sure you want to enable WLAN support?\n"
 #~ "Connect your Wlan USB Stick to your Dreambox and press OK.\n"
@@ -4655,6 +4987,9 @@ msgstr "přepnutý"
 #~ "Opravdu chcete stáhnout\n"
 #~ "tento plugin \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Opravdu chcete ukončit?"
+
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "Chcete zobrazit tutorial pro střih?"
 
@@ -4675,6 +5010,9 @@ msgstr "přepnutý"
 #~ "\n"
 #~ msgstr "Povolit LAN.\n"
 
+#~ msgid "End"
+#~ msgstr "Konec"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Ukončit průvodce a nastavit později ručně"
 
@@ -4726,6 +5064,9 @@ msgstr "přepnutý"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Ne, dovolte mi vybrat defaultní seznamy"
 
+#~ msgid "Other..."
+#~ msgstr "Ostatní..."
+
 #~ msgid ""
 #~ "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your "
 #~ "Dreambox and press the OK button on your remote control to enable the "
@@ -4756,6 +5097,9 @@ msgstr "přepnutý"
 #~ msgid "Please select below the wireless network you want to connect to."
 #~ msgstr "Vyberte bezdrátovou síť, ke které se chcete připojit."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Prosím vyberte klíčové slovo pro filtr..."
+
 #~ msgid ""
 #~ "Pressing OK enables the built in wireless LAN support of your Dreambox.\n"
 #~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are "
@@ -4770,6 +5114,9 @@ msgstr "přepnutý"
 #~ "Připojete bezdrátový adaptér před stisknutím OK.\n"
 #~ "\n"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "Opravdu smazat tento časovač?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4803,6 +5150,9 @@ msgstr "přepnutý"
 #~ msgid "Show files from %s"
 #~ msgstr "Zobrazit soubory z %s"
 
+#~ msgid "Start"
+#~ msgstr "Začátek"
+
 #~ msgid "Startwizard"
 #~ msgstr "Spustit průvodce"
 
@@ -4876,6 +5226,15 @@ msgstr "přepnutý"
 #~ msgstr "Musíte počkat na"
 
 #~ msgid ""
+#~ "You need to define some keywords first!\n"
+#~ "Press the menu-key to define keywords.\n"
+#~ "Do you want to define keywords now?"
+#~ msgstr ""
+#~ "Za prvné potřebujete nastavit nějaké klíčové slova!\n"
+#~ "Stiskněte klávesu MENU pro nastavení.\n"
+#~ "Chcete nyní nastavit klíčová slova?"
+
+#~ msgid ""
 #~ "Your local LAN internet connection is not working!\n"
 #~ "Please choose what you want to do next."
 #~ msgstr ""
@@ -4910,6 +5269,12 @@ msgstr "přepnutý"
 #~ "Vaše připojení k internetu přes bezdrátovou síť nefunguje!\n"
 #~ "Prosím, vyberte si co chcete udělat."
 
+#~ msgid "by Exif"
+#~ msgstr "podle exif"
+
+#~ msgid "delete"
+#~ msgstr "smazat"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "rovno slotu A"
 
@@ -4922,6 +5287,9 @@ msgstr "přepnutý"
 #~ msgid "minutes and"
 #~ msgstr "minuty a"
 
+#~ msgid "no Picture found"
+#~ msgstr "žádný obrázek nenalezen"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "jedině adresář /etc/enigma2"
 
@@ -4976,8 +5344,17 @@ msgstr "přepnutý"
 #~ msgid "seconds."
 #~ msgstr "sekundy."
 
+#~ msgid "show first tag"
+#~ msgstr "zobrazit prvni tag"
+
+#~ msgid "show second tag"
+#~ msgstr "zobrazit druhý tag"
+
 #~ msgid "skip backward (self defined)"
 #~ msgstr "Posun zpět"
 
 #~ msgid "skip forward (self defined)"
 #~ msgstr "Posun vpřed"
+
+#~ msgid "text"
+#~ msgstr "text"
index 115b0f3..e9a7269 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-26 14:56+0100\n"
+"POT-Creation-Date: 2009-02-16 00:05+0100\n"
 "PO-Revision-Date: 2008-11-26 14:22+0100\n"
 "Last-Translator: Ingmar Jørgensen <dreambox@ingmar.dk>\n"
 "Language-Team: jazzydane <dreambox@ingmar.dk>\n"
@@ -14,6 +14,67 @@ msgstr ""
 "X-Poedit-Country: DENMARK\n"
 "X-Poedit-SourceCharset: iso-8859-15\n"
 
+msgid ""
+"\n"
+"Advanced options and settings."
+msgstr ""
+
+msgid ""
+"\n"
+"After pressing OK, please wait!"
+msgstr ""
+
+msgid ""
+"\n"
+"Backup your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Edit the upgrade source address."
+msgstr ""
+
+msgid ""
+"\n"
+"Online update of your Dreambox software."
+msgstr ""
+
+msgid ""
+"\n"
+"Press OK on your remote control to continue."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox settings."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your Dreambox with a new firmware."
+msgstr ""
+
+msgid ""
+"\n"
+"Restore your backups by date."
+msgstr ""
+
+msgid ""
+"\n"
+"Scan for local packages and install them."
+msgstr ""
+
+msgid ""
+"\n"
+"Select your backup device.\n"
+"Current device: "
+msgstr ""
+
+msgid ""
+"\n"
+"View, install and remove available or installed packages."
+msgstr ""
+
 msgid " "
 msgstr " "
 
@@ -296,12 +357,6 @@ msgstr "AC3 Standard"
 msgid "AC3 downmix"
 msgstr "AC3 Nedmix"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Info"
 
@@ -361,9 +416,15 @@ msgstr ""
 msgid "Advanced"
 msgstr "Avanceret"
 
+msgid "Advanced Options"
+msgstr ""
+
 msgid "Advanced Video Setup"
 msgstr "Avanceret Video Instilling"
 
+msgid "Advanced restore"
+msgstr ""
+
 msgid "After event"
 msgstr "Efter film"
 
@@ -395,6 +456,9 @@ msgstr "Alternativ kanal tuner prioritet"
 msgid "An empty filename is illegal."
 msgstr "Et tomt filnavn er ugyldigt."
 
+msgid "An error occured!"
+msgstr ""
+
 msgid "An unknown error occured!"
 msgstr "Der opstod en ukendt fejl!"
 
@@ -415,6 +479,16 @@ msgstr ""
 "Er du sikker på at du vil genstarte dine interfaces?\n"
 "\n"
 
+msgid ""
+"Are you sure you want to restore\n"
+"following backup:\n"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restore your Enigma2 backup?\n"
+"Enigma2 will restart after the restore"
+msgstr ""
+
 msgid "Artist"
 msgstr "Kunstner"
 
@@ -484,9 +558,24 @@ msgstr "Kopi Lokation"
 msgid "Backup Mode"
 msgstr "Kopi Type"
 
+msgid "Backup done."
+msgstr ""
+
+msgid "Backup failed."
+msgstr ""
+
 msgid "Backup is done. Please press OK to see the result."
 msgstr "Kopien er færdig. Tryk OK for at se resultat."
 
+msgid "Backup running"
+msgstr ""
+
+msgid "Backup running..."
+msgstr ""
+
+msgid "Backup system settings"
+msgstr ""
+
 msgid "Band"
 msgstr "Bånd"
 
@@ -594,6 +683,9 @@ msgstr "Kanal Info..."
 msgid "Channel Selection"
 msgstr "Kanal Vælger"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Kanal:"
 
@@ -618,6 +710,12 @@ msgstr "Undersøge Filsystem..."
 msgid "Choose Tuner"
 msgstr "Vælg Tuner"
 
+msgid "Choose backup files"
+msgstr ""
+
+msgid "Choose backup location"
+msgstr ""
+
 msgid "Choose bouquet"
 msgstr "Vælg pakke"
 
@@ -627,9 +725,18 @@ msgstr "Vælg kilde"
 msgid "Choose target folder"
 msgstr "Vælg folder du vil bruge"
 
+msgid "Choose upgrade source"
+msgstr ""
+
 msgid "Choose your Skin"
 msgstr "Vælg dit Skin"
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr "Oprydning"
 
@@ -736,6 +843,10 @@ msgstr "Kunne ikke forbinde til Dreambox .NFI image feed serveren:"
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Kunne ikke indlæse media! Ingen disk isat?"
 
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
+msgstr ""
+
 msgid "Create DVD-ISO"
 msgstr "Opret DVD-ISO"
 
@@ -838,6 +949,9 @@ msgstr ""
 msgid "Description"
 msgstr "Beskrivelse"
 
+msgid "Deselect"
+msgstr ""
+
 msgid "Destination directory"
 msgstr "Destinations mappe"
 
@@ -903,6 +1017,9 @@ msgstr "Vis 16:9 indhold som"
 msgid "Display 4:3 content as"
 msgstr "Vis 4:3 indhold som"
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Display Indstillinger"
 
@@ -970,18 +1087,30 @@ msgstr "Vil du aktivere forældre kontrol muligheden på DreamBoxen?"
 msgid "Do you want to install default sat lists?"
 msgstr "Vil du installere standard satellit lister?"
 
+msgid "Do you want to install the package:\n"
+msgstr ""
+
 msgid "Do you want to play DVD in drive?"
 msgstr "Vil du afspille DVD i drevet?"
 
 msgid "Do you want to preview this DVD before burning?"
 msgstr "Vil du gennemse denne DVD inden brænding?"
 
+msgid "Do you want to reboot your Dreambox?"
+msgstr ""
+
+msgid "Do you want to remove the package:\n"
+msgstr ""
+
 msgid "Do you want to restore your settings?"
 msgstr "Vil du genskabe dine indstillinger?"
 
 msgid "Do you want to resume this playback?"
 msgstr "Vil du genoptage denne afspilning?"
 
+msgid "Do you want to update your Dreambox?"
+msgstr ""
+
 msgid ""
 "Do you want to update your Dreambox?\n"
 "After pressing OK, please wait!"
@@ -989,6 +1118,9 @@ msgstr ""
 "Vil du opdatere din Dreambox?\n"
 "Efter tryk på OK, vent venligst!"
 
+msgid "Do you want to upgrade the package:\n"
+msgstr ""
+
 msgid "Do you want to view a tutorial?"
 msgstr "Vil du se en oversigt?"
 
@@ -1003,6 +1135,10 @@ msgstr "Færdig - Installerede og opgraderede %d pakker"
 msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr "Færdig - Installerede og opgraderede %d pakker med %d fejl"
 
+#, python-format
+msgid "Done - Installed, upgraded or removed %d packages with %d errors"
+msgstr ""
+
 msgid "Download"
 msgstr "Download"
 
@@ -1261,9 +1397,6 @@ msgstr "Flash"
 msgid "Flashing failed"
 msgstr "Flash mislykkedes"
 
-msgid "Font size"
-msgstr "Skrift størrelse"
-
 msgid "Format"
 msgstr "Formatere"
 
@@ -1365,6 +1498,9 @@ msgstr "Hiraki Information"
 msgid "Hierarchy mode"
 msgstr "Hieraki type"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Hvor mange minutter vil du optage?"
 
@@ -1456,6 +1592,15 @@ msgstr "Initialiserer Harddisk..."
 msgid "Input"
 msgstr "Indgang"
 
+msgid "Install a new image with a USB stick"
+msgstr ""
+
+msgid "Install a new image with your web browser"
+msgstr ""
+
+msgid "Install local IPKG"
+msgstr ""
+
 msgid "Installing"
 msgstr "Installerer"
 
@@ -1499,6 +1644,9 @@ msgstr "Invertere"
 msgid "Invert display"
 msgstr "Inverter display"
 
+msgid "Ipkg"
+msgstr ""
+
 msgid "Italian"
 msgstr "Italiensk"
 
@@ -1545,6 +1693,9 @@ msgstr "Sidste hastighed"
 msgid "Latitude"
 msgstr "Breddegrad"
 
+msgid "Latvian"
+msgstr ""
+
 msgid "Leave DVD Player?"
 msgstr "Forlade DVD Afspiller?"
 
@@ -1594,6 +1745,9 @@ msgstr "Lokation"
 msgid "Lock:"
 msgstr "Lås:"
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr "Langt Tastetryk"
 
@@ -1621,12 +1775,18 @@ msgstr "Lave dette mærke til 'ud' point"
 msgid "Make this mark just a mark"
 msgstr "Lave dette mærke til kun et mærke"
 
+msgid "Manage your receiver's software"
+msgstr ""
+
 msgid "Manual Scan"
 msgstr "Manuel Søgning"
 
 msgid "Manual transponder"
 msgstr "Manuel transponder"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Margin efter optagelse"
 
@@ -1651,6 +1811,9 @@ msgstr "Menu"
 msgid "Message"
 msgstr "Besked"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Mkfs fejlede"
 
@@ -1986,6 +2149,9 @@ msgstr "Pakke liste opdatering"
 msgid "Packet management"
 msgstr "Pakke kontrol"
 
+msgid "Packet manager"
+msgstr ""
+
 msgid "Page"
 msgstr "Side"
 
@@ -2122,6 +2288,9 @@ msgstr "Vælg en underkanal til at optagelse..."
 msgid "Please select a subservice..."
 msgstr "Vælg venligst en underkanal..."
 
+msgid "Please select medium to use as backup location"
+msgstr ""
+
 msgid "Please select tag to filter..."
 msgstr "Vælg venligst tag til filtrering..."
 
@@ -2159,6 +2328,9 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr "Vent venligt på aktivering af din netværks opsætning..."
 
+msgid "Please wait while scanning is in progress..."
+msgstr ""
+
 msgid "Please wait while we configure your network..."
 msgstr "Vent venligts, mens vi opsætter dit netværk..."
 
@@ -2234,6 +2406,10 @@ msgstr "Tryk OK for at aktivere indstillinger."
 msgid "Press OK to edit the settings."
 msgstr "Tryk på OK for at redigere indstillinger."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "Tryk OK for at søge"
 
@@ -2249,6 +2425,9 @@ msgstr "Gennemsyns menu"
 msgid "Primary DNS"
 msgstr "Primær DNS"
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr "Egenskaber for den aktuelle titel"
 
@@ -2267,6 +2446,9 @@ msgstr "Udbyder til søgning"
 msgid "Providers"
 msgstr "Udbydere"
 
+msgid "Quick"
+msgstr ""
+
 msgid "Quickzap"
 msgstr "Hurtigskift"
 
@@ -2288,15 +2470,15 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Ram Disk"
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "Vil du virkelig lukke uden at gemme indstillinger?"
 
 msgid "Really delete done timers?"
 msgstr "Slette udførte timere?"
 
-msgid "Really delete this timer?"
-msgstr "Vil du virkelig slette denne timer?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Vil du afslutte underkanals hurtigskift?"
 
@@ -2318,6 +2500,10 @@ msgstr "Modtage Indstillinger"
 msgid "Record"
 msgstr "Optage"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Optagede filer..."
 
@@ -2339,6 +2525,9 @@ msgstr "Opdaterings  Rate"
 msgid "Refresh rate selection."
 msgstr "Opdaterings Rate vælger."
 
+msgid "Reload"
+msgstr ""
+
 msgid "Remove Bookmark"
 msgstr "Fjern bogmærke"
 
@@ -2351,6 +2540,9 @@ msgstr "Fjerne et mærke"
 msgid "Remove currently selected title"
 msgstr "Fjerne nuværende valgte titel"
 
+msgid "Remove finished."
+msgstr ""
+
 msgid "Remove plugins"
 msgstr "Fjerne plugins"
 
@@ -2360,9 +2552,15 @@ msgstr "Fjern den ødelagte .NFI fil?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Fjern den ukomplette .NFI fil?"
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr "Fjerne titel"
 
+msgid "Removing"
+msgstr ""
+
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
 msgstr "Fjernelsen af mappen %s mislykkedes. (Måske ikke tom.)"
@@ -2412,6 +2610,18 @@ msgstr "Genstart din netværk opkobling og interfaces.\n"
 msgid "Restore"
 msgstr "Gendanne"
 
+msgid "Restore backups..."
+msgstr ""
+
+msgid "Restore running"
+msgstr ""
+
+msgid "Restore running..."
+msgstr ""
+
+msgid "Restore system settings"
+msgstr ""
+
 msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
 "settings now."
@@ -2589,6 +2799,9 @@ msgstr "Sekundær DNS"
 msgid "Seek"
 msgstr "Søg"
 
+msgid "Select"
+msgstr ""
+
 msgid "Select HDD"
 msgstr "Vælg Filsystem"
 
@@ -2610,6 +2823,12 @@ msgstr "Vælg lyd spor"
 msgid "Select channel to record from"
 msgstr "Vælg optagekanal"
 
+msgid "Select files for backup. Currently selected:\n"
+msgstr ""
+
+msgid "Select files/folders to backup..."
+msgstr ""
+
 msgid "Select image"
 msgstr "Vælg image"
 
@@ -2788,12 +3007,30 @@ msgstr "Langsom"
 msgid "Slow Motion speeds"
 msgstr "Langsom bevægelse hastigheder"
 
+msgid "Software manager"
+msgstr ""
+
+msgid "Software manager..."
+msgstr ""
+
+msgid "Software restore"
+msgstr ""
+
+msgid "Software update"
+msgstr ""
+
 msgid "Some plugins are not available:\n"
 msgstr "Nogle plugins er ikke tilstede:\n"
 
 msgid "Somewhere else"
 msgstr "Andet steds"
 
+msgid "Sorry MediaScanner is not installed!"
+msgstr ""
+
+msgid "Sorry no backups found!"
+msgstr ""
+
 msgid ""
 "Sorry your Backup destination does not exist\n"
 "\n"
@@ -2803,6 +3040,17 @@ msgstr ""
 "\n"
 "Vælg venligst en anden."
 
+msgid ""
+"Sorry your backup destination is not writeable.\n"
+"Please choose an other one."
+msgstr ""
+
+msgid ""
+"Sorry, your backup destination is not writeable.\n"
+"\n"
+"Please choose another one."
+msgstr ""
+
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort A-Z"
 msgstr "Sorter A-Z"
@@ -2871,6 +3119,12 @@ msgstr "Stoppe afspilning af denne film?"
 msgid "Stop test"
 msgstr "Stoppe test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+