Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 11 Feb 2009 11:52:48 +0000 (12:52 +0100)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 11 Feb 2009 11:52:48 +0000 (12:52 +0100)
Conflicts:

lib/dvb/decoder.cpp

194 files changed:
LICENSE
Navigation.py
RecordTimer.py
configure.ac
data/countries/x-fy.png [new file with mode: 0644]
data/keymap.xml
data/menu.xml
data/skin.xml [changed mode: 0644->0755]
data/skin_default.xml
data/skin_default/bar_snr.png
data/skin_default/bottombar.png
data/skin_default/icons/epgclock_add.png [new file with mode: 0644]
data/skin_default/icons/epgclock_post.png [new file with mode: 0644]
data/skin_default/icons/epgclock_pre.png [new file with mode: 0644]
data/skin_default/icons/epgclock_prepost.png [new file with mode: 0644]
data/skin_default/icons/icon_view.png [new file with mode: 0644]
keymapparser.py
lib/actions/parseactions.py
lib/base/ebase.cpp
lib/base/ebase.h
lib/base/eerror.cpp
lib/base/nconfig.cpp
lib/driver/avswitch.cpp
lib/driver/avswitch.h
lib/dvb/db.cpp
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/demux.cpp
lib/dvb/demux.h
lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/dvb/dvbtime.cpp
lib/dvb/dvbtime.h
lib/dvb/epgcache.cpp
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/frontendparms.h
lib/dvb/idemux.h
lib/dvb/idvb.h
lib/dvb/metaparser.cpp
lib/dvb/metaparser.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/dvb/pvrparse.cpp
lib/dvb/pvrparse.h
lib/dvb/scan.cpp
lib/dvb/sec.cpp
lib/dvb/sec.h
lib/gdi/picexif.cpp
lib/gdi/picexif.h
lib/gdi/picload.cpp
lib/gdi/picload.h
lib/gui/elistbox.cpp
lib/gui/elistboxcontent.cpp
lib/gui/eslider.cpp
lib/gui/eslider.h
lib/gui/esubtitle.cpp
lib/nav/core.cpp
lib/nav/core.h
lib/nav/pcore.cpp
lib/nav/pcore.h
lib/python/Components/AVSwitch.py
lib/python/Components/Console.py
lib/python/Components/Converter/EventTime.py
lib/python/Components/Converter/MovieInfo.py
lib/python/Components/Converter/RemainingToText.py
lib/python/Components/Converter/ServicePosition.py
lib/python/Components/Converter/ServiceTime.py
lib/python/Components/Converter/TemplatedMultiContent.py
lib/python/Components/Element.py
lib/python/Components/EpgList.py
lib/python/Components/FileList.py
lib/python/Components/Harddisk.py
lib/python/Components/Language.py
lib/python/Components/Makefile.am
lib/python/Components/MovieList.py
lib/python/Components/MultiContent.py
lib/python/Components/NimManager.py
lib/python/Components/Renderer/Canvas.py
lib/python/Components/ResourceManager.py [new file with mode: 0644]
lib/python/Components/Scanner.py
lib/python/Components/ServiceScan.py
lib/python/Components/Sources/List.py
lib/python/Components/Sources/Progress.py
lib/python/Components/Task.py
lib/python/Components/TimerSanityCheck.py
lib/python/Components/TuneTest.py [new file with mode: 0644]
lib/python/Components/TunerInfo.py
lib/python/Components/UsageConfig.py
lib/python/Components/config.py
lib/python/Components/language_cache.py
lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py
lib/python/Plugins/Extensions/CutListEditor/plugin.py
lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py
lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py
lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml [new file with mode: 0644]
lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml [deleted file]
lib/python/Plugins/Extensions/DVDBurn/Process.py
lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py
lib/python/Plugins/Extensions/DVDBurn/Text menu boat.ddvdm.xml [new file with mode: 0644]
lib/python/Plugins/Extensions/DVDBurn/Thumbs menu clouds.ddvdm.xml [new file with mode: 0644]
lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py
lib/python/Plugins/Extensions/DVDBurn/TitleList.py
lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py
lib/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg [new file with mode: 0644]
lib/python/Plugins/Extensions/DVDBurn/dvdburn.png [changed mode: 0755->0644]
lib/python/Plugins/Extensions/DVDPlayer/keymap.xml
lib/python/Plugins/Extensions/DVDPlayer/plugin.py
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py
lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py
lib/python/Plugins/Extensions/Makefile.am
lib/python/Plugins/Extensions/MediaPlayer/plugin.py
lib/python/Plugins/Extensions/MediaPlayer/settings.py
lib/python/Plugins/Extensions/MediaScanner/plugin.py
lib/python/Plugins/Extensions/PicturePlayer/plugin.py
lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
lib/python/Plugins/SystemPlugins/Satfinder/plugin.py
lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
lib/python/Plugins/SystemPlugins/Videomode/plugin.py
lib/python/Plugins/newplugin.py [new file with mode: 0644]
lib/python/Screens/ChannelSelection.py
lib/python/Screens/Console.py
lib/python/Screens/EpgSelection.py
lib/python/Screens/EventView.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Makefile.am
lib/python/Screens/Menu.py
lib/python/Screens/Satconfig.py
lib/python/Screens/ScanSetup.py
lib/python/Screens/ServiceInfo.py
lib/python/Screens/Setup.py
lib/python/Screens/Standby.py
lib/python/Screens/TextBox.py [new file with mode: 0644]
lib/python/Screens/TimerEdit.py
lib/python/Screens/TimerEntry.py
lib/python/Screens/Wizard.py [changed mode: 0644->0755]
lib/python/Tools/Directories.py
lib/python/Tools/LoadPixmap.py
lib/python/Tools/Makefile.am
lib/python/Tools/NumericalTextInput.py
lib/python/Tools/Transponder.py [new file with mode: 0644]
lib/python/enigma_python.i
lib/python/python.cpp
lib/python/python.h
lib/service/listboxservice.cpp
lib/service/servicedvb.cpp
lib/service/servicedvb.h
lib/service/servicedvbrecord.cpp
lib/service/servicedvbrecord.h
lib/service/servicemp3.cpp
lib/service/servicemp3.h
main/bsod.cpp
main/bsod.h
main/enigma-dvbtest.cpp
main/enigma-scan.cpp
main/enigma.cpp
mytest.py
po/Makefile.am
po/ar.po
po/ca.po
po/cs.po
po/da.po [changed mode: 0755->0644]
po/de.po
po/el.po
po/en.po
po/enigma2.pot
po/es.po
po/fi.po [changed mode: 0755->0644]
po/fr.po
po/fy.po [new file with mode: 0644]
po/hr.po
po/hu.po [changed mode: 0755->0644]
po/is.po
po/it.po [changed mode: 0755->0644]
po/lt.po [changed mode: 0755->0644]
po/nl.po
po/no.po
po/pl.po [changed mode: 0755->0644]
po/pt.po
po/ru.po
po/sv.po
po/tr.po
po/uk.po
skin.py
tests/test_timer.py

diff --git a/LICENSE b/LICENSE
index 3e6b69e3bf047a9dcdff2a910b4161d198634712..8991189bc1ec85cdb9cdd715cb9e4c2b0e317881 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -26,7 +26,7 @@ agree that your code will be licensed under the proprietary license.
 
 Note that "official sourcetree" just means the version which is 
 included in the main developer CVS hosted at, or on behalf of,
-Dream Multimedia TV.
+Dream Multimedia.
 
 You are, of course, free to make patches to a GPL-only version. These
 changes won't show up in the "official release" then, though.
index 42733cb23b9f9e7754d4075901661d71f14b0d81..2ca87f6f57d4acd0b7dfadb03100f360f5ca7178 100644 (file)
@@ -11,7 +11,7 @@ import ServiceReference
 
 # TODO: remove pNavgation, eNavigation and rewrite this stuff in python.
 class Navigation:
-       def __init__(self):
+       def __init__(self, nextRecordTimerAfterEventActionAuto=False):
                if NavigationInstance.instance is not None:
                        raise NavigationInstance.instance
                
@@ -33,7 +33,7 @@ class Navigation:
                        clearFPWasTimerWakeup()
                        if getFPWasTimerWakeup(): # sanity check to detect if the FP driver is working correct!
                                print "buggy fp driver detected!!! please update drivers.... ignore timer wakeup!"
-                       elif len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360:
+                       elif nextRecordTimerAfterEventActionAuto and (len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360):
                                if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
                                        RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling
                self.SleepTimer = SleepTimer.SleepTimer()
@@ -87,7 +87,7 @@ class Navigation:
                if ref:
                        if ref.flags & eServiceReference.isGroup:
                                ref = getBestPlayableServiceReference(ref, eServiceReference(), simulate)
-                       service = ref and self.pnav and self.pnav.recordService(ref)
+                       service = ref and self.pnav and self.pnav.recordService(ref, simulate)
                        if service is None:
                                print "record returned non-zero"
                return service
@@ -96,8 +96,8 @@ class Navigation:
                ret = self.pnav and self.pnav.stopRecordService(service)
                return ret
 
-       def getRecordings(self):
-               return self.pnav and self.pnav.getRecordings()
+       def getRecordings(self, simulate=False):
+               return self.pnav and self.pnav.getRecordings(simulate)
 
        def getCurrentService(self):
                if not self.currentlyPlayingService:
index 28b878a196f6277a5fed711750bdd041194aea32..897c281abb9cea598946d0716c28bc6787e0c810 100644 (file)
@@ -4,7 +4,7 @@ from Tools import Directories, Notifications
 
 from Components.config import config
 import timer
-import xml.dom.minidom
+import xml.etree.cElementTree
 
 from enigma import eEPGCache, getBestPlayableServiceReference, \
        eServiceReference, iRecordableService, quitMainloop
@@ -17,7 +17,7 @@ import Screens.Standby
 
 from time import localtime
 
-from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
+from Tools.XMLTools import stringToXML
 from ServiceReference import ServiceReference
 
 # ok, for descriptions etc we have:
@@ -47,6 +47,7 @@ class AFTEREVENT:
        NONE = 0
        STANDBY = 1
        DEEPSTANDBY = 2
+       AUTO = 3
 
 # please do not translate log messages
 class RecordTimerEntry(timer.TimerEntry, object):
@@ -91,7 +92,7 @@ class RecordTimerEntry(timer.TimerEntry, object):
                        Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes)
 #################################################################
 
-       def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None, tags = None):
+       def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.AUTO, checkOldTimers = False, dirname = None, tags = None):
                timer.TimerEntry.__init__(self, int(begin), int(end))
 
                if checkOldTimers == True:
@@ -117,6 +118,7 @@ class RecordTimerEntry(timer.TimerEntry, object):
                self.dirname = dirname
                self.dirnameHadToFallback = False
                self.autoincrease = False
+               self.autoincreasetime = 3600 * 24 # 1 day
                self.tags = tags or []
 
                self.log_entries = []
@@ -139,7 +141,7 @@ class RecordTimerEntry(timer.TimerEntry, object):
                if self.name:
                        filename += " - " + self.name
 
-               if self.dirname and not Directories.pathExists(self.dirname):
+               if self.dirname and not Directories.fileExists(self.dirname, 'w'):
                        self.dirnameHadToFallback = True
                        self.Filename = Directories.getRecordingFilename(filename, None)
                else:
@@ -267,6 +269,11 @@ class RecordTimerEntry(timer.TimerEntry, object):
 
                                return True
                elif next_state == self.StateEnded:
+                       old_end = self.end
+                       if self.setAutoincreaseEnd():
+                               self.log(12, "autoincrase recording %d minute(s)" % int((self.end - old_end)/60))
+                               self.state -= 1
+                               return True
                        self.log(12, "stop recording")
                        if not self.justplay:
                                NavigationInstance.instance.stopRecordService(self.record_service)
@@ -282,6 +289,29 @@ class RecordTimerEntry(timer.TimerEntry, object):
                                                Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
                        return True
 
+       def setAutoincreaseEnd(self, entry = None):
+               if not self.autoincrease:
+                       return False
+               if entry is None:
+                       new_end =  int(time.time()) + self.autoincreasetime
+               else:
+                       new_end = entry.begin -30
+
+               dummyentry = RecordTimerEntry(self.service_ref, self.begin, new_end, self.name, self.description, self.eit, disabled=True, justplay = self.justplay, afterEvent = self.afterEvent, dirname = self.dirname, tags = self.tags)
+               dummyentry.disabled = self.disabled
+               timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry)
+               if not timersanitycheck.check():
+                       simulTimerList = timersanitycheck.getSimulTimerList()
+                       new_end = simulTimerList[1].begin
+                       del simulTimerList
+                       new_end -= 30                           # 30 Sekunden Prepare-Zeit lassen
+               del dummyentry
+               if new_end <= time.time():
+                       return False
+               self.end = new_end
+               return True
+       
+       
        def sendStandbyNotification(self, answer):
                if answer:
                        Notifications.AddNotification(Screens.Standby.Standby)
@@ -353,37 +383,45 @@ class RecordTimerEntry(timer.TimerEntry, object):
        record_service = property(lambda self: self.__record_service, setRecordService)
 
 def createTimer(xml):
-       begin = int(xml.getAttribute("begin"))
-       end = int(xml.getAttribute("end"))
-       serviceref = ServiceReference(xml.getAttribute("serviceref").encode("utf-8"))
-       description = xml.getAttribute("description").encode("utf-8")
-       repeated = xml.getAttribute("repeated").encode("utf-8")
-       disabled = long(xml.getAttribute("disabled") or "0")
-       justplay = long(xml.getAttribute("justplay") or "0")
-       afterevent = str(xml.getAttribute("afterevent") or "nothing")
-       afterevent = { "nothing": AFTEREVENT.NONE, "standby": AFTEREVENT.STANDBY, "deepstandby": AFTEREVENT.DEEPSTANDBY }[afterevent]
-       if xml.hasAttribute("eit") and xml.getAttribute("eit") != "None":
-               eit = long(xml.getAttribute("eit"))
+       begin = int(xml.get("begin"))
+       end = int(xml.get("end"))
+       serviceref = ServiceReference(xml.get("serviceref").encode("utf-8"))
+       description = xml.get("description").encode("utf-8")
+       repeated = xml.get("repeated").encode("utf-8")
+       disabled = long(xml.get("disabled") or "0")
+       justplay = long(xml.get("justplay") or "0")
+       afterevent = str(xml.get("afterevent") or "nothing")
+       afterevent = {
+               "nothing": AFTEREVENT.NONE,
+               "standby": AFTEREVENT.STANDBY,
+               "deepstandby": AFTEREVENT.DEEPSTANDBY,
+               "auto": AFTEREVENT.AUTO
+               }[afterevent]
+       eit = xml.get("eit")
+       if eit and eit != "None":
+               eit = long(eit);
        else:
                eit = None
-       if xml.hasAttribute("location") and xml.getAttribute("location") != "None":
-               location = xml.getAttribute("location").encode("utf-8")
+       location = xml.get("location")
+       if location and location != "None":
+               location = location.encode("utf-8")
        else:
                location = None
-       if xml.hasAttribute("tags") and xml.getAttribute("tags"):
-               tags = xml.getAttribute("tags").encode("utf-8").split(' ')
+       tags = xml.get("tags")
+       if tags and tags != "None":
+               tags = tags.encode("utf-8").split(' ')
        else:
                tags = None
 
-       name = xml.getAttribute("name").encode("utf-8")
-       #filename = xml.getAttribute("filename").encode("utf-8")
+       name = xml.get("name").encode("utf-8")
+       #filename = xml.get("filename").encode("utf-8")
        entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags)
        entry.repeated = int(repeated)
        
-       for l in elementsWithTag(xml.childNodes, "log"):
-               time = int(l.getAttribute("time"))
-               code = int(l.getAttribute("code"))
-               msg = mergeText(l.childNodes).strip().encode("utf-8")
+       for l in xml.findall("log"):
+               time = int(l.get("time"))
+               code = int(l.get("code"))
+               msg = l.text.strip().encode("utf-8")
                entry.log_entries.append((time, code, msg))
        
        return entry
@@ -409,8 +447,8 @@ class RecordTimer(timer.Timer):
        def loadTimer(self):
                # TODO: PATH!
                try:
-                       doc = xml.dom.minidom.parse(self.Filename)
-               except xml.parsers.expat.ExpatError:
+                       doc = xml.etree.cElementTree.parse(self.Filename)
+               except SyntaxError:
                        from Tools.Notifications import AddPopup
                        from Screens.MessageBox import MessageBox
 
@@ -420,15 +458,18 @@ class RecordTimer(timer.Timer):
                        try:
                                import os
                                os.rename(self.Filename, self.Filename + "_old")
-                       except IOError:
+                       except (IOError, OSError):
                                print "renaming broken timer failed"
                        return
+               except IOError:
+                       print "timers.xml not found!"
+                       return
 
-               root = doc.childNodes[0]
+               root = doc.getroot()
 
                # put out a message when at least one timer overlaps
                checkit = True
-               for timer in elementsWithTag(root.childNodes, "timer"):
+               for timer in root.findall("timer"):
                        newTimer = createTimer(timer)
                        if (self.record(newTimer, True, True) is not None) and (checkit == True):
                                from Tools.Notifications import AddPopup
@@ -437,45 +478,44 @@ class RecordTimer(timer.Timer):
                                checkit = False # at moment it is enough when the message is displayed one time
 
        def saveTimer(self):
-               #doc = xml.dom.minidom.Document()
-               #root_element = doc.createElement('timers')
-               #doc.appendChild(root_element)
-               #root_element.appendChild(doc.createTextNode("\n"))
-               
+               #root_element = xml.etree.cElementTree.Element('timers')
+               #root_element.text = "\n"
+
                #for timer in self.timer_list + self.processed_timers:
                        # some timers (instant records) don't want to be saved.
                        # skip them
                        #if timer.dontSave:
                                #continue
-                       #t = doc.createTextNode("\t")
-                       #root_element.appendChild(t)
-                       #t = doc.createElement('timer')
-                       #t.setAttribute("begin", str(int(timer.begin)))
-                       #t.setAttribute("end", str(int(timer.end)))
-                       #t.setAttribute("serviceref", str(timer.service_ref))
-                       #t.setAttribute("repeated", str(timer.repeated))                        
-                       #t.setAttribute("name", timer.name)
-                       #t.setAttribute("description", timer.description)
-                       #t.setAttribute("eit", str(timer.eit))
-                       
-                       #for time, code, msg in timer.log_entries:
-                               #t.appendChild(doc.createTextNode("\t\t"))
-                               #l = doc.createElement('log')
-                               #l.setAttribute("time", str(time))
-                               #l.setAttribute("code", str(code))
-                               #l.appendChild(doc.createTextNode(msg))
-                               #t.appendChild(l)
-                               #t.appendChild(doc.createTextNode("\n"))
-
-                       #root_element.appendChild(t)
-                       #t = doc.createTextNode("\n")
-                       #root_element.appendChild(t)
+                       #t = xml.etree.cElementTree.SubElement(root_element, 'timers')
+                       #t.set("begin", str(int(timer.begin)))
+                       #t.set("end", str(int(timer.end)))
+                       #t.set("serviceref", str(timer.service_ref))
+                       #t.set("repeated", str(timer.repeated))                 
+                       #t.set("name", timer.name)
+                       #t.set("description", timer.description)
+                       #t.set("afterevent", str({
+                       #       AFTEREVENT.NONE: "nothing",
+                       #       AFTEREVENT.STANDBY: "standby",
+                       #       AFTEREVENT.DEEPSTANDBY: "deepstandby",
+                       #       AFTEREVENT.AUTO: "auto"}))
+                       #if timer.eit is not None:
+                       #       t.set("eit", str(timer.eit))
+                       #if timer.dirname is not None:
+                       #       t.set("location", str(timer.dirname))
+                       #t.set("disabled", str(int(timer.disabled)))
+                       #t.set("justplay", str(int(timer.justplay)))
+                       #t.text = "\n"
+                       #t.tail = "\n"
 
+                       #for time, code, msg in timer.log_entries:
+                               #l = xml.etree.cElementTree.SubElement(t, 'log')
+                               #l.set("time", str(time))
+                               #l.set("code", str(code))
+                               #l.text = str(msg)
+                               #l.tail = "\n"
 
-               #file = open(self.Filename, "w")
-               #doc.writexml(file)
-               #file.write("\n")
-               #file.close()
+               #doc = xml.etree.cElementTree.ElementTree(root_element)
+               #doc.write(self.Filename)
 
                list = []
 
@@ -493,7 +533,12 @@ class RecordTimer(timer.Timer):
                        list.append(' repeated="' + str(int(timer.repeated)) + '"')
                        list.append(' name="' + str(stringToXML(timer.name)) + '"')
                        list.append(' description="' + str(stringToXML(timer.description)) + '"')
-                       list.append(' afterevent="' + str(stringToXML({ AFTEREVENT.NONE: "nothing", AFTEREVENT.STANDBY: "standby", AFTEREVENT.DEEPSTANDBY: "deepstandby" }[timer.afterEvent])) + '"')
+                       list.append(' afterevent="' + str(stringToXML({
+                               AFTEREVENT.NONE: "nothing",
+                               AFTEREVENT.STANDBY: "standby",
+                               AFTEREVENT.DEEPSTANDBY: "deepstandby",
+                               AFTEREVENT.AUTO: "auto"
+                               }[timer.afterEvent])) + '"')
                        if timer.eit is not None:
                                list.append(' eit="' + str(timer.eit) + '"')
                        if timer.dirname is not None:
@@ -538,6 +583,18 @@ class RecordTimer(timer.Timer):
                        return timer.begin
                return -1
 
+       def isNextRecordAfterEventActionAuto(self):
+               now = time.time()
+               t = None
+               for timer in self.timer_list:
+                       if timer.justplay or timer.begin < now:
+                               continue
+                       if t is None or t.begin == timer.begin:
+                               t = timer
+                               if t.afterEvent == AFTEREVENT.AUTO:
+                                       return True
+               return False
+
        def record(self, entry, ignoreTSC=False, dosave=True):          #wird von loadTimer mit dosave=False aufgerufen
                timersanitycheck = TimerSanityCheck(self.timer_list,entry)
                if not timersanitycheck.check():
@@ -549,6 +606,7 @@ class RecordTimer(timer.Timer):
                                print "ignore timer conflict"
                elif timersanitycheck.doubleCheck():
                        print "ignore double timer"
+                       return None
                entry.timeChanged()
                print "[Timer] Record " + str(entry)
                entry.Timer = self
@@ -556,15 +614,16 @@ class RecordTimer(timer.Timer):
                if dosave:
                        self.saveTimer()
                return None
-               
+
        def isInTimer(self, eventid, begin, duration, service):
                time_match = 0
                chktime = None
                chktimecmp = None
                chktimecmp_end = None
                end = begin + duration
+               refstr = str(service)
                for x in self.timer_list:
-                       check = x.service_ref.ref.toCompareString() == str(service)
+                       check = x.service_ref.ref.toString() == refstr
                        if not check:
                                sref = x.service_ref.ref
                                parent_sid = sref.getUnsignedData(5)
@@ -576,7 +635,7 @@ class RecordTimer(timer.Timer):
                                        sref.setUnsignedData(2, parent_tsid)
                                        sref.setUnsignedData(5, 0)
                                        sref.setUnsignedData(6, 0)
-                                       check = x.service_ref.ref.toCompareString() == str(service)
+                                       check = sref.toCompareString() == refstr
                                        num = 0
                                        if check:
                                                check = False
@@ -592,9 +651,6 @@ class RecordTimer(timer.Timer):
                                                        check = True
                                                        break
                        if check:
-                               #if x.eit is not None and x.repeated == 0:
-                               #       if x.eit == eventid:
-                               #               return duration
                                if x.repeated != 0:
                                        if chktime is None:
                                                chktime = localtime(begin)
@@ -617,6 +673,8 @@ class RecordTimer(timer.Timer):
                                                diff = x.end - begin
                                                if time_match < diff:
                                                        time_match = diff
+                               if time_match:
+                                       break
                return time_match
 
        def removeEntry(self, entry):
@@ -627,6 +685,7 @@ class RecordTimer(timer.Timer):
 
                # abort timer.
                # this sets the end time to current time, so timer will be stopped.
+               entry.autoincrease = False
                entry.abort()
                
                if entry.state != entry.StateEnded:
@@ -635,6 +694,11 @@ class RecordTimer(timer.Timer):
                print "state: ", entry.state
                print "in processed: ", entry in self.processed_timers
                print "in running: ", entry in self.timer_list
+               # autoincrease instanttimer if possible
+               if not entry.dontSave:
+                       for x in self.timer_list:
+                               if x.setAutoincreaseEnd():
+                                       self.timeChanged(x)
                # now the timer should be in the processed_timers list. remove it from there.
                self.processed_timers.remove(entry)
                self.saveTimer()
index 7aebe25f3b2a5a1af08c758cf260eb8c52b1478b..719baa11a1e0de637cb3301c40cab0d4465c118d 100644 (file)
@@ -120,6 +120,7 @@ lib/python/Plugins/SystemPlugins/SkinSelector/Makefile
 lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/Makefile
 lib/python/Plugins/SystemPlugins/Videomode/Makefile
 lib/python/Plugins/SystemPlugins/VideoTune/Makefile
+lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile
 lib/python/Plugins/DemoPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
diff --git a/data/countries/x-fy.png b/data/countries/x-fy.png
new file mode 100644 (file)
index 0000000..ac32ca2
Binary files /dev/null and b/data/countries/x-fy.png differ
index 6b8b583dfca65cba73c357832301ab75c93e4624..0a0dc867747f4475b6388593b220896d5a120bfa 100644 (file)
@@ -77,7 +77,7 @@
        </map>
 
        <map context="InfobarEPGActions">
-               <key id="KEY_INFO" mapto="showEventView" flags="b" />
+               <key id="KEY_INFO" mapto="showEventInfo" flags="b" />
                <key id="KEY_INFO" mapto="showEventInfoPlugin" flags="l" />
        </map>
        
index 369b20e0b9c5cb25600ee3c2f51c7dd67d7d407c..7dc764acf996c349a76b270cd3468922516cfd6d 100644 (file)
@@ -54,7 +54,7 @@
                                <item level="0" entryID="av_setup"><setup id="avsetup"/></item>
                                <!--<item level="0" text="Video Setup" entryID="video_setup"><screen module="VideoSetup" /></item>-->
                                <item level="1" entryID="rfmod_setup" requires="RfModulator"><setup id="RFmod"/></item>
-                               <menu level="0" text="Harddisk" entryID="hardisk_selection" requires="Harddisc">
+                               <menu level="0" text="Harddisk" entryID="hardisk_selection" requires="Harddisk">
                                        <id val="harddisk" />
                                        <item level="1" entryID="harddisk_setup"><setup id="harddisk"/></item>
                                        <item level="0" text="Initialization..." entryID="harddisk_init"><screen module="HarddiskSetup" screen="HarddiskSelection"/></item>
@@ -103,6 +103,7 @@ self.session.openWithCallback(msgClosed, MessageBox, _("When you do a factory re
                <menu text="Standby / Restart" entryID="standby_restart_list">
                        <id val="shutdown" />
                        <!--<item text="Standby"><code>quitMainloop(0)</code></item>-->
+                       <item text="Sleep Timer" entryID="sleep"><screen module="SleepTimerEdit" screen="SleepTimerEdit" /></item>
                        <item text="Standby" entryID="standby"><screen module="Standby" screen="Standby"/></item>
                        <item text="Restart" entryID="restart"><screen module="Standby" screen="TryQuitMainloop">2</screen></item>
                        <item level="2" text="Restart GUI" entryID="restart_enigma"><screen module="Standby" screen="TryQuitMainloop">3</screen></item>
old mode 100644 (file)
new mode 100755 (executable)
index 96d7067..e2dbacd
                <widget source="session.FrontendStatus" render="Label" position="242,3" size="80,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
                        <convert type="FrontendInfo">SNRdB</convert>
                </widget>
-               <!-- Signal Strength -->
-               <eLabel text="AGC" position="317,3" size="40,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
-               <widget source="session.FrontendStatus" render="Label" position="355,3" size="40,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
-                       <convert type="FrontendInfo">AGC</convert>
-               </widget>
                <!-- Bit error rate -->
-               <eLabel text="BER" position="403,3" size="40,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
-               <widget source="session.FrontendStatus" render="Label" position="440,3" size="43,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
+               <eLabel text="BER" position="317,3" size="40,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" noWrap="1" />
+               <widget source="session.FrontendStatus" render="Label" position="355,3" size="43,22" font="Regular;16" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" noWrap="1">
                        <convert type="FrontendInfo">BER</convert>
                </widget>
                <!-- Channellogo (Picon) -->
index 993fd320f7c4deaf7a64fd1964b6f457fdd6dcc6..d60933eb369723767d4a9608b54063bc00da61d5 100755 (executable)
@@ -789,18 +789,11 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
                <widget source="Frontend" render="Label" position="460,35" size="60,22" font="Regular;21">
                        <convert type="FrontendInfo">SNR</convert>
                </widget>
-               <eLabel name="agc" text="AGC:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
-               <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="skin_default/bar_snr.png" borderWidth="2" borderColor="#cccccc">
-                       <convert type="FrontendInfo">AGC</convert>
-               </widget>
-               <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
-                       <convert type="FrontendInfo">AGC</convert>
-               </widget>
-               <eLabel name="ber" text="BER:" position="120,85" size="60,22" font="Regular;21" halign="right" transparent="1" />
-               <widget source="Frontend" render="Progress" position="190,85" size="260,20" pixmap="skin_default/bar_ber.png" borderWidth="2" borderColor="#cccccc">
+               <eLabel name="ber" text="BER:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
+               <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="skin_default/bar_ber.png" borderWidth="2" borderColor="#cccccc">
                        <convert type="FrontendInfo">BER</convert>
                </widget>
-               <widget source="Frontend" render="Label" position="460,85" size="60,22" font="Regular;21">
+               <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
                        <convert type="FrontendInfo">BER</convert>
                </widget>
                <eLabel name="lock" text="Lock:" position="120,115" size="60,22" font="Regular;21" halign="right" />
@@ -813,7 +806,7 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
                        <convert type="ConditionalShowHide">Invert</convert>
                </widget>
                <ePixmap pixmap="skin_default/div-h.png" position="10,152" zPosition="1" size="500,2" />
-               <widget name="config" position="10,165" size="500,240" scrollbarMode="showOnDemand" />
+               <widget name="config" position="10,165" size="500,225" scrollbarMode="showOnDemand" />
        </screen>
        <!-- Scan setup -->
        <screen name="ScanSetup" position="100,115" size="520,390" title="Service scan">
@@ -947,6 +940,11 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- Subtitle area -->
        <screen name="SubtitleDisplay" position="0,0" size="720,576" zPosition="-1" flags="wfNoBorder" backgroundColor="transparent" />
+       <!-- TextBox -->
+       <screen name="TextBox" position="90,50" size="550,400" title="Message...">
+               <widget name="text" position="0,0" size="540,390" font="Regular;18" />
+               <!--widget source="text" render="Label" position="0,0" size="540,390" font="Regular;18" /-->
+       </screen>
        <!-- Time & date input -->
        <screen name="TimeDateInput" position="160,150" size="400,200" title="Time/Date Input">
                <widget name="cancel" pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
index 18050ed17cdcad48247756b971666e687dc288b8..e4181c483369eae6a03ec918e31926de5961cf86 100644 (file)
Binary files a/data/skin_default/bar_snr.png and b/data/skin_default/bar_snr.png differ
index 7bb023c9feca938ab24d97ee792496f660167340..cda483c300f722e1a8935917e585f692a601b6ca 100755 (executable)
Binary files a/data/skin_default/bottombar.png and b/data/skin_default/bottombar.png differ
diff --git a/data/skin_default/icons/epgclock_add.png b/data/skin_default/icons/epgclock_add.png
new file mode 100644 (file)
index 0000000..487ac48
Binary files /dev/null and b/data/skin_default/icons/epgclock_add.png differ
diff --git a/data/skin_default/icons/epgclock_post.png b/data/skin_default/icons/epgclock_post.png
new file mode 100644 (file)
index 0000000..5716d99
Binary files /dev/null and b/data/skin_default/icons/epgclock_post.png differ
diff --git a/data/skin_default/icons/epgclock_pre.png b/data/skin_default/icons/epgclock_pre.png
new file mode 100644 (file)
index 0000000..ff42463
Binary files /dev/null and b/data/skin_default/icons/epgclock_pre.png differ
diff --git a/data/skin_default/icons/epgclock_prepost.png b/data/skin_default/icons/epgclock_prepost.png
new file mode 100644 (file)
index 0000000..871b396
Binary files /dev/null and b/data/skin_default/icons/epgclock_prepost.png differ
diff --git a/data/skin_default/icons/icon_view.png b/data/skin_default/icons/icon_view.png
new file mode 100644 (file)
index 0000000..988b419
Binary files /dev/null and b/data/skin_default/icons/icon_view.png differ
index 5023e944f7bf2204af0a5dc61d0598e7a0640581..63bca0f9a0f4aee02922a0b93f04fb7ac2f31f24 100644 (file)
@@ -1,11 +1,18 @@
 import enigma
 import xml.etree.cElementTree
 
-from keyids import KEYIDS;
+from keyids import KEYIDS
 
 # these are only informational (for help)...
 from Tools.KeyBindings import addKeyBinding
 
+class KeymapError(Exception):
+    def __init__(self, message):
+        self.message = message
+
+    def __str__(self):
+        return self.message
+
 def parseKeys(context, filename, actionmap, device, keys):
        for x in keys.findall("key"):
                get_attr = x.attrib.get
@@ -29,12 +36,12 @@ def parseKeys(context, filename, actionmap, device, keys):
                        elif id[1] == 'd':
                                keyid = int(id[2:]) | 0x8000
                        else:
-                               raise "key id '" + str(id) + "' is neither hex nor dec"
+                               raise KeymapError("key id '" + str(id) + "' is neither hex nor dec")
                else:
                        try:
                                keyid = KEYIDS[id]
                        except:
-                               raise "key id '" + str(id) + "' is illegal"
+                               raise KeymapError("key id '" + str(id) + "' is illegal")
 #                              print context + "::" + mapto + " -> " + device + "." + hex(keyid)
                actionmap.bindKey(filename, device, keyid, flags, context, mapto)
                addKeyBinding(filename, keyid, context, mapto, flags)
@@ -48,7 +55,7 @@ def readKeymap(filename):
        try:
                dom = xml.etree.cElementTree.parse(source)
        except:
-               raise "keymap %s not well-formed." % filename
+               raise KeymapError("keymap %s not well-formed." % filename)
 
        keymap = dom.getroot()
 
index 4ab71af79aa306cc47a9953e9ea658c66798ec38..2462a7517b0e36d5cb2bf5fa629d2d278ed70e76 100644 (file)
@@ -65,7 +65,7 @@ def do_file(f, mode):
                                        except:
                                                pass
                                
-                                       raise "action enum must be simple."
+                                       raise Exception("action enum must be simple.")
                        
                                counter = 0
                        
@@ -82,7 +82,7 @@ def do_file(f, mode):
                                        
                                        if counter:
                                                if t != ",":
-                                                       raise "no comma"
+                                                       raise Exception("no comma")
                                                t = tokens.next()
                                
                                        if firsthit:
index bd2ec589227946199b60071faf4ab4617dc850ba..313732abd221fc27c30292b602ff1591b5ae5230 100644 (file)
@@ -126,6 +126,17 @@ eMainloop::~eMainloop()
 void eMainloop::addSocketNotifier(eSocketNotifier *sn)
 {
        int fd = sn->getFD();
+       if (m_inActivate && m_inActivate->ref.count == 1)
+       {
+               /*  when the current active SocketNotifier's refcount is one,
+                       then no more external references are existing.
+                       So it gets destroyed when the activate callback is finished (->AddRef() / ->Release() calls in processOneEvent).
+                       But then the sn->stop() is called to late for the next Asserion.
+                       Thus we call sn->stop() here (this implicitly calls eMainloop::removeSocketNotifier) and we don't get trouble
+                       with the next Assertion.
+               */
+               m_inActivate->stop();
+       }
        ASSERT(notifiers.find(fd) == notifiers.end());
        notifiers[fd]=sn;
 }
@@ -243,14 +254,15 @@ int eMainloop::processOneEvent(unsigned int twisted_timeout, PyObject **res, ePy
                                if (it != notifiers.end()
                                        && it->second->state == 1) // added and in poll
                                {
-                                       eSocketNotifier *sn = it->second;
-                                       int req = sn->getRequested();
+                                       m_inActivate = it->second;
+                                       int req = m_inActivate->getRequested();
                                        if (pfd[i].revents & req) {
-                                               sn->AddRef();
-                                               sn->activate(pfd[i].revents & req);
-                                               sn->Release();
+                                               m_inActivate->AddRef();
+                                               m_inActivate->activate(pfd[i].revents & req);
+                                               m_inActivate->Release();
                                        }
                                        pfd[i].revents &= ~req;
+                                       m_inActivate = 0;
                                }
                                if (pfd[i].revents & (POLLERR|POLLHUP|POLLNVAL))
                                        eDebug("poll: unhandled POLLERR/HUP/NVAL for fd %d(%d)", pfd[i].fd, pfd[i].revents);
index 84845a952d588c03f679cd44658d32cbde14764f..524052bda4f9b723ec4208b342d98b29ae0f6605 100644 (file)
@@ -195,6 +195,7 @@ class eMainloop
        int processOneEvent(unsigned int user_timeout, PyObject **res=0, ePyObject additional=ePyObject());
        int retval;
        int m_is_idle;
+       eSocketNotifier *m_inActivate;
 
        int m_interrupt_requested;
        timespec m_twisted_timer; // twisted timer
@@ -209,7 +210,7 @@ public:
 #endif
 
        eMainloop()
-               :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_interrupt_requested(0)
+               :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_inActivate(0), m_interrupt_requested(0)
        {
                existing_loops.push_back(this);
        }
index 1e4d348fa4ee4ba034702727c7fb3e1c1aed041d..4c4d6551affb77f71c3d7f2337cea520c133c1e2 100644 (file)
@@ -77,7 +77,7 @@ int logOutputConsole=1;
 static pthread_mutex_t DebugLock =
        PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
 
-extern void bsodFatal();
+extern void bsodFatal(const char *component);
 
 void eFatal(const char* fmt, ...)
 {
@@ -86,10 +86,12 @@ void eFatal(const char* fmt, ...)
        va_start(ap, fmt);
        vsnprintf(buf, 1024, fmt, ap);
        va_end(ap);
-       singleLock s(DebugLock);
-       logOutput(lvlFatal, "FATAL: " + std::string(buf) + "\n");
-       fprintf(stderr, "FATAL: %s\n",buf );
-       bsodFatal();
+       {
+               singleLock s(DebugLock);
+               logOutput(lvlFatal, "FATAL: " + std::string(buf) + "\n");
+               fprintf(stderr, "FATAL: %s\n",buf );
+       }
+       bsodFatal("enigma2");
 }
 
 #ifdef DEBUG
index 31b0a36f1d007b0293ad78a72534d786a25ca74c..106558ac1e649f883263a7a783b1ee4ad00e8ec8 100644 (file)
@@ -25,6 +25,7 @@ RESULT ePythonConfigQuery::getConfigValue(const char *key, std::string &value)
                        if (PyString_Check(pRet))
                        {
                                value.assign(PyString_AS_STRING(pRet));
+                               Py_DECREF(pRet);
                                return 0;
                        }
                        Py_DECREF(pRet);
index dbfebf5f2e15ee0d45a9ffe506bd4478ff338a6c..f05bdd9551b27f0baca3c3082f6fd36df2c7a61c 100644 (file)
@@ -132,23 +132,6 @@ void eAVSwitch::setInput(int val)
 
        write(fd, input[val], strlen(input[val]));
        close(fd);
-       
-       if (val == 1)
-               setFastBlank(2);
-}
-
-void eAVSwitch::setFastBlank(int val)
-{
-       int fd;
-       const char *fb[] = {"low", "high", "vcr"};
-
-       if((fd = open("/proc/stb/avs/0/fb", O_WRONLY)) < 0) {
-               eDebug("cannot open /proc/stb/avs/0/fb");
-               return;
-       }
-
-       write(fd, fb[val], strlen(fb[0]));
-       close(fd);
 }
 
 void eAVSwitch::setColorFormat(int format)
@@ -284,18 +267,5 @@ void eAVSwitch::setWSS(int val) // 0 = auto, 1 = auto(4:3_off)
        close(fd);
 }
 
-void eAVSwitch::setSlowblank(int val)
-{
-       int fd;
-       if((fd = open("/proc/stb/avs/0/sb", O_WRONLY)) < 0) {
-               eDebug("cannot open /proc/stb/avs/0/sb");
-               return;
-       }
-       const char *sb[] = {"0", "6", "12", "vcr", "auto"};
-       write(fd, sb[val], strlen(sb[val]));
-//     eDebug("set slow blanking to %s", sb[val]);
-       close(fd);
-}
-
 //FIXME: correct "run/startlevel"
 eAutoInitP0<eAVSwitch> init_avswitch(eAutoInitNumbers::rc, "AVSwitch Driver");
index 8fdafdd1b4faab33f14999fccdf172dd185bf68d..bcb29c40eb405491c10b539a0fbbd22c06c0b82a 100644 (file)
@@ -26,12 +26,10 @@ public:
        static eAVSwitch *getInstance();
        bool haveScartSwitch();
        int getVCRSlowBlanking();
-       void setFastBlank(int val);
        void setColorFormat(int format);
        void setAspectRatio(int ratio);
        void setVideomode(int mode);
        void setInput(int val);
-       void setSlowblank(int val);
        void setWSS(int val);
        PSignal1<void, int> vcr_sb_notifier;
 };
index 1c33203397aa5d3847ba08042e1503fe9896cc26..e6108ab58c0ba61c2a959d24d2bc87eb1faacae8 100644 (file)
@@ -327,10 +327,10 @@ void eDVBDB::loadServicelist(const char *file)
                                eDVBFrontendParametersSatellite sat;
                                int frequency, symbol_rate, polarisation, fec, orbital_position, inversion,
                                        flags=0,
-                                       system=eDVBFrontendParametersSatellite::System::DVB_S,
-                                       modulation=eDVBFrontendParametersSatellite::Modulation::QPSK,
-                                       rolloff=eDVBFrontendParametersSatellite::RollOff::alpha_0_35,
-                                       pilot=eDVBFrontendParametersSatellite::Pilot::Unknown;
+                                       system=eDVBFrontendParametersSatellite::System_DVB_S,
+                                       modulation=eDVBFrontendParametersSatellite::Modulation_QPSK,
+                                       rolloff=eDVBFrontendParametersSatellite::RollOff_alpha_0_35,
+                                       pilot=eDVBFrontendParametersSatellite::Pilot_Unknown;
                                if (version == 3)
                                        sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion, &system, &modulation, &rolloff, &pilot);
                                else
@@ -368,9 +368,9 @@ void eDVBDB::loadServicelist(const char *file)
                        {
                                eDVBFrontendParametersCable cab;
                                int frequency, symbol_rate,
-                                       inversion=eDVBFrontendParametersCable::Inversion::Unknown,
-                                       modulation=eDVBFrontendParametersCable::Modulation::Auto,
-                                       fec_inner=eDVBFrontendParametersCable::FEC::fAuto,
+                                       inversion=eDVBFrontendParametersCable::Inversion_Unknown,
+                                       modulation=eDVBFrontendParametersCable::Modulation_Auto,
+                                       fec_inner=eDVBFrontendParametersCable::FEC_Auto,
                                        flags=0;
                                sscanf(line+3, "%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &inversion, &modulation, &fec_inner, &flags);
                                cab.frequency = frequency;
@@ -495,9 +495,9 @@ void eDVBDB::saveServicelist(const char *file)
                ch.m_frontendParameters->getFlags(flags);
                if (!ch.m_frontendParameters->getDVBS(sat))
                {
-                       if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2)
+                       if (sat.system == eDVBFrontendParametersSatellite::System_DVB_S2)
                        {
-                               fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d",
+                               fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",
                                        sat.frequency, sat.symbol_rate,
                                        sat.polarisation, sat.fec,
                                        sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
@@ -786,7 +786,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
                return Py_False;
        }
        int tmp, *dest = NULL,
-               modulation, system, freq, sr, pol, fec, inv, pilot, rolloff;
+               modulation, system, freq, sr, pol, fec, inv, pilot, rolloff, tsid, onid;
        char *end_ptr;
        const Attribute *at;
        std::string name;
@@ -842,18 +842,21 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
 //                             eDebug("\telement: %s", (*it)->name().c_str());
                                const AttributeList &tp_attributes = (*it)->getAttributeList();
                                AttributeConstIterator end = tp_attributes.end();
-                               modulation = 1; // QPSK default
-                               system = 0; // DVB-S default
+                               modulation = eDVBFrontendParametersSatellite::Modulation_QPSK;
+                               system = eDVBFrontendParametersSatellite::System_DVB_S;
                                freq = 0;
                                sr = 0;
                                pol = -1;
-                               fec = 0; // AUTO default
-                               inv = 2; // AUTO default
-                               pilot = 2; // AUTO default
-                               rolloff = 0; // alpha 0.35
+                               fec = eDVBFrontendParametersSatellite::FEC_Auto;
+                               inv = eDVBFrontendParametersSatellite::Inversion_Unknown;
+                               pilot = eDVBFrontendParametersSatellite::Pilot_Unknown;
+                               rolloff = eDVBFrontendParametersSatellite::RollOff_alpha_0_35;
+                               tsid = -1;
+                               onid = -1;
+
                                for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
                                {
-//                                     eDebug("\t\tattr: %s", at->name().c_str());
+                                       //eDebug("\t\tattr: %s", at->name().c_str());
                                        at = *it;
                                        name = at->name();
                                        if (name == "modulation") dest = &modulation;
@@ -865,6 +868,8 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
                                        else if (name == "inversion") dest = &inv;
                                        else if (name == "rolloff") dest = &rolloff;
                                        else if (name == "pilot") dest = &pilot;
+                                       else if (name == "tsid") dest = &tsid;
+                                       else if (name == "onid") dest = &onid;
                                        if (dest)
                                        {
                                                tmp = strtol(at->value().c_str(), &end_ptr, 10);
@@ -874,7 +879,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
                                }
                                if (freq && sr && pol != -1)
                                {
-                                       tuple = PyTuple_New(10);
+                                       tuple = PyTuple_New(12);
                                        PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(0));
                                        PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq));
                                        PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(sr));
@@ -885,6 +890,8 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
                                        PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(inv));
                                        PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(rolloff));
                                        PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(pilot));
+                                       PyTuple_SET_ITEM(tuple, 10, PyInt_FromLong(tsid));
+                                       PyTuple_SET_ITEM(tuple, 11, PyInt_FromLong(onid));
                                        PyList_Append(tplist, tuple);
                                        Py_DECREF(tuple);
                                }
@@ -974,8 +981,8 @@ PyObject *eDVBDB::readCables(ePyObject cab_list, ePyObject tp_dict)
 //                             eDebug("\telement: %s", (*it)->name().c_str());
                                const AttributeList &tp_attributes = (*it)->getAttributeList();
                                AttributeConstIterator end = tp_attributes.end();
-                               modulation = 3; // QAM64 default
-                               fec = 0; // AUTO default
+                               modulation = eDVBFrontendParametersCable::Modulation_QAM64;
+                               fec = eDVBFrontendParametersCable::FEC_Auto;
                                freq = 0;
                                sr = 0;
                                for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
@@ -1088,14 +1095,14 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict)
                                const AttributeList &tp_attributes = (*it)->getAttributeList();
                                AttributeConstIterator end = tp_attributes.end();
                                freq = 0;
-                               bw = 3; // AUTO
-                               constellation = 1; // AUTO
-                               crh = 5; // AUTO
-                               crl = 5; // AUTO
-                               guard = 4; // AUTO
-                               transm = 2; // AUTO
-                               hierarchy = 4; // AUTO
-                               inv = 2; // AUTO
+                               bw = eDVBFrontendParametersTerrestrial::Bandwidth_Auto;
+                               constellation = eDVBFrontendParametersTerrestrial::Modulation_Auto;
+                               crh = eDVBFrontendParametersTerrestrial::FEC_Auto;
+                               crl = eDVBFrontendParametersTerrestrial::FEC_Auto;
+                               guard = eDVBFrontendParametersTerrestrial::GuardInterval_Auto;
+                               transm = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto;
+                               hierarchy = eDVBFrontendParametersTerrestrial::Hierarchy_Auto;
+                               inv = eDVBFrontendParametersTerrestrial::Inversion_Unknown;
                                for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
                                {
 //                                     eDebug("\t\tattr: %s", at->name().c_str());
@@ -1497,7 +1504,7 @@ int eDVBDBQueryBase::compareLessEqual(const eServiceReferenceDVB &a, const eServ
 {
        ePtr<eDVBService> a_service, b_service;
        int sortmode = m_query ? m_query->m_sort : eDVBChannelQuery::tName;
-       
+
        if ((sortmode == eDVBChannelQuery::tName) || (sortmode == eDVBChannelQuery::tProvider))
        {
                if (a.name.empty() && m_db->getService(a, a_service))
@@ -1505,7 +1512,7 @@ int eDVBDBQueryBase::compareLessEqual(const eServiceReferenceDVB &a, const eServ
                if (b.name.empty() && m_db->getService(b, b_service))
                        return 1;
        }
-       
+
        switch (sortmode)
        {
        case eDVBChannelQuery::tName:
@@ -1747,10 +1754,10 @@ static int decodeType(const std::string &type)
 RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::const_iterator begin, std::list<std::string>::const_iterator end)
 {
        std::list<std::string>::const_iterator end_of_exp;
-       
+
        if (begin == end)
                return 0;
-       
+
        if (*begin == "(")
        {
                end_of_exp = begin;
@@ -1759,36 +1766,36 @@ RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::cons
                                break;
                        else
                                ++end_of_exp;
-       
+
                if (end_of_exp == end)
                {
                        eDebug("expression parse: end of expression while searching for closing brace");
                        return -1;
                }
-               
+
                ++begin;
                // begin..end_of_exp
                int r = parseExpression(res, begin, end_of_exp);
                if (r)
                        return r;
                ++end_of_exp;
-               
+
                        /* we had only one sub expression */
                if (end_of_exp == end)
                {
 //                     eDebug("only one sub expression");
                        return 0;
                }
-               
+
                        /* otherwise we have an operator here.. */
-               
+
                ePtr<eDVBChannelQuery> r2 = res;
                res = new eDVBChannelQuery();
                res->m_sort = 0;
                res->m_p1 = r2;
                res->m_inverse = 0;
                r2 = 0;
-               
+
                if (*end_of_exp == "||")
                        res->m_type = eDVBChannelQuery::tOR;
                else if (*end_of_exp == "&&")
@@ -1799,18 +1806,18 @@ RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::cons
                        res = 0;
                        return 1;
                }
-               
+
                ++end_of_exp;
-               
+
                return parseExpression(res->m_p2, end_of_exp, end);
        }
-       
+
        // "begin" <op> "end"
        std::string type, op, val;
-       
+
        res = new eDVBChannelQuery();
        res->m_sort = 0;
-       
+
        int cnt = 0;
        while (begin != end)
        {
@@ -1832,23 +1839,23 @@ RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::cons
                ++begin;
                ++cnt;
        }
-       
+
        if (cnt != 3)
        {
                eDebug("malformed query: missing stuff");
                res = 0;
                return 1;
        }
-       
+
        res->m_type = decodeType(type);
-       
+
        if (res->m_type == -1)
        {
                eDebug("malformed query: invalid type %s", type.c_str());
                res = 0;
                return 1;
        }
-       
+
        if (op == "==")
                res->m_inverse = 0;
        else if (op == "!=")
@@ -1859,7 +1866,7 @@ RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::cons
                res = 0;
                return 1;
        }
-       
+
        res->m_string = val;
 
        if (res->m_type == eDVBChannelQuery::tChannelID)
@@ -1879,7 +1886,7 @@ RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::cons
 RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
 {
        std::list<std::string> tokens;
-       
+
        std::string current_token;
        std::string bouquet_name;
 
@@ -1891,34 +1898,34 @@ RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
        {
                int c = (i < query.size()) ? query[i] : ' ';
                ++i;
-               
+
                int issplit = !!strchr(splitchars, c);
                int isaln = isalnum(c);
                int iswhite = c == ' ';
                int isquot = c == '\"';
-               
+
                if (quotemode)
                {
                        iswhite = issplit = 0;
                        isaln = lastalnum;
                }
-               
+
                if (issplit || iswhite || isquot || lastsplit || (lastalnum != isaln))
                {
                        if (current_token.size())
                                tokens.push_back(current_token);
                        current_token.clear();
                }
-               
+
                if (!(iswhite || isquot))
                        current_token += c;
-               
+
                if (isquot)
                        quotemode = !quotemode;
                lastsplit = issplit;
                lastalnum = isaln;
        }
-       
+
 //     for (std::list<std::string>::const_iterator a(tokens.begin()); a != tokens.end(); ++a)
 //     {
 //             printf("%s\n", a->c_str());
@@ -1970,12 +1977,12 @@ RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
                res = 0;
                return -1;
        }
-       
+
 //     eDebug("sort by %d", sort);
-       
+
                /* now we recursivly parse that. */
        int r = parseExpression(res, tokens.begin(), tokens.end());
-       
+
                /* we have an empty (but valid!) expression */
        if (!r && !res)
        {
@@ -1983,7 +1990,7 @@ RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
                res->m_inverse = 0;
                res->m_type = eDVBChannelQuery::tAny;
        }
-       
+
        if (res)
        {
                res->m_sort = sort;
index 66b923a682f2356e1d95ce6a41de475f9f038fce..f73dbdd99b8878e24a83f090b1a6873628dfb830 100644 (file)
@@ -187,11 +187,15 @@ int eDVBAudio::startPid(int pid, int type)
        case aAC3:
                bypass = 0;
                break;
-               /*
        case aDTS:
                bypass = 2;
                break;
-               */
+       case aAAC:
+               bypass = 8;
+               break;
+       case aAACHE:
+               bypass = 9;
+               break;
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
@@ -291,7 +295,9 @@ eDVBAudio::~eDVBAudio()
 DEFINE_REF(eDVBVideo);
 
 eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev)
-       :m_demux(demux), m_dev(dev)
+<<<<<<< HEAD:lib/dvb/decoder.cpp
+       : m_demux(demux), m_dev(dev),
+       m_width(-1), m_height(-1), m_framerate(-1), m_aspect(-1), m_progressive(-1)
 {
        char filename[128];
 #if HAVE_DVB_API_VERSION < 3
@@ -325,6 +331,10 @@ eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev)
 // not finally values i think.. !!
 #define VIDEO_STREAMTYPE_MPEG2 0
 #define VIDEO_STREAMTYPE_MPEG4_H264 1
+#define VIDEO_STREAMTYPE_VC1 3
+#define VIDEO_STREAMTYPE_MPEG4_Part2 4
+#define VIDEO_STREAMTYPE_VC1_SM 5
+#define VIDEO_STREAMTYPE_MPEG1 6
 
 #if HAVE_DVB_API_VERSION < 3
 int eDVBVideo::setPid(int pid)
@@ -386,13 +396,36 @@ int eDVBVideo::stopPid()
 #else
 int eDVBVideo::startPid(int pid, int type)
 {
+       int streamtype = VIDEO_STREAMTYPE_MPEG2;
+
        if ((m_fd < 0) || (m_fd_demux < 0))
                return -1;
        dmx_pes_filter_params pes;
 
-       eDebugNoNewLine("VIDEO_SET_STREAMTYPE %d - ",type == MPEG4_H264 ? VIDEO_STREAMTYPE_MPEG4_H264 : VIDEO_STREAMTYPE_MPEG2);
-       if (::ioctl(m_fd, VIDEO_SET_STREAMTYPE,
-               type == MPEG4_H264 ? VIDEO_STREAMTYPE_MPEG4_H264 : VIDEO_STREAMTYPE_MPEG2) < 0)
+       switch(type)
+       {
+       default:
+       case MPEG2:
+               break;
+       case MPEG4_H264:
+               streamtype = VIDEO_STREAMTYPE_MPEG4_H264;
+               break;
+       case MPEG1:
+               streamtype = VIDEO_STREAMTYPE_MPEG1;
+               break;
+       case MPEG4_Part2:
+               streamtype = VIDEO_STREAMTYPE_MPEG4_Part2;
+               break;
+       case VC1:
+               streamtype = VIDEO_STREAMTYPE_VC1;
+               break;
+       case VC1_SM:
+               streamtype = VIDEO_STREAMTYPE_VC1_SM;
+               break;
+       }
+
+       eDebugNoNewLine("VIDEO_SET_STREAMTYPE %d - ", streamtype);
+       if (::ioctl(m_fd, VIDEO_SET_STREAMTYPE, streamtype) < 0)
                eDebug("failed (%m)");
        else
                eDebug("ok");
@@ -533,23 +566,23 @@ void eDVBVideo::video_event(int)
                {
                        struct iTSMPEGDecoder::videoEvent event;
                        event.type = iTSMPEGDecoder::videoEvent::eventSizeChanged;
-                       event.aspect = evt.u.size.aspect_ratio;
-                       event.height = evt.u.size.h;
-                       event.width = evt.u.size.w;
+                       m_aspect = event.aspect = evt.u.size.aspect_ratio == 0 ? 2 : 3;  // convert dvb api to etsi
+                       m_height = event.height = evt.u.size.h;
+                       m_width = event.width = evt.u.size.w;
                        /* emit */ m_event(event);
                }
                else if (evt.type == VIDEO_EVENT_FRAME_RATE_CHANGED)
                {
                        struct iTSMPEGDecoder::videoEvent event;
                        event.type = iTSMPEGDecoder::videoEvent::eventFrameRateChanged;
-                       event.framerate = evt.u.frame_rate;
+                       m_framerate = event.framerate = evt.u.frame_rate;
                        /* emit */ m_event(event);
                }
                else if (evt.type == 16 /*VIDEO_EVENT_PROGRESSIVE_CHANGED*/)
                {
                        struct iTSMPEGDecoder::videoEvent event;
                        event.type = iTSMPEGDecoder::videoEvent::eventProgressiveChanged;
-                       event.progressive = evt.u.frame_rate;
+                       m_progressive = event.progressive = evt.u.frame_rate;
                        /* emit */ m_event(event);
                }
                else
@@ -566,6 +599,93 @@ RESULT eDVBVideo::connectEvent(const Slot1<void, struct iTSMPEGDecoder::videoEve
        return 0;
 }
 
+static int readMpegProc(char *str, int decoder)
+{
+       int val = -1;
+       char tmp[64];
+       sprintf(tmp, "/proc/stb/vmpeg/%d/%s", decoder, str);
+       FILE *f = fopen(tmp, "r");
+       if (f)
+       {
+               fscanf(f, "%x", &val);
+               fclose(f);
+       }
+       return val;
+}
+
+static int readApiSize(int fd, int &xres, int &yres, int &aspect)
+{
+#if HAVE_DVB_API_VERSION >= 3
+       video_size_t size;
+       if (!::ioctl(fd, VIDEO_GET_SIZE, &size))
+       {
+               xres = size.w;
+               yres = size.h;
+               aspect = size.aspect_ratio == 0 ? 2 : 3;  // convert dvb api to etsi
+               return 0;
+       }
+//     eDebug("VIDEO_GET_SIZE failed (%m)");
+#endif
+       return -1;
+}
+
+static int readApiFrameRate(int fd, int &framerate)
+{
+#if HAVE_DVB_API_VERSION >= 3
+       unsigned int frate;
+       if (!::ioctl(fd, VIDEO_GET_FRAME_RATE, &frate))
+       {
+               framerate = frate;      
+               return 0;
+       }
+//     eDebug("VIDEO_GET_FRAME_RATE failed (%m)");
+#endif
+       return -1;
+}
+
+int eDVBVideo::getWidth()
+{
+       if (m_width == -1)
+               readApiSize(m_fd, m_width, m_height, m_aspect);
+       if (m_width == -1)
+               m_width = readMpegProc("xres", m_dev);
+       return m_width;
+}
+
+int eDVBVideo::getHeight()
+{
+       if (m_height == -1)
+               readApiSize(m_fd, m_width, m_height, m_aspect);
+       if (m_height == -1)
+               m_height = readMpegProc("yres", m_dev);
+       return m_height;
+}
+
+int eDVBVideo::getAspect()
+{
+       if (m_aspect == -1)
+               readApiSize(m_fd, m_width, m_height, m_aspect);
+       if (m_aspect == -1)
+               m_aspect = readMpegProc("aspect", m_dev);
+       return m_aspect;
+}
+
+int eDVBVideo::getProgressive()
+{
+       if (m_progressive == -1)
+               m_progressive = readMpegProc("progressive", m_dev);
+       return m_progressive;
+}
+
+int eDVBVideo::getFrameRate()
+{
+       if (m_framerate == -1)
+               readApiFrameRate(m_fd, m_framerate);
+       if (m_framerate == -1)
+               m_framerate = readMpegProc("framerate", m_dev);
+       return m_framerate;
+}
+
 DEFINE_REF(eDVBPCR);
 
 eDVBPCR::eDVBPCR(eDVBDemux *demux): m_demux(demux)
@@ -1227,3 +1347,38 @@ void eTSMPEGDecoder::video_event(struct videoEvent event)
 {
        /* emit */ m_video_event(event);
 }
+
+int eTSMPEGDecoder::getVideoWidth()
+{
+       if (m_video)
+               return m_video->getWidth();
+       return -1;
+}
+
+int eTSMPEGDecoder::getVideoHeight()
+{
+       if (m_video)
+               return m_video->getHeight();
+       return -1;
+}
+
+int eTSMPEGDecoder::getVideoProgressive()
+{
+       if (m_video)
+               return m_video->getProgressive();
+       return -1;
+}
+
+int eTSMPEGDecoder::getVideoFrameRate()
+{
+       if (m_video)
+               return m_video->getFrameRate();
+       return -1;
+}
+
+int eTSMPEGDecoder::getVideoAspect()
+{
+       if (m_video)
+               return m_video->getAspect();
+       return -1;
+}
index 04501fe6160d5da03ebd02f6215f7491ef0ff2b4..51be5141d1b27b624b6d0d00830e68a36ec22a24 100644 (file)
@@ -13,7 +13,7 @@ private:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
-       enum { aMPEG, aAC3, aDTS, aAAC };
+       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE };
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
@@ -47,8 +47,9 @@ private:
        ePtr<eSocketNotifier> m_sn;
        void video_event(int what);
        Signal1<void, struct iTSMPEGDecoder::videoEvent> m_event;
+       int m_width, m_height, m_framerate, m_aspect, m_progressive;
 public:
-       enum { MPEG2, MPEG4_H264 };
+       enum { MPEG2, MPEG4_H264, MPEG1, MPEG4_Part2, VC1, VC1_SM };
        eDVBVideo(eDVBDemux *demux, int dev);
        void stop();
 #if HAVE_DVB_API_VERSION < 3
@@ -67,6 +68,11 @@ public:
        int getPTS(pts_t &now);
        virtual ~eDVBVideo();
        RESULT connectEvent(const Slot1<void, struct iTSMPEGDecoder::videoEvent> &event, ePtr<eConnection> &conn);
+       int getWidth();
+       int getHeight();
+       int getProgressive();
+       int getFrameRate();
+       int getAspect();
 };
 
 class eDVBPCR: public iObject
@@ -182,6 +188,11 @@ public:
                /* what 0=auto, 1=video, 2=audio. */
        RESULT getPTS(int what, pts_t &pts);
        RESULT connectVideoEvent(const Slot1<void, struct videoEvent> &event, ePtr<eConnection> &connection);
+       int getVideoWidth();
+       int getVideoHeight();
+       int getVideoProgressive();
+       int getVideoFrameRate();
+       int getVideoAspect();
 };
 
 #endif
index a0f1c326a9522f768afa375a2a92dbb37194ba5b..810b10a5983604b65f6c4940546666ba43d34d0f 100644 (file)
@@ -405,12 +405,14 @@ public:
        void setTimingPID(int pid);
        
        void saveTimingInformation(const std::string &filename);
+       int getLastPTS(pts_t &pts);
 protected:
        int filterRecordData(const unsigned char *data, int len, size_t &current_span_remaining);
 private:
        eMPEGStreamParserTS m_ts_parser;
        eMPEGStreamInformation m_stream_info;
        off_t m_current_offset;
+       pts_t m_last_pcr; /* very approximate.. */
        int m_pid;
 };
 
@@ -430,6 +432,11 @@ void eDVBRecordFileThread::saveTimingInformation(const std::string &filename)
        m_stream_info.save(filename.c_str());
 }
 
+int eDVBRecordFileThread::getLastPTS(pts_t &pts)
+{
+       return m_ts_parser.getLastPTS(pts);
+}
+
 int eDVBRecordFileThread::filterRecordData(const unsigned char *data, int len, size_t &current_span_remaining)
 {
        m_ts_parser.parseData(m_current_offset, data, len);
@@ -589,6 +596,18 @@ RESULT eDVBTSRecorder::stop()
        return 0;
 }
 
+RESULT eDVBTSRecorder::getCurrentPCR(pts_t &pcr)
+{
+       if (!m_running)
+               return 0;
+       if (!m_thread)
+               return 0;
+               /* XXX: we need a lock here */
+
+                       /* we don't filter PCR data, so just use the last received PTS, which is not accurate, but better than nothing */
+       return m_thread->getLastPTS(pcr);
+}
+
 RESULT eDVBTSRecorder::connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn)
 {
        conn = new eConnection(this, m_event.connect(event));
index 1a7db9791296190350adbb6f1caf9c580eb1e19b..14501b9859b2d2a9a02c41a33d96c2f0dff0e30b 100644 (file)
@@ -101,7 +101,9 @@ public:
        RESULT setBoundary(off_t max);
        
        RESULT stop();
-       
+
+       RESULT getCurrentPCR(pts_t &pcr);
+
        RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
 private:
        RESULT startPID(int pid);
index 28012e7a47869cd02e6d0a54531f93244d8dc719..c320fc7871199e6decf11733ee0409a2e54db1e1 100644 (file)
@@ -4,6 +4,7 @@
 #include <lib/dvb/dvb.h>
 #include <lib/dvb/pmt.h>
 #include <lib/dvb/sec.h>
+#include <lib/dvb/specs.h>
 
 #include <errno.h>
 #include <sys/types.h>
@@ -69,19 +70,19 @@ eDVBResourceManager::eDVBResourceManager()
 
        if (!instance)
                instance = this;
-               
+
                /* search available adapters... */
 
                // add linux devices
-       
+
        int num_adapter = 0;
        while (eDVBAdapterLinux::exist(num_adapter))
        {
                addAdapter(new eDVBAdapterLinux(num_adapter));
                num_adapter++;
        }
-       
-       eDebug("found %d adapter, %d frontends(%d sim) and %d demux", 
+
+       eDebug("found %d adapter, %d frontends(%d sim) and %d demux",
                m_adapter.size(), m_frontend.size(), m_simulate_frontend.size(), m_demux.size());
 
        eDVBCAService::registerChannelCallback(this);
@@ -103,7 +104,7 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
 {
                // scan frontends
        int num_fe = 0;
-       
+
        eDebug("scanning for frontends..");
        while (1)
        {
@@ -132,7 +133,7 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
                }
                ++num_fe;
        }
-       
+
                // scan demux
        int num_demux = 0;
        while (1)
@@ -147,10 +148,10 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
                if (stat(filename, &s))
                        break;
                ePtr<eDVBDemux> demux;
-               
+
                demux = new eDVBDemux(m_nr, num_demux);
                m_demux.push_back(demux);
-                       
+
                ++num_demux;
        }
 }
@@ -168,12 +169,12 @@ RESULT eDVBAdapterLinux::getDemux(ePtr<eDVBDemux> &demux, int nr)
                --nr;
                ++i;
        }
-       
+
        if (i != m_demux.end())
                demux = *i;
        else
                return -1;
-               
+
        return 0;
 }
 
@@ -190,12 +191,12 @@ RESULT eDVBAdapterLinux::getFrontend(ePtr<eDVBFrontend> &fe, int nr, bool simula
                --nr;
                ++i;
        }
-       
+
        if (i != m_frontend.end())
                fe = *i;
        else
                return -1;
-               
+
        return 0;
 }
 
@@ -223,9 +224,9 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
 {
        int num_fe = adapter->getNumFrontends();
        int num_demux = adapter->getNumDemux();
-       
+
        m_adapter.push_back(adapter);
-       
+
        int i;
        for (i=0; i<num_demux; ++i)
        {
@@ -425,9 +426,9 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
 
        if (i == m_demux.end())
                return -1;
-       
+
        ePtr<eDVBRegisteredDemux> unused;
-       
+
        if (m_demux.size() < 5)
        {
                /* FIXME: hardware demux policy */
@@ -443,14 +444,14 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
                for (; i != m_demux.end(); ++i, ++n)
                {
                        int is_decode = n < 2;
-               
+
                        int in_use = is_decode ? (i->m_demux->getRefCount() != 2) : i->m_inuse;
-               
+
                        if ((!in_use) && ((!fe) || (i->m_adapter == fe->m_adapter)))
                        {
                                if ((cap & iDVBChannel::capDecode) && !is_decode)
                                        continue;
-                               unused = i;     
+                               unused = i;
                                break;
                        }
                }
@@ -466,7 +467,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
                                        if (!unused)
                                                unused = i;
                                }
-                               else if (i->m_adapter == fe->m_adapter && 
+                               else if (i->m_adapter == fe->m_adapter &&
                                    i->m_demux->getSource() == fe->m_frontend->getDVBID())
                                {
                                        demux = new eDVBAllocatedDemux(i);
@@ -572,7 +573,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse
        }
 
        /* allocate a frontend. */
-       
+
        ePtr<eDVBAllocatedFrontend> fe;
 
        int err = allocateFrontend(fe, feparm, simulate);
@@ -998,7 +999,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s
 
                        if (m_iframe_state == 1)
                        {
-                                       /* we are allowing data, and stop allowing data on the next frame. 
+                                       /* we are allowing data, and stop allowing data on the next frame.
                                           we now found a frame. so stop here. */
                                memset(data + offset, 0, 188 - (offset%188)); /* zero out rest of TS packet */
                                current_span_remaining = 0;
@@ -1072,9 +1073,9 @@ eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *fronte
        m_frontend = frontend;
 
        m_pvr_thread = 0;
-       
+
        m_skipmode_n = m_skipmode_m = 0;
-       
+
        if (m_frontend)
                m_frontend->get().connectStateChange(slot(*this, &eDVBChannel::frontendStateChanged), m_conn_frontendStateChanged);
 }
@@ -1090,14 +1091,14 @@ eDVBChannel::~eDVBChannel()
 void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
 {
        int state, ourstate = 0;
-       
+
                /* if we are already in shutdown, don't change state. */
        if (m_state == state_release)
                return;
-       
+
        if (fe->getState(state))
                return;
-       
+
        if (state == iDVBFrontend::stateLock)
        {
                eDebug("OURSTATE: ok");
@@ -1126,7 +1127,7 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
                ourstate = state_failed;
        } else
                eFatal("state unknown");
-       
+
        if (ourstate != m_state)
        {
                m_state = ourstate;
@@ -1243,7 +1244,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
        const int blocksize = 188;
        unsigned int max = align(10*1024*1024, blocksize);
        current_offset = align(current_offset, blocksize);
-       
+
        if (!m_cue)
        {
                eDebug("no cue sheet. forcing normal play");
@@ -1314,7 +1315,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                                continue;
                        }
                }
-               
+
                if (relative == 1) /* pts relative */
                {
                        pts += now;
@@ -1325,7 +1326,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                if (relative != 2)
                        if (pts < 0)
                                pts = 0;
-               
+
                if (relative == 2) /* AP relative */
                {
                        eDebug("AP relative seeking: %lld, at %lld", pts, now);
@@ -1340,7 +1341,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                                eDebug("next ap is %llx\n", pts);
                        }
                }
-               
+
                off_t offset = 0;
                if (m_tstools.getOffset(offset, pts, -1))
                {
@@ -1358,7 +1359,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
        {
                long long aligned_start = align(i->first, blocksize);
                long long aligned_end = align(i->second, blocksize);
-       
+
                if ((current_offset >= aligned_start) && (current_offset < aligned_end))
                {
                        start = current_offset;
@@ -1470,7 +1471,7 @@ RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid, ePtr<iDVBFrontend
 {
        if (m_channel_id)
                m_mgr->removeChannel(this);
-               
+
        if (!channelid)
                return 0;
 
@@ -1479,7 +1480,7 @@ RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid, ePtr<iDVBFrontend
                eDebug("no frontend to tune!");
                return -ENODEV;
        }
-       
+
        m_channel_id = channelid;
        m_mgr->addChannel(channelid, this);
        m_state = state_tuning;
@@ -1487,14 +1488,14 @@ RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid, ePtr<iDVBFrontend
        int res;
        res = m_frontend->get().tune(*feparm);
        m_current_frontend_parameters = feparm;
-       
+
        if (res)
        {
                m_state = state_release;
                m_stateChanged(this);
                return res;
        }
-       
+
        return 0;
 }
 
@@ -1521,24 +1522,79 @@ RESULT eDVBChannel::setCIRouting(const eDVBCIRouting &routing)
        return -1;
 }
 
+void eDVBChannel::SDTready(int result)
+{
+       ePyObject args = PyTuple_New(2), ret;
+       bool ok=false;
+       if (!result)
+       {
+               for (std::vector<ServiceDescriptionSection*>::const_iterator i = m_SDT->getSections().begin(); i != m_SDT->getSections().end(); ++i)
+               {
+                       ok = true;
+                       PyTuple_SET_ITEM(args, 0, PyInt_FromLong((*i)->getTransportStreamId()));
+                       PyTuple_SET_ITEM(args, 1, PyInt_FromLong((*i)->getOriginalNetworkId()));
+                       break;
+               }
+       }
+       if (!ok)
+       {
+               PyTuple_SET_ITEM(args, 0, Py_None);
+               PyTuple_SET_ITEM(args, 1, Py_None);
+               Py_INCREF(Py_None);
+               Py_INCREF(Py_None);
+       }
+       ret = PyObject_CallObject(m_tsid_onid_callback, args);
+       if (ret)
+               Py_DECREF(ret);
+       Py_DECREF(args);
+       Py_DECREF(m_tsid_onid_callback);
+       m_tsid_onid_callback = ePyObject();
+       m_tsid_onid_demux = 0;
+       m_SDT = 0;
+}
+
+RESULT eDVBChannel::requestTsidOnid(ePyObject callback)
+{
+       if (PyCallable_Check(callback))
+       {
+               if (!getDemux(m_tsid_onid_demux, 0))
+               {
+                       m_SDT = new eTable<ServiceDescriptionSection>;
+                       CONNECT(m_SDT->tableReady, eDVBChannel::SDTready);
+                       if (m_SDT->start(m_tsid_onid_demux, eDVBSDTSpec()))
+                       {
+                               m_tsid_onid_demux = 0;
+                               m_SDT = 0;
+                       }
+                       else
+                       {
+                               Py_INCREF(callback);
+                               m_tsid_onid_callback = callback;
+                               return 0;
+                       }
+               }
+       }
+       return -1;
+}
+
 RESULT eDVBChannel::getDemux(ePtr<iDVBDemux> &demux, int cap)
 {
        ePtr<eDVBAllocatedDemux> &our_demux = (cap & capDecode) ? m_decoder_demux : m_demux;
-       
+
        if (!our_demux)
        {
                demux = 0;
-               
+
                if (m_mgr->allocateDemux(m_frontend ? (eDVBRegisteredFrontend*)*m_frontend : (eDVBRegisteredFrontend*)0, our_demux, cap))
                        return -1;
        }
-       
+
        demux = *our_demux;
                /* don't hold a reference to the decoding demux, we don't need it. */
-               
+
                /* FIXME: by dropping the 'allocated demux' in favour of the 'iDVBDemux',
-                  the refcount is lost. thus, decoding demuxes are never allocated. 
-                  
+                  the refcount is lost. thus, decoding demuxes are never allocated.
+
                   this poses a big problem for PiP. */
        if (cap & capDecode)
                our_demux = 0;
@@ -1571,12 +1627,12 @@ RESULT eDVBChannel::playFile(const char *file)
                delete m_pvr_thread;
                m_pvr_thread = 0;
        }
-       
+
        m_tstools.openFile(file);
-       
+
                /* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
                   THEN DO A REAL FIX HERE! */
-       
+
                /* (this codepath needs to be improved anyway.) */
 #if HAVE_DVB_API_VERSION < 3
        m_pvr_fd_dst = open("/dev/pvr", O_WRONLY);
@@ -1637,11 +1693,11 @@ RESULT eDVBChannel::getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, in
 {
        if (!decoding_demux)
                return -1;
-       
+
        pts_t now;
-       
+
        int r;
-       
+
        if (mode == 0) /* demux */
        {
                r = decoding_demux->getSTC(now, 0);
@@ -1652,7 +1708,7 @@ RESULT eDVBChannel::getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, in
                }
        } else
                now = pos; /* fixup supplied */
-       
+
        off_t off = 0; /* TODO: fixme */
        r = m_tstools.fixupPTS(off, now);
        if (r)
@@ -1660,9 +1716,9 @@ RESULT eDVBChannel::getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, in
                eDebug("fixup PTS failed");
                return -1;
        }
-       
+
        pos = now;
-       
+
        return 0;
 }
 
@@ -1673,7 +1729,7 @@ void eDVBChannel::flushPVR(iDVBDemux *decoding_demux)
                           a.) the filepush's internal buffer
                           b.) the PVR buffer (before demux)
                           c.) the ratebuffer (after demux)
-                          
+
                           it's important to clear them in the correct order, otherwise
                           the ratebuffer (for example) would immediately refill from
                           the not-yet-flushed PVR buffer.
@@ -1684,7 +1740,7 @@ void eDVBChannel::flushPVR(iDVBDemux *decoding_demux)
        m_pvr_thread->flush();
                /* HACK: flush PVR buffer */
        ::ioctl(m_pvr_fd_dst, 0);
-       
+
                /* flush ratebuffers (video, audio) */
        if (decoding_demux)
                decoding_demux->flush();
@@ -1708,7 +1764,7 @@ void eCueSheet::seekTo(int relative, const pts_t &pts)
        m_lock.Unlock();
        m_event(evtSeek);
 }
-       
+
 void eCueSheet::clear()
 {
        m_lock.WrLock();
index 13556c261eb047c76a69f189687b16a16fd90567..fa1801db9a5403e0bb763e5bb057fac5984398bd 100644 (file)
 #include <lib/dvb/demux.h>
 #include <lib/dvb/frontend.h>
 #include <lib/dvb/tstools.h>
+#include <lib/dvb/esection.h>
 #include <connection.h>
 
+#include <dvbsi++/service_description_section.h>
+
 class eDVBChannel;
 
        /* we do NOT handle resource conflicts here. instead, the allocateChannel
@@ -259,6 +262,8 @@ public:
        RESULT getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, int mode);
 
        int getUseCount() { return m_use_count; }
+
+       RESULT requestTsidOnid(ePyObject callback);
 private:
        ePtr<eDVBAllocatedFrontend> m_frontend;
        ePtr<eDVBAllocatedDemux> m_demux, m_decoder_demux;
@@ -299,6 +304,12 @@ private:
        oRefCount m_use_count;
        void AddUse();
        void ReleaseUse();
+
+               /* for tsid/onid read */
+       ePyObject m_tsid_onid_callback;
+       ePtr<iDVBDemux> m_tsid_onid_demux;
+       ePtr<eTable<ServiceDescriptionSection> > m_SDT;
+       void SDTready(int err);
 };
 #endif // SWIG
 
index c43357959b16165052d86f71acdc3b378aacf45d..d879cface8b8c73204c03fb341fbadd4f458c327 100644 (file)
@@ -11,6 +11,8 @@
 #define FP_IOCTL_SET_RTC         0x101
 #define FP_IOCTL_GET_RTC         0x102
 
+#define TIME_UPDATE_INTERVAL (30*60*1000)
+
 static time_t prev_time;
 
 void setRTC(time_t time)
@@ -143,7 +145,7 @@ eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance;
 DEFINE_REF(eDVBLocalTimeHandler);
 
 eDVBLocalTimeHandler::eDVBLocalTimeHandler()
-       :m_time_ready(false)
+       :m_time_ready(false), m_updateNonTunedTimer(eTimer::create(eApp))
 {
        if ( !instance )
                instance=this;
@@ -164,6 +166,7 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler()
                        /*emit*/ m_timeUpdated();
                }
        }
+       CONNECT(m_updateNonTunedTimer->timeout, eDVBLocalTimeHandler::updateNonTuned);
 }
 
 eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
@@ -211,6 +214,12 @@ void eDVBLocalTimeHandler::writeTimeOffsetData( const char* filename )
        }
 }
 
+void eDVBLocalTimeHandler::updateNonTuned()
+{
+       updateTime(-1, 0, 0);
+       m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
+}
+
 void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count )
 {
        int time_difference;
@@ -397,7 +406,7 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up
                        int updateCount = it->second.tdt->getUpdateCount();
                        it->second.tdt = 0;
                        it->second.tdt = new TDT(chan, updateCount);
-                       it->second.tdt->startTimer(60*60*1000);  // restart TDT for this transponder in 60min
+                       it->second.tdt->startTimer(TIME_UPDATE_INTERVAL);  // restart TDT for this transponder in 30min
                }
        }
 }
@@ -430,12 +439,15 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan)
                        {
                                case iDVBChannel::state_ok:
                                        eDebug("[eDVBLocalTimerHandler] channel %p running", chan);
+                                       m_updateNonTunedTimer->stop();
                                        it->second.tdt = new TDT(it->second.channel);
                                        it->second.tdt->start();
                                        break;
                                case iDVBChannel::state_release:
                                        eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
                                        m_knownChannels.erase(it);
+                                       if (m_knownChannels.empty())
+                                               m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
                                        break;
                                default: // ignore all other events
                                        return;
index f403ffd4d17985c7fd3f341e54f3d05e157b3ef9..3f8d9b7dec1204bcdcde8473739741f816e82e1f 100644 (file)
@@ -54,6 +54,7 @@ class eDVBLocalTimeHandler: public Object
                ePtr<eConnection> m_stateChangedConn;
                int m_prevChannelState;
        };
+       ePtr<eTimer> m_updateNonTunedTimer;
        friend class TDT;
        std::map<iDVBChannel*, channel_data> m_knownChannels;
        std::map<eDVBChannelID,int> m_timeOffsetMap;
@@ -66,6 +67,7 @@ class eDVBLocalTimeHandler: public Object
        void readTimeOffsetData(const char*);
        void writeTimeOffsetData(const char*);
        void updateTime(time_t tp_time, eDVBChannel*, int updateCount);
+       void updateNonTuned();
        static eDVBLocalTimeHandler *instance;
 #ifdef SWIG
        eDVBLocalTimeHandler();
index 0bb6e25b8a34bbde75514f6f5294f45b38af0119..fdcbe0e9faf2cb835db04288f6ae2e0b850ce6fb 100644 (file)
@@ -1672,7 +1672,7 @@ int handleEvent(eServiceEvent *ptr, ePyObject dest_list, const char* argstring,
        {
                fillTuple(convertFuncArgs, argstring, argcount, service, ptr, nowTime, service_name);
                ePyObject result = PyObject_CallObject(convertFunc, convertFuncArgs);
-               if (result)
+               if (!result)
                {
                        if (service_name)
                                Py_DECREF(service_name);
@@ -2047,6 +2047,8 @@ PyObject *eEPGCache::search(ePyObject arg)
        int querytype=-1;
        bool needServiceEvent=false;
        int maxmatches=0;
+       int must_get_service_name = 0;
+       bool must_get_service_reference = false;
 
        if (PyTuple_Check(arg))
        {
@@ -2056,7 +2058,11 @@ PyObject *eEPGCache::search(ePyObject arg)
                        ePyObject obj = PyTuple_GET_ITEM(arg,0);
                        if (PyString_Check(obj))
                        {
+#if PY_VERSION_HEX < 0x02060000
                                argcount = PyString_GET_SIZE(obj);
+#else
+                               argcount = PyString_Size(obj);
+#endif
                                argstring = PyString_AS_STRING(obj);
                                for (int i=0; i < argcount; ++i)
                                        switch(argstring[i])
@@ -2065,6 +2071,16 @@ PyObject *eEPGCache::search(ePyObject arg)
                                        case 'E':
                                        case 'T':
                                                needServiceEvent=true;
+                                               break;
+                                       case 'N':
+                                               must_get_service_name = 1;
+                                               break;
+                                       case 'n':
+                                               must_get_service_name = 2;
+                                               break;
+                                       case 'R':
+                                               must_get_service_reference = true;
+                                               break;
                                        default:
                                                break;
                                        }
@@ -2144,7 +2160,11 @@ PyObject *eEPGCache::search(ePyObject arg)
                                {
                                        int casetype = PyLong_AsLong(PyTuple_GET_ITEM(arg, 4));
                                        const char *str = PyString_AS_STRING(obj);
+#if PY_VERSION_HEX < 0x02060000
                                        int textlen = PyString_GET_SIZE(obj);
+#else
+                                       int textlen = PyString_Size(obj);
+#endif
                                        if (querytype == 1)
                                                eDebug("lookup for events with '%s' as title(%s)", str, casetype?"ignore case":"case sensitive");
                                        else
@@ -2159,22 +2179,32 @@ PyObject *eEPGCache::search(ePyObject arg)
                                                        int title_len = data[5];
                                                        if ( querytype == 1 )
                                                        {
-                                                               if (title_len > textlen)
-                                                                       continue;
-                                                               else if (title_len < textlen)
+                                                               int offs = 6;
+                                                               // skip DVB-Text Encoding!
+                                                               if (data[6] == 0x10)
+                                                               {
+                                                                       offs+=3;
+                                                                       title_len-=3;
+                                                               }
+                                                               else if(data[6] > 0 && data[6] < 0x20)
+                                                               {
+                                                                       offs+=1;
+                                                                       title_len-=1;
+                                                               }
+                                                               if (title_len != textlen)
                                                                        continue;
                                                                if ( casetype )
                                                                {
-                                                                       if ( !strncasecmp((const char*)data+6, str, title_len) )
+                                                                       if ( !strncasecmp((const char*)data+offs, str, title_len) )
                                                                        {
-//                                                                             std::string s((const char*)data+6, title_len);
+//                                                                             std::string s((const char*)data+offs, title_len);
 //                                                                             eDebug("match1 %s %s", str, s.c_str() );
                                                                                descr[++descridx] = it->first;
                                                                        }
                                                                }
-                                                               else if ( !strncmp((const char*)data+6, str, title_len) )
+                                                               else if ( !strncmp((const char*)data+offs, str, title_len) )
                                                                {
-//                                                                     std::string s((const char*)data+6, title_len);
+//                                                                     std::string s((const char*)data+offs, title_len);
 //                                                                     eDebug("match2 %s %s", str, s.c_str() );
                                                                        descr[++descridx] = it->first;
                                                                }
@@ -2193,13 +2223,13 @@ PyObject *eEPGCache::search(ePyObject arg)
 //                                                                                     eDebug("match 3 %s %s", str, s.c_str() );
                                                                                        break;
                                                                                }
-                                                                               else if (!strncmp((const char*)data+6+idx, str, textlen) )
-                                                                               {
-                                                                                       descr[++descridx] = it->first;
-//                                                                                     std::string s((const char*)data+6, title_len);
-//                                                                                     eDebug("match 4 %s %s", str, s.c_str() );
-                                                                                       break;
-                                                                               }
+                                                                       }
+                                                                       else if (!strncmp((const char*)data+6+idx, str, textlen) )
+                                                                       {
+                                                                               descr[++descridx] = it->first;
+//                                                                             std::string s((const char*)data+6, title_len);
+//                                                                             eDebug("match 4 %s %s", str, s.c_str() );
+                                                                               break;
                                                                        }
                                                                        ++idx;
                                                                }
@@ -2303,44 +2333,40 @@ PyObject *eEPGCache::search(ePyObject arg)
                                                        }
                                                }
                                        // create service name
-                                               if (!service_name)
+                                               if (must_get_service_name && !service_name)
                                                {
-                                                       int must_get_service_name = strchr(argstring, 'N') ? 1 : strchr(argstring, 'n') ? 2 : 0;
-                                                       if (must_get_service_name)
+                                                       ePtr<iStaticServiceInformation> sptr;
+                                                       eServiceCenterPtr service_center;
+                                                       eServiceCenter::getPrivInstance(service_center);
+                                                       if (service_center)
                                                        {
-                                                               ePtr<iStaticServiceInformation> sptr;
-                                                               eServiceCenterPtr service_center;
-                                                               eServiceCenter::getPrivInstance(service_center);
-                                                               if (service_center)
+                                                               service_center->info(ref, sptr);
+                                                               if (sptr)
                                                                {
-                                                                       service_center->info(ref, sptr);
-                                                                       if (sptr)
-                                                                       {
-                                                                               std::string name;
-                                                                               sptr->getName(ref, name);
+                                                                       std::string name;
+                                                                       sptr->getName(ref, name);
 
-                                                                               if (must_get_service_name == 1)
-                                                                               {
-                                                                                       size_t pos;
-                                                                                       // filter short name brakets
-                                                                                       while((pos = name.find("\xc2\x86")) != std::string::npos)
-                                                                                               name.erase(pos,2);
-                                                                                       while((pos = name.find("\xc2\x87")) != std::string::npos)
-                                                                                               name.erase(pos,2);
-                                                                               }
-                                                                               else
-                                                                                       name = buildShortName(name);
-
-                                                                               if (name.length())
-                                                                                       service_name = PyString_FromString(name.c_str());
+                                                                       if (must_get_service_name == 1)
+                                                                       {
+                                                                               size_t pos;
+                                                                               // filter short name brakets
+                                                                               while((pos = name.find("\xc2\x86")) != std::string::npos)
+                                                                                       name.erase(pos,2);
+                                                                               while((pos = name.find("\xc2\x87")) != std::string::npos)
+                                                                                       name.erase(pos,2);
                                                                        }
+                                                                       else
+                                                                               name = buildShortName(name);
+
+                                                                       if (name.length())
+                                                                               service_name = PyString_FromString(name.c_str());
                                                                }
-                                                               if (!service_name)
-                                                                       service_name = PyString_FromString("<n/a>");
                                                        }
+                                                       if (!service_name)
+                                                               service_name = PyString_FromString("<n/a>");
                                                }
                                        // create servicereference string
-                                               if (!service_reference && strchr(argstring,'R'))
+                                               if (must_get_service_reference && !service_reference)
                                                        service_reference = PyString_FromString(ref.toString().c_str());
                                        // create list
                                                if (!ret)
index b0e92d39ea1f0a078d9717eff484f40b27969983..e0291ec1731eb91ae4477d2df67c813dcb817b56 100644 (file)
@@ -1,4 +1,5 @@
 #include <lib/dvb/dvb.h>
+#include <lib/dvb/frontendparms.h>
 #include <lib/base/eerror.h>
 #include <lib/base/nconfig.h> // access to python config
 #include <errno.h>
@@ -148,10 +149,10 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
        symbol_rate  = descriptor.getSymbolRate() * 100;
        polarisation = descriptor.getPolarization();
        fec = descriptor.getFecInner();
-       if ( fec != FEC::fNone && fec > FEC::f9_10 )
-               fec = FEC::fAuto;
-       inversion = Inversion::Unknown;
-       pilot = Pilot::Unknown;
+       if ( fec != eDVBFrontendParametersSatellite::FEC_None && fec > eDVBFrontendParametersSatellite::FEC_9_10 )
+               fec = eDVBFrontendParametersSatellite::FEC_Auto;
+       inversion = eDVBFrontendParametersSatellite::Inversion_Unknown;
+       pilot = eDVBFrontendParametersSatellite::Pilot_Unknown;
        orbital_position  = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000;
        orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100;
        orbital_position += ((descriptor.getOrbitalPosition() >> 4) & 0xF) * 10;
@@ -160,13 +161,13 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
                orbital_position = 3600 - orbital_position;
        system = descriptor.getModulationSystem();
        modulation = descriptor.getModulation();
-       if (system == System::DVB_S && modulation == Modulation::M8PSK)
+       if (system == eDVBFrontendParametersSatellite::System_DVB_S && modulation == eDVBFrontendParametersSatellite::Modulation_8PSK)
        {
                eDebug("satellite_delivery_descriptor non valid modulation type.. force QPSK");
-               modulation=QPSK;
+               modulation=eDVBFrontendParametersSatellite::Modulation_QPSK;
        }
        rolloff = descriptor.getRollOff();
-       if (system == System::DVB_S2)
+       if (system == eDVBFrontendParametersSatellite::System_DVB_S2)
        {
                eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d",
                        frequency,
@@ -191,12 +192,12 @@ void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descr
        frequency = descriptor.getFrequency() / 10;
        symbol_rate = descriptor.getSymbolRate() * 100;
        fec_inner = descriptor.getFecInner();
-       if ( fec_inner == 0xF )
-               fec_inner = FEC::fNone;
+       if ( fec_inner != eDVBFrontendParametersCable::FEC_None && fec_inner > eDVBFrontendParametersCable::FEC_8_9 )
+               fec_inner = eDVBFrontendParametersCable::FEC_Auto;
        modulation = descriptor.getModulation();
        if ( modulation > 0x5 )
-               modulation = Modulation::Auto;
-       inversion = Inversion::Unknown;
+               modulation = eDVBFrontendParametersCable::Modulation_Auto;
+       inversion = eDVBFrontendParametersCable::Inversion_Unknown;
        eDebug("Cable freq %d, mod %d, sr %d, fec %d",
                frequency,
                modulation, symbol_rate, fec_inner);
@@ -207,24 +208,24 @@ void eDVBFrontendParametersTerrestrial::set(const TerrestrialDeliverySystemDescr
        frequency = descriptor.getCentreFrequency() * 10;
        bandwidth = descriptor.getBandwidth();
        if ( bandwidth > 2 ) // 5Mhz forced to auto
-               bandwidth = Bandwidth::BwAuto;
+               bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_Auto;
        code_rate_HP = descriptor.getCodeRateHpStream();
        if (code_rate_HP > 4)
-               code_rate_HP = FEC::fAuto;
+               code_rate_HP = eDVBFrontendParametersTerrestrial::FEC_Auto;
        code_rate_LP = descriptor.getCodeRateLpStream();
        if (code_rate_LP > 4)
-               code_rate_LP = FEC::fAuto;
+               code_rate_LP = eDVBFrontendParametersTerrestrial::FEC_Auto;
        transmission_mode = descriptor.getTransmissionMode();
        if (transmission_mode > 1) // TM4k forced to auto
-               transmission_mode = TransmissionMode::TMAuto;
+               transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto;
        guard_interval = descriptor.getGuardInterval();
        if (guard_interval > 3)
-               guard_interval = GuardInterval::GI_Auto;
+               guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_Auto;
        hierarchy = descriptor.getHierarchyInformation()&3;
        modulation = descriptor.getConstellation();
        if (modulation > 2)
-               modulation = Modulation::Auto;
-       inversion = Inversion::Unknown;
+               modulation = eDVBFrontendParametersTerrestrial::Modulation_Auto;
+       inversion = eDVBFrontendParametersTerrestrial::Inversion_Unknown;
        eDebug("Terr freq %d, bw %d, cr_hp %d, cr_lp %d, tm_mode %d, guard %d, hierarchy %d, const %d",
                frequency, bandwidth, code_rate_HP, code_rate_LP, transmission_mode,
                guard_interval, hierarchy, modulation);
@@ -316,9 +317,9 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        diff = 1<<29;
                else if (sat.polarisation != osat.polarisation)
                        diff = 1<<28;
-               else if (exact && sat.fec != osat.fec && sat.fec != eDVBFrontendParametersSatellite::FEC::fAuto && osat.fec != eDVBFrontendParametersSatellite::FEC::fAuto)
+               else if (exact && sat.fec != osat.fec && sat.fec != eDVBFrontendParametersSatellite::FEC_Auto && osat.fec != eDVBFrontendParametersSatellite::FEC_Auto)
                        diff = 1<<27;
-               else if (exact && sat.modulation != osat.modulation && sat.modulation != eDVBFrontendParametersSatellite::Modulation::Auto && osat.modulation != eDVBFrontendParametersSatellite::Modulation::Auto)
+               else if (exact && sat.modulation != osat.modulation && sat.modulation != eDVBFrontendParametersSatellite::Modulation_Auto && osat.modulation != eDVBFrontendParametersSatellite::Modulation_Auto)
                        diff = 1<<27;
                else
                {
@@ -333,10 +334,10 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        return -2;
 
                if (exact && cable.modulation != ocable.modulation
-                       && cable.modulation != eDVBFrontendParametersCable::Modulation::Auto
-                       && ocable.modulation != eDVBFrontendParametersCable::Modulation::Auto)
+                       && cable.modulation != eDVBFrontendParametersCable::Modulation_Auto
+                       && ocable.modulation != eDVBFrontendParametersCable::Modulation_Auto)
                        diff = 1 << 29;
-               else if (exact && cable.fec_inner != ocable.fec_inner && cable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto && ocable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto)
+               else if (exact && cable.fec_inner != ocable.fec_inner && cable.fec_inner != eDVBFrontendParametersCable::FEC_Auto && ocable.fec_inner != eDVBFrontendParametersCable::FEC_Auto)
                        diff = 1 << 27;
                else
                {
@@ -350,32 +351,32 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        return -2;
 
                if (exact && oterrestrial.bandwidth != terrestrial.bandwidth &&
-                       oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto &&
-                       terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto)
+                       oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto &&
+                       terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.modulation != terrestrial.modulation &&
-                       oterrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto &&
-                       terrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto)
+                       oterrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation_Auto &&
+                       terrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.transmission_mode != terrestrial.transmission_mode &&
-                       oterrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto &&
-                       terrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto)
+                       oterrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode_Auto &&
+                       terrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.guard_interval != terrestrial.guard_interval &&
-                       oterrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto &&
-                       terrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto)
+                       oterrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval_Auto &&
+                       terrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.hierarchy != terrestrial.hierarchy &&
-                       oterrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto &&
-                       terrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto)
+                       oterrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy_Auto &&
+                       terrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.code_rate_LP != terrestrial.code_rate_LP &&
-                       oterrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto &&
-                       terrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto)
+                       oterrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC_Auto &&
+                       terrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC_Auto)
                        diff = 1 << 30;
                else if (exact && oterrestrial.code_rate_HP != terrestrial.code_rate_HP &&
-                       oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto &&
-                       terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto)
+                       oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto &&
+                       terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto)
                        diff = 1 << 30;
                else
                        diff = abs(terrestrial.frequency - oterrestrial.frequency);
@@ -587,6 +588,10 @@ int eDVBFrontend::closeFrontend(bool force)
        if (m_fd >= 0)
        {
                eDebugNoSimulate("close frontend %d", m_dvbid);
+               if (m_data[SATCR] != -1)
+               {
+                       turnOffSatCR(m_data[SATCR]);
+               }
                setTone(iDVBFrontend::toneOff);
                setVoltage(iDVBFrontend::voltageOff);
                m_tuneTimer->stop();
@@ -695,6 +700,12 @@ void eDVBFrontend::timeout()
 
 #define INRANGE(X,Y,Z) (((X<=Y) && (Y<=Z))||((Z<=Y) && (Y<=X)) ? 1 : 0)
 
+/* unsigned 32 bit division */
+static inline uint32_t fe_udiv(uint32_t a, uint32_t b)
+{
+       return (a + b / 2) / b;
+}
+
 int eDVBFrontend::readFrontendData(int type)
 {
        switch(type)
@@ -710,25 +721,18 @@ int eDVBFrontend::readFrontendData(int type)
                        return ber;
                }
                case signalQuality:
-               {
-                       uint16_t snr=0;
-                       if (!m_simulate)
-                       {
-                               if (ioctl(m_fd, FE_READ_SNR, &snr) < 0 && errno != ERANGE)
-                                       eDebug("FE_READ_SNR failed (%m)");
-                       }
-                       return snr;
-               }
                case signalQualitydB: /* this will move into the driver */
                {
+                       int sat_max = 1600; // for stv0288 / bsbe2
+                       int ret = 0x12345678;
                        uint16_t snr=0;
                        if (m_simulate)
                                return 0;
                        if (ioctl(m_fd, FE_READ_SNR, &snr) < 0 && errno != ERANGE)
                                eDebug("FE_READ_SNR failed (%m)");
-                       if (!strcmp(m_description, "BCM4501 (internal)"))
+                       else if (!strcmp(m_description, "BCM4501 (internal)"))
                        {
-                               unsigned int SDS_SNRE = snr << 16;
+                               float SDS_SNRE = snr << 16;
                                float snr_in_db;
 
                                if (parm_u_qpsk_fec_inner <= FEC_AUTO) // DVB-S1 / QPSK
@@ -748,7 +752,7 @@ int eDVBFrontend::readFrontendData(int type)
                                        if (fval1 < 10.0)
                                        {
                                                fval2 = SNR_COEFF[0];
-                                               for (int i=0; i<6; ++i)
+                                               for (int i=1; i<6; ++i)
                                                {
                                                        fval2 *= fval1;
                                                        fval2 += SNR_COEFF[i];
@@ -781,15 +785,16 @@ int eDVBFrontend::readFrontendData(int type)
                                        snr_in_db = fval1;
                                }
 #endif
-                               return (int)(snr_in_db * 100.0);
+                               sat_max = 1750;
+                               ret = (int)(snr_in_db * 100);
                        }
                        else if (strstr(m_description, "Alps BSBE1 C01A") ||
                                !strcmp(m_description, "Alps -S(STV0288)"))
                        {
                                if (snr == 0)
-                                       return 0;
+                                       ret = 0;
                                else if (snr == 0xFFFF) // i think this should not happen
-                                       return 100*100;
+                                       ret = 100*100;
                                else
                                {
                                        enum { REALVAL, REGVAL };
@@ -817,28 +822,60 @@ int eDVBFrontend::readFrontendData(int type)
                                                        else
                                                                Imin = i;
                                                }
-                                               return (((regval - CN_lookup[Imin][REGVAL])
+                                               ret = (((regval - CN_lookup[Imin][REGVAL])
                                                                * (CN_lookup[Imax][REALVAL] - CN_lookup[Imin][REALVAL])
                                                                / (CN_lookup[Imax][REGVAL] - CN_lookup[Imin][REGVAL]))
                                                                + CN_lookup[Imin][REALVAL]) * 10;
                                        }
-                                       return 100;
+                                       else
+                                               ret = 100;
                                }
-                               return 0;
                        }
                        else if (!strcmp(m_description, "Alps BSBE1 702A") ||  // some frontends with STV0299
                                !strcmp(m_description, "Alps -S") ||
                                !strcmp(m_description, "Philips -S") ||
                                !strcmp(m_description, "LG -S") )
                        {
-                               float snr_in_db=(snr-39075)/1764.7;
-                               return (int)(snr_in_db * 100.0);
+                               sat_max = 1500;
+                               ret = (int)((snr-39075)/17.647);
                        } else if (!strcmp(m_description, "Alps BSBE2"))
                        {
-                               return (int)((snr >> 7) * 10.0);
-                       } /* else
+                               ret = (int)((snr >> 7) * 10);
+                       } else if (!strcmp(m_description, "Philips CU1216Mk3"))
+                       {
+                               int mse = (~snr) & 0xFF;
+                               switch (parm_u_qam_modulation) {
+                               case QAM_16: ret = fe_udiv(1950000, (32 * mse) + 138) + 1000; break;
+                               case QAM_32: ret = fe_udiv(2150000, (40 * mse) + 500) + 1350; break;
+                               case QAM_64: ret = fe_udiv(2100000, (40 * mse) + 500) + 1250; break;
+                               case QAM_128: ret = fe_udiv(1850000, (38 * mse) + 400) + 1380; break;
+                               case QAM_256: ret = fe_udiv(1800000, (100 * mse) + 40) + 2030; break;
+                               default: break;
+                               }
+                       } else if (!strcmp(m_description, "Philips TU1216"))
+                       {
+                               snr = 0xFF - (snr & 0xFF);
+                               if (snr != 0)
+                                       ret = 10 * (int)(-100 * (log10(snr) - log10(255)));
+                       }
+
+                       if (type == signalQuality)
+                       {
+                               if (ret == 0x12345678) // no snr db calculation avail.. return untouched snr value..
+                                       return snr;
+                               switch(m_type)
+                               {
+                                       case feSatellite:
+                                               return ret >= sat_max ? 65536 : ret * 65536 / sat_max;
+                                       case feCable: // we assume a max of 42db here
+                                               return ret >= 4200 ? 65536 : ret * 65536 / 4200;
+                                       case feTerrestrial: // we assume a max of 24db here
+                                               return ret >= 2400 ? 65536 : ret * 65536 / 2400;
+                               }
+                       }
+/* else
                                eDebug("no SNR dB calculation for frontendtype %s yet", m_description); */
-                       return 0x12345678;
+                       return ret;
                }
                case signalPower:
                {
@@ -927,120 +964,79 @@ void PutToDict(ePyObject &dict, const char*key, const char *value)
 void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, eDVBFrontend *fe)
 {
        long freq_offset=0;
-       const char *tmp=0;
+       long tmp=0;
        fe->getData(eDVBFrontend::FREQ_OFFSET, freq_offset);
        int frequency = parm_frequency + freq_offset;
        PutToDict(dict, "frequency", frequency);
        PutToDict(dict, "symbol_rate", parm_u_qpsk_symbol_rate);
        switch(parm_u_qpsk_fec_inner)
        {
-       case FEC_1_2:
-               tmp = "FEC_1_2";
-               break;
-       case FEC_2_3:
-               tmp = "FEC_2_3";
-               break;
-       case FEC_3_4:
-               tmp = "FEC_3_4";
-               break;
-       case FEC_5_6:
-               tmp = "FEC_5_6";
-               break;
-       case FEC_7_8:
-               tmp = "FEC_7_8";
-               break;
-       case FEC_NONE:
-               tmp = "FEC_NONE";
+       case FEC_1_2: tmp = eDVBFrontendParametersSatellite::FEC_1_2; break;
+       case FEC_2_3: tmp = eDVBFrontendParametersSatellite::FEC_2_3; break;
+       case FEC_3_4: tmp = eDVBFrontendParametersSatellite::FEC_3_4; break;
+       case FEC_5_6: tmp = eDVBFrontendParametersSatellite::FEC_5_6; break;
+       case FEC_7_8: tmp = eDVBFrontendParametersSatellite::FEC_7_8; break;
+       case FEC_NONE: tmp = eDVBFrontendParametersSatellite::FEC_None; break;
        default:
-       case FEC_AUTO:
-               tmp = "FEC_AUTO";
-               break;
+       case FEC_AUTO: tmp = eDVBFrontendParametersSatellite::FEC_Auto; break;
 #if HAVE_DVB_API_VERSION >=3
-       case FEC_S2_8PSK_1_2:
-       case FEC_S2_QPSK_1_2:
-               tmp = "FEC_1_2";
-               break;
+       case FEC_S2_8PSK_1_2: 
+       case FEC_S2_QPSK_1_2: tmp = eDVBFrontendParametersSatellite::FEC_1_2; break;
        case FEC_S2_8PSK_2_3:
-       case FEC_S2_QPSK_2_3:
-               tmp = "FEC_2_3";
-               break;
+       case FEC_S2_QPSK_2_3: tmp = eDVBFrontendParametersSatellite::FEC_2_3; break;
        case FEC_S2_8PSK_3_4:
-       case FEC_S2_QPSK_3_4:
-               tmp = "FEC_3_4";
-               break;
+       case FEC_S2_QPSK_3_4: tmp = eDVBFrontendParametersSatellite::FEC_3_4; break;
        case FEC_S2_8PSK_5_6:
-       case FEC_S2_QPSK_5_6:
-               tmp = "FEC_5_6";
-               break;
+       case FEC_S2_QPSK_5_6: tmp = eDVBFrontendParametersSatellite::FEC_5_6; break;
        case FEC_S2_8PSK_7_8:
-       case FEC_S2_QPSK_7_8:
-               tmp = "FEC_7_8";
-               break;
+       case FEC_S2_QPSK_7_8: tmp = eDVBFrontendParametersSatellite::FEC_7_8; break;
        case FEC_S2_8PSK_8_9:
-       case FEC_S2_QPSK_8_9:
-               tmp = "FEC_8_9";
-               break;
+       case FEC_S2_QPSK_8_9: tmp = eDVBFrontendParametersSatellite::FEC_8_9; break;
        case FEC_S2_8PSK_3_5:
-       case FEC_S2_QPSK_3_5:
-               tmp = "FEC_3_5";
-               break;
+       case FEC_S2_QPSK_3_5: tmp = eDVBFrontendParametersSatellite::FEC_3_5; break;
        case FEC_S2_8PSK_4_5:
-       case FEC_S2_QPSK_4_5:
-               tmp = "FEC_4_5";
-               break;
+       case FEC_S2_QPSK_4_5: tmp = eDVBFrontendParametersSatellite::FEC_4_5; break;
        case FEC_S2_8PSK_9_10:
-       case FEC_S2_QPSK_9_10:
-               tmp = "FEC_9_10";
-               break;
+       case FEC_S2_QPSK_9_10: tmp = eDVBFrontendParametersSatellite::FEC_9_10; break;
 #endif
        }
        PutToDict(dict, "fec_inner", tmp);
 #if HAVE_DVB_API_VERSION >=3
        PutToDict(dict, "modulation",
-               parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10 ? "8PSK": "QPSK" );
+               parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10 ?
+                       eDVBFrontendParametersSatellite::Modulation_8PSK :
+                       eDVBFrontendParametersSatellite::Modulation_QPSK );
        if (parm_u_qpsk_fec_inner > FEC_AUTO)
        {
                switch(parm_inversion & 0xc)
                {
                default: // unknown rolloff
-               case 0: // 0.35
-                       tmp = "ROLLOFF_0_35";
-                       break;
-               case 4: // 0.25
-                       tmp = "ROLLOFF_0_25";
-                       break;
-               case 8: // 0.20
-                       tmp = "ROLLOFF_0_20";
-                       break;
+               case 0: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_35; break;
+               case 4: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_25; break;
+               case 8: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_20; break;
                }
                PutToDict(dict, "rolloff", tmp);
                switch(parm_inversion & 0x30)
                {
-               case 0: // pilot off
-                       tmp = "PILOT_OFF";
-                       break;
-               case 0x10: // pilot on
-                       tmp = "PILOT_ON";
-                       break;
-               case 0x20: // pilot auto
-                       tmp = "PILOT_AUTO";
-                       break;
+               case 0: tmp = eDVBFrontendParametersSatellite::Pilot_Off; break;
+               case 0x10: tmp = eDVBFrontendParametersSatellite::Pilot_On; break;
+               case 0x20: tmp = eDVBFrontendParametersSatellite::Pilot_Unknown; break;
                }
                PutToDict(dict, "pilot", tmp);
-               tmp = "DVB-S2";
+               tmp = eDVBFrontendParametersSatellite::System_DVB_S2;
        }
        else
-               tmp = "DVB-S";
+               tmp = eDVBFrontendParametersSatellite::System_DVB_S;
 #else
-       PutToDict(dict, "modulation", "QPSK" );
-       tmp = "DVB-S";
+       PutToDict(dict, "modulation", eDVBFrontendParametersSatellite::Modulation_QPSK );
+       tmp = eDVBFrontendParametersSatellite::System_DVB_S;
 #endif
        PutToDict(dict, "system", tmp);
 }
 
 void fillDictWithCableData(ePyObject dict, const FRONTENDPARAMETERS &parm)
 {
-       const char *tmp=0;
+       long tmp=0;
 #if HAVE_DVB_API_VERSION < 3
        PutToDict(dict, "frequency", parm_frequency);
 #else
@@ -1049,196 +1045,102 @@ void fillDictWithCableData(ePyObject dict, const FRONTENDPARAMETERS &parm)
        PutToDict(dict, "symbol_rate", parm_u_qam_symbol_rate);
        switch(parm_u_qam_fec_inner)
        {
-       case FEC_NONE:
-               tmp = "FEC_NONE";
-               break;
-       case FEC_1_2:
-               tmp = "FEC_1_2";
-               break;
-       case FEC_2_3:
-               tmp = "FEC_2_3";
-               break;
-       case FEC_3_4:
-               tmp = "FEC_3_4";
-               break;
-       case FEC_5_6:
-               tmp = "FEC_5_6";
-               break;
-       case FEC_7_8:
-               tmp = "FEC_7_8";
-               break;
+       case FEC_NONE: tmp = eDVBFrontendParametersCable::FEC_None; break;
+       case FEC_1_2: tmp = eDVBFrontendParametersCable::FEC_1_2; break;
+       case FEC_2_3: tmp = eDVBFrontendParametersCable::FEC_2_3; break;
+       case FEC_3_4: tmp = eDVBFrontendParametersCable::FEC_3_4; break;
+       case FEC_5_6: tmp = eDVBFrontendParametersCable::FEC_5_6; break;
+       case FEC_7_8: tmp = eDVBFrontendParametersCable::FEC_7_8; break;
 #if HAVE_DVB_API_VERSION >= 3
-       case FEC_8_9:
-               tmp = "FEC_8_9";
-               break;
+       case FEC_8_9: tmp = eDVBFrontendParametersCable::FEC_7_8; break;
 #endif
        default:
-       case FEC_AUTO:
-               tmp = "FEC_AUTO";
-               break;
+       case FEC_AUTO: tmp = eDVBFrontendParametersCable::FEC_Auto; break;
        }
        PutToDict(dict, "fec_inner", tmp);
        switch(parm_u_qam_modulation)
        {
-       case QAM_16:
-               tmp = "QAM_16";
-               break;
-       case QAM_32:
-               tmp = "QAM_32";
-               break;
-       case QAM_64:
-               tmp = "QAM_64";
-               break;
-       case QAM_128:
-               tmp = "QAM_128";
-               break;
-       case QAM_256:
-               tmp = "QAM_256";
-               break;
+       case QAM_16: tmp = eDVBFrontendParametersCable::Modulation_QAM16; break;
+       case QAM_32: tmp = eDVBFrontendParametersCable::Modulation_QAM32; break;
+       case QAM_64: tmp = eDVBFrontendParametersCable::Modulation_QAM64; break;
+       case QAM_128: tmp = eDVBFrontendParametersCable::Modulation_QAM128; break;
+       case QAM_256: tmp = eDVBFrontendParametersCable::Modulation_QAM256; break;
        default:
-       case QAM_AUTO:
-               tmp = "QAM_AUTO";
-               break;
+       case QAM_AUTO:   tmp = eDVBFrontendParametersCable::Modulation_Auto; break;
        }
        PutToDict(dict, "modulation", tmp);
 }
 
 void fillDictWithTerrestrialData(ePyObject dict, const FRONTENDPARAMETERS &parm)
 {
-       const char *tmp=0;
+       long tmp=0;
        PutToDict(dict, "frequency", parm_frequency);
        switch (parm_u_ofdm_bandwidth)
        {
-       case BANDWIDTH_8_MHZ:
-               tmp = "BANDWIDTH_8_MHZ";
-               break;
-       case BANDWIDTH_7_MHZ:
-               tmp = "BANDWIDTH_7_MHZ";
-               break;
-       case BANDWIDTH_6_MHZ:
-               tmp = "BANDWIDTH_6_MHZ";
-               break;
+       case BANDWIDTH_8_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_8MHz; break;
+       case BANDWIDTH_7_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_7MHz; break;
+       case BANDWIDTH_6_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_6MHz; break;
        default:
-       case BANDWIDTH_AUTO:
-               tmp = "BANDWIDTH_AUTO";
-               break;
+       case BANDWIDTH_AUTO: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_Auto; break;
        }
        PutToDict(dict, "bandwidth", tmp);
        switch (parm_u_ofdm_code_rate_LP)
        {
-       case FEC_1_2:
-               tmp = "FEC_1_2";
-               break;
-       case FEC_2_3:
-               tmp = "FEC_2_3";
-               break;
-       case FEC_3_4:
-               tmp = "FEC_3_4";
-               break;
-       case FEC_5_6:
-               tmp = "FEC_5_6";
-               break;
-       case FEC_7_8:
-               tmp = "FEC_7_8";
-               break;
+       case FEC_1_2: tmp = eDVBFrontendParametersTerrestrial::FEC_1_2; break;
+       case FEC_2_3: tmp = eDVBFrontendParametersTerrestrial::FEC_2_3; break;
+       case FEC_3_4: tmp = eDVBFrontendParametersTerrestrial::FEC_3_4; break;
+       case FEC_5_6: tmp = eDVBFrontendParametersTerrestrial::FEC_5_6; break;
+       case FEC_7_8: tmp = eDVBFrontendParametersTerrestrial::FEC_7_8; break;
        default:
-       case FEC_AUTO:
-               tmp = "FEC_AUTO";
-               break;
+       case FEC_AUTO: tmp = eDVBFrontendParametersTerrestrial::FEC_Auto; break;
        }
        PutToDict(dict, "code_rate_lp", tmp);
        switch (parm_u_ofdm_code_rate_HP)
        {
-       case FEC_1_2:
-               tmp = "FEC_1_2";
-               break;
-       case FEC_2_3:
-               tmp = "FEC_2_3";
-               break;
-       case FEC_3_4:
-               tmp = "FEC_3_4";
-               break;
-       case FEC_5_6:
-               tmp = "FEC_5_6";
-               break;
-       case FEC_7_8:
-               tmp = "FEC_7_8";
-               break;
+       case FEC_1_2: tmp = eDVBFrontendParametersTerrestrial::FEC_1_2; break;
+       case FEC_2_3: tmp = eDVBFrontendParametersTerrestrial::FEC_2_3; break;
+       case FEC_3_4: tmp = eDVBFrontendParametersTerrestrial::FEC_3_4; break;
+       case FEC_5_6: tmp = eDVBFrontendParametersTerrestrial::FEC_5_6; break;
+       case FEC_7_8: tmp = eDVBFrontendParametersTerrestrial::FEC_7_8; break;
        default:
-       case FEC_AUTO:
-               tmp = "FEC_AUTO";
-               break;
+       case FEC_AUTO: tmp = eDVBFrontendParametersTerrestrial::FEC_Auto; break;
        }
        PutToDict(dict, "code_rate_hp", tmp);
        switch (parm_u_ofdm_constellation)
        {
-       case QPSK:
-               tmp = "QPSK";
-               break;
-       case QAM_16:
-               tmp = "QAM_16";
-               break;
-       case QAM_64:
-               tmp = "QAM_64";
-               break;
+       case QPSK: tmp = eDVBFrontendParametersTerrestrial::Modulation_QPSK; break;
+       case QAM_16: tmp = eDVBFrontendParametersTerrestrial::Modulation_QAM16; break;
+       case QAM_64: tmp = eDVBFrontendParametersTerrestrial::Modulation_QAM64; break;
        default:
-       case QAM_AUTO:
-               tmp = "QAM_AUTO";
-               break;
+       case QAM_AUTO: tmp = eDVBFrontendParametersTerrestrial::Modulation_Auto; break;
        }
        PutToDict(dict, "constellation", tmp);
        switch (parm_u_ofdm_transmission_mode)
        {
-       case TRANSMISSION_MODE_2K:
-               tmp = "TRANSMISSION_MODE_2K";
-               break;
-       case TRANSMISSION_MODE_8K:
-               tmp = "TRANSMISSION_MODE_8K";
-               break;
+       case TRANSMISSION_MODE_2K: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_2k; break;
+       case TRANSMISSION_MODE_8K: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_8k; break;
        default:
-       case TRANSMISSION_MODE_AUTO:
-               tmp = "TRANSMISSION_MODE_AUTO";
-               break;
+       case TRANSMISSION_MODE_AUTO: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; break;
        }
        PutToDict(dict, "transmission_mode", tmp);
        switch (parm_u_ofdm_guard_interval)
        {
-               case GUARD_INTERVAL_1_32:
-                       tmp = "GUARD_INTERVAL_1_32";
-                       break;
-               case GUARD_INTERVAL_1_16:
-                       tmp = "GUARD_INTERVAL_1_16";
-                       break;
-               case GUARD_INTERVAL_1_8:
-                       tmp = "GUARD_INTERVAL_1_8";
-                       break;
-               case GUARD_INTERVAL_1_4:
-                       tmp = "GUARD_INTERVAL_1_4";
-                       break;
+               case GUARD_INTERVAL_1_32: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_32; break;
+               case GUARD_INTERVAL_1_16: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_16; break;
+               case GUARD_INTERVAL_1_8: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_8; break;
+               case GUARD_INTERVAL_1_4: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_4; break;
                default:
-               case GUARD_INTERVAL_AUTO:
-                       tmp = "GUARD_INTERVAL_AUTO";
-                       break;
+               case GUARD_INTERVAL_AUTO: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_Auto; break;
        }
        PutToDict(dict, "guard_interval", tmp);
        switch (parm_u_ofdm_hierarchy_information)
        {
-               case HIERARCHY_NONE:
-                       tmp = "HIERARCHY_NONE";
-                       break;
-               case HIERARCHY_1:
-                       tmp = "HIERARCHY_1";
-                       break;
-               case HIERARCHY_2:
-                       tmp = "HIERARCHY_2";
-                       break;
-               case HIERARCHY_4:
-                       tmp = "HIERARCHY_4";
-                       break;
+               case HIERARCHY_NONE: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_None; break;
+               case HIERARCHY_1: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_1; break;
+               case HIERARCHY_2: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_2; break;
+               case HIERARCHY_4: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_4; break;
                default:
-               case HIERARCHY_AUTO:
-                       tmp = "HIERARCHY_AUTO";
-                       break;
+               case HIERARCHY_AUTO: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_Auto; break;
        }
        PutToDict(dict, "hierarchy_information", tmp);
 }
@@ -1306,20 +1208,18 @@ void eDVBFrontend::getTransponderData(ePyObject dest, bool original)
                                }
                                {
                                        const FRONTENDPARAMETERS &parm = original || m_simulate ? this->parm : front;
-                                       const char *tmp = "INVERSION_AUTO";
+                                       long tmp = eDVBFrontendParametersSatellite::Inversion_Unknown;
                                        switch(parm_inversion & 3)
                                        {
                                                case INVERSION_ON:
-                                                       tmp = "INVERSION_ON";
+                                                       tmp = eDVBFrontendParametersSatellite::Inversion_On;
                                                        break;
                                                case INVERSION_OFF:
-                                                       tmp = "INVERSION_OFF";
-                                                       break;
+                                                       tmp = eDVBFrontendParametersSatellite::Inversion_Off;
                                                default:
                                                        break;
                                        }
-                                       if (tmp)
-                                               PutToDict(dest, "inversion", tmp);
+                                       PutToDict(dest, "inversion", tmp);
 
                                        switch(m_type)
                                        {
@@ -1827,6 +1727,20 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
        res = m_sec->prepare(*this, parm, feparm, 1 << m_slotid, tunetimeout);
        if (!res)
        {
+#if HAVE_DVB_API_VERSION >= 3
+               eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d system %d modulation %d pilot %d, rolloff %d",
+                       feparm.system,
+                       feparm.frequency,
+                       feparm.polarisation,
+                       feparm.symbol_rate,
+                       feparm.inversion,
+                       feparm.fec,
+                       feparm.orbital_position,
+                       feparm.system,
+                       feparm.modulation,
+                       feparm.pilot,
+                       feparm.rolloff);
+#else
                eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d",
                        feparm.system,
                        feparm.frequency,
@@ -1835,44 +1749,45 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
                        feparm.inversion,
                        feparm.fec,
                        feparm.orbital_position);
+#endif
                parm_u_qpsk_symbol_rate = feparm.symbol_rate;
                switch (feparm.inversion)
                {
-                       case eDVBFrontendParametersSatellite::Inversion::On:
+                       case eDVBFrontendParametersSatellite::Inversion_On:
                                parm_inversion = INVERSION_ON;
                                break;
-                       case eDVBFrontendParametersSatellite::Inversion::Off:
+                       case eDVBFrontendParametersSatellite::Inversion_Off:
                                parm_inversion = INVERSION_OFF;
                                break;
                        default:
-                       case eDVBFrontendParametersSatellite::Inversion::Unknown:
+                       case eDVBFrontendParametersSatellite::Inversion_Unknown:
                                parm_inversion = INVERSION_AUTO;
                                break;
                }
-               if (feparm.system == eDVBFrontendParametersSatellite::System::DVB_S)
+               if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S)
                        switch (feparm.fec)
                        {
-                               case eDVBFrontendParametersSatellite::FEC::fNone:
+                               case eDVBFrontendParametersSatellite::FEC_None:
                                        parm_u_qpsk_fec_inner = FEC_NONE;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f1_2:
+                               case eDVBFrontendParametersSatellite::FEC_1_2:
                                        parm_u_qpsk_fec_inner = FEC_1_2;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f2_3:
+                               case eDVBFrontendParametersSatellite::FEC_2_3:
                                        parm_u_qpsk_fec_inner = FEC_2_3;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f3_4:
+                               case eDVBFrontendParametersSatellite::FEC_3_4:
                                        parm_u_qpsk_fec_inner = FEC_3_4;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f5_6:
+                               case eDVBFrontendParametersSatellite::FEC_5_6:
                                        parm_u_qpsk_fec_inner = FEC_5_6;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f7_8:
+                               case eDVBFrontendParametersSatellite::FEC_7_8:
                                        parm_u_qpsk_fec_inner = FEC_7_8;
                                        break;
                                default:
                                        eDebugNoSimulate("no valid fec for DVB-S set.. assume auto");
-                               case eDVBFrontendParametersSatellite::FEC::fAuto:
+                               case eDVBFrontendParametersSatellite::FEC_Auto:
                                        parm_u_qpsk_fec_inner = FEC_AUTO;
                                        break;
                        }
@@ -1881,31 +1796,31 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
                {
                        switch (feparm.fec)
                        {
-                               case eDVBFrontendParametersSatellite::FEC::f1_2:
+                               case eDVBFrontendParametersSatellite::FEC_1_2:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_1_2;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f2_3:
+                               case eDVBFrontendParametersSatellite::FEC_2_3:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_2_3;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f3_4:
+                               case eDVBFrontendParametersSatellite::FEC_3_4:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_4;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f3_5:
+                               case eDVBFrontendParametersSatellite::FEC_3_5:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_5;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f4_5:
+                               case eDVBFrontendParametersSatellite::FEC_4_5:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_4_5;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f5_6:
+                               case eDVBFrontendParametersSatellite::FEC_5_6:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_5_6;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f7_8:
+                               case eDVBFrontendParametersSatellite::FEC_7_8:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_7_8;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f8_9:
+                               case eDVBFrontendParametersSatellite::FEC_8_9:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_8_9;
                                        break;
-                               case eDVBFrontendParametersSatellite::FEC::f9_10:
+                               case eDVBFrontendParametersSatellite::FEC_9_10:
                                        parm_u_qpsk_fec_inner = FEC_S2_QPSK_9_10;
                                        break;
                                default:
@@ -1914,7 +1829,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
                        }
                        parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff
                        parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot
-                       if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) {
+                       if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation_8PSK) {
                                parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9);
                                // 8PSK fec driver values are decimal 9 bigger
                        }
@@ -1941,66 +1856,66 @@ RESULT eDVBFrontend::prepare_cable(const eDVBFrontendParametersCable &feparm)
        parm_u_qam_symbol_rate = feparm.symbol_rate;
        switch (feparm.modulation)
        {
-       case eDVBFrontendParametersCable::Modulation::QAM16:
+       case eDVBFrontendParametersCable::Modulation_QAM16:
                parm_u_qam_modulation = QAM_16;
                break;
-       case eDVBFrontendParametersCable::Modulation::QAM32:
+       case eDVBFrontendParametersCable::Modulation_QAM32:
                parm_u_qam_modulation = QAM_32;
                break;
-       case eDVBFrontendParametersCable::Modulation::QAM64:
+       case eDVBFrontendParametersCable::Modulation_QAM64:
                parm_u_qam_modulation = QAM_64;
                break;
-       case eDVBFrontendParametersCable::Modulation::QAM128:
+       case eDVBFrontendParametersCable::Modulation_QAM128:
                parm_u_qam_modulation = QAM_128;
                break;
-       case eDVBFrontendParametersCable::Modulation::QAM256:
+       case eDVBFrontendParametersCable::Modulation_QAM256:
                parm_u_qam_modulation = QAM_256;
                break;
        default:
-       case eDVBFrontendParametersCable::Modulation::Auto:
+       case eDVBFrontendParametersCable::Modulation_Auto:
                parm_u_qam_modulation = QAM_AUTO;
                break;
        }
        switch (feparm.inversion)
        {
-       case eDVBFrontendParametersCable::Inversion::On:
+       case eDVBFrontendParametersCable::Inversion_On:
                parm_inversion = INVERSION_ON;
                break;
-       case eDVBFrontendParametersCable::Inversion::Off:
+       case eDVBFrontendParametersCable::Inversion_Off:
                parm_inversion = INVERSION_OFF;
                break;
        default:
-       case eDVBFrontendParametersCable::Inversion::Unknown:
+       case eDVBFrontendParametersCable::Inversion_Unknown:
                parm_inversion = INVERSION_AUTO;
                break;
        }
        switch (feparm.fec_inner)
        {
-       case eDVBFrontendParametersCable::FEC::fNone:
+       case eDVBFrontendParametersCable::FEC_None:
                parm_u_qam_fec_inner = FEC_NONE;
                break;
-       case eDVBFrontendParametersCable::FEC::f1_2:
+       case eDVBFrontendParametersCable::FEC_1_2:
                parm_u_qam_fec_inner = FEC_1_2;
                break;
-       case eDVBFrontendParametersCable::FEC::f2_3:
+       case eDVBFrontendParametersCable::FEC_2_3:
                parm_u_qam_fec_inner = FEC_2_3;
                break;
-       case eDVBFrontendParametersCable::FEC::f3_4:
+       case eDVBFrontendParametersCable::FEC_3_4:
                parm_u_qam_fec_inner = FEC_3_4;
                break;
-       case eDVBFrontendParametersCable::FEC::f5_6:
+       case eDVBFrontendParametersCable::FEC_5_6:
                parm_u_qam_fec_inner = FEC_5_6;
                break;
-       case eDVBFrontendParametersCable::FEC::f7_8:
+       case eDVBFrontendParametersCable::FEC_7_8:
                parm_u_qam_fec_inner = FEC_7_8;
                break;
 #if HAVE_DVB_API_VERSION >= 3
-       case eDVBFrontendParametersCable::FEC::f8_9:
+       case eDVBFrontendParametersCable::FEC_8_9:
                parm_u_qam_fec_inner = FEC_8_9;
                break;
 #endif
        default:
-       case eDVBFrontendParametersCable::FEC::fAuto:
+       case eDVBFrontendParametersCable::FEC_Auto:
                parm_u_qam_fec_inner = FEC_AUTO;
                break;
        }
@@ -2019,141 +1934,141 @@ RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial
 
        switch (feparm.bandwidth)
        {
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz:
+       case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz:
                parm_u_ofdm_bandwidth = BANDWIDTH_8_MHZ;
                break;
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz:
+       case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz:
                parm_u_ofdm_bandwidth = BANDWIDTH_7_MHZ;
                break;
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz:
+       case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz:
                parm_u_ofdm_bandwidth = BANDWIDTH_6_MHZ;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto:
+       case eDVBFrontendParametersTerrestrial::Bandwidth_Auto:
                parm_u_ofdm_bandwidth = BANDWIDTH_AUTO;
                break;
        }
        switch (feparm.code_rate_LP)
        {
-       case eDVBFrontendParametersTerrestrial::FEC::f1_2:
+       case eDVBFrontendParametersTerrestrial::FEC_1_2:
                parm_u_ofdm_code_rate_LP = FEC_1_2;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f2_3:
+       case eDVBFrontendParametersTerrestrial::FEC_2_3:
                parm_u_ofdm_code_rate_LP = FEC_2_3;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f3_4:
+       case eDVBFrontendParametersTerrestrial::FEC_3_4:
                parm_u_ofdm_code_rate_LP = FEC_3_4;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f5_6:
+       case eDVBFrontendParametersTerrestrial::FEC_5_6:
                parm_u_ofdm_code_rate_LP = FEC_5_6;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f7_8:
+       case eDVBFrontendParametersTerrestrial::FEC_7_8:
                parm_u_ofdm_code_rate_LP = FEC_7_8;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::FEC::fAuto:
+       case eDVBFrontendParametersTerrestrial::FEC_Auto:
                parm_u_ofdm_code_rate_LP = FEC_AUTO;
                break;
        }
        switch (feparm.code_rate_HP)
        {
-       case eDVBFrontendParametersTerrestrial::FEC::f1_2:
+       case eDVBFrontendParametersTerrestrial::FEC_1_2:
                parm_u_ofdm_code_rate_HP = FEC_1_2;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f2_3:
+       case eDVBFrontendParametersTerrestrial::FEC_2_3:
                parm_u_ofdm_code_rate_HP = FEC_2_3;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f3_4:
+       case eDVBFrontendParametersTerrestrial::FEC_3_4:
                parm_u_ofdm_code_rate_HP = FEC_3_4;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f5_6:
+       case eDVBFrontendParametersTerrestrial::FEC_5_6:
                parm_u_ofdm_code_rate_HP = FEC_5_6;
                break;
-       case eDVBFrontendParametersTerrestrial::FEC::f7_8:
+       case eDVBFrontendParametersTerrestrial::FEC_7_8:
                parm_u_ofdm_code_rate_HP = FEC_7_8;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::FEC::fAuto:
+       case eDVBFrontendParametersTerrestrial::FEC_Auto:
                parm_u_ofdm_code_rate_HP = FEC_AUTO;
                break;
        }
        switch (feparm.modulation)
        {
-       case eDVBFrontendParametersTerrestrial::Modulation::QPSK:
+       case eDVBFrontendParametersTerrestrial::Modulation_QPSK:
                parm_u_ofdm_constellation = QPSK;
                break;
-       case eDVBFrontendParametersTerrestrial::Modulation::QAM16:
+       case eDVBFrontendParametersTerrestrial::Modulation_QAM16:
                parm_u_ofdm_constellation = QAM_16;
                break;
-       case eDVBFrontendParametersTerrestrial::Modulation::QAM64:
+       case eDVBFrontendParametersTerrestrial::Modulation_QAM64:
                parm_u_ofdm_constellation = QAM_64;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::Modulation::Auto:
+       case eDVBFrontendParametersTerrestrial::Modulation_Auto:
                parm_u_ofdm_constellation = QAM_AUTO;
                break;
        }
        switch (feparm.transmission_mode)
        {
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k:
+       case eDVBFrontendParametersTerrestrial::TransmissionMode_2k:
                parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_2K;
                break;
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TM8k:
+       case eDVBFrontendParametersTerrestrial::TransmissionMode_8k:
                parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_8K;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto:
+       case eDVBFrontendParametersTerrestrial::TransmissionMode_Auto:
                parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_AUTO;
                break;
        }
        switch (feparm.guard_interval)
        {
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_32:
+               case eDVBFrontendParametersTerrestrial::GuardInterval_1_32:
                        parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_32;
                        break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_16:
+               case eDVBFrontendParametersTerrestrial::GuardInterval_1_16:
                        parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_16;
                        break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_8:
+               case eDVBFrontendParametersTerrestrial::GuardInterval_1_8:
                        parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_8;
                        break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_4:
+               case eDVBFrontendParametersTerrestrial::GuardInterval_1_4:
                        parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_4;
                        break;
                default:
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto:
+               case eDVBFrontendParametersTerrestrial::GuardInterval_Auto:
                        parm_u_ofdm_guard_interval = GUARD_INTERVAL_AUTO;
                        break;
        }
        switch (feparm.hierarchy)
        {
-               case eDVBFrontendParametersTerrestrial::Hierarchy::HNone:
+               case eDVBFrontendParametersTerrestrial::Hierarchy_None:
                        parm_u_ofdm_hierarchy_information = HIERARCHY_NONE;
                        break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H1:
+               case eDVBFrontendParametersTerrestrial::Hierarchy_1:
                        parm_u_ofdm_hierarchy_information = HIERARCHY_1;
                        break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H2:
+               case eDVBFrontendParametersTerrestrial::Hierarchy_2:
                        parm_u_ofdm_hierarchy_information = HIERARCHY_2;
                        break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H4:
+               case eDVBFrontendParametersTerrestrial::Hierarchy_4:
                        parm_u_ofdm_hierarchy_information = HIERARCHY_4;
                        break;
                default:
-               case eDVBFrontendParametersTerrestrial::Hierarchy::HAuto:
+               case eDVBFrontendParametersTerrestrial::Hierarchy_Auto:
                        parm_u_ofdm_hierarchy_information = HIERARCHY_AUTO;
                        break;
        }
        switch (feparm.inversion)
        {
-       case eDVBFrontendParametersTerrestrial::Inversion::On:
+       case eDVBFrontendParametersTerrestrial::Inversion_On:
                parm_inversion = INVERSION_ON;
                break;
-       case eDVBFrontendParametersTerrestrial::Inversion::Off:
+       case eDVBFrontendParametersTerrestrial::Inversion_Off:
                parm_inversion = INVERSION_OFF;
                break;
        default:
-       case eDVBFrontendParametersTerrestrial::Inversion::Unknown:
+       case eDVBFrontendParametersTerrestrial::Inversion_Unknown:
                parm_inversion = INVERSION_AUTO;
                break;
        }
@@ -2463,10 +2378,10 @@ int eDVBFrontend::isCompatibleWith(ePtr<iDVBFrontendParameters> &feparm)
                eDVBFrontendParametersSatellite sat_parm;
                int ret = feparm->getDVBS(sat_parm);
                ASSERT(!ret);
-               if (sat_parm.system == eDVBFrontendParametersSatellite::System::DVB_S2 && !m_can_handle_dvbs2)
+               if (sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S2 && !m_can_handle_dvbs2)
                        return 0;
                ret = m_sec->canTune(sat_parm, this, 1 << m_slotid);
-               if (ret > 1 && sat_parm.system == eDVBFrontendParametersSatellite::System::DVB_S && m_can_handle_dvbs2)
+               if (ret > 1 && sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S && m_can_handle_dvbs2)
                        ret -= 1;
                return ret;
        }
@@ -2505,3 +2420,42 @@ arg_error:
                "eDVBFrontend::setSlotInfo must get a tuple with first param slotid, second param slot description and third param enabled boolean");
        return false;
 }
+
+RESULT eDVBFrontend::turnOffSatCR(int satcr)
+{
+       eSecCommandList sec_sequence;
+       // check if voltage is disabled
+       eSecCommand::pair compare;
+       compare.steps = +9;     //nothing to do
+       compare.voltage = iDVBFrontend::voltageOff;
+       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50 ) );
+
+       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );
+
+       eDVBDiseqcCommand diseqc;
+       memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
+       diseqc.len = 5;
+       diseqc.data[0] = 0xE0;
+       diseqc.data[1] = 0x10;
+       diseqc.data[2] = 0x5A;
+       diseqc.data[3] = satcr << 5;
+       diseqc.data[4] = 0x00;
+
+       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50+20+14*diseqc.len) );
+       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+       setSecSequence(sec_sequence);
+       return 0;
+}
+
+RESULT eDVBFrontend::ScanSatCR()
+{
+       setFrontend();
+       usleep(20000);
+       setTone(iDVBFrontend::toneOff);
+       return 0;
+}
index 06ed12cc26718375f5405fc39ef86c5369cfe890..8133488641d57e96a97e5153aa907227a2764b2c 100644 (file)
@@ -20,22 +20,22 @@ public:
        {
        }
 
-       RESULT getSystem(int &type) const;
-       RESULT getDVBS(eDVBFrontendParametersSatellite &) const;
-       RESULT getDVBC(eDVBFrontendParametersCable &) const;
-       RESULT getDVBT(eDVBFrontendParametersTerrestrial &) const;
+       SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const;
+       SWIG_VOID(RESULT) getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const;
+       SWIG_VOID(RESULT) getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const;
+       SWIG_VOID(RESULT) getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const;
 
        RESULT setDVBS(const eDVBFrontendParametersSatellite &p, bool no_rotor_command_on_tune=false);
        RESULT setDVBC(const eDVBFrontendParametersCable &p);
        RESULT setDVBT(const eDVBFrontendParametersTerrestrial &p);
-
+       SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_NAMED_OUTPUT(flags)) const { flags = m_flags; return 0; }
+       RESULT setFlags(unsigned int flags) { m_flags = flags; return 0; }
+#ifndef SWIG
        RESULT calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const;
 
        RESULT getHash(unsigned long &) const;
        RESULT calcLockTimeout(unsigned int &) const;
-
-       RESULT getFlags(unsigned int &flags) const { flags = m_flags; return 0; }
-       RESULT setFlags(unsigned int flags) { m_flags = flags; return 0; }
+#endif
 };
 
 #ifndef SWIG
@@ -63,6 +63,7 @@ public:
                FREQ_OFFSET,          // current frequency offset
                CUR_VOLTAGE,          // current voltage
                CUR_TONE,             // current continuous tone
+               SATCR,                // current SatCR
                NUM_DATA_ENTRIES
        };
        Signal1<void,iDVBFrontend*> m_stateChanged;
@@ -142,6 +143,9 @@ public:
        int closeFrontend(bool force=false);
        const char *getDescription() const { return m_description; }
        bool is_simulate() const { return m_simulate; }
+
+       RESULT turnOffSatCR(int satcr);
+       RESULT ScanSatCR();
 };
 
 #endif // SWIG
index c963a251ea4cf74ddbc79d73d313463ce5e89fd6..b537963f3309595bde9c0dc2362534c4b4b33fb7 100644 (file)
@@ -12,43 +12,35 @@ struct eDVBFrontendParametersSatellite
 #ifndef SWIG
        void set(const SatelliteDeliverySystemDescriptor  &);
 #endif
-       struct Polarisation {
-               enum {
-                       Horizontal, Vertical, CircularLeft, CircularRight
-               };
+       enum {
+               Polarisation_Horizontal, Polarisation_Vertical, Polarisation_CircularLeft, Polarisation_CircularRight
        };
-       struct Inversion {
-               enum {
-                       Off, On, Unknown
-               };
+
+       enum {
+               Inversion_Off, Inversion_On, Inversion_Unknown
        };
-       struct FEC {
-               enum {
-                       fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, f3_5, f4_5, f9_10, fNone=15
-               };
+
+       enum {
+               FEC_Auto, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10, FEC_None=15
        };
-       struct System {
-               enum {
-                       DVB_S, DVB_S2
-               };
+
+       enum {
+               System_DVB_S, System_DVB_S2
        };
-       struct Modulation {
-               enum {
-                       Auto, QPSK, M8PSK, QAM_16
-               };
+
+       enum {
+               Modulation_Auto, Modulation_QPSK, Modulation_8PSK, Modulation_QAM16
        };
+
        // dvb-s2
-       struct RollOff {
-               enum {
-                       alpha_0_35, alpha_0_25, alpha_0_20
-               };
+       enum {
+               RollOff_alpha_0_35, RollOff_alpha_0_25, RollOff_alpha_0_20
        };
-       // only 8psk
-       struct Pilot {  
-               enum {
-                       Off, On, Unknown
-               };
+
+       enum {
+               Pilot_Off, Pilot_On, Pilot_Unknown
        };
+
        bool no_rotor_command_on_tune;
        unsigned int frequency, symbol_rate;
        int polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot;
@@ -60,21 +52,18 @@ struct eDVBFrontendParametersCable
 #ifndef SWIG
        void set(const CableDeliverySystemDescriptor  &);
 #endif
-       struct Inversion {
-               enum {
-                       Off, On, Unknown
-               };
+       enum {
+               Inversion_Off, Inversion_On, Inversion_Unknown
        };
-       struct FEC {
-               enum {
-                       fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, fNone=15
-               };
+
+       enum {
+               FEC_Auto, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_None=15
        };
-       struct Modulation {
-               enum {
-                       Auto, QAM16, QAM32, QAM64, QAM128, QAM256
-               };
+
+       enum {
+               Modulation_Auto, Modulation_QAM16, Modulation_QAM32, Modulation_QAM64, Modulation_QAM128, Modulation_QAM256
        };
+
        unsigned int frequency, symbol_rate;
        int modulation, inversion, fec_inner;
 };
@@ -85,42 +74,34 @@ struct eDVBFrontendParametersTerrestrial
 #ifndef SWIG
        void set(const TerrestrialDeliverySystemDescriptor  &);
 #endif
-       struct Bandwidth {
-               enum {
-                       Bw8MHz, Bw7MHz, Bw6MHz, /*Bw5MHz,*/ BwAuto
-               }; // Bw5Mhz nyi (compatibilty with enigma1)
-       };
-       struct FEC {
-               enum {
-                       f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
-               };
-       };
-       struct TransmissionMode {
-               enum {
-                       TM2k, TM8k, /*TM4k,*/ TMAuto
-               }; // TM4k nyi (compatibility with enigma1)
+       enum {
+               Bandwidth_8MHz, Bandwidth_7MHz, Bandwidth_6MHz, /*Bandwidth_5MHz,*/ Bandwidth_Auto
+       }; // Bw5Mhz nyi (compatibilty with enigma1)
+
+       enum {
+               FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_Auto
        };
-       struct GuardInterval {
-               enum {
-                       GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto
-               };
+
+       enum {
+               TransmissionMode_2k, TransmissionMode_8k, /*TransmissionMode_4k,*/ TransmissionMode_Auto
+       }; // TM4k nyi (compatibility with enigma1)
+
+       enum {
+               GuardInterval_1_32, GuardInterval_1_16, GuardInterval_1_8, GuardInterval_1_4, GuardInterval_Auto
        };
-       struct Hierarchy {
-               enum {
-                       HNone, H1, H2, H4, HAuto
-               };
+
+       enum {
+               Hierarchy_None, Hierarchy_1, Hierarchy_2, Hierarchy_4, Hierarchy_Auto
        };
-       struct Modulation {
-               enum {
-                       QPSK, QAM16, QAM64, Auto
-               };
+
+       enum {
+               Modulation_QPSK, Modulation_QAM16, Modulation_QAM64, Modulation_Auto
        };
-       struct Inversion
-       {
-               enum {
-                       Off, On, Unknown
-               };
+
+       enum {
+               Inversion_Off, Inversion_On, Inversion_Unknown
        };
+
        unsigned int frequency;
        int bandwidth;
        int code_rate_HP, code_rate_LP;
index 2b7508820e61998b9d1b29913b151dcfaa486847..9432afb6002491c328d6b63016d8c297c575356b 100644 (file)
@@ -38,6 +38,8 @@ public:
        virtual RESULT setBoundary(off_t max) = 0;
        
        virtual RESULT stop() = 0;
+
+       virtual RESULT getCurrentPCR(pts_t &pcr) = 0;
        
        enum {
                eventWriteError,
index bd1c7035af0d3a7eeec9ffc6dcfaa14e3411dbbf..cfa98ecf1d960aea4a84d2b117a20c3acae71d19 100644 (file)
@@ -404,15 +404,16 @@ class iDVBFrontendParameters: public iObject
 #endif
 public:
        enum { flagOnlyFree = 1 };
-       virtual RESULT getSystem(int &SWIG_OUTPUT) const = 0;
-       virtual RESULT getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const = 0;
-       virtual RESULT getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const = 0;
-       virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const = 0;
-       
-       virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const = 0;
-       virtual RESULT getHash(unsigned long &SWIG_OUTPUT) const = 0;
-       virtual RESULT calcLockTimeout(unsigned int &) const = 0;
-       virtual RESULT getFlags(unsigned int &) const = 0;
+       virtual SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const = 0;
+       virtual SWIG_VOID(RESULT) getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const = 0;
+       virtual SWIG_VOID(RESULT) getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const = 0;
+       virtual SWIG_VOID(RESULT) getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const = 0;
+       virtual SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_OUTPUT) const = 0;
+#ifndef SWIG
+       virtual SWIG_VOID(RESULT) calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const = 0;
+       virtual SWIG_VOID(RESULT) getHash(unsigned long &) const = 0;
+       virtual SWIG_VOID(RESULT) calcLockTimeout(unsigned int &) const = 0;
+#endif
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iDVBFrontendParameters>, iDVBFrontendParametersPtr);
 
@@ -504,6 +505,7 @@ class iDVBChannel: public iObject
 public:
                /* direct frontend access for raw channels and/or status inquiries. */
        virtual SWIG_VOID(RESULT) getFrontend(ePtr<iDVBFrontend> &SWIG_OUTPUT)=0;
+       virtual RESULT requestTsidOnid(SWIG_PYOBJECT(ePyObject) callback) { return -1; }
 #ifndef SWIG
        enum
        {
@@ -701,6 +703,12 @@ public:
        };
 
        virtual RESULT connectVideoEvent(const Slot1<void, struct videoEvent> &event, ePtr<eConnection> &connection) = 0;
+
+       virtual int getVideoWidth() = 0;
+       virtual int getVideoHeight() = 0;
+       virtual int getVideoProgressive() = 0;
+       virtual int getVideoFrameRate() = 0;
+       virtual int getVideoAspect() = 0;
 };
 
 #endif //SWIG
index 3e3f9a79143df6cde1b7b50f6e8af02168f35fcd..175c7cdb055af9a97289cdf71049d56550db6add 100644 (file)
@@ -6,6 +6,8 @@ eDVBMetaParser::eDVBMetaParser()
 {
        m_time_create = 0;
        m_data_ok = 0;
+       m_length = 0;
+       m_filesize = 0;
 }
 
 int eDVBMetaParser::parseFile(const std::string &basename)
@@ -59,6 +61,12 @@ int eDVBMetaParser::parseMeta(const std::string &tsname)
                case 4:
                        m_tags = line;
                        break;
+               case 5:
+                       m_length = atoi(line);  //movielength in pts
+                       break;
+               case 6:
+                       m_filesize = atoll(line);
+                       break;
                default:
                        break;
                }
@@ -105,17 +113,19 @@ int eDVBMetaParser::parseRecordings(const std::string &filename)
                        ref = eServiceReferenceDVB(line + 10);
                if (!strncmp(line, "#DESCRIPTION: ", 14))
                        description = line + 14;
-
-               if ((line[0] == '/') && (ref.path == filename))
+               if ((line[0] == '/') && (ref.path.substr(ref.path.find_last_of('/')) == filename.substr(filename.find_last_of('/'))))
                {
 //                     eDebug("hit! ref %s descr %s", m_ref.toString().c_str(), m_name.c_str());
                        m_ref = ref;
                        m_name = description;
                        m_description = "";
                        m_time_create = 0;
-                       
+                       m_length = 0;
+                       m_filesize = 0;
+                                               
                        m_data_ok = 1;
                        fclose(f);
+                       updateMeta(filename.c_str());
                        return 0;
                }
        }
@@ -125,14 +135,17 @@ int eDVBMetaParser::parseRecordings(const std::string &filename)
 
 int eDVBMetaParser::updateMeta(const std::string &tsname)
 {
-       if (!m_data_ok) 
+       /* write meta file only if we have valid data. Note that we might convert recordings.epl data to .meta, which is fine. */
+       if (!m_data_ok)
                return -1;
        std::string filename = tsname + ".meta";
+       eServiceReference ref = m_ref;
+       ref.path = "";
 
        FILE *f = fopen(filename.c_str(), "w");
        if (!f)
                return -ENOENT;
-       fprintf(f, "%s\n%s\n%s\n%d\n%s\n", m_ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str());
+       fprintf(f, "%s\n%s\n%s\n%d\n%s\n%d\n%lld\n", ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str(), m_length, m_filesize );
        fclose(f);
        return 0;
 }
index 01fabde892701abd5282009bdb79494e1191d8b6..2ca94d6d97ebb1c3827d157fad336ecc4fd7b6bd 100644 (file)
@@ -18,7 +18,8 @@ public:
        
        eServiceReferenceDVB m_ref;
        std::string m_name, m_description;
-       int m_time_create;
+       int m_time_create, m_length;
+       long long m_filesize;
        
        std::string m_tags;
 };
index 842d6979a3e1c227af1bdd316379e5de8011cc2e..279ec74f723eb5e1092f32b79ea833d6cebb669d 100644 (file)
@@ -16,6 +16,7 @@
 #include <dvbsi++/stream_identifier_descriptor.h>
 #include <dvbsi++/subtitling_descriptor.h>
 #include <dvbsi++/teletext_descriptor.h>
+#include <dvbsi++/video_stream_descriptor.h>
 
 eDVBServicePMTHandler::eDVBServicePMTHandler()
        :m_ca_servicePtr(0), m_dvb_scan(0), m_decode_demux_num(0xFF)
@@ -50,10 +51,13 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel)
                {
                        eDebug("ok ... now we start!!");
 
-                       if (m_pmt_pid == -1)
-                               m_PAT.begin(eApp, eDVBPATSpec(), m_demux);
-                       else
-                               m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get()), m_demux);
+                       if (!m_service || m_service->usePMT())
+                       {
+                               if (m_pmt_pid == -1)
+                                       m_PAT.begin(eApp, eDVBPATSpec(), m_demux);
+                               else
+                                       m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get()), m_demux);
+                       }
 
                        if ( m_service && !m_service->cacheEmpty() )
                                serviceEvent(eventNewProgramInfo);
@@ -214,25 +218,49 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                        audioStream audio;
                                        audio.component_tag=video.component_tag=-1;
                                        video.type = videoStream::vtMPEG2;
+                                       audio.type = audioStream::atMPEG;
 
                                        switch ((*es)->getType())
                                        {
                                        case 0x1b: // AVC Video Stream (MPEG4 H264)
                                                video.type = videoStream::vtMPEG4_H264;
+                                               isvideo = 1;
+                                               //break; fall through !!!
+                                       case 0x10: // MPEG 4 Part 2
+                                               if (!isvideo)
+                                               {
+                                                       video.type = videoStream::vtMPEG4_Part2;
+                                                       isvideo = 1;
+                                               }
+                                               //break; fall through !!!
                                        case 0x01: // MPEG 1 video
+                                               if (!isvideo)
+                                                       video.type = videoStream::vtMPEG1;
+                                               //break; fall through !!!
                                        case 0x02: // MPEG 2 video
                                                isvideo = 1;
                                                //break; fall through !!!
                                        case 0x03: // MPEG 1 audio
                                        case 0x04: // MPEG 2 audio:
                                                if (!isvideo)
+                                                       isaudio = 1;
+                                               //break; fall through !!!
+                                       case 0x0f: // MPEG 2 AAC
+                                               if (!isvideo && !isaudio)
                                                {
                                                        isaudio = 1;
-                                                       audio.type = audioStream::atMPEG;
+                                                       audio.type = audioStream::atAAC;
                                                }
                                                //break; fall through !!!
+                                       case 0x11: // MPEG 4 AAC
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atAACHE;
+                                               }
                                        case 0x06: // PES Private
                                        case 0x81: // user private
+                                       case 0xEA: // TS_PSI_ST_SMPTE_VC1
                                                for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
                                                                desc != (*es)->getDescriptors()->end(); ++desc)
                                                {
@@ -243,6 +271,17 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                   check descriptors to get the exakt type. */
                                                                switch (tag)
                                                                {
+                                                               case AUDIO_STREAM_DESCRIPTOR:
+                                                                       isaudio = 1;
+                                                                       break;
+                                                               case VIDEO_STREAM_DESCRIPTOR:
+                                                               {
+                                                                       isvideo = 1;
+                                                                       VideoStreamDescriptor *d = (VideoStreamDescriptor*)(*desc);
+                                                                       if (d->getMpeg1OnlyFlag())
+                                                                               video.type = videoStream::vtMPEG1;
+                                                                       break;
+                                                               }
                                                                case SUBTITLING_DESCRIPTOR:
                                                                {
                                                                        SubtitlingDescriptor *d = (SubtitlingDescriptor*)(*desc);
@@ -301,9 +340,14 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                        isaudio = 1;
                                                                        audio.type = audioStream::atDTS;
                                                                        break;
+                                                               case 0x2B: // TS_PSI_DT_MPEG2_AAC
+                                                                       isaudio = 1;
+                                                                       audio.type = audioStream::atAAC; // MPEG2-AAC
+                                                                       break;
+                                                               case 0x1C: // TS_PSI_DT_MPEG4_Audio
                                                                case AAC_DESCRIPTOR:
                                                                        isaudio = 1;
-                                                                       audio.type = audioStream::atAAC;
+                                                                       audio.type = audioStream::atAACHE; // MPEG4-AAC
                                                                        break;
                                                                case AC3_DESCRIPTOR:
                                                                        isaudio = 1;
@@ -312,7 +356,7 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                case REGISTRATION_DESCRIPTOR: /* some services don't have a separate AC3 descriptor */
                                                                {
                                                                                /* libdvbsi++ doesn't yet support this descriptor type, so work around. */
-                                                                       if ((*desc)->getLength() != 4)
+                                                                       if ((*desc)->getLength() < 4)
                                                                                break;
                                                                        unsigned char descr[6];
                                                                        (*desc)->writeToBuffer(descr);
@@ -323,11 +367,29 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                                isaudio = 1;
                                                                                audio.type = audioStream::atAC3;
                                                                                break;
+                                                                       case 0x56432d31:
+                                                                               if (descr[6] == 0x01) // subdescriptor tag
+                                                                               {
+                                                                                       if (descr[7] >= 0x90) // profile_level
+                                                                                               video.type = videoStream::vtVC1; // advanced profile
+                                                                                       else
+                                                                                               video.type = videoStream::vtVC1_SM; // simple main
+                                                                                       isvideo = 1;
+                                                                               }
+                                                                               break;
                                                                        default:
                                                                                break;
                                                                        }
                                                                        break;
                                                                }
+                                                               case 0x28: // TS_PSI_DT_AVC
+                                                                       isvideo = 1;
+                                                                       video.type = videoStream::vtMPEG4_H264;
+                                                                       break;
+                                                               case 0x1B: // TS_PSI_DT_MPEG4_Video
+                                                                       isvideo = 1;
+                                                                       video.type = videoStream::vtMPEG4_Part2;
+                                                                       break;
                                                                default:
                                                                        break;
                                                                }
@@ -1143,8 +1205,8 @@ void eDVBCAService::sendCAPMT()
 static PyObject *createTuple(int pid, const char *type)
 {
        PyObject *r = PyTuple_New(2);
-       PyTuple_SetItem(r, 0, PyInt_FromLong(pid));
-       PyTuple_SetItem(r, 1, PyString_FromString(type));
+       PyTuple_SET_ITEM(r, 0, PyInt_FromLong(pid));
+       PyTuple_SET_ITEM(r, 1, PyString_FromString(type));
        return r;
 }
 
@@ -1154,17 +1216,18 @@ static inline void PyList_AppendSteal(PyObject *list, PyObject *item)
        Py_DECREF(item);
 }
 
+extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp
+
 PyObject *eDVBServicePMTHandler::program::createPythonObject()
 {
-       PyObject *r = PyDict_New();
+       ePyObject r = PyDict_New();
+       ePyObject l = PyList_New(0);
 
-       PyObject *l = PyList_New(0);
-       
        PyList_AppendSteal(l, createTuple(0, "pat"));
 
        if (pmtPid != -1)
                PyList_AppendSteal(l, createTuple(pmtPid, "pmt"));
-       
+
        for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
                        i(videoStreams.begin()); 
                        i != videoStreams.end(); ++i)
@@ -1184,7 +1247,8 @@ PyObject *eDVBServicePMTHandler::program::createPythonObject()
 
        if (textPid != -1)
                PyList_AppendSteal(l, createTuple(textPid, "text"));
-               
-       PyDict_SetItemString(r, "pids", l);
+
+       PutToDict(r, "pids", l);
+
        return r;
 }
index ff0ef046090e115ebec629af3bfbc97d50dff7b8..3e22174b9d777e7ecfa4ed569f06d626ea8a04f7 100644 (file)
@@ -135,14 +135,14 @@ public:
        {
                int pid;
                int component_tag;
-               enum { vtMPEG2, vtMPEG4_H264 };
+               enum { vtMPEG2, vtMPEG4_H264, vtMPEG1, vtMPEG4_Part2, vtVC1, vtVC1_SM };
                int type;
        };
        
        struct audioStream
        {
                int pid;
-               enum { atMPEG, atAC3, atDTS, atAAC };
+               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE };
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;
index c7a37460a44619de77dc4ad9633ef15c2d4e7d1b..71cbd602f06187bb7fced1640eb5f6c29ce8031a 100644 (file)
@@ -284,7 +284,7 @@ int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, in
        return 0;
 }
 
-eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0)
+eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0), m_last_pts_valid(0)
 {
 }
 
@@ -331,6 +331,9 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset)
                pts |= ((unsigned long long)(pkt[12]&0xFF)) << 7;
                pts |= ((unsigned long long)(pkt[13]&0xFE)) >> 1;
                ptsvalid = 1;
+               
+               m_last_pts = pts;
+               m_last_pts_valid = 1;
 
 #if 0          
                int sec = pts / 90000;
@@ -522,3 +525,15 @@ void eMPEGStreamParserTS::setPid(int _pid)
        m_pktptr = 0;
        m_pid = _pid;
 }
+
+int eMPEGStreamParserTS::getLastPTS(pts_t &last_pts)
+{
+       if (!m_last_pts_valid)
+       {
+               last_pts = 0;
+               return -1;
+       }
+       last_pts = m_last_pts;
+       return 0;
+}
+
index b2ddd23d56139a630021d76a44ef863a4fd1790a..20d334709f0f5ff8257ce0631f0b59d529069014 100644 (file)
@@ -55,6 +55,7 @@ public:
        eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo);
        void parseData(off_t offset, const void *data, unsigned int len);
        void setPid(int pid);
+       int getLastPTS(pts_t &last_pts);
 private:
        eMPEGStreamInformation &m_streaminfo;
        unsigned char m_pkt[188];
@@ -64,6 +65,8 @@ private:
        int m_pid;
        int m_need_next_packet;
        int m_skip;
+       int m_last_pts_valid;
+       pts_t m_last_pts;
 };
 
 #endif
index 71893f95ef1dc58fa5d65194fadc52397909a4a1..76c7101157a78cbaffef8f365d0a8c4f24d2c546 100644 (file)
@@ -40,6 +40,8 @@ int eDVBScan::isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTr
        case 0:
        case 0x1111:
                return 0;
+       case 0x13E:  // workaround for 11258H and 11470V on hotbird with same ONID/TSID (0x13E/0x578)
+               return orbital_position != 130 || tsid != 0x578;
        case 1:
                return orbital_position == 192;
        case 0x00B1:
index 2b7f717b0c3184ba5edf10eda7380bc38568d2e2..ac1a202811716ba3bd11865e74bb320fb20246e0 100644 (file)
@@ -37,81 +37,11 @@ void eDVBSatelliteEquipmentControl::setParam(int param, int value)
 }
 
 eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBRegisteredFrontend> &avail_frontends, eSmartPtrList<eDVBRegisteredFrontend> &avail_simulate_frontends)
-       :m_lnbidx(-1), m_curSat(m_lnbs[0].m_satellites.end()), m_avail_frontends(avail_frontends), m_avail_simulate_frontends(avail_simulate_frontends), m_rotorMoving(false)
+       :m_lnbidx((sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters))-1), m_curSat(m_lnbs[0].m_satellites.end()), m_avail_frontends(avail_frontends), m_avail_simulate_frontends(avail_simulate_frontends), m_rotorMoving(false)
 {
        if (!instance)
                instance = this;
-
        clear();
-
-// ASTRA
-       addLNB();
-       setLNBSlotMask(3);
-       setLNBLOFL(9750000);
-       setLNBThreshold(11700000);
-       setLNBLOFH(10607000);
-       setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0);
-       setToneburst(eDVBSatelliteDiseqcParameters::NO);
-       setRepeats(0);
-       setCommittedCommand(eDVBSatelliteDiseqcParameters::BB);
-       setCommandOrder(0); // committed, toneburst
-       setFastDiSEqC(true);
-       setSeqRepeat(false);
-       addSatellite(192);
-       setVoltageMode(eDVBSatelliteSwitchParameters::HV);
-       setToneMode(eDVBSatelliteSwitchParameters::HILO);
-
-// Hotbird
-       addLNB();
-       setLNBSlotMask(3);
-       setLNBLOFL(9750000);
-       setLNBThreshold(11700000);
-       setLNBLOFH(10600000);
-       setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0);
-       setToneburst(eDVBSatelliteDiseqcParameters::NO);
-       setRepeats(0);
-       setCommittedCommand(eDVBSatelliteDiseqcParameters::AB);
-       setCommandOrder(0); // committed, toneburst
-       setFastDiSEqC(true);
-       setSeqRepeat(false);
-       addSatellite(130);
-       setVoltageMode(eDVBSatelliteSwitchParameters::HV);
-       setToneMode(eDVBSatelliteSwitchParameters::HILO);
-
-// Rotor
-       addLNB();
-       setLNBSlotMask(3);
-       setLNBLOFL(9750000);
-       setLNBThreshold(11700000);
-       setLNBLOFH(10600000);
-       setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_2);
-       setToneburst(eDVBSatelliteDiseqcParameters::NO);
-       setRepeats(0);
-       setCommittedCommand(eDVBSatelliteDiseqcParameters::AA);
-       setCommandOrder(0); // committed, toneburst
-       setFastDiSEqC(true);
-       setSeqRepeat(false);
-       setLaDirection(eDVBSatelliteRotorParameters::NORTH);
-       setLoDirection(eDVBSatelliteRotorParameters::EAST);
-       setLatitude(51.017);
-       setLongitude(8.683);
-       setUseInputpower(true);
-       setInputpowerDelta(50);
-
-       addSatellite(235);
-       setVoltageMode(eDVBSatelliteSwitchParameters::HV);
-       setToneMode(eDVBSatelliteSwitchParameters::HILO);
-       setRotorPosNum(0);
-
-       addSatellite(284);
-       setVoltageMode(eDVBSatelliteSwitchParameters::HV);
-       setToneMode(eDVBSatelliteSwitchParameters::HILO);
-       setRotorPosNum(0);
-
-       addSatellite(420);
-       setVoltageMode(eDVBSatelliteSwitchParameters::HV);
-       setToneMode(eDVBSatelliteSwitchParameters::HILO);
-       setRotorPosNum(1); // stored pos 1
 }
 
 #define eSecDebugNoSimulate(x...) \
@@ -140,7 +70,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
        {
                bool rotor=false;
                eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx];
-               if ( lnb_param.slot_mask & slot_id ) // lnb for correct tuner?
+               if ( lnb_param.m_slot_mask & slot_id ) // lnb for correct tuner?
                {
                        int ret = 0;
                        eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters;
@@ -169,7 +99,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
 
                                if ( sat.frequency > lnb_param.m_lof_threshold )
                                        band |= 1;
-                               if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical))
+                               if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical))
                                        band |= 2;
 
                                if (di_param.m_diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
@@ -283,7 +213,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                                eSecDebugNoSimulate("ret5 %d", ret);
                                        }
 
-                               if (ret && rotor && curRotorPos != -1 && (direct_connected || satpos_depends_ptr == -1) )  // direct conntected or loopthrough!
+                               if (ret && rotor && curRotorPos != -1)
                                        ret -= abs(curRotorPos-sat.orbital_position);
 
                                eSecDebugNoSimulate("ret6 %d", ret);
@@ -297,6 +227,9 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                                ret=0;
                                }
 
+                               if (ret && lnb_param.m_prio != -1)
+                                       ret = lnb_param.m_prio;
+
                                eSecDebugNoSimulate("ret %d, score old %d", ret, score);
                                if (ret > score)
                                {
@@ -309,7 +242,12 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                }
        }
        if (score && satcount)
-               score -= (satcount-1);
+       {
+               if (score > (satcount-1))
+                       score -= (satcount-1);
+               else
+                       score = 1; // min score
+       }
        if (score && direct_connected)
                score += 5; // increase score for tuners with direct sat connection
        eSecDebugNoSimulate("final score %d", score);
@@ -367,10 +305,16 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        lnb_param.m_satellites.find(sat.orbital_position);
                if ( sit != lnb_param.m_satellites.end())
                {
+                       eSecCommandList sec_sequence;
+
+                       lnb_param.guard_offset = 0; //HACK
+
+                       frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
+                       
                        eDVBSatelliteSwitchParameters &sw_param = sit->second;
                        bool doSetFrontend = true;
                        bool doSetVoltageToneFrontend = true;
-                       bool sendDiSEqC = false;
+                       bool forceStaticMode = true;
                        bool forceChanged = false;
                        bool needDiSEqCReset = false;
                        long band=0,
@@ -388,6 +332,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        iDVBFrontend *sec_fe=&frontend;
                        eDVBRegisteredFrontend *linked_fe = 0;
                        eDVBSatelliteDiseqcParameters::t_diseqc_mode diseqc_mode = di_param.m_diseqc_mode;
+                       eDVBSatelliteSwitchParameters::t_voltage_mode voltage_mode = sw_param.m_voltage_mode;
+                       bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13;
+
+                       if (diseqc13V)
+                               voltage_mode = eDVBSatelliteSwitchParameters::HV;
 
                        frontend.getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satposDependPtr);
 
@@ -424,35 +373,54 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                        if ( sat.frequency > lnb_param.m_lof_threshold )
                                band |= 1;
+                       if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical))
+                               band |= 2;
 
-                       if (band&1)
-                               parm.FREQUENCY = sat.frequency - lnb_param.m_lof_hi;
-                       else
-                               parm.FREQUENCY = sat.frequency - lnb_param.m_lof_lo;
-
-                       parm.FREQUENCY = abs(parm.FREQUENCY);
-
-                       frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY);
+                       int lof = (band&1)?lnb_param.m_lof_hi:lnb_param.m_lof_lo;
 
-                       if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical))
-                               band |= 2;
+                       int local=0;
 
-                       if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_14V
-                               || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical
-                                       && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
-                               voltage = VOLTAGE(13);
-                       else if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_18V
-                               || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)
-                                       && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
-                               voltage = VOLTAGE(18);
-                       if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON)
-                               || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) )
-                               tone = iDVBFrontend::toneOn;
-                       else if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::OFF)
-                               || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && !(band&1) ) )
-                               tone = iDVBFrontend::toneOff;
 
-                       eSecCommandList sec_sequence;
+                       if(lnb_param.SatCR_idx == -1)
+                       {
+                       // calc Frequency
+                               local = abs(sat.frequency 
+                                       - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) ); //TODO für den Mist mal ein Macro schreiben
+                               parm.FREQUENCY = (local - (local % 125)) + ((local % 125)>62 ? 125 : 0);
+                               frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY);
+
+                               if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V
+                                       || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical
+                                               && voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
+                                       voltage = VOLTAGE(13);
+                               else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V
+                                       || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical)
+                                               && voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
+                                       voltage = VOLTAGE(18);
+                               if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON)
+                                       || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) )
+                                       tone = iDVBFrontend::toneOn;
+                               else if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::OFF)
+                                       || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && !(band&1) ) )
+                                       tone = iDVBFrontend::toneOff;
+                       }
+                       else
+                       {
+                               unsigned int tmp = abs(sat.frequency 
+                                               - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) )
+                                               + lnb_param.SatCRvco
+                                               - 1400000
+                                               + lnb_param.guard_offset;
+                               parm.FREQUENCY = (lnb_param.SatCRvco - (tmp % 4000))+((tmp%4000)>2000?4000:0)+lnb_param.guard_offset;
+                               lnb_param.UnicableTuningWord = (((tmp / 4000)+((tmp%4000)>2000?1:0)) 
+                                               | ((band & 1) ? 0x400 : 0)                      //HighLow
+                                               | ((band & 2) ? 0x800 : 0)                      //VertHor
+                                               | ((lnb_param.LNBNum & 1) ? 0 : 0x1000)                 //Umschaltung LNB1 LNB2
+                                               | (lnb_param.SatCR_idx << 13));         //Adresse des SatCR
+                                               eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
+                                               eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
+                               frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - ((lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 - lnb_param.SatCRvco + lof));
+                       }
 
                        if (diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
                        {
@@ -597,7 +565,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
 
-                                               if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
+                                               if (diseqc13V)
+                                                       vlt = iDVBFrontend::voltage13;
+                                               else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                                {
                                                        if (rotor_param.m_inputpower_parameters.m_use)
                                                                vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
@@ -723,14 +693,13 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        if (di_param.m_seq_repeat && seq_repeat == 0)
                                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BEFORE_SEQUENCE_REPEAT]) );
                                                }
-                                               sendDiSEqC = true;
                                        }
 
                                        eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd);
                                        if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                        {
                                                eSecCommand::pair compare;
-                                               if (!send_mask)
+                                               if (!send_mask && lnb_param.SatCR_idx == -1)
                                                {
                                                        compare.steps = +3;
                                                        compare.tone = iDVBFrontend::toneOff;
@@ -784,107 +753,113 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        diseqc.data[3] = RotorCmd;
                                                        diseqc.data[4] = 0x00;
                                                }
-
-                                               if ( rotor_param.m_inputpower_parameters.m_use )
-                                               { // use measure rotor input power to detect rotor state
-                                                       bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
-                                                       eSecCommand::rotor cmd;
-                                                       eSecCommand::pair compare;
-                                                       compare.voltage = VOLTAGE(18);
-                                                       compare.steps = +3;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-// measure idle power values
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
-                                                       compare.val = 1;
-                                                       compare.steps = -2;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
-                                                       compare.val = 0;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-////////////////////////////
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
-// rotor start loop
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                       cmd.direction=1;  // check for running rotor
-                                                       cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
-                                                       cmd.steps=+5;
-                                                       cmd.okcount=0;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
-////////////////////
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                       if (turn_fast)
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) );  // 2 minutes running timeout
-// rotor running loop
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                       cmd.direction=0;  // check for stopped rotor
-                                                       cmd.steps=+3;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
-/////////////////////
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
-                                               }
-                                               else
-                                               {  // use normal turning mode
-                                                       doSetVoltageToneFrontend=false;
-                                                       doSetFrontend=false;
-                                                       eSecCommand::rotor cmd;
-                                                       eSecCommand::pair compare;
-                                                       compare.voltage = VOLTAGE(13);
-                                                       compare.steps = +3;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
-
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-
-                                                       compare.voltage = voltage;
-                                                       compare.steps = +3;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
-
-                                                       compare.tone = tone;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
-
-                                                       cmd.direction=1;  // check for running rotor
-                                                       cmd.deltaA=0;
-                                                       cmd.steps=+3;
-                                                       cmd.okcount=0;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*4) );  // 2 minutes running timeout
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +3 ) ); 
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );
+                                               if(lnb_param.SatCR_idx == -1)
+                                               {
+                                                       if ( rotor_param.m_inputpower_parameters.m_use )
+                                                       { // use measure rotor input power to detect rotor state
+                                                               bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
+                                                               eSecCommand::rotor cmd;
+                                                               eSecCommand::pair compare;
+                                                               if (turn_fast)
+                                                                       compare.voltage = VOLTAGE(18);
+                                                               else
+                                                                       compare.voltage = VOLTAGE(13);
+                                                               compare.steps = +3;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+       // measure idle power values
+                                                               compare.steps = -2;
+                                                               if (turn_fast) {
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
+                                                                       compare.val = 1;
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                                               }
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
+                                                               compare.val = 0;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+       ////////////////////////////
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
+       // rotor start loop
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                                               cmd.direction=1;  // check for running rotor
+                                                               cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
+                                                               cmd.steps=+5;
+                                                               cmd.okcount=0;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
+       ////////////////////
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                                               if (turn_fast)
+                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) );  // 2 minutes running timeout
+       // rotor running loop
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                                               cmd.direction=0;  // check for stopped rotor
+                                                               cmd.steps=+3;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
+       /////////////////////
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                                       }
+                                                       else
+                                                       {  // use normal turning mode
+                                                               doSetVoltageToneFrontend=false;
+                                                               doSetFrontend=false;
+                                                               eSecCommand::rotor cmd;
+                                                               eSecCommand::pair compare;
+                                                               compare.voltage = VOLTAGE(13);
+                                                               compare.steps = +3;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
+       
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+       
+                                                               compare.voltage = voltage;
+                                                               compare.steps = +3;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
+       
+                                                               compare.tone = tone;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
+       
+                                                               cmd.direction=1;  // check for running rotor
+                                                               cmd.deltaA=0;
+                                                               cmd.steps=+3;
+                                                               cmd.okcount=0;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*4) );  // 2 minutes running timeout
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +3 ) ); 
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );
+                                                       }
                                                }
                                                sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd);
                                                sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position);
-                                               sendDiSEqC = true;
                                        }
                                }
                        }
@@ -894,14 +869,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                csw = band;
                        }
 
-//                     if (sendDiSEqC)
-                       sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) );
-
                        sec_fe->setData(eDVBFrontend::NEW_CSW, csw);
                        sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw);
                        sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param);
 
-                       if (doSetVoltageToneFrontend)
+                       if ((doSetVoltageToneFrontend) && (lnb_param.SatCR_idx == -1))
                        {
                                eSecCommand::pair compare;
                                compare.voltage = voltage;
@@ -917,16 +889,45 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                        sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
 
+                       if(lnb_param.SatCR_idx != -1)
+                       {
+                               // check if voltage is disabled
+                               eSecCommand::pair compare;
+                               compare.steps = +3;
+                               compare.voltage = iDVBFrontend::voltageOff;
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50 ) );
+
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
+       
+                               eDVBDiseqcCommand diseqc;
+                               memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
+                               diseqc.len = 5;
+                               diseqc.data[0] = 0xE0;
+                               diseqc.data[1] = 0x10;
+                               diseqc.data[2] = 0x5A;
+                               diseqc.data[3] = lnb_param.UnicableTuningWord >> 8;
+                               diseqc.data[4] = lnb_param.UnicableTuningWord;
+
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                       }
+
                        if (doSetFrontend)
                        {
                                sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
                        }
-
-//                     if (sendDiSEqC)
-                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
-                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
-
+                               
+                       if (forceStaticMode)
+                       {
+                               sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
+                       }
                        frontend.setSecSequence(sec_sequence);
 
                        return 0;
@@ -935,12 +936,12 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
        eDebugNoSimulate("found no useable satellite configuration for %s freq %d%s %s on orbital position (%d)",
                sat.system ? "DVB-S2" : "DVB-S",
                sat.frequency,
-               sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal ? "H" :
-                       eDVBFrontendParametersSatellite::Polarisation::Vertical ? "V" :
-                       eDVBFrontendParametersSatellite::Polarisation::CircularLeft ? "CL" : "CR",
-               sat.modulation == eDVBFrontendParametersSatellite::Modulation::Auto ? "AUTO" :
-                       eDVBFrontendParametersSatellite::Modulation::QPSK ? "QPSK" :
-                       eDVBFrontendParametersSatellite::Modulation::M8PSK ? "8PSK" : "QAM16",
+               sat.polarisation == eDVBFrontendParametersSatellite::Polarisation_Horizontal ? "H" :
+                       eDVBFrontendParametersSatellite::Polarisation_Vertical ? "V" :
+                       eDVBFrontendParametersSatellite::Polarisation_CircularLeft ? "CL" : "CR",
+               sat.modulation == eDVBFrontendParametersSatellite::Modulation_Auto ? "AUTO" :
+                       eDVBFrontendParametersSatellite::Modulation_QPSK ? "QPSK" :
+                       eDVBFrontendParametersSatellite::Modulation_8PSK ? "8PSK" : "QAM16",
                sat.orbital_position );
        return -1;
 }
@@ -951,7 +952,8 @@ RESULT eDVBSatelliteEquipmentControl::clear()
        for (int i=0; i <= m_lnbidx; ++i)
        {
                m_lnbs[i].m_satellites.clear();
-               m_lnbs[i].slot_mask = 0;
+               m_lnbs[i].m_slot_mask = 0;
+               m_lnbs[i].m_prio = -1; // auto
        }
        m_lnbidx=-1;
 
@@ -977,6 +979,7 @@ RESULT eDVBSatelliteEquipmentControl::clear()
                it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1);
                it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1);
                it->m_frontend->setData(eDVBFrontend::ROTOR_CMD, -1);
+               it->m_frontend->setData(eDVBFrontend::SATCR, -1);
        }
 
        for (eSmartPtrList<eDVBRegisteredFrontend>::iterator it(m_avail_simulate_frontends.begin()); it != m_avail_simulate_frontends.end(); ++it)
@@ -986,6 +989,7 @@ RESULT eDVBSatelliteEquipmentControl::clear()
                it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1);
                it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1);
                it->m_frontend->setData(eDVBFrontend::ROTOR_CMD, -1);
+               it->m_frontend->setData(eDVBFrontend::SATCR, -1);
        }
 
        return 0;
@@ -1009,7 +1013,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask)
 {
        eSecDebug("eDVBSatelliteEquipmentControl::setLNBSlotMask(%d)", slotmask);
        if ( currentLNBValid() )
-               m_lnbs[m_lnbidx].slot_mask = slotmask;
+               m_lnbs[m_lnbidx].m_slot_mask = slotmask;
        else
                return -ENOENT;
        return 0;
@@ -1055,6 +1059,28 @@ RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff)
        return 0;
 }
 
+RESULT eDVBSatelliteEquipmentControl::setLNBPrio(int prio)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBPrio(%d)", prio);
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].m_prio = prio;
+       else
+               return -ENOENT;
+       return 0;
+}
+
+RESULT eDVBSatelliteEquipmentControl::setLNBNum(int LNBNum)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBNum(%d)", LNBNum);
+       if(!((LNBNum >= 1) && (LNBNum <= MAX_LNBNUM)))
+               return -EPERM;
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].LNBNum = LNBNum;
+       else
+               return -ENOENT;
+       return 0;
+}
+
 /* DiSEqC Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode)
 {
@@ -1197,6 +1223,46 @@ RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta)
        return 0;
 }
 
+/* Unicable Specific Parameters */
+RESULT eDVBSatelliteEquipmentControl::setLNBSatCR(int SatCR_idx)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCR(%d)", SatCR_idx);
+       if(!((SatCR_idx >=-1) && (SatCR_idx < MAX_SATCR)))
+               return -EPERM;
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].SatCR_idx = SatCR_idx;
+       else
+               return -ENOENT;
+       return 0;
+}
+
+RESULT eDVBSatelliteEquipmentControl::setLNBSatCRvco(int SatCRvco)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCRvco(%d)", SatCRvco);
+       if(!((SatCRvco >= 950*1000) && (SatCRvco <= 2150*1000)))
+               return -EPERM;
+       if(!((m_lnbs[m_lnbidx].SatCR_idx >= 0) && (m_lnbs[m_lnbidx].SatCR_idx < MAX_SATCR)))
+               return -ENOENT;
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].SatCRvco = SatCRvco;
+       else
+               return -ENOENT;
+       return 0;
+}
+RESULT eDVBSatelliteEquipmentControl::getLNBSatCR()
+{
+       if ( currentLNBValid() )
+               return m_lnbs[m_lnbidx].SatCR_idx;
+       return -ENOENT;
+}
+
+RESULT eDVBSatelliteEquipmentControl::getLNBSatCRvco()
+{
+       if ( currentLNBValid() )
+               return m_lnbs[m_lnbidx].SatCRvco;
+       return -ENOENT;
+}
+
 /* Satellite Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position)
 {
index e68ed167dc1c9488a38e0548188af222b9824128..5bff6bf71111e65b0ad2285f328794664e50c41e 100644 (file)
@@ -170,7 +170,7 @@ class eDVBSatelliteSwitchParameters
 #endif
 public:
        enum t_22khz_signal {   HILO=0, ON=1, OFF=2     }; // 22 Khz
-       enum t_voltage_mode     {       HV=0, _14V=1, _18V=2, _0V=3 }; // 14/18 V
+       enum t_voltage_mode     {       HV=0, _14V=1, _18V=2, _0V=3, HV_13=4 }; // 14/18 V
 #ifndef SWIG
        t_voltage_mode m_voltage_mode;
        t_22khz_signal m_22khz_signal;
@@ -231,7 +231,7 @@ public:
 #ifndef SWIG
        t_12V_relais_state m_12V_relais_state;  // 12V relais output on/off
 
-       __u8 slot_mask; // useable by slot ( 1 | 2 | 4...)
+       int m_slot_mask; // useable by slot ( 1 | 2 | 4...)
 
        unsigned int m_lof_hi,  // for 2 band universal lnb 10600 Mhz (high band offset frequency)
                                m_lof_lo,       // for 2 band universal lnb  9750 Mhz (low band offset frequency)
@@ -242,7 +242,26 @@ public:
        std::map<int, eDVBSatelliteSwitchParameters> m_satellites;
        eDVBSatelliteDiseqcParameters m_diseqc_parameters;
        eDVBSatelliteRotorParameters m_rotor_parameters;
+
+       int m_prio; // to override automatic tuner management ... -1 is Auto
 #endif
+public:
+#define guard_offset_min -8000
+#define guard_offset_max 8000
+#define guard_offset_step 8000
+#define MAX_SATCR 8
+#define MAX_LNBNUM 32
+
+       int SatCR_idx;
+       unsigned int SatCRvco;
+       unsigned int UnicableTuningWord;
+       unsigned int UnicableConfigWord;
+       int old_frequency;
+       int old_polarisation;
+       int old_orbital_position;
+       int guard_offset_old;
+       int guard_offset;
+       int LNBNum;
 };
 
 class eDVBRegisteredFrontend;
@@ -304,6 +323,8 @@ public:
        RESULT setLNBLOFH(int lofh);
        RESULT setLNBThreshold(int threshold);
        RESULT setLNBIncreasedVoltage(bool onoff);
+       RESULT setLNBPrio(int prio);
+       RESULT setLNBNum(int LNBNum);
 /* DiSEqC Specific Parameters */
        RESULT setDiSEqCMode(int diseqcmode);
        RESULT setToneburst(int toneburst);
@@ -321,6 +342,12 @@ public:
        RESULT setUseInputpower(bool onoff);
        RESULT setInputpowerDelta(int delta);  // delta between running and stopped rotor
        RESULT setRotorTurningSpeed(int speed);  // set turning speed..
+/* Unicable Specific Parameters */
+       RESULT setLNBSatCR(int SatCR_idx);
+       RESULT setLNBSatCRvco(int SatCRvco);
+//     RESULT checkGuardOffset(const eDVBFrontendParametersSatellite &sat);
+       RESULT getLNBSatCR();
+       RESULT getLNBSatCRvco();
 /* Satellite Specific Parameters */
        RESULT addSatellite(int orbital_position);
        RESULT setVoltageMode(int mode);
index 844673ce0a85a3527f5ec2395a77849bb8fc4053..f9e8055f8c02cf7b42ca560449f5adb531fd1370 100644 (file)
@@ -75,7 +75,6 @@ Cexif::Cexif()
 
 Cexif::~Cexif()
 {
-       //ClearExif();
 }
 
 void Cexif::ClearExif()
@@ -89,7 +88,7 @@ void Cexif::ClearExif()
        }
 }
 
-bool Cexif::DecodeExif(const char *filename)
+bool Cexif::DecodeExif(const char *filename, int Thumb)
 {
        FILE * hFile = fopen(filename, "r");
        if(!hFile) return false;
@@ -98,6 +97,7 @@ bool Cexif::DecodeExif(const char *filename)
        m_exifinfo = new EXIFINFO;
        memset(m_exifinfo,0,sizeof(EXIFINFO));
        freeinfo = true;
+       m_exifinfo->Thumnailstate = Thumb;
 
        m_szLastError[0]='\0';
        ExifImageWidth = MotorolaOrder = SectionsRead=0;
@@ -555,12 +555,16 @@ bool Cexif::ProcessExifDir(unsigned char * DirStart, unsigned char * OffsetBase,
                ProcessExifDir(SubdirStart, OffsetBase, ExifLength, m_exifinfo, LastExifRefdP);
         }
 
-       if (ThumbnailSize && ThumbnailOffset)
+       if (ThumbnailSize && ThumbnailOffset && m_exifinfo->Thumnailstate)
        {
                if (ThumbnailSize + ThumbnailOffset <= ExifLength)
                {
-                       m_exifinfo->ThumbnailPointer = OffsetBase + ThumbnailOffset;
-                       m_exifinfo->ThumbnailSize = ThumbnailSize;
+                       if(FILE *tf = fopen(THUMBNAILTMPFILE, "w"))
+                       {
+                               fwrite( OffsetBase + ThumbnailOffset, ThumbnailSize, 1, tf);
+                               fclose(tf);
+                               m_exifinfo->Thumnailstate = 2;
+                       }
                }
        }
 
index cd321d7bc9015348239dce4f629055c1246aead7..bdd64b2a135dfe4c51371172ca996e1efa68cb4d 100644 (file)
@@ -8,7 +8,7 @@
 
 #define MAX_COMMENT 1000
 #define MAX_SECTIONS 20
-
+#define THUMBNAILTMPFILE "/tmp/.thumbcache"
 
 typedef struct tag_ExifInfo {
        char  Version        [5];
@@ -29,7 +29,7 @@ typedef struct tag_ExifInfo {
        float ExposureTime;
        float ExposureBias;
        float Distance;
-       float CCDWidth;                 //in milimeters
+       float CCDWidth;
        float FocalplaneXRes;
        float FocalplaneYRes;
        float FocalplaneUnits;
@@ -40,9 +40,10 @@ typedef struct tag_ExifInfo {
        int   ISOequivalent;
        int   Process;
        int   Orient;
-       unsigned char * ThumbnailPointer;
-       unsigned ThumbnailSize;
+       //unsigned char *ThumbnailPointer;
+       //unsigned ThumbnailSize;
        bool  IsExif;
+       int Thumnailstate;
 } EXIFINFO;
 
 static const int BytesPerFormat[] = {0,1,1,2,4,8,1,1,2,4,8,4,8};
@@ -59,7 +60,7 @@ public:
        char m_szLastError[256];
        Cexif();
        ~Cexif();
-       bool DecodeExif(const char *filename);
+       bool DecodeExif(const char *filename, int Thumb=0);
        void ClearExif();
 protected:
        bool process_EXIF(unsigned char * CharBuf, unsigned int length);
index 1f9bed489910acb16c6c4087d5f82446f06a5a25..c162f89d9c81370649355c6423e4ce8402f75535 100644 (file)
@@ -1,38 +1,38 @@
 #include <png.h>       // must be included before Python.h because of setjmp
-#include <lib/gdi/picload.h>
-#include "picexif.h"
-#include <lib/python/python.h>
-
 #include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
 
-#include <epng.h>      // savePNG need it
-
-#define JDCT_DEFAULT JDCT_IFAST
+#include <lib/gdi/picload.h>
+#include <lib/gdi/picexif.h>
 
 extern "C" {
 #include <jpeglib.h>
 #include <gif_lib.h>
-//#include "transupp.h"
 }
 
-unsigned char *pic_buffer=NULL;
+extern const uint32_t crc32_table[256];
+
+DEFINE_REF(ePicLoad);
+
+static std::string getSize(const char* file)
+{
+       struct stat64 s;
+       if (stat64(file, &s) < 0)
+               return "";
+       char tmp[20];
+       snprintf(tmp, 20, "%ld kB",(long)s.st_size / 1024);
+       return tmp;
+}
 
-static unsigned char *conv24to32(unsigned char * orgin, int size, int background = 0)
+static unsigned char *conv24to32(unsigned char *orgin, int size, unsigned char alpha = 0xFF)
 {
        int s, d;
        unsigned char *cr = new unsigned char[size * 4];
        if (cr == NULL)
        {
-               printf("[CONV32] Error: malloc\n");
+               eDebug("[Picload] Error malloc");
                return(orgin);
        }
 
-       unsigned char alpha = 0x00;
-       if(background)  alpha = 0xFF;
-
        for (s = 0, d = 0 ; s < (size * 3); s += 3, d += 4 )
        {
                cr[d] = orgin[s];
@@ -44,28 +44,27 @@ static unsigned char *conv24to32(unsigned char * orgin, int size, int background
        return(cr);
 }
 
-static unsigned char *simple_resize(unsigned char * orgin, int ox, int oy, int dx, int dy)
+static unsigned char *simple_resize(unsigned char *orgin, int ox, int oy, int dx, int dy)
 {
        unsigned char *cr, *p, *l;
        int i, j, k, ip;
-       cr = new unsigned char[dx * dy * 4]; 
+       cr = new unsigned char[dx * dy * 3];
        if (cr == NULL)
        {
-               printf("[RESIZE] Error: malloc\n");
+               eDebug("[Picload] Error malloc");
                return(orgin);
        }
        l = cr;
 
-       for (j = 0; j < dy; j++,l += dx * 4)
+       for (j = 0; j < dy; j++,l += dx * 3)
        {
-               p = orgin + (j * oy / dy * ox * 4);
-               for (i = 0, k = 0; i < dx; i++, k += 4)
+               p = orgin + (j * oy / dy * ox * 3);
+               for (i = 0, k = 0; i < dx; i++, k += 3)
                {
-                       ip = i * ox / dx * 4;
+                       ip = i * ox / dx * 3;
                        l[k] = p[ip];
                        l[k+1] = p[ip + 1];
                        l[k+2] = p[ip + 2];
-                       l[k+3] = p[ip + 3];
                }
        }
        delete [] orgin;
@@ -76,18 +75,18 @@ static unsigned char *color_resize(unsigned char * orgin, int ox, int oy, int dx
 {
        unsigned char *cr, *p, *q;
        int i, j, k, l, xa, xb, ya, yb;
-       int sq, r, g, b, a;
-       cr = new unsigned char[dx * dy * 4];
+       int sq, r, g, b;
+       cr = new unsigned char[dx * dy * 3];
        if (cr == NULL)
        {
-               printf("[RESIZE] Error: malloc\n");
+               eDebug("[Picload] Error malloc");
                return(orgin);
        }
        p = cr;
 
        for (j = 0; j < dy; j++)
        {
-               for (i = 0; i < dx; i++, p += 4)
+               for (i = 0; i < dx; i++, p += 3)
                {
                        xa = i * ox / dx;
                        ya = j * oy / dy;
@@ -97,269 +96,21 @@ static unsigned char *color_resize(unsigned char * orgin, int ox, int oy, int dx
                        yb = (j + 1) * oy / dy; 
                        if (yb >= oy)
                                yb = oy - 1;
-                       for (l = ya, r = 0, g = 0, b = 0, a = 0, sq = 0; l <= yb; l++)
+                       for (l = ya, r = 0, g = 0, b = 0, sq = 0; l <= yb; l++)
                        {
-                               q = orgin + ((l * ox + xa) * 4);
-                               for (k = xa; k <= xb; k++, q += 4, sq++)
+                               q = orgin + ((l * ox + xa) * 3);
+                               for (k = xa; k <= xb; k++, q += 3, sq++)
                                {
-                                       r += q[0]; g += q[1]; b += q[2]; a += q[3];
+                                       r += q[0]; g += q[1]; b += q[2];
                                }
                        }
-                       p[0] = r / sq; p[1] = g / sq; p[2] = b / sq; p[3] = a / sq;
+                       p[0] = r / sq; p[1] = g / sq; p[2] = b / sq;
                }
        }
        delete [] orgin;
        return(cr);
 }
 
-//-------------------------------------------------------------------
-
-struct r_jpeg_error_mgr
-{
-       struct jpeg_error_mgr pub;
-       jmp_buf envbuffer;
-};
-
-void jpeg_cb_error_exit(j_common_ptr cinfo)
-{
-       struct r_jpeg_error_mgr *mptr;
-       mptr = (struct r_jpeg_error_mgr *) cinfo->err;
-       (*cinfo->err->output_message) (cinfo);
-       longjmp(mptr->envbuffer, 1);
-}
-
-static int jpeg_save(unsigned char *image_buffer, const char * filename, int quality, int image_height, int image_width)
-{
-       struct jpeg_compress_struct cinfo;
-       struct jpeg_error_mgr jerr;
-       FILE * outfile;         /* target file */
-       JSAMPROW row_pointer[1];/* pointer to JSAMPLE row[s] */
-       int row_stride;         /* physical row width in image buffer */
-       cinfo.err = jpeg_std_error(&jerr);
-       jpeg_create_compress(&cinfo);
-       if ((outfile = fopen(filename, "wb")) == NULL) 
-       {
-               eDebug("[JPEG] can't open %s", filename);
-               return -1;
-       }
-       jpeg_stdio_dest(&cinfo, outfile);
-       cinfo.image_width = image_width;
-       cinfo.image_height = image_height;
-       cinfo.input_components = 3;
-       cinfo.in_color_space = JCS_RGB;
-       jpeg_set_defaults(&cinfo);
-       jpeg_set_quality(&cinfo, quality, TRUE );
-       jpeg_start_compress(&cinfo, TRUE);
-       row_stride = image_width * 3;
-       while (cinfo.next_scanline < cinfo.image_height) 
-       {
-               row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
-               (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
-       }
-       jpeg_finish_compress(&cinfo);
-       fclose(outfile);
-       jpeg_destroy_compress(&cinfo);
-       return 0;
-}
-
-/* Expanded data source object for memory buffer input */
-typedef struct
-{
-       struct jpeg_source_mgr pub;     /* public fields */
-       FILE *infile;                   /* source stream */
-       JOCTET *buffer;         /* start of buffer */
-       boolean start_of_file;  /* have we gotten any data yet? */
-} mem_source_mgr;
-
-typedef mem_source_mgr *mem_src_ptr;
-
-static void init_source (j_decompress_ptr cinfo)
-{
-       mem_src_ptr src = (mem_src_ptr) cinfo->src;
-       src->start_of_file = TRUE;
-}
-
-static boolean fill_input_buffer (j_decompress_ptr cinfo)
-{
-       /* no-op */ (void)cinfo;
-       return TRUE;
- }
-
-static void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
-       mem_src_ptr src = (mem_src_ptr) cinfo->src;
-       
-       if (num_bytes > 0)
-       {
-               src->pub.next_input_byte += (size_t) num_bytes;
-               src->pub.bytes_in_buffer -= (size_t) num_bytes;
-       }
-}
-
-static void term_source (j_decompress_ptr cinfo)
-{
-       /* no-op */ (void)cinfo;
-}
-
-static void jpeg_memory_src (j_decompress_ptr cinfo, unsigned char *inbfr, int len)
-{
-       mem_src_ptr src;
-       if (cinfo->src == NULL)
-       {
-               cinfo->src = (struct jpeg_source_mgr *)
-               (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, (size_t)sizeof(mem_source_mgr));
-               src = (mem_src_ptr) cinfo->src;
-               src->buffer = (JOCTET *) inbfr;
-       }
-       src = (mem_src_ptr) cinfo->src;
-       src->pub.init_source = init_source;
-       src->pub.fill_input_buffer = fill_input_buffer;
-       src->pub.skip_input_data = skip_input_data;
-       src->pub.resync_to_restart = jpeg_resync_to_restart;    /* use default method */
-       src->pub.term_source = term_source;
-       src->infile = 0L;
-       src->pub.bytes_in_buffer = len;                         /* sets to entire file len */
-       src->pub.next_input_byte = (JOCTET *)inbfr;             /* at start of buffer */
-}
-
-static int jpeg_load_thumb(const char *filename, int *x, int *y)
-{
-       struct jpeg_decompress_struct cinfo;
-       struct jpeg_decompress_struct *ciptr = &cinfo;
-       struct r_jpeg_error_mgr emgr;
-       FILE *fh;
-
-       if (!(fh = fopen(filename, "rb")))
-               return 0;
-
-       ciptr->err = jpeg_std_error(&emgr.pub);
-       emgr.pub.error_exit = jpeg_cb_error_exit;
-       if (setjmp(emgr.envbuffer) == 1)
-       {
-               jpeg_destroy_decompress(ciptr);
-               fclose(fh);
-               return 0;
-       }
-
-       jpeg_create_decompress(ciptr);
-       jpeg_stdio_src(ciptr, fh);
-
-       jpeg_save_markers (ciptr, JPEG_APP0 + 1, 0xffff);
-
-       jpeg_read_header(ciptr, TRUE);
-
-       struct jpeg_marker_struct *m = cinfo.marker_list;
-
-       unsigned char *thumb_buf = NULL;
-       size_t bufsize;
-       
-       if ( m )
-       {
-               unsigned char *p_data = m->data;
-               while ( p_data < m->data+m->data_length )
-               {
-                       if ( p_data[0] == 0xFF && p_data[1] == 0xD8 )
-                       {
-                               bufsize = (size_t) m->data_length - (size_t) (p_data-m->data);
-                               thumb_buf = new unsigned char[bufsize];
-                               bufsize = 0;
-                               do {
-                                       thumb_buf[bufsize++] = *p_data;
-                               } while ( !(*p_data++ == 0xFF && *p_data == 0xD9) && p_data < m->data+m->data_length );
-                               thumb_buf[bufsize++] = *p_data;
-                       }
-                       p_data++;
-               }
-       }
-
-       if ( thumb_buf != NULL )
-       {
-               jpeg_create_decompress(ciptr);
-               jpeg_memory_src(ciptr, thumb_buf, bufsize-2);
-               jpeg_read_header(ciptr, TRUE);
-       }
-       else
-               eDebug("no exif thumbnail found! loading actual image instead");
-
-       ciptr->out_color_space = JCS_RGB;
-       ciptr->scale_denom = 1;
-
-       jpeg_start_decompress(ciptr);
-       
-       *x=ciptr->output_width;
-       *y=ciptr->output_height;
-
-       if(ciptr->output_components == 3)
-       {
-               JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components);
-               pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components];
-               unsigned char *bp = pic_buffer;
-
-               while (ciptr->output_scanline < ciptr->output_height)
-               {
-                       jpeg_read_scanlines(ciptr, &lb, 1);
-                       memcpy(bp, lb, ciptr->output_width * ciptr->output_components);
-                       bp += ciptr->output_width * ciptr->output_components;
-               }
-       }
-       jpeg_finish_decompress(ciptr);
-       jpeg_destroy_decompress(ciptr);
-       fclose(fh);
-       return 1;
-}
-
-static int jpeg_load(const char *filename, int *x, int *y)
-{
-       struct jpeg_decompress_struct cinfo;
-       struct jpeg_decompress_struct *ciptr = &cinfo;
-       struct r_jpeg_error_mgr emgr;
-       FILE *fh;
-
-       if (!(fh = fopen(filename, "rb")))
-               return 0;
-
-       ciptr->err = jpeg_std_error(&emgr.pub);
-       emgr.pub.error_exit = jpeg_cb_error_exit;
-       if (setjmp(emgr.envbuffer) == 1)
-       {
-               jpeg_destroy_decompress(ciptr);
-               fclose(fh);
-               return 0;
-       }
-
-       jpeg_create_decompress(ciptr);
-       jpeg_stdio_src(ciptr, fh);
-       jpeg_read_header(ciptr, TRUE);
-       ciptr->out_color_space = JCS_RGB;
-       ciptr->scale_denom = 1;
-
-       jpeg_start_decompress(ciptr);
-       
-       *x=ciptr->output_width;
-       *y=ciptr->output_height;
-
-       if(ciptr->output_components == 3)
-       {
-               JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components);
-               pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components];
-               unsigned char *bp = pic_buffer;
-
-               while (ciptr->output_scanline < ciptr->output_height)
-               {
-                       jpeg_read_scanlines(ciptr, &lb, 1);
-                       memcpy(bp, lb, ciptr->output_width * ciptr->output_components);
-                       bp += ciptr->output_width * ciptr->output_components;
-               }
-       }
-       jpeg_finish_decompress(ciptr);
-       jpeg_destroy_decompress(ciptr);
-       fclose(fh);
-       return 1;
-}
-
 //---------------------------------------------------------------------------------------------
 
 #define BMP_TORASTER_OFFSET 10
@@ -389,26 +140,26 @@ static void fetch_pallete(int fd, struct color pallete[], int count)
        }
 }
 
-static int bmp_load(const char *filename,  int *x, int *y)
+static unsigned char *bmp_load(const char *file,  int *x, int *y)
 {
        unsigned char buff[4];
        struct color pallete[256];
 
-       int fd = open(filename, O_RDONLY);
-       if (fd == -1) return 0;
-       if (lseek(fd, BMP_SIZE_OFFSET, SEEK_SET) == -1) return 0;
+       int fd = open(file, O_RDONLY);
+       if (fd == -1) return NULL;
+       if (lseek(fd, BMP_SIZE_OFFSET, SEEK_SET) == -1) return NULL;
        read(fd, buff, 4);
        *x = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24);
        read(fd, buff, 4);
        *y = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24);
-       if (lseek(fd, BMP_TORASTER_OFFSET, SEEK_SET) == -1) return 0;
+       if (lseek(fd, BMP_TORASTER_OFFSET, SEEK_SET) == -1) return NULL;
        read(fd, buff, 4);
        int raster = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24);
-       if (lseek(fd, BMP_BPP_OFFSET, SEEK_SET) == -1) return 0;
+       if (lseek(fd, BMP_BPP_OFFSET, SEEK_SET) == -1) return NULL;
        read(fd, buff, 2);
        int bpp = buff[0] + (buff[1] << 8);
 
-       pic_buffer = new unsigned char[(*x) * (*y) * 3];
+       unsigned char *pic_buffer = new unsigned char[(*x) * (*y) * 3];
        unsigned char *wr_buffer = pic_buffer + (*x) * ((*y) - 1) * 3;
        
        switch (bpp)
@@ -420,7 +171,7 @@ static int bmp_load(const char *filename,  int *x, int *y)
                        lseek(fd, raster, SEEK_SET);
                        unsigned char * tbuffer = new unsigned char[*x / 2 + 1];
                        if (tbuffer == NULL)
-                               return 0;
+                               return NULL;
                        for (int i = 0; i < *y; i++) 
                        {
                                read(fd, tbuffer, (*x) / 2 + *x % 2);
@@ -456,7 +207,7 @@ static int bmp_load(const char *filename,  int *x, int *y)
                        lseek(fd, raster, SEEK_SET);
                        unsigned char * tbuffer = new unsigned char[*x];
                        if (tbuffer == NULL)
-                               return 0;
+                               return NULL;
                        for (int i = 0; i < *y; i++)
                        {
                                read(fd, tbuffer, *x);
@@ -492,45 +243,44 @@ static int bmp_load(const char *filename,  int *x, int *y)
                        break;
                }
                default:
-                       return 0;
+                       return NULL;
        }
 
        close(fd);
-       return 1;
+       return(pic_buffer);
 }
 
-//---------------------------------------------------------------------------------------------
-static int png_load(const char *filename,  int *x, int *y)
+//---------------------------------------------------------------------
+
+static unsigned char *png_load(const char *file, int *ox, int *oy)
 {
        static const png_color_16 my_background = {0, 0, 0, 0, 0};
 
-       png_structp png_ptr;
-       png_infop info_ptr;
        png_uint_32 width, height;
        unsigned int i;
        int bit_depth, color_type, interlace_type;
-       int number_passes, pass;
-       png_byte * fbptr;
-       FILE * fh;
+       png_byte *fbptr;
+       FILE *fh;
 
-       if (!(fh = fopen(filename, "rb"))) return 0;
+       if (!(fh = fopen(file, "rb")))
+               return NULL;
 
-       png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+       png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
        if (png_ptr == NULL)
-               return 0;
-       info_ptr = png_create_info_struct(png_ptr);
+               return NULL;
+       png_infop info_ptr = png_create_info_struct(png_ptr);
        if (info_ptr == NULL)
        {
                png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
-               fclose(fh); 
-               return 0;
+               fclose(fh);
+               return NULL;
        }
 
        if (setjmp(png_ptr->jmpbuf))
        {
                png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
-               fclose(fh); 
-               return 0;
+               fclose(fh);
+               return NULL;
        }
 
        png_init_io(png_ptr, fh);
@@ -545,41 +295,137 @@ static int png_load(const char *filename,  int *x, int *y)
        if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
                png_set_gray_to_rgb(png_ptr);
 
-       number_passes = png_set_interlace_handling(png_ptr);
+       int number_passes = png_set_interlace_handling(png_ptr);
        png_read_update_info(png_ptr, info_ptr);
 
-       int bpp =  png_get_rowbytes(png_ptr, info_ptr)/width;
-       if ((bpp !=4) && (bpp !=3))
-       {
-               eDebug("[PNG] Error processing");
-               return 0;
-       }
-
-       if (width * height > 1000000) // 1000x1000 or equiv.
+       if (width * 3 != png_get_rowbytes(png_ptr, info_ptr))
        {
-               eDebug("[png_load] image size is %d x %d, which is \"too large\".", (int)width, (int)height);
-               png_read_end(png_ptr, info_ptr);
+               eDebug("[Picload] Error processing");
                png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
                fclose(fh);
-               return 0;
+               return NULL;
        }
 
-       pic_buffer = new unsigned char[width * height * bpp];
-       *x=width;
-       *y=height;
+       unsigned char *pic_buffer = new unsigned char[height * width * 3];
+       *ox=width;
+       *oy=height;
 
-       for(pass = 0; pass < number_passes; pass++)
+       for(int pass = 0; pass < number_passes; pass++)
        {
                fbptr = (png_byte *)pic_buffer;
-               for (i = 0; i < height; i++, fbptr += width * bpp)
+               for (i = 0; i < height; i++, fbptr += width * 3)
                        png_read_row(png_ptr, fbptr, NULL);
        }
        png_read_end(png_ptr, info_ptr);
        png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
        fclose(fh);
-       if (bpp == 3)
-               pic_buffer = conv24to32(pic_buffer, width * height, 1);
-       return 1;
+       return(pic_buffer);
+}
+
+//-------------------------------------------------------------------
+
+struct r_jpeg_error_mgr
+{
+       struct jpeg_error_mgr pub;
+       jmp_buf envbuffer;
+};
+
+void jpeg_cb_error_exit(j_common_ptr cinfo)
+{
+       struct r_jpeg_error_mgr *mptr;
+       mptr = (struct r_jpeg_error_mgr *) cinfo->err;
+       (*cinfo->err->output_message) (cinfo);
+       longjmp(mptr->envbuffer, 1);
+}
+
+static unsigned char *jpeg_load(const char *file, int *ox, int *oy)
+{
+       struct jpeg_decompress_struct cinfo;
+       struct jpeg_decompress_struct *ciptr = &cinfo;
+       struct r_jpeg_error_mgr emgr;
+       FILE *fh;
+       unsigned char *pic_buffer=NULL;
+
+       if (!(fh = fopen(file, "rb")))
+               return NULL;
+
+       ciptr->err = jpeg_std_error(&emgr.pub);
+       emgr.pub.error_exit = jpeg_cb_error_exit;
+       if (setjmp(emgr.envbuffer) == 1)
+       {
+               jpeg_destroy_decompress(ciptr);
+               fclose(fh);
+               return NULL;
+       }
+
+       jpeg_create_decompress(ciptr);
+       jpeg_stdio_src(ciptr, fh);
+       jpeg_read_header(ciptr, TRUE);
+       ciptr->out_color_space = JCS_RGB;
+       ciptr->scale_denom = 1;
+
+       jpeg_start_decompress(ciptr);
+       
+       *ox=ciptr->output_width;
+       *oy=ciptr->output_height;
+
+       if(ciptr->output_components == 3)
+       {
+               JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components);
+               pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components];
+               unsigned char *bp = pic_buffer;
+
+               while (ciptr->output_scanline < ciptr->output_height)
+               {
+                       jpeg_read_scanlines(ciptr, &lb, 1);
+                       memcpy(bp, lb, ciptr->output_width * ciptr->output_components);
+                       bp += ciptr->output_width * ciptr->output_components;
+               }
+       }
+       jpeg_finish_decompress(ciptr);
+       jpeg_destroy_decompress(ciptr);
+       fclose(fh);
+       return(pic_buffer);
+}
+
+
+static int jpeg_save(const char * filename, int ox, int oy, unsigned char *pic_buffer)
+{
+       struct jpeg_compress_struct cinfo;
+       struct jpeg_error_mgr jerr;
+       FILE * outfile;         
+       JSAMPROW row_pointer[1];
+       int row_stride;         
+       cinfo.err = jpeg_std_error(&jerr);
+       jpeg_create_compress(&cinfo);
+       if ((outfile = fopen(filename, "wb")) == NULL) 
+       {
+               eDebug("[Picload] jpeg can't open %s", filename);
+               return 1;
+       }
+       eDebug("[Picload] save Thumbnail... %s",filename);
+
+       jpeg_stdio_dest(&cinfo, outfile);
+       cinfo.image_width = ox;
+       cinfo.image_height = oy;
+       cinfo.input_components = 3;
+       cinfo.in_color_space = JCS_RGB;
+       jpeg_set_defaults(&cinfo);
+       jpeg_set_quality(&cinfo, 70, TRUE );
+       jpeg_start_compress(&cinfo, TRUE);
+       row_stride = ox * 3;
+       while (cinfo.next_scanline < cinfo.image_height) 
+       {
+               row_pointer[0] = & pic_buffer[cinfo.next_scanline * row_stride];
+               (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
+       }
+       jpeg_finish_compress(&cinfo);
+       fclose(outfile);
+       jpeg_destroy_compress(&cinfo);
+       return 0;
 }
 
 //-------------------------------------------------------------------
@@ -597,8 +443,9 @@ inline void m_rend_gif_decodecolormap(unsigned char *cmb, unsigned char *rgbb, C
        }
 }
 
-static int gif_load(const char *filename, int *x, int *y)
+static unsigned char *gif_load(const char *file, int *ox, int *oy)
 {
+       unsigned char *pic_buffer = NULL;
        int px, py, i, j, ibxs;
        unsigned char *fbptr;
        unsigned char *lb=NULL;
@@ -610,9 +457,9 @@ static int gif_load(const char *filename, int *x, int *y)
        int cmaps;
        int extcode;
        
-       gft = DGifOpenFileName(filename);
+       gft = DGifOpenFileName(file);
        if (gft == NULL) 
-               return 0;
+               return NULL;
        do
        {
                if (DGifGetRecordType(gft, &rt) == GIF_ERROR)
@@ -622,8 +469,8 @@ static int gif_load(const char *filename, int *x, int *y)
                        case IMAGE_DESC_RECORD_TYPE:
                                if (DGifGetImageDesc(gft) == GIF_ERROR)
                                        goto ERROR_R;
-                               *x = px = gft->Image.Width;
-                               *y = py = gft->Image.Height;
+                               *ox = px = gft->Image.Width;
+                               *oy = py = gft->Image.Height;
                                pic_buffer = new unsigned char[px * py * 3];
                                lb = (unsigned char *)malloc(px * 3);
                                slb = (unsigned char *) malloc(px);
@@ -685,239 +532,531 @@ static int gif_load(const char *filename, int *x, int *y)
        while (rt != TERMINATE_RECORD_TYPE);
 
        DGifCloseFile(gft);
-       return 1;
+       return(pic_buffer);
 ERROR_R:
-       eDebug("[GIF] Error");
+       eDebug("[Picload] <Error gif>");
        if (lb)         free(lb);
        if (slb)        free(slb);
        DGifCloseFile(gft);
-       return 0;
+       return NULL;
 }
 
 //---------------------------------------------------------------------------------------------
 
-PyObject *getExif(const char *filename)
+ePicLoad::ePicLoad()
+       :msg_thread(this,1), msg_main(eApp,1)
 {
-       ePyObject list;
-       Cexif exif;
-       if(exif.DecodeExif(filename))
+       CONNECT(msg_thread.recv_msg, ePicLoad::gotMessage);
+       CONNECT(msg_main.recv_msg, ePicLoad::gotMessage);
+       
+       threadrunning = false;
+       m_filepara = NULL;
+       m_conf.max_x = 0;
+       m_conf.max_y = 0;
+       m_conf.aspect_ratio = 1.066400; //4:3
+       m_conf.usecache = false;
+       m_conf.resizetype = 1;
+       memset(m_conf.background,0x00,sizeof(m_conf.background));
+       m_conf.thumbnailsize = 180;
+}
+
+void ePicLoad::waitFinished()
+{
+       msg_thread.send(Message(Message::quit));
+       kill();
+}
+
+ePicLoad::~ePicLoad()
+{
+       if (threadrunning)
+               waitFinished();
+       if(m_filepara != NULL)
+               delete m_filepara;
+}
+
+void ePicLoad::thread_finished()
+{
+       threadrunning=false;
+}
+
+void ePicLoad::thread()
+{
+       hasStarted();
+       threadrunning=true;
+       nice(4);
+       runLoop();
+}
+
+void ePicLoad::decodePic()
+{
+       eDebug("[Picload] decode picture... %s",m_filepara->file);
+       
+       switch(m_filepara->id)
        {
-               if(exif.m_exifinfo->IsExif)
+               case F_PNG:     m_filepara->pic_buffer = png_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
+               case F_JPEG:    m_filepara->pic_buffer = jpeg_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break;
+               case F_BMP:     m_filepara->pic_buffer = bmp_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
+               case F_GIF:     m_filepara->pic_buffer = gif_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
+       }
+       
+       if(m_filepara->pic_buffer != NULL)
+       {
+               resizePic();
+       }
+}
+
+void ePicLoad::decodeThumb()
+{
+       eDebug("[Picload] get Thumbnail... %s",m_filepara->file);
+
+       bool exif_thumbnail = false;
+       bool cachefile_found = false;
+       std::string cachefile = "";
+       std::string cachedir = "/.Thumbnails";
+       
+       if(m_filepara->id == F_JPEG)
+       {
+               Cexif *exif = new Cexif;
+               if(exif->DecodeExif(m_filepara->file, 1))
                {
-                       int pos=0;
-                       char tmp[256];
-                       list = PyList_New(22);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->Version));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->CameraMake));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->CameraModel));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->DateTime));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->Comments));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d x %d", exif.m_exifinfo->Width, exif.m_exifinfo->Height));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->Orientation));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->MeteringMode));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->ExposureProgram));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->LightSource));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->FlashUsed));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", exif.m_exifinfo->CompressionLevel));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", exif.m_exifinfo->ISOequivalent));
-                       sprintf(tmp, "%.2f", exif.m_exifinfo->Xresolution);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.2f", exif.m_exifinfo->Yresolution);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif.m_exifinfo->ResolutionUnit));
-                       sprintf(tmp, "%.2f", exif.m_exifinfo->Brightness);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.5f sec.", exif.m_exifinfo->ExposureTime);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.5f", exif.m_exifinfo->ExposureBias);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.5f", exif.m_exifinfo->Distance);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.5f", exif.m_exifinfo->CCDWidth);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
-                       sprintf(tmp, "%.2f", exif.m_exifinfo->ApertureFNumber);
-                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       if(exif->m_exifinfo->IsExif)
+                       {
+                               if(exif->m_exifinfo->Thumnailstate==2)
+                               {
+                                       m_filepara->file = strdup(THUMBNAILTMPFILE);
+                                       exif_thumbnail = true;
+                                       eDebug("[Picload] Exif Thumbnail found");
+                               }
+                               m_filepara->addExifInfo(exif->m_exifinfo->CameraMake);
+                               m_filepara->addExifInfo(exif->m_exifinfo->CameraModel);
+                               m_filepara->addExifInfo(exif->m_exifinfo->DateTime);
+                               char buf[20];
+                               snprintf(buf, 20, "%d x %d", exif->m_exifinfo->Width, exif->m_exifinfo->Height);
+                               m_filepara->addExifInfo(buf);
+                       }
+                       exif->ClearExif();
                }
-               else
+               delete exif;
+       }
+       
+       if((! exif_thumbnail) && m_conf.usecache)
+       {
+               if(FILE *f=fopen(m_filepara->file, "rb"))
                {
-                       list = PyList_New(1);
-                       PyList_SET_ITEM(list, 0, PyString_FromString(exif.m_szLastError));
+                       int c;
+                       int count = 1024*100;
+                       unsigned long crc32 = 0;
+                       char crcstr[9];*crcstr=0;
+
+                       while ((c=getc(f))!=EOF)
+                       {
+                               crc32 = crc32_table[((crc32) ^ (c)) & 0xFF] ^ ((crc32) >> 8);
+                               if(--count < 0) break;
+                       }
+       
+                       fclose(f);
+                       crc32 = ~crc32;
+                       sprintf(crcstr, "%08lX", crc32);
+               
+                       cachedir = m_filepara->file;
+                       unsigned int pos = cachedir.find_last_of("/");
+                       if (pos != std::string::npos)
+                               cachedir = cachedir.substr(0, pos) + "/.Thumbnails";
+                       
+                       cachefile = cachedir + std::string("/pc_") + crcstr;
+                       if(!access(cachefile.c_str(), R_OK))
+                       {
+                               cachefile_found = true;
+                               m_filepara->file = strdup(cachefile.c_str());
+                               m_filepara->id = F_JPEG;
+                               eDebug("[Picload] Cache File found");
+                       }
                }
-               exif.ClearExif();
        }
-       else
+
+       switch(m_filepara->id)
        {
-               list = PyList_New(1);
-               PyList_SET_ITEM(list, 0, PyString_FromString(exif.m_szLastError));
+               case F_PNG:     m_filepara->pic_buffer = png_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
+               case F_JPEG:    m_filepara->pic_buffer = jpeg_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break;
+               case F_BMP:     m_filepara->pic_buffer = bmp_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
+               case F_GIF:     m_filepara->pic_buffer = gif_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy);  break;
        }
+       
+       if(exif_thumbnail)
+               ::unlink(THUMBNAILTMPFILE);
+       
+       if(m_filepara->pic_buffer != NULL)
+       {
+               //save cachefile
+               if(m_conf.usecache && (! exif_thumbnail) && (! cachefile_found))
+               {
+                       if(access(cachedir.c_str(), R_OK))
+                               ::mkdir(cachedir.c_str(), 0755);
+                       
+                       //resize for Thumbnail
+                       int imx, imy;
+                       if (m_filepara->ox <= m_filepara->oy)
+                       {
+                               imy = m_conf.thumbnailsize;
+                               imx = (int)( (m_conf.thumbnailsize * ((double)m_filepara->ox)) / ((double)m_filepara->oy) );
+                       }
+                       else
+                       {
+                               imx = m_conf.thumbnailsize;
+                               imy = (int)( (m_conf.thumbnailsize * ((double)m_filepara->oy)) / ((double)m_filepara->ox) );
+                       }
 
-       return list ? (PyObject*)list : (PyObject*)PyList_New(0);
-}
+                       m_filepara->pic_buffer = color_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy);
+                       m_filepara->ox = imx;
+                       m_filepara->oy = imy;
 
-//---------------------------------------------------------------------------------------------
-enum {F_NONE, F_PNG, F_JPEG, F_BMP, F_GIF};
+                       if(jpeg_save(cachefile.c_str(), m_filepara->ox, m_filepara->oy, m_filepara->pic_buffer))
+                               eDebug("[Picload] error saving cachefile");
+               }
 
-static int pic_id(const char *name)
+               resizePic();
+       }
+}
+
+void ePicLoad::resizePic()
 {
-       unsigned char id[10];
-       int fd = open(name, O_RDONLY); 
-       if (fd == -1) 
-               return F_NONE;
-       read(fd, id, 10);
-       close(fd);
+       int imx, imy;
 
-       if(id[1] == 'P' && id[2] == 'N' && id[3] == 'G')
-               return F_PNG;
-       else if(id[6] == 'J' && id[7] == 'F' && id[8] == 'I' && id[9] == 'F')
-               return F_JPEG;
-       else if(id[0] == 0xff && id[1] == 0xd8 && id[2] == 0xff) 
-               return F_JPEG;
-       else if(id[0] == 'B' && id[1] == 'M' )
-               return F_BMP;
-       else if(id[0] == 'G' && id[1] == 'I' && id[2] == 'F')
-               return F_GIF;
-       return F_NONE;
+       if((m_conf.aspect_ratio * m_filepara->oy * m_filepara->max_x / m_filepara->ox) <= m_filepara->max_y)
+       {
+               imx = m_filepara->max_x;
+               imy = (int)(m_conf.aspect_ratio * m_filepara->oy * m_filepara->max_x / m_filepara->ox);
+       }
+       else
+       {
+               imx = (int)((1.0/m_conf.aspect_ratio) * m_filepara->ox * m_filepara->max_y / m_filepara->oy);
+               imy = m_filepara->max_y;
+       }
+               
+       if(m_conf.resizetype)
+               m_filepara->pic_buffer = color_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy);
+       else
+               m_filepara->pic_buffer = simple_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy);
+
+       m_filepara->ox = imx;
+       m_filepara->oy = imy;
 }
 
-int loadPic(ePtr<gPixmap> &result, std::string filename, int w, int h, int aspect, int resize_mode, int rotate, int background, std::string cachefile, int thumbnail)
+void ePicLoad::gotMessage(const Message &msg)
 {
-       result = 0;
-       int ox=0, oy=0, imx, imy;
-       pic_buffer=NULL;
-       bool cache=false;
+       switch (msg.type)
+       {
+               case Message::decode_Pic:
+                       decodePic();
+                       msg_main.send(Message(Message::decode_finished));
+                       break;
+               case Message::decode_Thumb:
+                       decodeThumb();
+                       msg_main.send(Message(Message::decode_finished));
+                       break;
+               case Message::quit: // called from decode thread
+                       eDebug("[Picload] decode thread ... got quit msg");
+                       quit(0);
+                       break;
+               case Message::decode_finished: // called from main thread
+                       //eDebug("[Picload] decode finished... %s", m_filepara->file);
+                       if(m_filepara->callback)
+                       {
+                               PictureData(m_filepara->picinfo.c_str());
+                       }
+                       else
+                       {
+                               if(m_filepara != NULL)
+                               {
+                                       delete m_filepara;
+                                       m_filepara = NULL;
+                               }
+                       }
+                       break;
+               default:
+                       eDebug("unhandled thread message");
+       }
+}
 
-       if(cachefile.length())
+int ePicLoad::startThread(int what, const char *file, int x, int y, bool async)
+{
+       if(async && threadrunning && m_filepara != NULL)
+       {
+               eDebug("[Picload] thread running");
+               m_filepara->callback = false;
+               return 1;
+       }
+       
+       if(m_filepara != NULL)
+       {
+               delete m_filepara;
+               m_filepara = NULL;
+       }
+       
+       int file_id = -1;
+       unsigned char id[10];
+       int fd = ::open(file, O_RDONLY);
+       if (fd == -1) return 1;
+       ::read(fd, id, 10);
+       ::close(fd);
+
+       if(id[1] == 'P' && id[2] == 'N' && id[3] == 'G')                        file_id = F_PNG;
+       else if(id[6] == 'J' && id[7] == 'F' && id[8] == 'I' && id[9] == 'F')   file_id = F_JPEG;
+       else if(id[0] == 0xff && id[1] == 0xd8 && id[2] == 0xff)                file_id = F_JPEG;
+       else if(id[0] == 'B' && id[1] == 'M' )                                  file_id = F_BMP;
+       else if(id[0] == 'G' && id[1] == 'I' && id[2] == 'F')                   file_id = F_GIF;
+       
+       if(file_id < 0)
        {
-               if(png_load(cachefile.c_str(), &ox, &oy))
-                       eDebug("[CACHEPIC] x-size=%d, y-size=%d", ox, oy);
+               eDebug("[Picload] <format not supportet>");
+               return 1;
        }
 
-       if(pic_buffer==NULL)
+       m_filepara = new Cfilepara(file, file_id, getSize(file));
+       x > 0 ? m_filepara->max_x = x : m_filepara->max_x = m_conf.max_x;
+       y > 0 ? m_filepara->max_y = y : m_filepara->max_y = m_conf.max_y;
+       
+       if(m_filepara->max_x <= 0 || m_filepara->max_y <= 0)
        {
-               switch(pic_id(filename.c_str()))
-               {
-                       case F_PNG:     png_load(filename.c_str(), &ox, &oy);break;
-                       case F_JPEG:    {
-                                       if (thumbnail)
-                                               jpeg_load_thumb(filename.c_str(), &ox, &oy);
-                                       else
-                                               jpeg_load(filename.c_str(), &ox, &oy);
-                                       pic_buffer = conv24to32(pic_buffer, ox*oy, 1);
-                                       break; }
-                       case F_BMP:     bmp_load(filename.c_str(), &ox, &oy);pic_buffer = conv24to32(pic_buffer, ox*oy, 1); break;
-                       case F_GIF:     gif_load(filename.c_str(), &ox, &oy);pic_buffer = conv24to32(pic_buffer, ox*oy, 1); break;
-                       default:
-                               eDebug("[PIC] <format not supportet>");
-                               return 0;
-               }
+               delete m_filepara;
+               m_filepara = NULL;
+               eDebug("[Picload] <error in Para>");
+               return 1;
+       }
        
-               if(pic_buffer==NULL)
-                       return 0;
+       if (async) {
+               if(what==1)
+                       msg_thread.send(Message(Message::decode_Pic));
+               else
+                       msg_thread.send(Message(Message::decode_Thumb));
+               run();
+       }
+       else if (what == 1)
+               decodePic();
+       else
+               decodeThumb();
+       return 0;
+}
 
-               double aspect_ratio;
-               switch(aspect)
-               {
-                       case 1:         aspect_ratio = 1.778 / ((double)720/576); break; //16:9
-                       case 2:         aspect_ratio = 1.600 / ((double)720/576); break; //16:10
-                       case 3:         aspect_ratio = 1.250 / ((double)720/576); break; //5:4
-                       default:        aspect_ratio = 1.333 / ((double)720/576); //4:3
-               }
+RESULT ePicLoad::startDecode(const char *file, int x, int y, bool async)
+{
+       return startThread(1, file, x, y, async);
+}
+
+RESULT ePicLoad::getThumbnail(const char *file, int x, int y, bool async)
+{
+       return startThread(0, file, x, y, async);
+}
 
-               if((aspect_ratio * oy * w / ox) <= h)
+PyObject *ePicLoad::getInfo(const char *filename)
+{
+       ePyObject list;
+       
+       Cexif *exif = new Cexif;
+       if(exif->DecodeExif(filename))
+       {
+               if(exif->m_exifinfo->IsExif)
                {
-                       imx = w;
-                       imy = (int)(aspect_ratio*oy*w/ox);
+                       char tmp[256];
+                       int pos=0;
+                       list = PyList_New(23);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(filename));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->Version));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->CameraMake));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->CameraModel));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->DateTime));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d x %d", exif->m_exifinfo->Width, exif->m_exifinfo->Height));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->FlashUsed));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->Orientation));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->Comments));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->MeteringMode));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->ExposureProgram));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->LightSource));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", exif->m_exifinfo->CompressionLevel));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", exif->m_exifinfo->ISOequivalent));
+                       sprintf(tmp, "%.2f", exif->m_exifinfo->Xresolution);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.2f", exif->m_exifinfo->Yresolution);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(exif->m_exifinfo->ResolutionUnit));
+                       sprintf(tmp, "%.2f", exif->m_exifinfo->Brightness);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.5f sec.", exif->m_exifinfo->ExposureTime);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.5f", exif->m_exifinfo->ExposureBias);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.5f", exif->m_exifinfo->Distance);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.5f", exif->m_exifinfo->CCDWidth);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       sprintf(tmp, "%.2f", exif->m_exifinfo->ApertureFNumber);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                }
                else
                {
-                       imx = (int)((1.0/aspect_ratio)*ox*h/oy);
-                       imy = h;
+                       list = PyList_New(2);
+                       PyList_SET_ITEM(list, 0, PyString_FromString(filename));
+                       PyList_SET_ITEM(list, 1, PyString_FromString(exif->m_szLastError));
                }
+               exif->ClearExif();
+       }
+       else
+       {
+               list = PyList_New(2);
+               PyList_SET_ITEM(list, 0, PyString_FromString(filename));
+               PyList_SET_ITEM(list, 1, PyString_FromString(exif->m_szLastError));
+       }
+       delete exif;
 
-               if(resize_mode) pic_buffer = color_resize(pic_buffer, ox, oy, imx, imy);
-               else            pic_buffer = simple_resize(pic_buffer, ox, oy, imx, imy);
+       return list ? (PyObject*)list : (PyObject*)PyList_New(0);
+}
 
-               ox = imx;
-               oy = imy;
-       }
-       else cache = true;
+int ePicLoad::getData(ePtr<gPixmap> &result)
+{
+       result = 0;
+       if(m_filepara->pic_buffer == NULL) return 0;
+       
+       m_filepara->pic_buffer = conv24to32(m_filepara->pic_buffer, m_filepara->ox * m_filepara->oy);
        
-       result=new gPixmap(eSize(w, h), 32);
+       result=new gPixmap(eSize(m_filepara->max_x, m_filepara->max_y), 32);
        gSurface *surface = result->surface;
        int a=0, b=0;
        int nc=0, oc=0;
        int o_y=0, u_y=0, v_x=0, h_x=0;
-       unsigned char clear[4] = {0x00,0x00,0x00,0x00};
-       if(background)  clear[3]=0xFF;
-       unsigned char *tmp_buffer=((unsigned char *)(surface->data));
 
-       if(oy < h)
+       unsigned char *tmp_buffer=((unsigned char *)(surface->data));
+       
+       if(m_filepara->oy < m_filepara->max_y)
        {
-               o_y=(h-oy)/2;
-               u_y=h-oy-o_y;
+               o_y = (m_filepara->max_y - m_filepara->oy) / 2;
+               u_y = m_filepara->max_y - m_filepara->oy - o_y;
        }
-       if(ox < w)
+       if(m_filepara->ox < m_filepara->max_x)
        {
-               v_x=(w-ox)/2;
-               h_x=w-ox-v_x;
+               v_x = (m_filepara->max_x - m_filepara->ox) / 2;
+               h_x = m_filepara->max_x - m_filepara->ox - v_x;
        }
        
-       //eDebug("o_y=%d u_y=%d v_x=%d h_x=%d", o_y, u_y, v_x, h_x);
-
-       if(oy < h)
-               for(a=0; a<(o_y*ox); a++, nc+=4)
+       if(m_filepara->oy < m_filepara->max_y)
+       {
+               for(a=0; a<(o_y*m_filepara->ox); a++, nc+=4)
                {
                        tmp_buffer=((unsigned char *)(surface->data)) + nc;
-                       memcpy(tmp_buffer, clear, sizeof(clear));
+                       memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background));
                }
-
-       for(a=0; a<oy; a++)
+       }
+       
+       for(a=0; a<m_filepara->oy; a++)
        {
-               if(ox < w)
+               if(m_filepara->ox < m_filepara->max_x)
+               {
                        for(b=0; b<v_x; b++, nc+=4)
                        {
                                tmp_buffer=((unsigned char *)(surface->data)) + nc;
-                               memcpy(tmp_buffer, clear, sizeof(clear));
+                               memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background));
                        }
+               }
 
-               for(b=0; b<(ox*4); b+=4, nc+=4)
+               for(b=0; b<(m_filepara->ox*4); b+=4, nc+=4)
                {
                        tmp_buffer=((unsigned char *)(surface->data)) + nc;
-                       tmp_buffer[2]=pic_buffer[oc++];
-                       tmp_buffer[1]=pic_buffer[oc++];
-                       tmp_buffer[0]=pic_buffer[oc++];
-                       tmp_buffer[3]=pic_buffer[oc++];
-
+                       tmp_buffer[2] = m_filepara->pic_buffer[oc++];
+                       tmp_buffer[1] = m_filepara->pic_buffer[oc++];
+                       tmp_buffer[0] = m_filepara->pic_buffer[oc++];
+                       tmp_buffer[3] = m_filepara->pic_buffer[oc++];
                }
                
-               if(ox < w)
+               if(m_filepara->ox < m_filepara->max_x)
+               {
                        for(b=0; b<h_x; b++, nc+=4)
                        {
                                tmp_buffer=((unsigned char *)(surface->data)) + nc;
-                               memcpy(tmp_buffer, clear, sizeof(clear));
+                               memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background));
                        }
+               }
        }
-
-       if(oy < h)
-               for(a=0; a<(u_y*ox); a++, nc+=4)
+       
+       if(m_filepara->oy < m_filepara->max_y)
+       {
+               for(a=0; a<(u_y*m_filepara->ox); a++, nc+=4)
                {
                        tmp_buffer=((unsigned char *)(surface->data)) + nc;
-                       memcpy(tmp_buffer, clear, sizeof(clear));
+                       memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background));
                }
-       
-       //eDebug("[PIC] buffer=%d, nc=%d oc=%d ox=%d, oy=%d",w*h*4, nc, oc, ox, oy);
+       }
        
        surface->clut.data=0;
        surface->clut.colors=0;
        surface->clut.start=0;
+
+       delete m_filepara;
+       m_filepara = NULL;
+
+       return 0;
+}
+
+RESULT ePicLoad::setPara(PyObject *val)
+{
+       if (!PySequence_Check(val))
+               return 0;
+       if (PySequence_Size(val) < 7)
+               return 0;
+       else {
+               ePyObject fast = PySequence_Fast(val, "");
+               m_conf.max_x            = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 0));
+               m_conf.max_y            = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 1));
+               m_conf.aspect_ratio     = (double)PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 2)) / PyInt_AsLong(PySequence_Fast_GET_ITEM(fast, 3));
+               m_conf.usecache         = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 4));
+               m_conf.resizetype       = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 5));
+               const char *bg_str      = PyString_AsString( PySequence_Fast_GET_ITEM(fast, 6));
        
-       delete [] pic_buffer;
+               if(bg_str[0] == '#' && strlen(bg_str)==9)
+               {
+                       int bg = strtoul(bg_str+1, NULL, 16);
+                       m_conf.background[0] = bg&0xFF;         //BB
+                       m_conf.background[1] = (bg>>8)&0xFF;    //GG
+                       m_conf.background[2] = (bg>>16)&0xFF;   //RR
+                       m_conf.background[3] = bg>>24;          //AA
+               }
+               eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]);
+       }
+       return 1;
+}
+
+//------------------------------------------------------------------------------------
 
-       if(cachefile.length() && !cache)
+//for old plugins
+SWIG_VOID(int) loadPic(ePtr<gPixmap> &result, std::string filename, int x, int y, int aspect, int resize_mode, int rotate, int background, std::string cachefile)
+{
+       long asp1, asp2;
+       result = 0;
+       eDebug("deprecated loadPic function used!!! please use the non blocking version! you can see demo code in Pictureplayer plugin... this function is removed in the near future!");
+       ePicLoad mPL;
+
+       switch(aspect)
        {
-               savePNG( cachefile.c_str(), result);
-               eDebug("[SAVEPIC] x-size=%d, y-size=%d", ox, oy);
+               case 1:         asp1 = 16*576, asp2 = 9*720; break; //16:9
+               case 2:         asp1 = 16*576, asp2 = 10*720; break; //16:10
+               case 3:         asp1 = 5*576, asp2 = 4*720; break; //5:4
+               default:        asp1 = 4*576, asp2 = 3*720; break; //4:3
        }
 
+       ePyObject tuple = PyTuple_New(7);
+       PyTuple_SET_ITEM(tuple, 0,  PyLong_FromLong(x));
+       PyTuple_SET_ITEM(tuple, 1,  PyLong_FromLong(y));
+       PyTuple_SET_ITEM(tuple, 2,  PyLong_FromLong(asp1));
+       PyTuple_SET_ITEM(tuple, 3,  PyLong_FromLong(asp2));
+       PyTuple_SET_ITEM(tuple, 4,  PyLong_FromLong(0));
+       PyTuple_SET_ITEM(tuple, 5,  PyLong_FromLong(resize_mode));
+       if(background)
+               PyTuple_SET_ITEM(tuple, 6,  PyString_FromString("#ff000000"));
+       else
+               PyTuple_SET_ITEM(tuple, 6,  PyString_FromString("#00000000"));
+
+       mPL.setPara(tuple);
+
+       if(!mPL.startDecode(filename.c_str(), 0, 0, false))
+               mPL.getData(result);
+
        return 0;
 }
index 7bb9adf19933f9a6968b34ad63f0e59cfb648147..f64fd2f9a0fff4ae2edc6d5ad35b17b0acdcd6fe 100644 (file)
 #ifndef __picload_h__
 #define __picload_h__
 
-#include "Python.h"
 #include <lib/gdi/gpixmap.h>
-#include <lib/gdi/epng.h>
+#include <lib/base/thread.h>
+#include <lib/python/python.h>
+#include <lib/base/message.h>
+#include <lib/base/ebase.h>
 
-SWIG_VOID(int) loadPic(ePtr<gPixmap> &SWIG_OUTPUT, std::string filename, int x, int y, int aspect, int resize_mode=0, int rotate=0, int background=0, std::string cachefile="", int thumbnail=0);
-PyObject *getExif(const char *filename);
+#ifndef SWIG
+class Cfilepara
+{
+public:
+       int max_x;
+       int max_y;
+       bool callback;
+       
+       const char *file;
+       int id;
+       int ox;
+       int oy;
+       unsigned char *pic_buffer;
+       std::string picinfo;
+       int test;
+       
+       Cfilepara(const char *mfile, int mid, std::string size)
+       {
+               file = strdup(mfile);
+               id = mid;
+               pic_buffer = NULL;
+               callback = true;
+               picinfo = mfile;
+               picinfo += + "\n" + size + "\n";
+       }
+       
+       ~Cfilepara()
+       {
+               if(pic_buffer != NULL)  delete pic_buffer;
+               picinfo.clear();
+       }
+       
+       void addExifInfo(std::string val) { picinfo += val + "\n"; }
+};
+#endif
+
+class ePicLoad: public eMainloop, public eThread, public Object, public iObject
+{
+       DECLARE_REF(ePicLoad);
+
+       enum{ F_PNG, F_JPEG, F_BMP, F_GIF};
+       
+       void decodePic();
+       void decodeThumb();
+       void resizePic();
+
+       Cfilepara *m_filepara;
+       bool threadrunning;
+       
+       struct PConf
+       {
+               int max_x;
+               int max_y;
+               double aspect_ratio;
+               unsigned char background[4];
+               bool resizetype;
+               bool usecache;
+               int thumbnailsize;
+               int test;
+       } m_conf;
+       
+       struct Message
+       {
+               int type;
+               enum
+               {
+                       decode_Pic,
+                       decode_Thumb,
+                       decode_finished,
+                       quit
+               };
+               Message(int type=0)
+                       :type(type) {}
+       };
+       eFixedMessagePump<Message> msg_thread, msg_main;
+
+       void gotMessage(const Message &message);
+       void thread();
+       int startThread(int what, const char *file, int x, int y, bool async=true);
+       void thread_finished();
+public:
+       void waitFinished();
+       PSignal1<void, const char*> PictureData;
+
+       ePicLoad();
+       ~ePicLoad();
+       
+       RESULT startDecode(const char *filename, int x=0, int y=0, bool async=true);
+       RESULT getThumbnail(const char *filename, int x=0, int y=0, bool async=true);
+       RESULT setPara(PyObject *val);
+       PyObject *getInfo(const char *filename);
+       SWIG_VOID(int) getData(ePtr<gPixmap> &SWIG_OUTPUT);
+};
+
+//for old plugins
+SWIG_VOID(int) loadPic(ePtr<gPixmap> &SWIG_OUTPUT, std::string filename, int x, int y, int aspect, int resize_mode=0, int rotate=0, int background=0, std::string cachefile="");
 
 #endif // __picload_h__
index 5b05c028151a953d508bea32d642a6d37ff4afda..e8a0dada13a17cddf4d3585ce464cd83dd604db6 100644 (file)
@@ -279,7 +279,7 @@ void eListbox::updateScrollBar()
                        if ((pages*m_items_per_page) < entries)
                                ++pages;
                        int start=(m_top*100)/(pages*m_items_per_page);
-                       int vis=(m_items_per_page*100)/(pages*m_items_per_page);
+                       int vis=(m_items_per_page*100+pages*m_items_per_page-1)/(pages*m_items_per_page);
                        if (vis < 3)
                                vis=3;
                        m_scrollbar->setStartEnd(start,start+vis);
index beb120445729bff9ab425f40c014e041f1ff0047..44973af76f81723edf616e0bda947f77b0ae2859 100644 (file)
@@ -467,7 +467,8 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style,
                                        /* type is borrowed */
                        } else
                                eWarning("eListboxPythonConfigContent: second value of tuple is not a tuple.");
-                               /* value is borrowed */
+                       if (value)
+                               Py_DECREF(value);
                }
 
                if (selected && (!local_style || !local_style->m_selection))
@@ -522,7 +523,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                        style.setStyle(painter, eWindowStyle::styleListboxNormal);
                        if (pbackColor)
                        {
-                               int color = PyInt_AsLong(pbackColor);
+                               unsigned int color = PyInt_AsUnsignedLongMask(pbackColor);
                                painter.setBackgroundColor(gRGB(color));
                        } // transparent background?
                        // if we have a local background color set, use that. 
@@ -542,7 +543,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                        style.setStyle(painter, eWindowStyle::styleListboxSelected);
                        if (pbackColorSelected)
                        {
-                               int color = PyInt_AsLong(pbackColorSelected);
+                               unsigned int color = PyInt_AsUnsignedLongMask(pbackColorSelected);
                                painter.setBackgroundColor(gRGB(color));
                        }
                        else if (local_style && local_style->m_background_color_selected_set)
@@ -559,7 +560,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                        style.setStyle(painter, eWindowStyle::styleListboxSelected);
                        if (pbackColorSelected)
                        {
-                               int color = PyInt_AsLong(pbackColorSelected);
+                               unsigned int color = PyInt_AsUnsignedLongMask(pbackColorSelected);
                                painter.setBackgroundColor(gRGB(color));
                        }
                        else if (local_style && local_style->m_background_color_selected_set)
@@ -571,7 +572,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                        style.setStyle(painter, eWindowStyle::styleListboxNormal);
                        if (pbackColor)
                        {
-                               int color = PyInt_AsLong(pbackColor);
+                               unsigned int color = PyInt_AsUnsignedLongMask(pbackColor);
                                painter.setBackgroundColor(gRGB(color));
                        }/* if we have a local background color set, use that. */
                        else if (local_style && local_style->m_background_color_set)
@@ -587,7 +588,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
        {
                if (pforeColorSelected)
                {
-                       int color = PyInt_AsLong(pforeColorSelected);
+                       unsigned int color = PyInt_AsUnsignedLongMask(pforeColorSelected);
                        painter.setForegroundColor(gRGB(color));
                }
                /* if we have a local foreground color set, use that. */
@@ -598,7 +599,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
        {
                if (pforeColor)
                {
-                       int color = PyInt_AsLong(pforeColor);
+                       unsigned int color = PyInt_AsUnsignedLongMask(pforeColor);
                        painter.setForegroundColor(gRGB(color));
                }
                /* if we have a local foreground color set, use that. */
@@ -607,6 +608,30 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
        }
 }
 
+static ePyObject lookupColor(ePyObject color, ePyObject data)
+{
+       if (color == Py_None)
+               return ePyObject();
+
+       if ((!color) && (!data))
+               return color;
+
+       unsigned int icolor = PyInt_AsUnsignedLongMask(color);
+
+               /* check if we have the "magic" template color */
+       if ((icolor & 0xFF000000) == 0xFF000000)
+       {
+               int index = icolor & 0xFFFFFF;
+               eDebug("[eListboxPythonMultiContent] template color index: %d", index);
+               return PyTuple_GetItem(data, index);
+       }
+
+       if (color == Py_None)
+               return ePyObject();
+
+       return color;
+}
+
 void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
 {
        gRegion itemregion(eRect(offset, m_itemsize));
@@ -622,7 +647,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
        painter.clip(itemregion);
        clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip);
 
-       ePyObject items;
+       ePyObject items, buildfunc_ret;
 
        if (m_list && cursorValid())
        {
@@ -638,7 +663,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                        if (PyCallable_Check(m_buildFunc))  // when we have a buildFunc then call it
                        {
                                if (PyTuple_Check(items))
-                                       items = PyObject_CallObject(m_buildFunc, items);
+                                       buildfunc_ret = items = PyObject_CallObject(m_buildFunc, items);
                                else
                                        eDebug("items is no tuple");
                        }
@@ -731,29 +756,17 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                }
 
                                if (size > 8)
-                               {
-                                       pforeColor = PyTuple_GET_ITEM(item, 8);
-                                       if (pforeColor == Py_None)
-                                               pforeColor=ePyObject();
-                               }
+                                       pforeColor = lookupColor(PyTuple_GET_ITEM(item, 8), data);
+
                                if (size > 9)
-                               {
-                                       pforeColorSelected = PyTuple_GET_ITEM(item, 9);
-                                       if (pforeColorSelected == Py_None)
-                                               pforeColorSelected=ePyObject();
-                               }
+                                       pforeColorSelected = lookupColor(PyTuple_GET_ITEM(item, 9), data);
+
                                if (size > 10)
-                               {
-                                       pbackColor = PyTuple_GET_ITEM(item, 10);
-                                       if (pbackColor == Py_None)
-                                               pbackColor=ePyObject();
-                               }
+                                       pbackColor = lookupColor(PyTuple_GET_ITEM(item, 10), data);
+
                                if (size > 11)
-                               {
-                                       pbackColorSelected = PyTuple_GET_ITEM(item, 11);
-                                       if (pbackColorSelected == Py_None)
-                                               pbackColorSelected=ePyObject();
-                               }
+                                       pbackColorSelected = lookupColor(PyTuple_GET_ITEM(item, 11), data);
+
                                if (size > 12)
                                {
                                        pborderWidth = PyTuple_GET_ITEM(item, 12);
@@ -761,11 +774,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                                pborderWidth=ePyObject();
                                }
                                if (size > 13)
-                               {
-                                       pborderColor = PyTuple_GET_ITEM(item, 13);
-                                       if (pborderColor == Py_None)
-                                               pborderColor=ePyObject();
-                               }
+                                       pborderColor = lookupColor(PyTuple_GET_ITEM(item, 13), data);
 
                                if (PyInt_Check(pstring) && data) /* if the string is in fact a number, it refers to the 'data' list. */
                                        pstring = PyTuple_GetItem(data, PyInt_AsLong(pstring));
@@ -804,7 +813,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                        painter.clip(rect);
                                        if (pborderColor)
                                        {
-                                               int color = PyInt_AsLong(pborderColor);
+                                               unsigned int color = PyInt_AsUnsignedLongMask(pborderColor);
                                                painter.setForegroundColor(gRGB(color));
                                        }
 
@@ -948,17 +957,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                }
 
                                if (size > 6)
-                               {
-                                       pbackColor = PyTuple_GET_ITEM(item, 6);
-                                       if (pbackColor == Py_None)
-                                               pbackColor=ePyObject();
-                               }
+                                       pbackColor = lookupColor(PyTuple_GET_ITEM(item, 6), data);
+
                                if (size > 7)
-                               {
-                                       pbackColorSelected = PyTuple_GET_ITEM(item, 7);
-                                       if (pbackColorSelected == Py_None)
-                                               pbackColorSelected=ePyObject();
-                               }
+                                       pbackColorSelected = lookupColor(PyTuple_GET_ITEM(item, 7), data);
 
                                eRect rect(x, y, width, height);
                                painter.clip(rect);
@@ -983,8 +985,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);
 
 error_out:
-       if (m_buildFunc && PyCallable_Check(m_buildFunc) && items)
-               Py_DECREF(items);
+       if (buildfunc_ret)
+               Py_DECREF(buildfunc_ret);
 
        painter.clippop();
 }
@@ -1015,7 +1017,11 @@ int eListboxPythonMultiContent::currentCursorSelectable()
                        {
                                ePyObject ret = PyObject_CallObject(m_selectableFunc, args);
                                if (ret)
-                                       return ret == Py_True;
+                               {
+                                       bool retval = ret == Py_True;
+                                       Py_DECREF(ret);
+                                       return ret;
+                               }
                                eDebug("call m_selectableFunc failed!!! assume not callable");
                        }
                        else
index dd2aac9e73c329b9f3eb64ad73ae30c84263719b..19097ad4cfe2a008d870440463a1198dfc5f212f 100644 (file)
@@ -1,7 +1,7 @@
 #include <lib/gui/eslider.h>
 
 eSlider::eSlider(eWidget *parent)
-       :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_border_width(0)
+       :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_orientation_swapped(0), m_border_width(0)
 {
 }
 
@@ -70,10 +70,14 @@ int eSlider::event(int event, void *data, void *data2)
 
                if (m_min < m_max)
                {
-                       num_pix = pixsize * (m_value - m_start) / (m_max - m_min);
-                       start_pix = pixsize * m_start / (m_max - m_min);
+                       int val_range = m_max - m_min;
+                       num_pix = (pixsize * (m_value - m_start) + val_range - 1) / val_range; /* properly round up */
+                       start_pix = (pixsize * m_start + val_range - 1) / val_range;
+
+                       if (m_orientation_swapped)
+                               start_pix = pixsize - num_pix - start_pix;
                }
-               
+
                if  (start_pix < 0)
                {
                        num_pix += start_pix;
@@ -113,9 +117,10 @@ void eSlider::setStartEnd(int start, int end)
        event(evtChangedSlider);
 }
 
-void eSlider::setOrientation(int orientation)
+void eSlider::setOrientation(int orientation, int swapped)
 {
        m_orientation = orientation;
+       m_orientation_swapped = swapped;
        event(evtChangedSlider);
 }
 
index c544072650a1ad2b1ce3ccb300536133a193f120..9a3e8395ca4809e73e2147bf3dd0d2c00eefaf3a 100644 (file)
@@ -11,7 +11,7 @@ public:
        void setStartEnd(int start, int end);
        void setRange(int min, int max);
        enum { orHorizontal, orVertical };
-       void setOrientation(int orientation);
+       void setOrientation(int orientation, int swapped = 0);
        void setBorderWidth(int pixel);
        void setBorderColor(const gRGB &color);
        void setPixmap(gPixmap *pixmap);
@@ -24,7 +24,7 @@ private:
                evtChangedSlider = evtUserWidget
        };
        bool m_have_border_color;
-       int m_min, m_max, m_value, m_start, m_orientation, m_border_width;
+       int m_min, m_max, m_value, m_start, m_orientation, m_orientation_swapped, m_border_width;
        ePtr<gPixmap> m_pixmap;
        
        gRegion m_currently_filled;
index c837afc6c3ccc098a7dc55c5159c2ec149e19fa1..085a749a6fde71fdb0264160bc18ee161ab77de0 100644 (file)
@@ -16,6 +16,7 @@ eSubtitleWidget::eSubtitleWidget(eWidget *parent)
        setBackgroundColor(gRGB(0,0,0,255));
        m_page_ok = 0;
        m_dvb_page_ok = 0;
+       m_pango_page_ok = 0;
        CONNECT(m_hide_subtitles_timer->timeout, eSubtitleWidget::clearPage);
 }
 
index 062a7d00046a48d7736eb0fd9dae146bf55fcc73..90650f68262d012cf1fc8e23bebe7a1784c10572 100644 (file)
@@ -72,7 +72,7 @@ RESULT eNavigation::stopService(void)
        return 0;
 }
 
-RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service)
+RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate)
 {
        assert(m_servicehandler);
        RESULT res = m_servicehandler->record(ref, service);
@@ -81,9 +81,14 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordable
                service = 0;
        else
        {
-               ePtr<eConnection> conn;
-               service->connectEvent(slot(*this, &eNavigation::recordEvent), conn);
-               m_recordings[service]=conn;
+               if (simulate)
+                       m_simulate_recordings.insert(service);
+               else
+               {
+                       ePtr<eConnection> conn;
+                       service->connectEvent(slot(*this, &eNavigation::recordEvent), conn);
+                       m_recordings[service]=conn;
+               }
        }
        return res;
 }
@@ -91,26 +96,40 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordable
 RESULT eNavigation::stopRecordService(ePtr<iRecordableService> &service)
 {
        service->stop();
-       std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it =
-               m_recordings.find(service);
-       if (it != m_recordings.end())
+       std::set<ePtr<iRecordableService> >::iterator it =
+               m_simulate_recordings.find(service);
+       if (it != m_simulate_recordings.end())
        {
-               m_recordings.erase(it);
-               /* send stop event */
-               m_record_event(service, iRecordableService::evEnd);
+               m_simulate_recordings.erase(it);
                return 0;
        }
+       else
+       {
+               std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it =
+                       m_recordings.find(service);
+               if (it != m_recordings.end())
+               {
+                       m_recordings.erase(it);
+                       /* send stop event */
+                       m_record_event(service, iRecordableService::evEnd);
+                       return 0;
+               }
+       }
 
        eDebug("try to stop non running recording!!");  // this should not happen
        return -1;
 }
 
-PyObject *eNavigation::getRecordings(void)
+PyObject *eNavigation::getRecordings(bool simulate)
 {
-       ePyObject result = PyList_New(m_recordings.size());
+       ePyObject result = PyList_New(simulate ? m_simulate_recordings.size() : m_recordings.size());
        int pos=0;
-       for (std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it(m_recordings.begin()); it != m_recordings.end(); ++it)
-               PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(it->first)); 
+       if (simulate)
+               for (std::set<ePtr<iRecordableService> >::iterator it(m_simulate_recordings.begin()); it != m_simulate_recordings.end(); ++it)
+                       PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(*it));
+       else
+               for (std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it(m_recordings.begin()); it != m_recordings.end(); ++it)
+                       PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(it->first)); 
        return result;
 }
 
index 01efe9af284f62a4d97e52e169c51e0f46b408dd..9f7be884dd15c3e1c6c26a2b16658393d03c09ef 100644 (file)
@@ -5,6 +5,7 @@
 #include <lib/service/iservice.h>
 #include <connection.h>
 #include <map>
+#include <set>
 
 class eNavigation: public iObject, public Object
 {
@@ -17,6 +18,8 @@ class eNavigation: public iObject, public Object
        void serviceEvent(iPlayableService* service, int event);
 
        std::map<ePtr<iRecordableService>, ePtr<eConnection>, std::less<iRecordableService*> > m_recordings;
+       std::set<ePtr<iRecordableService>, std::less<iRecordableService*> > m_simulate_recordings;
+
        Signal2<void,ePtr<iRecordableService>,int> m_record_event;
        void recordEvent(iRecordableService* service, int event);
 public:
@@ -28,9 +31,9 @@ public:
        RESULT getCurrentService(ePtr<iPlayableService> &service);
        RESULT stopService(void);
        
-       RESULT recordService(const eServiceReference &ref, ePtr<iRecordableService> &service);
+       RESULT recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate=false);
        RESULT stopRecordService(ePtr<iRecordableService> &service);
-       PyObject *getRecordings(void);
+       PyObject *getRecordings(bool simulate=false);
        
        RESULT pause(int p);
        eNavigation(iServiceHandler *serviceHandler);
index a6ed35f66480b99808ecb0afb697ce6dae672137..b38e559716fb8fcf4842355db2f190f19b1f9d2e 100644 (file)
@@ -37,9 +37,9 @@ RESULT pNavigation::stopService()
        return m_core->stopService();
 }
 
-RESULT pNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service)
+RESULT pNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate)
 {
-       return m_core->recordService(ref, service);
+       return m_core->recordService(ref, service, simulate);
 }
 
 RESULT pNavigation::stopRecordService(ePtr<iRecordableService> &service)
@@ -47,9 +47,9 @@ RESULT pNavigation::stopRecordService(ePtr<iRecordableService> &service)
        return m_core->stopRecordService(service);
 }
 
-PyObject *pNavigation::getRecordings(void)
+PyObject *pNavigation::getRecordings(bool simulate)
 {
-       return m_core->getRecordings();
+       return m_core->getRecordings(simulate);
 }
 
 void pNavigation::navEvent(int event)
index 1d314b19848fc22af84db3a2b9cf96964f1517a3..c157e0dcc43f449902be4564b5ebe07fc9e1bbe2 100644 (file)
@@ -20,9 +20,9 @@ public:
        RESULT pause(int p);
        SWIG_VOID(RESULT) getCurrentService(ePtr<iPlayableService> &SWIG_OUTPUT);
 
-       SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr<iRecordableService> &SWIG_OUTPUT);
+       SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr<iRecordableService> &SWIG_OUTPUT, bool simulate);
        RESULT stopRecordService(ePtr<iRecordableService> &service);
-       PyObject *getRecordings(void);
+       PyObject *getRecordings(bool simulate=false);
 
 private:
        ePtr<eNavigation> m_core;
index 8f99b98ec8fd6c193d3494d4e1d9ba9ab34ef363..3188469a836f7cc28c018cb61f8ee020de64904d 100644 (file)
@@ -1,33 +1,43 @@
 from config import config, ConfigSlider, ConfigSelection, ConfigYesNo, ConfigEnableDisable, ConfigSubsection, ConfigBoolean
-from enigma import eAVSwitch
+from enigma import eAVSwitch, getDesktop
 from SystemInfo import SystemInfo
 
 class AVSwitch:
-       INPUT = { "ENCODER": (0, 4), "SCART": (1, 3), "AUX": (2, 4) }
-
        def setInput(self, input):
-               eAVSwitch.getInstance().setInput(self.INPUT[input][0])
-               if self.INPUT[input][1] == 4:
-                       aspect = self.getAspectRatioSetting()
-                       self.setAspectWSS(aspect)
-                       self.setAspectSlowBlank(aspect)
-               else:
-                       eAVSwitch.getInstance().setSlowblank(self.INPUT[input][1])
-               # FIXME why do we have to reset the colorformat? bug in avs-driver?
-               map = {"cvbs": 0, "rgb": 1, "svideo": 2, "yuv": 3}
-               eAVSwitch.getInstance().setColorFormat(map[config.av.colorformat.value])
+               INPUT = { "ENCODER": 0, "SCART": 1, "AUX": 2 }
+               eAVSwitch.getInstance().setInput(INPUT[input])
 
        def setColorFormat(self, value):
                eAVSwitch.getInstance().setColorFormat(value)
 
        def setAspectRatio(self, value):
                eAVSwitch.getInstance().setAspectRatio(value)
-               self.setAspectWSS(value)
-               self.setAspectSlowBlank(value)
 
        def setSystem(self, value):
                eAVSwitch.getInstance().setVideomode(value)
 
+       def getOutputAspect(self):
+               valstr = config.av.aspectratio.value
+               if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3
+                       return (4,3)
+               elif valstr == "16_9": # auto ... 4:3 or 16:9
+                       try:
+                               aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
+                               if aspect_str == "1": # 4:3
+                                       return (4,3)
+                       except IOError:
+                               pass
+               elif valstr in ("16_9_always", "16_9_letterbox"): # 16:9
+                       pass
+               elif valstr in ("16_10_letterbox", "16_10_panscan"): # 16:10
+                       return (16,10)
+               return (16,9)
+
+       def getFramebufferScale(self):
+               aspect = self.getOutputAspect()
+               fb_size = getDesktop(0).size()
+               return (aspect[0] * fb_size.height(), aspect[1] * fb_size.width())
+
        def getAspectRatioSetting(self):
                valstr = config.av.aspectratio.value
                if valstr == "4_3_letterbox":
@@ -47,35 +57,12 @@ class AVSwitch:
                return val
 
        def setAspectWSS(self, aspect=None):
-               if aspect is None:
-                       aspect = self.getAspectRatioSetting()
-               if aspect == 0 or aspect == 1: # letterbox or panscan
-                       if not config.av.wss.value:
-                               value = 0 # wss off
-                       else:
-                               value = 3 # 4:3_full_format
-               elif aspect == 2: # 16:9
-                       if not config.av.wss.value:
-                               value = 2 # auto(4:3_off)
-                       else:
-                               value = 1 # auto
-               elif aspect == 3 or aspect == 6: # always 16:9
-                       value = 4 # 16:9_full_format
-               elif aspect == 4 or aspect == 5: # 16:10
-                       value = 10 # 14:9_full_format
+               if not config.av.wss.value:
+                       value = 2 # auto(4:3_off)
+               else:
+                       value = 1 # auto
                eAVSwitch.getInstance().setWSS(value)
 
-       def setAspectSlowBlank(self, aspect=None):
-               if aspect is None:
-                       aspect = self.getAspectRatioSetting()
-               if aspect == 0 or aspect == 1: # letterbox or panscan
-                       value = 2 # 12 V
-               elif aspect == 2: # 16:9
-                       value = 4 # auto
-               elif aspect == 3 or aspect == 4 or aspect == 5 or aspect == 6: # always 16:9
-                       value = 1 # 6V
-               eAVSwitch.getInstance().setSlowblank(value)
-
 def InitAVSwitch():
        config.av = ConfigSubsection()
        config.av.yuvenabled = ConfigBoolean(default=False)
index c5fa5f9810456c3ec051e4146c3edeb3e3f46ca8..f1f3fd9514ee532858a6d07e3b286cfd8091a35f 100644 (file)
@@ -8,7 +8,7 @@ class Console(object):
                self.callbacks = {}
                self.extra_args = {}
 
-       def ePopen(self, cmd, callback, extra_args=[]):
+       def ePopen(self, cmd, callback=None, extra_args=[]):
                name = cmd
                i = 0
                while self.appContainers.has_key(name):
@@ -21,7 +21,9 @@ class Console(object):
                self.appContainers[name] = eConsoleAppContainer()
                self.appContainers[name].dataAvail.append(boundFunction(self.dataAvailCB,name))
                self.appContainers[name].appClosed.append(boundFunction(self.finishedCB,name))
-               retval = self.appContainers[name].execute(cmd)
+               if isinstance(cmd, str): # until .execute supports a better api
+                       cmd = [cmd]
+               retval = self.appContainers[name].execute(*cmd)
                if retval:
                        self.finishedCB(name, retval)
 
@@ -50,5 +52,6 @@ class Console(object):
                extra_args = self.extra_args[name]
                del self.appContainers[name]
                del self.extra_args[name]
-               self.callbacks[name](data,retval,extra_args)
+               if self.callbacks[name]:
+                       self.callbacks[name](data,retval,extra_args)
                del self.callbacks[name]
index 966f2ca85617acb7a1b2f0e77fd45937db8f97d9..41f1ebf3d83786a19169d42c4d0b3ce0c508a31f 100644 (file)
@@ -1,7 +1,7 @@
 from Converter import Converter
 from Poll import Poll
 from time import time
-from Components.Element import cached
+from Components.Element import cached, ElementError
 
 class EventTime(Poll, Converter, object):
        STARTTIME = 0
@@ -28,7 +28,7 @@ class EventTime(Poll, Converter, object):
                        self.poll_interval = 30*1000
                        self.poll_enabled = True
                else:
-                       raise str("'%s' is not <StartTime|EndTime|Remaining|Duration|Progress> for EventTime converter" % type)
+                       raise ElementError("'%s' is not <StartTime|EndTime|Remaining|Duration|Progress> for EventTime converter" % type)
 
        @cached
        def getTime(self):
index 068d24d3a73f84f2d47a6e8475f544cc5e913f80..be28dcce04e8ce098f33df25133ec4fdd7abd730 100644 (file)
@@ -1,5 +1,5 @@
 from Components.Converter.Converter import Converter
-from Components.Element import cached
+from Components.Element import cached, ElementError
 from enigma import iServiceInformation
 from ServiceReference import ServiceReference
 
@@ -16,7 +16,7 @@ class MovieInfo(Converter, object):
                elif type == "RecordServiceName":
                        self.type = self.MOVIE_REC_SERVICE_NAME
                else:
-                       raise str("'%s' is not <ShortDescription|MetaDescription|RecordServiceName> for MovieInfo converter" % type)
+                       raise ElementError("'%s' is not <ShortDescription|MetaDescription|RecordServiceName> for MovieInfo converter" % type)
                Converter.__init__(self, type)
 
        @cached
index adefe9cfd93c830c875213f989d9daf8ec2be0fe..4249e30afefb8e8dd867281dc0079cb7e9917353 100644 (file)
@@ -2,19 +2,43 @@ from Components.Converter.Converter import Converter
 from Components.Element import cached
 
 class RemainingToText(Converter, object):
+       DEFAULT = 0
+       WITH_SECONDS = 1
+       NO_SECONDS = 2
+
        def __init__(self, type):
                Converter.__init__(self, type)
+               if type == "WithSeconds":
+                       self.type = self.WITH_SECONDS
+               elif type == "NoSeconds":
+                       self.type = self.NO_SECONDS
+               else:
+                       self.type = self.DEFAULT
 
        @cached
        def getText(self):
-               r = self.source.time
-               if r is None:
+               time = self.source.time
+               if time is None:
                        return ""
 
                (duration, remaining) = self.source.time
-               if remaining is not None:
-                       return "+%d min" % (remaining / 60)
+
+               if self.type == self.WITH_SECONDS:
+                       if remaining is not None:
+                               return "%d:%02d:%02d" % (remaining / 3600, (remaining / 60) - ((remaining / 3600) * 60), remaining % 60)
+                       else:
+                               return "%02d:%02d:%02d" % (duration / 3600, (duration / 60) - ((duration / 3600) * 60), duration % 60)
+               elif self.type == self.NO_SECONDS:
+                       if remaining is not None:
+                               return "+%d:%02d" % (remaining / 3600, (remaining / 60) - ((remaining / 3600) * 60))
+                       else:
+                               return "%02d:%02d" % (duration / 3600, (duration / 60) - ((duration / 3600) * 60))
+               elif self.type == self.DEFAULT:
+                       if remaining is not None:
+                               return "+%d min" % (remaining / 60)
+                       else:
+                               return "%d min" % (duration / 60)
                else:
-                       return "%d min" % (duration / 60)
+                       return "???"
 
        text = property(getText)
index b488258b11a822926cb351cc6c9cbb7cf6a213cb..2bcc54929eb4ca3cbb1d28e1f91033f8b16a0750 100644 (file)
@@ -1,7 +1,7 @@
 from Converter import Converter
 from Poll import Poll
 from enigma import iPlayableService
-from Components.Element import cached
+from Components.Element import cached, ElementError
 
 class ServicePosition(Converter, Poll, object):
        TYPE_LENGTH = 0
@@ -19,6 +19,7 @@ class ServicePosition(Converter, Poll, object):
                self.negate = 'Negate' in args
                self.detailed = 'Detailed' in args
                self.showHours = 'ShowHours' in args
+               self.showNoSeconds = 'ShowNoSeconds' in args
 
                if self.detailed:
                        self.poll_interval = 100
@@ -34,7 +35,7 @@ class ServicePosition(Converter, Poll, object):
                elif type == "Gauge":
                        self.type = self.TYPE_GAUGE
                else:
-                       raise "type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours}"
+                       raise ElementError("type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|NoSeconds}")
 
                self.poll_enabled = self.type != self.TYPE_LENGTH
 
@@ -94,9 +95,15 @@ class ServicePosition(Converter, Poll, object):
 
                        if not self.detailed:
                                if self.showHours:
-                                       return sign + "%d:%02d:%02d" % (l/3600, l%3600/60, l%60)
+                                       if self.showNoSeconds:
+                                               return sign + "%d:%02d" % (l/3600, l%3600/60)
+                                       else:
+                                               return sign + "%d:%02d:%02d" % (l/3600, l%3600/60, l%60)
                                else:
-                                       return sign + "%d:%02d" % (l/60, l%60)
+                                       if self.showNoSeconds:
+                                               return sign + "%d" % (l/60)
+                                       else:
+                                               return sign + "%d:%02d" % (l/60, l%60)
                        else:
                                if self.showHours:
                                        return sign + "%d:%02d:%02d:%03d" % ((l/3600/90000), (l/90000)%3600/60, (l/90000)%60, (l%90000)/90)
index 16bcae3a9c67d5583798b8a712cf617b32a139a0..89965067803779d6e95953b23698ae4d9ceb2349 100644 (file)
@@ -1,5 +1,5 @@
 from Converter import Converter
-from Components.Element import cached
+from Components.Element import cached, ElementError
 from enigma import iServiceInformation
 
 class ServiceTime(Converter, object):
@@ -16,7 +16,7 @@ class ServiceTime(Converter, object):
                elif type == "Duration":
                        self.type = self.DURATION
                else:
-                       raise str("'%s' is not <StartTime|EndTime|Duration> for eEventTime converter" % type)
+                       raise ElementError("'%s' is not <StartTime|EndTime|Duration> for eEventTime converter" % type)
 
        @cached
        def getTime(self):
index a1b601d66002b04ee4d8195f513d59a2a79692a0..5f1d4f249085f1e1edd86b2be7da5633acf73250 100644 (file)
@@ -5,22 +5,27 @@ class TemplatedMultiContent(StringList):
        def __init__(self, args):
                StringList.__init__(self, args)
                from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, RT_HALIGN_CENTER, RT_HALIGN_RIGHT, RT_VALIGN_TOP, RT_VALIGN_CENTER, RT_VALIGN_BOTTOM
-               from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmap, MultiContentEntryPixmapAlphaTest
+               from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmap, MultiContentEntryPixmapAlphaTest, MultiContentTemplateColor
                l = locals()
                del l["self"] # cleanup locals a bit
                del l["args"]
 
                self.template = eval(args, {}, l)
+               self.active_style = None
                assert "fonts" in self.template
                assert "itemHeight" in self.template
-               assert "template" in self.template
+               assert "template" in self.template or "templates" in self.template
+               assert "template" in self.template or "default" in self.template["templates"] # we need to have a default template
+
+               if not "template" in self.template: # default template can be ["template"] or ["templates"]["default"]
+                       self.template["template"] = self.template["templates"]["default"]
 
        def changed(self, what):
                if not self.content:
                        from enigma import eListboxPythonMultiContent
                        self.content = eListboxPythonMultiContent()
                        self.content.setItemHeight(self.template["itemHeight"])
-                       self.content.setTemplate(self.template["template"])
+                       self.setTemplate()
 
                        # also setup fonts (also given by source)
                        index = 0
@@ -28,7 +33,28 @@ class TemplatedMultiContent(StringList):
                                self.content.setFont(index, f)
                                index += 1
 
+               # if only template changed, don't reload list
+               if what[0] == self.CHANGED_SPECIFIC and what[1] == "style":
+                       self.setTemplate()
+                       return
+                       
                if self.source:
                        self.content.setList(self.source.list)
+                       self.setTemplate()
 
                self.downstream_elements.changed(what)
+
+       def setTemplate(self):
+               if self.source:
+                       style = self.source.style
+                       if style == self.active_style:
+                               return # style did not change
+
+                       # if skin defined "templates", that means that it defines multiple styles in a dict. template should still be a default 
+                       templates = self.template.get("templates")
+                       template = self.template.get("template")
+
+                       if templates and style: # if we have a custom style defined in the source, and different templates in the skin, look it up
+                               template = templates.get(self.source.style, template) # default to default template
+
+                       self.content.setTemplate(template)
index 2af5779351b6f192a233ca455a6b63a66995c3d0..f4a8f1275d346d88b990690a696bf5b179b833b5 100644 (file)
@@ -16,6 +16,13 @@ def cached(f):
                return cache[name][1]
        return wrapper
 
+class ElementError(Exception):
+    def __init__(self, message):
+        self.message = message
+
+    def __str__(self):
+        return self.message
+
 class Element(object):
        CHANGED_DEFAULT = 0   # initial "pull" state
        CHANGED_ALL = 1       # really everything changed
index dbcd572b713a87095f431211869c0ef74b34504b..8a7c8d45e9f472b6aab88663fc8839279f3e71bb 100644 (file)
@@ -52,6 +52,10 @@ class EPGList(HTMLComponent, GUIComponent):
                        self.l.setBuildFunc(self.buildSimilarEntry)
                self.epgcache = eEPGCache.getInstance()
                self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png'))
 
        def getEventFromId(self, service, eventid):
                event = None
@@ -60,7 +64,7 @@ class EPGList(HTMLComponent, GUIComponent):
                return event
 
        def getCurrentChangeCount(self):
-               if self.type == EPG_TYPE_MULTI:
+               if self.type == EPG_TYPE_MULTI and self.l.getCurrentSelection() is not None:
                        return self.l.getCurrentSelection()[0]
                return 0
 
@@ -92,11 +96,12 @@ class EPGList(HTMLComponent, GUIComponent):
        def selectionChanged(self):
                for x in self.onSelChanged:
                        if x is not None:
-                               try:
-                                       x()
-                               except: # FIXME!!!
-                                       print "FIXME in EPGList.selectionChanged"
-                                       pass
+                               x()
+#                              try:
+#                                      x()
+#                              except: # FIXME!!!
+#                                      print "FIXME in EPGList.selectionChanged"
+#                                      pass
 
        GUI_WIDGET = eListbox
 
@@ -135,8 +140,32 @@ class EPGList(HTMLComponent, GUIComponent):
                        self.datetime_rect = Rect(width/20*2, 0, width/20*5-15, height)
                        self.service_rect = Rect(width/20*7, 0, width/20*13, height)
 
+       def getClockPixmap(self, refstr, beginTime, duration, eventId):
+               pre_clock = 1
+               post_clock = 2
+               clock_type = 0
+               endTime = beginTime + duration
+               for x in self.timer.timer_list:
+                       if x.service_ref.ref.toString() == refstr:
+                               if x.eit == eventId:
+                                       return self.clock_pixmap
+                               beg = x.begin
+                               end = x.end
+                               if beginTime > beg and beginTime < end and endTime > end:
+                                       clock_type |= pre_clock
+                               elif beginTime < beg and endTime > beg and endTime < end:
+                                       clock_type |= post_clock
+               if clock_type == 0:
+                       return self.clock_add_pixmap
+               elif clock_type == pre_clock:
+                       return self.clock_pre_pixmap
+               elif clock_type == post_clock:
+                       return self.clock_post_pixmap
+               else:
+                       return self.clock_prepost_pixmap
+
        def buildSingleEntry(self, service, eventId, beginTime, duration, EventName):
-               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) 
+               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service))
                r1=self.weekday_rect
                r2=self.datetime_rect
                r3=self.descr_rect
@@ -145,14 +174,15 @@ class EPGList(HTMLComponent, GUIComponent):
                res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]]))
                res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4])))
                if rec:
-                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap))
+                       clock_pic = self.getClockPixmap(service, beginTime, duration, eventId)
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic))
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName))
                else:
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName))
                return res
 
        def buildSimilarEntry(self, service, eventId, beginTime, service_name, duration):
-               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) 
+               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service))
                r1=self.weekday_rect
                r2=self.datetime_rect
                r3=self.service_rect
@@ -161,22 +191,24 @@ class EPGList(HTMLComponent, GUIComponent):
                res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]]))
                res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4])))
                if rec:
-                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap))
+                       clock_pic = self.getClockPixmap(service, beginTime, duration, eventId)
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic))
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name))
                else:
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name))
                return res
 
        def buildMultiEntry(self, changecount, service, eventId, begTime, duration, EventName, nowTime, service_name):
-               rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service) > ((duration/10)*8))
+               rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service))
                r1=self.service_rect
                r2=self.progress_rect
                r3=self.descr_rect
                r4=self.start_end_rect
                res = [ None ] # no private data needed
                if rec:
+                       clock_pic = self.getClockPixmap(service, begTime, duration, eventId)
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, service_name))
-                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, self.clock_pixmap))
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, clock_pic))
                else:
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, service_name))
                if begTime is not None:
@@ -252,6 +284,12 @@ class EPGList(HTMLComponent, GUIComponent):
                x = self.l.getCurrentSelection()
                return x and x[1]
 
+       def moveToService(self,serviceref):
+               for x in range(len(self.list)):
+                       if self.list[x][1] == serviceref.toString():
+                               self.instance.moveSelectionTo(x)
+                               break
+                       
        def moveToEventId(self, eventId):
                index = 0
                for x in self.list:
index e028ec3a1864c8a4c64cc50f3a548678d260c465..84abf32863b1bdd14b03290a2fae2c6f3447910f 100644 (file)
@@ -10,6 +10,7 @@ from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, \
 from Tools.LoadPixmap import LoadPixmap
 
 EXTENSIONS = {
+               "m4a": "music",
                "mp2": "music",
                "mp3": "music",
                "wav": "music",
@@ -21,6 +22,7 @@ EXTENSIONS = {
                "bmp": "picture",
                "ts": "movie",
                "avi": "movie",
+               "divx": "movie",
                "mpg": "movie",
                "mpeg": "movie",
                "mkv": "movie",
@@ -117,8 +119,6 @@ class FileList(MenuList):
        def changeDir(self, directory, select = None):
                self.list = []
 
-               if directory and not os_path.isdir(directory):
-                       directory = None
                # if we are just entering from the list of mount points:
                if self.current_directory is None:
                        if directory and self.showMountpoints:
@@ -136,6 +136,9 @@ class FileList(MenuList):
                                        self.list.append(FileEntryComponent(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:
index f7c3a7cb4ffdbf22f884eb4ef16b709f11aaf2b6..6c6c3c6c9a579b093acf87884e565aea0baa4541 100644 (file)
@@ -2,6 +2,8 @@ from os import system, listdir, statvfs, popen, makedirs, readlink, stat, major,
 from Tools.Directories import SCOPE_HDD, resolveFilename
 from Tools.CList import CList
 from SystemInfo import SystemInfo
+import string, time
+from Components.Console import Console
 
 def tryOpen(filename):
        try:
@@ -17,22 +19,33 @@ class Harddisk:
                tmp = procfile.readline().split(':')
                s_major = int(tmp[0])
                s_minor = int(tmp[1])
+               self.max_idle_time = 0
+               self.idle_running = False
+               self.timer = None
                for disc in listdir("/dev/discs"):
                        path = readlink('/dev/discs/'+disc)
-                       devidex = '/dev'+path[2:]+'/'
-                       disc = devidex+'disc'
+                       devidex = '/dev/discs/'+disc+'/'
+                       devidex2 = '/dev'+path[2:]+'/'
+                       disc = devidex2+'disc'
                        ret = stat(disc).st_rdev
                        if s_major == major(ret) and s_minor == minor(ret):
                                self.devidex = devidex
-                               print "new Harddisk",  device, self.devidex
+                               self.devidex2 = devidex2
+                               print "new Harddisk", device, '->', self.devidex, '->', self.devidex2
+                               self.startIdle()
                                break
 
        def __lt__(self, ob):
                return self.device < ob.device
 
+       def stop(self):
+               if self.timer:
+                       self.timer.stop()
+                       self.timer.callback.remove(self.runIdle)
+
        def bus(self):
-               ide_cf = self.device.find("hd") == 0 and self.devidex.find("host0") == -1 # 7025 specific
-               internal = self.device.find("hd") == 0 and self.devidex
+               ide_cf = self.device.find("hd") == 0 and self.devidex2.find("host0") == -1 # 7025 specific
+               internal = self.device.find("hd") == 0
                if ide_cf:
                        ret = "External (CF)"
                elif internal:
@@ -90,7 +103,7 @@ class Harddisk:
                        line = procfile.readline()
                        if line == "":
                                break
-                       if line.startswith(self.devidex):
+                       if line.startswith(self.devidex) or line.startswith(self.devidex2):
                                parts = line.strip().split(" ")
                                try:
                                        stat = statvfs(parts[1])
@@ -123,7 +136,7 @@ class Harddisk:
                cmd = "/bin/umount"
 
                for line in procfile:
-                       if line.startswith(self.devidex):
+                       if line.startswith(self.devidex) or line.startswith(self.devidex2):
                                parts = line.split()
                                cmd = ' '.join([cmd, parts[1]])
 
@@ -210,12 +223,77 @@ class Harddisk:
        def getDeviceName(self):
                return self.getDeviceDir() + "disc"
 
+       # the HDD idle poll daemon.
+       # as some harddrives have a buggy standby timer, we are doing this by hand here.
+       # first, we disable the hardware timer. then, we check every now and then if
+       # any access has been made to the disc. If there has been no access over a specifed time,
+       # we set the hdd into standby.
+       def readStats(self):
+               l = open("/sys/block/%s/stat" % self.device).read()
+               nr_read = int(l[:8].strip())
+               nr_write = int(l[4*9:4*9+8].strip())
+               return nr_read, nr_write
+
+       def startIdle(self):
+               self.last_access = time.time()
+               self.last_stat = 0
+               self.is_sleeping = False
+               from enigma import eTimer
+
+               # disable HDD standby timer
+               Console().ePopen(("hdparm", "hdparm", "-S0", (self.devidex + "disc")))
+               self.timer = eTimer()
+               self.timer.callback.append(self.runIdle)
+               self.idle_running = True
+               self.setIdleTime(self.max_idle_time) # kick the idle polling loop
+
+       def runIdle(self):
+               if not self.max_idle_time:
+                       return
+               t = time.time()
+
+               idle_time = t - self.last_access
+
+               stats = self.readStats()
+               print "nr_read", stats[0], "nr_write", stats[1]
+               l = sum(stats)
+               print "sum", l, "prev_sum", self.last_stat
+
+               if l != self.last_stat: # access
+                       print "hdd was accessed since previous check!"
+                       self.last_stat = l
+                       self.last_access = t
+                       idle_time = 0
+                       self.is_sleeping = False
+               else:
+                       print "hdd IDLE!"
+
+               print "[IDLE]", idle_time, self.max_idle_time, self.is_sleeping
+               if idle_time >= self.max_idle_time and not self.is_sleeping:
+                       self.setSleep()
+                       self.is_sleeping = True
+
+       def setSleep(self):
+               Console().ePopen(("hdparm", "hdparm", "-y", (self.devidex + "disc")))
+
+       def setIdleTime(self, idle):
+               self.max_idle_time = idle
+               if self.idle_running:
+                       if not idle:
+                               self.timer.stop()
+                       else:
+                               self.timer.start(idle * 100, False)  # poll 10 times per period.
+
+       def isSleeping(self):
+               return self.is_sleeping
+
 class Partition:
-       def __init__(self, mountpoint, description = "", force_mounted = False):
+       def __init__(self, mountpoint, device = None, description = "", force_mounted = False):
                self.mountpoint = mountpoint
                self.description = description
                self.force_mounted = force_mounted
                self.is_hotplug = force_mounted # so far; this might change.
+               self.device = device
 
        def stat(self):
                return statvfs(self.mountpoint)
@@ -245,6 +323,15 @@ class Partition:
                                return True
                return False
 
+DEVICEDB =  \
+       {
+               # dm8000:
+               "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.1/1-1.1:1.0": "Front USB Slot",
+               "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0": "Back, upper USB Slot",
+               "/devices/platform/brcm-ehci.0/usb1/1-1/1-1.3/1-1.3:1.0": "Back, lower USB Slot",
+               "/devices/platform/brcm-ehci-1.1/usb2/2-1/2-1:1.0/host1/target1:0:0/1:0:0:0": "DVD Drive",
+       }
+
 class HarddiskManager:
        def __init__(self):
                self.hdd = [ ]
@@ -305,37 +392,62 @@ class HarddiskManager:
                                self.cd = blockdev
                except IOError:
                        error = True
-               return error, blacklisted, removable, is_cdrom, partitions
+               # check for medium
+               medium_found = True
+               try:
+                       open("/dev/" + blockdev).close()
+               except IOError, err:
+                       if err.errno == 159: # no medium present
+                               medium_found = False
+                       
+               return error, blacklisted, removable, is_cdrom, partitions, medium_found
 
        def enumerateBlockDevices(self):
                print "enumerating block devices..."
                for blockdev in listdir("/sys/block"):
-                       error, blacklisted, removable, is_cdrom, partitions = self.getBlockDevInfo(blockdev)
+                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(blockdev)
                        print "found block device '%s':" % blockdev, 
                        if error:
                                print "error querying properties"
                        elif blacklisted:
                                print "blacklisted"
+                       elif not medium_found:
+                               print "no medium"
                        else:
                                print "ok, removable=%s, cdrom=%s, partitions=%s, device=%s" % (removable, is_cdrom, partitions, blockdev)
-                               self.addHotplugPartition(blockdev, blockdev)
+
+                               self.addHotplugPartition(blockdev)
                                for part in partitions:
-                                       self.addHotplugPartition(part, part)
+                                       self.addHotplugPartition(part)
 
        def getAutofsMountpoint(self, device):
                return "/autofs/%s/" % (device)
 
-       def addHotplugPartition(self, device, description):
-               p = Partition(mountpoint = self.getAutofsMountpoint(device), description = description, force_mounted = True)
+       def addHotplugPartition(self, device, physdev = None):
+               if not physdev:
+                       dev, part = self.splitDeviceName(device)
+                       try:
+                               physdev = readlink("/sys/block/" + dev + "/device")[5:]
+                       except OSError:
+                               physdev = dev
+                               print "couldn't determine blockdev physdev for device", device
+
+               # device is the device name, without /dev 
+               # physdev is the physical device path, which we (might) use to determine the userfriendly name
+               description = self.getUserfriendlyDeviceName(device, physdev)
+               
+               p = Partition(mountpoint = self.getAutofsMountpoint(device), description = description, force_mounted = True, device = device)
                self.partitions.append(p)
                self.on_partition_list_change("add", p)
+
+               # see if this is a harddrive
                l = len(device)
-               if l and device[l-1] not in ('0','1','2','3','4','5','6','7','8','9'):
-                       error, blacklisted, removable, is_cdrom, partitions = self.getBlockDevInfo(device)
-                       if not blacklisted and not removable and not is_cdrom:
+               if l and device[l-1] not in string.digits:
+                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
+                       if not blacklisted and not removable and not is_cdrom and medium_found:
                                self.hdd.append(Harddisk(device))
                                self.hdd.sort()
-                               SystemInfo["Harddisc"] = len(self.hdd) > 0
+                               SystemInfo["Harddisk"] = len(self.hdd) > 0
 
        def removeHotplugPartition(self, device):
                mountpoint = self.getAutofsMountpoint(device)
@@ -344,13 +456,14 @@ class HarddiskManager:
                                self.partitions.remove(x)
                                self.on_partition_list_change("remove", x)
                l = len(device)
-               if l and device[l-1] not in ('0','1','2','3','4','5','6','7','8','9'):
+               if l and device[l-1] not in string.digits:
                        idx = 0
                        for hdd in self.hdd:
                                if hdd.device == device:
+                                       self.hdd[x].stop()
                                        del self.hdd[idx]
                                        break
-                       SystemInfo["Harddisc"] = len(self.hdd) > 0
+                       SystemInfo["Harddisk"] = len(self.hdd) > 0
 
        def HDDCount(self):
                return len(self.hdd)
@@ -369,6 +482,41 @@ class HarddiskManager:
                return self.cd
 
        def getMountedPartitions(self, onlyhotplug = False):
-               return [x for x in self.partitions if (x.is_hotplug or not onlyhotplug) and x.mounted()]
+               parts = [x for x in self.partitions if (x.is_hotplug or not onlyhotplug) and x.mounted()]
+               devs = set([x.device for x in parts])
+               for devname in devs.copy():
+                       if not devname:
+                               continue
+                       dev, part = self.splitDeviceName(devname)
+                       if part and dev in devs: # if this is a partition and we still have the wholedisk, remove wholedisk
+                               devs.remove(dev)
+
+               # return all devices which are not removed due to being a wholedisk when a partition exists
+               return [x for x in parts if not x.device or x.device in devs]
+
+       def splitDeviceName(self, devname):
+               # this works for: sdaX, hdaX, sr0 (which is in fact dev="sr0", part=""). It doesn't work for other names like mtdblock3, but they are blacklisted anyway.
+               dev = devname[:3]
+               part = devname[3:]
+               for p in part:
+                       if p not in string.digits:
+                               return devname, 0
+               return dev, part and int(part) or 0
+
+       def getUserfriendlyDeviceName(self, dev, phys):
+               dev, part = self.splitDeviceName(dev)
+               description = "External Storage %s" % dev
+               try:
+                       description = open("/sys" + phys + "/model").read().strip()
+               except IOError, s:
+                       print "couldn't read model: ", s
+               for physdevprefix, pdescription in DEVICEDB.items():
+                       if phys.startswith(physdevprefix):
+                               description = pdescription
+
+               # not wholedisk and not partition 1
+               if part and part != 1:
+                       description += " (Partition %d)" % part
+               return description
 
 harddiskmanager = HarddiskManager()
index 6d1e31f304508217e48211ce2ffb8532b2d6f734..395f68298cf47652b64a2934bbee0a719d71e01f 100644 (file)
@@ -36,6 +36,7 @@ class Language:
                self.addLanguage(_("Swedish"), "sv", "SE")
                self.addLanguage(_("Turkish"), "tr", "TR")
                self.addLanguage(_("Ukrainian"), "uk", "UA")
+               self.addLanguage(_("Frisian"), "fy", "x-FY") # there is no separate country for frisian
 
                self.callbacks = []
 
index fda58bf3cc5abee90d9fd0521897eecd8dfc2f53..67cec18dd5e56ff9a8e541842db8df2146ef708b 100644 (file)
@@ -18,4 +18,4 @@ install_PYTHON = \
        MultiContent.py MediaPlayer.py TunerInfo.py VideoWindow.py ChoiceList.py \
        Element.py Playlist.py ParentalControl.py ParentalControlList.py \
        Ipkg.py SelectionList.py Scanner.py SystemInfo.py DreamInfoHandler.py \
-       Task.py language_cache.py Console.py
+       Task.py language_cache.py Console.py ResourceManager.py TuneTest.py
index 8568f3d626926ad1fa68c0e4508136f7869c0aa4..5c98e4be5d6d344b951a21b95da646e5538607f3 100644 (file)
@@ -93,10 +93,7 @@ class MovieList(GUIComponent):
                if len > 0:
                        len = "%d:%02d" % (len / 60, len % 60)
                else:
-                       if config.usage.load_length_of_movies_in_moviellist.value:
-                               len = "?:??"
-                       else:
-                               len = "X:XX"
+                       len = ""
                
                res = [ None ]
                
index 71096df88fc9c4a9374f3ed3e9fc25485ffd94bf..ff0219ffc3d5aeb4646fc1afa1aedfa7da3774aa 100644 (file)
@@ -1,5 +1,7 @@
 from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_VALIGN_TOP
 
+def MultiContentTemplateColor(n): return 0xff000000 | n
+
 def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP, text = "", color = None, color_sel = None, backcolor = None, backcolor_sel = None, border_width = None, border_color = None):
        return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color)
 
index f4e91083e351d6382a0ed9f43785bea07668230a..4be10d53957536557d9ccaa5fcd484e231a0294e 100644 (file)
@@ -14,8 +14,6 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
 from time import localtime, mktime
 from datetime import datetime
 
-from sets import Set
-
 def getConfigSatlist(orbpos, satlist):
        default_orbpos = None
        for x in satlist:
@@ -39,7 +37,7 @@ class SecConfigure:
                sec.addSatellite(orbpos)
                self.configuredSatellites.add(orbpos)
 
-       def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50, fastDiSEqC = False, setVoltageTone = True):
+       def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50, fastDiSEqC = False, setVoltageTone = True, diseqc13V = False):
                if orbpos is None or orbpos == 3601:
                        return
                #simple defaults
@@ -51,6 +49,8 @@ class SecConfigure:
                elif self.linked.has_key(slotid):
                        for slot in self.linked[slotid]:
                                tunermask |= (1 << slot)
+               sec.setLNBSatCR(-1)
+               sec.setLNBNum(1)
                sec.setLNBLOFL(9750000)
                sec.setLNBLOFH(10600000)
                sec.setLNBThreshold(11700000)
@@ -70,7 +70,10 @@ class SecConfigure:
                if 0 <= diseqcmode < 3:
                        self.addSatellite(sec, orbpos)
                        if setVoltageTone:
-                               sec.setVoltageMode(switchParam.HV)
+                               if diseqc13V:
+                                       sec.setVoltageMode(switchParam.HV_13)
+                               else:
+                                       sec.setVoltageMode(switchParam.HV)
                                sec.setToneMode(switchParam.HILO)
                        else:
                                sec.setVoltageMode(switchParam._14V)
@@ -90,7 +93,10 @@ class SecConfigure:
                        for x in self.NimManager.satList:
                                print "Add sat " + str(x[0])
                                self.addSatellite(sec, int(x[0]))
-                               sec.setVoltageMode(switchParam.HV)
+                               if diseqc13V:
+                                       sec.setVoltageMode(switchParam.HV_13)
+                               else:
+                                       sec.setVoltageMode(switchParam.HV)
                                sec.setToneMode(switchParam.HILO)
                                sec.setRotorPosNum(0) # USALS
                
@@ -115,7 +121,7 @@ class SecConfigure:
 
        def update(self):
                sec = secClass.getInstance()
-               self.configuredSatellites = Set()
+               self.configuredSatellites = set()
                sec.clear() ## this do unlinking NIMs too !!
                print "sec config cleared"
 
@@ -172,24 +178,24 @@ class SecConfigure:
                                                print "diseqcmode: ", nim.diseqcMode.value
                                                if nim.diseqcMode.value == "single":                    #single
                                                        if nim.simpleSingleSendDiSEqC.value:
-                                                               self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA)
+                                                               self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, diseqc13V = nim.diseqc13V.value)
                                                        else:
-                                                               self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO)
+                                                               self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value)
                                                elif nim.diseqcMode.value == "toneburst_a_b":           #Toneburst A/B
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO)
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value)
                                                elif nim.diseqcMode.value == "diseqc_a_b":              #DiSEqC A/B
                                                        fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value
                                                        setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
                                                elif nim.diseqcMode.value == "diseqc_a_b_c_d":          #DiSEqC A/B/C/D
                                                        fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value
                                                        setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
-                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
+                                                       self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value)
                                                elif nim.diseqcMode.value == "positioner":              #Positioner
                                                        if nim.latitudeOrientation.value == "north":
                                                                laValue = rotorParam.NORTH
@@ -219,7 +225,8 @@ class SecConfigure:
                                                                laDirection = laValue,
                                                                turningSpeed = turning_speed,
                                                                useInputPower = useInputPower,
-                                                               inputPowerDelta = inputPowerDelta)
+                                                               inputPowerDelta = inputPowerDelta,
+                                                               diseqc13V = nim.diseqc13V.value)
                                        elif nim.configMode.value == "advanced": #advanced config
                                                self.updateAdvanced(sec, x)
                print "sec config completed"
@@ -248,6 +255,9 @@ class SecConfigure:
                                currLnb = config.Nims[slotid].advanced.lnb[x]
                                sec.addLNB()
 
+                               if x < 33:
+                                       sec.setLNBNum(x)
+
                                tunermask = 1 << slotid
                                if self.equal.has_key(slotid):
                                        for slot in self.equal[slotid]:
@@ -256,10 +266,32 @@ class SecConfigure:
                                        for slot in self.linked[slotid]:
                                                tunermask |= (1 << slot)
 
+                               if currLnb.lof.value != "unicable":
+                                       sec.setLNBSatCR(-1)
+
                                if currLnb.lof.value == "universal_lnb":
                                        sec.setLNBLOFL(9750000)
                                        sec.setLNBLOFH(10600000)
                                        sec.setLNBThreshold(11700000)
+                               elif currLnb.lof.value == "unicable":
+                                       sec.setLNBLOFL(9750000)
+                                       sec.setLNBLOFH(10600000)
+                                       sec.setLNBThreshold(11700000)
+                                       if currLnb.unicable.value == "unicable_user":
+                                               sec.setLNBSatCR(currLnb.satcruser.index)
+                                               sec.setLNBSatCRvco(currLnb.satcrvcouser[currLnb.satcruser.index].value*1000)
+                                       elif currLnb.unicable.value == "unicable_matrix":
+                                               manufacturer_name = currLnb.unicableMatrixManufacturer.value
+                                               manufacturer = currLnb.unicableMatrix[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)
+                                       elif currLnb.unicable.value == "unicable_lnb":
+                                               manufacturer_name = currLnb.unicableMatrixManufacturer.value
+                                               manufacturer = currLnb.unicableMatrix[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)
                                elif currLnb.lof.value == "c_band":
                                        sec.setLNBLOFL(5150000)
                                        sec.setLNBLOFH(5150000)
@@ -374,6 +406,8 @@ class SecConfigure:
 
                                sec.setLNBSlotMask(tunermask)
 
+                               sec.setLNBPrio(int(currLnb.prio.value))
+
                                # finally add the orbital positions
                                for y in lnbSat[x]:
                                        self.addSatellite(sec, y)
@@ -383,7 +417,10 @@ class SecConfigure:
                                                satpos = y
                                        currSat = config.Nims[slotid].advanced.sat[satpos]
                                        if currSat.voltage.value == "polarization":
-                                               sec.setVoltageMode(switchParam.HV)
+                                               if config.Nims[slotid].diseqc13V.value:
+                                                       sec.setVoltageMode(switchParam.HV_13)
+                                               else:
+                                                       sec.setVoltageMode(switchParam.HV)
                                        elif currSat.voltage.value == "13V":
                                                sec.setVoltageMode(switchParam._14V)
                                        elif currSat.voltage.value == "18V":
@@ -403,7 +440,7 @@ class SecConfigure:
 
        def __init__(self, nimmgr):
                self.NimManager = nimmgr
-               self.configuredSatellites = Set()
+               self.configuredSatellites = set()
                self.update()
 
 class NIM(object):
@@ -880,61 +917,197 @@ def InitNimManager(nimmgr):
        for x in range(len(nimmgr.nim_slots)):
                config.Nims.append(ConfigSubsection())
 
+       lnb_choices = {
+               "universal_lnb": _("Universal LNB"),
+               "unicable": _("Unicable"),
+               "c_band": _("C-Band"),
+               "user_defined": _("User defined")}
+       lnb_choices_default = "universal_lnb"
+
+       unicablelnbproducts = {
+               "Humax": {"150 SCR":["1210","1420","1680","2040"]},
+               "Inverto": {"IDLP-40UNIQD+S":["1680","1420","2040","1210"]},
+               "Kathrein": {"UAS481":["1400","1516","1632","1748"]},
+               "Kreiling": {"KR1440":["1680","1420","2040","1210"]},
+               "Radix": {"Unicable LNB":["1680","1420","2040","1210"]},
+               "Wisi": {"OC 05":["1210","1420","1680","2040"]}}
+       UnicableLnbManufacturers = unicablelnbproducts.keys()
+       UnicableLnbManufacturers.sort()
+
+       unicablematrixproducts = {
+               "Ankaro": {
+                       "UCS 51440":["1400","1632","1284","1516"],
+                       "UCS 51820":["1400","1632","1284","1516","1864","2096","1748","1980"],
+                       "UCS 51840":["1400","1632","1284","1516","1864","2096","1748","1980"],
+                       "UCS 52240":["1400","1632"],
+                       "UCS 52420":["1400","1632","1284","1516"],
+                       "UCS 52440":["1400","1632","1284","1516"],
+                       "UCS 91440":["1400","1632","1284","1516"],
+                       "UCS 91820":["1400","1632","1284","1516","1864","2096","1748","1980"],
+                       "UCS 91840":["1400","1632","1284","1516","1864","2096","1748","1980"],
+                       "UCS 92240":["1400","1632"],
+                       "UCS 92420":["1400","1632","1284","1516"],
+                       "UCS 92440":["1400","1632","1284","1516"]},
+               "DCT Delta": {
+                       "SUM518":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "SUM918":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "SUM928":["1284","1400","1516","1632","1748","1864","1980","2096"]},
+               "Inverto": {
+                       "IDLP-UST11O-CUO1O-8PP":["1076","1178","1280","1382","1484","1586","1688","1790"]},
+               "Kathrein": {
+                       "EXR501":["1400","1516","1632","1748"],
+                       "EXR551":["1400","1516","1632","1748"],
+                       "EXR552":["1400","1516"]},
+               "ROTEK": {
+                       "EKL2/1":["1400","1516"],
+                       "EKL2/1E":["0","0","1632","1748"]},
+               "Smart": {
+                       "DPA 51":["1284","1400","1516","1632","1748","1864","1980","2096"]},
+               "Technisat": {
+                       "TechniRouter 5/1x8 G":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "TechniRouter 5/1x8 K":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "TechniRouter 5/2x4 G":["1284","1400","1516","1632"],
+                       "TechniRouter 5/2x4 K":["1284","1400","1516","1632"]},
+               "Telstar": {
+                       "SCR 5/1x8 G":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "SCR 5/1x8 K":["1284","1400","1516","1632","1748","1864","1980","2096"],
+                       "SCR 5/2x4 G":["1284","1400","1516","1632"],
+                       "SCR 5/2x4 K":["1284","1400","1516","1632"]}}
+       UnicableMatrixManufacturers = unicablematrixproducts.keys()
+       UnicableMatrixManufacturers.sort()
+
+       unicable_choices = {
+               "unicable_lnb": _("Unicable LNB"),
+               "unicable_matrix": _("Unicable Martix"),
+               "unicable_user": "Unicable "+_("User defined")}
+       unicable_choices_default = "unicable_lnb"
+
+       unicableLnb = ConfigSubDict()
+       for y in unicablelnbproducts:
+               products = unicablelnbproducts[y].keys()
+               products.sort()
+               unicableLnb[y] = ConfigSubsection()
+               unicableLnb[y].product = ConfigSelection(choices = products, default = products[0])
+               unicableLnb[y].scr = ConfigSubDict()
+               unicableLnb[y].vco = ConfigSubDict()
+               for z in products:
+                       scrlist = []
+                       vcolist = unicablelnbproducts[y][z]
+                       unicableLnb[y].vco[z] = ConfigSubList()
+                       for cnt in range(1,1+len(vcolist)):
+                               scrlist.append(("%d" %cnt,"SCR %d" %cnt))
+                               vcofreq = int(vcolist[cnt-1])
+                               unicableLnb[y].vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq)))
+                       unicableLnb[y].scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0])
+       
+       unicableMatrix = ConfigSubDict()
+       
+       for y in unicablematrixproducts:
+               products = unicablematrixproducts[y].keys()
+               products.sort()
+               unicableMatrix[y] = ConfigSubsection()
+               unicableMatrix[y].product = ConfigSelection(choices = products, default = products[0])
+               unicableMatrix[y].scr = ConfigSubDict()
+               unicableMatrix[y].vco = ConfigSubDict()
+               for z in products:
+                       scrlist = []
+                       vcolist = unicablematrixproducts[y][z]
+                       unicableMatrix[y].vco[z] = ConfigSubList()
+                       for cnt in range(1,1+len(vcolist)):
+                               vcofreq = int(vcolist[cnt-1])
+                               if vcofreq == 0:
+                                       scrlist.append(("%d" %cnt,"SCR %d " %cnt +_("not used")))
+                               else:
+                                       scrlist.append(("%d" %cnt,"SCR %d" %cnt))
+                               unicableMatrix[y].vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq)))
+                       unicableMatrix[y].scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0])
+
+       advanced_lnb_satcruser_choices = [ ("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"),
+                                       ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8")]
+
+       satcrvcouser = ConfigSubList()
+       satcrvcouser.append(ConfigInteger(default=1284, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1400, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1516, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1632, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1748, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1864, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=1980, limits = (0, 9999)))
+       satcrvcouser.append(ConfigInteger(default=2096, limits = (0, 9999)))
+       
+       prio_list = [ ("-1", _("Auto")) ]
+       prio_list += [(str(prio), str(prio)) for prio in range(65)+range(14000,14065)+range(19000,19065)]
+
+       advanced_lnb_csw_choices = [("none", _("None")), ("AA", _("AA")), ("AB", _("AB")), ("BA", _("BA")), ("BB", _("BB"))]
+       advanced_lnb_csw_choices += [(str(0xF0|y), "Input " + str(y+1)) for y in range(0, 16)]
+
+       advanced_lnb_ucsw_choices = [("0", _("None"))] + [(str(y), "Input " + str(y)) for y in range(1, 17)]
+
+       diseqc_mode_choices = [
+               ("single", _("Single")), ("toneburst_a_b", _("Toneburst A/B")),
+               ("diseqc_a_b", _("DiSEqC A/B")), ("diseqc_a_b_c_d", _("DiSEqC A/B/C/D")),
+               ("positioner", _("Positioner"))]
+
+       positioner_mode_choices = [("usals", _("USALS")), ("manual", _("manual"))]
+
+       diseqc_satlist_choices = [(3601, _('nothing connected'), 1)] + nimmgr.satList
+       
+       longitude_orientation_choices = [("east", _("East")), ("west", _("West"))]
+       latitude_orientation_choices = [("north", _("North")), ("south", _("South"))]
+       turning_speed_choices = [("fast", _("Fast")), ("slow", _("Slow")), ("fast epoch", _("Fast epoch"))]
+       
+       advanced_satlist_choices = nimmgr.satList + [
+               (3601, _('All Satellites')+' 1', 1), (3602, _('All Satellites')+' 2', 1),
+               (3603, _('All Satellites')+' 3', 1), (3604, _('All Satellites')+' 4', 1)]
+       advanced_lnb_choices = [("0", "not available")] + [(str(y), "LNB " + str(y)) for y in range(1, 33)]
+       advanced_voltage_choices = [("polarization", _("Polarization")), ("13V", _("13 V")), ("18V", _("18 V"))]
+       advanced_tonemode_choices = [("band", _("Band")), ("on", _("On")), ("off", _("Off"))]
+       advanced_lnb_toneburst_choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))]
+       advanced_lnb_allsat_diseqcmode_choices = [("1_2", _("1.2"))]
+       advanced_lnb_diseqcmode_choices = [("none", _("None")), ("1_0", _("1.0")), ("1_1", _("1.1")), ("1_2", _("1.2"))]
+       advanced_lnb_commandOrder1_0_choices = [("ct", "committed, toneburst"), ("tc", "toneburst, committed")]
+       advanced_lnb_commandOrder_choices = [
+               ("ct", "committed, toneburst"), ("tc", "toneburst, committed"),
+               ("cut", "committed, uncommitted, toneburst"), ("tcu", "toneburst, committed, uncommitted"),
+               ("uct", "uncommitted, committed, toneburst"), ("tuc", "toneburst, uncommitted, commmitted")]
+       advanced_lnb_diseqc_repeat_choices = [("none", _("None")), ("one", _("One")), ("two", _("Two")), ("three", _("Three"))]
+       advanced_lnb_fast_turning_btime = mktime(datetime(1970, 1, 1, 7, 0).timetuple());
+       advanced_lnb_fast_turning_etime = mktime(datetime(1970, 1, 1, 19, 0).timetuple());
        for slot in nimmgr.nim_slots:
                x = slot.slot
                nim = config.Nims[x]
                
                if slot.isCompatible("DVB-S"):
-                       choices = { "nothing": _("nothing connected"),
-                                       "simple": _("simple"),
-                                       "advanced": _("advanced")}
+                       config_mode_choices = [ ("nothing", _("nothing connected")),
+                               ("simple", _("simple")), ("advanced", _("advanced"))]
                        if len(nimmgr.getNimListOfType(slot.type, exception = x)) > 0:
-                               choices["equal"] = _("equal to")
-                               choices["satposdepends"] = _("second cable of motorized LNB")
+                               config_mode_choices.append(("equal", _("equal to")))
+                               config_mode_choices.append(("satposdepends", _("second cable of motorized LNB")))
                        if len(nimmgr.canConnectTo(x)) > 0:
-                               choices["loopthrough"] = _("loopthrough to")
-                       nim.configMode = ConfigSelection(choices = choices, default = "nothing")
-
-#                      for y in nimmgr.nim_slots:
-#                              if y.slot == 0:
-#                                      if not y.isCompatible("DVB-S"):
-#                                              # reset to simple
-#                                              nim.configMode.value = "simple"
-#                                              nim.configMode.save()
-
-                       nim.diseqcMode = ConfigSelection(
-                               choices = [
-                                       ("single", _("Single")),
-                                       ("toneburst_a_b", _("Toneburst A/B")),
-                                       ("diseqc_a_b", _("DiSEqC A/B")),
-                                       ("diseqc_a_b_c_d", _("DiSEqC A/B/C/D")),
-                                       ("positioner", _("Positioner"))],
-                               default = "diseqc_a_b")
-
-                       choices = []
-                       for id in nimmgr.getNimListOfType("DVB-S"):
-                               if id != x:
-                                       choices.append((str(id), nimmgr.getNimDescription(id)))
-                       nim.connectedTo = ConfigSelection(choices = choices)
-                       nim.simpleSingleSendDiSEqC = ConfigYesNo(default=False)
-                       nim.simpleDiSEqCSetVoltageTone = ConfigYesNo(default=True)
-                       nim.simpleDiSEqCOnlyOnSatChange = ConfigYesNo(default=False)
-                       nim.diseqcA = getConfigSatlist(192, [(3601, _('nothing connected'), 1)] + nimmgr.satList)
-                       nim.diseqcB = getConfigSatlist(130, [(3601, _('nothing connected'), 1)] + nimmgr.satList)
-                       nim.diseqcC = ConfigSatlist(list = [(3601, _('nothing connected'), 1)] + nimmgr.satList)
-                       nim.diseqcD = ConfigSatlist(list = [(3601, _('nothing connected'), 1)] + nimmgr.satList)
-                       nim.positionerMode = ConfigSelection(
-                               choices = [
-                                       ("usals", _("USALS")),
-                                       ("manual", _("manual"))],
-                               default = "usals")
+                               config_mode_choices.append(("loopthrough", _("loopthrough to")))
+                       nim.configMode = ConfigSelection(config_mode_choices, "nothing")
+
+                       nim.diseqc13V = ConfigYesNo(False)
+
+                       nim.diseqcMode = ConfigSelection(diseqc_mode_choices, "diseqc_a_b")
+
+                       nim.connectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x])
+
+                       nim.simpleSingleSendDiSEqC = ConfigYesNo(False)
+                       nim.simpleDiSEqCSetVoltageTone = ConfigYesNo(True)
+                       nim.simpleDiSEqCOnlyOnSatChange = ConfigYesNo(False)
+                       nim.diseqcA = getConfigSatlist(192, diseqc_satlist_choices)
+                       nim.diseqcB = getConfigSatlist(130, diseqc_satlist_choices)
+                       nim.diseqcC = ConfigSatlist(list = diseqc_satlist_choices)
+                       nim.diseqcD = ConfigSatlist(list = diseqc_satlist_choices)
+                       nim.positionerMode = ConfigSelection(positioner_mode_choices, "usals")
                        nim.longitude = ConfigFloat(default=[5,100], limits=[(0,359),(0,999)])
-                       nim.longitudeOrientation = ConfigSelection(choices={"east": _("East"), "west": _("West")}, default = "east")
+                       nim.longitudeOrientation = ConfigSelection(longitude_orientation_choices, "east")
                        nim.latitude = ConfigFloat(default=[50,767], limits=[(0,359),(0,999)])
-                       nim.latitudeOrientation = ConfigSelection(choices={"north": _("North"), "south": _("South")}, default="north")
-                       nim.powerMeasurement = ConfigYesNo(default=True)
+                       nim.latitudeOrientation = ConfigSelection(latitude_orientation_choices, "north")
+                       nim.powerMeasurement = ConfigYesNo(True)
                        nim.powerThreshold = ConfigInteger(default=hw.get_device_name() == "dm8000" and 15 or 50, limits=(0, 100))
-                       nim.turningSpeed = ConfigSelection(choices = [("fast", _("Fast")), ("slow", _("Slow")), ("fast epoch", _("Fast epoch")) ], default = "fast")
+                       nim.turningSpeed = ConfigSelection(turning_speed_choices, "fast")
                        btime = datetime(1970, 1, 1, 7, 0);
                        nim.fastTurningBegin = ConfigDateTime(default = mktime(btime.timetuple()), formatstring = _("%H:%M"), increment = 900)
                        etime = datetime(1970, 1, 1, 19, 0);
@@ -942,78 +1115,72 @@ def InitNimManager(nimmgr):
 
                        # advanced config:
                        nim.advanced = ConfigSubsection()
-                       tmp = [(3601, _('All Satellites')+' 1', 1), (3602, _('All Satellites')+' 2', 1), (3603, _('All Satellites')+' 3', 1), (3604, _('All Satellites')+' 4', 1)]
-                       nim.advanced.sats = getConfigSatlist(192,nimmgr.satList+tmp)
+                       nim.advanced.sats = getConfigSatlist(192, advanced_satlist_choices)
                        nim.advanced.sat = ConfigSubDict()
-                       lnbs = [("0", "not available")]
-                       for y in range(1, 33):
-                               lnbs.append((str(y), "LNB " + str(y)))
 
                        for x in nimmgr.satList:
                                nim.advanced.sat[x[0]] = ConfigSubsection()
-                               nim.advanced.sat[x[0]].voltage = ConfigSelection(choices={"polarization": _("Polarization"), "13V": _("13 V"), "18V": _("18 V")}, default = "polarization")
-                               nim.advanced.sat[x[0]].tonemode = ConfigSelection(choices={"band": _("Band"), "on": _("On"), "off": _("Off")}, default = "band")
-                               nim.advanced.sat[x[0]].usals = ConfigYesNo(default=True)
+                               nim.advanced.sat[x[0]].voltage = ConfigSelection(advanced_voltage_choices, "polarization")
+                               nim.advanced.sat[x[0]].tonemode = ConfigSelection(advanced_tonemode_choices, "band")
+                               nim.advanced.sat[x[0]].usals = ConfigYesNo(True)
                                nim.advanced.sat[x[0]].rotorposition = ConfigInteger(default=1, limits=(1, 255))
-                               nim.advanced.sat[x[0]].lnb = ConfigSelection(choices = lnbs)
+                               nim.advanced.sat[x[0]].lnb = ConfigSelection(advanced_lnb_choices, "0")
 
                        for x in range(3601, 3605):
                                nim.advanced.sat[x] = ConfigSubsection()
-                               nim.advanced.sat[x].voltage = ConfigSelection(choices={"polarization": _("Polarization"), "13V": _("13 V"), "18V": _("18 V")}, default = "polarization")
-                               nim.advanced.sat[x].tonemode = ConfigSelection(choices={"band": _("Band"), "on": _("On"), "off": _("Off")}, default = "band")
+                               nim.advanced.sat[x].voltage = ConfigSelection(advanced_voltage_choices, "polarization")
+                               nim.advanced.sat[x].tonemode = ConfigSelection(advanced_tonemode_choices, "band")
                                nim.advanced.sat[x].usals = ConfigYesNo(default=True)
                                nim.advanced.sat[x].rotorposition = ConfigInteger(default=1, limits=(1, 255))
                                lnbnum = 33+x-3601
-                               nim.advanced.sat[x].lnb = ConfigSelection(choices = [("0", "not available"), (str(lnbnum), "LNB %d"%(lnbnum))], default="0")
-
-                       csw = [("none", _("None")), ("AA", _("AA")), ("AB", _("AB")), ("BA", _("BA")), ("BB", _("BB"))]
-                       for y in range(0, 16):
-                               csw.append((str(0xF0|y), "Input " + str(y+1)))
-
-                       ucsw = [("0", _("None"))]
-                       for y in range(1, 17):
-                               ucsw.append((str(y), "Input " + str(y)))
+                               nim.advanced.sat[x].lnb = ConfigSelection([("0", "not available"), (str(lnbnum), "LNB %d"%(lnbnum))], "0")
 
                        nim.advanced.lnb = ConfigSubList()
                        nim.advanced.lnb.append(ConfigNothing())
+
                        for x in range(1, 37):
                                nim.advanced.lnb.append(ConfigSubsection())
-                               nim.advanced.lnb[x].lof = ConfigSelection(choices={"universal_lnb": _("Universal LNB"), "c_band": _("C-Band"), "user_defined": _("User defined")}, default="universal_lnb")
+                               nim.advanced.lnb[x].lof = ConfigSelection(lnb_choices, lnb_choices_default)
+
                                nim.advanced.lnb[x].lofl = ConfigInteger(default=9750, limits = (0, 99999))
                                nim.advanced.lnb[x].lofh = ConfigInteger(default=10600, limits = (0, 99999))
                                nim.advanced.lnb[x].threshold = ConfigInteger(default=11700, limits = (0, 99999))
+
+                               nim.advanced.lnb[x].unicable = ConfigSelection(unicable_choices, unicable_choices_default)
+
+                               nim.advanced.lnb[x].unicableLnb = unicableLnb # is this okay? all lnb use the same ConfigSubDict ? ! ?
+                               nim.advanced.lnb[x].unicableLnbManufacturer = ConfigSelection(UnicableLnbManufacturers, UnicableLnbManufacturers[0])
+                               
+                               nim.advanced.lnb[x].unicableMatrix = unicableMatrix # is this okay? all lnb use the same ConfigSubDict ? ! ?
+                               nim.advanced.lnb[x].unicableMatrixManufacturer = ConfigSelection(UnicableMatrixManufacturers, UnicableMatrixManufacturers[0])
+                               
+                               nim.advanced.lnb[x].satcruser = ConfigSelection(advanced_lnb_satcruser_choices, "1")
+                               nim.advanced.lnb[x].satcrvcouser = satcrvcouser # is this okay? all lnb use the same ConfigSubDict ? ! ?
+
 #                              nim.advanced.lnb[x].output_12v = ConfigSelection(choices = [("0V", _("0 V")), ("12V", _("12 V"))], default="0V")
-                               nim.advanced.lnb[x].increased_voltage = ConfigYesNo(default=False)
-                               nim.advanced.lnb[x].toneburst = ConfigSelection(choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))], default = "none")
+                               nim.advanced.lnb[x].increased_voltage = ConfigYesNo(False)
+                               nim.advanced.lnb[x].toneburst = ConfigSelection(advanced_lnb_toneburst_choices, "none")
                                if x > 32:
-                                       nim.advanced.lnb[x].diseqcMode = ConfigSelection(choices = [("1_2", _("1.2"))], default = "1_2")
+                                       nim.advanced.lnb[x].diseqcMode = ConfigSelection(advanced_lnb_allsat_diseqcmode_choices, "1_2")
                                else:
-                                       nim.advanced.lnb[x].diseqcMode = ConfigSelection(choices = [("none", _("None")), ("1_0", _("1.0")), ("1_1", _("1.1")), ("1_2", _("1.2"))], default = "none")
-                               nim.advanced.lnb[x].commitedDiseqcCommand = ConfigSelection(choices = csw)
-                               nim.advanced.lnb[x].fastDiseqc = ConfigYesNo(default=False)
-                               nim.advanced.lnb[x].sequenceRepeat = ConfigYesNo(default=False)
-                               nim.advanced.lnb[x].commandOrder1_0 = ConfigSelection(choices = [("ct", "committed, toneburst"), ("tc", "toneburst, committed")], default = "ct")
-                               nim.advanced.lnb[x].commandOrder = ConfigSelection(choices = [
-                                               ("ct", "committed, toneburst"),
-                                               ("tc", "toneburst, committed"),
-                                               ("cut", "committed, uncommitted, toneburst"),
-                                               ("tcu", "toneburst, committed, uncommitted"),
-                                               ("uct", "uncommitted, committed, toneburst"),
-                                               ("tuc", "toneburst, uncommitted, commmitted")],
-                                               default="ct")
-                               nim.advanced.lnb[x].uncommittedDiseqcCommand = ConfigSelection(choices = ucsw)
-                               nim.advanced.lnb[x].diseqcRepeats = ConfigSelection(choices = [("none", _("None")), ("one", _("One")), ("two", _("Two")), ("three", _("Three"))], default = "none")
+                                       nim.advanced.lnb[x].diseqcMode = ConfigSelection(advanced_lnb_diseqcmode_choices, "none")
+                               nim.advanced.lnb[x].commitedDiseqcCommand = ConfigSelection(advanced_lnb_csw_choices)
+                               nim.advanced.lnb[x].fastDiseqc = ConfigYesNo(False)
+                               nim.advanced.lnb[x].sequenceRepeat = ConfigYesNo(False)
+                               nim.advanced.lnb[x].commandOrder1_0 = ConfigSelection(advanced_lnb_commandOrder1_0_choices, "ct")
+                               nim.advanced.lnb[x].commandOrder = ConfigSelection(advanced_lnb_commandOrder_choices, "ct")
+                               nim.advanced.lnb[x].uncommittedDiseqcCommand = ConfigSelection(advanced_lnb_ucsw_choices)
+                               nim.advanced.lnb[x].diseqcRepeats = ConfigSelection(advanced_lnb_diseqc_repeat_choices, "none")
                                nim.advanced.lnb[x].longitude = ConfigFloat(default = [5,100], limits = [(0,359),(0,999)])
-                               nim.advanced.lnb[x].longitudeOrientation = ConfigSelection(choices = [("east", _("East")), ("west", _("West"))], default = "east")
+                               nim.advanced.lnb[x].longitudeOrientation = ConfigSelection(longitude_orientation_choices, "east")
                                nim.advanced.lnb[x].latitude = ConfigFloat(default = [50,767], limits = [(0,359),(0,999)])
-                               nim.advanced.lnb[x].latitudeOrientation = ConfigSelection(choices = [("north", _("North")), ("south", _("South"))], default = "north")
+                               nim.advanced.lnb[x].latitudeOrientation = ConfigSelection(latitude_orientation_choices, "north")
                                nim.advanced.lnb[x].powerMeasurement = ConfigYesNo(default=True)
                                nim.advanced.lnb[x].powerThreshold = ConfigInteger(default=hw.get_device_name() == "dm8000" and 15 or 50, limits=(0, 100))
-                               nim.advanced.lnb[x].turningSpeed = ConfigSelection(choices = [("fast", _("Fast")), ("slow", _("Slow")), ("fast epoch", _("Fast epoch"))], default = "fast")
-                               btime = datetime(1970, 1, 1, 7, 0);
-                               nim.advanced.lnb[x].fastTurningBegin = ConfigDateTime(default=mktime(btime.timetuple()), formatstring = _("%H:%M"), increment = 600)
-                               etime = datetime(1970, 1, 1, 19, 0);
-                               nim.advanced.lnb[x].fastTurningEnd = ConfigDateTime(default=mktime(etime.timetuple()), formatstring = _("%H:%M"), increment = 600)
+                               nim.advanced.lnb[x].turningSpeed = ConfigSelection(turning_speed_choices, "fast")
+                               nim.advanced.lnb[x].fastTurningBegin = ConfigDateTime(default=advanced_lnb_fast_turning_btime, formatstring = _("%H:%M"), increment = 600)
+                               nim.advanced.lnb[x].fastTurningEnd = ConfigDateTime(default=advanced_lnb_fast_turning_etime, formatstring = _("%H:%M"), increment = 600)
+                               nim.advanced.lnb[x].prio = ConfigSelection(prio_list, "-1")
                elif slot.isCompatible("DVB-C"):
                        nim.configMode = ConfigSelection(
                                choices = {
index bd7ffb5e26f971eadc741c7bff9d0b1eec670461..acf0dbf73bfec096fc147ef8f7a1a90d8438f571 100644 (file)
@@ -35,7 +35,7 @@ class Canvas(Renderer):
                                self.instance.writeText(eRect(l[1], l[2], l[3], l[4]), gRGB(l[5]), gRGB(l[6]), l[7], l[8], l[9])
                        else:
                                print "drawlist entry:", l
-                               raise "invalid drawlist entry"
+                               raise RuntimeError("invalid drawlist entry")
 
        def changed(self, what):
                self.pull_updates()
diff --git a/lib/python/Components/ResourceManager.py b/lib/python/Components/ResourceManager.py
new file mode 100644 (file)
index 0000000..fb6be4a
--- /dev/null
@@ -0,0 +1,23 @@
+class ResourceManager:
+       def __init__(self):
+               self.resourceList = {}
+               
+       def addResource(self, name, resource):
+               print "adding Resource", name
+               self.resourceList[name] = resource
+               print "resources:", self.resourceList
+               
+               
+       def getResource(self, name):
+               if not self.hasResource(name):
+                       return None
+               return self.resourceList[name]
+       
+       def hasResource(self, name):
+               return self.resourceList.has_key(name)
+       
+       def removeResource(self, name):
+               if self.hasResource(name):
+                       del self.resourceList[name]
+               
+resourcemanager = ResourceManager()
\ No newline at end of file
index 766d19663d30db286f112c73f8615d6d30700dd2..86a5431d6279de86d5c1311831f744b878a76354 100644 (file)
@@ -135,7 +135,7 @@ def scanDevice(mountpoint):
 
        from Components.Harddisk import harddiskmanager 
        blockdev = mountpoint.rstrip("/").rsplit('/',1)[-1]
-       error, blacklisted, removable, is_cdrom, partitions = harddiskmanager.getBlockDevInfo(blockdev)
+       error, blacklisted, removable, is_cdrom, partitions, medium_found = harddiskmanager.getBlockDevInfo(blockdev)
 
        # now scan the paths
        for p in paths_to_scan:
index 5a7b3dea5691628e4933526dd40397dc07ef0bf3..78cd758e90af227ab7fce6624f6131f109edf9d2 100644 (file)
@@ -36,54 +36,58 @@ class ServiceScan:
                                tp_text = ""
                                if transponder:
                                        tp_type = transponder.getSystem()
-                                       if not tp_type[0]:
-                                               tp_type = tp_type[1]
-                                               if tp_type == iDVBFrontend.feSatellite:
-                                                       network = _("Satellite")
-                                                       tp = transponder.getDVBS()
-                                                       if not tp[0]:
-                                                               tp = tp[1]
-                                                               orb_pos = tp.orbital_position
-                                                               try:
-                                                                       sat_name = str(nimmgr.getSatDescription(orb_pos))
-                                                               except KeyError:
-                                                                       sat_name = ""
-                                                               if orb_pos > 1800: # west
-                                                                       orb_pos = 3600 - orb_pos
-                                                                       h = _("W")
-                                                               else:
-                                                                       h = _("E")
-                                                               if sat_name.find("%d.%d" % (orb_pos/10, orb_pos%10)) != -1:
-                                                                       network = sat_name
-                                                               else:
-                                                                       network = ("%s %d.%d %s") % (sat_name, orb_pos / 10, orb_pos % 10, h)
-                                                               tp_text = ("%s %s %d%c / %d / %s") %( { 0 : "DVB-S", 1 : "DVB-S2" }[tp.system],
-                                                                       { 0 : "Auto", 1 : "QPSK", 2 : "M8PSK", 3 : "QAM16" }[tp.modulation],
-                                                                       tp.frequency/1000,
-                                                                       { 0 : 'H', 1 : 'V', 2 : 'L', 3 : 'R' }[tp.polarisation],
-                                                                       tp.symbol_rate/1000,
-                                                                       { 0 : "AUTO", 1 : "1/2", 2 : "2/3", 3 : "3/4", 4 : "5/6",
-                                                                        5 : "7/8", 6 : "8/9", 7 : "3/5", 8 : "4/5", 9 : "9/10",
-                                                                        15 : "NONE" }[tp.fec] )
-                                               elif tp_type == iDVBFrontend.feCable:
-                                                       network = _("Cable")
-                                                       tp = transponder.getDVBC()
-                                                       if not tp[0]:
-                                                               tp = tp[1]
-                                                               tp_text = ("DVB-C %s %d / %d / %s") %( { 0 : "AUTO", 1 : "QAM16", 2 : "QAM32", 3 : "QAM64", 4 : "QAM128", 5 : "QAM256" }[tp.modulation],
-                                                                       tp.frequency,
-                                                                       tp.symbol_rate/1000,
-                                                                       { 0 : "AUTO", 1 : "1/2", 2 : "2/3", 3 : "3/4", 4 : "5/6", 5 : "7/8", 6 : "8/9", 15 : "NONE" }[tp.fec_inner] )
-                                               elif tp_type == iDVBFrontend.feTerrestrial:
-                                                       network = _("Terrestrial")
-                                                       tp = transponder.getDVBT()
-                                                       if not tp[0]:
-                                                               tp = tp[1]
-                                                               tp_text = ("DVB-T %s %d %s") %( { 0 : "QPSK", 1 : "QAM16", 2 : "QAM64", 3 : "AUTO"}[tp.modulation],
-                                                                       tp.frequency,
-                                                                       { 0 : "Bw 8MHz", 1 : "Bw 7MHz", 2 : "Bw 6MHz", 3 : "Bw Auto" }[tp.bandwidth])
+                                       if tp_type == iDVBFrontend.feSatellite:
+                                               network = _("Satellite")
+                                               tp = transponder.getDVBS()
+                                               orb_pos = tp.orbital_position
+                                               try:
+                                                       sat_name = str(nimmgr.getSatDescription(orb_pos))
+                                               except KeyError:
+                                                       sat_name = ""
+                                               if orb_pos > 1800: # west
+                                                       orb_pos = 3600 - orb_pos
+                                                       h = _("W")
                                                else:
-                                                       print "unknown transponder type in scanStatusChanged"
+                                                       h = _("E")
+                                               if sat_name.find("%d.%d" % (orb_pos/10, orb_pos%10)) != -1:
+                                                       network = sat_name
+                                               else:
+                                                       network = ("%s %d.%d %s") % (sat_name, orb_pos / 10, orb_pos % 10, h)
+                                               tp_text = ("%s %s %d%c / %d / %s") %( { tp.System_DVB_S : "DVB-S",
+                                                       tp.System_DVB_S2 : "DVB-S2" }.get(tp.system, tp.System_DVB_S),
+                                                       { tp.Modulation_Auto : "Auto", tp.Modulation_QPSK : "QPSK",
+                                                               tp.Modulation_8PSK : "8PSK", tp.Modulation_QAM16 : "QAM16" }.get(tp.modulation, tp.Modulation_QPSK),
+                                                       tp.frequency/1000,
+                                                       { tp.Polarisation_Horizontal : 'H', tp.Polarisation_Vertical : 'V', tp.Polarisation_CircularLeft : 'L',
+                                                               tp.Polarisation_CircularRight : 'R' }.get(tp.polarisation, tp.Polarisation_Horizontal),
+                                                       tp.symbol_rate/1000,
+                                                       { tp.FEC_Auto : "AUTO", tp.FEC_1_2 : "1/2", tp.FEC_2_3 : "2/3",
+                                                               tp.FEC_3_4 : "3/4", tp.FEC_5_6 : "5/6", tp.FEC_7_8 : "7/8",
+                                                               tp.FEC_8_9 : "8/9", tp.FEC_3_5 : "3/5", tp.FEC_4_5 : "4/5",
+                                                               tp.FEC_9_10 : "9/10", tp.FEC_None : "NONE" }.get(tp.fec, tp.FEC_Auto))
+                                       elif tp_type == iDVBFrontend.feCable:
+                                               network = _("Cable")
+                                               tp = transponder.getDVBC()
+                                               tp_text = ("DVB-C %s %d / %d / %s") %( { tp.Modulation_Auto : "AUTO",
+                                                       tp.Modulation_QAM16 : "QAM16", tp.Modulation_QAM32 : "QAM32",
+                                                       tp.Modulation_QAM64 : "QAM64", tp.Modulation_QAM128 : "QAM128",
+                                                       tp.Modulation_QAM256 : "QAM256" }.get(tp.modulation, tp.Modulation_Auto),
+                                                       tp.frequency,
+                                                       tp.symbol_rate/1000,
+                                                       { tp.FEC_Auto : "AUTO", tp.FEC_1_2 : "1/2", tp.FEC_2_3 : "2/3",
+                                                               tp.FEC_3_4 : "3/4", tp.FEC_5_6 : "5/6", tp.FEC_7_8 : "7/8",
+                                                               tp.FEC_8_9 : "8/9", tp.FEC_None : "NONE" }.get(tp.fec_inner, tp.FEC_Auto))
+                                       elif tp_type == iDVBFrontend.feTerrestrial:
+                                               network = _("Terrestrial")
+                                               tp = transponder.getDVBT()
+                                               tp_text = ("DVB-T %s %d %s") %( { tp.Modulation_QPSK : "QPSK",
+                                                       tp.Modulation_QAM16 : "QAM16", tp.Modulation_QAM64 : "QAM64",
+                                                       tp.Modulation_Auto : "AUTO" }.get(tp.modulation, tp.Modulation_Auto),
+                                                       tp.frequency,
+                                                       { tp.Bandwidth_8MHz : "Bw 8MHz", tp.Bandwidth_7MHz : "Bw 7MHz", tp.Bandwidth_6MHz : "Bw 6MHz",
+                                                               tp.Bandwidth_Auto : "Bw Auto" }.get(tp.bandwidth, tp.Bandwidth_Auto))
+                                       else:
+                                               print "unknown transponder type in scanStatusChanged"
                                self.network.setText(network)
                                self.transponder.setText(tp_text)
                
index ef9c1c8960e9c9d0a37e828b619612e449fc7f56..23b5395727fd3784f74842c9088a4ddfdad525bb 100644 (file)
@@ -17,6 +17,7 @@ to generate HTML."""
                self.fonts = fonts
                self.disable_callbacks = False
                self.enableWrapAround = enableWrapAround
+               self.__style = "default" # style might be an optional string which can be used to define different visualisations in the skin
 
        def setList(self, list):
                self.__list = list
@@ -27,7 +28,11 @@ to generate HTML."""
        def entry_changed(self, index):
                if not self.disable_callbacks:
                        self.downstream_elements.entry_changed(self, index)
-                       
+
+       def modifyEntry(self, index, data):
+               self.__list[index] = data
+               self.entry_changed(index)
+
        def count(self):
                return len(self.__list)
 
@@ -76,17 +81,21 @@ to generate HTML."""
                        self.index -= 1
                self.setIndex(self.index)
 
+       @cached
+       def getStyle(self):
+               return self.__style
+
+       def setStyle(self, style):
+               self.__style = style
+               self.changed((self.CHANGED_SPECIFIC, "style"))
+
+       style = property(getStyle, setStyle)
+
        def updateList(self, list):
                """Changes the list without changing the selection or emitting changed Events"""
                assert len(list) == len(self.__list)
-               print "get old index"
                old_index = self.index
-               print "disable callback"
                self.disable_callbacks = True
-               print "set list"
                self.list = list
-               print "set index"
                self.index = old_index
-               print "reenable callbacks"
                self.disable_callbacks = False
-               print "done"
index b96065b3d1bda98bcae8a25837640b35e22cc2cb..d57a617905dfe835ef4e401c2fa8345e23687e3b 100644 (file)
@@ -12,5 +12,12 @@ class Progress(Source):
        def setValue(self, value):
                self.__value = value
                self.changed((self.CHANGED_ALL,))
+               
+       def setRange(self, range = 100):
+               self.range = range
+               self.changed((self.CHANGED_ALL,))
+
+       def getRange(self):
+               return self.range
 
        value = property(getValue, setValue)
index 9a7684250008c295087f17516793d911fddd0cfb..df94f8a6b9e1c880b7fea54236fe73ea2e2705be 100644 (file)
@@ -127,9 +127,11 @@ class Task(object):
                self.cmd = None
                self.cwd = "/tmp"
                self.args = [ ]
+               self.cmdline = None
                self.task_progress_changed = None
                self.output_line = ""
                job.addTask(self)
+               self.container = None
 
        def setCommandline(self, cmd, args):
                self.cmd = cmd
@@ -141,6 +143,9 @@ class Task(object):
                self.global_preconditions.append(ToolExistsPrecondition())
                self.postconditions.append(ReturncodePostcondition())
 
+       def setCmdline(self, cmdline):
+               self.cmdline = cmdline
+
        def checkPreconditions(self, immediate = False):
                not_met = [ ]
                if immediate:
@@ -166,13 +171,15 @@ class Task(object):
                self.container.stdoutAvail.append(self.processStdout)
                self.container.stderrAvail.append(self.processStderr)
 
-               assert self.cmd is not None
-               assert len(self.args) >= 1
-
                if self.cwd is not None:
                        self.container.setCWD(self.cwd)
 
-               print "execute:", self.container.execute(self.cmd, *self.args), self.cmd, self.args
+               if not self.cmd and self.cmdline:
+                       print "execute:", self.container.execute(self.cmdline), self.cmdline
+               else:
+                       assert self.cmd is not None
+                       assert len(self.args) >= 1
+                       print "execute:", self.container.execute(self.cmd, *self.args), ' '.join(self.args)
                if self.initial_input:
                        self.writeInput(self.initial_input)
 
@@ -205,7 +212,8 @@ class Task(object):
                self.finish()
 
        def abort(self):
-               self.container.kill()
+               if self.container:
+                       self.container.kill()
                self.finish(aborted = True)
 
        def finish(self, aborted = False):
index 031c9caee7096e01b2a50b4ce83803fa0f4946e9..99b2fba52cebc151c8afbf1a3b575084f26fd105 100644 (file)
@@ -173,8 +173,7 @@ class TimerSanityCheck:
                                        def getServiceType(ref): # helper function to get a service type of a service reference
                                                serviceInfo = serviceHandler.info(ref)
                                                serviceInfo = serviceInfo and serviceInfo.getInfoObject(ref, iServiceInformation.sTransponderData)
-                                               if serviceInfo:
-                                                       return { "Satellite" : "DVB-S", "Cable" : "DVB-C", "Terrestrial" : "DVB-T"}[serviceInfo["type"]]
+                                               return serviceInfo and serviceInfo["tuner_type"] or ""
 
                                        ref = timer.service_ref.ref
                                        if ref.flags & eServiceReference.isGroup: # service group ?
@@ -200,7 +199,7 @@ class TimerSanityCheck:
                                        if timer == fakeRec[0] and fakeRec[1]:
                                                NavigationInstance.instance.stopRecordService(fakeRec[1])
                                                fakeRecList.remove(fakeRec)
-                               del fakeRec
+                               fakeRec = None
                                for entry in overlaplist:
                                        if entry[1] == timer:
                                                overlaplist.remove(entry)
diff --git a/lib/python/Components/TuneTest.py b/lib/python/Components/TuneTest.py
new file mode 100644 (file)
index 0000000..de7b009
--- /dev/null
@@ -0,0 +1,235 @@
+from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParameters, eDVBResourceManager, eTimer
+
+class Tuner:
+       def __init__(self, frontend):
+               self.frontend = frontend
+
+       # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, system, modulation)
+       #                    0         1             2         3       4         5       6        7
+       def tune(self, transponder):
+               if self.frontend:
+                       print "tuning to transponder with data", transponder
+                       parm = eDVBFrontendParametersSatellite()
+                       parm.frequency = transponder[0] * 1000
+                       parm.symbol_rate = transponder[1] * 1000
+                       parm.polarisation = transponder[2]
+                       parm.fec = transponder[3]
+                       parm.inversion = transponder[4]
+                       parm.orbital_position = transponder[5]
+                       parm.system = transponder[6]
+                       parm.modulation = transponder[7]
+                       parm.rolloff = transponder[8]
+                       parm.pilot = transponder[9]
+                       feparm = eDVBFrontendParameters()
+                       feparm.setDVBS(parm)
+                       self.lastparm = feparm
+                       self.frontend.tune(feparm)
+
+       def retune(self):
+               if self.frontend:
+                       self.frontend.tune(self.lastparm)
+
+       def getTransponderData(self):
+               ret = { }
+               if self.frontend:
+                       self.frontend.getTransponderData(ret, True)
+               return ret
+
+# tunes a list of transponders and checks, if they lock and optionally checks the onid/tsid combination
+# 1) add transponders with addTransponder()
+# 2) call run(<checkPIDs = True>)
+# 3) finishedChecking() is called, when the run is finished
+class TuneTest:
+       def __init__(self, feid, stopOnSuccess = -1, stopOnError = -1):
+               self.stopOnSuccess = stopOnSuccess
+               self.stopOnError = stopOnError
+               self.feid = feid
+               self.transponderlist = []
+               self.currTuned = None
+               print "TuneTest for feid %d" % self.feid
+               if not self.openFrontend():
+                       self.oldref = self.session.nav.getCurrentlyPlayingServiceReference()
+                       self.session.nav.stopService() # try to disable foreground service
+                       if not self.openFrontend():
+                               if self.session.pipshown: # try to disable pip
+                                       self.session.pipshown = False
+                                       del self.session.pip
+                                       if not self.openFrontend():
+                                               self.frontend = None # in normal case this should not happen
+               self.tuner = Tuner(self.frontend)
+               self.timer = eTimer()
+               self.timer.callback.append(self.updateStatus)
+               
+       def gotTsidOnid(self, tsid, onid):
+               print "******** got tsid, onid:", tsid, onid
+               if tsid is not None and onid is not None:
+                       self.pidStatus = self.INTERNAL_PID_STATUS_SUCCESSFUL
+                       self.tsid = tsid
+                       self.onid = onid
+               else:
+                       self.pidStatus = self.INTERNAL_PID_STATUS_FAILED
+                       self.tsid = -1
+                       self.onid = -1
+               self.timer.start(100, True)
+                       
+       def updateStatus(self):
+               dict = {}
+               self.frontend.getFrontendStatus(dict)
+               stop = False
+               
+               print "status:", dict
+               if dict["tuner_state"] == "TUNING":
+                       print "TUNING"
+                       self.timer.start(100, True)
+                       self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_TUNING, self.currTuned))
+               elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_NOOP:
+                       print "2nd choice"
+                       if dict["tuner_state"] == "LOCKED":
+                               print "acquiring TSID/ONID"
+                               self.raw_channel.requestTsidOnid(self.gotTsidOnid)
+                               self.pidStatus = self.INTERNAL_PID_STATUS_WAITING
+                       else:
+                               self.pidStatus = self.INTERNAL_PID_STATUS_FAILED
+               elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_WAITING:
+                       print "waiting for pids"                        
+               else:
+                       if dict["tuner_state"] == "LOSTLOCK" or dict["tuner_state"] == "FAILED":
+                               self.tuningtransponder = self.nextTransponder()
+                               self.failedTune.append([self.currTuned, self.oldTuned, "tune_failed"])
+                               if self.stopOnError != -1 and self.stopOnError <= len(self.failedTune):
+                                       stop = True
+                       elif dict["tuner_state"] == "LOCKED":
+                               pidsFailed = False
+                               if self.checkPIDs:
+                                       if self.currTuned is not None:
+                                               if self.tsid != self.currTuned[8] or self.onid != self.currTuned[9]:
+                                                       self.failedTune.append([self.currTuned, self.oldTuned, "pids_failed", {"real": (self.tsid, self.onid), "expected": (self.currTuned[8], self.currTuned[9])}])
+                                                       pidsFailed = True
+                                               else:
+                                                       self.successfullyTune.append([self.currTuned, self.oldTuned])
+                                                       if self.stopOnSuccess != -1 and self.stopOnSuccess <= len(self.successfullyTune):
+                                                               stop = True
+                               elif not self.checkPIDs or (self.checkPids and not pidsFailed):  
+                                       self.successfullyTune.append([self.currTuned, self.oldTuned])
+                                       if self.stopOnSuccess != -1 and self.stopOnSuccess <= len(self.successfullyTune):
+                                                               stop = True
+                               self.tuningtransponder = self.nextTransponder()
+                       else:
+                               print "************* tuner_state:", dict["tuner_state"]
+                               
+                       self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_NOOP, self.currTuned))
+                       
+                       if not stop:
+                               self.tune()
+               if self.tuningtransponder < len(self.transponderlist) and not stop:
+                       if self.pidStatus != self.INTERNAL_PID_STATUS_WAITING:
+                               self.timer.start(100, True)
+                               print "restart timer"
+                       else:
+                               print "not restarting timers (waiting for pids)"
+               else:
+                       self.progressCallback((self.getProgressLength(), len(self.transponderlist), self.STATUS_DONE, self.currTuned))
+                       print "finishedChecking"
+                       self.finishedChecking()
+                               
+       def firstTransponder(self):
+               print "firstTransponder:"
+               index = 0
+               if self.checkPIDs:
+                       print "checkPIDs-loop"
+                       # check for tsid != -1 and onid != -1 
+                       print "index:", index
+                       print "len(self.transponderlist):", len(self.transponderlist)
+                       while (index < len(self.transponderlist) and (self.transponderlist[index][8] == -1 or self.transponderlist[index][9] == -1)):
+                               index += 1
+               print "FirstTransponder final index:", index
+               return index
+       
+       def nextTransponder(self):
+               print "getting next transponder", self.tuningtransponder
+               index = self.tuningtransponder + 1
+               if self.checkPIDs:
+                       print "checkPIDs-loop"
+                       # check for tsid != -1 and onid != -1 
+                       print "index:", index
+                       print "len(self.transponderlist):", len(self.transponderlist)
+                       while (index < len(self.transponderlist) and (self.transponderlist[index][8] == -1 or self.transponderlist[index][9] == -1)):
+                               index += 1
+
+               print "next transponder index:", index
+               return index
+       
+       def finishedChecking(self):
+               print "finished testing"
+               print "successfull:", self.successfullyTune
+               print "failed:", self.failedTune
+       
+       def openFrontend(self):
+               res_mgr = eDVBResourceManager.getInstance()
+               if res_mgr:
+                       self.raw_channel = res_mgr.allocateRawChannel(self.feid)
+                       if self.raw_channel:
+                               self.frontend = self.raw_channel.getFrontend()
+                               if self.frontend:
+                                       return True
+                               else:
+                                       print "getFrontend failed"
+                       else:
+                               print "getRawChannel failed"
+               else:
+                       print "getResourceManager instance failed"
+               return False
+
+       def tune(self):
+               print "tuning to", self.tuningtransponder
+               if self.tuningtransponder < len(self.transponderlist):
+                       self.pidStatus = self.INTERNAL_PID_STATUS_NOOP
+                       self.oldTuned = self.currTuned
+                       self.currTuned = self.transponderlist[self.tuningtransponder]
+                       self.tuner.tune(self.transponderlist[self.tuningtransponder])           
+
+       INTERNAL_PID_STATUS_NOOP = 0
+       INTERNAL_PID_STATUS_WAITING = 1
+       INTERNAL_PID_STATUS_SUCCESSFUL = 2
+       INTERNAL_PID_STATUS_FAILED = 3
+       
+       def run(self, checkPIDs = False):
+               self.checkPIDs = checkPIDs
+               self.pidStatus = self.INTERNAL_PID_STATUS_NOOP
+               self.failedTune = []
+               self.successfullyTune = []
+               self.tuningtransponder = self.firstTransponder()
+               self.tune()
+               self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_START, self.currTuned))
+               self.timer.start(100, True)
+       
+       # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, <system>, <modulation>, <tsid>, <onid>)
+       #                    0         1             2         3       4         5       6        7              8      9
+       def addTransponder(self, transponder):
+               self.transponderlist.append(transponder)
+               
+       def clearTransponder(self):
+               self.transponderlist = []
+               
+       def getProgressLength(self):
+               count = 0
+               if self.stopOnError == -1:
+                       count = len(self.transponderlist)
+               else:
+                       if count < self.stopOnError:
+                               count = self.stopOnError
+               if self.stopOnSuccess == -1:
+                       count = len(self.transponderlist)
+               else:
+                       if count < self.stopOnSuccess:
+                               count = self.stopOnSuccess
+               return count
+               
+       STATUS_START = 0
+       STATUS_TUNING = 1
+       STATUS_DONE = 2
+       STATUS_NOOP = 3
+       # can be overwritten
+       # progress = (range, value, status, transponder)
+       def progressCallback(self, progress):
+               pass
\ No newline at end of file
index d8b4d064f6c210c247af54535df2f08ab626a68d..39f54c0b2e4277b9df119ed3d6bc3cc2e44fd8aa 100644 (file)
@@ -10,13 +10,14 @@ class TunerInfo(GUIComponent):
        BER = 2
        LOCK = 3
        SNR_PERCENTAGE = 0
-       AGC_PERCENTAGE = 1
-       BER_VALUE = 2
-       SNR_BAR = 3
-       AGC_BAR = 4
-       BER_BAR = 5
-       LOCK_STATE = 6
-       SYNC_STATE = 7
+       SNR_DB = 1
+       AGC_PERCENTAGE = 2
+       BER_VALUE = 3
+       SNR_BAR = 4
+       AGC_BAR = 5
+       BER_BAR = 6
+       LOCK_STATE = 7
+       SYNC_STATE = 8
 
        def __init__(self, type, servicefkt = None, frontendfkt = None, statusDict = None):
                GUIComponent.__init__(self)
@@ -47,7 +48,9 @@ class TunerInfo(GUIComponent):
                return val*100/65535
 
        def update(self):
-               if self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR:
+               if self.type == self.SNR_DB:
+                       value = self.getValue(self.SNR_DB)
+               elif self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR:
                        value = self.getValue(self.SNR) * 100 / 65536
                elif self.type == self.AGC_PERCENTAGE or self.type == self.AGC_BAR:
                        value = self.getValue(self.AGC) * 100 / 65536
@@ -55,8 +58,13 @@ class TunerInfo(GUIComponent):
                        value = self.getValue(self.BER)
                elif self.type == self.LOCK_STATE:
                        value = self.getValue(self.LOCK)
-               
-               if self.type == self.SNR_PERCENTAGE or self.type == self.AGC_PERCENTAGE:
+
+               if self.type == self.SNR_DB:
+                       if value != 0x12345678:
+                               self.setText("%3.02f dB" % (value / 100.0))
+                       else:
+                               self.setText("")
+               elif self.type == self.SNR_PERCENTAGE or self.type == self.AGC_PERCENTAGE:
                        self.setText("%d%%" % (value))
                elif self.type == self.BER_VALUE:
                        self.setText("%d" % (value))
@@ -72,7 +80,9 @@ class TunerInfo(GUIComponent):
 
        def getValue(self, what):
                if self.statusDict:
-                       if what == self.SNR:
+                       if what == self.SNR_DB:
+                               return self.statusDict.get("tuner_signal_quality_db", 0x12345678)
+                       elif what == self.SNR:
                                return self.statusDict.get("tuner_signal_quality", 0)
                        elif what == self.AGC:
                                return self.statusDict.get("tuner_signal_power", 0)
@@ -85,7 +95,9 @@ class TunerInfo(GUIComponent):
                        if service is not None:
                                feinfo = service.frontendInfo()
                                if feinfo is not None:
-                                       if what == self.SNR:
+                                       if what == self.SNR_DB:
+                                               return feinfo.getFrontendInfo(iFrontendInformation.signalQualitydB)
+                                       elif what == self.SNR:
                                                return feinfo.getFrontendInfo(iFrontendInformation.signalQuality)
                                        elif what == self.AGC:
                                                return feinfo.getFrontendInfo(iFrontendInformation.signalPower)
@@ -96,7 +108,9 @@ class TunerInfo(GUIComponent):
                elif self.frontendfkt:
                        frontend = self.frontendfkt()
                        if frontend:
-                               if what == self.SNR:
+                               if what == self.SNR_DB:
+                                       return frontend.readFrontendData(iFrontendInformation.signalQualitydB)
+                               elif what == self.SNR:
                                        return frontend.readFrontendData(iFrontendInformation.signalQuality)
                                elif what == self.AGC:
                                        return frontend.readFrontendData(iFrontendInformation.signalPower)
index 6ed87840981a036fb30c25e12fc5bdef16d32478..21e057f27b980054e08f5374f1912a40f2c64824 100644 (file)
@@ -17,12 +17,12 @@ def InitUsageConfig():
        config.usage.show_infobar_on_zap = ConfigYesNo(default = True)
        config.usage.show_infobar_on_skip = ConfigYesNo(default = True)
        config.usage.show_infobar_on_event_change = ConfigYesNo(default = True)
-       config.usage.hdd_standby = ConfigSelection(default = "120", choices = [
-               ("0", _("no standby")), ("2", "10 " + _("seconds")), ("6", "30 " + _("seconds")),
-               ("12", "1 " + _("minute")), ("24", "2 " + _("minutes")),
-               ("60", "5 " + _("minutes")), ("120", "10 " + _("minutes")), ("240", "20 " + _("minutes")),
-               ("241", "30 " + _("minutes")), ("242", "1 " + _("hour")), ("244", "2 " + _("hours")),
-               ("248", "4 " + _("hours")) ])
+       config.usage.hdd_standby = ConfigSelection(default = "600", choices = [
+               ("0", _("no standby")), ("10", "10 " + _("seconds")), ("30", "30 " + _("seconds")),
+               ("60", "1 " + _("minute")), ("120", "2 " + _("minutes")),
+               ("300", "5 " + _("minutes")), ("600", "10 " + _("minutes")), ("1200", "20 " + _("minutes")),
+               ("1800", "30 " + _("minutes")), ("3600", "1 " + _("hour")), ("7200", "2 " + _("hours")),
+               ("14400", "4 " + _("hours")) ])
        config.usage.output_12V = ConfigSelection(default = "do not change", choices = [
                ("do not change", _("do not change")), ("off", _("off")), ("on", _("on")) ])
 
@@ -66,7 +66,7 @@ def InitUsageConfig():
 
        def setHDDStandby(configElement):
                for hdd in harddiskmanager.HDDList():
-                       os.system("hdparm -S%s %s" % (configElement.value, hdd[1].getDeviceName()))
+                       hdd[1].setIdleTime(int(configElement.value))
        config.usage.hdd_standby.addNotifier(setHDDStandby)
 
        def set12VOutput(configElement):
@@ -89,8 +89,8 @@ def InitUsageConfig():
        config.seek.speeds_backward = ConfigSet(default=[8, 16, 32, 64, 128], choices=[1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
        config.seek.speeds_slowmotion = ConfigSet(default=[2, 4, 8], choices=[2, 4, 6, 8, 12, 16, 25])
 
-       config.seek.enter_forward = ConfigSelection(default = "2", choices = ["2"])
-       config.seek.enter_backward = ConfigSelection(default = "2", choices = ["2"])
+       config.seek.enter_forward = ConfigSelection(default = "2", choices = ["2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
+       config.seek.enter_backward = ConfigSelection(default = "1", choices = ["1", "2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
        config.seek.stepwise_minspeed = ConfigSelection(default = "16", choices = ["Never", "2", "4", "6", "8", "12", "16", "24", "32", "48", "64", "96", "128"])
        config.seek.stepwise_repeat = ConfigSelection(default = "3", choices = ["2", "3", "4", "5", "6"])
 
@@ -104,14 +104,14 @@ def InitUsageConfig():
                        configElement.value = [2]
                updateChoices(config.seek.enter_forward, configElement.value)
 
-       config.seek.speeds_forward.addNotifier(updateEnterForward)
+       config.seek.speeds_forward.addNotifier(updateEnterForward, immediate_feedback = False)
 
        def updateEnterBackward(configElement):
                if not configElement.value:
                        configElement.value = [2]
                updateChoices(config.seek.enter_backward, configElement.value)
 
-       config.seek.speeds_backward.addNotifier(updateEnterBackward)
+       config.seek.speeds_backward.addNotifier(updateEnterBackward, immediate_feedback = False)
 
 def updateChoices(sel, choices):
        if choices:
index 4d57bbb9a1edf6966d6ffc582fd4bb5db7945293..eaf071801af0a471aadf0ce64f28c1c6e951b708 100755 (executable)
@@ -1,10 +1,10 @@
-import time
 from enigma import getPrevAsciiCode
 from Tools.NumericalTextInput import NumericalTextInput
 from Tools.Directories import resolveFilename, SCOPE_CONFIG
 from Components.Harddisk import harddiskmanager
-import copy
-import os
+from copy import copy as copy_copy
+from os import path as os_path
+from time import localtime, strftime
 
 # ConfigElement, the base class of all ConfigElements.
 
@@ -28,11 +28,12 @@ import os
 #
 class ConfigElement(object):
        def __init__(self):
-
                object.__init__(self)
                self.saved_value = None
+               self.last_value = None
                self.save_disabled = False
                self.notifiers = []
+               self.notifiers_final = []
                self.enabled = True
                self.callNotifiersOnSaveAndCancel = False
 
@@ -85,10 +86,16 @@ class ConfigElement(object):
                for x in self.notifiers:
                        x(self)
                        
-       def addNotifier(self, notifier, initial_call = True):
+       def changedFinal(self):
+               for x in self.notifiers_final:
+                       x(self)
+                       
+       def addNotifier(self, notifier, initial_call = True, immediate_feedback = True):
                assert callable(notifier), "notifiers must be callable"
-               self.notifiers.append(notifier)
-
+               if immediate_feedback:
+                       self.notifiers.append(notifier)
+               else:
+                       self.notifiers_final.append(notifier)
                # CHECKME:
                # do we want to call the notifier
                #  - at all when adding it? (yes, though optional)
@@ -110,7 +117,9 @@ class ConfigElement(object):
                pass
 
        def onDeselect(self, session):
-               pass
+               if not self.last_value == self.value:
+                       self.changedFinal()
+                       self.last_value = self.value
 
 KEY_LEFT = 0
 KEY_RIGHT = 1
@@ -130,6 +139,107 @@ def getKeyNumber(key):
        assert key in KEY_NUMBERS
        return key - KEY_0
 
+class choicesList(object): # XXX: we might want a better name for this
+       LIST_TYPE_LIST = 1
+       LIST_TYPE_DICT = 2
+
+       def __init__(self, choices, type = None):
+               object.__init__(self)
+               self.choices = choices
+               if type is None:
+                       if isinstance(choices, list):
+                               self.type = choicesList.LIST_TYPE_LIST
+                       elif isinstance(choices, dict):
+                               self.type = choicesList.LIST_TYPE_DICT
+                       else:
+                               assert False, "choices must be dict or list!"
+               else:
+                       self.type = type
+
+       def __list__(self):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       ret = [isinstance(x, tuple) and x[0] or x for x in self.choices]
+               else:
+                       ret = self.choices.keys()
+               return ret or [""]
+
+       def __iter__(self):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       ret = [isinstance(x, tuple) and x[0] or x for x in self.choices]
+               else:
+                       ret = self.choices
+               return iter(ret or [""])
+
+       def __len__(self):
+               return len(self.choices) or 1
+
+       def __getitem__(self, index):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       ret = self.choices[index]
+                       if isinstance(ret, tuple):
+                               ret = ret[0]
+                       return ret
+               return self.choices.keys()[index]
+
+       def index(self, value):
+               return self.__list__().index(value)
+
+       def __setitem__(self, index, value):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       orig = self.choices[index]
+                       if isinstance(orig, tuple):
+                               self.choices[index] = (value, orig[1])
+                       else:
+                               self.choices[index] = value
+               else:
+                       key = self.choices.keys()[index]
+                       orig = self.choices[key]
+                       del self.choices[key]
+                       self.choices[value] = orig
+
+       def default(self):
+               if self.type is choicesList.LIST_TYPE_LIST:
+                       default = self.choices[0]
+                       if isinstance(default, tuple):
+                               default = default[0]
+               else:
+                       default = self.choices.keys()[0]
+               return default
+
+class descriptionList(choicesList): # XXX: we might want a better name for this
+       def __list__(self):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       ret = [isinstance(x, tuple) and x[1] or x for x in self.choices]
+               else:
+                       ret = self.choices.values()
+               return ret or [""]
+
+       def __iter__(self):
+               return iter(self.__list__())
+
+       def __getitem__(self, index):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       for x in self.choices:
+                               if isinstance(x, tuple):
+                                       if x[0] == index:
+                                               return str(x[1])
+                               elif x == index:
+                                       return str(x)
+                       return str(index) # Fallback!
+               else:
+                       return str(self.choices.get(index, ""))
+
+       def __setitem__(self, index, value):
+               if self.type == choicesList.LIST_TYPE_LIST:
+                       i = self.index(index)
+                       orig = self.choices[i]
+                       if isinstance(orig, tuple):
+                               self.choices[i] = (orig[0], value)
+                       else:
+                               self.choices[i] = value
+               else:
+                       self.choices[index] = value
+
 #
 # ConfigSelection is a "one of.."-type.
 # it has the "choices", usually a list, which contains
@@ -141,43 +251,21 @@ def getKeyNumber(key):
 class ConfigSelection(ConfigElement):
        def __init__(self, choices, default = None):
                ConfigElement.__init__(self)
-               self._value = None
-               self.setChoices(choices, default)
+               self.choices = choicesList(choices)
+
+               if default is None:
+                       default = self.choices.default()
+
+               self.default = self._value = self.last_value = default
+               self.changed()
 
        def setChoices(self, choices, default = None):
-               self.choices = []
-               self.description = {}
-               
-               if isinstance(choices, list):
-                       for x in choices:
-                               if isinstance(x, tuple):
-                                       self.choices.append(x[0])
-                                       self.description[x[0]] = x[1]
-                               else:
-                                       self.choices.append(x)
-                                       self.description[x] = x
-               elif isinstance(choices, dict):
-                       for (key, val) in choices.items():
-                               self.choices.append(key)
-                               self.description[key] = val
-               else:
-                       assert False, "ConfigSelection choices must be dict or list!"
-               
-               #assert len(self.choices), "you can't have an empty configselection"
-               if len(self.choices) == 0:
-                       self.choices = [""]
-                       self.description[""] = ""
+               self.choices = choicesList(choices)
 
                if default is None:
-                       default = self.choices[0]
-
-               assert default in self.choices, "default must be in choice list, but " + repr(default) + " is not!"
-               for x in self.choices:
-                       assert isinstance(x, str), "ConfigSelection choices must be strings"
-               
-               self.default = default
+                       default = self.choices.default()
 
-               if self.value == None or not self.value in self.choices:
+               if self.value not in self.choices:
                        self.value = default
 
        def setValue(self, value):
@@ -185,7 +273,6 @@ class ConfigSelection(ConfigElement):
                        self._value = value
                else:
                        self._value = self.default
-               
                self.changed()
 
        def tostring(self, val):
@@ -196,7 +283,6 @@ class ConfigSelection(ConfigElement):
 
        def setCurrentText(self, text):
                i = self.choices.index(self.value)
-               del self.description[self.choices[i]]
                self.choices[i] = text
                self.description[text] = text
                self._value = text
@@ -220,7 +306,7 @@ class ConfigSelection(ConfigElement):
                        self.value = self.choices[0]
                elif key == KEY_END:
                        self.value = self.choices[nchoices - 1]
-                       
+
        def selectNext(self):
                nchoices = len(self.choices)
                i = self.choices.index(self.value)
@@ -242,27 +328,32 @@ class ConfigSelection(ConfigElement):
        def getHTML(self, id):
                res = ""
                for v in self.choices:
+                       descr = self.description[v]
                        if self.value == v:
                                checked = 'checked="checked" '
                        else:
                                checked = ''
-                       res += '<input type="radio" name="' + id + '" ' + checked + 'value="' + v + '">' + self.description[v] + "</input></br>\n"
+                       res += '<input type="radio" name="' + id + '" ' + checked + 'value="' + v + '">' + descr + "</input></br>\n"
                return res;
 
        def unsafeAssign(self, value):
                # setValue does check if value is in choices. This is safe enough.
                self.value = value
 
+       description = property(lambda self: descriptionList(self.choices.choices, self.choices.type))
+
 # a binary decision.
 #
 # several customized versions exist for different
 # descriptions.
 #
+boolean_descriptions = {False: "false", True: "true"}
 class ConfigBoolean(ConfigElement):
-       def __init__(self, default = False, descriptions = {False: "false", True: "true"}):
+       def __init__(self, default = False, descriptions = boolean_descriptions):
                ConfigElement.__init__(self)
                self.descriptions = descriptions
-               self.value = self.default = default
+               self.value = self.last_value = self.default = default
+
        def handleKey(self, key):
                if key in [KEY_LEFT, KEY_RIGHT]:
                        self.value = not self.value
@@ -309,24 +400,32 @@ class ConfigBoolean(ConfigElement):
                else:
                        self.value = False
 
+       def onDeselect(self, session):
+               if not self.last_value == self.value:
+                       self.changedFinal()
+                       self.last_value = self.value
+
+yes_no_descriptions = {False: _("no"), True: _("yes")}
 class ConfigYesNo(ConfigBoolean):
        def __init__(self, default = False):
-               ConfigBoolean.__init__(self, default = default, descriptions = {False: _("no"), True: _("yes")})
+               ConfigBoolean.__init__(self, default = default, descriptions = yes_no_descriptions)
 
+on_off_descriptions = {False: _("off"), True: _("on")}
 class ConfigOnOff(ConfigBoolean):
        def __init__(self, default = False):
-               ConfigBoolean.__init__(self, default = default, descriptions = {False: _("off"), True: _("on")})
+               ConfigBoolean.__init__(self, default = default, descriptions = on_off_descriptions)
 
+enable_disable_descriptions = {False: _("disable"), True: _("enable")}
 class ConfigEnableDisable(ConfigBoolean):
        def __init__(self, default = False):
-               ConfigBoolean.__init__(self, default = default, descriptions = {False: _("disable"), True: _("enable")})
+               ConfigBoolean.__init__(self, default = default, descriptions = enable_disable_descriptions)
 
 class ConfigDateTime(ConfigElement):
        def __init__(self, default, formatstring, increment = 86400):
                ConfigElement.__init__(self)
                self.increment = increment
                self.formatstring = formatstring
-               self.value = self.default = int(default)
+               self.value = self.last_value = self.default = int(default)
 
        def handleKey(self, key):
                if key == KEY_LEFT:
@@ -337,10 +436,10 @@ class ConfigDateTime(ConfigElement):
                        self.value = self.default
 
        def getText(self):
-               return time.strftime(self.formatstring, time.localtime(self.value))
+               return strftime(self.formatstring, localtime(self.value))
 
        def getMulti(self, selected):
-               return ("text", time.strftime(self.formatstring, time.localtime(self.value)))
+               return ("text", strftime(self.formatstring, localtime(self.value)))
 
        def fromstring(self, val):
                return int(val)
@@ -352,7 +451,7 @@ class ConfigDateTime(ConfigElement):
 # several helper exist to ease this up a bit.
 #
 class ConfigSequence(ConfigElement):
-       def __init__(self, seperator, limits, censor_char = "", default = None):
+       def __init__(self, seperator, limits, default, censor_char = ""):
                ConfigElement.__init__(self)
                assert isinstance(limits, list) and len(limits[0]) == 2, "limits must be [(min, max),...]-tuple-list"
                assert censor_char == "" or len(censor_char) == 1, "censor char must be a single char (or \"\")"
@@ -364,11 +463,10 @@ class ConfigSequence(ConfigElement):
                self.seperator = seperator
                self.limits = limits
                self.censor_char = censor_char
-               
-               self.default = default
-               self.value = copy.copy(default)
-               
-               self.endNotifier = []
+
+               self.last_value = self.default = default
+               self.value = copy_copy(default)
+               self.endNotifier = None
 
        def validate(self):
                max_pos = 0
@@ -385,8 +483,9 @@ class ConfigSequence(ConfigElement):
                        num += 1
 
                if self.marked_pos >= max_pos:
-                       for x in self.endNotifier:
-                               x(self)
+                       if endNotifier:
+                               for x in self.endNotifier:
+                                       x(self)
                        self.marked_pos = max_pos - 1
 
                if self.marked_pos < 0:
@@ -395,13 +494,15 @@ class ConfigSequence(ConfigElement):
        def validatePos(self):
                if self.marked_pos < 0:
                        self.marked_pos = 0
-                       
+
                total_len = sum([len(str(x[1])) for x in self.limits])
 
                if self.marked_pos >= total_len:
                        self.marked_pos = total_len - 1
-                       
+
        def addEndNotifier(self, notifier):
+               if endNotifier is None:
+                       endNotifier = []
                self.endNotifier.append(notifier)
 
        def handleKey(self, key):
@@ -412,7 +513,7 @@ class ConfigSequence(ConfigElement):
                if key == KEY_RIGHT:
                        self.marked_pos += 1
                        self.validatePos()
-               
+
                if key == KEY_HOME:
                        self.marked_pos = 0
                        self.validatePos()
@@ -425,7 +526,7 @@ class ConfigSequence(ConfigElement):
                                num += 1
                        self.marked_pos = max_pos - 1
                        self.validatePos()
-               
+
                if key in KEY_NUMBERS or key == KEY_ASCII:
                        if key == KEY_ASCII:
                                code = getPrevAsciiCode()
@@ -434,11 +535,11 @@ class ConfigSequence(ConfigElement):
                                number = code - 48
                        else:
                                number = getKeyNumber(key)
-                       
+
                        block_len = []
                        for x in self.limits:
                                block_len.append(len(str(x[1])))
-                       
+
                        total_len = sum(block_len)
 
                        pos = 0
@@ -457,17 +558,17 @@ class ConfigSequence(ConfigElement):
 
                        # position in the block
                        posinblock = self.marked_pos - block_len_total[blocknumber]
-                       
+
                        oldvalue = self._value[blocknumber]
                        olddec = oldvalue % 10 ** (number_len - posinblock) - (oldvalue % 10 ** (number_len - posinblock - 1))
                        newvalue = oldvalue - olddec + (10 ** (number_len - posinblock - 1) * number)
-                       
+
                        self._value[blocknumber] = newvalue
                        self.marked_pos += 1
-               
+
                        self.validate()
                        self.changed()
-       
+
        def genText(self):
                value = ""
                mPos = self.marked_pos
@@ -477,18 +578,17 @@ class ConfigSequence(ConfigElement):
                                value += self.seperator
                                if mPos >= len(value) - 1:
                                        mPos += 1
-
                        if self.censor_char == "":
                                value += ("%0" + str(len(str(self.limits[num][1]))) + "d") % i
                        else:
                                value += (self.censor_char * len(str(self.limits[num][1])))
                        num += 1
                return (value, mPos)
-               
+
        def getText(self):
                (value, mPos) = self.genText()
                return value
-       
+
        def getMulti(self, selected):
                (value, mPos) = self.genText()
                        # only mark cursor when we are selected
@@ -500,16 +600,22 @@ class ConfigSequence(ConfigElement):
 
        def tostring(self, val):
                return self.seperator.join([self.saveSingle(x) for x in val])
-       
+
        def saveSingle(self, v):
                return str(v)
 
        def fromstring(self, value):
                return [int(x) for x in value.split(self.seperator)]
 
+       def onDeselect(self, session):
+               if self.last_value != self._value:
+                       self.changedFinal()
+                       self.last_value = copy_copy(self._value)
+
+ip_limits = [(0,255),(0,255),(0,255),(0,255)]
 class ConfigIP(ConfigSequence):
        def __init__(self, default, auto_jump = False):
-               ConfigSequence.__init__(self, seperator = ".", limits = [(0,255),(0,255),(0,255),(0,255)], default = default)
+               ConfigSequence.__init__(self, seperator = ".", limits = ip_limits, default = default)
                self.block_len = []
                for x in self.limits:
                        self.block_len.append(len(str(x[1])))
@@ -590,22 +696,54 @@ class ConfigIP(ConfigSequence):
                # we definitely don't want leading zeros
                return '.'.join(["%d" % d for d in self.value])
 
+mac_limits = [(1,255),(1,255),(1,255),(1,255),(1,255),(1,255)]
 class ConfigMAC(ConfigSequence):
        def __init__(self, default):
-               ConfigSequence.__init__(self, seperator = ":", limits = [(1,255),(1,255),(1,255),(1,255),(1,255),(1,255)], default = default)
+               ConfigSequence.__init__(self, seperator = ":", limits = mac_limits, default = default)
 
 class ConfigPosition(ConfigSequence):
        def __init__(self, default, args):
                ConfigSequence.__init__(self, seperator = ",", limits = [(0,args[0]),(0,args[1]),(0,args[2]),(0,args[3])], default = default)
 
+clock_limits = [(0,23),(0,59)]
 class ConfigClock(ConfigSequence):
        def __init__(self, default):
-               import time
-               t = time.localtime(default)
-               ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min])
+               t = localtime(default)
+               ConfigSequence.__init__(self, seperator = ":", limits = clock_limits, default = [t.tm_hour, t.tm_min])
+
+       def increment(self):
+               # Check if Minutes maxed out
+               if self._value[1] == 59:
+                       # Increment Hour, reset Minutes
+                       if self._value[0] < 23:
+                               self._value[0] += 1
+                       else:
+                               self._value[0] = 0
+                       self._value[1] = 0
+               else:
+                       # Increment Minutes
+                       self._value[1] += 1
+               # Trigger change
+               self.changed()
+
+       def decrement(self):
+               # Check if Minutes is minimum
+               if self._value[1] == 0:
+                       # Decrement Hour, set Minutes to 59
+                       if self._value[0] > 0:
+                               self._value[0] -= 1
+                       else:
+                               self._value[0] = 23
+                       self._value[1] = 59
+               else:
+                       # Decrement Minutes
+                       self._value[1] -= 1
+               # Trigger change
+               self.changed()
 
+integer_limits = (0, 9999999999)
 class ConfigInteger(ConfigSequence):
-       def __init__(self, default, limits = (0, 9999999999)):
+       def __init__(self, default, limits = integer_limits):
                ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default)
        
        # you need to override this to do input validation
@@ -615,7 +753,7 @@ class ConfigInteger(ConfigSequence):
 
        def getValue(self):
                return self._value[0]
-       
+
        value = property(getValue, setValue)
 
        def fromstring(self, value):
@@ -657,7 +795,7 @@ class ConfigText(ConfigElement, NumericalTextInput):
                self.offset = 0
                self.overwrite = fixed_size
                self.help_window = None
-               self.value = self.default = default
+               self.value = self.last_value = self.default = default
 
        def validateMarker(self):
                if self.fixed_size:
@@ -823,6 +961,9 @@ class ConfigText(ConfigElement, NumericalTextInput):
                if self.help_window:
                        session.deleteDialog(self.help_window)
                        self.help_window = None
+               if not self.last_value == self.value:
+                       self.changedFinal()
+                       self.last_value = self.value
 
        def getHTML(self, id):
                return '<input type="text" name="' + id + '" value="' + self.value + '" /><br>\n'
@@ -897,12 +1038,40 @@ class ConfigNumber(ConfigText):
        def onDeselect(self, session):
                self.marked_pos = 0
                self.offset = 0
+               if not self.last_value == self.value:
+                       self.changedFinal()
+                       self.last_value = self.value
+
+class ConfigSearchText(ConfigText):
+       def __init__(self, default = "", fixed_size = False, visible_width = False):
+               ConfigText.__init__(self, default = default, fixed_size = fixed_size, visible_width = visible_width)
+               NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False, search = True)
+
+class ConfigDirectory(ConfigText):
+       def __init__(self, default="", visible_width=60):
+               ConfigText.__init__(self, default, fixed_size = True, visible_width = visible_width)
+       def handleKey(self, key):
+               pass
+       def getValue(self):
+               if self.text == "":
+                       return None
+               else:
+                       return ConfigText.getValue(self)
+       def setValue(self, val):
+               if val == None:
+                       val = ""
+               ConfigText.setValue(self, val)
+       def getMulti(self, selected):
+               if self.text == "":
+                       return ("mtext"[1-selected:], _("List of Storage Devices"), range(0))
+               else:
+                       return ConfigText.getMulti(self, selected)
 
 # a slider.
 class ConfigSlider(ConfigElement):
        def __init__(self, default = 0, increment = 1, limits = (0, 100)):
                ConfigElement.__init__(self)
-               self.value = self.default = default
+               self.value = self.last_value = self.default = default
                self.min = limits[0]
                self.max = limits[1]
                self.increment = increment
@@ -954,28 +1123,17 @@ class ConfigSatlist(ConfigSelection):
 class ConfigSet(ConfigElement):
        def __init__(self, choices, default = []):
                ConfigElement.__init__(self)
-               self.choices = []
-               self.description = {}
                if isinstance(choices, list):
                        choices.sort()
-                       for x in choices:
-                               if isinstance(x, tuple):
-                                       self.choices.append(x[0])
-                                       self.description[x[0]] = str(x[1])
-                               else:
-                                       self.choices.append(x)
-                                       self.description[x] = str(x)
+                       self.choices = choicesList(choices, choicesList.LIST_TYPE_LIST)
                else:
                        assert False, "ConfigSet choices must be a list!"
-               if len(self.choices) == 0:
-                       self.choices = [""]
-                       self.description[""] = ""
                if default is None:
                        default = []
                self.pos = -1
                default.sort()
-               self.default = default
-               self.value = default+[]
+               self.last_value = self.default = default
+               self.value = default[:]
 
        def toggleChoice(self, choice):
                if choice in self.value:
@@ -983,6 +1141,7 @@ class ConfigSet(ConfigElement):
                else:
                        self.value.append(choice)
                        self.value.sort()
+               self.changed()
 
        def handleKey(self, key):
                if key in KEY_NUMBERS + [KEY_DELETE, KEY_BACKSPACE]:
@@ -1012,7 +1171,7 @@ class ConfigSet(ConfigElement):
                if not selected or self.pos == -1:
                        return ("text", self.genString(self.value))
                else:
-                       tmp = self.value+[]
+                       tmp = self.value[:]
                        ch = self.choices[self.pos]
                        mem = ch in self.value
                        if not mem:
@@ -1029,7 +1188,9 @@ class ConfigSet(ConfigElement):
 
        def onDeselect(self, session):
                self.pos = -1
-               self.changed()
+               if not self.last_value == self.value:
+                       self.changedFinal()
+                       self.last_value = self.value[:]
                
        def tostring(self, value):
                return str(value)
@@ -1037,6 +1198,8 @@ class ConfigSet(ConfigElement):
        def fromstring(self, val):
                return eval(val)
 
+       description = property(lambda self: descriptionList(self.choices.choices, choicesList.LIST_TYPE_LIST))
+
 class ConfigLocations(ConfigElement):
        def __init__(self, default = [], visible_width = False):
                ConfigElement.__init__(self)
@@ -1046,6 +1209,7 @@ class ConfigLocations(ConfigElement):
                self.locations = []
                self.mountpoints = []
                harddiskmanager.on_partition_list_change.append(self.mountpointsChanged)
+               self.value = default+[]
 
        def setValue(self, value):
                loc = [x[0] for x in self.locations if x[3]]
@@ -1078,7 +1242,7 @@ class ConfigLocations(ConfigElement):
                self.locations = [[x, None, False, False] for x in tmp]
                self.refreshMountpoints()
                for x in self.locations:
-                       if os.path.exists(x[0]):
+                       if os_path.exists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
 
@@ -1107,7 +1271,7 @@ class ConfigLocations(ConfigElement):
                for x in self.locations:
                        if x[1] == mp:
                                x[2] = True
-                       elif x[1] == None and os.path.exists(x[0]):
+                       elif x[1] == None and os_path.exists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
 
@@ -1133,7 +1297,7 @@ class ConfigLocations(ConfigElement):
                                self.addedMount(x)
 
        def getMountpoint(self, file):
-               file = os.path.realpath(file)+"/"
+               file = os_path.realpath(file)+"/"
                for m in self.mountpoints:
                        if file.startswith(m):
                                return m
@@ -1230,7 +1394,7 @@ class ConfigSubList(list, object):
                        x.load()
 
        def getSavedValue(self):
-               res = {}
+               res = { }
                for i in range(len(self)):
                        sv = self[i].saved_value
                        if sv is not None:
@@ -1253,10 +1417,7 @@ class ConfigSubList(list, object):
                        item.load()
 
        def dict(self):
-               res = dict()
-               for index in range(len(self)):
-                       res[str(index)] = self[index]
-               return res
+               return dict([(str(index), value) for index, value in self.enumerate()])
 
 # same as ConfigSubList, just as a dictionary.
 # care must be taken that the 'key' has a proper
@@ -1322,11 +1483,12 @@ class ConfigSubsection(object):
        def __setattr__(self, name, value):
                if name == "saved_value":
                        return self.setSavedValue(value)
-               assert isinstance(value, ConfigSubsection) or isinstance(value, ConfigElement) or isinstance(value, ConfigSubList) or isinstance(value, ConfigSubDict), "ConfigSubsections can only store ConfigSubsections, ConfigSubLists, ConfigSubDicts or ConfigElements"
+               assert isinstance(value, (ConfigSubsection, ConfigElement, ConfigSubList, ConfigSubDict)), "ConfigSubsections can only store ConfigSubsections, ConfigSubLists, ConfigSubDicts or ConfigElements"
                self.content.items[name] = value
-               if name in self.content.stored_values:
-                       #print "ok, now we have a new item,", name, "and have the following value for it:", self.content.stored_values[name]
-                       value.saved_value = self.content.stored_values[name]
+               x = self.content.stored_values.get(name, None)
+               if x is not None:
+                       #print "ok, now we have a new item,", name, "and have the following value for it:", x
+                       value.saved_value = x
                        value.load()
 
        def __getattr__(self, name):
@@ -1344,12 +1506,11 @@ class ConfigSubsection(object):
 
        def setSavedValue(self, values):
                values = dict(values)
-               
                self.content.stored_values = values
-
                for (key, val) in self.content.items.items():
-                       if key in values:
-                               val.saved_value = values[key]
+                       value = values.get(key, None)
+                       if value is not None:
+                               val.saved_value = value
 
        saved_value = property(getSavedValue, setSavedValue)
 
@@ -1377,19 +1538,18 @@ class Config(ConfigSubsection):
 
        def pickle_this(self, prefix, topickle, result):
                for (key, val) in topickle.items():
-                       name = prefix + "." + key
-                       
+                       name = ''.join((prefix, '.', key))
                        if isinstance(val, dict):
                                self.pickle_this(name, val, result)
                        elif isinstance(val, tuple):
-                               result.append(name + "=" + val[0]) # + " ; " + val[1])
+                               result += [name, '=', val[0], '\n']
                        else:
-                               result.append(name + "=" + val)
+                               result += [name, '=', val, '\n']
 
        def pickle(self):
-               result = [ ]
+               result = []
                self.pickle_this("config", self.saved_value, result)
-               return '\n'.join(result) + "\n"
+               return ''.join(result)
 
        def unpickle(self, lines):
                tree = { }
index 046f281d825f925b37fa4326e79b2143ca891251..a9c02bc0465c801cfd043e8e68c211e9dd62448a 100644 (file)
@@ -4,6 +4,7 @@ LANG_TEXT = {
        "fr_FR": "French",
        "fi_FI": "Finnish",
        "pt_PT": "Portuguese",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italian",
        "no_NO": "Norwegian",
        "nl_NL": "Dutch",
@@ -21,6 +22,7 @@ LANG_TEXT = {
        "tr_TR": "Turkish",
        "de_DE": "German",
        "ar_AE": "Arabic",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Swedish",
        "pl_PL": "Polish",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -30,6 +32,7 @@ LANG_TEXT = {
        "fr_FR": "Französisch",
        "fi_FI": "Finnisch",
        "pt_PT": "portugiesisch",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italienisch",
        "no_NO": "Norwegisch",
        "nl_NL": "Holländisch",
@@ -47,6 +50,7 @@ LANG_TEXT = {
        "tr_TR": "Türkisch",
        "de_DE": "Deutsch",
        "ar_AE": "Arabisch",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Schwedisch",
        "pl_PL": "Polnisch",
        "T1": "Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. Danach drücken Sie bitte OK.",
@@ -56,6 +60,7 @@ LANG_TEXT = {
        "fr_FR": "French",
        "fi_FI": "Finnish",
        "pt_PT": "Portuguese",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italian",
        "no_NO": "Norwegian",
        "nl_NL": "Dutch",
@@ -73,6 +78,7 @@ LANG_TEXT = {
        "tr_TR": "Turkish",
        "de_DE": "المانـى",
        "ar_AE": "Arabic",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Swedish",
        "pl_PL": "Polish",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -82,6 +88,7 @@ LANG_TEXT = {
        "fr_FR": "Francès",
        "fi_FI": "Finlandès",
        "pt_PT": "Portuguès",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italià",
        "no_NO": "Noruec",
        "nl_NL": "Holandès",
@@ -99,6 +106,7 @@ LANG_TEXT = {
        "tr_TR": "Turc",
        "de_DE": "Alemany",
        "ar_AE": "Àrab",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Suec",
        "pl_PL": "Polish",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -108,6 +116,7 @@ LANG_TEXT = {
        "fr_FR": "Francuski",
        "fi_FI": "Finski",
        "pt_PT": "Portugalski",
+       "fy_x-FY": "Frisian",
        "it_IT": "Talijanski",
        "no_NO": "Norveški",
        "nl_NL": "Nizozemski",
@@ -125,6 +134,7 @@ LANG_TEXT = {
        "tr_TR": "Turski",
        "de_DE": "Njemački",
        "ar_AE": "Arabski",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Švedski",
        "pl_PL": "Poljski",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -134,6 +144,7 @@ LANG_TEXT = {
        "fr_FR": "Francouzsky",
        "fi_FI": "Finsky",
        "pt_PT": "Portugalsky",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italsky",
        "no_NO": "Norsky",
        "nl_NL": "Holandsky",
@@ -151,6 +162,7 @@ LANG_TEXT = {
        "tr_TR": "Turecky",
        "de_DE": "Německy",
        "ar_AE": "Arabsky",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Švédsky",
        "pl_PL": "Polsky",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -160,6 +172,7 @@ LANG_TEXT = {
        "fr_FR": "Fransk",
        "fi_FI": "Finsk",
        "pt_PT": "Portugisisk",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiensk",
        "no_NO": "Norsk",
        "nl_NL": "Hollandsk",
@@ -177,6 +190,7 @@ LANG_TEXT = {
        "tr_TR": "Tyrkisk",
        "de_DE": "Tysk",
        "ar_AE": "Arabisk",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Svensk",
        "pl_PL": "Polsk",
        "T1": "Benyt venligst OP og NED tasten til at vælge sprog. Tryk bagefter på OK knappen.",
@@ -186,6 +200,7 @@ LANG_TEXT = {
        "fr_FR": "Frans",
        "fi_FI": "Fins",
        "pt_PT": "Portugees",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiaans",
        "no_NO": "Noors",
        "nl_NL": "Nederlands",
@@ -203,6 +218,7 @@ LANG_TEXT = {
        "tr_TR": "Turks",
        "de_DE": "Duits",
        "ar_AE": "Arabisch",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Zweeds",
        "pl_PL": "Pools",
        "T1": "Gebruik de omhoog/omlaag toeten om de gewenste taal te selecteren. Druk daarna op OK.",
@@ -212,6 +228,7 @@ LANG_TEXT = {
        "fr_FR": "Ranska",
        "fi_FI": "Suomi",
        "pt_PT": "Portugali",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italia",
        "no_NO": "Norja",
        "nl_NL": "Hollanti",
@@ -229,15 +246,17 @@ LANG_TEXT = {
        "tr_TR": "Turkki",
        "de_DE": "Saksa",
        "ar_AE": "Arabia",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Ruotsi",
        "pl_PL": "Puola",
-       "T1": "Valitse kieli ylös/alas nappuloilla ja paina OK.",
+       "T1": "Valitse kieli ylös/alas näppäimillä ja paina OK-näppäintä.",
        "T2": "Kielivalinta",
 },
 "fr_FR": {
        "fr_FR": "Français",
        "fi_FI": "Finlandais",
        "pt_PT": "Portugais",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italien",
        "no_NO": "Norvégien",
        "nl_NL": "Hollandais",
@@ -255,6 +274,7 @@ LANG_TEXT = {
        "tr_TR": "Turke",
        "de_DE": "Allemand",
        "ar_AE": "Arabe",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Suédois",
        "pl_PL": "Polonais",
        "T1": "Veuillez utiliser les touches HAUT et BAS pour choisir votre langage. Ensuite presser le bouton OK.",
@@ -264,6 +284,7 @@ LANG_TEXT = {
        "fr_FR": "Γαλλικά",
        "fi_FI": "Φιλλανδικά",
        "pt_PT": "Πορτογαλλικά",
+       "fy_x-FY": "Frisian",
        "it_IT": "Ιταλικά",
        "no_NO": "Νορβηφικά",
        "nl_NL": "Ολλανδικά",
@@ -281,6 +302,7 @@ LANG_TEXT = {
        "tr_TR": "Τούρκικα",
        "de_DE": "Γερμανικά",
        "ar_AE": "Αραβικά",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Σουιδεζικά",
        "pl_PL": "Πολωνικά",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -290,6 +312,7 @@ LANG_TEXT = {
        "fr_FR": "Francia",
        "fi_FI": "Finn",
        "pt_PT": "Portugál",
+       "fy_x-FY": "Frisian",
        "it_IT": "Olasz",
        "no_NO": "Norvég",
        "nl_NL": "Holland",
@@ -307,6 +330,7 @@ LANG_TEXT = {
        "tr_TR": "Török",
        "de_DE": "Német",
        "ar_AE": "Arab",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Svéd",
        "pl_PL": "Lengyel",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -316,6 +340,7 @@ LANG_TEXT = {
        "fr_FR": "Prancūzų",
        "fi_FI": "Suomių",
        "pt_PT": "Portugalų",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italų",
        "no_NO": "Norvegų",
        "nl_NL": "Olandų",
@@ -333,6 +358,7 @@ LANG_TEXT = {
        "tr_TR": "Turkų",
        "de_DE": "Vokiečių",
        "ar_AE": "Arabų",
+       "uk_UA": "Ukrainiečių",
        "sv_SE": "Švedų",
        "pl_PL": "Lenkų",
        "T1": "Prašome naudoti AUKŠTYN IR ŽEMYN mygtukus, kad išsirinktumėte savo kalbą. Po to spauskite OK mygtuką.",
@@ -342,6 +368,7 @@ LANG_TEXT = {
        "fr_FR": "Franska",
        "fi_FI": "Finnska",
        "pt_PT": "Portúgalska",
+       "fy_x-FY": "Frisian",
        "it_IT": "Ítalska",
        "no_NO": "Norska",
        "nl_NL": "Hollenska",
@@ -359,15 +386,17 @@ LANG_TEXT = {
        "tr_TR": "Tyrkneska",
        "de_DE": "Þýska",
        "ar_AE": "Arabíska",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Sænskt",
        "pl_PL": "Pólska",
-       "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
+       "T1": "Vinsamlega notið UP og NIÐUR takka til að velja tungumál. Ýttu svo á OK til að nota.",
        "T2": "Val tungumáls",
 },
 "it_IT": {
        "fr_FR": "Francese",
        "fi_FI": "Finlandese",
        "pt_PT": "Portoghese",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiano",
        "no_NO": "Norvegese",
        "nl_NL": "Olandese",
@@ -385,6 +414,7 @@ LANG_TEXT = {
        "tr_TR": "Turco",
        "de_DE": "Tedesco",
        "ar_AE": "Arabo",
+       "uk_UA": "Ucraino",
        "sv_SE": "Svedese",
        "pl_PL": "Polacco",
        "T1": "Selezionare la propria lingua utilizzando i tasti Sù/Giù. Premere OK per confermare.",
@@ -394,6 +424,7 @@ LANG_TEXT = {
        "fr_FR": "Fransk",
        "fi_FI": "Finsk",
        "pt_PT": "Portugisisk",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiensk",
        "no_NO": "Norsk",
        "nl_NL": "Nederlandsk",
@@ -411,6 +442,7 @@ LANG_TEXT = {
        "tr_TR": "Tyrkisk",
        "de_DE": "Tysk",
        "ar_AE": "Arabisk",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Svensk",
        "pl_PL": "Polsk",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -420,6 +452,7 @@ LANG_TEXT = {
        "fr_FR": "Francuski",
        "fi_FI": "Fiński",
        "pt_PT": "Portugalski",
+       "fy_x-FY": "Frisian",
        "it_IT": "Włoski",
        "no_NO": "Norweski",
        "nl_NL": "Holenderski",
@@ -437,6 +470,7 @@ LANG_TEXT = {
        "tr_TR": "Turecki",
        "de_DE": "Niemiecki",
        "ar_AE": "Arabski",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Szwedzki",
        "pl_PL": "Polski",
        "T1": "W celu wyboru języka użyj klawiszy GÓRA i DÓŁ. Nastepnie nacisnij przycisk OK.",
@@ -446,6 +480,7 @@ LANG_TEXT = {
        "fr_FR": "Francês",
        "fi_FI": "Finlandês",
        "pt_PT": "Português",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiano",
        "no_NO": "Norueguês",
        "nl_NL": "Holandês",
@@ -463,6 +498,7 @@ LANG_TEXT = {
        "tr_TR": "Turco",
        "de_DE": "Alemão",
        "ar_AE": "Arabe",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Sueco",
        "pl_PL": "Polaco",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -472,6 +508,7 @@ LANG_TEXT = {
        "fr_FR": "Французский",
        "fi_FI": "Окончание",
        "pt_PT": "Portuguese",
+       "fy_x-FY": "Frisian",
        "it_IT": "Итальянский",
        "no_NO": "Норвежский",
        "nl_NL": "Нидерландский",
@@ -489,6 +526,7 @@ LANG_TEXT = {
        "tr_TR": "Турецкий",
        "de_DE": "Немецкий",
        "ar_AE": "Арабский",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Шведский",
        "pl_PL": "Polish",
        "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
@@ -498,6 +536,7 @@ LANG_TEXT = {
        "fr_FR": "Francés",
        "fi_FI": "Finlandés",
        "pt_PT": "Portugués",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italiano",
        "no_NO": "Noruego",
        "nl_NL": "Alemán",
@@ -515,6 +554,7 @@ LANG_TEXT = {
        "tr_TR": "Turco",
        "de_DE": "Alemán",
        "ar_AE": "Arábigo",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Sueco",
        "pl_PL": "Polaco",
        "T1": "Use las teclas ARRIBA y ABAJO para seleccionar su idioma. Después, pulse el botón OK.",
@@ -524,6 +564,7 @@ LANG_TEXT = {
        "fr_FR": "Franska",
        "fi_FI": "Finska",
        "pt_PT": "Portugisiska",
+       "fy_x-FY": "Frisian",
        "it_IT": "Italienska",
        "no_NO": "Norska",
        "nl_NL": "Holländska",
@@ -541,6 +582,7 @@ LANG_TEXT = {
        "tr_TR": "Turkiska",
        "de_DE": "Tyska",
        "ar_AE": "Arabiska",
+       "uk_UA": "Ukrainian",
        "sv_SE": "Svenska",
        "pl_PL": "Polska",
        "T1": "Vänligen använd UPP och NER pil för att välja språk. Efter val tryck på OK knappen.",
@@ -548,28 +590,86 @@ LANG_TEXT = {
 },
 "tr_TR": {
        "fr_FR": "Fransızca",
-       "fi_FI": "Bitiş",
-       "pt_PT": "Portuguese",
-       "it_IT": "İtalya",
-       "no_NO": "Norveç",
-       "nl_NL": "Almanca",
+       "fi_FI": "Fince",
+       "pt_PT": "Portekizce",
+       "fy_x-FY": "Frisian",
+       "it_IT": "İtalyanca",
+       "no_NO": "Norveççe",
+       "nl_NL": "Flemenkçe",
        "el_GR": "Greek",
-       "hu_HU": "Hungarian",
-       "lt_LT": "Lithuanian",
-       "hr_HR": "Croatian",
+       "hu_HU": "Macarca",
+       "lt_LT": "Litvanyaca",
+       "hr_HR": "Hırvatça",
        "en_EN": "İngilizce",
        "es_ES": "İspanyolca",
-       "ca_AD": "Catalan",
-       "ru_RU": "Russian",
-       "is_IS": "izlanda",
-       "da_DK": "Çanak",
-       "cs_CZ": "Czech",
-       "tr_TR": "Turkish",
-       "de_DE": "Alman",
+       "ca_AD": "Katalanca",
+       "ru_RU": "Rusça",
+       "is_IS": "İzlandaca",
+       "da_DK": "Danca",
+       "cs_CZ": "Çekçe",
+       "tr_TR": "Türkçe",
+       "de_DE": "Almanca",
        "ar_AE": "Arapça",
-       "sv_SE": "İsveç",
+       "uk_UA": "Ukraynaca",
+       "sv_SE": "İsveççe",
        "pl_PL": "Polish",
-       "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.",
-       "T2": "Lisan Seçimi",
+       "T1": "Dil seçiminizi, yapmak için YUKARI ve AŞAĞI tuşlarını, onaylamak için OK tuşunu kullanın.",
+       "T2": "Dil seçimi",
+},
+"uk_UA": {
+       "fr_FR": "Французька",
+       "fi_FI": "Фінська",
+       "pt_PT": "Португальська",
+       "fy_x-FY": "Frisian",
+       "it_IT": "Італійська",
+       "no_NO": "Норвежська",
+       "nl_NL": "Данська",
+       "el_GR": "Грецька",
+       "hu_HU": "Угорська",
+       "lt_LT": "Литовська",
+       "hr_HR": "Хорватьска",
+       "en_EN": "Англійська",
+       "es_ES": "Іспанська",
+       "ca_AD": "Каталонська",
+       "ru_RU": "Російська",
+       "is_IS": "Ісландська",
+       "da_DK": "Данська",
+       "cs_CZ": "Чешська",
+       "tr_TR": "Турецька",
+       "de_DE": "Німецька",
+       "ar_AE": "Арабський",
+       "uk_UA": "Ukrainian",
+       "sv_SE": "Шведська",
+       "pl_PL": "Польська",
+       "T1": "Використовуйте кнопки ВВЕРХ і ВНИЗ, щоб вибрати Вашу мову. Після вибору натисніть OK.",
+       "T2": "Вибір мови",
+},
+"fy_x-FY": {
+       "fr_FR": "Frans",
+       "fi_FI": "Finsk",
+       "pt_PT": "Portugeesk",
+       "fy_x-FY": "Frisian",
+       "it_IT": "Italiaansk",
+       "no_NO": "Noarsk",
+       "nl_NL": "Nederlansk",
+       "el_GR": "Gryks",
+       "hu_HU": "Hongaarsk",
+       "lt_LT": "Lithuaniansk",
+       "hr_HR": "Kroatysk",
+       "en_EN": "Engelsk",
+       "es_ES": "Spaans",
+       "ca_AD": "Catalânsk",
+       "ru_RU": "Russysk",
+       "is_IS": "Iislansk",
+       "da_DK": "Deensk",
+       "cs_CZ": "Tsjechysk",
+       "tr_TR": "Turks",
+       "de_DE": "Dúts",
+       "ar_AE": "Arabysk",
+       "uk_UA": "Ukrainian",
+       "sv_SE": "Zweeds",
+       "pl_PL": "Poolsk",
+       "T1": "Brúk de op en del toets om jo taal te kiezen. Dernei druk op OK",
+       "T2": "Taal Kieze",
 },
 }
index a63562c8536ec75f706cd7f92a70eea654ce07cf..69f935e4718b86ebd7eddf26e7d88ac927690e2c 100644 (file)
@@ -51,7 +51,7 @@ class Test(Screen):
        def mycallback(self, answer):
                print "answer:", answer
                if answer:
-                       raise "test-crash"
+                       raise Exception("test-crash")
                self.close()
        
        def keyLeft(self):
index 0d2454e49c34e8bd854848a813789c219ec5dac3..1ef15a53b9e491232858e297d84441a81e5a754f 100644 (file)
@@ -12,10 +12,12 @@ from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
 from Screens.FixedMenu import FixedMenu
 from Screens.HelpMenu import HelpableScreen
+from ServiceReference import ServiceReference
+from Components.Sources.List import List
+
 import bisect
 
 def CutListEntry(where, what):
-       res = [ (where, what) ]
        w = where / 90
        ms = w % 1000
        s = (w / 1000) % 60
@@ -23,16 +25,17 @@ def CutListEntry(where, what):
        h = w / 3600000
        if what == 0:
                type = "IN"
+               type_col = 0x004000
        elif what == 1:
                type = "OUT"
+               type_col = 0x400000
        elif what == 2:
                type = "MARK"
+               type_col = 0x000040
        elif what == 3:
                type = "LAST"
-       res.append(MultiContentEntryText(size=(400, 20), text = "%dh:%02dm:%02ds:%03d" % (h, m, s, ms)))
-       res.append(MultiContentEntryText(pos=(400,0), size=(130, 20), text = type, flags = RT_HALIGN_RIGHT))
-
-       return res
+               type_col = 0x000000
+       return ((where, what), "%dh:%02dm:%02ds:%03d" % (h, m, s, ms), type, type_col)
 
 class CutListContextMenu(FixedMenu):
        RET_STARTCUT = 0
@@ -42,6 +45,7 @@ class CutListContextMenu(FixedMenu):
        RET_DELETEMARK = 4
        RET_REMOVEBEFORE = 5
        RET_REMOVEAFTER = 6
+       RET_GRABFRAME = 7
 
        SHOW_STARTCUT = 0
        SHOW_ENDCUT = 1
@@ -75,6 +79,7 @@ class CutListContextMenu(FixedMenu):
                else:
                        menu.append((_("remove this mark"), self.removeMark))
 
+               menu.append((("grab this frame as bitmap"), self.grabFrame))
                FixedMenu.__init__(self, session, _("Cut"), menu)
                self.skinName = "Menu"
 
@@ -99,50 +104,8 @@ class CutListContextMenu(FixedMenu):
        def removeAfter(self):
                self.close(self.RET_REMOVEAFTER)
 
-
-class CutList(GUIComponent):
-       def __init__(self, list):
-               GUIComponent.__init__(self)
-               self.l = eListboxPythonMultiContent()
-               self.setList(list)
-               self.l.setFont(0, gFont("Regular", 20))
-               self.onSelectionChanged = [ ]
-
-       def getCurrent(self):
-               return self.l.getCurrentSelection()
-
-       def getCurrentIndex(self):
-               return self.l.getCurrentSelectionIndex()
-
-       GUI_WIDGET = eListbox
-
-       def postWidgetCreate(self, instance):
-               instance.setContent(self.l)
-               instance.setItemHeight(30)
-               instance.selectionChanged.get().append(self.selectionChanged)
-
-       def preWidgetRemove(self, instance):
-               instance.setContent(None)
-               instance.selectionChanged.get().remove(self.selectionChanged)
-
-       def selectionChanged(self):
-               for x in self.onSelectionChanged:
-                       x()
-
-       def invalidateEntry(self, index):
-               self.l.invalidateEntry(index)
-
-       def setIndex(self, index, data):
-               self.list[index] = data
-               self.invalidateEntry(index)
-
-       def setList(self, list):
-               self.list = list
-               self.l.setList(self.list)
-
-       def setSelection(self, index):
-               if self.instance is not None:
-                       self.instance.moveSelectionTo(index)
+       def grabFrame(self):
+               self.close(self.RET_GRABFRAME)
 
 class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, HelpableScreen):
        skin = """
@@ -161,7 +124,17 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                </widget>
                <eLabel position="62,98" size="179,274" backgroundColor="#505555" />
                <eLabel position="64,100" size="175,270" backgroundColor="#000000" />
-               <widget name="Cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" />
+               <widget source="cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
+                       <convert type="TemplatedMultiContent">
+                               {"template": [
+                                               MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)),
+                                               MultiContentEntryText(pos=(125,0), size=(50, 20), text = 2, flags = RT_HALIGN_RIGHT, backcolor = MultiContentTemplateColor(3))
+                                       ],
+                                "fonts": [gFont("Regular", 18)],
+                                "itemHeight": 20
+                               }
+                       </convert>
+               </widget>
                <widget name="Timeline" position="50,485" size="615,20" backgroundColor="#505555" pointer="skin_default/position_arrow.png:3,5" foregroundColor="black" />
                <ePixmap pixmap="skin_default/icons/mp_buttons.png" position="305,515" size="109,13" alphatest="on" />
        </screen>"""
@@ -186,8 +159,8 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self.downloadCuesheet()
 
                self["Timeline"] = ServicePositionGauge(self.session.nav)
-               self["Cutlist"] = CutList(self.getCutlist())
-               self["Cutlist"].onSelectionChanged.append(self.selectionChanged)
+               self["cutlist"] = List(self.getCutlist())
+               self["cutlist"].onSelectionChanged.append(self.selectionChanged)
 
                self["Video"] = VideoWindow(decoder = 0)
 
@@ -229,20 +202,20 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
        def setType(self, index, type):
                if len(self.cut_list):
                        self.cut_list[index] = (self.cut_list[index][0], type)
-                       self["Cutlist"].setIndex(index, CutListEntry(*self.cut_list[index]))
+                       self["cutlist"].modifyEntry(index, CutListEntry(*self.cut_list[index]))
 
        def setIn(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 0)
                self.uploadCuesheet()
 
        def setOut(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 1)
                self.uploadCuesheet()
 
        def setMark(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 2)
                self.uploadCuesheet()
 
@@ -250,7 +223,7 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self.toggleMark(onlyadd=True, tolerance=90000) # do not allow two marks in <1s
 
        def __removeMark(self):
-               m = self["Cutlist"].getCurrent()
+               m = self["cutlist"].getCurrent()
                m = m and m[0]
                if m is not None:
                        self.removeMark(m)
@@ -265,7 +238,7 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                return r
 
        def selectionChanged(self):
-               where = self["Cutlist"].getCurrent()
+               where = self["cutlist"].getCurrent()
                if where is None:
                        print "no selection"
                        return
@@ -282,11 +255,11 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
 
                # get the first changed entry, and select it
                new_list = self.getCutlist()
-               self["Cutlist"].setList(new_list)
+               self["cutlist"].list = new_list
 
                for i in range(min(len(new_list), len(self.last_cuts))):
                        if new_list[i] != self.last_cuts[i]:
-                               self["Cutlist"].setSelection(i)
+                               self["cutlist"].setIndex(i)
                                break
                self.last_cuts = new_list
 
@@ -390,6 +363,8 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                        # add 'out' point
                        bisect.insort(self.cut_list, (self.context_position, 1))
                        self.uploadCuesheet()
+               elif result == CutListContextMenu.RET_GRABFRAME:
+                       self.grabFrame()
 
        # we modify the "play" behavior a bit:
        # if we press pause while being in slowmotion, we will pause (and not play)
@@ -399,6 +374,14 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                else:
                        self.pauseService()
 
+       def grabFrame(self):
+               path = self.session.nav.getCurrentlyPlayingServiceReference().getPath()
+               from Components.Console import Console
+               grabConsole = Console()
+               cmd = 'grab -vblpr%d "%s"' % (180, path.rsplit('.',1)[0] + ".png")
+               grabConsole.ePopen(cmd)
+               self.playpauseService()
+
 def main(session, service, **kwargs):
        session.open(CutListEditor, service)
 
index 112a221e2500db44676e740826a6eac6d416f86d..b0b8197a5e606a8d692333987ebcba533f3a7237 100644 (file)
@@ -1,18 +1,10 @@
 from Tools.Directories import fileExists
-from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence
+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)])
 
-class ConfigPixelvals(ConfigSequence):
-       def __init__(self):
-               ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
-
-class ConfigPixelvals(ConfigSequence):
-       def __init__(self):
-               ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
-
 class ConfigFilename(ConfigText):
        def __init__(self):
                ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False)
@@ -35,19 +27,11 @@ class DVDProject:
                self.settings.titlesetmode = ConfigSelection(choices = [("single", _("Simple titleset (compatibility for legacy players)")), ("multi", _("Complex (allows mixing audio tracks and aspects)"))], default="multi")
                self.settings.output = ConfigSelection(choices = [("iso", _("Create DVD-ISO")), ("dvd", _("Burn DVD"))])
                self.settings.isopath = ConfigText(fixed_size = False, visible_width = 40)
-               self.settings.dataformat = ConfigSelection(choices = [("iso9660_1", ("ISO9660 Level 1")), ("iso9660_4", ("ISO9660 version 2")), ("udf", ("UDF"))])                      
-               self.settings.menubg = ConfigFilename()
-               self.settings.menuaudio = ConfigFilename()
-               self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40)
-               self.settings.subtitleformat = ConfigText(fixed_size = False, visible_width = 40)
-               self.settings.color_headline = ConfigColor()
-               self.settings.color_highlight = ConfigColor()
-               self.settings.color_button = ConfigColor()
-               self.settings.font_face = ConfigFilename()
-               self.settings.font_size = ConfigPixelvals()
-               self.settings.space = ConfigPixelvals()
+               self.settings.dataformat = ConfigSelection(choices = [("iso9660_1", ("ISO9660 Level 1")), ("iso9660_4", ("ISO9660 version 2")), ("udf", ("UDF"))])
+               self.settings.menutemplate = ConfigFilename()
                self.settings.vmgm = ConfigFilename()
-               self.filekeys = ["vmgm", "menubg", "menuaudio", "font_face", "isopath"]
+               self.filekeys = ["vmgm", "isopath", "menutemplate"]
+               self.menutemplate = MenuTemplate()
 
        def addService(self, service):
                import DVDTitle
@@ -65,12 +49,30 @@ class DVDProject:
                list.append('\t<settings ')
                for key, val in self.settings.dict().iteritems():
                        list.append( key + '="' + str(val.getValue()) + '" ' )
-               list.append(' />\n')            
+               list.append('/>\n')
                list.append('\t<titles>\n')
                for title in self.titles:
-                       list.append('\t\t<path>')
+                       list.append('\t\t<title>\n')
+                       list.append('\t\t\t<path>')
                        list.append(stringToXML(title.source.getPath()))
                        list.append('</path>\n')
+                       list.append('\t\t\t<properties ')
+                       audiotracks = []
+                       for key, val in title.properties.dict().iteritems():
+                               if type(val) is ConfigSubList:
+                                       audiotracks.append('\t\t\t<audiotracks>\n')
+                                       for audiotrack in val:
+                                               audiotracks.append('\t\t\t\t<audiotrack ')
+                                               for subkey, subval in audiotrack.dict().iteritems():
+                                                       audiotracks.append( subkey + '="' + str(subval.getValue()) + '" ' )
+                                               audiotracks.append(' />\n')
+                                       audiotracks.append('\t\t\t</audiotracks>\n')
+                               else:
+                                       list.append( key + '="' + str(val.getValue()) + '" ' )
+                       list.append('/>\n')
+                       for line in audiotracks:
+                               list.append(line)
+                       list.append('\t\t</title>\n')
                list.append('\t</titles>\n')
                list.append('</DreamDVDBurnerProject>\n')
 
@@ -89,6 +91,13 @@ class DVDProject:
                        return False
                return filename
 
+       def load(self, filename):
+               ret = self.loadProject(filename)
+               if ret:
+                       ret = self.menutemplate.loadTemplate(self.settings.menutemplate.getValue())
+                       self.error += self.menutemplate.error
+               return ret
+
        def loadProject(self, filename):
                import xml.dom.minidom
                try:
@@ -105,9 +114,9 @@ class DVDProject:
                          if project.nodeType == xml.dom.minidom.Element.nodeType:
                            if project.tagName == 'settings':
                                i = 0
-                               if project.attributes.length < 11:
+                               if project.attributes.length < len(self.settings.dict()):
                                        self.error = "project attributes missing"
-                                       raise AttributeError                    
+                                       raise AttributeError
                                while i < project.attributes.length:
                                        item = project.attributes.item(i)
                                        key = item.name.encode("utf-8")
@@ -131,3 +140,44 @@ class DVDProject:
                        self.error += (" in project '%s'") % (filename)
                        return False
                return True
+
+class MenuTemplate(DVDProject):
+       def __init__(self):
+               self.settings = ConfigSubsection()
+               self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40)
+               self.settings.subtitleformat = ConfigText(fixed_size = False, visible_width = 40)
+               self.settings.menubg = ConfigFilename()
+               self.settings.menuaudio = ConfigFilename()
+               self.settings.dimensions = ConfigSequence(seperator = ',', default = [576,720], limits = [(352,720),(480,576)])
+               self.settings.rows = ConfigInteger(default = 4, limits = (1, 10))
+               self.settings.cols = ConfigInteger(default = 1, limits = (1, 4))
+               self.settings.color_headline = ConfigColor()
+               self.settings.color_headline = ConfigColor()
+               self.settings.color_highlight = ConfigColor()
+               self.settings.color_button = ConfigColor()
+               self.settings.fontface_headline = ConfigFilename()
+               self.settings.fontface_title = ConfigFilename()
+               self.settings.fontface_subtitle = ConfigFilename()
+               self.settings.fontsize_headline = ConfigInteger(default = 46, limits = (0, 199))
+               self.settings.fontsize_title = ConfigInteger(default = 24, limits = (0, 199))
+               self.settings.fontsize_subtitle = ConfigInteger(default = 14, limits = (0, 199))
+               self.settings.margin_top = ConfigInteger(default = 120, limits = (0, 500))
+               self.settings.margin_bottom = ConfigInteger(default = 40, limits = (0, 500))
+               self.settings.margin_left = ConfigInteger(default = 56, limits = (0, 500))
+               self.settings.margin_right = ConfigInteger(default = 56, limits = (0, 500))
+               self.settings.space_rows = ConfigInteger(default = 32, limits = (0, 500))
+               self.settings.space_cols = ConfigInteger(default = 24, limits = (0, 500))
+               self.settings.prev_page_text = ConfigText(default = "<<<", fixed_size = False)
+               self.settings.next_page_text = ConfigText(default = ">>>", fixed_size = False)
+               self.settings.offset_headline = ConfigSequence(seperator = ',', default = [0,0], limits = [(-1,500),(-1,500)])
+               self.settings.offset_title = ConfigSequence(seperator = ',', default = [0,0], limits = [(-1,500),(-1,500)])
+               self.settings.offset_subtitle = ConfigSequence(seperator = ',', default = [20,0], limits = [(-1,500),(-1,500)])
+               self.settings.offset_thumb = ConfigSequence(seperator = ',', default = [40,0], limits = [(-1,500),(-1,500)])
+               self.settings.thumb_size = ConfigSequence(seperator = ',', default = [200,158], limits = [(0,576),(-1,720)])
+               self.settings.thumb_border = ConfigInteger(default = 2, limits = (0, 20))
+               self.filekeys = ["menubg", "menuaudio", "fontface_headline", "fontface_title", "fontface_subtitle"]
+
+       def loadTemplate(self, filename):
+               ret = DVDProject.loadProject(self, filename)
+               DVDProject.error = self.error
+               return ret
index b1c627aa4e3d3e2c842e2ad6ad9994db1f98d972..660005e628ebfb2f9a5f67c7f018bb26504992bf 100644 (file)
@@ -51,11 +51,11 @@ class DVDTitle:
                self.length = info.getLength(service)
 
        def initDVDmenuText(self, project, track):
-               self.properties.menutitle.setValue(self.formatDVDmenuText(project.settings.titleformat.getValue(), track))
-               self.properties.menusubtitle.setValue(self.formatDVDmenuText(project.settings.subtitleformat.getValue(), track))
+               s = project.menutemplate.settings
+               self.properties.menutitle.setValue(self.formatDVDmenuText(s.titleformat.getValue(), track))
+               self.properties.menusubtitle.setValue(self.formatDVDmenuText(s.subtitleformat.getValue(), track))
 
        def formatDVDmenuText(self, template, track):
-               properties = self.properties
                template = template.replace("$i", str(track))
                template = template.replace("$t", self.DVBname)
                template = template.replace("$d", self.DVBdescr)
@@ -76,7 +76,7 @@ class DVDTitle:
                                audiolist.append(trackstring)
                audiostring = ', '.join(audiolist)
                template = template.replace("$A", audiostring)
-               
+
                if template.find("$l") >= 0:
                        l = self.length
                        lengthstring = "%d:%02d:%02d" % (l/3600, l%3600/60, l%60)
@@ -90,7 +90,7 @@ class DVDTitle:
                else:
                        template = template.replace("$Y", "").replace("$M", "").replace("$D", "").replace("$T", "")
                return template
-       
+
        def produceFinalCuesheet(self):
                CUT_TYPE_IN = 0
                CUT_TYPE_OUT = 1
index 836c9fbd6c63f82e24eb9de95e12242be247e7ab..ce16259ea568c5583a48446ff085714d19f2bc93 100644 (file)
@@ -50,7 +50,7 @@ class DVDToolbox(Screen):
                    "green": self.update,
                    "yellow": self.format,
                    #"blue": self.eject,
-                   "cancel": self.close,
+                   "cancel": self.exit,
                    "pageUp": self.pageUp,
                    "pageDown": self.pageDown
                })
@@ -63,7 +63,7 @@ class DVDToolbox(Screen):
        def pageDown(self):
                self["details"].pageDown()
 
-       def update(self, dev="", media_state=""):
+       def update(self, dev="", action=""):
                self["space_label"].text = _("Please wait... Loading list...")
                self["info"].text = ""
                self["details"].setText("")
@@ -89,7 +89,7 @@ class DVDToolbox(Screen):
                for line in mediuminfo.splitlines():
                        if line.find("Mounted Media:") > -1:
                                mediatype = line.rsplit(',',1)[1][1:]
-                               if mediatype.find("RW") > 0:
+                               if mediatype.find("RW") > 0 or mediatype.find("RAM") > 0:
                                        self.formattable = True
                                else:
                                        self.formattable = False
@@ -186,7 +186,7 @@ class DVDformatTask(Task):
                if line.startswith("- media is already formatted"):
                        self.error = self.ERROR_ALREADYFORMATTED
                        self.retryargs = [ "-force" ]
-               if line.startswith("- media is not blank"):
+               if line.startswith("- media is not blank") or line.startswith("  -format=full  to perform full (lengthy) reformat;"):
                        self.error = self.ERROR_ALREADYFORMATTED
                        self.retryargs = [ "-blank" ]
                if line.startswith(":-( mounted media doesn't appear to be"):
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml b/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml
new file mode 100644 (file)
index 0000000..2c35e53
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<DreamDVDBurnProject>
+       <settings
+               name="Dreambox DVD record"
+               authormode="menu_linked"
+               menutemplate="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/Thumbs menu clouds.ddvdm.xml"
+               titlesetmode="multi"
+               vmgm="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/vmgmdream.mpg"
+               output="dvd"
+               isopath="/media/hdd/movie/"
+               dataformat="iso9660_4"
+       />
+       <titles> </titles>
+</DreamDVDBurnProject>
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml b/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml
deleted file mode 100644 (file)
index 7d8de8c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<DreamDVDBurnerProject>
-       <settings
-               name="Dreambox DVD record"
-               authormode="menu_linked"
-               titlesetmode="multi"
-               titleformat="$i. $t"
-               subtitleformat="$D.$M.$Y, $T $C, $d"
-               vmgm="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/vmgmdream.mpg"
-               menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_boat.jpg"
-               menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
-               color_button="[8, 0, 0]"
-               color_highlight="[0, 192, 192]"
-               color_headline="[0, 0, 128]"
-               font_face="/usr/share/fonts/nmsbd.ttf"
-               font_size="[46, 24, 14]"
-               space="[120, 32, 56]"
-               output="dvd"
-               isopath="/media/hdd/movie/"
-               dataformat="iso9660_4"
-       />
-       <titles> </titles>
-</DreamDVDBurnerProject>
index 89ca90fd3c1b0e249ccb3fe51f86b0ebda169343..d0c9d3c63c0b973448139f5fd2e5f36066b57d62 100644 (file)
@@ -165,7 +165,7 @@ class DemuxTask(Task):
        def cleanup(self, failed):
                if failed:
                        import os
-                       for file in self.generated_files.itervalues():
+                       for file in self.generated_files:
                                os.remove(file)
 
 class MplexTaskPostcondition(Condition):
@@ -220,7 +220,7 @@ class RemoveESFiles(Task):
 
        def prepare(self):
                self.args += ["-f"]
-               self.args += self.demux_task.generated_files.values()
+               self.args += self.demux_task.generated_files
                self.args += [self.demux_task.cutfile]
 
 class DVDAuthorTask(Task):
@@ -368,6 +368,9 @@ class CheckDiskspaceTask(Task):
                self.global_preconditions.append(DiskspacePrecondition(diskSpaceNeeded))
                self.weighting = 5
 
+       def abort(self):
+               self.finish(aborted = True)
+
        def run(self, callback):
                failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False)
                if len(failed_preconditions):
@@ -452,13 +455,13 @@ class ImagePrepareTask(Task):
                try:
                        from ImageFont import truetype
                        from Image import open as Image_open
-                       s = self.job.project.settings
+                       s = self.job.project.menutemplate.settings
+                       (width, height) = s.dimensions.getValue()
                        self.Menus.im_bg_orig = Image_open(s.menubg.getValue())
-                       if self.Menus.im_bg_orig.size != (self.Menus.imgwidth, self.Menus.imgheight):
-                               self.Menus.im_bg_orig = self.Menus.im_bg_orig.resize((720, 576))        
-                       self.Menus.fontsizes = s.font_size.getValue()
-                       fontface = s.font_face.getValue()
-                       self.Menus.fonts = [truetype(fontface, self.Menus.fontsizes[0]), truetype(fontface, self.Menus.fontsizes[1]), truetype(fontface, self.Menus.fontsizes[2])]
+                       if self.Menus.im_bg_orig.size != (width, height):
+                               self.Menus.im_bg_orig = self.Menus.im_bg_orig.resize((width, height))
+                       self.Menus.fontsizes = [s.fontsize_headline.getValue(), s.fontsize_title.getValue(), s.fontsize_subtitle.getValue()]
+                       self.Menus.fonts = [(truetype(s.fontface_headline.getValue(), self.Menus.fontsizes[0])), (truetype(s.fontface_title.getValue(), self.Menus.fontsizes[1])),(truetype(s.fontface_subtitle.getValue(), self.Menus.fontsizes[2]))]
                        Task.processFinished(self, 0)
                except:
                        Task.processFinished(self, 1)
@@ -477,98 +480,158 @@ class MenuImageTask(Task):
 
        def run(self, callback):
                self.callback = callback
-               try:
-                       import ImageDraw, Image, os
-                       s = self.job.project.settings
-                       fonts = self.Menus.fonts
-                       im_bg = self.Menus.im_bg_orig.copy()
-                       im_high = Image.new("P", (self.Menus.imgwidth, self.Menus.imgheight), 0)
-                       im_high.putpalette(self.Menus.spu_palette)
-                       draw_bg = ImageDraw.Draw(im_bg)
-                       draw_high = ImageDraw.Draw(im_high)
-                       if self.menu_count == 1:
-                               headline = s.name.getValue().decode("utf-8")
-                               textsize = draw_bg.textsize(headline, font=fonts[0])
-                               if textsize[0] > self.Menus.imgwidth:
-                                       offset = (0 , 20)
-                               else:
-                                       offset = (((self.Menus.imgwidth-textsize[0]) / 2) , 20)
-                               draw_bg.text(offset, headline, fill=self.Menus.color_headline, font=fonts[0])
-                       spuxml = """<?xml version="1.0" encoding="utf-8"?>
-               <subpictures>
-               <stream>
-               <spu 
-               highlight="%s"
-               transparent="%02x%02x%02x"
-               start="00:00:00.00"
-               force="yes" >""" % (self.highlightpngfilename, self.Menus.spu_palette[0], self.Menus.spu_palette[1], self.Menus.spu_palette[2])
-                       s_top, s_rows, s_left = s.space.getValue()
-                       rowheight = (self.Menus.fontsizes[1]+self.Menus.fontsizes[2]+s_rows)
-                       menu_start_title = (self.menu_count-1)*self.job.titles_per_menu + 1
-                       menu_end_title = (self.menu_count)*self.job.titles_per_menu + 1
-                       nr_titles = len(self.job.project.titles)
-                       if menu_end_title > nr_titles:
-                               menu_end_title = nr_titles+1
-                       menu_i = 0
-                       for title_no in range( menu_start_title , menu_end_title ):
-                               menu_i += 1
-                               title = self.job.project.titles[title_no-1]
-                               top = s_top + ( menu_i * rowheight )
-                               titleText = title.formatDVDmenuText(s.titleformat.getValue(), title_no).decode("utf-8")
-                               draw_bg.text((s_left,top), titleText, fill=self.Menus.color_button, font=fonts[1])
-                               draw_high.text((s_left,top), titleText, fill=1, font=self.Menus.fonts[1])
-                               subtitleText = title.formatDVDmenuText(s.subtitleformat.getValue(), title_no).decode("utf-8")
-                               draw_bg.text((s_left,top+36), subtitleText, fill=self.Menus.color_button, font=fonts[2])
-                               bottom = top+rowheight
-                               if bottom > self.Menus.imgheight:
-                                       bottom = self.Menus.imgheight
-                               spuxml += """
-               <button name="button%s" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (str(title_no).zfill(2),s_left,self.Menus.imgwidth,top,bottom )
-                       if self.menu_count < self.job.nr_menus:
-                               next_page_text = ">>>"
-                               textsize = draw_bg.textsize(next_page_text, font=fonts[1])
-                               offset = ( self.Menus.imgwidth-textsize[0]-2*s_left, s_top + ( self.job.titles_per_menu * rowheight ) )
-                               draw_bg.text(offset, next_page_text, fill=self.Menus.color_button, font=fonts[1])
-                               draw_high.text(offset, next_page_text, fill=1, font=fonts[1])
-                               spuxml += """
-               <button name="button_next" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (offset[0],offset[0]+textsize[0],offset[1],offset[1]+textsize[1])
-                       if self.menu_count > 1:
-                               prev_page_text = "<<<"
-                               textsize = draw_bg.textsize(prev_page_text, font=fonts[1])
-                               offset = ( 2*s_left, s_top + ( self.job.titles_per_menu * rowheight ) )
-                               draw_bg.text(offset, prev_page_text, fill=self.Menus.color_button, font=fonts[1])
-                               draw_high.text(offset, prev_page_text, fill=1, font=fonts[1])
-                               spuxml += """
-               <button name="button_prev" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (offset[0],offset[0]+textsize[0],offset[1],offset[1]+textsize[1])
-                       del draw_bg
-                       del draw_high
-                       fd=open(self.menubgpngfilename,"w")
-                       im_bg.save(fd,"PNG")
-                       fd.close()
-                       fd=open(self.highlightpngfilename,"w")
-                       im_high.save(fd,"PNG")
-                       fd.close()
+               #try:
+               import ImageDraw, Image, os
+               s = self.job.project.menutemplate.settings
+               s_top = s.margin_top.getValue()
+               s_bottom = s.margin_bottom.getValue()
+               s_left = s.margin_left.getValue()
+               s_right = s.margin_right.getValue()
+               s_rows = s.space_rows.getValue()
+               s_cols = s.space_cols.getValue()
+               nr_cols = s.cols.getValue()
+               nr_rows = s.rows.getValue()
+               thumb_size = s.thumb_size.getValue()
+               if thumb_size[0]:
+                       from Image import open as Image_open
+               (s_width, s_height) = s.dimensions.getValue()
+               fonts = self.Menus.fonts
+               im_bg = self.Menus.im_bg_orig.copy()
+               im_high = Image.new("P", (s_width, s_height), 0)
+               im_high.putpalette(self.Menus.spu_palette)
+               draw_bg = ImageDraw.Draw(im_bg)
+               draw_high = ImageDraw.Draw(im_high)
+               if self.menu_count == 1:
+                       headlineText = self.job.project.settings.name.getValue().decode("utf-8")
+                       headlinePos = self.getPosition(s.offset_headline.getValue(), 0, 0, s_width, s_top, draw_bg.textsize(headlineText, font=fonts[0]))
+                       draw_bg.text(headlinePos, headlineText, fill=self.Menus.color_headline, font=fonts[0])
+               spuxml = """<?xml version="1.0" encoding="utf-8"?>
+       <subpictures>
+       <stream>
+       <spu 
+       highlight="%s"
+       transparent="%02x%02x%02x"
+       start="00:00:00.00"
+       force="yes" >""" % (self.highlightpngfilename, self.Menus.spu_palette[0], self.Menus.spu_palette[1], self.Menus.spu_palette[2])
+               #rowheight = (self.Menus.fontsizes[1]+self.Menus.fontsizes[2]+thumb_size[1]+s_rows)
+               menu_start_title = (self.menu_count-1)*self.job.titles_per_menu + 1
+               menu_end_title = (self.menu_count)*self.job.titles_per_menu + 1
+               nr_titles = len(self.job.project.titles)
+               if menu_end_title > nr_titles:
+                       menu_end_title = nr_titles+1
+               col = 1
+               row = 1
+               for title_no in range( menu_start_title , menu_end_title ):
+                       title = self.job.project.titles[title_no-1]
+                       col_width  = ( s_width  - s_left - s_right  ) / nr_cols
+                       row_height = ( s_height - s_top  - s_bottom ) / nr_rows
+                       left =   s_left + ( (col-1) * col_width ) + s_cols/2
+                       right =    left + col_width - s_cols
+                       top =     s_top + ( (row-1) * row_height) + s_rows/2
+                       bottom =    top + row_height - s_rows
+                       width = right - left
+                       height = bottom - top
+
+                       if bottom > s_height:
+                               bottom = s_height
+                       #draw_bg.rectangle((left, top, right, bottom), outline=(255,0,0))
+                       im_cell_bg = Image.new("RGBA", (width, height),(0,0,0,0))
+                       draw_cell_bg = ImageDraw.Draw(im_cell_bg)
+                       im_cell_high = Image.new("P", (width, height), 0)
+                       im_cell_high.putpalette(self.Menus.spu_palette)
+                       draw_cell_high = ImageDraw.Draw(im_cell_high)
+
+                       if thumb_size[0]:
+                               thumbPos = self.getPosition(s.offset_thumb.getValue(), 0, 0, width, height, thumb_size)
+                               box = (thumbPos[0], thumbPos[1], thumbPos[0]+thumb_size[0], thumbPos[1]+thumb_size[1])
+                               try:
+                                       thumbIm = Image_open(title.inputfile.rsplit('.',1)[0] + ".png")
+                                       im_cell_bg.paste(thumbIm,thumbPos)
+                               except:
+                                       draw_cell_bg.rectangle(box, fill=(64,127,127,127))
+                               border = s.thumb_border.getValue()
+                               if border:
+                                       draw_cell_high.rectangle(box, fill=1)
+                                       draw_cell_high.rectangle((box[0]+border, box[1]+border, box[2]-border, box[3]-border), fill=0)
+
+                       titleText = title.formatDVDmenuText(s.titleformat.getValue(), title_no).decode("utf-8")
+                       titlePos = self.getPosition(s.offset_title.getValue(), 0, 0, width, height, draw_bg.textsize(titleText, font=fonts[1]))
+
+                       draw_cell_bg.text(titlePos, titleText, fill=self.Menus.color_button, font=fonts[1])
+                       draw_cell_high.text(titlePos, titleText, fill=1, font=self.Menus.fonts[1])
+                       
+                       subtitleText = title.formatDVDmenuText(s.subtitleformat.getValue(), title_no).decode("utf-8")
+                       subtitlePos = self.getPosition(s.offset_subtitle.getValue(), 0, 0, width, height, draw_cell_bg.textsize(subtitleText, font=fonts[2]))
+                       draw_cell_bg.text(subtitlePos, subtitleText, fill=self.Menus.color_button, font=fonts[2])
+
+                       del draw_cell_bg
+                       del draw_cell_high
+                       im_bg.paste(im_cell_bg,(left, top, right, bottom), mask=im_cell_bg)
+                       im_high.paste(im_cell_high,(left, top, right, bottom))
+
                        spuxml += """
-               </spu>
-               </stream>
-               </subpictures>"""
-       
-                       f = open(self.spuxmlfilename, "w")
-                       f.write(spuxml)
-                       f.close()
-                       Task.processFinished(self, 0)
-               except:
-                       Task.processFinished(self, 1)
+       <button name="button%s" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (str(title_no).zfill(2),left,right,top,bottom )
+                       if col < nr_cols:
+                               col += 1
+                       else:
+                               col = 1
+                               row += 1
+
+               top = s_height - s_bottom - s_rows/2
+               if self.menu_count < self.job.nr_menus:
+                       next_page_text = s.next_page_text.getValue().decode("utf-8")
+                       textsize = draw_bg.textsize(next_page_text, font=fonts[1])
+                       pos = ( s_width-textsize[0]-s_right, top )
+                       draw_bg.text(pos, next_page_text, fill=self.Menus.color_button, font=fonts[1])
+                       draw_high.text(pos, next_page_text, fill=1, font=fonts[1])
+                       spuxml += """
+       <button name="button_next" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (pos[0],pos[0]+textsize[0],pos[1],pos[1]+textsize[1])
+               if self.menu_count > 1:
+                       prev_page_text = s.prev_page_text.getValue().decode("utf-8")
+                       textsize = draw_bg.textsize(prev_page_text, font=fonts[1])
+                       pos = ( (s_left+s_cols/2), top )
+                       draw_bg.text(pos, prev_page_text, fill=self.Menus.color_button, font=fonts[1])
+                       draw_high.text(pos, prev_page_text, fill=1, font=fonts[1])
+                       spuxml += """
+       <button name="button_prev" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (pos[0],pos[0]+textsize[0],pos[1],pos[1]+textsize[1])
+               del draw_bg
+               del draw_high
+               fd=open(self.menubgpngfilename,"w")
+               im_bg.save(fd,"PNG")
+               fd.close()
+               fd=open(self.highlightpngfilename,"w")
+               im_high.save(fd,"PNG")
+               fd.close()
+               spuxml += """
+       </spu>
+       </stream>
+       </subpictures>"""
+
+               f = open(self.spuxmlfilename, "w")
+               f.write(spuxml)
+               f.close()
+               Task.processFinished(self, 0)
+               #except:
+                       #Task.processFinished(self, 1)
+                       
+       def getPosition(self, offset, left, top, right, bottom, size):
+               pos = [left, top]
+               if offset[0] != -1:
+                       pos[0] += offset[0]
+               else:
+                       pos[0] += ( (right-left) - size[0] ) / 2
+               if offset[1] != -1:
+                       pos[1] += offset[1]
+               else:
+                       pos[1] += ( (bottom-top) - size[1] ) / 2
+               return tuple(pos)
 
 class Menus:
        def __init__(self, job):
                self.job = job
                job.Menus = self
-               
-               s = self.job.project.settings
 
-               self.imgwidth = 720
-               self.imgheight = 576
+               s = self.job.project.menutemplate.settings
 
                self.color_headline = tuple(s.color_headline.getValue())
                self.color_button = tuple(s.color_button.getValue())
@@ -577,10 +640,9 @@ class Menus:
 
                ImagePrepareTask(job)
                nr_titles = len(job.project.titles)
-               if nr_titles < 6:
-                       job.titles_per_menu = 5
-               else:
-                       job.titles_per_menu = 4
+               
+               job.titles_per_menu = s.cols.getValue()*s.rows.getValue()
+
                job.nr_menus = ((nr_titles+job.titles_per_menu-1)/job.titles_per_menu)
 
                #a new menu_count every 4 titles (1,2,3,4->1 ; 5,6,7,8->2 etc.)
@@ -791,7 +853,7 @@ class DVDJob(Job):
                                demux = DemuxTask(self, link_name)
                                self.mplextask = MplexTask(self, outputfile=title_filename, demux_task=demux)
                                self.mplextask.end = self.estimateddvdsize
-                               #RemoveESFiles(self, demux)
+                               RemoveESFiles(self, demux)
                        WaitForResidentTasks(self)
                        PreviewTask(self, self.workspace + "/dvd/VIDEO_TS/")
                        output = self.project.settings.output.getValue()
index b77383cf0c3a3a67e1504be9d08cf6a83b196ebd..7407263d0b5d04a8029b43d0e196ede488a9558f 100644 (file)
@@ -26,7 +26,10 @@ class FileBrowser(Screen, HelpableScreen):
                currDir = "/"
                if self.scope == "project":
                        currDir = self.getDir()
-                       pattern = "(?i)^.*\.(ddvdp\.xml)"               
+                       pattern = "(?i)^.*\.(ddvdp\.xml)"
+               elif self.scope == "menutemplate":
+                       currDir = self.getDir()
+                       pattern = "(?i)^.*\.(ddvdm\.xml)"
                if self.scope == "menubg":
                        currDir = self.getDir(settings.menubg)
                        pattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp)"
@@ -101,7 +104,7 @@ class ProjectSettings(Screen,ConfigListScreen):
                self["key_yellow"] = StaticText(_("Load"))
                self["key_blue"] = StaticText(_("Save"))
                
-               infotext = _("Available format variables") + ":\n$i=" + _("Track") + ", $t=" + _("Title") + ", $d=" + _("Description") + ", $l=" + _("length") + ", $c=" + _("chapters") + ",\n" + _("Record") + " $T=" + _("Begin time") + ", $Y=" + _("year") + ", $M=" + _("month") + ", $D=" + _("day") + ",\n$A=" + _("audio tracks") + ", $C=" + _("Channel") + ", $f=" + _("filename")
+               infotext = _("Available format variables") + ":\n$i=" + _("Track") + ", $t=" + _("Title") + ", $d=" + _("Description") + ", $l=" + _("length") + ", $c=" + _("chapters") + ",\n" + _("Record") + " $T=" + _("Begin time") + ", $Y=" + _("Year") + ", $M=" + _("month") + ", $D=" + _("day") + ",\n$A=" + _("audio tracks") + ", $C=" + _("Channel") + ", $f=" + _("filename")
                self["info"] = StaticText(infotext)
 
                self.settings = project.settings
@@ -137,16 +140,17 @@ class ProjectSettings(Screen,ConfigListScreen):
                if output == "iso":
                        self.list.append(getConfigListEntry(_("ISO path"), self.settings.isopath))
                if authormode.startswith("menu"):
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("background image"), self.settings.menubg))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("Title"), self.settings.titleformat))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("Subtitles"), self.settings.subtitleformat))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("headline")+' '+_("color"), self.settings.color_headline))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("text")+' '+_("color"), self.settings.color_button))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("highlighted button")+' '+_("color"), self.settings.color_highlight))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("font face"), self.settings.font_face))
-                       self.list.append(getConfigListEntry(_("Font size")+' ('+_("headline")+', '+_("Title")+', '+_("Subtitles")+')', self.settings.font_size))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("spaces (top, between rows, left)"), self.settings.space))
-                       self.list.append(getConfigListEntry(_("Menu")+' '+_("Audio"), self.settings.menuaudio))
+                       self.list.append(getConfigListEntry(_("Menu")+' '+_("template file"), self.settings.menutemplate))
+                       self.list.append(getConfigListEntry(_("Menu")+' '+_("Title"), self.project.menutemplate.settings.titleformat))
+                       self.list.append(getConfigListEntry(_("Menu")+' '+_("Subtitles"), self.project.menutemplate.settings.subtitleformat))
+                       self.list.append(getConfigListEntry(_("Menu")+' '+_("background image"), self.project.menutemplate.settings.menubg))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("headline")+' '+_("color"), self.settings.color_headline))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("text")+' '+_("color"), self.settings.color_button))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("highlighted button")+' '+_("color"), self.settings.color_highlight))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("font face"), self.settings.font_face))
+                       #self.list.append(getConfigListEntry(_("Font size")+' ('+_("headline")+', '+_("Title")+', '+_("Subtitles")+')', self.settings.font_size))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("spaces (top, between rows, left)"), self.settings.space))
+                       #self.list.append(getConfigListEntry(_("Menu")+' '+_("Audio"), self.settings.menuaudio))
                if authormode != "data_ts":
                        self.list.append(getConfigListEntry(_("Titleset mode"), self.settings.titlesetmode))
                        if self.settings.titlesetmode.getValue() == "single" or authormode == "just_linked":
@@ -198,8 +202,16 @@ class ProjectSettings(Screen,ConfigListScreen):
                        self.session.open(MessageBox,text,type = MessageBox.TYPE_ERROR)
 
        def FileBrowserClosed(self, path, scope):
+               if scope == "menutemplate":
+                       if not self.project.menutemplate.loadTemplate(path):
+                               self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
+                       else:
+                               print "[ProjectSettings] menu template loaded"
+
                if scope in self.project.filekeys:
                        self.settings.dict()[scope].setValue(path)
                elif scope == "project":
                        if not self.project.loadProject(path):
                                self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
+                       else:
+                               self.initConfigList()
diff --git a/lib/python/Plugins/Extensions/DVDBurn/Text menu boat.ddvdm.xml b/lib/python/Plugins/Extensions/DVDBurn/Text menu boat.ddvdm.xml
new file mode 100644 (file)
index 0000000..0de7f4b
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<DreamDVDBurnMenu>
+       <settings
+               titleformat="$i. $t"
+               subtitleformat="$D.$M.$Y, $T $C, $d"
+               menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_boat.jpg"
+               menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
+               dimensions="(720, 576)"
+               rows="5"
+               cols="1"
+               color_button="[8, 0, 0]"
+               color_highlight="[0, 192, 192]"
+               color_headline="[0, 0, 128]"
+               fontface_headline="/usr/share/fonts/nmsbd.ttf"
+               fontface_title="/usr/share/fonts/nmsbd.ttf"
+               fontface_subtitle="/usr/share/fonts/nmsbd.ttf"
+               fontsize_headline="46"
+               fontsize_title="24"
+               fontsize_subtitle="14"
+               margin_left="56"
+               margin_right="56"
+               margin_top="100"
+               margin_bottom="70"
+               space_rows="30"
+               space_cols="40"
+               offset_headline="(-1, 40)"
+               offset_title="(0, 0)"
+               offset_subtitle="(0, 32)"
+               offset_thumb="(0, 0)"
+               thumb_size="(0, 0)"
+               thumb_border="0"
+               prev_page_text="«««"
+               next_page_text="»»»"
+       />
+</DreamDVDBurnMenu>
diff --git a/lib/python/Plugins/Extensions/DVDBurn/Thumbs menu clouds.ddvdm.xml b/lib/python/Plugins/Extensions/DVDBurn/Thumbs menu clouds.ddvdm.xml
new file mode 100644 (file)
index 0000000..c00c3fe
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<DreamDVDBurnMenu>
+       <settings
+               titleformat="$t"
+               subtitleformat="$d"
+               menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg"
+               menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
+               dimensions="(720, 576)"
+               rows="2"
+               cols="2"
+               color_button="[8, 0, 0]"
+               color_highlight="[128, 0, 0]"
+               color_headline="[128, 0, 0]"
+               fontface_headline="/usr/share/fonts/nmsbd.ttf"
+               fontface_title="/usr/share/fonts/nmsbd.ttf"
+               fontface_subtitle="/usr/share/fonts/nmsbd.ttf"
+               fontsize_headline="46"
+               fontsize_title="18"
+               fontsize_subtitle="12"
+               margin_left="48"
+               margin_right="48"
+               margin_top="100"
+               margin_bottom="48"
+               space_rows="24"
+               space_cols="24"
+               offset_headline="(-1, 40)"
+               offset_title="(-1, 144)"
+               offset_subtitle="(-1, 164)"
+               offset_thumb="(-1, 0)"
+               thumb_size="(180, 144)"
+               thumb_border="2"
+               prev_page_text="«««"
+               next_page_text="»»»"
+       />
+</DreamDVDBurnMenu>
index 210a3d58bac36a62ecb741af4146f5c83b370f8a..61152e8a9ed7983a1a86efd53babed2881a6de75 100644 (file)
@@ -1,6 +1,7 @@
 from Plugins.Extensions.CutListEditor.plugin import CutListEditor
 from Components.ServiceEventTracker import ServiceEventTracker
 from enigma import iPlayableService, iServiceInformation
+from Tools.Directories import fileExists
 
 class TitleCutter(CutListEditor):
        def __init__(self, session, t):
@@ -46,7 +47,12 @@ class TitleCutter(CutListEditor):
                self.t.properties.aspect.setValue(aspect)
                self.t.VideoType = service.info().getInfo(iServiceInformation.sVideoType)
 
+       def checkAndGrabThumb(self):
+               if not fileExists(self.t.inputfile.rsplit('.',1)[0] + ".png"):
+                       CutListEditor.grabFrame(self)
+
        def exit(self):
+               self.checkAndGrabThumb()
                self.session.nav.stopService()
                self.close(self.cut_list[:])
 
@@ -56,4 +62,5 @@ class CutlistReader(TitleCutter):
 
        def getPMTInfo(self):
                TitleCutter.getPMTInfo(self)
+               TitleCutter.checkAndGrabThumb(self)
                self.close(self.cut_list[:])
index 345af87736c8e296355ff8aed0ec46f1ddb5bf4d..749f80eb3ab2986e2fd3e31a2240e66700166a67 100644 (file)
@@ -74,9 +74,22 @@ class TitleList(Screen, HelpableScreen):
 
                self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
                self.updateTitleList()
-               
+
+       def checkBackgroundJobs(self):
+               for job in job_manager.getPendingJobs():
+                       print "type(job):", type(job)
+                       print "Process.DVDJob:", Process.DVDJob
+                       if type(job) == Process.DVDJob:
+                               self.backgroundJob = job
+                               return
+               self.backgroundJob = None
+
        def showMenu(self):
                menu = []
+               self.checkBackgroundJobs()
+               if self.backgroundJob:
+                       j = self.backgroundJob
+                       menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob))
                if self.project.settings.output.getValue() == "dvd":
                        menu.append((_("Burn DVD"), self.burnProject))
                elif self.project.settings.output.getValue() == "iso":
@@ -97,6 +110,11 @@ class TitleList(Screen, HelpableScreen):
                if choice:
                        choice[1]()
 
+       def showBackgroundJob(self):
+               job_manager.in_background = False
+               self.session.openWithCallback(self.JobViewCB, JobView, self.backgroundJob)
+               self.backgroundJob = None
+       
        def titleProperties(self):
                if self.getCurrentTitle():
                        self.session.openWithCallback(self.updateTitleList, TitleProperties.TitleProperties, self, self.project, self["titles"].getIndex())
@@ -172,8 +190,8 @@ class TitleList(Screen, HelpableScreen):
                self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
 
        def loadTemplate(self):
-               filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml"
-               if self.project.loadProject(filename):
+               filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVD.ddvdp.xml"
+               if self.project.load(filename):
                        self["error_label"].hide()
                        return True
                else:
@@ -212,12 +230,12 @@ class TitleList(Screen, HelpableScreen):
                res = [ ]
                totalsize = 0
                for title in self.project.titles:
-                       a = [ title, (eListboxPythonMultiContent.TYPE_TEXT, 0, 10, 500, 50, 0, RT_HALIGN_LEFT, title.properties.menutitle.getValue())  ]
+                       a = [ title, (eListboxPythonMultiContent.TYPE_TEXT, 0, 5, 500, 25, 0, RT_HALIGN_LEFT, title.properties.menutitle.getValue())  ]
                        res.append(a)
                        totalsize += title.estimatedDiskspace
                self["titles"].list = res
                self.updateSize(totalsize)
-               
+
        def updateSize(self, totalsize):
                size = int((totalsize/1024)/1024)
                max_SL = 4370
index d5ba6c16ad6dd53460157ec736c66f9d9d782a68..63ae6c1ff16c60093bb955f45f6d45718cd25e66 100644 (file)
@@ -8,10 +8,12 @@ from Components.Sources.List import List
 from Components.Sources.StaticText import StaticText
 from Components.Sources.Progress import Progress
 from Components.FileList import FileList
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
+from Components.Pixmap import Pixmap
+from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, ePicLoad
 from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS, SCOPE_HDD
 from Components.config import config, getConfigListEntry, ConfigInteger, ConfigSubsection, ConfigSelection
 from Components.ConfigList import ConfigListScreen
+from Components.AVSwitch import AVSwitch
 import DVDTitle
 
 class TitleProperties(Screen,ConfigListScreen):
@@ -23,9 +25,9 @@ class TitleProperties(Screen,ConfigListScreen):
                    <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
                    <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
                    <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
-                   <widget name="config" position="10,50" size="540,300" scrollbarMode="showOnDemand" />
-                   <widget source="serviceinfo_headline" render="Label" position="20,360" size="520,20" font="Regular;20" />
-                   <widget source="serviceinfo" render="Label" position="20,382" size="520,66" font="Regular;16" />
+                   <widget source="serviceinfo" render="Label" position="10,46" size="350,144" font="Regular;18" />
+                   <widget name="thumbnail" position="370,46" size="180,144" alphatest="on" />
+                   <widget name="config" position="10,206" size="540,228" scrollbarMode="showOnDemand" />
                </screen>"""
 
        def __init__(self, session, parent, project, title_idx):
@@ -37,9 +39,12 @@ class TitleProperties(Screen,ConfigListScreen):
                self["key_red"] = StaticText(_("Cancel"))
                self["key_green"] = StaticText(_("OK"))
                self["key_blue"] = StaticText(_("Edit Title"))
-               self["serviceinfo_headline"] = StaticText("DVB info:")
                self["serviceinfo"] = StaticText()
 
+               self["thumbnail"] = Pixmap()
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.paintThumbPixmapCB)
+
                self.properties = project.titles[title_idx].properties
                ConfigListScreen.__init__(self, [])
                self.properties.crop = DVDTitle.ConfigFixedText("crop")
@@ -47,8 +52,6 @@ class TitleProperties(Screen,ConfigListScreen):
                self.properties.aspect.addNotifier(self.initConfigList)
                for audiotrack in self.properties.audiotracks:
                        audiotrack.active.addNotifier(self.initConfigList)
-               
-               self.initConfigList()
 
                self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
                {
@@ -58,6 +61,8 @@ class TitleProperties(Screen,ConfigListScreen):
                    "cancel": self.cancel,
                    "ok": self.ok,
                }, -2)
+               
+               self.onShown.append(self.update)
 
        def initConfigList(self, element=None):
                try:
@@ -79,18 +84,15 @@ class TitleProperties(Screen,ConfigListScreen):
                                self.list.append(getConfigListEntry("DVD " + "widescreen", self.properties.widescreen))
                        else:
                                self.list.append(getConfigListEntry("DVD " + "widescreen", self.properties.crop))
-                       
-                       infotext = _("Available format variables") + ":\n$i=" + _("Track") + ", $t=" + _("Title") + ", $d=" + _("Description") + ", $l=" + _("length") + ", $c=" + _("chapters") + ",\n" + _("Record") + " $T=" + _("Begin time") + ", $Y=" + _("year") + ", $M=" + _("month") + ", $D=" + _("day") + ",\n$A=" + _("audio tracks") + ", $C=" + _("Channel") + ", $f=" + _("filename")
-                       self["info"] = StaticText(infotext)
-                       
+
                        if len(title.chaptermarks) == 0:
                                self.list.append(getConfigListEntry(_("Auto chapter split every ? minutes (0=never)"), self.properties.autochapter))
-                       infotext = _("Title") + ': ' + title.DVBname + "\n" + _("Description") + ': ' + title.DVBdescr + "\n" + _("Channel") + ': ' + title.DVBchannel
+                       infotext = "DVB " + _("Title") + ': ' + title.DVBname + "\n" + _("Description") + ': ' + title.DVBdescr + "\n" + _("Channel") + ': ' + title.DVBchannel + '\n' + _("Begin time") + title.formatDVDmenuText(": $D.$M.$Y, $T\n", self.title_idx+1)
                        chaptermarks = title.getChapterMarks(template="$h:$m:$s")
                        chapters_count = len(chaptermarks)
                        if chapters_count >= 1:
-                               infotext += ', ' + str(chapters_count+1) + ' ' + _("chapters") + ' ('
-                               infotext += ' / '.join(chaptermarks) + ')'
+                               infotext += '\n' + str(chapters_count+1) + ' ' + _("chapters") + ': '
+                               infotext += ' / '.join(chaptermarks)
                        self["serviceinfo"].setText(infotext)
                        self["config"].setList(self.list)
                except AttributeError:
@@ -98,7 +100,22 @@ class TitleProperties(Screen,ConfigListScreen):
 
        def editTitle(self):
                self.parent.editTitle()
+
+       def update(self):
+               print "[onShown]"
                self.initConfigList()
+               self.loadThumb()
+
+       def loadThumb(self):
+               thumbfile = self.project.titles[self.title_idx].inputfile.rsplit('.',1)[0] + ".png"
+               sc = AVSwitch().getFramebufferScale()
+               self.picload.setPara((self["thumbnail"].instance.size().width(), self["thumbnail"].instance.size().height(), sc[0], sc[1], False, 1, "#00000000"))
+               self.picload.startDecode(thumbfile)
+
+       def paintThumbPixmapCB(self, picInfo=None):
+               ptr = self.picload.getData()
+               if ptr != None:
+                       self["thumbnail"].instance.setPixmap(ptr.__deref__())
 
        def changedConfigList(self):
                self.initConfigList()
diff --git a/lib/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg b/lib/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg
new file mode 100644 (file)
index 0000000..aacf25d
Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg differ
index 2a872c216e86c1da5956a2bd33f06aa2e684dd69..7b7f20541a93d648ce875bdb808b74aa8c4bba61 100644 (file)
@@ -11,7 +11,7 @@
                        <key id="KEY_AUDIO" mapto="dvdAudioMenu" flags="m" />
                        <key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
                        <key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
-                       <key id="KEY_VIDEO" mapto="seekBeginning" flags="l" />
+                       <key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
                </device>
                <device name="dreambox advanced remote control (native)">
                        <key id="KEY_PREVIOUS" mapto="prevChapter" flags="m" />
@@ -21,6 +21,7 @@
                        <key id="KEY_RADIO" mapto="dvdAudioMenu" flags="l" />
                        <key id="KEY_RADIO" mapto="nextAudioTrack" flags="m" />
                        <key id="KEY_TEXT" mapto="nextSubtitleTrack" flags="m" />
+                       <key id="KEY_VIDEO" mapto="nextAngle" flags="m" />
                </device>
                <!--device name="dreambox ir keyboard">
                        <key id="KEY_PAUSE" mapto="pause" flags="m" />
index cb5f0e0d57d4bef6a7fb9150ba41a2a167f9cd41..421a2b4eb2f7cdd5b6824d5a6f9ad3863e28c30a 100644 (file)
@@ -1,5 +1,5 @@
 from os import path as os_path, remove as os_remove, listdir as os_listdir, system
-from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys
+from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys, getDesktop
 from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
 from Screens.ChoiceBox import ChoiceBox
@@ -7,6 +7,7 @@ from Screens.HelpMenu import HelpableScreen
 from Screens.InfoBarGenerics import InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications
 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
 from Components.Label import Label
+from Components.Pixmap import Pixmap
 from Components.FileList import FileList
 from Components.MenuList import MenuList
 from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
@@ -109,10 +110,11 @@ class DVDSummary(Screen):
                self["Title"].setText(title)
 
 class DVDOverlay(Screen):
-       skin = """<screen name="DVDOverlay" position="0,0" size="720,576" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />"""
        def __init__(self, session, args = None):
+               desktop_size = getDesktop(0).size()
+               DVDOverlay.skin = """<screen name="DVDOverlay" position="0,0" size="%d,%d" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />""" %(desktop_size.width(), desktop_size.height())
                Screen.__init__(self, session)
-               
+
 class ChapterZap(Screen):
        skin = """
        <screen name="ChapterZap" position="235,255" size="250,60" title="Chapter" >
@@ -182,14 +184,17 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                <!-- Chapter info -->
                <widget name="chapterLabel" position="230,96" size="360,22" font="Regular;20" foregroundColor="#c3c3c9" backgroundColor="#263c59" transparent="1" />
                <!-- Audio track info -->
-               <ePixmap pixmap="skin_default/icons/icon_dolby.png" position="540,73" zPosition="1" size="26,16" alphatest="on"/>
-               <widget name="audioLabel" position="570,73" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+               <ePixmap pixmap="skin_default/icons/icon_dolby.png" position="540,60" zPosition="1" size="26,16" alphatest="on"/>
+               <widget name="audioLabel" position="570,60" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
                <!-- Subtitle track info -->
-               <widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_txt.png" position="540,96" zPosition="1" size="26,16" alphatest="on" >
+               <widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_txt.png" position="540,83" zPosition="1" size="26,16" alphatest="on" >
                        <convert type="ServiceInfo">HasTelext</convert>
                        <convert type="ConditionalShowHide" />
                </widget>
-               <widget name="subtitleLabel" position="570,96" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+               <widget name="subtitleLabel" position="570,83" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+               <!-- Angle info -->
+               <widget name="anglePix" pixmap="skin_default/icons/icon_view.png" position="540,106" size="26,16" alphatest="on" />
+               <widget name="angleLabel" position="570,106" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
                <!-- Elapsed time -->
                <widget source="session.CurrentService" render="Label" position="205,129" size="100,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
                        <convert type="ServicePosition">Position,ShowHours</convert>
@@ -251,9 +256,13 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                self.session.nav.stopService()
                self["audioLabel"] = Label("n/a")
                self["subtitleLabel"] = Label("")
+               self["angleLabel"] = Label("")
                self["chapterLabel"] = Label("")
+               self["anglePix"] = Pixmap()
+               self["anglePix"].hide()
                self.last_audioTuple = None
                self.last_subtitleTuple = None
+               self.last_angleTuple = None
                self.totalChapters = 0
                self.currentChapter = 0
                self.totalTitles = 0
@@ -273,7 +282,8 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                iPlayableService.evUser+8: self.__chapterUpdated,
                                iPlayableService.evUser+9: self.__titleUpdated,
                                iPlayableService.evUser+11: self.__menuOpened,
-                               iPlayableService.evUser+12: self.__menuClosed
+                               iPlayableService.evUser+12: self.__menuClosed,
+                               iPlayableService.evUser+13: self.__osdAngleInfoAvail
                        })
 
                self["DVDPlayerDirectionActions"] = ActionMap(["DirectionActions"],
@@ -316,6 +326,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                "dvdAudioMenu": (self.enterDVDAudioMenu, _("(show optional DVD audio menu)")),
                                "nextAudioTrack": (self.nextAudioTrack, _("switch to the next audio track")),
                                "nextSubtitleTrack": (self.nextSubtitleTrack, _("switch to the next subtitle language")),
+                               "nextAngle": (self.nextAngle, _("switch to the next angle")),
                                "seekBeginning": self.seekBeginning,
                        }, -2)
                        
@@ -352,7 +363,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                                if file.mimetype == "video/x-dvd":
                                                        self.dvd_device = devicepath
                                                        print "physical dvd found:", self.dvd_device
-                                                       self.physicalDVD = True                 
+                                                       self.physicalDVD = True
 
                self.dvd_filelist = dvd_filelist
                self.onFirstExecBegin.append(self.showFileBrowser)
@@ -387,9 +398,6 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
 
        def serviceStarted(self): #override InfoBarShowHide function
                self.dvdScreen.show()
-               subs = self.getServiceInterface("subtitle")
-               if subs:
-                       subs.enableSubtitles(self.dvdScreen.instance, None)
 
        def doEofInternal(self, playing):
                if self.in_menu:
@@ -469,6 +477,22 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                        if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
                                self.doShow()
                self.last_subtitleTuple = subtitleTuple
+       
+       def __osdAngleInfoAvail(self):
+               info = self.getServiceInterface("info")
+               angleTuple = info and info.getInfoObject(iServiceInformation.sUser+8)
+               print "AngleInfoAvail ", repr(angleTuple)
+               if angleTuple:
+                       angleString = ""
+                       if angleTuple[1] > 1:
+                               angleString = "%d / %d" % (angleTuple[0],angleTuple[1])
+                               self["anglePix"].show()
+                       else:
+                               self["anglePix"].hide()
+                       self["angleLabel"].setText(angleString)
+                       if angleTuple != self.last_angleTuple and not self.in_menu:
+                               self.doShow()
+               self.last_angleTuple = angleTuple
 
        def __chapterUpdated(self):
                info = self.getServiceInterface("info")
@@ -489,9 +513,9 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                self.doShow()
                
        def askLeavePlayer(self):
-               choices = [(_("Continue playing"), "play"), (_("Exit"), "exit")]
+               choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")]
                if not self.physicalDVD:
-                       choices.insert(1,(_("Return to file browser"), "browser"))                      
+                       choices.insert(1,(_("Return to file browser"), "browser"))
                self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices)
 
        def sendKey(self, key):
@@ -523,6 +547,9 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
 
        def enterDVDMenu(self):
                self.sendKey(iServiceKeys.keyUser+7)
+       
+       def nextAngle(self):
+               self.sendKey(iServiceKeys.keyUser+8)
 
        def seekBeginning(self):
                if self.service:
@@ -588,6 +615,9 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                self.service = self.session.nav.getCurrentService()
                                print "self.service", self.service
                                print "cur_dlg", self.session.current_dialog
+                               subs = self.getServiceInterface("subtitle")
+                               if subs:
+                                       subs.enableSubtitles(self.dvdScreen.instance, None)
 
        def exitCB(self, answer):
                if answer is not None:
index 1add04ab47661bd55c460d364baf94406c96eb7e..c2590af56cccc46ec8fb34ab27d49a5f1f04094c 100644 (file)
@@ -87,30 +87,48 @@ DEFINE_REF(eServiceDVD);
 eServiceDVD::eServiceDVD(const char *filename):
        m_filename(filename),
        m_ddvdconfig(ddvd_create()),
-       m_pixmap(new gPixmap(eSize(720, 576), 32)),
        m_subtitle_widget(0),
        m_state(stIdle),
        m_current_trick(0),
        m_pump(eApp, 1)
 {
+       int aspect = DDVD_16_9; 
+       int policy = DDVD_PAN_SCAN;
+
+       char tmp[255];
+       ssize_t rd;
+
        m_sn = eSocketNotifier::create(eApp, ddvd_get_messagepipe_fd(m_ddvdconfig), eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup);
-       std::string aspect;
        eDebug("SERVICEDVD construct!");
        // create handle
        ddvd_set_dvd_path(m_ddvdconfig, filename);
        ddvd_set_ac3thru(m_ddvdconfig, 0);
        ddvd_set_language(m_ddvdconfig, "de");
 
-       if (ePythonConfigQuery::getConfigValue("config.av.aspect", aspect) != 0)
-               aspect = "16_9";
-       if (aspect == "4_3_letterbox")
-               ddvd_set_video(m_ddvdconfig, DDVD_4_3_LETTERBOX, DDVD_PAL);
-       else if (aspect == "4_3_panscan")
-               ddvd_set_video(m_ddvdconfig, DDVD_4_3_PAN_SCAN, DDVD_PAL);
-       else
-               ddvd_set_video(m_ddvdconfig, DDVD_16_9, DDVD_PAL);
+       int fd = open("/proc/stb/video/aspect", O_RDONLY);
+       if (fd > -1)
+       {
+               rd = read(fd, tmp, 255);
+               if (rd > 2 && !strncmp(tmp, "4:3", 3))
+                       aspect = DDVD_4_3;
+               else if (rd > 4 && !strncmp(tmp, "16:10", 5))
+                       aspect = DDVD_16_10;
+               close(fd);
+       }
+
+       fd = open("/proc/stb/video/policy", O_RDONLY);
+       if (fd > -1)
+       {
+               rd = read(fd, tmp, 255);
+               if (rd > 6 && !strncmp(tmp, "bestfit", 7))
+                       policy = DDVD_JUSTSCALE;
+               else if (rd > 8 && !strncmp(tmp, "letterbox", 9))
+                       policy = DDVD_LETTERBOX;
+               close(fd);
+       }
+
+       ddvd_set_video(m_ddvdconfig, aspect, policy, DDVD_PAL /*unused*/);
 
-       ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, 720, 576, 4, 720*4);
        CONNECT(m_sn->activated, eServiceDVD::gotMessage);
        CONNECT(m_pump.recv_msg, eServiceDVD::gotThreadMessage);
        strcpy(m_ddvd_titlestring,"");
@@ -158,8 +176,11 @@ void eServiceDVD::gotMessage(int /*what*/)
                }
                case DDVD_SCREEN_UPDATE:
                        eDebug("DVD_SCREEN_UPDATE!");
-                       if (m_subtitle_widget)
-                               m_subtitle_widget->setPixmap(m_pixmap, eRect(0, 0, 720, 576));
+                       if (m_subtitle_widget) {
+                               int x1,x2,y1,y2;
+                               ddvd_get_last_blit_area(m_ddvdconfig, &x1, &x2, &y1, &y2);
+                               m_subtitle_widget->setPixmap(m_pixmap, eRect(x1, y1, (x2-x1)+1, (y2-y1)+1));
+                       }
                        break;
                case DDVD_SHOWOSD_STATE_PLAY:
                {
@@ -213,6 +234,14 @@ void eServiceDVD::gotMessage(int /*what*/)
                        eDebug("DVD_SOF_REACHED!");
                        m_event(this, evSOF);
                        break;
+               case DDVD_SHOWOSD_ANGLE:
+               {
+                       int current, num;
+                       ddvd_get_angle_info(m_ddvdconfig, &current, &num);
+                       eDebug("DVD_ANGLE_INFO: %d / %d", current, num);
+                       m_event(this, evUser+13);
+                       break;
+               }
                case DDVD_SHOWOSD_TIME:
                {
                        static struct ddvd_time last_info;
@@ -259,6 +288,7 @@ eServiceDVD::~eServiceDVD()
        kill();
        saveCuesheet();
        ddvd_close(m_ddvdconfig);
+       disableSubtitles(0);
 }
 
 RESULT eServiceDVD::connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection)
@@ -272,7 +302,6 @@ RESULT eServiceDVD::start()
        assert(m_state == stIdle);
        m_state = stRunning;
        eDebug("eServiceDVD starting");
-       run();
 //     m_event(this, evStart);
        return 0;
 }
@@ -437,6 +466,7 @@ int eServiceDVD::getInfo(int w)
                }
                case sUser+6:
                case sUser+7:
+               case sUser+8:
                        return resIsPyObject;
                default:
                        return resNA;
@@ -506,6 +536,16 @@ PyObject *eServiceDVD::getInfoObject(int w)
                        }                               
                        return tuple;
                }
+               case sUser+8:
+               {
+                       ePyObject tuple = PyTuple_New(2);
+                       int current, num;
+                       ddvd_get_angle_info(m_ddvdconfig, &current, &num);
+                       PyTuple_SetItem(tuple, 0, PyInt_FromLong(current));
+                       PyTuple_SetItem(tuple, 1, PyInt_FromLong(num));
+
+                       return tuple;
+               }
                default:
                        eDebug("unhandled getInfoObject(%d)", w);
        }
@@ -514,13 +554,23 @@ PyObject *eServiceDVD::getInfoObject(int w)
 
 RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /*entry*/)
 {
-       if (m_subtitle_widget)
-               delete m_subtitle_widget;
+       delete m_subtitle_widget;
+
        m_subtitle_widget = new eSubtitleWidget(parent);
        m_subtitle_widget->resize(parent->size());
-       m_subtitle_widget->setPixmap(m_pixmap, eRect(0, 0, 720, 576));
+
+       eSize size = parent->size();
+
+       if (!m_pixmap)
+       {
+               m_pixmap = new gPixmap(size, 32);
+               ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, size.width(), size.height(), 4, size.width()*4);
+               run(); // start the thread
+       }
+
        m_subtitle_widget->setZPosition(-1);
        m_subtitle_widget->show();
+
        return 0;
 }
 
@@ -655,6 +705,9 @@ RESULT eServiceDVD::keyPressed(int key)
        case iServiceKeys::keyUser+7:
                ddvd_send_key(m_ddvdconfig, DDVD_KEY_MENU);
                break;
+       case iServiceKeys::keyUser+8:
+               ddvd_send_key(m_ddvdconfig, DDVD_KEY_ANGLE);
+               break;
        default:
                return -1;
        }
index 1af90f1350423d8342c4ae6ceb9b30b4868b1f25..b22c4b8092fe556dece9541853848f6be2d16fb4 100644 (file)
@@ -15,8 +15,9 @@ from Screens.TimeDateInput import TimeDateInput
 from Screens.TimerEntry import TimerEntry
 from Screens.EpgSelection import EPGSelection
 from Screens.TimerEdit import TimerSanityConflict
+from Screens.MessageBox import MessageBox
 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
-from RecordTimer import RecordTimerEntry, parseEvent
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from ServiceReference import ServiceReference
 from Tools.LoadPixmap import LoadPixmap
 from enigma import eEPGCache, eListbox, gFont, eListboxPythonMultiContent, \
@@ -41,6 +42,10 @@ class EPGList(HTMLComponent, GUIComponent):
                        self.l.setSelectableFunc(self.isSelectable)
                self.epgcache = eEPGCache.getInstance()
                self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png'))
                self.time_base = None
                self.time_epoch = time_epoch
                self.list = None
@@ -81,10 +86,10 @@ class EPGList(HTMLComponent, GUIComponent):
                return (event_list and len(event_list) and True) or False
 
        def setEpoch(self, epoch):
-               if self.cur_event is not None and self.cur_service is not None:
-                       self.offs = 0
-                       self.time_epoch = epoch
-                       self.fillMultiEPG(None) # refill
+#              if self.cur_event is not None and self.cur_service is not None:
+               self.offs = 0
+               self.time_epoch = epoch
+               self.fillMultiEPG(None) # refill
 
        def getEventFromId(self, service, eventid):
                event = None
@@ -92,14 +97,31 @@ class EPGList(HTMLComponent, GUIComponent):
                        event = self.epgcache.lookupEventId(service.ref, eventid)
                return event
 
+       def moveToService(self,serviceref):
+               if serviceref is not None:
+                       for x in range(len(self.list)):
+                               if self.list[x][0] == serviceref.toString():
+                                       self.instance.moveSelectionTo(x)
+                                       break
+       
+       def getIndexFromService(self, serviceref):
+               if serviceref is not None:
+                       for x in range(len(self.list)):
+                               if self.list[x][0] == serviceref.toString():
+                                       return x
+               
+       def setCurrentIndex(self, index):
+               if self.instance is not None:
+                       self.instance.moveSelectionTo(index)
+       
        def getCurrent(self):
-               if self.cur_service is None or self.cur_event is None:
+               if self.cur_service is None:
                        return ( None, None )
                old_service = self.cur_service  #(service, service_name, events)
                events = self.cur_service[2]
                refstr = self.cur_service[0]
-               if not events or not len(events):
-                       return ( None, None )
+               if self.cur_event is None or not events or not len(events):
+                       return ( None, ServiceReference(refstr) )
                event = events[self.cur_event] #(event_id, event_title, begin_time, duration)
                eventid = event[0]
                service = ServiceReference(refstr)
@@ -155,11 +177,12 @@ class EPGList(HTMLComponent, GUIComponent):
        def selectionChanged(self):
                for x in self.onSelChanged:
                        if x is not None:
-                               try:
-                                       x()
-                               except: # FIXME!!!
-                                       print "FIXME in EPGList.selectionChanged"
-                                       pass
+                               x()
+#                              try:
+#                                      x()
+#                              except: # FIXME!!!
+#                                      print "FIXME in EPGList.selectionChanged"
+#                                      pass
 
        GUI_WIDGET = eListbox
 
@@ -204,7 +227,13 @@ class EPGList(HTMLComponent, GUIComponent):
        def buildEntry(self, service, service_name, events):
                r1=self.service_rect
                r2=self.event_rect
-               res = [ None, MultiContentEntryText(pos = (r1.left(),r1.top()), size = (r1.width(), r1.height()), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER, text = service_name, color = self.foreColorService, backcolor = self.backColorService) ]
+               res = [ None, MultiContentEntryText(
+                                               pos = (r1.left(),r1.top()),
+                                               size = (r1.width(), r1.height()),
+                                               font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER,
+                                               text = service_name,
+                                               color = self.foreColorService,
+                                               backcolor = self.backColorService) ]
 
                if events:
                        start = self.time_base+self.offs*self.time_epoch*60
@@ -220,11 +249,19 @@ class EPGList(HTMLComponent, GUIComponent):
                        borderColor = self.borderColor
 
                        for ev in events:  #(event_id, event_title, begin_time, duration)
-                               rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8)
+                               rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service)
                                xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width)
-                               res.append(MultiContentEntryText(pos = (left+xpos, top), size = (ewidth, height), font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP, text = ev[1], color = foreColor, color_sel = foreColorSelected, backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor))
+                               res.append(MultiContentEntryText(
+                                       pos = (left+xpos, top), size = (ewidth, height),
+                                       font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP,
+                                       text = ev[1], color = foreColor, color_sel = foreColorSelected,
+                                       backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor))
                                if rec and ewidth > 23:
-                                       res.append(MultiContentEntryPixmapAlphaTest(pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), png = self.clock_pixmap, backcolor = backColor, backcolor_sel = backColorSelected))
+                                       res.append(MultiContentEntryPixmapAlphaTest(
+                                               pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21),
+                                               png = self.getClockPixmap(service, ev[2], ev[3], ev[0]),
+                                               backcolor = backColor,
+                                               backcolor_sel = backColorSelected))
                return res
 
        def selEntry(self, dir, visible=True):
@@ -278,8 +315,13 @@ class EPGList(HTMLComponent, GUIComponent):
                        self.time_base = int(stime)
                        test = [ (service.ref.toString(), 0, self.time_base, self.time_epoch) for service in services ]
                test.insert(0, 'XRnITBD')
+#              print "BEFORE:"
+#              for x in test:
+#                      print x
                epg_data = self.queryEPG(test)
-
+#              print "EPG:"
+#              for x in epg_data:
+#                      print x
                self.list = [ ]
                tmp_list = None
                service = ""
@@ -310,6 +352,30 @@ class EPGList(HTMLComponent, GUIComponent):
 
        def resetOffset(self):
                self.offs = 0
+       
+       def getClockPixmap(self, refstr, beginTime, duration, eventId):
+               pre_clock = 1
+               post_clock = 2
+               clock_type = 0
+               endTime = beginTime + duration
+               for x in self.timer.timer_list:
+                       if x.service_ref.ref.toString() == refstr:
+                               if x.eit == eventId:
+                                       return self.clock_pixmap
+                               beg = x.begin
+                               end = x.end
+                               if beginTime > beg and beginTime < end and endTime > end:
+                                       clock_type |= pre_clock
+                               elif beginTime < beg and endTime > beg and endTime < end:
+                                       clock_type |= post_clock
+               if clock_type == 0:
+                       return self.clock_add_pixmap
+               elif clock_type == pre_clock:
+                       return self.clock_pre_pixmap
+               elif clock_type == post_clock:
+                       return self.clock_post_pixmap
+               else:
+                       return self.clock_prepost_pixmap
 
 class TimelineText(HTMLComponent, GUIComponent):
        def __init__(self):
@@ -337,6 +403,12 @@ config.misc.graph_mepg_prev_time=ConfigClock(default = time())
 config.misc.graph_mepg_prev_time_period=ConfigInteger(default=120, limits=(60,300))
 
 class GraphMultiEPG(Screen):
+       EMPTY = 0
+       ADD_TIMER = 1
+       REMOVE_TIMER = 2
+       
+       ZAP = 1
+
        def __init__(self, session, services, zapFunc=None, bouquetChangeCB=None):
                Screen.__init__(self, session)
                self.bouquetChangeCB = bouquetChangeCB
@@ -345,7 +417,9 @@ class GraphMultiEPG(Screen):
                self.ask_time = now - tmp
                self.closeRecursive = False
                self["key_red"] = Button("")
-               self["key_green"] = Button(_("Add timer"))
+               self["key_green"] = Button("")
+               self.key_green_choice = self.EMPTY
+               self.key_red_choice = self.EMPTY
                self["timeline_text"] = TimelineText()
                self["Event"] = Event()
                self.time_lines = [ ]
@@ -469,6 +543,7 @@ class GraphMultiEPG(Screen):
        #just used in multipeg
        def onCreate(self):
                self["list"].fillMultiEPG(self.services, self.ask_time)
+               self["list"].moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
                self.moveTimeLines()
 
        def eventViewCallback(self, setEvent, setService, val):
@@ -486,22 +561,37 @@ class GraphMultiEPG(Screen):
                        setEvent(cur[0])
 
        def zapTo(self):
-               if self.zapFunc and self["key_red"].getText() == "Zap":
+               if self.zapFunc and self.key_red_choice == self.ZAP:
                        self.closeRecursive = True
                        ref = self["list"].getCurrent()[1]
-                       self.zapFunc(ref.ref)
+                       if ref:
+                               self.zapFunc(ref.ref)
 
        def eventSelected(self):
                self.infoKeyPressed()
 
+       def removeTimer(self, timer):
+               timer.afterEvent = AFTEREVENT.NONE
+               self.session.nav.RecordTimer.removeEntry(timer)
+               self["key_green"].setText(_("Add timer"))
+               self.key_green_choice = self.ADD_TIMER
+       
        def timerAdd(self):
                cur = self["list"].getCurrent()
                event = cur[0]
                serviceref = cur[1]
                if event is None:
                        return
-               newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
-               self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               cb_func = lambda ret : not ret or self.removeTimer(timer)
+                               self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+                               break
+               else:
+                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
+                       self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
                print "finished add"
@@ -509,32 +599,71 @@ class GraphMultiEPG(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
                else:
-                       print "Timeredit aborted"               
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+                       print "Timeredit aborted"
        
        def finishSanityCorrection(self, answer):
                self.finishedAdd(answer)
 
        def onSelectionChanged(self):
-               evt = self["list"].getCurrent()
-               self["Event"].newEvent(evt and evt[0])
-               if evt and evt[0]:
-                       evt = evt[0]
-                       now = time()
-                       start = evt.getBeginTime()
-                       end = start + evt.getDuration()
-                       if now >= start and now <= end:
-                               self["key_red"].setText("Zap")
-                       else:
+               cur = self["list"].getCurrent()
+               if cur is None:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
                                self["key_red"].setText("")
-
+                               self.key_red_choice = self.EMPTY
+                       return
+               
+               event = cur[0]
+               self["Event"].newEvent(event)
+               
+               if cur[1] is None or cur[1].getServiceName() == "":
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
+                               self["key_red"].setText("")
+                               self.key_red_choice = self.EMPTY
+                       return
+               elif self.key_red_choice != self.ZAP:
+                               self["key_red"].setText("Zap")
+                               self.key_red_choice = self.ZAP
+                       
+               if not event:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       return
+               
+               serviceref = cur[1]
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               isRecordEvent = False
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               isRecordEvent = True
+                               break
+               if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
+               elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+       
        def moveTimeLines(self, force=False):
+               self.updateTimelineTimer.start((60-(int(time())%60))*1000)      #keep syncronised
                l = self["list"]
                event_rect = l.getEventRect()
                time_epoch = l.getTimeEpoch()
@@ -542,6 +671,7 @@ class GraphMultiEPG(Screen):
                if event_rect is None or time_epoch is None or time_base is None:
                        return
                time_steps = time_epoch > 180 and 60 or 30
+               
                num_lines = time_epoch/time_steps
                incWidth=event_rect.width()/num_lines
                pos=event_rect.left()
@@ -569,8 +699,7 @@ class GraphMultiEPG(Screen):
                now=time()
                timeline_now = self["timeline_now"]
                if now >= time_base and now < (time_base + time_epoch * 60):
-                       bla = (event_rect.width() * 1000) / time_epoch
-                       xpos = ((now/60) - (time_base/60)) * bla / 1000
+                       xpos = int((((now - time_base) * event_rect.width()) / (time_epoch * 60))-(timeline_now.instance.size().width()/2))
                        old_pos = timeline_now.position
                        new_pos = (xpos+event_rect.left(), old_pos[1])
                        if old_pos != new_pos:
@@ -578,3 +707,6 @@ class GraphMultiEPG(Screen):
                        timeline_now.visible = True
                else:
                        timeline_now.visible = False
+               # here no l.l.invalidate() is needed when the zPosition in the skin is correct!
+
+
index 21d1bfe8bf72585e3c6549603a7c5a7e075fb488..adb7015dd8edda6e1b63d76b76c43e428faf821b 100644 (file)
@@ -69,6 +69,7 @@ def changeBouquetCB(direction, epg):
                bouquet = bouquetSel.getCurrent()
                services = getBouquetServices(bouquet)
                if len(services):
+                       global epg_bouquet
                        epg_bouquet = bouquet
                        epg.setServices(services)
 
@@ -93,4 +94,5 @@ def main(session, servicelist, **kwargs):
 def Plugins(**kwargs):
        name = _("Graphical Multi EPG")
        descr = _("A graphical EPG for all services of an specific bouquet")
-       return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main) ]
+       return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main),
+         PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main) ]
index 6b5d9735c3c506381b0d5900ed48810644b142c6..9f3737aaf58563f230f9fc067066eb46a89ec184 100644 (file)
@@ -1,2 +1 @@
 SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer IpkgInstaller GraphMultiEPG SocketMMI DVDPlayer DVDBurn
-# SimpleRSS is still not finished
index 0d5305d712452c3c97c46d6ade768d15a105c821..3e02384122a8826c0f9f820abf57017f1ddee89f 100644 (file)
@@ -1,6 +1,6 @@
 from os import path as os_path, remove as os_remove, listdir as os_listdir
 from time import strftime
-from enigma import iPlayableService, eTimer, eServiceCenter, iServiceInformation, loadPic
+from enigma import iPlayableService, eTimer, eServiceCenter, iServiceInformation, ePicLoad
 from ServiceReference import ServiceReference
 from Screens.Screen import Screen
 from Screens.HelpMenu import HelpableScreen
@@ -35,18 +35,59 @@ class MyPlayList(PlayList):
                self.oldCurrPlaying = -1
 
 class MediaPixmap(Pixmap):
+       def __init__(self):
+               Pixmap.__init__(self)
+               self.coverArtFileName = ""
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.paintCoverArtPixmapCB)
+               self.coverFileNames = ["folder.png", "folder.jpg"]
+
        def applySkin(self, desktop, screen):
-               self.default_pixmap = None
+               from Tools.LoadPixmap import LoadPixmap
+               noCoverFile = None
                if self.skinAttributes is not None:
                        for (attrib, value) in self.skinAttributes:
                                if attrib == "pixmap":
-                                       self.default_pixmap = value
+                                       noCoverFile = value
                                        break
-               if self.default_pixmap is None:
-                       self.default_pixmap = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
-               self.coverFileNames = ["folder.png", "folder.jpg"]
+               if noCoverFile is None:
+                       noCoverFile = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
+               self.noCoverPixmap = LoadPixmap(noCoverFile)
                return Pixmap.applySkin(self, desktop, screen)
 
+       def onShow(self):
+               Pixmap.onShow(self)
+               sc = AVSwitch().getFramebufferScale()
+               #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB)
+               self.picload.setPara((self.instance.size().width(), self.instance.size().height(), sc[0], sc[1], False, 1, "#00000000"))
+
+       def paintCoverArtPixmapCB(self, picInfo=None):
+               ptr = self.picload.getData()
+               if ptr != None:
+                       self.instance.setPixmap(ptr.__deref__())
+
+       def updateCoverArt(self, path):
+               while not path.endswith("/"):
+                       path = path[:-1]
+               new_coverArtFileName = None
+               for filename in self.coverFileNames:
+                       if fileExists(path + filename):
+                               new_coverArtFileName = path + filename
+               if self.coverArtFileName != new_coverArtFileName:
+                       self.coverArtFileName = new_coverArtFileName
+                       if new_coverArtFileName:
+                               self.picload.startDecode(self.coverArtFileName)
+                       else:
+                               self.showDefaultCover()
+
+       def showDefaultCover(self):
+               self.instance.setPixmap(self.noCoverPixmap)
+
+       def embeddedCoverArt(self):
+               print "[embeddedCoverArt] found"
+               self.coverArtFileName = "/tmp/.id3coverart"
+               self.picload.startDecode(self.coverArtFileName)
+
 class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen):
        ALLOW_SUSPEND = True
        ENABLE_RESUME_SUPPORT = True
@@ -70,11 +111,10 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
 
                # 'None' is magic to start at the list of mountpoints
                defaultDir = config.mediaplayer.defaultDir.getValue()
-               self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|mp4|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+               self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|mkv|mp4|m4a|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
-               #self.playlist = PlayList()
                self.is_closing = False
                self.delname = ""
                self["playlist"] = self.playlist
@@ -83,15 +123,15 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
 
                self["currenttext"] = Label("")
 
-               self["artisttext"] = Label(_("Artist:"))
+               self["artisttext"] = Label(_("Artist")+':')
                self["artist"] = Label("")
-               self["titletext"] = Label(_("Title:"))
+               self["titletext"] = Label(_("Title")+':')
                self["title"] = Label("")
-               self["albumtext"] = Label(_("Album:"))
+               self["albumtext"] = Label(_("Album")+':')
                self["album"] = Label("")
-               self["yeartext"] = Label(_("Year:"))
+               self["yeartext"] = Label(_("Year")+':')
                self["year"] = Label("")
-               self["genretext"] = Label(_("Genre:"))
+               self["genretext"] = Label(_("Genre")+':')
                self["genre"] = Label("")
                self["coverArt"] = MediaPixmap()
                self["repeat"] = MultiPixmap()
@@ -169,8 +209,6 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                self.leftKeyTimer.callback.append(self.leftTimerFire)
 
                self.currList = "filelist"
-
-               self.coverArtFileName = ""
                self.isAudioCD = False
                self.AudioCD_albuminfo = {}
                self.cdAudioTrackFiles = []
@@ -187,7 +225,8 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                        {
                                iPlayableService.evUpdatedInfo: self.__evUpdatedInfo,
                                iPlayableService.evUser+11: self.__evDecodeError,
-                               iPlayableService.evUser+12: self.__evPluginError
+                               iPlayableService.evUser+12: self.__evPluginError,
+                               iPlayableService.evUser+13: self["coverArt"].embeddedCoverArt
                        })
 
        def doNothing(self):
@@ -206,6 +245,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                        config.mediaplayer.defaultDir.setValue(self.filelist.getCurrentDirectory())
                        config.mediaplayer.defaultDir.save()
                hotplugNotifier.remove(self.hotplugCB)
+               del self["coverArt"].picload
                self.close()
 
        def checkSkipShowHideLock(self):
@@ -285,19 +325,6 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                        if self[name].getText() != info:
                                self[name].setText(info)
 
-       def updateCoverArtPixmap(self, path):
-               while not path.endswith("/"):
-                       path = path[:-1]
-               new_coverArtFileName = self["coverArt"].default_pixmap
-               for filename in self["coverArt"].coverFileNames:
-                       if fileExists(path + filename):
-                               new_coverArtFileName = path + filename
-               if self.coverArtFileName != new_coverArtFileName:
-                       self.coverArtFileName = new_coverArtFileName
-                       pixmap = loadPic(self.coverArtFileName, 116, 116, AVSwitch().getAspectRatioSetting()/2,1,0,0)
-                       if pixmap is not None:
-                               self["coverArt"].instance.setPixmap(pixmap.__deref__())
-
        def leftDown(self):
                self.lefttimer = True
                self.leftKeyTimer.start(1000)
@@ -456,17 +483,20 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                        else:
                                menu.append((_("add files to playlist"), "copyfiles"))
                        menu.append((_("switch to playlist"), "playlist"))
-                       menu.append((_("delete file"), "deletefile"))
+                       if config.usage.setup_level.index >= 1: # intermediate+
+                               menu.append((_("delete file"), "deletefile"))
                else:
                        menu.append((_("switch to filelist"), "filelist"))
-                       menu.append((_("shuffle playlist"), "shuffle"))
-                       menu.append((_("Delete entry"), "deleteentry"))
                        menu.append((_("clear playlist"), "clear"))
+                       menu.append((_("Delete entry"), "deleteentry"))
+                       if config.usage.setup_level.index >= 1: # intermediate+
+                               menu.append((_("shuffle playlist"), "shuffle"))
                menu.append((_("hide player"), "hide"));
-               menu.append((_("save playlist"), "saveplaylist"));
                menu.append((_("load playlist"), "loadplaylist"));
-               menu.append((_("delete saved playlist"), "deleteplaylist"));
-               menu.append((_("Edit settings"), "settings"))
+               if config.usage.setup_level.index >= 1: # intermediate+
+                       menu.append((_("save playlist"), "saveplaylist"));
+                       menu.append((_("delete saved playlist"), "deleteplaylist"));
+                       menu.append((_("Edit settings"), "settings"))
                self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
 
        def menuCallback(self, choice):
@@ -629,12 +659,16 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
 
        def copyDirectory(self, directory, recursive = True):
                print "copyDirectory", directory
-               filelist = FileList(directory, useServiceRef = True, isTop = True)
+               if directory == '/':
+                       print "refusing to operate on /"
+                       return
+               filelist = FileList(directory, useServiceRef = True, showMountpoints = False, isTop = True)
 
                for x in filelist.getFileList():
                        if x[0][1] == True: #isDir
                                if recursive:
-                                       self.copyDirectory(x[0][0])
+                                       if x[0][0] != directory:
+                                               self.copyDirectory(x[0][0])
                        elif filelist.getServiceRef() and filelist.getServiceRef().type == 4097:
                                self.playlist.addFile(x[0][0])
                self.playlist.updateList()
@@ -775,6 +809,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
        
        def playEntry(self):
                if len(self.playlist.getServiceRefList()):
+                       audio_extensions = (".mp2", ".mp3", ".wav", ".ogg", "flac", "m4a")
                        needsInfoUpdate = False
                        currref = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()]
                        if self.session.nav.getCurrentlyPlayingServiceReference() is None or currref != self.session.nav.getCurrentlyPlayingServiceReference():
@@ -790,7 +825,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                                ext = text[-4:].lower()
 
                                # FIXME: the information if the service contains video (and we should hide our window) should com from the service instead 
-                               if ext not in [".mp2", ".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD:
+                               if ext not in audio_extensions and not self.isAudioCD:
                                        self.hide()
                                else:
                                        needsInfoUpdate = True
@@ -817,7 +852,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                                currref = self.playlist.getServiceRefList()[idx]
                                text = currref.getPath()
                                ext = text[-4:].lower()
-                               if ext not in [".mp2", ".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD:
+                               if ext not in audio_extensions and not self.isAudioCD:
                                        self.hide()
                                else:
                                        needsInfoUpdate = True
@@ -825,11 +860,9 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                        self.unPauseService()
                        if needsInfoUpdate == True:
                                path = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()].getPath()
-                               self.updateCoverArtPixmap(path)
+                               self["coverArt"].updateCoverArt(path)
                        else:
-                               pngname = self["coverArt"].default_pixmap
-                               self.coverArtFileName = pngname
-                               self["coverArt"].instance.setPixmapFromFile(self.coverArtFileName)
+                               self["coverArt"].showDefaultCover()
                        self.readTitleInformation()
 
        def updatedSeekState(self):
@@ -863,17 +896,22 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                self.session.open(Subtitles)
        
        def hotplugCB(self, dev, media_state):
-               if dev == harddiskmanager.getCD():      
-                       from Components.Scanner import scanDevice
-                       devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
-                       self.cdAudioTrackFiles = []
-                       res = scanDevice(devpath)
-                       list = [ (r.description, r, res[r], self.session) for r in res ]
-                       if list:
-                               (desc, scanner, files, session) = list[0]
-                               for file in files:
-                                       if file.mimetype == "audio/x-cda":
-                                               self.cdAudioTrackFiles.append(file.path)
+               if dev == harddiskmanager.getCD():
+                       if media_state == "1":
+                               from Components.Scanner import scanDevice
+                               devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
+                               self.cdAudioTrackFiles = []
+                               res = scanDevice(devpath)
+                               list = [ (r.description, r, res[r], self.session) for r in res ]
+                               if list:
+                                       (desc, scanner, files, session) = list[0]
+                                       for file in files:
+                                               if file.mimetype == "audio/x-cda":
+                                                       self.cdAudioTrackFiles.append(file.path)
+                       else:
+                               self.cdAudioTrackFiles = []
+                               if self.isAudioCD:
+                                       self.clear_playlist()
 
 class MediaPlayerLCDScreen(Screen):
        skin = """
index c6d274bdb533c41a172ccbd21d01e940a28ec8a3..416ab2ee3389d433a4b5f89a097edd9ab0352fb1 100644 (file)
@@ -3,30 +3,10 @@ from Screens.HelpMenu import HelpableScreen
 from Components.Label import Label
 from Components.FileList import FileList
 from Components.MediaPlayer import PlayList
-from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo
+from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo, ConfigDirectory
 from Components.ConfigList import ConfigListScreen
 from Components.ActionMap import ActionMap
 
-class ConfigDirectory(ConfigText):
-       def __init__(self, default="", visible_width=60):
-               ConfigText.__init__(self, default, fixed_size = True, visible_width = visible_width)
-       def handleKey(self, key):
-               pass
-       def getValue(self):
-               if self.text == "":
-                       return None
-               else:
-                       return ConfigText.getValue(self)
-       def setValue(self, val):
-               if val == None:
-                       val = ""
-               ConfigText.setValue(self, val)
-       def getMulti(self, selected):
-               if self.text == "":
-                       return ("mtext"[1-selected:], _("List of Storage Devices"), range(0))
-               else:
-                       return ConfigText.getMulti(self, selected)
-               
 config.mediaplayer = ConfigSubsection()
 config.mediaplayer.repeat = ConfigYesNo(default=False)
 config.mediaplayer.savePlaylistOnExit = ConfigYesNo(default=True)
index 7d57ce0b193e9e93dcc2c6fd2cb52a5d54f8ec9a..88b917ee9edf08ec67c54649cb3844c01f406ea6 100644 (file)
@@ -17,6 +17,7 @@ def mountpoint_choosen(option):
 
        from Screens.ChoiceBox import ChoiceBox
 
+       print "scanning", option
        (description, mountpoint, session) = option
        res = scanDevice(mountpoint)
 
index ea906f0dbe1c16fd3ae2a53aaa57e45460efc738..05adb633fe1d16c2a9a4828f2aca5c05a1738e14 100644 (file)
-from enigma import eTimer, loadPic, getExif
+from enigma import ePicLoad, eTimer, getDesktop
+
 from Screens.Screen import Screen
-from Screens.ServiceInfo import ServiceInfoList, ServiceInfoListEntry
-from Components.ActionMap import ActionMap, NumberActionMap
+from Tools.Directories import resolveFilename, pathExists, fileExists, SCOPE_MEDIA
+from Plugins.Plugin import PluginDescriptor
+
 from Components.Pixmap import Pixmap, MovingPixmap
+from Components.ActionMap import ActionMap, NumberActionMap
 from Components.Label import Label
-
-from Components.ConfigList import ConfigList
-from Components.config import *
-
-from Tools.Directories import resolveFilename, fileExists, pathExists, createDir, SCOPE_MEDIA
+from Components.Button import Button
 from Components.FileList import FileList
 from Components.AVSwitch import AVSwitch
+from Components.Sources.List import List
+from Components.ConfigList import ConfigList
 
-from Plugins.Plugin import PluginDescriptor
+from Components.config import config, ConfigSubsection, ConfigInteger, ConfigSelection, ConfigText, ConfigEnableDisable, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry
+
+def getScale():
+       return AVSwitch().getFramebufferScale()
 
 config.pic = ConfigSubsection()
-config.pic.slidetime = ConfigInteger(default=10, limits=(5, 60))
-config.pic.resize = ConfigSelection(default="0", choices = [("0", _("simple")), ("1", _("better"))])
+config.pic.framesize = ConfigInteger(default=30, limits=(5, 99))
+config.pic.slidetime = ConfigInteger(default=10, limits=(10, 60))
+config.pic.resize = ConfigSelection(default="1", choices = [("0", _("simple")), ("1", _("better"))])
 config.pic.cache = ConfigEnableDisable(default=True)
 config.pic.lastDir = ConfigText(default=resolveFilename(SCOPE_MEDIA))
-config.pic.rotate = ConfigSelection(default="0", choices = [("0", _("none")), ("1", _("manual")), ("2", _("by Exif"))])
-
-def getAspect():
-       val = AVSwitch().getAspectRatioSetting()
-       return val/2
+config.pic.infoline = ConfigEnableDisable(default=True)
+config.pic.loop = ConfigEnableDisable(default=True)
+config.pic.bgcolor = ConfigSelection(default="#00000000", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))])
+config.pic.textcolor = ConfigSelection(default="#0038FF48", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))])
 
-#------------------------------------------------------------------------------------------
+class picshow(Screen):
+       def __init__(self, session):
+               self.skin = """<screen position="80,80" size="560,440" title="PicturePlayer" >
+                       <ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" alphatest="on" />
+                       <ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" alphatest="on" />
+                       <ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" alphatest="on" />
+                       <ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" alphatest="on" />
+                       <widget name="key_red" position="0,0" size="140,40" font="Regular;20" backgroundColor="#9f1313" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="key_green" position="140,0" size="140,40" font="Regular;20" backgroundColor="#1f771f" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="key_yellow" position="280,0" size="140,40" font="Regular;20" backgroundColor="#a08500" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="key_blue" position="420,0" size="140,40" font="Regular;20" backgroundColor="#18188b" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <widget name="label" position="5,55" size="350,140" font="Regular;19" />
+                       <widget name="thn" position="360,40" size="180,160" alphatest="on" />
+                       <widget name="filelist" position="5,205" zPosition="2" size="550,230" scrollbarMode="showOnDemand" />
+                       </screen>"""
 
-class ThumbView(Screen):
-       skin = """
-               <screen position="0,0" size="720,576" flags="wfNoBorder" title="ThumbView" >
-                       <eLabel position="0,0" zPosition="0" size="720,576" backgroundColor="black" />
-                       <widget name="frame" position="50,63" size="190,200" pixmap="pic_frame.png" zPosition="1" alphatest="on" />
-                       <widget name="label0" position="55,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="label1" position="270,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="label2" position="485,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="label3" position="55,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="label4" position="270,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="label5" position="485,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
-                       <widget name="thumb0" position="55,68" size="180,160" zPosition="2" transparent="1"  />
-                       <widget name="thumb1" position="270,68" size="180,160" zPosition="2" transparent="1" />
-                       <widget name="thumb2" position="485,68" size="180,160" zPosition="2" transparent="1" />
-                       <widget name="thumb3" position="55,293" size="180,160" zPosition="2" transparent="1" />
-                       <widget name="thumb4" position="270,293" size="180,160" zPosition="2" transparent="1" />
-                       <widget name="thumb5" position="485,293" size="180,160" zPosition="2" transparent="1" />
-               </screen>"""
-       
-       def __init__(self, session, filelist, name, path):
-               self.skin = ThumbView.skin
                Screen.__init__(self, session)
 
-               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "MovieSelectionActions"],
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"],
                {
-                       "cancel": self.Exit,
-                       "ok": self.KeyOk,
-                       "showEventInfo": self.StartExif,
-                       "right": self.key_right,
-                       "left": self.key_left,
-                       "up": self.key_up,
-                       "down": self.key_down
+                       "cancel": self.KeyExit,
+                       "red": self.KeyRed,
+                       "yellow": self.KeyYellow,
+                       "blue": self.KeyBlue,
+                       "ok": self.KeyOk
                }, -1)
-               
-               for x in range(6):
-                       self["label"+str(x)] = Label()
-                       self["thumb"+str(x)] = Pixmap()
-               self["frame"] = MovingPixmap()
-               
-               self.aspect = getAspect()
-               self.path = path
-               self.filelist = filelist
-               self.currPage = -1
-               self.index = 0
-               self.old_index = 0
-               self.thumblist = []
-               self.thumbindex = 0
-               self.list = []
-               self.poslist = [[50,63],[265,63],[480,63],[50,288],[265,288],[480,288]]
-               
-               count=0
-               pos=0
-               for x in self.filelist:
-                       if x[0][1] == False:
-                               self.list.append((x[0][0], self.path + x[0][0], count/6, pos, "(" + str(count+1) + ")  "))
-                               pos += 1
-                               if pos == 6:
-                                       pos = 0
-                               if x[0][0] == name:
-                                       self.index = count
-                               count += 1
-               self.maxentry = len(self.list)-1
-               
-               if self.maxentry < 0:
-                       self["label0"].setText(_("no Picture found"))
-               
-               self.ThumbTimer = eTimer()
-               self.ThumbTimer.callback.append(self.showThumb)
 
-               self.fillPage()
-               
-       def key_left(self):
-               self.index -= 1
-               if self.index < 0:
-                       self.index = self.maxentry
-               self.fillPage()
-               
-       def key_right(self):
-               self.index += 1
-               if self.index > self.maxentry:
-                       self.index = 0
-               self.fillPage()
-               
-       def key_up(self):
-               self.index -= 3
-               if self.index < 0:
-                       self.index = 0
-               self.fillPage()
-               
-       def key_down(self):
-               self.index += 3
-               if self.index > self.maxentry:
-                       self.index = self.maxentry
-               self.fillPage()
-               
-       def fillPage(self):
-               if self.maxentry < 0:
-                       return
+               self["key_red"] = Button(_("Thumbnails"))
+               self["key_green"] = Button()
+               self["key_yellow"] = Button(_("Exif"))
+               self["key_blue"] = Button(_("Setup"))
+               self["label"] = Label()
+               self["thn"] = Pixmap()
 
-               self["frame"].moveTo(self.poslist[self.list[self.index][3]][0], self.poslist[self.list[self.index][3]][1], 1)
-               self["frame"].startMoving()
-               
-               if self.list[self.index][2] != self.currPage:
-                       self.currPage = self.list[self.index][2]
-                       textlist = ["","","","","",""]
-                       self.thumblist = ["","","","","",""]
-                       
-                       for x in self.list:
-                               if x[2] == self.currPage:
-                                       textlist[x[3]] = x[4] + x[0]
-                                       self.thumblist[x[3]] = x[0]
-                                       
-                       for x in range(6):
-                               self["label"+str(x)].setText(textlist[x])
-                               self["thumb"+str(x)].hide()
-                               
-                       self.ThumbTimer.start(500, True)
-               
-       def showThumb(self):
-               if self.thumblist[self.thumbindex] != "":
-                       cachefile = ""
-                       if config.pic.cache.value:
-                               cachedir = self.path + ".Thumbnails/"
-                               cachefile = cachedir + self.thumblist[self.thumbindex] + str(180) + str(160) + str(self.aspect)
-                               if not pathExists(cachedir):
-                                       if not createDir(cachedir):
-                                               cachefile = ""
-
-                       ptr = loadPic(self.path + self.thumblist[self.thumbindex], 180, 160, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value), 1, cachefile, 1)
-                       if ptr != None:
-                               self["thumb"+str(self.thumbindex)].show()
-                               self["thumb"+str(self.thumbindex)].instance.setPixmap(ptr)
-                       
-                       self.thumbindex += 1
-                       if self.thumbindex < 6:
-                               self.ThumbTimer.start(500, True)
-                       else:
-                               self.thumbindex = 0
-               else:
-                       self.thumbindex = 0
-               
-       def StartExif(self):
-               if self.maxentry < 0:
-                       return
-
-               self.session.open(ExifView, self.list[self.index][1], self.list[self.index][0])
-
-       def KeyOk(self):
-               if self.maxentry < 0:
-                       return
-
-               self.old_index = self.index
-               self.session.openWithCallback(self.returnView ,PicView, self.filelist, self.list[self.index][0], self.path)
-               
-       def returnView(self, val=0):
-               self.index = val
-               if self.old_index != self.index:
-                       self.fillPage()
-               
-       def Exit(self):
-               self.close(self.index)
-
-#------------------------------------------------------------------------------------------
-
-class PicView(Screen):
-       skin = """
-               <screen position="0,0" size="720,576" flags="wfNoBorder" title="PicturePlayer" >
-                       <eLabel position="0,0" zPosition="0" size="720,576" backgroundColor="black" />
-                       <widget name="picture" position="80,50" size="560,450" zPosition="1" transparent="1" />
-                       <widget name="point" position="80,515" size="14,14" zPosition="1" pixmap="skin_default/icons/record.png" alphatest="on" />
-                       <widget name="file" position="150,510" size="350,30" font="Regular;20" halign="center" zPosition="1" transparent="1" />
-                       <ePixmap position="500,515" size="36,20" pixmap="skin_default/buttons/key_info.png" zPosition="1" alphatest="on" />
-                       <ePixmap position="550,515" size="20,20" pixmap="skin_default/icons/ico_mp_rewind.png"  zPosition="1" alphatest="on" />
-                       <widget name="play" position="575,515" size="20,20" pixmap="skin_default/icons/ico_mp_play.png"  zPosition="1" alphatest="on" />
-                       <widget name="pause" position="600,515" size="20,20" pixmap="skin_default/icons/ico_mp_pause.png"  zPosition="1" alphatest="on" />
-                       <ePixmap position="625,515" size="20,20" pixmap="skin_default/icons/ico_mp_forward.png"  zPosition="1" alphatest="on" />
-               </screen>"""
-       
-       def __init__(self, session, filelist, name, path):
-               self.skin = PicView.skin
-               Screen.__init__(self, session)
-
-               self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "MovieSelectionActions"],
-               {
-                       "cancel": self.Exit,
-                       "showEventInfo": self.StartExif,
-                       "green": self.Play,
-                       "yellow": self.Pause,
-                       "blue": self.nextPic,
-                       "red": self.prevPic
-               }, -1)
-
-               self.aspect = getAspect()
-               self.blinking = False
-               self.autoShow = True
-               self.slideOn = False
-               self.pauseOn = False
-               self.index = 0
-               self.old = 0
-               self.list = []
-               
-               count=0
-               for x in filelist:
-                       if x[0][1] == False:
-                               self.list.append((x[0][0], path + x[0][0], 0))
-                               if x[0][0] == name:
-                                       self.index = count
-                               count += 1
-               self.maxentry = len(self.list)-1
+               currDir = config.pic.lastDir.value
+               if not pathExists(currDir):
+                       currDir = "/"
 
-               self["file"] = Label(_("please wait, loading picture..."))
-               self["picture"] = Pixmap()
-               self["point"] = Pixmap()
-               self["play"] = Pixmap()
-               self["pause"] = Pixmap()
+               self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)")
+               self["filelist"] = self.filelist
+               self["filelist"].onSelectionChanged.append(self.selectionChanged)
                
-               self.decodeTimer = eTimer()
-               self.decodeTimer.callback.append(self.decodePic)
-               self.decodeTimer.start(300, True)
+               self.ThumbTimer = eTimer()
+               self.ThumbTimer.callback.append(self.showThumb)
 
-               self.slideTimer = eTimer()
-               self.slideTimer.callback.append(self.slidePic)
-               
-               
-       def Pause(self):
-               if self.slideOn:
-                       if self.pauseOn:
-                               self.pauseOn=False
-                               self["pause"].show()
-                       else:
-                               self.pauseOn=True
-                               self["play"].show()
-                               self.slideValue = 0
-               
-       def Play(self):
-               if self.pauseOn == False:
-                       if self.slideOn:
-                               self.slideOn=False
-                               self["play"].show()
-                       else:
-                               self.slideOn=True
-                               self.slideTimer.start(1000, True)
-                       
-                       self.slideValue = int(config.pic.slidetime.value)
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.showPic)
                
-       def slidePic(self):
-               if self.slideOn == True and self.pauseOn == False:
-                       self.blinkingWidget("play")
-                       self.slideValue -= 1
-                       if self.slideValue <= 0:
-                               self.slideValue = int(config.pic.slidetime.value)
-                               self.nextPic()
-               
-                       self.slideTimer.start(1000, True)
+               self.onLayoutFinish.append(self.setConf)
 
-               if self.pauseOn:
-                       self.blinkingWidget("pause")
-                       self.slideTimer.start(1000, True)
+       def showPic(self, picInfo=""):
+               ptr = self.picload.getData()
+               if ptr != None:
+                       self["thn"].instance.setPixmap(ptr.__deref__())
+                       self["thn"].show()
 
-       def decodePic(self):
-               self.currPic = loadPic(self.list[self.index][1], 560, 450, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value),1)
-               self["point"].hide()
-               if self.autoShow:
-                       self.showPic()
-                       self.autoShow = False
+               text = picInfo.split('\n',1)
+               self["label"].setText(text[1])
+               self["label"].show()
                
-       def showPic(self):
-               if self.currPic != None:
-                       self.old = self.index
-                       self["file"].setText(self.list[self.old][0] + "  (" + str(self.old+1) + "/" + str(self.maxentry+1) + ")")
-                       self["picture"].instance.setPixmap(self.currPic)
+       def showThumb(self):
+               if not self.filelist.canDescent():
+                       if self.filelist.getCurrentDirectory() and self.filelist.getFilename():
+                               if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1:
+                                       self.ThumbTimer.start(500, True)
 
-               self.next()
-               self["point"].show()
-               self.decodeTimer.start(300, True)
-               
-       def nextPic(self):
-               self.showPic()
-               
-       def prevPic(self):
-               self.index = self.old
-               self.prev()
-               self.autoShow = True
-               self["point"].show()
-               self.decodeTimer.start(300, True)
+       def selectionChanged(self):
+               if not self.filelist.canDescent():
+                       self.ThumbTimer.start(500, True)
+               else:
+                       self["label"].hide()
+                       self["thn"].hide()
                
-       def next(self):
-               self.index += 1
-               if self.index > self.maxentry:
-                       self.index = 0
+       def KeyRed(self):
+               #if not self.filelist.canDescent():
+               self.session.openWithCallback(self.callbackView, Pic_Thumb, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
+       
+       def KeyYellow(self):
+               if not self.filelist.canDescent():
+                       self.session.open(Pic_Exif, self.picload.getInfo(self.filelist.getCurrentDirectory() + self.filelist.getFilename()))
+       
+       def KeyBlue(self):
+               self.session.openWithCallback(self.setConf ,Pic_Setup)
 
-       def prev(self):
-               self.index -= 1
-               if self.index < 0:
-                       self.index = self.maxentry
-                       
-       def blinkingWidget(self, name):
-               if self.blinking:
-                       self.blinking=False
-                       self[name].show()
+       def KeyOk(self):
+               if self.filelist.canDescent():
+                       self.filelist.descent()
                else:
-                       self.blinking=True
-                       self[name].hide()
+                       self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
 
-       def StartExif(self):
-               if self.pauseOn == False:
-                       self.Pause()
-               self.session.openWithCallback(self.StopExif ,ExifView, self.list[self.old][1], self.list[self.old][0])
+       def setConf(self):
+               sc = getScale()
+               #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB)
+               self.picload.setPara((self["thn"].instance.size().width(), self["thn"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), "#00000000"))
                
-       def StopExif(self):
-               if self.pauseOn:
-                       self.Pause()
-
-       def Exit(self):
-               self.close(self.old)
+       def callbackView(self, val=0):
+               if val > 0:
+                       self.filelist.moveToIndex(val)
 
-#------------------------------------------------------------------------------------------
+       def KeyExit(self):
+               del self.picload
 
-class ExifView(Screen):
-       skin = """
-               <screen position="80,130" size="560,320" title="Exif-Data" >
-                       <widget name="exiflist" position="5,5" size="550,310" selectionDisabled="1" />
-               </screen>"""
-       
-       def __init__(self, session, fullname, name):
-               self.skin = ExifView.skin
-               Screen.__init__(self, session)
+               if self.filelist.getCurrentDirectory() is None:
+                       config.pic.lastDir.value = "/"
+               else:
+                       config.pic.lastDir.value = self.filelist.getCurrentDirectory()
 
-               self["actions"] = ActionMap(["OkCancelActions"],
-               {
-                       "cancel": self.close
-               }, -1)
-               
-               dlist = ["Name:", "EXIF-Version:", "Camera-Make:", "Camera-Model:", "Date/Time:", "User Comments:", "Width / Height:", "Orientation:", "Metering Mode:", "Exposure Program:", "Light Source:", "Flash used:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"]
-               tlist = [ ]
-               self["exiflist"] = ServiceInfoList(tlist)
-               tlist.append(ServiceInfoListEntry(dlist[0], name))
-               count=1
-               for x in getExif(fullname):
-                       tlist.append(ServiceInfoListEntry(dlist[count], x))
-                       count += 1
+               config.pic.save()
+               self.close()
 
 #------------------------------------------------------------------------------------------
 
-class PicSetup(Screen):
-       skin = """
-               <screen position="160,220" size="400,120" title="Settings" >
-                       <widget name="liste" position="10,10" size="380,100" />
-               </screen>"""
-       
+class Pic_Setup(Screen):
        def __init__(self, session):
-               self.skin = PicSetup.skin
+               self.skin = """<screen position="120,180" size="480,210" title="Settings" >
+                                       <widget name="liste" position="5,5" size="470,200" />
+                               </screen>"""
                Screen.__init__(self, session)
 
                self["actions"] = NumberActionMap(["SetupActions"],
@@ -398,12 +165,16 @@ class PicSetup(Screen):
                        "9": self.keyNumber
                }, -1)
                
-               self.list = []
-               self["liste"] = ConfigList(self.list)
-               self.list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
-               self.list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
-               self.list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
-               #self.list.append(getConfigListEntry(_("Rotate Picture"), config.pic.rotate))
+               list = []
+               self["liste"] = ConfigList(list)
+               list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
+               list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
+               list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
+               list.append(getConfigListEntry(_("show Infoline"), config.pic.infoline))
+               list.append(getConfigListEntry(_("Frame size in full view"), config.pic.framesize))
+               list.append(getConfigListEntry(_("slide picture in loop"), config.pic.loop))
+               list.append(getConfigListEntry(_("backgroundcolor"), config.pic.bgcolor))
+               list.append(getConfigListEntry(_("textcolor"), config.pic.textcolor))
                
        def keyLeft(self):
                self["liste"].handleKey(KEY_LEFT)
@@ -414,126 +185,390 @@ class PicSetup(Screen):
        def keyNumber(self, number):
                self["liste"].handleKey(KEY_0 + number)
 
+#---------------------------------------------------------------------------
+
+class Pic_Exif(Screen):
+       def __init__(self, session, exiflist):
+               self.skin = """<screen position="80,120" size="560,360" title="Info" >
+                               <widget source="menu" render="Listbox" position="0,0" size="560,360" scrollbarMode="showOnDemand" selectionDisabled="1" >
+                               <convert type="TemplatedMultiContent">
+                                       {"template": [  MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)], "fonts": [gFont("Regular", 20)], "itemHeight": 30 }
+                               </convert>
+                               </widget>
+                       </screen>"""
+               Screen.__init__(self, session)
 
-#------------------------------------------------------------------------------------------
+               self["actions"] = ActionMap(["OkCancelActions"],
+               {
+                       "cancel": self.close
+               }, -1)
+               
+               exifdesc = [_("filename")+':', "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"]
+               list = []
 
-class picmain(Screen):
-       skin = """
-               <screen position="160,90" size="400,390" title="PicturePlayer" >
-                       <ePixmap position="10,40" size="36,20" pixmap="skin_default/buttons/key_menu.png" transparent="1" alphatest="on" />
-                       <ePixmap position="10,70" size="36,20" pixmap="skin_default/buttons/key_info.png" transparent="1" alphatest="on" />
-                       <ePixmap position="12,100" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
-                       <eLabel text="Settings" position="60,40" size="120,25" font="Regular;20" transparent="1" />
-                       <eLabel text="Exif-Data" position="60,70" size="120,25" font="Regular;20" transparent="1" />
-                       <eLabel text="Thumbnails" position="60,100" size="120,25" font="Regular;20" transparent="1" />
-                       <widget name="thumbnail" position="200,5" size="180,160" alphatest="on" />
-                       <widget name="filelist" position="5,170" zPosition="2" size="390,210" scrollbarMode="showOnDemand" />
-               </screen>"""
-       
-       def __init__(self, session):
-               self.skin = picmain.skin
+               for x in range(len(exiflist)):
+                       if x>0:
+                               list.append((exifdesc[x], exiflist[x]))
+                       else:
+                               name = exiflist[x].split('/')[-1]
+                               list.append((exifdesc[x], name))
+               self["menu"] = List(list)
+
+#----------------------------------------------------------------------------------------
+
+T_INDEX = 0
+T_FRAME_POS = 1
+T_PAGE = 2
+T_NAME = 3
+T_FULL = 4
+
+class Pic_Thumb(Screen):
+       def __init__(self, session, piclist, lastindex, path):
+
+               self.textcolor = config.pic.textcolor.value
+               self.color = config.pic.bgcolor.value
+               textsize = 20
+               self.spaceX = 35
+               self.picX = 190
+               self.spaceY = 30
+               self.picY = 200
+               
+               size_w = getDesktop(0).size().width()
+               size_h = getDesktop(0).size().height()
+               self.thumbsX = size_w / (self.spaceX + self.picX) # thumbnails in X
+               self.thumbsY = size_h / (self.spaceY + self.picY) # thumbnails in Y
+               self.thumbsC = self.thumbsX * self.thumbsY # all thumbnails
+               
+               self.positionlist = []
+               skincontent = ""
+
+               posX = -1
+               for x in range(self.thumbsC):
+                       posY = x / self.thumbsX
+                       posX += 1
+                       if posX >= self.thumbsX:
+                               posX = 0
+                       
+                       absX = self.spaceX + (posX*(self.spaceX + self.picX))
+                       absY = self.spaceY + (posY*(self.spaceY + self.picY))
+                       self.positionlist.append((absX, absY))
+                       skincontent += "<widget name=\"label" + str(x) + "\" position=\"" + str(absX+5) + "," + str(absY+self.picY-textsize) + "\" size=\"" + str(self.picX - 10) + ","  + str(textsize) + "\" font=\"Regular;14\" zPosition=\"2\" transparent=\"1\" noWrap=\"1\" foregroundColor=\"" + self.textcolor + "\" />"
+               
+                       skincontent += "<widget name=\"thumb" + str(x) + "\" position=\"" + str(absX+5)+ "," + str(absY+5) + "\" size=\"" + str(self.picX -10) + "," + str(self.picY - (textsize*2)) + "\" zPosition=\"2\" transparent=\"1\" alphatest=\"on\" />"
+               
+               
+               # Screen, backgroundlabel and MovingPixmap
+               self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
+                       <eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\"" + self.color + "\" /><widget name=\"frame\" position=\"35,30\" size=\"190,200\" pixmap=\"pic_frame.png\" zPosition=\"1\" alphatest=\"on\" />"  + skincontent + "</screen>"
+               
                Screen.__init__(self, session)
-
-               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"],
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
                {
-                       "ok": self.KeyOk,
                        "cancel": self.Exit,
-                       "right": self.rightDown,
-                       "left": self.leftUp,
-                       "up": self.up,
-                       "down": self.down,
+                       "ok": self.KeyOk,
+                       "left": self.key_left,
+                       "right": self.key_right,
+                       "up": self.key_up,
+                       "down": self.key_down,
                        "showEventInfo": self.StartExif,
-                       "contextMenu": self.Settings,
-                       "red": self.StartThumb
                }, -1)
                
-               self.aspect = getAspect()
-               currDir = config.pic.lastDir.value
-               if not pathExists(currDir):
-                       currDir = "/"
+               self["frame"] = MovingPixmap()
+               for x in range(self.thumbsC):
+                       self["label"+str(x)] = Label()
+                       self["thumb"+str(x)] = Pixmap()
+                       
+               self.Thumbnaillist = []
+               self.filelist = []
+               self.currPage = -1
+               self.dirlistcount = 0
+               self.path = path
 
-               self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)")
-               self["filelist"] = self.filelist
-               self["thumbnail"] = Pixmap()
+               index = 0
+               framePos = 0
+               Page = 0
+               for x in piclist:
+                       if x[0][1] == False:
+                               self.filelist.append((index, framePos, Page, x[0][0],  path + x[0][0]))
+                               index += 1
+                               framePos += 1
+                               if framePos > (self.thumbsC -1):
+                                       framePos = 0
+                                       Page += 1
+                       else:
+                               self.dirlistcount += 1
+               
+               self.maxentry = len(self.filelist)-1
+               self.index = lastindex - self.dirlistcount
+               if self.index < 0:
+                       self.index = 0
+
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.showPic)
+               
+               self.onLayoutFinish.append(self.setPicloadConf)
                
                self.ThumbTimer = eTimer()
-               self.ThumbTimer.callback.append(self.showThumb)
-               self.ThumbTimer.start(500, True)
+               self.ThumbTimer.callback.append(self.showPic)
+
+       def setPicloadConf(self):
+               sc = getScale()
+               self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), self.color])
+               self.paintFrame()
+
+       def paintFrame(self):
+               #print "index=" + str(self.index)
+               if self.maxentry < self.index or self.index < 0:
+                       return
+
+               pos = self.positionlist[self.filelist[self.index][T_FRAME_POS]]
+               self["frame"].moveTo( pos[0], pos[1], 1)
+               self["frame"].startMoving()
                
-       def up(self):
-               self["filelist"].up()
-               self.ThumbTimer.start(1500, True)
+               if self.currPage != self.filelist[self.index][T_PAGE]:
+                       self.currPage = self.filelist[self.index][T_PAGE]
+                       self.newPage()
+
+       def newPage(self):
+               self.Thumbnaillist = []
+               #clear Labels and Thumbnail
+               for x in range(self.thumbsC):
+                       self["label"+str(x)].setText("")
+                       self["thumb"+str(x)].hide()
+               #paint Labels and fill Thumbnail-List
+               for x in self.filelist:
+                       if x[T_PAGE] == self.currPage:
+                               self["label"+str(x[T_FRAME_POS])].setText("(" + str(x[T_INDEX]+1) + ") " + x[T_NAME])
+                               self.Thumbnaillist.append([0, x[T_FRAME_POS], x[T_FULL]])
+                               
+               #paint Thumbnail start
+               self.showPic()
 
-       def down(self):
-               self["filelist"].down()
-               self.ThumbTimer.start(1500, True)
+       def showPic(self, picInfo=""):
+               for x in range(len(self.Thumbnaillist)):
+                       if self.Thumbnaillist[x][0] == 0:
+                               if self.picload.getThumbnail(self.Thumbnaillist[x][2]) == 1: #zu tun probier noch mal
+                                       self.ThumbTimer.start(500, True)
+                               else:
+                                       self.Thumbnaillist[x][0] = 1
+                               break
+                       elif self.Thumbnaillist[x][0] == 1:
+                               self.Thumbnaillist[x][0] = 2
+                               ptr = self.picload.getData()
+                               if ptr != None:
+                                       self["thumb" + str(self.Thumbnaillist[x][1])].instance.setPixmap(ptr.__deref__())
+                                       self["thumb" + str(self.Thumbnaillist[x][1])].show()
+
+       def key_left(self):
+               self.index -= 1
+               if self.index < 0:
+                       self.index = self.maxentry
+               self.paintFrame()
                
-       def leftUp(self):
-               self["filelist"].pageUp()
-               self.ThumbTimer.start(1500, True)
+       def key_right(self):
+               self.index += 1
+               if self.index > self.maxentry:
+                       self.index = 0
+               self.paintFrame()
                
-       def rightDown(self):
-               self["filelist"].pageDown()
-               self.ThumbTimer.start(1500, True)
+       def key_up(self):
+               self.index -= self.thumbsX
+               if self.index < 0:
+                       self.index =self.maxentry
+               self.paintFrame()
+               
+       def key_down(self):
+               self.index += self.thumbsX
+               if self.index > self.maxentry:
+                       self.index = 0
+               self.paintFrame()
 
-       def showThumb(self):
-               if not self.filelist.canDescent():
-                       cachefile = ""
-                       if config.pic.cache.value:
-                               cachedir = self.filelist.getCurrentDirectory() + ".Thumbnails/"
-                               cachefile = cachedir + self.filelist.getFilename() + str(180) + str(160) + str(self.aspect)
-                               if not pathExists(cachedir):
-                                       if not createDir(cachedir):
-                                               cachefile = ""
-
-                       ptr = loadPic(self.filelist.getCurrentDirectory() + self.filelist.getFilename(), 180, 160, self.aspect, int(config.pic.resize.value), 0, 0, cachefile, 1)
-                       if ptr != None:
-                               self["thumbnail"].show()
-                               self["thumbnail"].instance.setPixmap(ptr)
-               else:
-                       self["thumbnail"].hide()
+       def StartExif(self):
+               if self.maxentry < 0:
+                       return
+               self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.index][T_FULL]))
 
        def KeyOk(self):
-               if self.filelist.canDescent():
-                       self.filelist.descent()
-               else:
-                       self.session.openWithCallback(self.returnVal, PicView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
-                       
-       def StartThumb(self):
-               self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
+               if self.maxentry < 0:
+                       return
+               self.old_index = self.index
+               self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist, self.index, self.path)
 
-       def returnVal(self, val=0):
-               if val > 0:
-                       for x in self.filelist.getFileList():
-                               if x[0][1] == True:
-                                       val += 1
-                       self.filelist.moveToIndex(val)
+       def callbackView(self, val=0):
+               self.index = val
+               if self.old_index != self.index:
+                       self.paintFrame()
+       def Exit(self):
+               del self.picload
+               self.close(self.index + self.dirlistcount)
 
-       def StartExif(self):
-               if not self.filelist.canDescent():
-                       self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename())
+#---------------------------------------------------------------------------
+
+class Pic_Full_View(Screen):
+       def __init__(self, session, filelist, index, path):
+
+               self.textcolor = config.pic.textcolor.value
+               self.bgcolor = config.pic.bgcolor.value
+               space = config.pic.framesize.value
+               size_w = getDesktop(0).size().width()
+               size_h = getDesktop(0).size().height()
+               
+               self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
+                       <eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\""+ self.bgcolor +"\" /><widget name=\"pic\" position=\"" + str(space) + "," + str(space) + "\" size=\"" + str(size_w-(space*2)) + "," + str(size_h-(space*2)) + "\" zPosition=\"1\" alphatest=\"on\" /> \
+                       <widget name=\"point\" position=\""+ str(space+5) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/record.png\" alphatest=\"on\" /> \
+                       <widget name=\"play_icon\" position=\""+ str(space+25) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/ico_mp_play.png\"  alphatest=\"on\" /> \
+                       <widget name=\"file\" position=\""+ str(space+45) + "," + str(space) + "\" size=\""+ str(size_w-(space*2)-50) + ",25\" font=\"Regular;20\" halign=\"left\" foregroundColor=\"" + self.textcolor + "\" zPosition=\"2\" noWrap=\"1\" transparent=\"1\" /></screen>"
+
+               Screen.__init__(self, session)
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
+               {
+                       "cancel": self.Exit,
+                       "green": self.PlayPause,
+                       "yellow": self.PlayPause,
+                       "blue": self.nextPic,
+                       "red": self.prevPic,
+                       "left": self.prevPic,
+                       "right": self.nextPic,
+                       "showEventInfo": self.StartExif,
+               }, -1)
+               
+               self["point"] = Pixmap()
+               self["pic"] = Pixmap()
+               self["play_icon"] = Pixmap()
+               self["file"] = Label(_("please wait, loading picture..."))
+               
+               self.old_index = 0
+               self.filelist = []
+               self.lastindex = index
+               self.currPic = []
+               self.shownow = True
+               self.dirlistcount = 0
+
+               for x in filelist:
+                       if len(filelist[0]) == 3: #orig. filelist
+                               if x[0][1] == False:
+                                       self.filelist.append(path + x[0][0])
+                               else:
+                                       self.dirlistcount += 1
+                       elif len(filelist[0]) == 2: #scanlist
+                               if x[0][1] == False:
+                                       self.filelist.append(x[0][0])
+                               else:
+                                       self.dirlistcount += 1
+                       else: # thumbnaillist
+                               self.filelist.append(x[T_FULL])
+
+               self.maxentry = len(self.filelist)-1
+               self.index = index - self.dirlistcount
+               if self.index < 0:
+                       self.index = 0
+               
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.finish_decode)
+               
+               self.slideTimer = eTimer()
+               self.slideTimer.callback.append(self.slidePic)
 
-       def Settings(self):
-               self.session.open(PicSetup)
+               if self.maxentry >= 0:
+                       self.onLayoutFinish.append(self.setPicloadConf)
+
+       def setPicloadConf(self):
+               sc = getScale()
+               self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), sc[0], sc[1], 0, int(config.pic.resize.value), self.bgcolor])
+               
+               self["play_icon"].hide()
+               if config.pic.infoline.value == False:
+                       self["file"].hide()
+               self.start_decode()
+
+       def ShowPicture(self):
+               if self.shownow and len(self.currPic):
+                       self.shownow = False
+                       self["file"].setText(self.currPic[0])
+                       self.lastindex = self.currPic[1]
+                       self["pic"].instance.setPixmap(self.currPic[2].__deref__())
+                       self.currPic = []
+                       
+                       self.next()
+                       self.start_decode()
        
-       def Exit(self):
-               if self.filelist.getCurrentDirectory() is None:
-                       config.pic.lastDir.value = "/"
+       def finish_decode(self, picInfo=""):
+               self["point"].hide()
+               ptr = self.picload.getData()
+               if ptr != None:
+                       text = ""
+                       try:
+                               text = picInfo.split('\n',1)
+                               text = "(" + str(self.index+1) + "/" + str(self.maxentry+1) + ") " + text[0].split('/')[-1]
+                       except:
+                               pass
+                       self.currPic = []
+                       self.currPic.append(text)
+                       self.currPic.append(self.index)
+                       self.currPic.append(ptr)
+                       self.ShowPicture()
+
+       def start_decode(self):
+               self.picload.startDecode(self.filelist[self.index])
+               self["point"].show()
+
+       def next(self):
+               self.index += 1
+               if self.index > self.maxentry:
+                       self.index = 0
+
+       def prev(self):
+               self.index -= 1
+               if self.index < 0:
+                       self.index = self.maxentry
+
+       def slidePic(self):
+               print "slide to next Picture index=" + str(self.lastindex)
+               if config.pic.loop.value==False and self.lastindex == self.maxentry:
+                       self.PlayPause()
+               self.shownow = True
+               self.ShowPicture()
+
+       def PlayPause(self):
+               if self.slideTimer.isActive():
+                       self.slideTimer.stop()
+                       self["play_icon"].hide()
                else:
-                       config.pic.lastDir.value = self.filelist.getCurrentDirectory()
+                       self.slideTimer.start(config.pic.slidetime.value*1000)
+                       self["play_icon"].show()
+                       self.nextPic()
 
-               config.pic.save()
-               self.close()
+       def prevPic(self):
+               self.currPic = []
+               self.index = self.lastindex
+               self.prev()
+               self.start_decode()
+               self.shownow = True
+
+       def nextPic(self):
+               self.shownow = True
+               self.ShowPicture()
+               
+       def StartExif(self):
+               if self.maxentry < 0:
+                       return
+               self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.lastindex]))
+
+       def Exit(self):
+               del self.picload
+               self.close(self.lastindex + self.dirlistcount)
 
 #------------------------------------------------------------------------------------------
 
 def main(session, **kwargs):
-       session.open(picmain)
+       session.open(picshow)
 
 def filescan_open(list, session, **kwargs):
        # Recreate List as expected by PicView
        filelist = [((file.path, False), None) for file in list]
-       session.open(PicView, filelist, "", "")
+       session.open(Pic_Full_View, filelist, 0, file.path)
 
 def filescan(**kwargs):
        from Components.Scanner import Scanner, ScanPath
@@ -557,5 +592,5 @@ def filescan(**kwargs):
 
 def Plugins(**kwargs):
        return \
-               [PluginDescriptor(name="PicturePlayer", description="Picture Viewer (BMP, PNG, JPG, GIF)", icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
-                PluginDescriptor(name="PicturePlayer", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
+               [PluginDescriptor(name=_("PicturePlayer"), description=_("fileformats (BMP, PNG, JPG, GIF)"), icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
+                PluginDescriptor(name=_("PicturePlayer"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am b/lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am
new file mode 100644 (file)
index 0000000..cd72696
--- /dev/null
@@ -0,0 +1,5 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/DiseqcTester
+
+install_PYTHON =       \
+       __init__.py \
+       plugin.py
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py
new file mode 100644 (file)
index 0000000..0786195
--- /dev/null
@@ -0,0 +1,642 @@
+from Screens.Satconfig import NimSelection
+from Screens.Screen import Screen
+from Screens.TextBox import TextBox
+from Screens.MessageBox import MessageBox
+
+from Plugins.Plugin import PluginDescriptor
+
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.NimManager import nimmanager
+from Components.ResourceManager import resourcemanager
+from Components.Sources.FrontendStatus import FrontendStatus
+from Components.TuneTest import TuneTest
+from Components.Sources.List import List
+from Components.Sources.Progress import Progress
+from Components.Sources.StaticText import StaticText
+from Components.ConfigList import ConfigListScreen
+from Components.config import getConfigListEntry, ConfigSelection, ConfigYesNo
+from Components.Harddisk import harddiskmanager
+
+import random
+
+# always use:
+# setResultType(type)
+# setResultParameter(parameter)
+# getTextualResult()
+class ResultParser:
+       def __init__(self):
+               pass
+       
+       TYPE_BYORBPOS = 0
+       TYPE_BYINDEX = 1
+       TYPE_ALL = 2
+       def setResultType(self, type):
+               self.type = type
+               
+       def setResultParameter(self, parameter):
+               if self.type == self.TYPE_BYORBPOS:
+                       self.orbpos = parameter
+               elif self.type == self.TYPE_BYINDEX:
+                       self.index = parameter
+                       
+       def getTextualResultForIndex(self, index, logfulltransponders = False):
+               text = ""
+               text += "%s:\n" % self.getTextualIndexRepresentation(index)
+               
+               failed, successful = self.results[index]["failed"], self.results[index]["successful"]
+               countfailed = len(failed)
+               countsuccessful = len(successful)
+               countall = countfailed + countsuccessful
+               percentfailed = round(countfailed / float(countall + 0.0001) * 100)
+               percentsuccessful = round(countsuccessful / float(countall + 0.0001) * 100)
+               text += "Tested %d transponders\n%d (%d %%) transponders succeeded\n%d (%d %%) transponders failed\n" % (countall, countsuccessful, percentsuccessful, countfailed, percentfailed)
+               reasons = {}
+               if countfailed > 0:
+                       for transponder in failed:
+                               reasons[transponder[2]] = reasons.get(transponder[2], [])
+                               reasons[transponder[2]].append(transponder)
+                               if transponder[2] == "pids_failed":
+                                       print transponder[2], "-", transponder[3]
+                               
+                       text += "The %d unsuccessful tuning attempts failed for the following reasons:\n" % countfailed
+                       
+                       for reason in reasons.keys():
+                               text += "%s: %d transponders failed\n" % (reason, len(reasons[reason]))
+                       
+                       for reason in reasons.keys():
+                               text += "\n"
+                               text += "%s previous planes:\n" % reason
+                               for transponder in reasons[reason]:
+                                       if transponder[1] is not None:
+                                               text += self.getTextualIndexRepresentation(self.getIndexForTransponder(transponder[1]))
+                                       else:
+                                               text += "No transponder tuned"
+                                       text += " ==> " + self.getTextualIndexRepresentation(self.getIndexForTransponder(transponder[0]))
+                                       text += "\n"
+                                       if logfulltransponders:
+                                               text += str(transponder[1])
+                                               text += " ==> "
+                                               text += str(transponder[0])
+                                               text += "\n"
+               if countsuccessful > 0:
+                       text += "\n"
+                       text += "Successfully tuned transponders' previous planes:\n" 
+                       for transponder in successful:
+                               if transponder[1] is not None:
+                                       text += self.getTextualIndexRepresentation(self.getIndexForTransponder(transponder[1]))
+                               else:
+                                       text += "No transponder tuned"
+                               text += " ==> " + self.getTextualIndexRepresentation(self.getIndexForTransponder(transponder[0]))
+                               text += "\n"
+               return text
+
+       def getTextualResult(self):
+               text = ""
+               if self.type == self.TYPE_BYINDEX:
+                       text += self.getTextualResultForIndex(self.index)
+               elif self.type == self.TYPE_BYORBPOS:
+                       for index in self.results.keys():
+                               if index[2] == self.orbpos:
+                                       text += self.getTextualResultForIndex(index)
+                                       text += "\n-----------------------------------------------------\n"
+               elif self.type == self.TYPE_ALL:
+                       orderedResults = {}
+                       for index in self.results.keys():
+                               orbpos = index[2]
+                               orderedResults[orbpos] = orderedResults.get(orbpos, [])
+                               orderedResults[orbpos].append(index)
+                       ordered_orbpos = orderedResults.keys()
+                       ordered_orbpos.sort()
+                       for orbpos in ordered_orbpos:
+                               text += "\n*****************************************\n"
+                               text += "Orbital position %s:" % str(orbpos)
+                               text += "\n*****************************************\n"
+                               for index in orderedResults[orbpos]:
+                                       text += self.getTextualResultForIndex(index, logfulltransponders = True)
+                                       text += "\n-----------------------------------------------------\n"
+                       
+                               
+               return text
+
+class DiseqcTester(Screen, TuneTest, ResultParser):
+       skin = """
+               <screen position="90,100" size="520,400" title="DiSEqC Tester" >
+               <!--ePixmap pixmap="skin_default/icons/dish_scan.png" position="5,25" zPosition="0" size="119,110" transparent="1" alphatest="on" />
+               <widget source="Frontend" render="Label" position="190,10" zPosition="2" size="260,20" font="Regular;19" halign="center" valign="center" transparent="1">
+                       <convert type="FrontendInfo">SNRdB</convert>
+               </widget>
+               <eLabel name="snr" text="SNR:" position="120,35" size="60,22" font="Regular;21" halign="right" transparent="1" />
+               <widget source="Frontend" render="Progress" position="190,35" size="260,20" pixmap="skin_default/bar_snr.png" borderWidth="2" borderColor="#cccccc">
+                       <convert type="FrontendInfo">SNR</convert>
+               </widget>
+               <widget source="Frontend" render="Label" position="460,35" size="60,22" font="Regular;21">
+                       <convert type="FrontendInfo">SNR</convert>
+               </widget>
+               <eLabel name="agc" text="AGC:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
+               <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="skin_default/bar_snr.png" borderWidth="2" borderColor="#cccccc">
+                       <convert type="FrontendInfo">AGC</convert>
+               </widget>
+               <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
+                       <convert type="FrontendInfo">AGC</convert>
+               </widget>
+               <eLabel name="ber" text="BER:" position="120,85" size="60,22" font="Regular;21" halign="right" transparent="1" />
+               <widget source="Frontend" render="Progress" position="190,85" size="260,20" pixmap="skin_default/bar_ber.png" borderWidth="2" borderColor="#cccccc">
+                       <convert type="FrontendInfo">BER</convert>
+               </widget>
+               <widget source="Frontend" render="Label" position="460,85" size="60,22" font="Regular;21">
+                       <convert type="FrontendInfo">BER</convert>
+               </widget>
+               <eLabel name="lock" text="Lock:" position="120,115" size="60,22" font="Regular;21" halign="right" />
+               <widget source="Frontend" render="Pixmap" pixmap="skin_default/icons/lock_on.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
+                       <convert type="FrontendInfo">LOCK</convert>
+                       <convert type="ConditionalShowHide" />
+               </widget>
+               <widget source="Frontend" render="Pixmap" pixmap="skin_default/icons/lock_off.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
+                       <convert type="FrontendInfo">LOCK</convert>
+                       <convert type="ConditionalShowHide">Invert</convert>
+               </widget-->
+               <widget source="progress_list" render="Listbox" position="0,0" size="510,150" scrollbarMode="showOnDemand">
+                       <convert type="TemplatedMultiContent">
+                               {"template": [
+                                               MultiContentEntryText(pos = (10, 0), size = (330, 25), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the index name,
+                                               MultiContentEntryText(pos = (330, 0), size = (150, 25), flags = RT_HALIGN_RIGHT, text = 2) # index 2 is the status,
+                                       ],
+                                "fonts": [gFont("Regular", 20)],
+                                "itemHeight": 25
+                               }
+                       </convert>
+               </widget>
+               <eLabel name="overall_progress" text="Overall progress:" position="20,162" size="480,22" font="Regular;21" halign="center" transparent="1" />
+               <widget source="overall_progress" render="Progress" position="20,192" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
+               <eLabel name="overall_progress" text="Progress:" position="20,222" size="480,22" font="Regular;21" halign="center" transparent="1" />
+               <widget source="sub_progress" render="Progress" position="20,252" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
+               
+               <eLabel name="" text="Failed:" position="20,282" size="140,22" font="Regular;21" halign="left" transparent="1" />
+               <widget source="failed_counter" render="Label" position="160,282" size="100,20" font="Regular;21" />
+               
+               <eLabel name="" text="Succeeded:" position="20,312" size="140,22" font="Regular;21" halign="left" transparent="1" />
+               <widget source="succeeded_counter" render="Label" position="160,312" size="100,20" font="Regular;21" />
+               
+               <eLabel name="" text="With errors:" position="20,342" size="140,22" font="Regular;21" halign="left" transparent="1" />
+               <widget source="witherrors_counter" render="Label" position="160,342" size="100,20" font="Regular;21" />
+               
+               <eLabel name="" text="Not tested:" position="20,372" size="140,22" font="Regular;21" halign="left" transparent="1" />
+               <widget source="untestable_counter" render="Label" position="160,372" size="100,20" font="Regular;21" />
+               
+               <widget source="CmdText" render="Label" position="300,282" size="180,200" font="Regular;21" />
+               </screen>"""
+               
+       TEST_TYPE_QUICK = 0
+       TEST_TYPE_RANDOM = 1
+       TEST_TYPE_COMPLETE = 2
+       def __init__(self, session, feid, test_type = TEST_TYPE_QUICK, loopsfailed = 3, loopssuccessful = 1, log = False):
+               Screen.__init__(self, session)
+               self.feid = feid
+               self.test_type = test_type
+               self.loopsfailed = loopsfailed
+               self.loopssuccessful = loopssuccessful
+               self.log = log
+               
+               self["actions"] = NumberActionMap(["SetupActions"],
+               {
+                       "ok": self.select,
+                       "cancel": self.keyCancel,
+               }, -2)
+               
+               TuneTest.__init__(self, feid, stopOnSuccess = self.loopssuccessful, stopOnError = self.loopsfailed)
+               #self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
+               self["overall_progress"] = Progress()
+               self["sub_progress"] = Progress()
+               
+               self["failed_counter"] = StaticText("0")
+               self["succeeded_counter"] = StaticText("0")
+               self["witherrors_counter"] = StaticText("0")
+               self["untestable_counter"] = StaticText("0")
+               
+               self.list = []
+               self["progress_list"] = List(self.list)
+               self["progress_list"].onSelectionChanged.append(self.selectionChanged)
+               
+               self["CmdText"] = StaticText(_("Please wait while scanning is in progress..."))
+                               
+               self.indexlist = {}
+               self.readTransponderList()
+               
+               self.running = False
+               
+               self.results = {}
+               self.resultsstatus = {}
+               
+               self.onLayoutFinish.append(self.go)
+               
+       def getProgressListComponent(self, index, status):
+               return (index, self.getTextualIndexRepresentation(index), status)
+       
+       def clearProgressList(self):
+               self.list = []
+               self["progress_list"].list = self.list
+       
+       def addProgressListItem(self, index):
+               if index in self.indexlist:
+                       for entry in self.list:
+                               if entry[0] == index:
+                                       self.changeProgressListStatus(index, "working")
+                                       return
+                       self.list.append(self.getProgressListComponent(index, _("working")))
+                       self["progress_list"].list = self.list
+                       self["progress_list"].setIndex(len(self.list) - 1)
+
+       def changeProgressListStatus(self, index, status):
+               self.newlist = []
+               count = 0
+               indexpos = 0
+               for entry in self.list:
+                       if entry[0] == index:
+                               self.newlist.append(self.getProgressListComponent(index, status))
+                               indexpos = count
+                       else:
+                               self.newlist.append(entry)
+                       count += 1
+               self.list = self.newlist
+               self["progress_list"].list = self.list
+               self["progress_list"].setIndex(indexpos)
+
+       def readTransponderList(self):
+               for sat in nimmanager.getSatListForNim(self.feid):
+                       for transponder in nimmanager.getTransponders(sat[0]):
+                               #print transponder
+                               mytransponder = (transponder[1] / 1000, transponder[2] / 1000, transponder[3], transponder[4], transponder[5], sat[0], None, None, transponder[10], transponder[11])
+                               self.analyseTransponder(mytransponder)
+
+       def getIndexForTransponder(self, transponder):
+               
+               if transponder[0] < 11700:
+                       band = 1 # low
+               else:
+                       band = 0 # high
+               
+               polarisation = transponder[2]
+               
+               sat = transponder[5]
+               
+               index = (band, polarisation, sat)
+               return index
+
+       # sort the transponder into self.transponderlist
+       def analyseTransponder(self, transponder):
+               index = self.getIndexForTransponder(transponder)
+               if index not in self.indexlist:
+                       self.indexlist[index] = []
+               self.indexlist[index].append(transponder)
+               #print "self.indexlist:", self.indexlist
+       
+       # returns a string for the user representing a human readable output for index 
+       def getTextualIndexRepresentation(self, index):
+               print "getTextualIndexRepresentation:", index
+               text = ""
+               
+               text += nimmanager.getSatDescription(index[2]) + ", "
+               
+               if index[0] == 1:
+                       text += "Low Band, "
+               else:
+                       text += "High Band, "
+                       
+               if index[1] == 0:
+                       text += "H"
+               else:
+                       text += "V"
+               return text
+       
+       def fillTransponderList(self):
+               self.clearTransponder()
+               print "----------- fillTransponderList"
+               print "index:", self.currentlyTestedIndex
+               keys = self.indexlist.keys()
+               if self.getContinueScanning():
+                       print "index:", self.getTextualIndexRepresentation(self.currentlyTestedIndex)
+                       for transponder in self.indexlist[self.currentlyTestedIndex]:
+                               self.addTransponder(transponder)
+                       print "transponderList:", self.transponderlist
+                       return True
+               else:
+                       return False
+               
+       def progressCallback(self, progress):
+               if progress[0] != self["sub_progress"].getRange():
+                       self["sub_progress"].setRange(progress[0])
+               self["sub_progress"].setValue(progress[1])
+
+       # logic for scanning order of transponders
+       # on go getFirstIndex is called
+       def getFirstIndex(self):
+               # TODO use other function to scan more randomly
+               if self.test_type == self.TEST_TYPE_QUICK:
+                       self.myindex = 0
+                       keys = self.indexlist.keys()
+                       keys.sort(key = lambda a: a[2]) # sort by orbpos
+                       self["overall_progress"].setRange(len(keys))
+                       self["overall_progress"].setValue(self.myindex)
+                       return keys[0]
+               elif self.test_type == self.TEST_TYPE_RANDOM:
+                       self.randomkeys = self.indexlist.keys()
+                       random.shuffle(self.randomkeys)
+                       self.myindex = 0
+                       self["overall_progress"].setRange(len(self.randomkeys))
+                       self["overall_progress"].setValue(self.myindex)
+                       return self.randomkeys[0]
+               elif self.test_type == self.TEST_TYPE_COMPLETE:
+                       keys = self.indexlist.keys()
+                       print "keys:", keys
+                       successorindex = {}
+                       for index in keys:
+                               successorindex[index] = []
+                               for otherindex in keys:
+                                       if otherindex != index:
+                                               successorindex[index].append(otherindex)
+                               random.shuffle(successorindex[index])
+                       self.keylist = []
+                       stop = False
+                       currindex = None
+                       while not stop:
+                               if currindex is None or len(successorindex[currindex]) == 0:
+                                       oldindex = currindex
+                                       for index in successorindex.keys():
+                                               if len(successorindex[index]) > 0:
+                                                       currindex = index
+                                                       self.keylist.append(currindex)
+                                                       break
+                                       if currindex == oldindex:
+                                               stop = True
+                               else:
+                                       currindex = successorindex[currindex].pop()
+                                       self.keylist.append(currindex)
+                       print "self.keylist:", self.keylist
+                       self.myindex = 0
+                       self["overall_progress"].setRange(len(self.keylist))
+                       self["overall_progress"].setValue(self.myindex)
+                       return self.keylist[0]
+
+                                       
+       # after each index is finished, getNextIndex is called to get the next index to scan 
+       def getNextIndex(self):
+               # TODO use other function to scan more randomly
+               if self.test_type == self.TEST_TYPE_QUICK:
+                       self.myindex += 1
+                       keys = self.indexlist.keys()
+                       keys.sort(key = lambda a: a[2]) # sort by orbpos
+                       
+                       self["overall_progress"].setValue(self.myindex)
+                       if self.myindex < len(keys):
+                               return keys[self.myindex]
+                       else:
+                               return None
+               elif self.test_type == self.TEST_TYPE_RANDOM:
+                       self.myindex += 1
+                       keys = self.randomkeys
+                       
+                       self["overall_progress"].setValue(self.myindex)
+                       if self.myindex < len(keys):
+                               return keys[self.myindex]
+                       else:
+                               return None
+               elif self.test_type == self.TEST_TYPE_COMPLETE:
+                       self.myindex += 1
+                       keys = self.keylist
+                       
+                       self["overall_progress"].setValue(self.myindex)
+                       if self.myindex < len(keys):
+                               return keys[self.myindex]
+                       else:
+                               return None
+                               
+       # after each index is finished and the next index is returned by getNextIndex
+       # the algorithm checks, if we should continue scanning
+       def getContinueScanning(self):
+               if self.test_type == self.TEST_TYPE_QUICK or self.test_type == self.TEST_TYPE_RANDOM:
+                       return (self.myindex < len(self.indexlist.keys()))
+               elif self.test_type == self.TEST_TYPE_COMPLETE:
+                       return (self.myindex < len(self.keylist))
+               
+       def addResult(self, index, status, failedTune, successfullyTune):
+               self.results[index] = self.results.get(index, {"failed": [], "successful": [], "status": None, "internalstatus": None})
+               self.resultsstatus[status] = self.resultsstatus.get(status, [])
+
+               oldstatus = self.results[index]["internalstatus"]
+               if oldstatus is None:
+                       self.results[index]["status"] = status
+               elif oldstatus == "successful":
+                       if status == "failed":
+                               self.results[index]["status"] = "with_errors"
+                       elif status == "successful":
+                               self.results[index]["status"] = oldstatus
+                       elif status == "with_errors":
+                               self.results[index]["status"] = "with_errors"
+                       elif status == "not_tested":
+                               self.results[index]["status"] = oldstatus
+               elif oldstatus == "failed":
+                       if status == "failed":
+                               self.results[index]["status"] = oldstatus
+                       elif status == "successful":
+                               self.results[index]["status"] = "with_errors"
+                       elif status == "with_errors":
+                               self.results[index]["status"] = "with_errors"
+                       elif status == "not_tested":
+                               self.results[index]["status"] = oldstatus
+               elif oldstatus == "with_errors":
+                       if status == "failed":
+                               self.results[index]["status"] = oldstatus
+                       elif status == "successful":
+                               self.results[index]["status"] = oldstatus
+                       elif status == "with_errors":
+                               self.results[index]["status"] = oldstatus
+                       elif status == "not_tested":
+                               self.results[index]["status"] = oldstatus
+               elif oldstatus == "not_tested":
+                       self.results[index]["status"] = status
+                       
+               if self.results[index]["status"] != "working":
+                       self.results[index]["internalstatus"] = self.results[index]["status"] 
+               self.results[index]["failed"] = failedTune + self.results[index]["failed"]
+               self.results[index]["successful"] = successfullyTune + self.results[index]["successful"]
+               
+               self.resultsstatus[status].append(index)
+       
+       def finishedChecking(self):
+               print "finishedChecking"
+               TuneTest.finishedChecking(self)
+
+               if not self.results.has_key(self.currentlyTestedIndex):
+                       self.results[self.currentlyTestedIndex] = {"failed": [], "successful": [], "status": None, "internalstatus": None}
+               
+               if len(self.failedTune) > 0 and len(self.successfullyTune) > 0:
+                       self.changeProgressListStatus(self.currentlyTestedIndex, "with errors")
+                       self["witherrors_counter"].setText(str(int(self["witherrors_counter"].getText()) + 1))
+                       self.addResult(self.currentlyTestedIndex, "with_errors", self.failedTune, self.successfullyTune)
+               elif len(self.failedTune) == 0 and len(self.successfullyTune) == 0:
+                       self.changeProgressListStatus(self.currentlyTestedIndex, "not tested")
+                       self["untestable_counter"].setText(str(int(self["untestable_counter"].getText()) + 1))
+                       self.addResult(self.currentlyTestedIndex, "untestable", self.failedTune, self.successfullyTune)
+               elif len(self.failedTune) > 0:
+                       self.changeProgressListStatus(self.currentlyTestedIndex, "failed")
+                       #self["failed_counter"].setText(str(int(self["failed_counter"].getText()) + len(self.failedTune)))
+                       self["failed_counter"].setText(str(int(self["failed_counter"].getText()) + 1))
+                       self.addResult(self.currentlyTestedIndex, "failed", self.failedTune, self.successfullyTune)
+               else:
+                       self.changeProgressListStatus(self.currentlyTestedIndex, "successful")
+                       #self["succeeded_counter"].setText(str(int(self["succeeded_counter"].getText()) + len(self.successfullyTune)))
+                       self["succeeded_counter"].setText(str(int(self["succeeded_counter"].getText()) + 1))
+                       self.addResult(self.currentlyTestedIndex, "successful", self.failedTune, self.successfullyTune)
+                       
+                       
+               #self["failed_counter"].setText(str(int(self["failed_counter"].getText()) + len(self.failedTune)))
+               #self["succeeded_counter"].setText(str(int(self["succeeded_counter"].getText()) + len(self.successfullyTune)))
+               #if len(self.failedTune) == 0 and len(self.successfullyTune) == 0:
+                       #self["untestable_counter"].setText(str(int(self["untestable_counter"].getText()) + 1))
+                       
+               self.currentlyTestedIndex = self.getNextIndex()
+               self.addProgressListItem(self.currentlyTestedIndex)
+               
+               if self.fillTransponderList():
+                       self.run(checkPIDs = True)
+               else:
+                       self.running = False
+                       self["progress_list"].setIndex(0)
+                       print "results:", self.results
+                       print "resultsstatus:", self.resultsstatus
+                       if self.log:
+                               file = open("/media/hdd/diseqctester.log", "w")
+                               self.setResultType(ResultParser.TYPE_ALL)
+                               file.write(self.getTextualResult())
+                               file.close()
+                               self.session.open(MessageBox, text=_("The results have been written to %s.") % "/media/hdd/diseqctester.log", type = MessageBox.TYPE_INFO)
+
+       def go(self):
+               self.running = True
+               self["failed_counter"].setText("0")
+               self["succeeded_counter"].setText("0")
+               self["untestable_counter"].setText("0")
+               self.currentlyTestedIndex = self.getFirstIndex()
+               
+               self.clearProgressList()
+               self.addProgressListItem(self.currentlyTestedIndex)
+               
+               if self.fillTransponderList():
+                       self.run(True)
+
+       def keyCancel(self):
+               self.close()
+               
+       def select(self):
+               print "selectedIndex:", self["progress_list"].getCurrent()[0]
+               if not self.running:
+                       index = self["progress_list"].getCurrent()[0]
+                       #self.setResultType(ResultParser.TYPE_BYORBPOS)
+                       #self.setResultParameter(index[2])
+                       self.setResultType(ResultParser.TYPE_BYINDEX)
+                       self.setResultParameter(index)
+                       #self.setResultType(ResultParser.TYPE_ALL)
+                       self.session.open(TextBox, self.getTextualResult())
+       
+       def selectionChanged(self):
+               print "selection changed"
+               if len(self.list) > 0 and not self.running:
+                       self["CmdText"].setText(_("Press OK to get further details for %s") % str(self["progress_list"].getCurrent()[1]))
+
+class DiseqcTesterTestTypeSelection(Screen, ConfigListScreen):
+       skin = """<screen position="80,95" size="560,412" title="DiSEqC Tester Test Settings">
+               <widget name="config" position="10,10" size="540,402" scrollbarMode="showOnDemand" />
+       </screen>
+       """
+       def __init__(self, session, feid):
+               Screen.__init__(self, session)
+               self.feid = feid
+               
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               
+               self["actions"] = ActionMap(["SetupActions"],
+               {
+                       "cancel": self.keyCancel
+               }, -2)
+               
+               self.createSetup()
+               
+       def createSetup(self):
+               self.testtype = ConfigSelection(choices={"quick": _("Quick"), "random": _("Random"), "complete": _("Complete")}, default = "quick")
+               self.testtypeEntry = getConfigListEntry(_("Test Type"), self.testtype)
+               self.list.append(self.testtypeEntry)
+               
+               self.loopsfailed = ConfigSelection(choices={"-1": "Every known", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8"}, default = "3")
+               self.loopsfailedEntry = getConfigListEntry(_("Stop testing plane after # failed transponders"), self.loopsfailed)
+               self.list.append(self.loopsfailedEntry)
+               
+               self.loopssuccessful = ConfigSelection(choices={"-1": "Every known", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8"}, default = "1")
+               self.loopssuccessfulEntry = getConfigListEntry(_("Stop testing plane after # successful transponders"), self.loopssuccessful)
+               self.list.append(self.loopssuccessfulEntry)
+               
+               self.log = ConfigYesNo(False)
+               if harddiskmanager.HDDCount() > 0:
+                       self.logEntry = getConfigListEntry(_("Log results to harddisk"), self.log)
+                       self.list.append(self.logEntry)
+                                       
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
+               
+       def keyOK(self):
+               print self.testtype.getValue()
+               testtype = DiseqcTester.TEST_TYPE_QUICK
+               if self.testtype.getValue() == "quick":
+                       testtype = DiseqcTester.TEST_TYPE_QUICK
+               elif self.testtype.getValue() == "random":
+                       testtype = DiseqcTester.TEST_TYPE_RANDOM
+               elif self.testtype.getValue() == "complete":
+                       testtype = DiseqcTester.TEST_TYPE_COMPLETE
+               self.session.open(DiseqcTester, feid = self.feid, test_type = testtype, loopsfailed = int(self.loopsfailed.value), loopssuccessful = int(self.loopssuccessful.value), log = self.log.value)
+       
+       def keyCancel(self):
+               self.close()
+
+class DiseqcTesterNimSelection(NimSelection):
+       skin = """
+               <screen position="160,123" size="400,330" title="Choose Tuner">
+               <widget source="nimlist" render="Listbox" position="0,0" size="380,300" scrollbarMode="showOnDemand">
+                       <convert type="TemplatedMultiContent">
+                               {"template": [
+                                               MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
+                                               MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
+                                       ],
+                                "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
+                                "itemHeight": 70
+                               }
+                       </convert>
+               </widget>
+       </screen>"""
+               
+       def __init__(self, session, args = None):
+               NimSelection.__init__(self, session)
+
+       def setResultClass(self):
+               #self.resultclass = DiseqcTester
+               self.resultclass = DiseqcTesterTestTypeSelection
+               
+       def showNim(self, nim):
+               nimConfig = nimmanager.getNimConfig(nim.slot)
+               if nim.isCompatible("DVB-S"):
+                       if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends", "nothing"]:
+                               return False
+                       if nimConfig.configMode.value == "simple":
+                               if nimConfig.diseqcMode.value == "positioner":
+                                       return True
+                       return True
+               return False
+
+def DiseqcTesterMain(session, **kwargs):
+       session.open(DiseqcTesterNimSelection)
+       
+def autostart(reason, **kwargs):
+       resourcemanager.addResource("DiseqcTester", DiseqcTesterMain)
+
+def Plugins(**kwargs):
+       return [ PluginDescriptor(name="DiSEqC Tester", description=_("Test DiSEqC settings"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DiseqcTesterMain),
+                       PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)]
index 97ddf4a1c44999a08e206b41212417043f827154..b19007c993d93c7e7ea895c1809ab09d3d53388e 100644 (file)
@@ -3,17 +3,9 @@ from twisted.internet.protocol import Protocol, Factory
 from twisted.internet import reactor
 from Components.Harddisk import harddiskmanager
 
-DEVICEDB =  \
-       { "/devices/pci0000:00/0000:00:14.2/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0": "CF Slot",
-         "/devices/pci0000:00/0000:00:14.2/usb1/1-1/1-1:1.0/host0/target1:0:0/0:0:0:0": "SD Slot"
-       }
-
 hotplugNotifier = [ ]
 
 class Hotplug(Protocol):
-       def getUserfriendlyDeviceName(self, phys):
-               return DEVICEDB.get(phys, "USB Storage")
-
        def connectionMade(self):
                self.received = ""
 
@@ -40,20 +32,19 @@ class Hotplug(Protocol):
                dev = device.split('/')[-1]
 
                if action is not None and action == "add":
-                       print "Medium found in", self.getUserfriendlyDeviceName(dev)
-                       harddiskmanager.addHotplugPartition(dev, self.getUserfriendlyDeviceName(physdevpath))
+                       harddiskmanager.addHotplugPartition(dev, physdevpath)
                elif action is not None and action == "remove":
                        harddiskmanager.removeHotplugPartition(dev)
                elif media_state is not None:
                        if media_state == '1':
                                harddiskmanager.removeHotplugPartition(dev)
-                               harddiskmanager.addHotplugPartition(dev, self.getUserfriendlyDeviceName(physdevpath))
+                               harddiskmanager.addHotplugPartition(dev, physdevpath)
                        elif media_state == '0':
                                harddiskmanager.removeHotplugPartition(dev)
                
                for callback in hotplugNotifier:
                        try:
-                               callback(dev, media_state)
+                               callback(dev, action or media_state)
                        except AttributeError:
                                hotplugNotifier.remove(callback)
 
index 36b4bde5af63bdaae5228bbe471c3f758e71bbef..4491eafc258cc9ec4a6e17e9422e2ea6842eb63f 100644 (file)
@@ -1 +1 @@
-SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash
+SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash DiseqcTester
index c2046af7cb3f02a741bda0afebe3ae2f8833caf6..c91c85888b91a73a31b97e66b9f26b360c74bae0 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from Components.MenuList import MenuList
 from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
@@ -18,6 +19,7 @@ import urllib
 from twisted.web import client
 from twisted.internet import reactor, defer
 from twisted.python import failure
+from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
 
 class UserRequestedCancel(Exception):
        pass
@@ -119,10 +121,10 @@ class NFIDownload(Screen):
                        <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
                        <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
                        <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
-                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
-                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
-                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
-                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
                        
                        <widget source="label_top" render="Label" position="10,44" size="240,20" font="Regular;16" />
                        <widget name="feedlist" position="10,66" size="250,222" scrollbarMode="showOnDemand" />
@@ -169,6 +171,7 @@ class NFIDownload(Screen):
                self.box = HardwareInfo().get_device_name()
                self.feed_base = "http://www.dreamboxupdate.com/opendreambox/1.5/%s/images/" % self.box
                self.nfi_filter = "" # "release" # only show NFIs containing this string, or all if ""
+               self.wizard_mode = False
 
                self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "EPGSelectActions"],
                {
@@ -205,7 +208,7 @@ class NFIDownload(Screen):
                                        self["key_yellow"].text = (_("Change dir."))
                                else:
                                        self["key_yellow"].text = (_("Select image"))
-                       self["key_blue"].text = (_("Fix USB stick"))
+                       self["key_blue"].text = (_("USB stick wizard"))
 
        def switchList(self,to_where=None):
                if self.download or not self["feedlist"].isValid():
@@ -335,7 +338,7 @@ class NFIDownload(Screen):
                        self.download = self.nfo_download
                        self.downloading(True)
                        client.getPage(nfourl).addCallback(self.nfo_finished).addErrback(self.nfo_failed)
-                       self["statusbar"].text = _("Downloading image description...")
+                       self["statusbar"].text = ("Downloading image description...")
 
        def nfo_failed(self, failure_instance):
                print "[nfo_failed] " + str(failure_instance)
@@ -399,8 +402,8 @@ class NFIDownload(Screen):
                                print "couldn't save nfo file " + self.nfofilename
 
                        pos = self.nfo.find("MD5:")
-                       if pos > 0 and len(self.nfo) >= pos+5+32:                                       
-                               self["statusbar"].text = _("Please wait for md5 signature verification...")
+                       if pos > 0 and len(self.nfo) >= pos+5+32:
+                               self["statusbar"].text = ("Please wait for md5 signature verification...")
                                cmd = "md5sum -c -"
                                md5 = self.nfo[pos+5:pos+5+32] + "  " + self.nfilocal
                                print cmd, md5
@@ -415,6 +418,8 @@ class NFIDownload(Screen):
                else:
                        self["statusbar"].text = "Download completed."
                        self.downloading(False)
+                       if self.wizard_mode:
+                               self.configBackup()
 
        def md5ready(self, retval):
                self.download_container.sendEOF()
@@ -423,9 +428,12 @@ class NFIDownload(Screen):
                print "[md5finished]: " + str(retval)
                self.download_container.appClosed.remove(self.md5finished)
                if retval==0:
-                       self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
-                       self.switchList(self.LIST_SOURCE)
                        self.downloading(False)
+                       if self.wizard_mode:
+                               self.configBackup()
+                       else:
+                               self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
+                               self.switchList(self.LIST_SOURCE)
                else:
                        self.session.openWithCallback(self.nfi_remove, MessageBox, (_("The md5sum validation failed, the file may be downloaded incompletely or be corrupted!") + "\n" + _("Remove the broken .NFI file?")), MessageBox.TYPE_YESNO)
 
@@ -489,33 +497,22 @@ class NFIDownload(Screen):
 
        def umount_finished(self, retval):
                self.container.appClosed.remove(self.umount_finished)
-               self.session.openWithCallback(self.dmesg_clear, MessageBox, _("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."), MessageBox.TYPE_INFO)
-
-       def dmesg_clear(self, answer):
                self.container.appClosed.append(self.dmesg_cleared)
                self.taskstring = ""
                self.cmd = "dmesg -c"
                print "executing " + self.cmd
                self.container.execute(self.cmd)
 
-       def dmesg_cleared(self, retval):
+       def dmesg_cleared(self, answer):
                self.container.appClosed.remove(self.dmesg_cleared)
-               self.session.openWithCallback(self.stick_back_in, MessageBox, (_("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.")), MessageBox.TYPE_INFO)
-
-       def stick_back_in(self, answer):
-               self["statusbar"].text = _("Waiting for USB stick to settle...")
-               self.delayTimer = eTimer()
-               self.delayTimer.callback.append(self.waiting_for_stick)
-               self.delayCount = -1
-               self.delayTimer.start(1000)
-
-       def waiting_for_stick(self):
-               self.delayCount += 1
-               self["job_progressbar"].range = 6
-               self["job_progressbar"].value = self.delayCount
-               self["job_progresslabel"].text = "-%d s" % (6-self.delayCount)
-               if self.delayCount > 5:
-                       self.delayTimer.stop()
+               self.msgbox = self.session.open(MessageBox, _("Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"), MessageBox.TYPE_INFO)
+               hotplugNotifier.append(self.hotplugCB)
+
+       def hotplugCB(self, dev, action):
+               print "[hotplugCB]", dev, action
+               if dev.startswith("sd") and action == "add":
+                       self.msgbox.close()
+                       hotplugNotifier.remove(self.hotplugCB)
                        self.container.appClosed.append(self.dmesg_scanned)
                        self.taskstring = ""
                        self.cmd = "dmesg"
@@ -539,8 +536,8 @@ class NFIDownload(Screen):
                        self.session.openWithCallback(self.fdisk_query, MessageBox, (_("The following device was found:\n\n%s\n\nDo you want to write the USB flasher to this stick?") % self.devicetext), MessageBox.TYPE_YESNO)
 
        def fdisk_query(self, answer):
-               if answer == True:
-                       self["statusbar"].text = _("Partitioning USB stick...")
+               if answer == True and self.stickdevice:
+                       self["statusbar"].text = ("Partitioning USB stick...")
                        self["job_progressbar"].range = 1000
                        self["job_progressbar"].value = 100
                        self["job_progresslabel"].text = "5.00%"
@@ -562,7 +559,7 @@ class NFIDownload(Screen):
                                self.tar_finished(0)
                                self["job_progressbar"].value = 700
                        else:
-                               self["statusbar"].text = _("Decompressing USB stick flasher boot image...")
+                               self["statusbar"].text = ("Decompressing USB stick flasher boot image...")
                                self.taskstring = ""
                                self.container.appClosed.append(self.tar_finished)
                                self.container.setCWD("/tmp")
@@ -588,7 +585,7 @@ class NFIDownload(Screen):
                        self.container.appClosed.remove(self.tar_finished)
                if retval == 0:
                        self.imagefilename = "/tmp/nfiflash_" + self.box + ".img"
-                       self["statusbar"].text = _("Copying USB flasher boot image to stick...")
+                       self["statusbar"].text = ("Copying USB flasher boot image to stick...")
                        self.taskstring = ""
                        self.container.appClosed.append(self.dd_finished)
                        self.cmd = "dd if=%s of=%s" % (self.imagefilename,self.stickdevice+"/part1")
@@ -607,7 +604,7 @@ class NFIDownload(Screen):
                if retval == 0:
                        self["job_progressbar"].value = 950
                        self["job_progresslabel"].text = "95.00%"
-                       self["statusbar"].text = _("Remounting stick partition...")
+                       self["statusbar"].text = ("Remounting stick partition...")
                        self.taskstring = ""
                        self.container.appClosed.append(self.mount_finished)
                        self.cmd = "mount %s /mnt/usb -o rw,sync" % (self.stickdevice+"/part1")
@@ -622,11 +619,12 @@ class NFIDownload(Screen):
                if retval == 0:
                        self["job_progressbar"].value = 1000
                        self["job_progresslabel"].text = "100.00%"
-                       self["statusbar"].text = _(".NFI Flasher bootable USB stick successfully created.")
-                       self.session.openWithCallback(self.remove_img, MessageBox, _("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!"), MessageBox.TYPE_INFO)
+                       self["statusbar"].text = (".NFI Flasher bootable USB stick successfully created.")
+                       self.session.openWithCallback(self.flasherFinishedCB, MessageBox, _("The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?"), type = MessageBox.TYPE_YESNO)
                        self["destlist"].changeDir("/mnt/usb")
                else:
-                       self.session.openWithCallback(self.remove_img, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+                       self.session.openWithCallback(self.flasherFinishedCB, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+                       self.remove_img(True)
 
        def remove_img(self, answer):
                if fileExists("/tmp/nfiflasher_image.tar.bz2"):
@@ -636,6 +634,43 @@ class NFIDownload(Screen):
                self.downloading(False)
                self.switchList(self.LIST_SOURCE)
 
+       def flasherFinishedCB(self, answer):
+               if answer == True:
+                       self.wizard_mode = True
+                       self["feedlist"].moveSelection(0)
+                       self["path_bottom"].text = str(self["destlist"].getCurrentDirectory())
+                       self.nfo_download()
+                       self.nfi_download()
+
+       def configBackup(self):
+               self.session.openWithCallback(self.runBackup, MessageBox, _("The wizard can backup your current settings. Do you want to do a backup now?"))
+
+       def runBackup(self, result=None):
+               from Tools.Directories import createDir, isMount, pathExists
+               from time import localtime
+               from datetime import date
+               from Screens.Console import Console
+               if result:
+                       if isMount("/mnt/usb/"):
+                               if (pathExists("/mnt/usb/backup") == False):
+                                       createDir("/mnt/usb/backup", True)
+                               d = localtime()
+                               dt = date(d.tm_year, d.tm_mon, d.tm_mday)
+                               self.backup_file = "backup/" + str(dt) + "_settings_backup.tar.gz"
+                               self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + "/mnt/usb/" + self.backup_file + " /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"], finishedCallback = self.backup_finished, closeOnSuccess = True)
+               else:
+                       self.backup_file = None
+                       self.backup_finished(skipped=True)
+
+       def backup_finished(self, skipped=False):
+               if not skipped:
+                       wizardfd = open("/mnt/usb/wizard.nfo", "w")
+                       if wizardfd:
+                               wizardfd.write("image: "+self["feedlist"].getNFIname()+'\n')
+                               wizardfd.write("configuration: "+self.backup_file+'\n')
+                               wizardfd.close()
+               self.session.open(MessageBox, _("To update your Dreambox firmware, please follow these steps:\n1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n3) Wait for bootup and follow instructions of the wizard."), type = MessageBox.TYPE_INFO)
+
        def closeCB(self):
                if self.download:
                        self.download.stop()
@@ -659,8 +694,8 @@ def filescan(**kwargs):
                Scanner(mimetypes = ["application/x-dream-image"], 
                        paths_to_scan = 
                                [
-                                       ScanPath(path = "", with_subdirs = False), 
+                                       ScanPath(path = "", with_subdirs = False),
                                ], 
                        name = "NFI", 
-                       description = (_("Download .NFI-Files for USB-Flasher")+"..."), 
+                       description = (_("Download .NFI-Files for USB-Flasher")+"..."),
                        openfnc = filescan_open, )
index 6a982c5869e7331b23d811b45d2cf2096cfbc59e..860efc027e966de0707c1b3c09455492d2ca56be 100644 (file)
@@ -17,7 +17,7 @@ import re
 
 class writeNAND(Task):
        def __init__(self,job,param,box):
-               Task.__init__(self,job, _("Writing image file to NAND Flash"))
+               Task.__init__(self,job, ("Writing image file to NAND Flash"))
                self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/mywritenand")
                if box == "dm7025":
                        self.end = 256
@@ -26,7 +26,7 @@ class writeNAND(Task):
                if box == "dm8000":
                        self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/dm8000_writenand")
                self.args += param
-               self.weighting = 1      
+               self.weighting = 1
 
        def processOutput(self, data):
                print "[writeNand] " + data
@@ -174,8 +174,8 @@ class NFIFlash(Screen):
                print sign
                if sign.find("NFI1" + self.box + "\0") == 0:
                        if self.md5sum != "":
-                               self["statusbar"].text = _("Please wait for md5 signature verification...")
-                               self.session.summary.setText(_("Please wait for md5 signature verification..."))
+                               self["statusbar"].text = ("Please wait for md5 signature verification...")
+                               self.session.summary.setText(("Please wait for md5 signature verification..."))
                                self.container = eConsoleAppContainer()
                                self.container.setCWD(self["filelist"].getCurrentDirectory())
                                self.container.appClosed.append(self.md5finished)
@@ -252,7 +252,7 @@ class NFIFlash(Screen):
 
        def reboot(self):
                if self.job.status == self.job.FINISHED:
-                       self["statusbar"].text = _("rebooting...")
+                       self["statusbar"].text = ("rebooting...")
                        TryQuitMainloop(self.session,2)
                        
        def createSummary(self):
index d67a97cb4d4eaf3b3d3dc30c6b72b3175dd3596e..6d2ddce36069ea787113582fe08f4e0fd7b32b9e 100644 (file)
@@ -14,6 +14,8 @@ from Components.ActionMap import ActionMap
 from Components.NimManager import nimmanager
 from Components.MenuList import MenuList
 from Components.config import ConfigSatlist, ConfigNothing, ConfigSelection, ConfigSubsection, KEY_LEFT, KEY_RIGHT, getConfigListEntry
+from Components.TuneTest import Tuner
+from Tools.Transponder import ConvertToHumanReadable
 
 from time import sleep
 
@@ -26,22 +28,20 @@ class PositionerSetup(Screen):
                        <widget name="green" position="140,155" size="140,80" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
                        <widget name="yellow" position="280,155" size="140,80" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
                        <widget name="blue" position="420,155" size="140,80" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
-                       
-                       <widget name="snr" text="SNR:" position="0,245" size="60,22" font="Regular;21" />
-                       <widget name="agc" text="AGC:" position="0,270" size="60,22" font="Regular;21" />
-                       <widget name="ber" text="BER:" position="0,295" size="60,22" font="Regular;21" />
-                       <widget name="lock" text="Lock:" position="0,320" size="60,22" font="Regular;21" />
-                       <widget name="snr_percentage" position="220,245" size="60,22" font="Regular;21" />
-                       <widget name="agc_percentage" position="220,270" size="60,22" font="Regular;21" />
+
+                       <widget name="snr_db" position="60,245" size="150,22" halign="center" valign="center" font="Regular;21" />
+                       <eLabel text="SNR:" position="0,270" size="60,22" font="Regular;21" />
+                       <eLabel text="BER:" position="0,295" size="60,22" font="Regular;21" />
+                       <eLabel text="Lock:" position="0,320" size="60,22" font="Regular;21" />
+                       <widget name="snr_percentage" position="220,270" size="60,22" font="Regular;21" />
                        <widget name="ber_value" position="220,295" size="60,22" font="Regular;21" />
                        <widget name="lock_state" position="60,320" size="150,22" font="Regular;21" />
-                       <widget name="snr_bar" position="60,245" size="150,22" />
-                       <widget name="agc_bar" position="60,270" size="150,22" />
+                       <widget name="snr_bar" position="60,270" size="150,22" />
                        <widget name="ber_bar" position="60,295" size="150,22" />
 
-                       <widget name="frequency" text="Frequency:" position="300,245" size="120,22" font="Regular;21" />
-                       <widget name="symbolrate" text="Symbolrate:" position="300,270" size="120,22" font="Regular;21" />
-                       <widget name="fec" text="FEC:" position="300,295" size="120,22" font="Regular;21" />
+                       <eLabel text="Frequency:" position="300,245" size="120,22" font="Regular;21" />
+                       <eLabel text="Symbolrate:" position="300,270" size="120,22" font="Regular;21" />
+                       <eLabel text="FEC:" position="300,295" size="120,22" font="Regular;21" />
                        <widget name="frequency_value" position="420,245" size="120,22" font="Regular;21" />
                        <widget name="symbolrate_value" position="420,270" size="120,22" font="Regular;21" />
                        <widget name="fec_value" position="420,295" size="120,22" font="Regular;21" />
@@ -51,23 +51,46 @@ class PositionerSetup(Screen):
                Screen.__init__(self, session)
                self.feid = feid
                self.oldref = None
-               
+
+               cur = { }
                if not self.openFrontend():
                        self.oldref = session.nav.getCurrentlyPlayingServiceReference()
+                       service = session.nav.getCurrentService()
+                       feInfo = service and service.frontendInfo()
+                       if feInfo:
+                               cur = feInfo.getTransponderData(True)
+                       del feInfo
+                       del service
                        session.nav.stopService() # try to disable foreground service
                        if not self.openFrontend():
                                if session.pipshown: # try to disable pip
+                                       service = self.session.pip.pipservice
+                                       feInfo = service and service.frontendInfo()
+                                       if feInfo:
+                                               cur = feInfo.getTransponderData()
+                                       del feInfo
+                                       del service
                                        session.pipshown = False
                                        del session.pip
                                        if not self.openFrontend():
                                                self.frontend = None # in normal case this should not happen
-
+               
                self.frontendStatus = { }
-
                self.diseqc = Diseqc(self.frontend)
                self.tuner = Tuner(self.frontend)
-               self.tuner.tune((0,0,0,0,0,0))
-               
+
+               tp = ( cur.get("frequency", 0) / 1000,
+                       cur.get("symbol_rate", 0) / 1000,
+                       cur.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal),
+                       cur.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto),
+                       cur.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown),
+                       cur.get("orbital_position", 0),
+                       cur.get("system", eDVBFrontendParametersSatellite.System_DVB_S),
+                       cur.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK),
+                       cur.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35),
+                       cur.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown))
+
+               self.tuner.tune(tp)
                self.createConfig()
                
                self.isMoving = False
@@ -81,27 +104,18 @@ class PositionerSetup(Screen):
                self["yellow"] = self.yellow
                self.blue = Label("")
                self["blue"] = self.blue
-               
+
                self.list = []
                self["list"] = ConfigList(self.list)
                self.createSetup()
-               
-               self["snr"] = Label()
-               self["agc"] = Label()
-               self["ber"] = Label()
-               self["lock"] = Label()
+
+               self["snr_db"] = TunerInfo(TunerInfo.SNR_DB, statusDict = self.frontendStatus)
                self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus)
-               self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, statusDict = self.frontendStatus)
                self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus)
                self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus)
-               self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, statusDict = self.frontendStatus)
                self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus)
                self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus)
 
-               self["frequency"] = Label()
-               self["symbolrate"] = Label()
-               self["fec"] = Label()
-
                self["frequency_value"] = Label("")
                self["symbolrate_value"] = Label("")
                self["fec_value"] = Label("")
@@ -260,7 +274,12 @@ class PositionerSetup(Screen):
                elif entry == "limits":
                        self.diseqccommand("limitOff")
                elif entry == "tune":
-                       self.session.openWithCallback(self.tune, TunerScreen, self.feid)
+                       fe_data = { }
+                       self.frontend.getFrontendData(fe_data)
+                       self.frontend.getTransponderData(fe_data, True)
+                       feparm = self.tuner.lastparm.getDVBS()
+                       fe_data["orbital_position"] = feparm.orbital_position
+                       self.session.openWithCallback(self.tune, TunerScreen, self.feid, fe_data)
                elif entry == "goto0":
                        print "move to position 0"
                        self.diseqccommand("moveTo", 0)
@@ -283,6 +302,7 @@ class PositionerSetup(Screen):
                elif entry == "storage":
                        print "store at position", int(self.positioner_storage.value)
                        self.diseqccommand("store", int(self.positioner_storage.value))
+                       
                elif entry == "limits":
                        self.diseqccommand("limitWest")
 
@@ -329,14 +349,13 @@ class PositionerSetup(Screen):
        def updateStatus(self):
                if self.frontend:
                        self.frontend.getFrontendStatus(self.frontendStatus)
+               self["snr_db"].update()
                self["snr_percentage"].update()
-               self["agc_percentage"].update()
                self["ber_value"].update()
                self["snr_bar"].update()
-               self["agc_bar"].update()
                self["ber_bar"].update()
                self["lock_state"].update()
-               transponderdata = self.tuner.getTransponderData()
+               transponderdata = ConvertToHumanReadable(self.tuner.getTransponderData())
                self["frequency_value"].setText(str(transponderdata.get("frequency")))
                self["symbolrate_value"].setText(str(transponderdata.get("symbol_rate")))
                self["fec_value"].setText(str(transponderdata.get("fec_inner")))
@@ -387,37 +406,6 @@ class Diseqc:
                                sleep(0.05)
                                self.frontend.sendDiseqc(cmd) # send 2nd time
 
-class Tuner:
-       def __init__(self, frontend):
-               self.frontend = frontend
-
-       def tune(self, transponder):
-               print "tuning to transponder with data", transponder
-               parm = eDVBFrontendParametersSatellite()
-               parm.frequency = transponder[0] * 1000
-               parm.symbol_rate = transponder[1] * 1000
-               parm.polarisation = transponder[2]
-               parm.fec = transponder[3]
-               parm.inversion = transponder[4]
-               parm.orbital_position = transponder[5]
-               parm.system = 0  # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
-               parm.modulation = 1 # FIXMEE !! HARDCODED QPSK
-               feparm = eDVBFrontendParameters()
-               feparm.setDVBS(parm, True)
-               self.lastparm = feparm
-               if self.frontend:
-                       self.frontend.tune(feparm)
-
-       def retune(self):
-               if self.frontend:
-                       self.frontend.tune(self.lastparm)
-
-       def getTransponderData(self):
-               ret = { }
-               if self.frontend:
-                       self.frontend.getTransponderData(ret, True)
-               return ret
-
 tuning = None
 
 class TunerScreen(ScanSetup):
@@ -427,8 +415,9 @@ class TunerScreen(ScanSetup):
                        <widget name="introduction" position="20,360" size="350,30" font="Regular;23" />
                </screen>"""
 
-       def __init__(self, session, feid):
+       def __init__(self, session, feid, fe_data):
                self.feid = feid
+               self.fe_data = fe_data
                ScanSetup.__init__(self, session)
                self["introduction"].setText("")
 
@@ -440,21 +429,35 @@ class TunerScreen(ScanSetup):
                self.list.append(self.typeOfTuningEntry)
                self.satEntry = getConfigListEntry(_('Satellite'), tuning.sat)
                self.list.append(self.satEntry)
+               nim = nimmanager.nim_slots[self.feid]
+               self.systemEntry = None
+               
                if tuning.type.value == "manual_transponder":
+                       if nim.isCompatible("DVB-S2"):
+                               self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
+                               self.list.append(self.systemEntry)
+                       else:
+                               # downgrade to dvb-s, in case a -s2 config was active
+                               self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
                        self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
                        self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
-                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
+                               self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
+                               self.list.append(self.modulationEntry)
+                               self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                               self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                elif tuning.type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), tuning.transponder))
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
-               if self["config"].getCurrent() == self.typeOfTuningEntry:
-                       self.createSetup()
-               elif self["config"].getCurrent() == self.satEntry:
+               if self["config"].getCurrent() in (self.typeOfTuningEntry, self.satEntry, self.systemEntry):
                        self.createSetup()
 
        def createConfig(self, foo):
@@ -468,8 +471,14 @@ class TunerScreen(ScanSetup):
                        tuning.sat = ConfigSatlist(list=nimmanager.getRotorSatListForNim(self.feid))
                        tuning.sat.addNotifier(self.tuningSatChanged)
                        self.updateTransponders()
-                       TunerScreenConfigCreated = True
-               ScanSetup.createConfig(self, None)
+               orb_pos = self.fe_data.get("orbital_position", None)
+               if orb_pos is not None:
+                       for x in nimmanager.getRotorSatListForNim(self.feid):
+                               opos = str(orb_pos)
+                               if x[0] == orb_pos and tuning.sat.value != opos:
+                                       tuning.sat.value = opos
+                       del self.fe_data["orbital_position"]
+               ScanSetup.createConfig(self, self.fe_data)
 
        def tuningSatChanged(self, *parm):
                self.updateTransponders()
@@ -491,46 +500,55 @@ class TunerScreen(ScanSetup):
                                else:
                                        pol = "??"
                                if x[4] == 0:
-                                       fec = "FEC_AUTO"
+                                       fec = "FEC Auto"
                                elif x[4] == 1:
-                                       fec = "FEC_1_2"
+                                       fec = "FEC 1/2"
                                elif x[4] == 2:
-                                       fec = "FEC_2_3"
+                                       fec = "FEC 2/3"
                                elif x[4] == 3:
-                                       fec = "FEC_3_4"
+                                       fec = "FEC 3/4"
                                elif x[4] == 4:
-                                       fec = "FEC_5_6"
+                                       fec = "FEC 5/6"
                                elif x[4] == 5:
-                                       fec = "FEC_7_8"
+                                       fec = "FEC 7/8"
                                elif x[4] == 6:
-                                       fec = "FEC_8_9"
+                                       fec = "FEC 8/9"
                                elif x[4] == 7:
-                                       fec = "FEC_3_5"
+                                       fec = "FEC 3/5"
                                elif x[4] == 8:
-                                       fec = "FEC_4_5"
+                                       fec = "FEC 4/5"
                                elif x[4] == 9:
-                                       fec = "FEC_9_10"
+                                       fec = "FEC 9/10"
                                elif x[4] == 15:
-                                       fec = "FEC_None"
+                                       fec = "FEC None"
                                else:
-                                       fec = "FEC_Unknown"
+                                       fec = "FEC Unknown"
                                tps.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
                        tuning.transponder = ConfigSelection(choices=tps)
 
        def keyGo(self):
-               returnvalue = (0, 0, 0, 0, 0, 0)
+               returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
                satpos = int(tuning.sat.value)
                if tuning.type.value == "manual_transponder":
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               fec = self.scan_sat.fec_s2.value
+                       else:
+                               fec = self.scan_sat.fec.value
                        returnvalue = (
                                self.scan_sat.frequency.value,
                                self.scan_sat.symbolrate.value,
-                               self.scan_sat.polarization.index,
-                               self.scan_sat.fec.index,
-                               self.scan_sat.inversion.index,
-                               satpos)
+                               self.scan_sat.polarization.value,
+                               fec,
+                               self.scan_sat.inversion.value,
+                               satpos,
+                               self.scan_sat.system.value,
+                               self.scan_sat.modulation.value,
+                               self.scan_sat.rolloff.value,
+                               self.scan_sat.pilot.value)
                elif tuning.type.value == "predefined_transponder":
                        transponder = nimmanager.getTransponders(satpos)[tuning.transponder.index]
-                       returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos)
+                       returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
+                               transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9])
                self.close(returnvalue)
 
        def keyCancel(self):
@@ -538,8 +556,8 @@ class TunerScreen(ScanSetup):
 
 class RotorNimSelection(Screen):
        skin = """
-               <screen position="140,165" size="400,100" title="select Slot">
-                       <widget name="nimlist" position="20,10" size="360,75" />
+               <screen position="140,165" size="400,130" title="select Slot">
+                       <widget name="nimlist" position="20,10" size="360,100" />
                </screen>"""
 
        def __init__(self, session):
index 7456885533002f271c1b959fc66538a49e2d2069..8e14881291f227d2c6feb76684d898a94bb88d88 100644 (file)
@@ -12,73 +12,9 @@ from Components.ActionMap import ActionMap
 from Components.NimManager import nimmanager, getConfigSatlist
 from Components.MenuList import MenuList
 from Components.config import ConfigSelection, getConfigListEntry
-
-class Tuner:
-       def __init__(self, frontend):
-               self.frontend = frontend
-               
-       def tune(self, transponder):
-               if self.frontend:
-                       print "tuning to transponder with data", transponder
-                       parm = eDVBFrontendParametersSatellite()
-                       parm.frequency = transponder[0] * 1000
-                       parm.symbol_rate = transponder[1] * 1000
-                       parm.polarisation = transponder[2]
-                       parm.fec = transponder[3]
-                       parm.inversion = transponder[4]
-                       parm.orbital_position = transponder[5]
-                       parm.system = 0  # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
-                       parm.modulation = 1 # FIXMEE !! HARDCODED QPSK 
-                       feparm = eDVBFrontendParameters()
-                       feparm.setDVBS(parm)
-                       self.lastparm = feparm
-                       self.frontend.tune(feparm)
-       
-       def retune(self):
-               if self.frontend:
-                       self.frontend.tune(self.lastparm)
+from Components.TuneTest import Tuner
 
 class Satfinder(ScanSetup):
-       skin = """
-               <screen position="90,100" size="520,400" title="Tune">
-                       <widget name="config" position="20,10" size="460,210" scrollbarMode="showOnDemand" />
-                       <widget name="introduction" position="20,360" zPosition="-10" size="350,30" font="Regular;23" />
-                       <eLabel text="dB:" position="23,230" size="60,22" font="Regular;21" />
-                       <eLabel text="SNR:" position="23,255" size="60,22" font="Regular;21" />
-                       <eLabel text="AGC:" position="23,280" size="60,22" font="Regular;21" />
-                       <eLabel text="BER:" position="23,305" size="60,22" font="Regular;21" />
-                       <eLabel text="Lock:" position="23,330" size="60,22" font="Regular;21" />
-                       <widget source="Frontend" render="Label" position="295,230" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">SNRdB</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,255" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">SNR</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,280" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">AGC</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,305" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">BER</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,257" size="200,22" >
-                               <convert type="FrontendInfo">SNR</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,282" size="200,22" >
-                               <convert type="FrontendInfo">AGC</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,307" size="200,22" >
-                               <convert type="FrontendInfo">BER</convert>
-                       </widget>
-                       <widget source="Frontend" render="Pixmap" pixmap="skin_default/buttons/key_green.png" position="295,330" zPosition="4" size="28,20" alphatest="on" >
-                               <convert type="FrontendInfo">LOCK</convert>
-                       <convert type="ConditionalShowHide" />
-                       </widget>
-                       <widget source="Frontend" render="Pixmap" pixmap="skin_default/buttons/key_red.png" position="295,330" zPosition="4" size="28,20" alphatest="on" >
-                               <convert type="FrontendInfo">LOCK</convert>
-                       <convert type="ConditionalShowHide">Invert</convert>
-                       </widget>
-               </screen>"""
-
        def openFrontend(self):
                res_mgr = eDVBResourceManager.getInstance()
                if res_mgr:
@@ -125,25 +61,44 @@ class Satfinder(ScanSetup):
                self.satEntry = None
                
                self.list = []
+
                self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
                self.list.append(self.typeOfTuningEntry)
                self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
                self.list.append(self.satEntry)
+
+               nim = nimmanager.nim_slots[self.feid]
+
+               self.systemEntry = None
                if self.tuning_type.value == "manual_transponder":
+                       if nim.isCompatible("DVB-S2"):
+                               self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
+                               self.list.append(self.systemEntry)
+                       else:
+                               # downgrade to dvb-s, in case a -s2 config was active
+                               self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
                        self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
                        self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
-                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
+                               self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
+                               self.list.append(self.modulationEntry)
+                               self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                               self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
-               if self["config"].getCurrent() == self.typeOfTuningEntry:
+               cur = self["config"].getCurrent()
+               if cur in (self.typeOfTuningEntry, self.systemEntry):
                        self.createSetup()
-               elif self["config"].getCurrent() == self.satEntry:
+               elif cur == self.satEntry:
                        self.updateSats()
                        self.createSetup()
 
@@ -152,20 +107,33 @@ class Satfinder(ScanSetup):
                self.retune(config_element)
 
        def retune(self, configElement):
-               returnvalue = (0, 0, 0, 0, 0, 0, 0)
-               satpos = self.tuning_sat.orbital_position
-               
-               if satpos is not None:
-                       if self.tuning_type.value == "manual_transponder":
-                               returnvalue = (self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, self.scan_sat.polarization.index, self.scan_sat.fec.index, self.scan_sat.inversion.index, satpos)
+               returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+               satpos = int(self.tuning_sat.value)
+               if self.tuning_type.value == "manual_transponder":
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               fec = self.scan_sat.fec_s2.value
+                       else:
+                               fec = self.scan_sat.fec.value
+                       returnvalue = (
+                               self.scan_sat.frequency.value,
+                               self.scan_sat.symbolrate.value,
+                               self.scan_sat.polarization.value,
+                               fec,
+                               self.scan_sat.inversion.value,
+                               satpos,
+                               self.scan_sat.system.value,
+                               self.scan_sat.modulation.value,
+                               self.scan_sat.rolloff.value,
+                               self.scan_sat.pilot.value)
+                       self.tune(returnvalue)
+               elif self.tuning_type.value == "predefined_transponder":
+                       tps = nimmanager.getTransponders(satpos)
+                       l = len(tps)
+                       if l > self.tuning_transponder.index:
+                               transponder = tps[self.tuning_transponder.index]
+                               returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
+                                       transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9])
                                self.tune(returnvalue)
-                       elif self.tuning_type.value == "predefined_transponder":
-                               tps = nimmanager.getTransponders(satpos)
-                               l = len(tps)
-                               if l > self.tuning_transponder.index:
-                                       transponder = nimmanager.getTransponders(satpos)[self.tuning_transponder.index]
-                                       returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos)
-                                       self.tune(returnvalue)
 
        def createConfig(self, foo):
                self.tuning_transponder = None
@@ -174,14 +142,13 @@ class Satfinder(ScanSetup):
                ScanSetup.createConfig(self, None)
                
                self.updateSats()
-               
-               self.tuning_type.addNotifier(self.retune, initial_call = False)
-               self.tuning_sat.addNotifier(self.sat_changed, initial_call = False)
-               self.scan_sat.frequency.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.inversion.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.symbolrate.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.polarization.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.fec.addNotifier(self.retune, initial_call = False)
+
+               for x in (self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
+                       self.scan_sat.inversion, self.scan_sat.symbolrate,
+                       self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
+                       self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
+                       self.scan_sat.rolloff, self.scan_sat.system):
+                       x.addNotifier(self.retune, initial_call = False)
 
        def updateSats(self):
                orb_pos = self.tuning_sat.orbital_position
@@ -201,29 +168,29 @@ class Satfinder(ScanSetup):
                                else:
                                        pol = "??"
                                if x[4] == 0:
-                                       fec = "FEC_AUTO"
+                                       fec = "FEC Auto"
                                elif x[4] == 1:
-                                       fec = "FEC_1_2"
+                                       fec = "FEC 1/2"
                                elif x[4] == 2:
-                                       fec = "FEC_2_3"
+                                       fec = "FEC 2/3"
                                elif x[4] == 3:
-                                       fec = "FEC_3_4"
+                                       fec = "FEC 3/4"
                                elif x[4] == 4:
-                                       fec = "FEC_5_6"
+                                       fec = "FEC 5/6"
                                elif x[4] == 5:
-                                       fec = "FEC_7_8"
+                                       fec = "FEC 7/8"
                                elif x[4] == 6:
-                                       fec = "FEC_8_9"
+                                       fec = "FEC 8/9"
                                elif x[4] == 7:
-                                       fec = "FEC_3_5"
+                                       fec = "FEC 3/5"
                                elif x[4] == 8:
-                                       fec = "FEC_4_5"
+                                       fec = "FEC 4/5"
                                elif x[4] == 9:
-                                       fec = "FEC_9_10"
+                                       fec = "FEC 9/10"
                                elif x[4] == 15:
-                                       fec = "FEC_None"
+                                       fec = "FEC None"
                                else:
-                                       fec = "FEC_Unknown"
+                                       fec = "FEC Unknown"
                                e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
                                if default is None:
                                        default = e
@@ -256,8 +223,8 @@ class Satfinder(ScanSetup):
 
 class SatNimSelection(Screen):
        skin = """
-               <screen position="140,165" size="400,100" title="select Slot">
-                       <widget name="nimlist" position="20,10" size="360,75" />
+               <screen position="140,165" size="400,130" title="select Slot">
+                       <widget name="nimlist" position="20,10" size="360,100" />
                </screen>"""
                
        def __init__(self, session):
@@ -281,7 +248,13 @@ class SatNimSelection(Screen):
                self.session.open(Satfinder, selection)
 
 def SatfinderMain(session, **kwargs):
-       nimList = nimmanager.getNimListOfType("DVB-S")
+       nims = nimmanager.getNimListOfType("DVB-S")
+
+       nimList = []
+       for x in nims:
+               if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
+                       nimList.append(x)
+
        if len(nimList) == 0:
                session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
        else:
index 2422475eaa0ba7997ac292b3bcb99b20441d8565..6a85c4da9338d6c40802ef8a6c396e13b6ecda9a 100644 (file)
@@ -59,10 +59,37 @@ class VideoHardware:
 
        widescreen_modes = set(["720p", "1080i"])
 
+       def getOutputAspect(self):
+               ret = (16,9)
+               port = config.av.videoport.value
+               if port not in config.av.videomode:
+                       print "current port not available in getOutputAspect!!! force 16:9"
+               else:
+                       mode = config.av.videomode[port].value
+                       force_widescreen = self.isWidescreenMode(port, mode)
+                       is_widescreen = force_widescreen or config.av.aspect.value in ["16_9", "16_10"]
+                       is_auto = config.av.aspect.value == "auto"
+                       if is_widescreen:
+                               if force_widescreen:
+                                       pass
+                               else:
+                                       aspect = {"16_9": "16:9", "16_10": "16:10"}[config.av.aspect.value]
+                                       if aspect == "16:10":
+                                               ret = (16,10)
+                       elif is_auto:
+                               try:
+                                       aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
+                                       if aspect_str == "1": # 4:3
+                                               ret = (4,3)
+                               except IOError:
+                                       pass
+                       else:  # 4:3
+                               ret = (4,3)
+               return ret
+
        def __init__(self):
                self.last_modes_preferred =  [ ]
                self.on_hotplug = CList()
-               self.standby = False
                self.current_mode = None
                self.current_port = None
 
@@ -79,7 +106,7 @@ class VideoHardware:
                config.av.aspectratio.notifiers = [ ]
                config.av.tvsystem.notifiers = [ ]
                config.av.wss.notifiers = [ ]
-               AVSwitch.setInput = self.AVSwitchSetInput
+               AVSwitch.getOutputAspect = self.getOutputAspect
 
                config.av.aspect.addNotifier(self.updateAspect)
                config.av.wss.addNotifier(self.updateAspect)
@@ -91,12 +118,6 @@ class VideoHardware:
 #              self.timer.callback.append(self.readPreferredModes)
 #              self.timer.start(1000)
 
-               config.av.colorformat.addNotifier(self.updateFastblank) 
-
-       def AVSwitchSetInput(self, mode):
-               self.standby = mode == "SCART"
-               self.updateStandby()
-
        def readAvailableModes(self):
                try:
                        modes = open("/proc/stb/video/videomode_choices").read()[:-1]
@@ -264,6 +285,7 @@ class VideoHardware:
 
                is_widescreen = force_widescreen or config.av.aspect.value in ["16_9", "16_10"]
                is_auto = config.av.aspect.value == "auto"
+               policy2 = "policy" # use main policy
 
                if is_widescreen:
                        if force_widescreen:
@@ -271,6 +293,7 @@ class VideoHardware:
                        else:
                                aspect = {"16_9": "16:9", "16_10": "16:10"}[config.av.aspect.value]
                        policy = {"pillarbox": "panscan", "panscan": "letterbox", "nonlinear": "nonlinear", "scale": "bestfit"}[config.av.policy_43.value]
+                       policy2 = {"letterbox": "letterbox", "panscan": "panscan", "scale": "bestfit"}[config.av.policy_169.value]
                elif is_auto:
                        aspect = "any"
                        policy = "bestfit"
@@ -283,46 +306,14 @@ class VideoHardware:
                else:
                        wss = "auto"
 
-               print "-> setting aspect, policy, wss", aspect, policy, wss
+               print "-> setting aspect, policy, policy2, wss", aspect, policy, policy2, wss
                open("/proc/stb/video/aspect", "w").write(aspect)
                open("/proc/stb/video/policy", "w").write(policy)
                open("/proc/stb/denc/0/wss", "w").write(wss)
-               self.updateSlowblank()
-               self.updateFastblank()
-
-       def updateSlowblank(self):
-               if self.standby:
-                       from Components.SystemInfo import SystemInfo
-                       if SystemInfo["ScartSwitch"]:
-                               input = "scart"
-                               sb = "vcr"
-                       else:
-                               input = "off"
-                               sb = "0"
-               else:
-                       input = "encoder"
-                       sb = "auto"
-
-               open("/proc/stb/avs/0/sb", "w").write(sb)
-               open("/proc/stb/avs/0/input", "w").write(input)
-
-       def updateStandby(self):
-               self.updateSlowblank()
-               self.updateFastblank()
-
-       def updateFastblank(self, *args):
-               if self.standby:
-                       from Components.SystemInfo import SystemInfo
-                       if SystemInfo["ScartSwitch"]:
-                               fb = "vcr"
-                       else:
-                               fb = "low"
-               else:
-                       if self.current_port == "Scart" and config.av.colorformat.value == "rgb":
-                               fb = "high"
-                       else:
-                               fb = "low"
-               open("/proc/stb/avs/0/fb", "w").write(fb)
+               try:
+                       open("/proc/stb/video/policy2", "w").write(policy2)
+               except IOError:
+                       pass
 
 config.av.edid_override = ConfigYesNo(default = False)
 video_hw = VideoHardware()
index ab7aad727fd547e18a618bb1de65281eba324709..30bdf796b429721a87aad24b8184eeea7c138b85 100644 (file)
@@ -78,6 +78,7 @@ class VideoSetup(Screen, ConfigListScreen):
 
                if force_wide or config.av.aspect.value in ["16_9", "16_10"]:
                        self.list.append(getConfigListEntry(_("Display 4:3 content as"), config.av.policy_43))
+                       self.list.append(getConfigListEntry(_("Display >16:9 content as"), config.av.policy_169))
                elif config.av.aspect.value == "4_3":
                        self.list.append(getConfigListEntry(_("Display 16:9 content as"), config.av.policy_169))
 
diff --git a/lib/python/Plugins/newplugin.py b/lib/python/Plugins/newplugin.py
new file mode 100644 (file)
index 0000000..48bb28e
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+
+import os
+
+os.system("clear")
+internalname = raw_input("Internal plugin name (no whitespaces, plugin directory): ")
+name = raw_input("Visible plugin name: ")
+print
+
+os.system("clear")
+dirlist = []
+count = 0
+print "Plugin categories:"
+for dir in os.listdir("."):
+       if os.path.isdir(dir):
+               count += 1
+               dirlist.append(dir)
+               print count, dir
+               
+category = raw_input("Select plugin category: ")
+category = dirlist[int(category) - 1]
+
+def add_where_extensionsmenu(name, fnc):
+       description = raw_input("Plugin description: ")
+       return 'PluginDescriptor(name = "%s", description = _("%s"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc = %s)' % (name, description, fnc) 
+
+def add_where_pluginmenu(name, fnc):
+       description = raw_input("Plugin description: ")
+       icon = raw_input("Icon (default: 'plugin.png': ")
+       if icon == "":
+               icon = "plugin.png"
+       return 'PluginDescriptor(name = "%s", description = _("%s"), icon = "%s", where = PluginDescriptor.WHERE_PLUGINMENU, fnc = %s)' % (name, description, icon, fnc) 
+
+wherelist = []
+wherelist.append(("WHERE_EXTENSIONSMENU", add_where_extensionsmenu))
+wherelist.append(("WHERE_PLUGINMENU", add_where_pluginmenu))
+
+targetlist = []
+
+stop = False
+
+while not stop:
+       os.system("clear")
+       print "selected targets:"
+       for where in targetlist:
+               print where[0]
+       
+       print
+       print "available targets:"
+       count = 0
+       for where in wherelist:
+               count += 1
+               print count, where[0]
+       print "x break"
+               
+       target = raw_input("Select WHERE-target: ")
+       if target == "x":
+               stop = True
+       else:
+               if wherelist[int(target) - 1] not in targetlist:
+                       targetlist.append(wherelist[int(target) - 1])
+               else:
+                       targetlist.remove(wherelist[int(target) - 1])
+
+
+pluginpath = category + "/" +  internalname
+os.mkdir(pluginpath)
+
+makefile = open(category + "/Makefile.am", "r")
+lines = makefile.readlines()
+lines = ''.join(lines)
+lines = lines.strip()
+lines += " " + internalname
+makefile.close()
+
+makefile = open(category + "/Makefile.am", "w")
+makefile.write(lines)
+makefile.close()
+
+lines = []
+print "open"
+configure = open("../../../configure.ac", "r")
+while True:
+       line = configure.readline()
+       if not line:
+               break
+       lines.append(line)
+       if line.strip() == "lib/python/Plugins/" + category + "/Makefile":
+               lines.append("lib/python/Plugins/" + pluginpath + "/Makefile\n")
+configure.close()
+print "close"
+
+configure = open("../../../configure.ac", "w")
+configure.writelines(lines)
+configure.close()
+
+file = open(pluginpath + "/plugin.py", "w")
+
+importlist = []
+for where in targetlist:
+       importlist.append(where[0])
+
+file.write("""from Screens.Screen import Screen
+from Plugins.Plugin import PluginDescriptor, %s
+""" % ', '.join(importlist))
+
+mainlist = []
+for count in range(len(targetlist)):
+       if count == 0:
+               mainlist.append("main")
+       else:
+               mainlist.append("main" + str(count))
+
+for main in mainlist:
+       file.write("""
+def %s(session, **kwargs):
+       pass
+""" % main)
+
+descriptorlist = []
+for count in range(len(targetlist)):
+       os.system("clear")
+       where = targetlist[count]
+       print "Options for target %s" % where[0]
+       descriptorlist.append(where[1](name, mainlist[count]))
+       
+if len(descriptorlist) == 1:
+       descriptorlist = descriptorlist[0]
+else:
+       descriptorlist = "[" + ', '.join(descriptorlist) + "]"
+
+file.write("""
+def Plugins(**kwargs):
+       return %s
+       """ % descriptorlist)
+
+file.close()
+
+makefile = open(pluginpath + "/Makefile.am", "w")
+makefile.write("""installdir = $(LIBDIR)/enigma2/python/Plugins/%s/%s
+
+install_PYTHON = \\
+       __init__.py \\
+       plugin.py
+""" % (category, internalname))
+makefile.close()
index b203b24e7577c90e041bf49d46d39258d0c599c4..ebfbe812fb5e132b04762a0099fc15ed022835d0 100644 (file)
@@ -76,7 +76,7 @@ def append_when_current_valid(current, menu, args, level = 0):
 class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
                Screen.__init__(self, session)
-               #raise "we need a better summary screen here"
+               #raise Exception("we need a better summary screen here")
                self.csel = csel
                self.bsel = None
 
index b57f2400a5c21013928dad42715d7a1f2a9c5556..c6b156cfb7893fc7de31f9e357100ce98e4baddd 100644 (file)
@@ -55,6 +55,7 @@ class Console(Screen):
                        str = self["text"].getText()
                        str += _("Execution finished!!");
                        self["text"].setText(str)
+                       self["text"].lastPage()
                        if self.finishedCallback is not None:
                                self.finishedCallback()
                        if not retval and self.closeOnSuccess:
@@ -67,4 +68,4 @@ class Console(Screen):
                        self.container.dataAvail.remove(self.dataAvail)
 
        def dataAvail(self, str):
-               self["text"].setText(self["text"].getText() + str)
+               self["text"].setText(self["text"].getText() + str)
\ No newline at end of file
index 6740bfb6d6ea0da297f3834d5556708e9149c18a..e7388fc296812aef5d1b21b9c585085a5730a66b 100644 (file)
@@ -5,11 +5,13 @@ from Components.Pixmap import Pixmap
 from Components.Label import Label
 from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI
 from Components.ActionMap import ActionMap
+from Components.TimerSanityCheck import TimerSanityCheck
 from Screens.TimerEdit import TimerSanityConflict
 from Screens.EventView import EventViewSimple
+from Screens.MessageBox import MessageBox
 from TimeDateInput import TimeDateInput
 from enigma import eServiceReference
-from RecordTimer import RecordTimerEntry, parseEvent
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
 from time import localtime, time
@@ -17,6 +19,12 @@ from time import localtime, time
 mepg_config_initialized = False
 
 class EPGSelection(Screen):
+       EMPTY = 0
+       ADD_TIMER = 1
+       REMOVE_TIMER = 2
+       
+       ZAP = 1
+
        def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None):
                Screen.__init__(self, session)
                self.bouquetChangeCB = bouquetChangeCB
@@ -58,6 +66,8 @@ class EPGSelection(Screen):
                        self.zapFunc = zapFunc
 
                self["key_green"] = Button(_("Add timer"))
+               self.key_green_choice = self.ADD_TIMER
+               self.key_red_choice = self.EMPTY
                self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer)
 
                self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"],
@@ -125,6 +135,7 @@ class EPGSelection(Screen):
                l.recalcEntrySize()
                if self.type == EPG_TYPE_MULTI:
                        l.fillMultiEPG(self.services, self.ask_time)
+                       l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
                elif self.type == EPG_TYPE_SINGLE:
                        l.fillSingleEPG(self.currentService)
                else:
@@ -145,7 +156,7 @@ class EPGSelection(Screen):
                        setEvent(cur[0])
 
        def zapTo(self): # just used in multiepg
-               if self.zapFunc and self["key_red"].getText() == "Zap":
+               if self.zapFunc and self.key_red_choice == self.ZAP:
                        lst = self["list"]
                        count = lst.getCurrentChangeCount()
                        if count == 0:
@@ -179,14 +190,28 @@ class EPGSelection(Screen):
                if self.type == EPG_TYPE_MULTI:
                        self["list"].updateMultiEPG(1)
 
+       def removeTimer(self, timer):
+               timer.afterEvent = AFTEREVENT.NONE
+               self.session.nav.RecordTimer.removeEntry(timer)
+               self["key_green"].setText(_("Add timer"))
+               self.key_green_choice = self.ADD_TIMER
+
        def timerAdd(self):
                cur = self["list"].getCurrent()
                event = cur[0]
                serviceref = cur[1]
                if event is None:
                        return
-               newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
-               self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               cb_func = lambda ret : not ret or self.removeTimer(timer)
+                               self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+                               break
+               else:
+                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
+                       self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
                print "finished add"
@@ -194,14 +219,18 @@ class EPGSelection(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
                else:
-                       print "Timeredit aborted"               
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+                       print "Timeredit aborted"
        
        def finishSanityCorrection(self, answer):
                self.finishedAdd(answer)
@@ -211,7 +240,7 @@ class EPGSelection(Screen):
 
        def moveDown(self):
                self["list"].moveDown()
-
+       
        def applyButtonState(self, state):
                if state == 0:
                        self["now_button"].hide()
@@ -226,13 +255,11 @@ class EPGSelection(Screen):
                        self["key_red"].setText("")
                else:
                        if state == 1:
-                               self["key_red"].setText("Zap")
                                self["now_button_sel"].show()
                                self["now_button"].hide()
                        else:
                                self["now_button"].show()
                                self["now_button_sel"].hide()
-                               self["key_red"].setText("")
 
                        if state == 2:
                                self["next_button_sel"].show()
@@ -249,6 +276,16 @@ class EPGSelection(Screen):
                                self["more_button_sel"].hide()
 
        def onSelectionChanged(self):
+               cur = self["list"].getCurrent()
+               if cur is None:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
+                               self["key_red"].setText("")
+                               self.key_red_choice = self.EMPTY
+                       return
+               event = cur[0]
                if self.type == EPG_TYPE_MULTI:
                        count = self["list"].getCurrentChangeCount()
                        if self.ask_time != -1:
@@ -260,8 +297,7 @@ class EPGSelection(Screen):
                        else:
                                self.applyButtonState(1)
                        days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
-                       datastr = ""
-                       event = self["list"].getCurrent()[0]
+                       datestr = ""
                        if event is not None:
                                now = time()
                                beg = event.getBeginTime()
@@ -272,3 +308,36 @@ class EPGSelection(Screen):
                                else:
                                        datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1])
                        self["date"].setText(datestr)
+
+               if cur[1] is None  or cur[1].getServiceName() == "":
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
+                               self["key_red"].setText("")
+                               self.key_red_choice = self.EMPTY
+                       return
+               elif self.key_red_choice != self.ZAP and  self.type == EPG_TYPE_MULTI:
+                               self["key_red"].setText("Zap")
+                               self.key_red_choice = self.ZAP
+
+               if event is None:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       return
+
+               serviceref = cur[1]
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               isRecordEvent = False
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               isRecordEvent = True
+                               break
+               if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
+               elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
index 5d50d9bcb5aa60d85978bfe821edb32a8f3a5c11..6aed1e113d88b3fbbe8b2984b8ed662b1429705c 100644 (file)
@@ -1,17 +1,21 @@
 from Screen import Screen
 from Screens.TimerEdit import TimerSanityConflict
+from Screens.MessageBox import MessageBox
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
 from Components.TimerList import TimerList
 from enigma import eEPGCache, eTimer, eServiceReference
-from RecordTimer import RecordTimerEntry, parseEvent
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from TimerEntry import TimerEntry
 from time import localtime
 from Components.config import config
 
 class EventViewBase:
+       ADD_TIMER = 0
+       REMOVE_TIMER = 1
+       
        def __init__(self, Event, Ref, callback=None, similarEPGCB=None):
                self.similarEPGCB = similarEPGCB
                self.cbFunc = callback
@@ -28,6 +32,7 @@ class EventViewBase:
                        self.SimilarBroadcastTimer.callback.append(self.getSimilarEvents)
                else:
                        self.SimilarBroadcastTimer = None
+               self.key_green_choice = self.ADD_TIMER
                if self.isRecording:
                        self["key_green"] = Button("")
                else:
@@ -59,8 +64,25 @@ class EventViewBase:
                if self.cbFunc is not None:
                        self.cbFunc(self.setEvent, self.setService, +1)
 
+       def removeTimer(self, timer):
+               timer.afterEvent = AFTEREVENT.NONE
+               self.session.nav.RecordTimer.removeEntry(timer)
+               self["key_green"].setText(_("Add timer"))
+               self.key_green_choice = self.ADD_TIMER
+       
        def timerAdd(self):
-               if not self.isRecording:
+               event = self.event
+               serviceref = self.currentService
+               if event is None:
+                       return
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               cb_func = lambda ret : not ret or self.removeTimer(timer)
+                               self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+                               break
+               else:
                        newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event))
                        self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
@@ -70,13 +92,17 @@ class EventViewBase:
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
                else:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
                        print "Timeredit aborted"               
 
        def finishSanityCorrection(self, answer):
@@ -123,6 +149,22 @@ class EventViewBase:
                if self.SimilarBroadcastTimer is not None:
                        self.SimilarBroadcastTimer.start(400,True)
 
+               serviceref = self.currentService
+               eventid = self.event.getEventId()
+               refstr = serviceref.ref.toString()
+               isRecordEvent = False
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               isRecordEvent = True
+                               break
+               if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
+               elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+
+
        def pageUp(self):
                self["epg_description"].pageUp()
 
index 409018de272ca6ec718577d7fbe9dcf497727145..89a6b8e3e82879980bce0fff05710a3ddca0a993 100644 (file)
@@ -29,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
-from Tools.Directories import SCOPE_HDD, resolveFilename, pathExists
+from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists
 
 from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
        iPlayableService, eServiceReference, eEPGCache
@@ -348,14 +348,14 @@ class InfoBarMenu:
 
        def mainMenu(self):
                print "loading mainmenu XML..."
-               menu = mdom.childNodes[0]
-               assert menu.tagName == "menu", "root element in menu must be 'menu'!"
+               menu = mdom.getroot()
+               assert menu.tag == "menu", "root element in menu must be 'menu'!"
 
                self.session.infobar = self
                # so we can access the currently active infobar from screens opened from within the mainmenu
                # at the moment used from the SubserviceSelection
 
-               self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu, menu.childNodes)
+               self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu)
 
        def mainMenuClosed(self, *val):
                self.session.infobar = None
@@ -403,7 +403,7 @@ class InfoBarEPG:
                self.eventView = None
                self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
                        {
-                               "showEventView": (self.openEventView, _("show EPG...")),
+                               "showEventInfo": (self.openEventView, _("show EPG...")),
                                "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")),
                                "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
                        })
@@ -1033,7 +1033,13 @@ class InfoBarPVRState:
        def __playStateChanged(self, state):
                playstateString = state[3]
                self.pvrStateDialog["state"].setText(playstateString)
-               self._mayShow()
+               
+               # if we return into "PLAY" state, ensure that the dialog gets hidden if there will be no infobar displayed
+               if not config.usage.show_infobar_on_skip.value and self.seekstate == self.SEEK_STATE_PLAY:
+                       self.pvrStateDialog.hide()
+               else:
+                       self._mayShow()
+                       
 
 class InfoBarTimeshiftState(InfoBarPVRState):
        def __init__(self):
@@ -1321,7 +1327,6 @@ class InfoBarJobman:
                self.session.openWithCallback(self.JobViewCB, JobView, job)
        
        def JobViewCB(self, in_background):
-               from Screens.TaskView import JobView
                job_manager.in_background = in_background
 
 # depends on InfoBarExtensions
@@ -1437,8 +1442,8 @@ class InfoBarInstantRecord:
                except:
                        pass
 
-               begin = time()
-               end = time() + 3600 * 24 * 365 * 1 # 1 year
+               begin = int(time())
+               end = begin + 3600      # dummy
                name = "instant record"
                description = ""
                eventid = None
@@ -1459,19 +1464,28 @@ class InfoBarInstantRecord:
 
                recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
                recording.dontSave = True
-               recording.autoincrease = True
-
-               simulTimerList = self.session.nav.RecordTimer.record(recording)
-               if simulTimerList is not None:
-                       print "timer conflict detected!"
-                       if (len(simulTimerList) > 1):
-                               print "tsc_list > 1"
-                               recording.end = simulTimerList[1].begin - 30
+               
+               if event is None or limitEvent == False:
+                       recording.autoincrease = True
+                       if recording.setAutoincreaseEnd():
                                self.session.nav.RecordTimer.record(recording)
-                               print "new endtime applied"
-                       else:
-                               print "conflict with only one timer? ! ?"
-               self.recording.append(recording)
+                               self.recording.append(recording)
+               else:
+                               simulTimerList = self.session.nav.RecordTimer.record(recording)
+                               if simulTimerList is not None:  # conflict with other recording
+                                       name = simulTimerList[1].name
+                                       name_date = name + strftime(" %c", localtime(simulTimerList[1].begin))
+                                       print "[TIMER] conflicts with", name_date
+                                       recording.autoincrease = True   # start with max available length, then increment
+                                       if recording.setAutoincreaseEnd():
+                                               self.session.nav.RecordTimer.record(recording)
+                                               self.recording.append(recording)
+                                               self.session.open(MessageBox, _("Record time limited due to conflicting timer %s") % name_date, MessageBox.TYPE_INFO)
+                                       else:
+                                               self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s") % name, MessageBox.TYPE_INFO)
+                                       recording.autoincrease = False
+                               else:
+                                       self.recording.append(recording)
 
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
@@ -1544,12 +1558,12 @@ class InfoBarInstantRecord:
                        print "stopping recording after", int(value), "minutes."
                        if int(value) != 0:
                                self.recording[self.selectedEntry].autoincrease = False
-                       self.recording[self.selectedEntry].end = time() + 60 * int(value)
+                       self.recording[self.selectedEntry].end = int(time()) + 60 * int(value)
                        self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
 
        def instantRecord(self):
                dir = config.movielist.last_videodir.value
-               if not pathExists(dir):
+               if not fileExists(dir, 'w'):
                        dir = resolveFilename(SCOPE_HDD)
                try:
                        stat = os_stat(dir)
@@ -1561,21 +1575,21 @@ class InfoBarInstantRecord:
                if self.isInstantRecordRunning():
                        self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \
                                title=_("A recording is currently running.\nWhat do you want to do?"), \
-                               list=[(_("stop recording"), "stop"), \
-                               (_("change recording (duration)"), "changeduration"), \
-                               (_("change recording (endtime)"), "changeendtime"), \
-                               (_("add recording (indefinitely)"), "indefinitely"), \
-                               (_("add recording (stop after current event)"), "event"), \
+                               list=[(_("add recording (stop after current event)"), "event"), \
                                (_("add recording (enter recording duration)"), "manualduration"), \
                                (_("add recording (enter recording endtime)"), "manualendtime"), \
+                               (_("add recording (indefinitely)"), "indefinitely"), \
+                               (_("change recording (duration)"), "changeduration"), \
+                               (_("change recording (endtime)"), "changeendtime"), \
+                               (_("stop recording"), "stop"), \
                                (_("do nothing"), "no")])
                else:
                        self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \
                                title=_("Start recording?"), \
-                               list=[(_("add recording (indefinitely)"), "indefinitely"), \
-                               (_("add recording (stop after current event)"), "event"), \
+                               list=[(_("add recording (stop after current event)"), "event"), \
                                (_("add recording (enter recording duration)"), "manualduration"), \
                                (_("add recording (enter recording endtime)"), "manualendtime"), \
+                               (_("add recording (indefinitely)"), "indefinitely"), \
                                (_("don't record"), "no")])
 
 from Tools.ISO639 import LanguageCodes
index a3cf70bb74133e134344e690aa44f05e948226cb..cde2d6c3e14c34a27e3e9c1d4b0e99f269d0b925 100755 (executable)
@@ -13,5 +13,6 @@ install_PYTHON = \
        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
+       SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \
+       TextBox.py
 
index 92039b429fa4679d860137f8760dbbde14cc2bf8..93f23dfb620e91b1484e7e6bac9c32a47625fb5c 100644 (file)
@@ -9,12 +9,10 @@ from Components.SystemInfo import SystemInfo
 
 from Tools.Directories import resolveFilename, SCOPE_SKIN
 
-import xml.dom.minidom
+import xml.etree.cElementTree
 
 from Screens.Setup import Setup, getSetupTitle
 
-from Tools import XMLTools
-
 #              <item text="TV-Mode">self.setModeTV()</item>
 #              <item text="Radio-Mode">self.setModeRadio()</item>
 #              <item text="File-Mode">self.setModeFile()</item>
@@ -22,9 +20,7 @@ from Tools import XMLTools
 
 
 # read the menu
-menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r')
-mdom = xml.dom.minidom.parseString(menufile.read())
-menufile.close()
+mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml'))
 
 class boundFunction:
        def __init__(self, fnc, *args):
@@ -103,17 +99,17 @@ class Menu(Screen):
                self.session.openWithCallback(self.menuClosed, Setup, dialog)
 
        def addMenu(self, destList, node):
-               requires = node.getAttribute("requires")
+               requires = node.get("requires")
                if requires and not SystemInfo.get(requires, False):
                        return
-               MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??")
-               entryID = node.getAttribute("entryID") or "undefined"
-               weight = node.getAttribute("weight") or 50
-               x = node.getAttribute("flushConfigOnClose")
+               MenuTitle = _(node.get("text", "??").encode("UTF-8"))
+               entryID = node.get("entryID", "undefined")
+               weight = node.get("weight", 50)
+               x = node.get("flushConfigOnClose")
                if x:
-                       a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes)
+                       a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node)
                else:
-                       a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes)
+                       a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node)
                #TODO add check if !empty(node.childNodes)
                destList.append((MenuTitle, a, entryID, weight))
 
@@ -126,18 +122,16 @@ class Menu(Screen):
                        self.close(True)
 
        def addItem(self, destList, node):
-               requires = node.getAttribute("requires")
+               requires = node.get("requires")
                if requires and not SystemInfo.get(requires, False):
                        return
-               item_text = node.getAttribute("text").encode("UTF-8")
-               entryID = node.getAttribute("entryID") or "undefined"
-               weight = node.getAttribute("weight") or 50
-               for x in node.childNodes:
-                       if x.nodeType != xml.dom.minidom.Element.nodeType:
-                               continue
-                       elif x.tagName == 'screen':
-                               module = x.getAttribute("module") or None
-                               screen = x.getAttribute("screen") or None
+               item_text = node.get("text", "").encode("UTF-8")
+               entryID = node.get("entryID", "undefined")
+               weight = node.get("weight", 50)
+               for x in node:
+                       if x.tag == 'screen':
+                               module = x.get("module")
+                               screen = x.get("screen")
 
                                if screen is None:
                                        screen = module
@@ -150,16 +144,16 @@ class Menu(Screen):
 
                                # check for arguments. they will be appended to the
                                # openDialog call
-                               args = XMLTools.mergeText(x.childNodes)
+                               args = x.text or ""
                                screen += ", " + args
 
                                destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight))
                                return
-                       elif x.tagName == 'code':
-                               destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes)), entryID, weight))
+                       elif x.tag == 'code':
+                               destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight))
                                return
-                       elif x.tagName == 'setup':
-                               id = x.getAttribute("id")
+                       elif x.tag == 'setup':
+                               id = x.get("id")
                                if item_text == "":
                                        item_text = _(getSetupTitle(id)) + "..."
                                else:
@@ -169,26 +163,23 @@ class Menu(Screen):
                destList.append((item_text, self.nothing, entryID, weight))
 
 
-       def __init__(self, session, parent, childNode):
+       def __init__(self, session, parent):
                Screen.__init__(self, session)
                
                list = []
                
                menuID = None
-               for x in childNode:                                             #walk through the actual nodelist
-                       if x.nodeType != xml.dom.minidom.Element.nodeType:
-                           continue
-                       elif x.tagName == 'item':
-                               item_level = int(x.getAttribute("level") or "0")
-                               
+               for x in parent:                                                #walk through the actual nodelist
+                       if x.tag == 'item':
+                               item_level = int(x.get("level", 0))
                                if item_level <= config.usage.setup_level.index:
                                        self.addItem(list, x)
                                        count += 1
-                       elif x.tagName == 'menu':
+                       elif x.tag == 'menu':
                                self.addMenu(list, x)
                                count += 1
-                       elif x.tagName == "id":
-                               menuID = x.getAttribute("val")
+                       elif x.tag == "id":
+                               menuID = x.get("val")
                                count = 0
 
                        if menuID is not None:
@@ -237,10 +228,10 @@ class Menu(Screen):
                                "9": self.keyNumberGlobal
                        })
 
-               a = parent.getAttribute("title").encode("UTF-8") or None
+               a = parent.get("title", "").encode("UTF-8") or None
                a = a and _(a)
                if a is None:
-                       a = _(parent.getAttribute("text").encode("UTF-8"))
+                       a = _(parent.get("text", "").encode("UTF-8"))
                self["title"] = StaticText(a)
                self.menu_title = a
 
index 6489f28fe2ba5125a0bbd522ee34d726e42fb001..da6fcc123ea63726cdff2368d7a7706e1098aa5a 100644 (file)
@@ -87,6 +87,10 @@ class NimSetup(Screen, ConfigListScreen):
                self.uncommittedDiseqcCommand = None
                self.cableScanType = None
                self.have_advanced = False
+               self.advancedUnicable = None
+               self.advancedType = None
+               self.advancedManufacturer = None
+               self.advancedSCR = None
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
@@ -190,6 +194,7 @@ class NimSetup(Screen, ConfigListScreen):
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
+                       self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \
                        self.uncommittedDiseqcCommand, self.cableScanType)
                for x in checkList:
                        if self["config"].getCurrent() == x:
@@ -216,19 +221,57 @@ class NimSetup(Screen, ConfigListScreen):
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
 
-               self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
-               self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
-               if currLnb and currLnb.diseqcMode.value == "1_2":
-                       if lnbnum < 33:
-                               self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
-                               self.list.append(self.advancedUsalsEntry)
-                               if not Sat.usals.value:
-                                       self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
-
                # LNBs
                self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb)
                self.list.append(self.advancedLnbsEntry)
+
                if currLnb:
+                       self.list.append(getConfigListEntry(_("Priority"), currLnb.prio))
+                       self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
+                       self.list.append(self.advancedLof)
+                       if currLnb.lof.value == "user_defined":
+                               self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
+                               self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
+                               self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
+#                      self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
+                       
+                       if currLnb.lof.value == "unicable":
+                               self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
+                               self.list.append(self.advancedUnicable)
+                               if currLnb.unicable.value == "unicable_user":
+                                       self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser)
+                                       self.list.append(self.advancedSCR)
+                                       self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index]))
+                                       self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
+                                       self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
+                                       self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
+                               elif currLnb.unicable.value == "unicable_matrix":
+                                       manufacturer_name = currLnb.unicableMatrixManufacturer.value
+                                       manufacturer = currLnb.unicableMatrix[manufacturer_name]
+                                       product_name = manufacturer.product.value
+                                       self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
+                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                       self.list.append(self.advancedManufacturer)
+                                       self.list.append(self.advancedType)
+                                       self.list.append(self.advancedSCR)
+                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                               elif currLnb.unicable.value == "unicable_lnb":
+                                       manufacturer_name = currLnb.unicableLnbManufacturer.value
+                                       manufacturer = currLnb.unicableLnb[manufacturer_name]
+                                       product_name = manufacturer.product.value
+                                       self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
+                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                       self.list.append(self.advancedManufacturer)
+                                       self.list.append(self.advancedType)
+                                       self.list.append(self.advancedSCR)
+                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                       else:   #kein Unicable
+                               self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
+                               self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
+                               self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
+
                        if lnbnum < 33:
                                self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
                                self.list.append(self.advancedDiseqcMode)
@@ -275,14 +318,12 @@ class NimSetup(Screen, ConfigListScreen):
                                                if currLnb.powerMeasurement.value:
                                                        currLnb.powerMeasurement.value = False
                                                        currLnb.powerMeasurement.save()
-                       self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
-                       self.list.append(self.advancedLof)
-                       if currLnb.lof.value == "user_defined":
-                               self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
-                               self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
-                               self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
-#                      self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
-                       self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
+                                       self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
+                                       self.list.append(self.advancedUsalsEntry)
+                                       if not Sat.usals.value:
+                                               self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
+
+       
 
        def fillAdvancedList(self):
                self.list = [ ]
@@ -383,18 +424,26 @@ class NimSelection(Screen):
                self.list = [None] * nimmanager.getSlotCount()
                self["nimlist"] = List(self.list)
                self.updateList()
+               
+               self.setResultClass()
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
                        "ok": self.okbuttonClick ,
                        "cancel": self.close
                }, -2)
+               
+       def setResultClass(self):
+               self.resultclass = NimSetup
 
        def okbuttonClick(self):
                nim = self["nimlist"].getCurrent()
                nim = nim and nim[3]
                if nim is not None and not nim.empty:
-                       self.session.openWithCallback(self.updateList, NimSetup, nim.slot)
+                       self.session.openWithCallback(self.updateList, self.resultclass, nim.slot)
+                       
+       def showNim(self, nim):
+               return True
 
        def updateList(self):
                self.list = [ ]
@@ -402,42 +451,44 @@ class NimSelection(Screen):
                        slotid = x.slot
                        nimConfig = nimmanager.getNimConfig(x.slot)
                        text = nimConfig.configMode.value
-                       if x.isCompatible("DVB-S"):
-                               if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]:
-                                       text = { "loopthrough": _("loopthrough to"),
-                                                        "equal": _("equal to"),
-                                                        "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
-                                       text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
-                               elif nimConfig.configMode.value == "nothing":
-                                       text = _("nothing connected")
-                               elif nimConfig.configMode.value == "simple":
-                                       if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
-                                               text = _("Sats") + ": " 
-                                               if nimConfig.diseqcA.orbital_position != 3601:
-                                                       text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
-                                               if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
-                                                       if nimConfig.diseqcB.orbital_position != 3601:
-                                                               text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
-                                               if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
-                                                       if nimConfig.diseqcC.orbital_position != 3601:
-                                                               text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
-                                                       if nimConfig.diseqcD.orbital_position != 3601:
-                                                               text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
-                                       elif nimConfig.diseqcMode.value == "positioner":
-                                               text = _("Positioner") + ":"
-                                               if nimConfig.positionerMode.value == "usals":
-                                                       text += _("USALS")
-                                               elif nimConfig.positionerMode.value == "manual":
-                                                       text += _("manual")
-                                       else:   
-                                               text = _("simple")
-                               elif nimConfig.configMode.value == "advanced":
-                                       text = _("advanced")
-                       elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
-                               if nimConfig.configMode.value == "nothing":
-                                       text = _("nothing connected")
-                               elif nimConfig.configMode.value == "enabled":
-                                       text = _("enabled")
-                               
-                       self.list.append((slotid, x.friendly_full_description, text, x))
+                       if self.showNim(x):
+                               if x.isCompatible("DVB-S"):
+                                       if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]:
+                                               text = { "loopthrough": _("loopthrough to"),
+                                                                "equal": _("equal to"),
+                                                                "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
+                                               text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
+                                       elif nimConfig.configMode.value == "nothing":
+                                               text = _("nothing connected")
+                                       elif nimConfig.configMode.value == "simple":
+                                               if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                                                       text = _("Sats") + ": " 
+                                                       if nimConfig.diseqcA.orbital_position != 3601:
+                                                               text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
+                                                       if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                                                               if nimConfig.diseqcB.orbital_position != 3601:
+                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
+                                                       if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
+                                                               if nimConfig.diseqcC.orbital_position != 3601:
+                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
+                                                               if nimConfig.diseqcD.orbital_position != 3601:
+                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
+                                               elif nimConfig.diseqcMode.value == "positioner":
+                                                       text = _("Positioner") + ":"
+                                                       if nimConfig.positionerMode.value == "usals":
+                                                               text += _("USALS")
+                                                       elif nimConfig.positionerMode.value == "manual":
+                                                               text += _("manual")
+                                               else:   
+                                                       text = _("simple")
+                                       elif nimConfig.configMode.value == "advanced":
+                                               text = _("advanced")
+                               elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
+                                       if nimConfig.configMode.value == "nothing":
+                                               text = _("nothing connected")
+                                       elif nimConfig.configMode.value == "enabled":
+                                               text = _("enabled")
+                                       
+                               self.list.append((slotid, x.friendly_full_description, text, x))
+               self["nimlist"].setList(self.list)
                self["nimlist"].updateList(self.list)
\ No newline at end of file
index 608dcb2d2d0e1cb237102007bf695ef7c34da03c..7089074ad0026cf42f379630c8fce5fb1f9cc062 100644 (file)
@@ -17,64 +17,17 @@ def buildTerTransponder(frequency,
                inversion=2, bandwidth = 3, fechigh = 6, feclow = 6,
                modulation = 2, transmission = 2, guard = 4,
                hierarchy = 4):
-
 #      print "freq", frequency, "inv", inversion, "bw", bandwidth, "fech", fechigh, "fecl", feclow, "mod", modulation, "tm", transmission, "guard", guard, "hierarchy", hierarchy
-
-       # WARNING: normally, enums are working directly.
-       # Don't copy this (very bad)!! Instead either fix swig (good) or
-       # move this into a central place.
-       Bw8MHz = 0
-       Bw7MHz = 1
-       Bw6MHz = 2
-       #Bw5MHz = 3 #not implemented for e1 compatibilty
-       BwAuto = 3
-       
-       f1_2 = 0
-       f2_3 = 1
-       f3_4 = 2
-       f5_6 = 3
-       f7_8 = 4
-       fAuto = 5
-       
-       TM2k = 0
-       TM8k = 1
-       #TM4k = 2  #not implemented for e1 compatibilty
-       TMAuto = 2
-       
-       GI_1_32 = 0
-       GI_1_16 = 1
-       GI_1_8 = 2
-       GI_1_4 = 3
-       GI_Auto = 4
-       
-       HNone = 0
-       H1 = 1
-       H2 = 2
-       H4 = 3
-       HAuto = 4
-
-       QPSK = 0
-       QAM16 = 1
-       QAM64 = 2
-       Auto = 3
-       
-       Off = 0
-       On = 1
-       Unknown = 2
-
        parm = eDVBFrontendParametersTerrestrial()
-
        parm.frequency = frequency
-
-       parm.inversion = [Off, On, Unknown][inversion]
-       parm.bandwidth = [Bw8MHz, Bw7MHz, Bw6MHz, BwAuto][bandwidth] # Bw5MHz unsupported
-       parm.code_rate_HP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][fechigh]
-       parm.code_rate_LP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][feclow]
-       parm.modulation = [QPSK, QAM16, QAM64, Auto][modulation]
-       parm.transmission_mode = [TM2k, TM8k, TMAuto][transmission] # TM4k unsupported
-       parm.guard_interval = [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto][guard]
-       parm.hierarchy = [HNone, H1, H2, H4, HAuto][hierarchy]
-       
+       parm.inversion = inversion
+       parm.bandwidth = bandwidth
+       parm.code_rate_HP = fechigh
+       parm.code_rate_LP = feclow
+       parm.modulation = modulation
+       parm.transmission_mode = transmission
+       parm.guard_interval = guard
+       parm.hierarchy = hierarchy
        return parm
 
 def getInitialTransponderList(tlist, pos):
@@ -103,7 +56,7 @@ def getInitialCableTransponderList(tlist, nim):
                        parm.symbol_rate = x[2]
                        parm.modulation = x[3]
                        parm.fec_inner = x[4]
-                       parm.inversion = 2 # AUTO
+                       parm.inversion = parm.Inversion_Unknown
                        #print "frequency:", x[1]
                        #print "symbol_rate:", x[2]
                        #print "modulation:", x[3]
@@ -178,10 +131,22 @@ class CableTransponderSearchSupport:
                if len(data):
                        if data[0] == 'OK':
                                print str
-                               qam = { "QAM16" : 1, "QAM32" : 2, "QAM64" : 3, "QAM128" : 4, "QAM256" : 5 }
-                               inv = { "INVERSION_OFF" : 0, "INVERSION_ON" : 1 }
-                               fec = { "FEC_AUTO" : 0, "FEC_1_2" : 1, "FEC_2_3" : 2, "FEC_3_4" : 3, "FEC_5_6": 4, "FEC_7_8" : 5, "FEC_8_9" : 6, "FEC_NONE" : 15 }
                                parm = eDVBFrontendParametersCable()
+                               qam = { "QAM16" : parm.Modulation_QAM16,
+                                       "QAM32" : parm.Modulation_QAM32,
+                                       "QAM64" : parm.Modulation_QAM64,
+                                       "QAM128" : parm.Modulation_QAM128,
+                                       "QAM256" : parm.Modulation_QAM256 }
+                               inv = { "INVERSION_OFF" : parm.Inversion_Off,
+                                       "INVERSION_ON" : parm.Inversion_On }
+                               fec = { "FEC_AUTO" : parm.FEC_Auto,
+                                       "FEC_1_2" : parm.FEC_1_2,
+                                       "FEC_2_3" : parm.FEC_2_3,
+                                       "FEC_3_4" : parm.FEC_3_4,
+                                       "FEC_5_6": parm.FEC_5_6,
+                                       "FEC_7_8" : parm.FEC_7_8,
+                                       "FEC_8_9" : parm.FEC_8_9,
+                                       "FEC_NONE" : parm.FEC_None }
                                parm.frequency = int(data[1])
                                parm.symbol_rate = int(data[2])
                                parm.fec_inner = fec[data[3]]
@@ -381,15 +346,15 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                        self.list.append(self.systemEntry)
                                else:
                                        # downgrade to dvb-s, in case a -s2 config was active
-                                       self.scan_sat.system.value = "dvb-s"
+                                       self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                                self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan]))
                                self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                                self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
                                self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
                                self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
-                               if self.scan_sat.system.value == "dvb-s":
+                               if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
                                        self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
-                               elif self.scan_sat.system.value == "dvb-s2":
+                               elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
                                        self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
                                        self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
                                        self.list.append(self.modulationEntry)
@@ -447,7 +412,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                if cur == self.typeOfScanEntry or \
                        cur == self.tunerEntry or \
                        cur == self.systemEntry or \
-                       (self.modulationEntry and self.systemEntry[1].value == "dvb-s2" and cur == self.modulationEntry):
+                       (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry):
                        self.createSetup()
 
        def createConfig(self, frontendData):
@@ -481,34 +446,65 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                           #("Transmission Mode", frontendData["transmission_mode"], TYPE_TEXT),
                                           #("Guard Interval", frontendData["guard_interval"], TYPE_TEXT),
                                           #("Hierarchy Inform.", frontendData["hierarchy_information"], TYPE_TEXT),
-                       defaultSat = { "orbpos": 192, "system": "dvb-s", "frequency": 11836, "inversion": "auto", "symbolrate": 27500, "polarization": "horizontal", "fec": "auto", "fec_s2": "9_10", "modulation": "qpsk" }
-                       defaultCab = {"frequency": 466, "inversion": "auto", "modulation": "64qam", "fec": "auto", "symbolrate": 6900}
+                       defaultSat = {
+                               "orbpos": 192,
+                               "system": eDVBFrontendParametersSatellite.System_DVB_S,
+                               "frequency": 11836,
+                               "inversion": eDVBFrontendParametersSatellite.Inversion_Unknown,
+                               "symbolrate": 27500,
+                               "polarization": eDVBFrontendParametersSatellite.Polarisation_Horizontal,
+                               "fec": eDVBFrontendParametersSatellite.FEC_Auto,
+                               "fec_s2": eDVBFrontendParametersSatellite.FEC_9_10,
+                               "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK }
+                       defaultCab = {
+                               "frequency": 466,
+                               "inversion": eDVBFrontendParametersCable.Inversion_Unknown,
+                               "modulation": eDVBFrontendParametersCable.Modulation_QAM64,
+                               "fec": eDVBFrontendParametersCable.FEC_Auto,
+                               "symbolrate": 6900 }
+                       defaultTer = {
+                               "frequency" : 466000,
+                               "inversion" : eDVBFrontendParametersTerrestrial.Inversion_Unknown,
+                               "bandwidth" : eDVBFrontendParametersTerrestrial.Bandwidth_7MHz,
+                               "fechigh" : eDVBFrontendParametersTerrestrial.FEC_Auto,
+                               "feclow" : eDVBFrontendParametersTerrestrial.FEC_Auto,
+                               "modulation" : eDVBFrontendParametersTerrestrial.Modulation_Auto,
+                               "transmission_mode" : eDVBFrontendParametersTerrestrial.TransmissionMode_Auto,
+                               "guard_interval" : eDVBFrontendParametersTerrestrial.GuardInterval_Auto,
+                               "hierarchy": eDVBFrontendParametersTerrestrial.Hierarchy_Auto }
+
                        if frontendData is not None:
                                ttype = frontendData.get("tuner_type", "UNKNOWN")
                                if ttype == "DVB-S":
-                                       defaultSat["system"] = {"DVB-S": "dvb-s", "DVB-S2": "dvb-s2"}[frontendData.get("system", "DVB-S")]
-                                       defaultSat["frequency"] = int(frontendData.get("frequency", 0) / 1000)
-                                       defaultSat["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")]
-                                       defaultSat["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000)
-                                       defaultSat["polarization"] = {"HORIZONTAL": "horizontal", "VERTICAL": "vertical", "CIRCULAR_LEFT": "circular_left", "CIRCULAR_RIGHT": "circular_right", "UNKNOWN": None}[frontendData.get("polarization", "HORIZONTAL")]
-
-                                       if frontendData.get("system", "DVB-S") == "DVB-S2":
-                                               defaultSat["fec_s2"] = {"FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_4_5": "4_5", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_9_10": "9_10"} \
-                                                                                       [frontendData.get("fec_inner", "FEC_AUTO")]
-                                               defaultSat["rolloff"] = {"ROLLOFF_0_35" : "0_35", "ROLLOFF_0_25" : "0_25", "ROLLOFF_0_20" : "0_20"}[frontendData.get("rolloff", "ROLLOFF_0_35")]
-                                               defaultSat["pilot"] = {"PILOT_ON" : "on", "PILOT_OFF" : "off", "PILOT_AUTO" : "auto"}[frontendData.get("pilot", "PILOT_AUTO")]
+                                       defaultSat["system"] = frontendData.get("system", eDVBFrontendParametersSatellite.System_DVB_S)
+                                       defaultSat["frequency"] = frontendData.get("frequency", 0) / 1000
+                                       defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
+                                       defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
+                                       defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal)
+                                       if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2:
+                                               defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
+                                               defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
+                                               defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
                                        else:
-                                               defaultSat["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_NONE": "none"} \
-                                                       [frontendData.get("fec_inner", "FEC_AUTO")]
-
-                                       defaultSat["modulation"] = {"QPSK": "qpsk", "8PSK": "8psk"}[frontendData.get("modulation", "QPSK")]
+                                               defaultSat["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
+                                       defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
                                        defaultSat["orbpos"] = frontendData.get("orbital_position", 0)
                                elif ttype == "DVB-C":
-                                       defaultCab["frequency"] = int(frontendData.get("frequency", 0) / 1000)
-                                       defaultCab["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000)
-                                       defaultCab["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")]
-                                       defaultCab["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_NONE": "none"}[frontendData.get("fec_inner", "FEC_AUTO")]
-                                       defaultCab["modulation"] = {"QAM_AUTO": "auto", "QAM_16": "16qam", "QAM_32": "32qam", "QAM_64": "64qam", "QAM_128": "128qam", "QAM_256": "256qam"}[frontendData.get("modulation", "QAM_16")]
+                                       defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000
+                                       defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
+                                       defaultCab["inversion"] = frontendData.get("inversion", eDVBFrontendParametersCable.Inversion_Unknown)
+                                       defaultCab["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersCable.FEC_Auto)
+                                       defaultCab["modulation"] = frontendData.get("modulation", eDVBFrontendParametersCable.Modulation_QAM16)
+                               elif ttype == "DVB-T":
+                                       defaultTer["frequency"] = frontendData.get("frequency", 0)
+                                       defaultTer["inversion"] = frontendData.get("inversion", eDVBFrontendParametersTerrestrial.Inversion_Unknown)
+                                       defaultTer["bandwidth"] = frontendData.get("bandwidth", eDVBFrontendParametersTerrestrial.Bandwidth_7MHz)
+                                       defaultTer["fechigh"] = frontendData.get("code_rate_hp", eDVBFrontendParametersTerrestrial.FEC_Auto)
+                                       defaultTer["feclow"] = frontendData.get("code_rate_lp", eDVBFrontendParametersTerrestrial.FEC_Auto)
+                                       defaultTer["modulation"] = frontendData.get("constellation", eDVBFrontendParametersTerrestrial.Modulation_Auto)
+                                       defaultTer["transmission_mode"] = frontendData.get("transmission_mode", eDVBFrontendParametersTerrestrial.TransmissionMode_Auto)
+                                       defaultTer["guard_interval"] = frontendData.get("guard_interval", eDVBFrontendParametersTerrestrial.GuardInterval_Auto)
+                                       defaultTer["hierarchy"] = frontendData.get("hierarchy_information", eDVBFrontendParametersTerrestrial.Hierarchy_Auto)
 
                        self.scan_sat = ConfigSubsection()
                        self.scan_cab = ConfigSubsection()
@@ -524,7 +520,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        nim_list = []
                        # collect all nims which are *not* set to "nothing"
                        for n in nimmanager.nim_slots:
-                               if n.config_mode != "nothing":
+                               if not n.config_mode in ("loopthrough", "satposdepends", "nothing"):
                                        nim_list.append((str(n.slot), n.friendly_full_description))
 
                        self.scan_nims = ConfigSelection(choices = nim_list)
@@ -538,36 +534,120 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        self.scan_ber.enabled = False
 
                        # sat
-                       self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [("dvb-s", _("DVB-S")), ("dvb-s2", _("DVB-S2"))])
+                       self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [
+                               (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")),
+                               (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))])
                        self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999))
-                       self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+                       self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [
+                               (eDVBFrontendParametersSatellite.Inversion_Off, _("off")),
+                               (eDVBFrontendParametersSatellite.Inversion_On, _("on")),
+                               (eDVBFrontendParametersSatellite.Inversion_Unknown, _("Auto"))])
                        self.scan_sat.symbolrate = ConfigInteger(default = defaultSat["symbolrate"], limits = (1, 99999))
-                       self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [("horizontal", _("horizontal")), ("vertical", _("vertical")),  ("circular_left", _("circular left")), ("circular_right", _("circular right"))])
-                       self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("none", _("None"))])
-                       self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("3_5", "3/5"), ("4_5", "4/5"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("9_10", "9/10")])
-                       self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [("qpsk", "QPSK"), ("8psk", "8PSK")])
-                       self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", "0_35"), choices = [("0_35", "0.35"), ("0_25", "0.25"), ("0_20", "0.20")])
-                       self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", "auto"), choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+                       self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [
+                               (eDVBFrontendParametersSatellite.Polarisation_Horizontal, _("horizontal")),
+                               (eDVBFrontendParametersSatellite.Polarisation_Vertical, _("vertical")),
+                               (eDVBFrontendParametersSatellite.Polarisation_CircularLeft, _("circular left")),
+                               (eDVBFrontendParametersSatellite.Polarisation_CircularRight, _("circular right"))])
+                       self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [
+                               (eDVBFrontendParametersSatellite.FEC_Auto, _("Auto")),
+                               (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
+                               (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
+                               (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
+                               (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
+                               (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
+                               (eDVBFrontendParametersSatellite.FEC_None, _("None"))])
+                       self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [
+                               (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
+                               (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
+                               (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
+                               (eDVBFrontendParametersSatellite.FEC_3_5, "3/5"),
+                               (eDVBFrontendParametersSatellite.FEC_4_5, "4/5"),
+                               (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
+                               (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
+                               (eDVBFrontendParametersSatellite.FEC_8_9, "8/9"),
+                               (eDVBFrontendParametersSatellite.FEC_9_10, "9/10")])
+                       self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [
+                               (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"),
+                               (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK")])
+                       self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35), choices = [
+                               (eDVBFrontendParametersSatellite.RollOff_alpha_0_35, "0.35"),
+                               (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"),
+                               (eDVBFrontendParametersSatellite.RollOff_alpha_0_20, "0.20")])
+                       self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown), choices = [
+                               (eDVBFrontendParametersSatellite.Pilot_Off, _("off")),
+                               (eDVBFrontendParametersSatellite.Pilot_On, _("on")),
+                               (eDVBFrontendParametersSatellite.Pilot_Unknown, _("Auto"))])
 
                        # cable
                        self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999))
-                       self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
-                       self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [("16qam", "16-QAM"), ("32qam", "32-QAM"), ("64qam", "64-QAM"), ("128qam", "128-QAM"), ("256qam", "256-QAM")])
-                       self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("none", _("None"))])
+                       self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [
+                               (eDVBFrontendParametersCable.Inversion_Off, _("off")),
+                               (eDVBFrontendParametersCable.Inversion_On, _("on")),
+                               (eDVBFrontendParametersCable.Inversion_Unknown, _("Auto"))])
+                       self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [
+                               (eDVBFrontendParametersCable.Modulation_QAM16, "16-QAM"),
+                               (eDVBFrontendParametersCable.Modulation_QAM32, "32-QAM"),
+                               (eDVBFrontendParametersCable.Modulation_QAM64, "64-QAM"),
+                               (eDVBFrontendParametersCable.Modulation_QAM128, "128-QAM"),
+                               (eDVBFrontendParametersCable.Modulation_QAM256, "256-QAM")])
+                       self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [
+                               (eDVBFrontendParametersCable.FEC_Auto, _("Auto")),
+                               (eDVBFrontendParametersCable.FEC_1_2, "1/2"),
+                               (eDVBFrontendParametersCable.FEC_2_3, "2/3"),
+                               (eDVBFrontendParametersCable.FEC_3_4, "3/4"),
+                               (eDVBFrontendParametersCable.FEC_5_6, "5/6"),
+                               (eDVBFrontendParametersCable.FEC_7_8, "7/8"),
+                               (eDVBFrontendParametersCable.FEC_8_9, "8/9"),
+                               (eDVBFrontendParametersCable.FEC_None, _("None"))])
                        self.scan_cab.symbolrate = ConfigInteger(default = defaultCab["symbolrate"], limits = (1, 99999))
 
                        # terrestial
                        self.scan_ter.frequency = ConfigInteger(default = 466000, limits = (50000, 999000))
-                       self.scan_ter.inversion = ConfigSelection(default = "auto", choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+                       self.scan_ter.inversion = ConfigSelection(default = defaultTer["inversion"], choices = [
+                               (eDVBFrontendParametersTerrestrial.Inversion_Off, _("off")),
+                               (eDVBFrontendParametersTerrestrial.Inversion_On, _("on")),
+                               (eDVBFrontendParametersTerrestrial.Inversion_Unknown, _("Auto"))])
                        # WORKAROUND: we can't use BW-auto
-                       self.scan_ter.bandwidth = ConfigSelection(default = "8MHz", choices = [("8MHz", "8MHz"), ("7MHz", "7MHz"), ("6MHz", "6MHz")])
-                       #, ("auto", _("Auto"))))
-                       self.scan_ter.fechigh = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))])
-                       self.scan_ter.feclow = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))])
-                       self.scan_ter.modulation = ConfigSelection(default = "auto", choices = [("qpsk", "QPSK"), ("qam16", "QAM16"), ("qam64", "QAM64"), ("auto", _("Auto"))])
-                       self.scan_ter.transmission = ConfigSelection(default = "auto", choices = [("2k", "2K"), ("8k", "8K"), ("auto", _("Auto"))])
-                       self.scan_ter.guard = ConfigSelection(default = "auto", choices = [("1_32", "1/32"), ("1_16", "1/16"), ("1_8", "1/8"), ("1_4", "1/4"), ("auto", _("Auto"))])
-                       self.scan_ter.hierarchy = ConfigSelection(default = "auto", choices = [("none", _("None")), ("1", "1"), ("2", "2"), ("4", "4"), ("auto", _("Auto"))])
+                       self.scan_ter.bandwidth = ConfigSelection(default = defaultTer["bandwidth"], choices = [
+                               (eDVBFrontendParametersTerrestrial.Bandwidth_8MHz, "8MHz"),
+                               (eDVBFrontendParametersTerrestrial.Bandwidth_7MHz, "7MHz"),
+                               (eDVBFrontendParametersTerrestrial.Bandwidth_6MHz, "6MHz")])
+                       #, (eDVBFrontendParametersTerrestrial.Bandwidth_Auto, _("Auto"))))
+                       self.scan_ter.fechigh = ConfigSelection(default = defaultTer["fechigh"], choices = [
+                               (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
+                               (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
+                               (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
+                               (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
+                               (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
+                               (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
+                       self.scan_ter.feclow = ConfigSelection(default = defaultTer["feclow"], choices = [
+                               (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
+                               (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
+                               (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
+                               (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
+                               (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
+                               (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
+                       self.scan_ter.modulation = ConfigSelection(default = defaultTer["modulation"], choices = [
+                               (eDVBFrontendParametersTerrestrial.Modulation_QPSK, "QPSK"),
+                               (eDVBFrontendParametersTerrestrial.Modulation_QAM16, "QAM16"),
+                               (eDVBFrontendParametersTerrestrial.Modulation_QAM64, "QAM64"),
+                               (eDVBFrontendParametersTerrestrial.Modulation_Auto, _("Auto"))])
+                       self.scan_ter.transmission = ConfigSelection(default = defaultTer["transmission_mode"], choices = [
+                               (eDVBFrontendParametersTerrestrial.TransmissionMode_2k, "2K"),
+                               (eDVBFrontendParametersTerrestrial.TransmissionMode_8k, "8K"),
+                               (eDVBFrontendParametersTerrestrial.TransmissionMode_Auto, _("Auto"))])
+                       self.scan_ter.guard = ConfigSelection(default = defaultTer["guard_interval"], choices = [
+                               (eDVBFrontendParametersTerrestrial.GuardInterval_1_32, "1/32"),
+                               (eDVBFrontendParametersTerrestrial.GuardInterval_1_16, "1/16"),
+                               (eDVBFrontendParametersTerrestrial.GuardInterval_1_8, "1/8"),
+                               (eDVBFrontendParametersTerrestrial.GuardInterval_1_4, "1/4"),
+                               (eDVBFrontendParametersTerrestrial.GuardInterval_Auto, _("Auto"))])
+                       self.scan_ter.hierarchy = ConfigSelection(default = defaultTer["hierarchy"], choices = [
+                               (eDVBFrontendParametersTerrestrial.Hierarchy_None, _("None")),
+                               (eDVBFrontendParametersTerrestrial.Hierarchy_1, "1"),
+                               (eDVBFrontendParametersTerrestrial.Hierarchy_2, "2"),
+                               (eDVBFrontendParametersTerrestrial.Hierarchy_4, "4"),
+                               (eDVBFrontendParametersTerrestrial.Hierarchy_Auto, _("Auto"))])
 
                        self.scan_scansat = {}
                        for sat in nimmanager.satList:
@@ -577,7 +657,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        self.scan_satselection = []
                        for slot in nimmanager.nim_slots:
                                if slot.isCompatible("DVB-S"):
-                                       self.scan_satselection.append(getConfigSatlist(int(defaultSat["orbpos"]), self.satList[slot.slot]))
+                                       self.scan_satselection.append(getConfigSatlist(defaultSat["orbpos"], self.satList[slot.slot]))
                                else:
                                        self.scan_satselection.append(None)
 
@@ -594,36 +674,20 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
        def updateStatus(self):
                print "updatestatus"
 
-       fecmap = { "auto": 0,
-                          "1_2": 1,
-                          "2_3": 2,
-                          "3_4": 3,
-                          "5_6": 4,
-                          "7_8": 5,
-                          "8_9": 6,
-                          "3_5": 7,
-                          "4_5": 8,
-                          "9_10": 9,
-                          "none": 15
-                          }
-
        def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
-               print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(self.fecmap[fec]) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
+               print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(fec) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
                print "orbpos: " + str(orbital_position)
                parm = eDVBFrontendParametersSatellite()
-               if modulation == 1:
-                       parm.modulation = 2 # eDVBFrontendParametersSatellite.Modulation.8PSK
-               else:
-                       parm.modulation = 1 # eDVBFrontendParametersSatellite.Modulation.QPSK
+               parm.modulation = modulation
                parm.system = system
                parm.frequency = frequency * 1000
                parm.symbol_rate = symbol_rate * 1000
                parm.polarisation = polarisation
-               parm.fec = self.fecmap[fec]
+               parm.fec = fec
                parm.inversion = inversion
-               parm.orbital_position = int(orbital_position)
-               parm.rolloff = int(rolloff)
-               parm.pilot = int(pilot)
+               parm.orbital_position = orbital_position
+               parm.rolloff = rolloff
+               parm.pilot = pilot
                tlist.append(parm)
 
        def addCabTransponder(self, tlist, frequency, symbol_rate, modulation, fec, inversion):
@@ -632,7 +696,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                parm.frequency = frequency * 1000
                parm.symbol_rate = symbol_rate * 1000
                parm.modulation = modulation
-               parm.fec = self.fecmap[fec]
+               parm.fec = fec
                parm.inversion = inversion
                tlist.append(parm)
 
@@ -665,21 +729,21 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                                # however, the satList itself could be empty. in that case, "index" is 0 (for "None").
                                if len(nimsats):
                                        orbpos = nimsats[selsatidx][0]
-                                       if self.scan_sat.system.value == "dvb-s":
+                                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
                                                fec = self.scan_sat.fec.value
                                        else:
                                                fec = self.scan_sat.fec_s2.value
                                        print "add sat transponder"
                                        self.addSatTransponder(tlist, self.scan_sat.frequency.value,
                                                                self.scan_sat.symbolrate.value,
-                                                               self.scan_sat.polarization.index,
+                                                               self.scan_sat.polarization.value,
                                                                fec,
-                                                               self.scan_sat.inversion.index,
+                                                               self.scan_sat.inversion.value,
                                                                orbpos,
-                                                               self.scan_sat.system.index,
-                                                               self.scan_sat.modulation.index,
-                                                               self.scan_sat.rolloff.index,
-                                                               self.scan_sat.pilot.index)
+                                                               self.scan_sat.system.value,
+                                                               self.scan_sat.modulation.value,
+                                                               self.scan_sat.rolloff.value,
+                                                               self.scan_sat.pilot.value)
                                removeAll = False
                        elif self.scan_type.value == "single_satellite":
                                sat = self.satList[index_to_scan][self.scan_satselection[index_to_scan].index]
@@ -693,12 +757,11 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
 
                elif nim.isCompatible("DVB-C"):
                        if self.scan_typecable.value == "single_transponder":
-                               fec = self.scan_cab.fec.value
                                self.addCabTransponder(tlist, self.scan_cab.frequency.value,
                                                                                          self.scan_cab.symbolrate.value,
-                                                                                         self.scan_cab.modulation.index + 1,
-                                                                                         fec,
-                                                                                         self.scan_cab.inversion.index)
+                                                                                         self.scan_cab.modulation.value,
+                                                                                         self.scan_cab.fec.value,
+                                                                                         self.scan_cab.inversion.value)
                                removeAll = False
                        elif self.scan_typecable.value == "complete":
                                if config.Nims[index_to_scan].cable.scan_type.value == "provider":
@@ -710,14 +773,14 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                        if self.scan_typeterrestrial.value == "single_transponder":
                                self.addTerTransponder(tlist,
                                                self.scan_ter.frequency.value * 1000,
-                                               inversion = self.scan_ter.inversion.index,
-                                               bandwidth = self.scan_ter.bandwidth.index,
-                                               fechigh = self.scan_ter.fechigh.index,
-                                               feclow = self.scan_ter.feclow.index,
-                                               modulation = self.scan_ter.modulation.index,
-                                               transmission = self.scan_ter.transmission.index,
-                                               guard = self.scan_ter.guard.index,
-                                               hierarchy = self.scan_ter.hierarchy.index)
+                                               inversion = self.scan_ter.inversion.value,
+                                               bandwidth = self.scan_ter.bandwidth.value,
+                                               fechigh = self.scan_ter.fechigh.value,
+                                               feclow = self.scan_ter.feclow.value,
+                                               modulation = self.scan_ter.modulation.value,
+                                               transmission = self.scan_ter.transmission.value,
+                                               guard = self.scan_ter.guard.value,
+                                               hierarchy = self.scan_ter.hierarchy.value)
                                removeAll = False
                        elif self.scan_typeterrestrial.value == "complete":
                                getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(index_to_scan))
index 4606f883f4950175133a4eaa2340775f5ab7d47e..e07b32082d514bfab7f4cee03461f781b75499a6 100644 (file)
@@ -5,6 +5,7 @@ from Components.ActionMap import ActionMap
 from Components.Label import Label
 from ServiceReference import ServiceReference
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation, eServiceCenter
+from Tools.Transponder import ConvertToHumanReadable
 
 RT_HALIGN_LEFT = 0
 
@@ -131,27 +132,28 @@ class ServiceInfo(Screen):
                        self.fillList(Labels)
                else:
                        if self.transponder_info:
-                               conv = { "type"                         : _("Transponder Type"),
+                               tp_info = ConvertToHumanReadable(self.transponder_info)
+                               conv = { "tuner_type"           : _("Transponder Type"),
                                                 "system"                       : _("System"),
                                                 "modulation"           : _("Modulation"),
-                                                "orbital position" : _("Orbital Position"),
+                                                "orbital_position" : _("Orbital Position"),
                                                 "frequency"            : _("Frequency"),
-                                                "symbolrate"           : _("Symbolrate"),
+                                                "symbol_rate"          : _("Symbolrate"),
                                                 "bandwidth"            : _("Bandwidth"),
                                                 "polarization"         : _("Polarization"),
                                                 "inversion"            : _("Inversion"),
                                                 "pilot"                        : _("Pilot"),
-                                                "roll off"                     : _("Rolloff"),
-                                                "fec inner"            : _("FEC"),
-                                                "code rate lp"         : _("Coderate LP"),
-                                                "code rate hp"         : _("Coderate HP"),
+                                                "rolloff"                      : _("Rolloff"),
+                                                "fec_inner"            : _("FEC"),
+                                                "code_rate_lp"         : _("Coderate LP"),
+                                                "code_rate_hp"         : _("Coderate HP"),
                                                 "constellation"        : _("Constellation"),
-                                                "transmission mode": _("Transmission Mode"),
-                                                "guard interval"       : _("Guard Interval"),
-                                                "hierarchy"            : _("Hierarchy Information") }
+                                                "transmission_mode": _("Transmission Mode"),
+                                                "guard_interval"       : _("Guard Interval"),
+                                                "hierarchy_information": _("Hierarchy Information") }
                                Labels = [ ]
-                               for i in self.transponder_info.keys():
-                                       Labels.append( (conv[i], self.transponder_info[i], TYPE_TEXT) )
+                               for i in tp_info.keys():
+                                       Labels.append( (conv[i], tp_info[i], TYPE_VALUE_DEC) )
                                self.fillList(Labels)
 
        def pids(self):
@@ -180,9 +182,10 @@ class ServiceInfo(Screen):
                if self.type == TYPE_SERVICE_INFO:
                        self.showFrontendData(False)
 
-       def getFEData(self, frontendData):
-               if frontendData and len(frontendData):
-                       if frontendData["tuner_type"] == "DVB-S":
+       def getFEData(self, frontendDataOrg):
+               if frontendDataOrg and len(frontendDataOrg):
+                       frontendData = ConvertToHumanReadable(frontendDataOrg)
+                       if frontendDataOrg["tuner_type"] == "DVB-S":
                                return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
                                                        ("Type", frontendData["system"], TYPE_TEXT),
                                                        ("Modulation", frontendData["modulation"], TYPE_TEXT),
@@ -194,7 +197,7 @@ class ServiceInfo(Screen):
                                                        ("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
                                                        ("Pilot", frontendData.get("pilot", None), TYPE_TEXT),
                                                        ("Rolloff", frontendData.get("rolloff", None), TYPE_TEXT))
-                       elif frontendData["tuner_type"] == "DVB-C":
+                       elif frontendDataOrg["tuner_type"] == "DVB-C":
                                return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
                                                ("Type", frontendData["tuner_type"], TYPE_TEXT),
                                                ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
@@ -202,7 +205,7 @@ class ServiceInfo(Screen):
                                                ("Modulation", frontendData["modulation"], TYPE_TEXT),
                                                ("Inversion", frontendData["inversion"], TYPE_TEXT),
                                                ("FEC inner", frontendData["fec_inner"], TYPE_TEXT))
-                       elif frontendData["tuner_type"] == "DVB-T":
+                       elif frontendDataOrg["tuner_type"] == "DVB-T":
                                return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
                                                ("Type", frontendData["tuner_type"], TYPE_TEXT),
                                                ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
index 3ff0b76e3ed0f9d6f0361765aba8572ffefddca2..1d035b8a7f15a8d0209e84fdfeb14a420ae6c7ee 100644 (file)
@@ -6,8 +6,7 @@ from Components.ConfigList import ConfigListScreen
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 
-import xml.dom.minidom
-from Tools import XMLTools
+import xml.etree.cElementTree
 
 # FIXME: use resolveFile!
 # read the setupmenu
@@ -17,9 +16,16 @@ try:
 except:
        # if not found in the current path, we use the global datadir-path
        setupfile = file('/usr/share/enigma2/setup.xml', 'r')
-setupdom = xml.dom.minidom.parseString(setupfile.read())
+setupdom = xml.etree.cElementTree.parse(setupfile)
 setupfile.close()
 
+class SetupError(Exception):
+    def __init__(self, message):
+        self.message = message
+
+    def __str__(self):
+        return self.message
+
 class SetupSummary(Screen):
        skin = """
        <screen position="6,0" size="120,64">
@@ -63,16 +69,12 @@ class Setup(ConfigListScreen, Screen):
                self["config"].setList(list)
 
        def refill(self, list):
-               xmldata = setupdom.childNodes[0]
-               entries = xmldata.childNodes
-               for x in entries:             #walk through the actual nodelist
-                       if x.nodeType != xml.dom.minidom.Element.nodeType:
+               xmldata = setupdom.getroot()
+               for x in xmldata.findall("setup"):
+                       if x.get("key") != self.setup:
                                continue
-                       elif x.tagName == 'setup':
-                               if x.getAttribute("key") != self.setup:
-                                       continue
-                               self.addItems(list, x.childNodes);
-                               self.setup_title = x.getAttribute("title").encode("UTF-8")
+                       self.addItems(list, x);
+                       self.setup_title = x.get("title", "").encode("UTF-8")
 
        def __init__(self, session, setup):
                Screen.__init__(self, session)
@@ -118,12 +120,10 @@ class Setup(ConfigListScreen, Screen):
        def createSummary(self):
                return SetupSummary
 
-       def addItems(self, list, childNode):
-               for x in childNode:
-                       if x.nodeType != xml.dom.minidom.Element.nodeType:
-                               continue
-                       elif x.tagName == 'item':
-                               item_level = int(x.getAttribute("level") or "0")
+       def addItems(self, list, parentNode):
+               for x in parentNode:
+                       if x.tag == 'item':
+                               item_level = int(x.get("level", 0))
 
                                if not self.levelChanged in config.usage.setup_level.notifiers:
                                        config.usage.setup_level.notifiers.append(self.levelChanged)
@@ -132,12 +132,12 @@ class Setup(ConfigListScreen, Screen):
                                if item_level > config.usage.setup_level.index:
                                        continue
 
-                               requires = x.getAttribute("requires")
+                               requires = x.get("requires")
                                if requires and not SystemInfo.get(requires, False):
                                        continue;
 
-                               item_text = _(x.getAttribute("text").encode("UTF-8") or "??")
-                               b = eval(XMLTools.mergeText(x.childNodes));
+                               item_text = _(x.get("text", "??").encode("UTF-8"))
+                               b = eval(x.text or "");
                                if b == "":
                                        continue
                                #add to configlist
@@ -148,8 +148,8 @@ class Setup(ConfigListScreen, Screen):
                                        list.append( (item_text, item) )
 
 def getSetupTitle(id):
-       xmldata = setupdom.childNodes[0].childNodes
-       for x in XMLTools.elementsWithTag(xmldata, "setup"):
-               if x.getAttribute("key") == id:
-                       return x.getAttribute("title").encode("UTF-8")
-       raise "unknown setup id '%s'!" % repr(id)
+       xmldata = setupdom.getroot()
+       for x in xmldata.findall("setup"):
+               if x.get("key") == id:
+                       return x.get("title", "").encode("UTF-8")
+       raise SetupError("unknown setup id '%s'!" % repr(id))
index 4c3a17201a41f02fc774ca91f3c01214908250d5..d09f28afb95a19ae78c2f22f61196e5e36eaadef 100644 (file)
@@ -2,6 +2,7 @@ from Screen import Screen
 from Components.ActionMap import ActionMap
 from Components.config import config
 from Components.AVSwitch import AVSwitch
+from Components.SystemInfo import SystemInfo
 from enigma import eDVBVolumecontrol
 
 inStandby = None
@@ -49,7 +50,10 @@ class Standby(Screen):
                #stop actual played dvb-service
                self.session.nav.stopService()
                #set input to vcr scart
-               self.avswitch.setInput("SCART")
+               if SystemInfo["ScartSwitch"]:
+                       self.avswitch.setInput("SCART")
+               else:
+                       self.avswitch.setInput("AUX")
                #set lcd brightness to standby value
                config.lcd.standby.apply()
                self.onShow.append(self.__onShow)
diff --git a/lib/python/Screens/TextBox.py b/lib/python/Screens/TextBox.py
new file mode 100644 (file)
index 0000000..44b8a3c
--- /dev/null
@@ -0,0 +1,26 @@
+from Screens.Screen import Screen
+
+from Components.ActionMap import ActionMap
+from Components.Sources.StaticText import StaticText
+from Components.ScrollLabel import ScrollLabel
+
+class TextBox(Screen):
+       def __init__(self, session, text = ""):
+               Screen.__init__(self, session)
+               
+               self.text = text
+               self["text"] = ScrollLabel(self.text)
+               
+               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions"], 
+                               {
+                                       "cancel": self.cancel,
+                                       "ok": self.ok,
+                                       "up": self["text"].pageUp,
+                                       "down": self["text"].pageDown,
+                               }, -1)
+               
+       def ok(self):
+               self.close()
+       
+       def cancel(self):
+               self.close()
index aae345db2e69c0d50ce961f33515e712e1d556c8..bb2d3c763e2dfaac1bc08ea1f6b3057292eeaf87 100644 (file)
@@ -199,9 +199,11 @@ class TimerEditList(Screen):
                        self.updateState()
 
        def removeTimerQuestion(self):
-               if not self["timerlist"].getCurrent():
+               cur = self["timerlist"].getCurrent()
+               if not cur:
                        return
-               self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?"))
+
+               self.session.openWithCallback(self.removeTimer, MessageBox, _("Do you really want to delete %s?") % (cur.name))
 
        def removeTimer(self, result):
                if not result:
@@ -212,18 +214,6 @@ class TimerEditList(Screen):
                        timer = cur
                        timer.afterEvent = AFTEREVENT.NONE
                        self.session.nav.RecordTimer.removeEntry(timer)
-                       if not timer.dontSave:
-                               for timer in self.session.nav.RecordTimer.timer_list:
-                                       if timer.dontSave and timer.autoincrease:
-                                               timer.end = timer.begin + (3600 * 24 * 356 * 1)
-                                               self.session.nav.RecordTimer.timeChanged(timer)
-                                               timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list,timer)
-                                               if not timersanitycheck.check():
-                                                       tsc_list = timersanitycheck.getSimulTimerList()
-                                                       if len(tsc_list) > 1:
-                                                               timer.end = tsc_list[1].begin - 30
-                                                               self.session.nav.RecordTimer.timeChanged(timer)
-
                        self.refill()
                        self.updateState()
 
@@ -259,6 +249,7 @@ class TimerEditList(Screen):
                
        def addTimer(self, timer):
                self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
+                       
                
        def finishedEdit(self, answer):
                print "finished edit"
@@ -267,19 +258,25 @@ class TimerEditList(Screen):
                        print "Edited timer"
                        entry = answer[1]
                        timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, entry)
+                       success = False
                        if not timersanitycheck.check():
                                simulTimerList = timersanitycheck.getSimulTimerList()
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.timeChanged(entry)
-                               else:
-                                       print "Sanity check failed"
-                                       self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                               if simulTimerList is not None:
+                                       for x in simulTimerList:
+                                               if x.setAutoincreaseEnd(entry):
+                                                       self.session.nav.RecordTimer.timeChanged(x)
+                                       if not timersanitycheck.check():
+                                               simulTimerList = timersanitycheck.getSimulTimerList()
+                                               if simulTimerList is not None:
+                                                       self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                                       else:
+                                               success = True
                        else:
+                               succsess = True
+                       if success:
                                print "Sanity check passed"
-                               if not timersanitycheck.doubleCheck():
-                                       self.session.nav.RecordTimer.timeChanged(entry)
+                               self.session.nav.RecordTimer.timeChanged(entry)
+                       
                        self.fillTimerList()
                        self.updateState()
                else:
@@ -291,11 +288,11 @@ class TimerEditList(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self.fillTimerList()
                        self.updateState()
@@ -333,6 +330,8 @@ class TimerSanityConflict(Screen):
                                self.list.append((_("Conflicting timer") + " " + str(count), x))
                                self.list2.append((timer[count], False))
                        count += 1
+               if count == 1:
+                       self.list.append((_("Channel not in services list")))
 
                self["list"] = MenuList(self.list)
                self["timer2"] = TimerList(self.list2)
@@ -409,7 +408,7 @@ class TimerSanityConflict(Screen):
                                self["actions"].actions.update({"green":self.toggleTimer1})
                                self["key_green"].setText(_("Enable"))
                                self.key_green_choice = self.ENABLE
-                       elif self.timer[0].isRunning() and not timer[0].repeated and self.key_green_choice != self.EMPTY:
+                       elif self.timer[0].isRunning() and not self.timer[0].repeated and self.key_green_choice != self.EMPTY:
                                self.removeAction("green")
                                self["key_green"].setText(" ")
                                self.key_green_choice = self.EMPTY
@@ -429,7 +428,7 @@ class TimerSanityConflict(Screen):
                                        self["actions"].actions.update({"blue":self.toggleTimer2})
                                        self["key_blue"].setText(_("Enable"))
                                        self.key_blue_choice = self.ENABLE
-                               elif self.timer[x].isRunning() and not timer[x].repeated and self.key_blue_choice != self.EMPTY:
+                               elif self.timer[x].isRunning() and not self.timer[x].repeated and self.key_blue_choice != self.EMPTY:
                                        self.removeAction("blue")
                                        self["key_blue"].setText(" ")
                                        self.key_blue_choice = self.EMPTY
index 1774061d4db0304d1d8afba5090e592b0076fb0f..0544eff1ca5927185df1a09d55ec144961ae7b5f 100644 (file)
@@ -32,11 +32,15 @@ class TimerEntry(Screen, ConfigListScreen):
 
                self.createConfig()
 
-               self["actions"] = NumberActionMap(["SetupActions"],
+               self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"],
                {
                        "ok": self.keySelect,
                        "save": self.keyGo,
                        "cancel": self.keyCancel,
+                       "volumeUp": self.incrementStart,
+                       "volumeDown": self.decrementStart,
+                       "size+": self.incrementEnd,
+                       "size-": self.decrementEnd
                }, -2)
 
                self.list = []
@@ -46,7 +50,12 @@ class TimerEntry(Screen, ConfigListScreen):
        def createConfig(self):
                        justplay = self.timer.justplay
 
-                       afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent]
+                       afterevent = {
+                               AFTEREVENT.NONE: "nothing",
+                               AFTEREVENT.DEEPSTANDBY: "deepstandby",
+                               AFTEREVENT.STANDBY: "standby",
+                               AFTEREVENT.AUTO: "auto"
+                               }[self.timer.afterEvent]
 
                        weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
 
@@ -84,7 +93,7 @@ class TimerEntry(Screen, ConfigListScreen):
                                day[weekday] = 1
 
                        self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay])
-                       self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = afterevent)
+                       self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent)
                        self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type)
                        self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False)
                        self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False)
@@ -155,9 +164,14 @@ class TimerEntry(Screen, ConfigListScreen):
                self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date)
                if self.timerentry_type.value == "once":
                        self.list.append(self.entryDate)
-               self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime))
+               
+               self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
+               self.list.append(self.entryStartTime)
                if self.timerentry_justplay.value != "zap":
-                       self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
+                       self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+                       self.list.append(self.entryEndTime)
+               else:
+                       self.entryEndTime = None
                self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
                self.list.append(self.channelEntry)
 
@@ -250,7 +264,12 @@ class TimerEntry(Screen, ConfigListScreen):
                self.timer.description = self.timerentry_description.value
                self.timer.justplay = self.timerentry_justplay.value == "zap"
                self.timer.resetRepeated()
-               self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value]
+               self.timer.afterEvent = {
+                       "nothing": AFTEREVENT.NONE,
+                       "deepstandby": AFTEREVENT.DEEPSTANDBY,
+                       "standby": AFTEREVENT.STANDBY,
+                       "auto": AFTEREVENT.AUTO
+                       }[self.timerentry_afterevent.value]
                self.timer.service_ref = self.timerentry_service_ref
                self.timer.tags = self.timerentry_tags
 
@@ -309,6 +328,24 @@ class TimerEntry(Screen, ConfigListScreen):
                self.saveTimer()
                self.close((True, self.timer))
 
+       def incrementStart(self):
+               self.timerentry_starttime.increment()
+               self["config"].invalidate(self.entryStartTime)
+
+       def decrementStart(self):
+               self.timerentry_starttime.decrement()
+               self["config"].invalidate(self.entryStartTime)
+
+       def incrementEnd(self):
+               if self.entryEndTime is not None:
+                       self.timerentry_endtime.increment()
+                       self["config"].invalidate(self.entryEndTime)
+
+       def decrementEnd(self):
+               if self.entryEndTime is not None:
+                       self.timerentry_endtime.decrement()
+                       self["config"].invalidate(self.entryEndTime)
+
        def subserviceSelected(self, service):
                if not service is None:
                        self.timer.service_ref = ServiceReference(service[1])
old mode 100644 (file)
new mode 100755 (executable)
index 23d6253..feba8ac
@@ -3,7 +3,8 @@ from Screen import Screen
 import string
 
 from Screens.HelpMenu import HelpableScreen
-from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_DELETE, KEY_BACKSPACE
+from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS
+
 from Components.Label import Label
 from Components.Slider import Slider
 from Components.ActionMap import NumberActionMap
@@ -215,8 +216,9 @@ class Wizard(Screen):
                
                self.disableKeys = False
                
-               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions"],
+               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"],
                {
+                       "gotAsciiCode": self.keyGotAscii,
                        "ok": self.ok,
                        "back": self.back,
                        "left": self.left,
@@ -368,6 +370,10 @@ class Wizard(Screen):
        def keyNumberGlobal(self, number):
                if (self.wizard[self.currStep]["config"]["screen"] != None):
                        self.configInstance.keyNumberGlobal(number)
+
+       def keyGotAscii(self):
+               if (self.wizard[self.currStep]["config"]["screen"] != None):
+                       self["config"].handleKey(KEY_ASCII)
                
        def left(self):
                self.resetCounter()
index 2b60924c72a7cc8d33217bfcd8c4ccb3470e4aa1..0d238b3043a2a5041d98d6e613677af1425e571f 100644 (file)
@@ -126,6 +126,9 @@ def resolveFilename(scope, base = "", path_prefix = None):
 def pathExists(path):
        return os_path.exists(path)
 
+def isMount(path):
+       return os_path.ismount(path)
+
 def createDir(path, makeParents = False):
        try:
                if makeParents:
index 53e04e54eca00e410406bb97ea2335c153eef91a..fff414ad677586d37a98ea777f4a1a854ff14e2c 100644 (file)
@@ -14,7 +14,7 @@ def LoadPixmap(path, desktop = None, cached = False):
                alpha = loadPNG(path + "a.png")
                ptr = loadJPG(path + "rgb.jpg", alpha)
        else:
-               raise "neither .png nor .jpg, please fix file extension"
+               raise Exception("neither .png nor .jpg, please fix file extension")
        if ptr and desktop:
                desktop.makeCompatiblePixmap(ptr)
 
index 609f3bab637d94ab47df5458f03404e856b48334..5617cb663032bb0d98367aa50fbcf747c9d5d8a8 100644 (file)
@@ -4,4 +4,4 @@ install_PYTHON = \
        FuzzyDate.py XMLTools.py Directories.py NumericalTextInput.py \
        KeyBindings.py BoundFunction.py ISO639.py Notifications.py __init__.py \
        RedirectOutput.py DreamboxHardware.py Import.py Event.py CList.py \
-       LoadPixmap.py Profile.py HardwareInfo.py
+       LoadPixmap.py Profile.py HardwareInfo.py Transponder.py
index 5954c9c3d0e704aa8fa38b13cc26dba5d47e2de7..c55764059214c3d33fd0fecb4379d553ebe4fab1 100644 (file)
@@ -1,44 +1,65 @@
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 from enigma import eTimer
 from Components.Language import language
 
 class NumericalTextInput:
-       def __init__(self, nextFunc=None, handleTimeout = True):
+       def __init__(self, nextFunc=None, handleTimeout = True, search = False):
                self.mapping = []
                self.lang = language.getLanguage()
                self.useableChars=None
                self.nextFunction=nextFunc
-               
+
+               if handleTimeout:
+                       self.timer = eTimer()
+                       self.timer.callback.append(self.timeout)
+               else:
+                       self.timer = None
+               self.lastKey = -1
+               self.pos = -1
+
+               if search:
+                       self.mapping.append (u"%_0") # 0
+                       self.mapping.append (u" 1") # 1
+                       self.mapping.append (u"abc2") # 2
+                       self.mapping.append (u"def3") # 3
+                       self.mapping.append (u"ghi4") # 4
+                       self.mapping.append (u"jkl5") # 5
+                       self.mapping.append (u"mno6") # 6
+                       self.mapping.append (u"pqrs7") # 7
+                       self.mapping.append (u"tuv8") # 8
+                       self.mapping.append (u"wxyz9") # 9
+                       return
+
                if self.lang == 'de_DE':
                        self.mapping.append (u".,?'+\"0-()@/:_$!") # 0
                        self.mapping.append (u" 1") # 1
-                       self.mapping.append (u"aäbc2AÄBC") # 2
+                       self.mapping.append (u"aäbc2AÄBC") # 2
                        self.mapping.append (u"def3DEF") # 3
                        self.mapping.append (u"ghi4GHI") # 4
                        self.mapping.append (u"jkl5JKL") # 5
-                       self.mapping.append (u"mnoö6MNOÖ") # 6
-                       self.mapping.append (u"pqrsß7PQRSß") # 7
-                       self.mapping.append (u"tuüv8TUÜV") # 8
+                       self.mapping.append (u"mnoö6MNOÖ") # 6
+                       self.mapping.append (u"pqrsß7PQRSß") # 7
+                       self.mapping.append (u"tuüv8TUÜV") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
                elif self.lang == 'es_ES':
                        self.mapping.append (u".,?'+\"0-()@/:_$!") # 0
                        self.mapping.append (u" 1") # 1
-                       self.mapping.append (u"abcáà2ABCÁÀ") # 2
-                       self.mapping.append (u"deéèf3DEFÉÈ") # 3
-                       self.mapping.append (u"ghiíì4GHIÍÌ") # 4
+                       self.mapping.append (u"abcáà2ABCÁÀ") # 2
+                       self.mapping.append (u"deéèf3DEFÉÈ") # 3
+                       self.mapping.append (u"ghiíì4GHIÍÌ") # 4
                        self.mapping.append (u"jkl5JKL") # 5
-                       self.mapping.append (u"mnñoóò6MNÑOÓÒ") # 6
+                       self.mapping.append (u"mnñoóò6MNÑOÓÒ") # 6
                        self.mapping.append (u"pqrs7PQRS") # 7
-                       self.mapping.append (u"tuvúù8TUVÚÙ") # 8
+                       self.mapping.append (u"tuvúù8TUVÚÙ") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
                if self.lang in ['sv_SE', 'fi_FI']:
                        self.mapping.append (u".,?'+\"0-()@/:_$!") # 0
                        self.mapping.append (u" 1") # 1
-                       self.mapping.append (u"abcåä2ABCÅÄ") # 2
-                       self.mapping.append (u"defé3DEFÉ") # 3
+                       self.mapping.append (u"abcåä2ABCÅÄ") # 2
+                       self.mapping.append (u"defé3DEFÉ") # 3
                        self.mapping.append (u"ghi4GHI") # 4
                        self.mapping.append (u"jkl5JKL") # 5
-                       self.mapping.append (u"mnoö6MNOÖ") # 6
+                       self.mapping.append (u"mnoö6MNOÖ") # 6
                        self.mapping.append (u"pqrs7PQRS") # 7
                        self.mapping.append (u"tuv8TUV") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
@@ -54,14 +75,6 @@ class NumericalTextInput:
                        self.mapping.append (u"tuv8TUV") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
 
-               if handleTimeout:
-                       self.timer = eTimer()
-                       self.timer.callback.append(self.timeout)
-               else:
-                       self.timer = None
-               self.lastKey = -1
-               self.pos = -1
-
        def setUseableChars(self, useable):
                self.useableChars = useable
 
diff --git a/lib/python/Tools/Transponder.py b/lib/python/Tools/Transponder.py
new file mode 100644 (file)
index 0000000..f37603c
--- /dev/null
@@ -0,0 +1,117 @@
+from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParametersCable, eDVBFrontendParametersTerrestrial
+
+def ConvertToHumanReadable(tp):
+       ret = { }
+       type = tp.get("tuner_type", "None")
+       if type == "DVB-S":
+               ret["tuner_type"] = _("Satellite")
+               ret["inversion"] = {
+                       eDVBFrontendParametersSatellite.Inversion_Unknown : _("Auto"),
+                       eDVBFrontendParametersSatellite.Inversion_On : _("On"),
+                       eDVBFrontendParametersSatellite.Inversion_Off : _("Off")}[tp["inversion"]]
+               ret["fec_inner"] = {
+                       eDVBFrontendParametersSatellite.FEC_None : _("None"),
+                       eDVBFrontendParametersSatellite.FEC_Auto : _("Auto"),
+                       eDVBFrontendParametersSatellite.FEC_1_2 : "1/2",
+                       eDVBFrontendParametersSatellite.FEC_2_3 : "2/3",
+                       eDVBFrontendParametersSatellite.FEC_3_4 : "3/4",
+                       eDVBFrontendParametersSatellite.FEC_5_6 : "5/6",
+                       eDVBFrontendParametersSatellite.FEC_7_8 : "7/8",
+                       eDVBFrontendParametersSatellite.FEC_3_5 : "3/5",
+                       eDVBFrontendParametersSatellite.FEC_4_5 : "4/5",
+                       eDVBFrontendParametersSatellite.FEC_8_9 : "8/9",
+                       eDVBFrontendParametersSatellite.FEC_9_10 : "9/10"}[tp["fec_inner"]]
+               ret["modulation"] = {
+                       eDVBFrontendParametersSatellite.Modulation_Auto : _("Auto"),
+                       eDVBFrontendParametersSatellite.Modulation_QPSK : "QPSK",
+                       eDVBFrontendParametersSatellite.Modulation_QAM16 : "QAM16",
+                       eDVBFrontendParametersSatellite.Modulation_8PSK : "8PSK"}[tp["modulation"]]
+               ret["polarization"] = {
+                       eDVBFrontendParametersSatellite.Polarisation_Horizontal : _("Horizontal"),
+                       eDVBFrontendParametersSatellite.Polarisation_Vertical : _("Vertical"),
+                       eDVBFrontendParametersSatellite.Polarisation_CircularLeft : _("Circular left"),
+                       eDVBFrontendParametersSatellite.Polarisation_CircularRight : _("Circular right")}[tp["polarization"]]
+               ret["system"] = {
+                       eDVBFrontendParametersSatellite.System_DVB_S : "DVB-S",
+                       eDVBFrontendParametersSatellite.System_DVB_S2 : "DVB-S2"}[tp["system"]]
+               if ret["system"] == "DVB-S2":
+                       ret["rolloff"] = {
+                               eDVBFrontendParametersSatellite.RollOff_alpha_0_35 : "0.35",
+                               eDVBFrontendParametersSatellite.RollOff_alpha_0_25 : "0.25",
+                               eDVBFrontendParametersSatellite.RollOff_alpha_0_20 : "0.20"}[tp["rolloff"]]
+                       ret["pilot"] = {
+                               eDVBFrontendParametersSatellite.Pilot_Unknown : _("Auto"),
+                               eDVBFrontendParametersSatellite.Pilot_On : _("On"),
+                               eDVBFrontendParametersSatellite.Pilot_Off : _("Off")}[tp["pilot"]]
+       elif type == "DVB-C":
+               ret["tuner_type"] = _("Cable")
+               ret["modulation"] = {
+                       eDVBFrontendParametersCable.Modulation_Auto: _("Auto"),
+                       eDVBFrontendParametersCable.Modulation_QAM16 : "QAM16",
+                       eDVBFrontendParametersCable.Modulation_QAM32 : "QAM32",
+                       eDVBFrontendParametersCable.Modulation_QAM64 : "QAM64",
+                       eDVBFrontendParametersCable.Modulation_QAM128 : "QAM128",
+                       eDVBFrontendParametersCable.Modulation_QAM256 : "QAM256"}[tp["modulation"]]
+               ret["inversion"] = {
+                       eDVBFrontendParametersCable.Inversion_Unknown : _("Auto"),
+                       eDVBFrontendParametersCable.Inversion_On : _("On"),
+                       eDVBFrontendParametersCable.Inversion_Off : _("Off")}[tp["inversion"]]
+               ret["fec_inner"] = {
+                       eDVBFrontendParametersCable.FEC_None : _("None"),
+                       eDVBFrontendParametersCable.FEC_Auto : _("Auto"),
+                       eDVBFrontendParametersCable.FEC_1_2 : "1/2",
+                       eDVBFrontendParametersCable.FEC_2_3 : "2/3",
+                       eDVBFrontendParametersCable.FEC_3_4 : "3/4",
+                       eDVBFrontendParametersCable.FEC_5_6 : "5/6",
+                       eDVBFrontendParametersCable.FEC_7_8 : "7/8",
+                       eDVBFrontendParametersCable.FEC_8_9 : "8/9"}[tp["fec_inner"]]
+       elif type == "DVB-T":
+               ret["tuner_type"] = _("Terrestrial")
+               ret["bandwidth"] = {
+                       eDVBFrontendParametersTerrestrial.Bandwidth_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.Bandwidth_8MHz : "8 MHz",
+                       eDVBFrontendParametersTerrestrial.Bandwidth_7MHz : "7 MHz",
+                       eDVBFrontendParametersTerrestrial.Bandwidth_6MHz : "6 MHz"}[tp["bandwidth"]]
+               ret["code_rate_lp"] = {
+                       eDVBFrontendParametersTerrestrial.FEC_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.FEC_1_2 : "1/2",
+                       eDVBFrontendParametersTerrestrial.FEC_2_3 : "2/3",
+                       eDVBFrontendParametersTerrestrial.FEC_3_4 : "3/4",
+                       eDVBFrontendParametersTerrestrial.FEC_5_6 : "5/6",
+                       eDVBFrontendParametersTerrestrial.FEC_7_8 : "7/8"}[tp["code_rate_lp"]]
+               ret["code_rate_hp"] = {
+                       eDVBFrontendParametersTerrestrial.FEC_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.FEC_1_2 : "1/2",
+                       eDVBFrontendParametersTerrestrial.FEC_2_3 : "2/3",
+                       eDVBFrontendParametersTerrestrial.FEC_3_4 : "3/4",
+                       eDVBFrontendParametersTerrestrial.FEC_5_6 : "5/6",
+                       eDVBFrontendParametersTerrestrial.FEC_7_8 : "7/8"}[tp["code_rate_hp"]]
+               ret["constellation"] = {
+                       eDVBFrontendParametersTerrestrial.Modulation_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.Modulation_QPSK : "QPSK",
+                       eDVBFrontendParametersTerrestrial.Modulation_QAM16 : "QAM16",
+                       eDVBFrontendParametersTerrestrial.Modulation_QAM64 : "QAM64"}[tp["constellation"]]
+               ret["transmission_mode"] = {
+                       eDVBFrontendParametersTerrestrial.TransmissionMode_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.TransmissionMode_2k : "2k",
+                       eDVBFrontendParametersTerrestrial.TransmissionMode_8k : "8k"}[tp["transmission_mode"]]
+               ret["guard_interval"] = {
+                       eDVBFrontendParametersTerrestrial.GuardInterval_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.GuardInterval_1_32 : "1/32",
+                       eDVBFrontendParametersTerrestrial.GuardInterval_1_16 : "1/16",
+                       eDVBFrontendParametersTerrestrial.GuardInterval_1_8 : "1/8",
+                       eDVBFrontendParametersTerrestrial.GuardInterval_1_4 : "1/4"}[tp["guard_interval"]]
+               ret["hierarchy_information"] = {
+                       eDVBFrontendParametersTerrestrial.Hierarchy_Auto : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.Hierarchy_None : _("None"),
+                       eDVBFrontendParametersTerrestrial.Hierarchy_1 : "1",
+                       eDVBFrontendParametersTerrestrial.Hierarchy_2 : "2",
+                       eDVBFrontendParametersTerrestrial.Hierarchy_4 : "4"}[tp["hierarchy_information"]]
+               ret["inversion"] = {
+                       eDVBFrontendParametersTerrestrial.Inversion_Unknown : _("Auto"),
+                       eDVBFrontendParametersTerrestrial.Inversion_On : _("On"),
+                       eDVBFrontendParametersTerrestrial.Inversion_Off : _("Off")}[tp["inversion"]]
+       for x in tp.keys():
+               if not ret.has_key(x):
+                       ret[x] = tp[x]
+       return ret
index 7de05d2b848b8a3e7622bf9ec24790870197d64c..bdf1b1441e68a566ec5c8f9513ffbbcdf7fd9d9d 100644 (file)
@@ -141,6 +141,7 @@ typedef long time_t;
 %include <lib/service/service.h>
 
 // TODO: embed these...
+%immutable ePicLoad::PictureData;
 %immutable eButton::selected;
 %immutable eInput::changed;
 %immutable eComponentScan::statusChanged;
@@ -287,7 +288,7 @@ PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref,
 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false)
 {
        eStaticServiceDVBBouquetInformation info;
-       if (info.isPlayable(bouquet_ref, ignore))
+       if (info.isPlayable(bouquet_ref, ignore, simulate))
                return New_eServiceReference(info.getPlayableService());
        Py_INCREF(Py_None);
        return Py_None;
index 50b66103887caca878f17b3b2aac611d01d9aa30..c5faeed41b59558c6a6358e04394f103fc7cc7ae 100644 (file)
@@ -5,7 +5,7 @@
 extern "C" void init_enigma();
 extern "C" void eBaseInit(void);
 extern "C" void eConsoleInit(void);
-extern void bsodFatal();
+extern void bsodFatal(const char *component);
 
 #define SKIP_PART2
 #include <lib/python/python.h>
@@ -44,7 +44,7 @@ ePyObject::operator PyObject*()
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        return 0;
 }
@@ -57,7 +57,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_erased || m_ob->ob_refcnt <= 0)
        {
@@ -66,7 +66,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_ob->ob_refcnt == 0x7FFFFFFF)
        {
@@ -75,7 +75,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        m_file = file;
        m_line = line;
@@ -92,7 +92,7 @@ void ePyObject::decref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_erased || m_ob->ob_refcnt <= 0)
        {
@@ -101,7 +101,7 @@ void ePyObject::decref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        m_file = file;
        m_line = line;
@@ -207,7 +207,7 @@ int ePython::call(ePyObject pFunc, ePyObject pArgs)
                        eDebug("(PyObject_CallObject(%s,%s) failed)", PyString_AS_STRING(FuncStr), PyString_AS_STRING(ArgStr));
                        Py_DECREF(FuncStr);
                        Py_DECREF(ArgStr);
-                       bsodFatal();
+                       bsodFatal(0);
                }
        }
        return res;
index f56d49bbc489c311c1ab1239c01d11a2ec9d730a..52ec6c1eaba64b86ad37e2a5137c1669063f4746 100644 (file)
@@ -24,6 +24,7 @@ public:
 #ifdef PYTHON_REFCOUNT_DEBUG
        inline ePyObject(PyObject *ob, const char *file, int line);
 #endif
+       inline ePyObject(PyVarObject *ob);
        inline ePyObject(PyDictObject *ob);
        inline ePyObject(PyTupleObject *ob);
        inline ePyObject(PyListObject *ob);
@@ -32,11 +33,13 @@ public:
        operator bool() { return !!m_ob; }
        ePyObject &operator=(const ePyObject &);
        ePyObject &operator=(PyObject *);
+       ePyObject &operator=(PyVarObject *ob) { return operator=((PyObject*)ob); }
        ePyObject &operator=(PyDictObject *ob) { return operator=((PyObject*)ob); }
        ePyObject &operator=(PyTupleObject *ob) { return operator=((PyObject*)ob); }
        ePyObject &operator=(PyListObject *ob) { return operator=((PyObject*)ob); }
        ePyObject &operator=(PyStringObject *ob) { return operator=((PyObject*)ob); }
        operator PyObject*();
+       operator PyVarObject*() { return (PyVarObject*)operator PyVarObject*(); }
        operator PyTupleObject*() { return (PyTupleObject*)operator PyObject*(); }
        operator PyListObject*() { return (PyListObject*)operator PyObject*(); }
        operator PyStringObject*() { return (PyStringObject*)operator PyObject*(); }
@@ -84,6 +87,14 @@ inline ePyObject::ePyObject(PyObject *ob, const char* file, int line)
 }
 #endif
 
+inline ePyObject::ePyObject(PyVarObject *ob)
+       :m_ob((PyObject*)ob)
+#ifdef PYTHON_REFCOUNT_DEBUG
+       ,m_file(0), m_line(0), m_from(0), m_to(0), m_erased(false)
+#endif
+{
+}
+
 inline ePyObject::ePyObject(PyDictObject *ob)
        :m_ob((PyObject*)ob)
 #ifdef PYTHON_REFCOUNT_DEBUG
index bee0e322d9bd6e73520a0807a9258697467fade5..6cd7c625208c8aff4923ab7b4651377bfee6921d 100644 (file)
@@ -584,7 +584,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                                case celServiceInfo:
                                {
                                        ePtr<eServiceEvent> evt;
-                                       if ( service_info && !service_info->getEvent(*m_cursor, evt) )
+                                       if ( isPlayable && service_info && !service_info->getEvent(*m_cursor, evt) )
                                        {
                                                std::string name = evt->getEventName();
                                                if (!name.length())
index af3ab206805c6890e1e4b7879c857c45e1a2faa4..33cd865e9ea7c648893a6f37fa9a6e20a802b65a 100644 (file)
@@ -96,217 +96,50 @@ int eStaticServiceDVBInformation::isPlayable(const eServiceReference &ref, const
        return false;
 }
 
-static void PutToDict(ePyObject &dict, const char*key, long value)
-{
-       ePyObject item = PyString_FromFormat("%d", value);
-       if (item)
-       {
-               if (PyDict_SetItemString(dict, key, item))
-                       eDebug("put %s to dict failed", key);
-               Py_DECREF(item);
-       }
-       else
-               eDebug("could not create PyObject for %s", key);
-}
-
-extern void PutToDict(ePyObject &dict, const char*key, const char *value);
+extern void PutToDict(ePyObject &dict, const char*key, long value);  // defined in dvb/frontend.cpp
+extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp
+extern void PutToDict(ePyObject &dict, const char*key, const char *value); // defined in dvb/frontend.cpp
 
 void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm)
 {
-       const char *tmp=0;
-       PutToDict(dict, "type", "Satellite");
+       PutToDict(dict, "tuner_type", "DVB-S");
        PutToDict(dict, "frequency", feparm.frequency);
-       PutToDict(dict, "symbolrate", feparm.symbol_rate);
-       PutToDict(dict, "orbital position", feparm.orbital_position);
-       switch (feparm.inversion)
-       {
-               case eDVBFrontendParametersSatellite::Inversion::On: tmp="ON"; break;
-               case eDVBFrontendParametersSatellite::Inversion::Off: tmp="OFF"; break;
-               default:
-               case eDVBFrontendParametersSatellite::Inversion::Unknown: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "inversion", tmp);
-       switch (feparm.fec)
-       {
-               case eDVBFrontendParametersSatellite::FEC::fNone: tmp="NONE"; break;
-               case eDVBFrontendParametersSatellite::FEC::f1_2: tmp="1/2"; break;
-               case eDVBFrontendParametersSatellite::FEC::f2_3: tmp="2/3"; break;
-               case eDVBFrontendParametersSatellite::FEC::f3_4: tmp="3/4"; break;
-               case eDVBFrontendParametersSatellite::FEC::f5_6: tmp="5/6"; break;
-               case eDVBFrontendParametersSatellite::FEC::f7_8: tmp="7/8"; break;
-               case eDVBFrontendParametersSatellite::FEC::f3_5: tmp="3/5"; break;
-               case eDVBFrontendParametersSatellite::FEC::f4_5: tmp="4/5"; break;
-               case eDVBFrontendParametersSatellite::FEC::f8_9: tmp="8/9"; break;
-               case eDVBFrontendParametersSatellite::FEC::f9_10: tmp="9/10"; break;
-               default:
-               case eDVBFrontendParametersSatellite::FEC::fAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "fec inner", tmp);
-       switch (feparm.modulation)
-       {
-               case eDVBFrontendParametersSatellite::Modulation::Auto: tmp="AUTO"; break;
-               case eDVBFrontendParametersSatellite::Modulation::QPSK: tmp="QPSK"; break;
-               case eDVBFrontendParametersSatellite::Modulation::M8PSK: tmp="8PSK"; break;
-               case eDVBFrontendParametersSatellite::Modulation::QAM_16: tmp="QAM16"; break;
-       }
-       PutToDict(dict, "modulation", tmp);
-       switch(feparm.polarisation)
+       PutToDict(dict, "symbol_rate", feparm.symbol_rate);
+       PutToDict(dict, "orbital_position", feparm.orbital_position);
+       PutToDict(dict, "inversion", feparm.inversion);
+       PutToDict(dict, "fec_inner", feparm.fec);
+       PutToDict(dict, "modulation", feparm.modulation);
+       PutToDict(dict, "polarization", feparm.polarisation);
+       if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2)
        {
-               case eDVBFrontendParametersSatellite::Polarisation::Horizontal: tmp="HORIZONTAL"; break;
-               case eDVBFrontendParametersSatellite::Polarisation::Vertical: tmp="VERTICAL"; break;
-               case eDVBFrontendParametersSatellite::Polarisation::CircularLeft: tmp="CIRCULAR LEFT"; break;
-               default:
-               case eDVBFrontendParametersSatellite::Polarisation::CircularRight: tmp="CIRCULAR RIGHT"; break;
-       }
-       PutToDict(dict, "polarization", tmp);
-       switch(feparm.system)
-       {
-               default:
-               case eDVBFrontendParametersSatellite::System::DVB_S: tmp="DVB-S"; break;
-               case eDVBFrontendParametersSatellite::System::DVB_S2:
-                       switch(feparm.rolloff)
-                       {
-                               default:
-                               case eDVBFrontendParametersSatellite::RollOff::alpha_0_35: tmp="0.35"; break;
-                               case eDVBFrontendParametersSatellite::RollOff::alpha_0_25: tmp="0.25"; break;
-                               case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break;
-                       }
-                       PutToDict(dict, "roll off", tmp);
-                       switch(feparm.pilot)
-                       {
-                               case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break;
-                               case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break;
-                               default:
-                               case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break;
-                       }
-                       PutToDict(dict, "pilot", tmp);
-                       tmp="DVB-S2";
-                       break;
+               PutToDict(dict, "rolloff", feparm.rolloff);
+               PutToDict(dict, "pilot", feparm.pilot);
        }
-       PutToDict(dict, "system", tmp);
+       PutToDict(dict, "system", feparm.system);
 }
 
 void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm)
 {
-       PutToDict(dict, "type", "Terrestrial");
+       PutToDict(dict, "tuner_type", "DVB-T");
        PutToDict(dict, "frequency", feparm.frequency);
-       const char *tmp=0;
-       switch (feparm.bandwidth)
-       {
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz: tmp="8 MHz"; break;
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz: tmp="7 MHz"; break;
-       case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz: tmp="6 MHz"; break;
-       default:
-       case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "bandwidth", tmp);
-       switch (feparm.code_rate_LP)
-       {
-       case eDVBFrontendParametersTerrestrial::FEC::f1_2: tmp="1/2"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f2_3: tmp="2/3"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f3_4: tmp="3/4"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f5_6: tmp="5/6"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f7_8: tmp="7/8"; break;
-       default:
-       case eDVBFrontendParametersTerrestrial::FEC::fAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "code rate lp", tmp);
-       switch (feparm.code_rate_HP)
-       {
-       case eDVBFrontendParametersTerrestrial::FEC::f1_2: tmp="1/2"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f2_3: tmp="2/3"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f3_4: tmp="3/4"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f5_6: tmp="5/6"; break;
-       case eDVBFrontendParametersTerrestrial::FEC::f7_8: tmp="7/8"; break;
-       default:
-       case eDVBFrontendParametersTerrestrial::FEC::fAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "code rate hp", tmp);
-       switch (feparm.modulation)
-       {
-       case eDVBFrontendParametersTerrestrial::Modulation::QPSK: tmp="QPSK"; break;
-       case eDVBFrontendParametersTerrestrial::Modulation::QAM16: tmp="QAM16"; break;
-       case eDVBFrontendParametersTerrestrial::Modulation::QAM64: tmp="QAM64"; break;
-       default:
-       case eDVBFrontendParametersTerrestrial::Modulation::Auto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "constellation", tmp);
-       switch (feparm.transmission_mode)
-       {
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k: tmp="2k"; break;
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TM8k: tmp="8k"; break;
-       default:
-       case eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "transmission mode", tmp);
-       switch (feparm.guard_interval)
-       {
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_32: tmp="1/32"; break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_16: tmp="1/16"; break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_8: tmp="1/8"; break;
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_4: tmp="1/4"; break;
-               default:
-               case eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "guard interval", tmp);
-       switch (feparm.hierarchy)
-       {
-               case eDVBFrontendParametersTerrestrial::Hierarchy::HNone: tmp="NONE"; break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H1: tmp="1"; break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H2: tmp="2"; break;
-               case eDVBFrontendParametersTerrestrial::Hierarchy::H4: tmp="4"; break;
-               default:
-               case eDVBFrontendParametersTerrestrial::Hierarchy::HAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "hierarchy", tmp);
-       switch (feparm.inversion)
-       {
-               case eDVBFrontendParametersSatellite::Inversion::On: tmp="ON"; break;
-               case eDVBFrontendParametersSatellite::Inversion::Off: tmp="OFF"; break;
-               default:
-               case eDVBFrontendParametersSatellite::Inversion::Unknown: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "inversion", tmp);
+       PutToDict(dict, "bandwidth", feparm.bandwidth);
+       PutToDict(dict, "code_rate_lp", feparm.code_rate_LP);
+       PutToDict(dict, "code_rate_hp", feparm.code_rate_HP);
+       PutToDict(dict, "constellation", feparm.modulation);
+       PutToDict(dict, "transmission_mode", feparm.transmission_mode);
+       PutToDict(dict, "guard_interval", feparm.guard_interval);
+       PutToDict(dict, "hierarchy_information", feparm.hierarchy);
+       PutToDict(dict, "inversion", feparm.inversion);
 }
 
 void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm)
 {
-       const char *tmp=0;
-       PutToDict(dict, "type", "Cable");
+       PutToDict(dict, "tuner_type", "DVB-C");
        PutToDict(dict, "frequency", feparm.frequency);
-       PutToDict(dict, "symbolrate", feparm.symbol_rate);
-       switch (feparm.modulation)
-       {
-       case eDVBFrontendParametersCable::Modulation::QAM16: tmp="QAM16"; break;
-       case eDVBFrontendParametersCable::Modulation::QAM32: tmp="QAM32"; break;
-       case eDVBFrontendParametersCable::Modulation::QAM64: tmp="QAM64"; break;
-       case eDVBFrontendParametersCable::Modulation::QAM128: tmp="QAM128"; break;
-       case eDVBFrontendParametersCable::Modulation::QAM256: tmp="QAM256"; break;
-       default:
-       case eDVBFrontendParametersCable::Modulation::Auto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "modulation", tmp);
-       switch (feparm.inversion)
-       {
-       case eDVBFrontendParametersCable::Inversion::On: tmp="ON"; break;
-       case eDVBFrontendParametersCable::Inversion::Off: tmp="OFF"; break;
-       default:
-       case eDVBFrontendParametersCable::Inversion::Unknown: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "inversion", tmp);
-       switch (feparm.fec_inner)
-       {
-       case eDVBFrontendParametersCable::FEC::fNone: tmp="NONE"; break;
-       case eDVBFrontendParametersCable::FEC::f1_2: tmp="1/2"; break;
-       case eDVBFrontendParametersCable::FEC::f2_3: tmp="2/3"; break;
-       case eDVBFrontendParametersCable::FEC::f3_4: tmp="3/4"; break;
-       case eDVBFrontendParametersCable::FEC::f5_6: tmp="5/6"; break;
-       case eDVBFrontendParametersCable::FEC::f7_8: tmp="7/8"; break;
-       case eDVBFrontendParametersCable::FEC::f8_9: tmp="8/9"; break;
-       default:
-       case eDVBFrontendParametersCable::FEC::fAuto: tmp="AUTO"; break;
-       }
-       PutToDict(dict, "fec inner", tmp);
+       PutToDict(dict, "symbol_rate", feparm.symbol_rate);
+       PutToDict(dict, "modulation", feparm.modulation);
+       PutToDict(dict, "inversion", feparm.inversion);
+       PutToDict(dict, "fec_inner", feparm.fec_inner);
 }
 
 PyObject *eStaticServiceDVBInformation::getInfoObject(const eServiceReference &r, int what)
@@ -534,14 +367,25 @@ int eStaticServiceDVBPVRInformation::getLength(const eServiceReference &ref)
        
        eDVBTSTools tstools;
        
+       struct stat s;
+       stat(ref.path.c_str(), &s);
+
        if (tstools.openFile(ref.path.c_str()))
                return 0;
 
+                       /* check if cached data is still valid */
+       if (m_parser.m_data_ok && (s.st_size == m_parser.m_filesize) && (m_parser.m_length))
+               return m_parser.m_length / 90000;
+
+                       /* otherwise, re-calc length and update meta file */
        pts_t len;
        if (tstools.calcLen(len))
                return 0;
 
-       return len / 90000;
+       m_parser.m_length = len;
+       m_parser.m_filesize = s.st_size;
+       m_parser.updateMeta(ref.path);
+       return m_parser.m_length / 90000;
 }
 
 int eStaticServiceDVBPVRInformation::getInfo(const eServiceReference &ref, int w)
@@ -1042,7 +886,6 @@ RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &service, const eServ
 eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service): 
        m_reference(ref), m_dvb_service(service), m_have_video_pid(0), m_is_paused(0)
 {
-       memset(&m_videoEventData, 0, sizeof(struct iTSMPEGDecoder::videoEvent));
        m_is_primary = 1;
        m_is_pvr = !m_reference.path.empty();
        
@@ -1589,20 +1432,6 @@ RESULT eDVBServicePlay::getEvent(ePtr<eServiceEvent> &evt, int nownext)
        return m_event_handler.getEvent(evt, nownext);
 }
 
-static int readMpegProc(char *str, int decoder)
-{
-       int val = -1;
-       char tmp[64];
-       sprintf(tmp, "/proc/stb/vmpeg/%d/%s", decoder, str);
-       FILE *f = fopen(tmp, "r");
-       if (f)
-       {
-               fscanf(f, "%x", &val);
-               fclose(f);
-       }
-       return val;
-}
-
 int eDVBServicePlay::getInfo(int w)
 {
        eDVBServicePMTHandler::program program;
@@ -1619,44 +1448,30 @@ int eDVBServicePlay::getInfo(int w)
 
        switch (w)
        {
-#if HAVE_DVB_API_VERSION >= 3
        case sVideoHeight:
-               if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventSizeChanged)
-                       return m_videoEventData.height;
-               else
-                       return readMpegProc("yres", !m_is_primary);
+               if (m_decoder)
+                       return m_decoder->getVideoHeight();
+               break;
        case sVideoWidth:
-               if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventSizeChanged)
-                       return m_videoEventData.width;
-               else
-                       return readMpegProc("xres", !m_is_primary);
+               if (m_decoder)
+                       return m_decoder->getVideoWidth();
+               break;
        case sFrameRate:
-               if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventFrameRateChanged)
-                       return m_videoEventData.framerate;
-               else
-                       return readMpegProc("framerate", !m_is_primary);
+               if (m_decoder)
+                       return m_decoder->getVideoFrameRate();
+               break;
        case sProgressive:
-               if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventProgressiveChanged)
-                       return m_videoEventData.progressive;
-               return readMpegProc("progressive", !m_is_primary);
-#else
-#warning "FIXMEE implement sFrameRate, sProgressive, sVideoHeight, sVideoWidth for old DVB API"
-#endif
+               if (m_decoder)
+                       return m_decoder->getVideoProgressive();
+               break;
        case sAspect:
        {
-               int val;
-#if HAVE_DVB_API_VERSION >= 3
-               if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventSizeChanged)
-                       return m_videoEventData.aspect == VIDEO_FORMAT_4_3 ? 1 : 3;
-               else if ((val=readMpegProc("aspect", !m_is_primary)) != -1)
-                       return val;
-               else
-#else
-#warning "FIXMEE implement sAspect for old DVB API"
-#endif
+               int aspect = -1;
+               if (m_decoder)
+                       aspect = m_decoder->getVideoAspect();
                if (no_program_info)
-                       return -1; 
-               else if (!program.videoStreams.empty() && program.videoStreams[0].component_tag != -1)
+                       break;
+               else if (aspect == -1 && !program.videoStreams.empty() && program.videoStreams[0].component_tag != -1)
                {
                        ePtr<eServiceEvent> evt;
                        if (!m_event_handler.getEvent(evt, 0))
@@ -1693,7 +1508,9 @@ int eDVBServicePlay::getInfo(int w)
                                }
                        }
                }
-               return -1;
+               else
+                       return aspect;
+               break;
        }
        case sIsCrypted: if (no_program_info) return -1; return program.isCrypted();
        case sVideoPID: if (no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
@@ -1710,8 +1527,9 @@ int eDVBServicePlay::getInfo(int w)
        case sServiceref: return resIsString;
        case sDVBState: return m_tune_state;
        default:
-               return -1;
+               break;
        }
+       return -1;
 }
 
 std::string eDVBServicePlay::getInfoString(int w)
@@ -1798,6 +1616,8 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int
                info.m_description = "AC3";
        else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAAC)
                info.m_description = "AAC";
+       else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAACHE)
+               info.m_description = "AAC-HE";
        else  if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atDTS)
                info.m_description = "DTS";
        else
@@ -2056,19 +1876,8 @@ PyObject *eDVBServiceBase::getTransponderData(bool original)
                                        eDVBFrontendParametersSatellite osat;
                                        if (!feparm->getDVBS(osat))
                                        {
-                                               void PutToDict(ePyObject &, const char*, long);
-                                               void PutToDict(ePyObject &, const char*, const char*);
                                                PutToDict(ret, "orbital_position", osat.orbital_position);
-                                               const char *tmp = "UNKNOWN";
-                                               switch(osat.polarisation)
-                                               {
-                                                       case eDVBFrontendParametersSatellite::Polarisation::Horizontal: tmp="HORIZONTAL"; break;
-                                                       case eDVBFrontendParametersSatellite::Polarisation::Vertical: tmp="VERTICAL"; break;
-                                                       case eDVBFrontendParametersSatellite::Polarisation::CircularLeft: tmp="CIRCULAR_LEFT"; break;
-                                                       case eDVBFrontendParametersSatellite::Polarisation::CircularRight: tmp="CIRCULAR_RIGHT"; break;
-                                                       default:break;
-                                               }
-                                               PutToDict(ret, "polarization", tmp);
+                                               PutToDict(ret, "polarization", osat.polarisation);
                                        }
                                }
                        }
@@ -2213,8 +2022,8 @@ PyObject *eDVBServicePlay::getCutList()
        for (std::multiset<struct cueEntry>::iterator i(m_cue_entries.begin()); i != m_cue_entries.end(); ++i)
        {
                ePyObject tuple = PyTuple_New(2);
-               PyTuple_SetItem(tuple, 0, PyLong_FromLongLong(i->where));
-               PyTuple_SetItem(tuple, 1, PyInt_FromLong(i->what));
+               PyTuple_SET_ITEM(tuple, 0, PyLong_FromLongLong(i->where));
+               PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(i->what));
                PyList_Append(list, tuple);
                Py_DECREF(tuple);
        }
@@ -3014,7 +2823,6 @@ void eDVBServicePlay::setPCMDelay(int delay)
 
 void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
 {
-       memcpy(&m_videoEventData, &event, sizeof(event));
        switch(event.type) {
                case iTSMPEGDecoder::videoEvent::eventSizeChanged:
                        m_event((iPlayableService*)this, evVideoSizeChanged);
@@ -3041,18 +2849,16 @@ PyObject *eDVBServicePlay::getStreamingData()
        eDVBServicePMTHandler::program program;
        if (m_service_handler.getProgramInfo(program))
        {
-               Py_INCREF(Py_None);
-               return Py_None;
+               Py_RETURN_NONE;
        }
 
-       PyObject *r = program.createPythonObject();
+       ePyObject r = program.createPythonObject();
        ePtr<iDVBDemux> demux;
        if (!m_service_handler.getDataDemux(demux))
        {
                uint8_t demux_id;
-               demux->getCADemuxID(demux_id);
-               
-               PyDict_SetItemString(r, "demux", PyInt_FromLong(demux_id));
+               if (!demux->getCADemuxID(demux_id))
+                       PutToDict(r, "demux", demux_id);
        }
 
        return r;
index c19e1ed520442a08562142a55922a48ca344a85b..43e4690f8b3509395d21c58f607ed1f390741d67 100644 (file)
@@ -283,7 +283,6 @@ private:
 
        ePtr<eConnection> m_video_event_connection;
        void video_event(struct iTSMPEGDecoder::videoEvent);
-       struct iTSMPEGDecoder::videoEvent m_videoEventData;
 };
 
 class eStaticServiceDVBBouquetInformation: public iStaticServiceInformation
index 89d022ccb6e3f870fb98ee8f3e68ffab3a527a2f..c2767e8d42b0b29cd8435365b9791535a3ccf1bf 100644 (file)
@@ -3,11 +3,20 @@
 #include <lib/dvb/epgcache.h>
 #include <fcntl.h>
 
+       /* for cutlist */
+#include <byteswap.h>
+#include <netinet/in.h>
+
+#ifndef BYTE_ORDER
+#error no byte order defined!
+#endif
+
 DEFINE_REF(eDVBServiceRecord);
 
 eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref): m_ref(ref)
 {
        CONNECT(m_service_handler.serviceEvent, eDVBServiceRecord::serviceEvent);
+       CONNECT(m_event_handler.m_eit_changed, eDVBServiceRecord::gotNewEvent);
        m_state = stateIdle;
        m_want_record = 0;
        m_tuned = 0;
@@ -15,6 +24,7 @@ eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref): m_ref(ref
        m_error = 0;
        m_streaming = 0;
        m_simulate = false;
+       m_last_event_id = -1;
 }
 
 void eDVBServiceRecord::serviceEvent(int event)
@@ -26,6 +36,22 @@ void eDVBServiceRecord::serviceEvent(int event)
        {
                eDebug("tuned..");
                m_tuned = 1;
+
+                       /* start feeding EIT updates */
+               ePtr<iDVBDemux> m_demux;
+               if (!m_service_handler.getDataDemux(m_demux))
+               {
+                       eServiceReferenceDVB &ref = (eServiceReferenceDVB&) m_ref;
+                       int sid = ref.getParentServiceID().get();
+                       if (!sid)
+                               sid = ref.getServiceID().get();
+                       if ( ref.getParentTransportStreamID().get() &&
+                               ref.getParentTransportStreamID() != ref.getTransportStreamID() )
+                               m_event_handler.startOther(m_demux, sid);
+                       else
+                               m_event_handler.start(m_demux, sid);
+               }
+
                if (m_state == stateRecording && m_want_record)
                        doRecord();
                m_event((iRecordableService*)this, evTunedIn);
@@ -145,6 +171,9 @@ RESULT eDVBServiceRecord::stop()
                        ::close(m_target_fd);
                        m_target_fd = -1;
                }
+               
+               saveCutlist();
+               
                m_state = statePrepared;
        } else if (!m_simulate)
                eDebug("(was not recording)");
@@ -363,23 +392,23 @@ RESULT eDVBServiceRecord::stream(ePtr<iStreamableService> &ptr)
        return 0;
 }
 
+extern void PutToDict(ePyObject &dict, const char*key, long val);  // defined in dvb/frontend.cpp
+
 PyObject *eDVBServiceRecord::getStreamingData()
 {
        eDVBServicePMTHandler::program program;
        if (!m_tuned || m_service_handler.getProgramInfo(program))
        {
-               Py_INCREF(Py_None);
-               return Py_None;
+               Py_RETURN_NONE;
        }
 
-       PyObject *r = program.createPythonObject();
+       ePyObject r = program.createPythonObject();
        ePtr<iDVBDemux> demux;
        if (!m_service_handler.getDataDemux(demux))
        {
                uint8_t demux_id;
-               demux->getCADemuxID(demux_id);
-               
-               PyDict_SetItemString(r, "demux", PyInt_FromLong(demux_id));
+               if (!demux->getCADemuxID(demux_id))
+                       PutToDict(r, "demux", demux_id);
        }
 
        return r;
@@ -398,3 +427,77 @@ void eDVBServiceRecord::recordEvent(int event)
                eDebug("unhandled record event %d", event);
        }
 }
+
+void eDVBServiceRecord::gotNewEvent()
+{
+       ePtr<eServiceEvent> event_now;
+       m_event_handler.getEvent(event_now, 0);
+
+       if (!event_now)
+               return;
+
+       int event_id = event_now->getEventId();
+
+       pts_t p;
+       
+       if (m_record)
+       {
+               if (m_record->getCurrentPCR(p))
+                       eDebug("getting PCR failed!");
+               else
+               {
+                       static int i;
+                       m_event_timestamps[/* event_id*/ ++i] = p;
+                       eDebug("pcr of eit change: %llx", p);
+               }
+       }
+
+       if (event_id != m_last_event_id)
+               eDebug("[eDVBServiceRecord] now running: %s (%d seconds)", event_now->getEventName().c_str(), event_now->getDuration());
+       
+       m_last_event_id = event_id;
+}
+
+void eDVBServiceRecord::saveCutlist()
+{
+                       /* XXX: dupe of eDVBServicePlay::saveCuesheet, refactor plz */
+       std::string filename = m_filename + ".cuts";
+
+       eDVBTSTools tstools;
+       
+       if (tstools.openFile(m_filename.c_str()))
+       {
+               eDebug("[eDVBServiceRecord] saving cutlist failed because tstools failed");
+               return;
+       }
+       
+       FILE *f = fopen(filename.c_str(), "wb");
+
+       if (f)
+       {
+               unsigned long long where;
+               int what;
+
+               for (std::map<int,pts_t>::iterator i(m_event_timestamps.begin()); i != m_event_timestamps.end(); ++i)
+               {
+                       pts_t p = i->second;
+                       off_t offset = 0; // fixme, we need to note down both
+                       if (tstools.fixupPTS(offset, p))
+                       {
+                               eDebug("[eDVBServiceRecord] fixing up PTS failed, not saving");
+                               continue;
+                       }
+                       eDebug("fixed up %llx to %llx (offset %llx)", i->second, p, offset);
+#if BYTE_ORDER == BIG_ENDIAN
+                       where = p;
+#else
+                       where = bswap_64(p);
+#endif
+                       what = htonl(2); /* mark */
+                       fwrite(&where, sizeof(where), 1, f);
+                       fwrite(&what, sizeof(what), 1, f);
+               }
+               fclose(f);
+       }
+       
+}
index 17de033e190b18629f386538ea589d195fe799f0..856f92b3ce9ec63984fc0f73ee0160b0e4ae4140 100644 (file)
@@ -36,6 +36,8 @@ private:
        friend class eServiceFactoryDVB;
        eDVBServiceRecord(const eServiceReferenceDVB &ref);
        
+       eDVBServiceEITHandler m_event_handler;
+       
        eServiceReferenceDVB m_ref;
        
        ePtr<iDVBTSRecorder> m_record;
@@ -44,8 +46,11 @@ private:
        int m_recording, m_tuned, m_error;
        std::set<int> m_pids_active;
        std::string m_filename;
+
+       std::map<int,pts_t> m_event_timestamps;
        int m_target_fd;
        int m_streaming;
+       int m_last_event_id;
        
        int doPrepare();
        int doRecord();
@@ -56,6 +61,10 @@ private:
        
                        /* recorder events */
        void recordEvent(int event);
+
+                       /* eit updates */
+       void gotNewEvent();
+       void saveCutlist();
 };
 
 #endif
index 19b7735b2888b7b8cbe9750bbdd30e55da297567..bbcb3b5cf061ea165673a79609a38d6ddb769abd 100644 (file)
@@ -36,9 +36,11 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("wave");
                extensions.push_back("mkv");
                extensions.push_back("avi");
+               extensions.push_back("divx");
                extensions.push_back("dat");
                extensions.push_back("flac");
                extensions.push_back("mp4");
+               extensions.push_back("m4a");
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
@@ -184,11 +186,10 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
        CONNECT(m_seekTimeout->timeout, eServiceMP3::seekTimeoutCB);
        CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
        GstElement *source = 0;
-       
-       GstElement *decoder = 0, *conv = 0, *flt = 0, *sink = 0; /* for audio */
-       
-       GstElement *audio = 0, *switch_audio = 0, *queue_audio = 0, *video = 0, *queue_video = 0, *videodemux = 0;
-       
+       GstElement *decoder = 0, *conv = 0, *flt = 0, *parser = 0, *sink = 0; /* for audio */
+       GstElement *audio = 0, *switch_audio = 0, *queue_audio = 0, *video = 0, *queue_video = 0, *videodemux = 0, *audiodemux = 0, *id3demux;
+       m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
+
        m_state = stIdle;
        eDebug("SERVICEMP3 construct!");
        
@@ -200,25 +201,50 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                ext = filename;
 
        sourceStream sourceinfo;
+       sourceinfo.is_video = FALSE;
+       sourceinfo.audiotype = atUnknown;
        if ( (strcasecmp(ext, ".mpeg") && strcasecmp(ext, ".mpg") && strcasecmp(ext, ".vob") && strcasecmp(ext, ".bin") && strcasecmp(ext, ".dat") ) == 0 )
+       {
                sourceinfo.containertype = ctMPEGPS;
+               sourceinfo.is_video = TRUE;
+       }
        else if ( strcasecmp(ext, ".ts") == 0 )
+       {
                sourceinfo.containertype = ctMPEGTS;
+               sourceinfo.is_video = TRUE;
+       }
        else if ( strcasecmp(ext, ".mkv") == 0 )
+       {
                sourceinfo.containertype = ctMKV;
-       else if ( strcasecmp(ext, ".avi") == 0 )
+               sourceinfo.is_video = TRUE;
+       }
+       else if ( strcasecmp(ext, ".avi") == 0 || strcasecmp(ext, ".divx") == 0)
+       {
                sourceinfo.containertype = ctAVI;
+               sourceinfo.is_video = TRUE;
+       }
        else if ( strcasecmp(ext, ".mp4") == 0 )
+       {
+               sourceinfo.containertype = ctMP4;
+               sourceinfo.is_video = TRUE;
+       }
+       else if ( strcasecmp(ext, ".m4a") == 0 )
+       {
                sourceinfo.containertype = ctMP4;
+               sourceinfo.audiotype = atAAC;
+       }
+       else if ( strcasecmp(ext, ".mp3") == 0 )
+               sourceinfo.audiotype = atMP3;
        else if ( (strncmp(filename, "/autofs/", 8) || strncmp(filename+strlen(filename)-13, "/track-", 7) || strcasecmp(ext, ".wav")) == 0 )
                sourceinfo.containertype = ctCDA;
        if ( strcasecmp(ext, ".dat") == 0 )
+       {
                sourceinfo.containertype = ctVCD;
+               sourceinfo.is_video = TRUE;
+       }
        if ( (strncmp(filename, "http://", 7)) == 0 )
                sourceinfo.is_streaming = TRUE;
 
-       sourceinfo.is_video = ( sourceinfo.containertype && sourceinfo.containertype != ctCDA );
-
        eDebug("filename=%s, containertype=%d, is_video=%d, is_streaming=%d", filename, sourceinfo.containertype, sourceinfo.is_video, sourceinfo.is_streaming);
 
        int all_ok = 0;
@@ -250,10 +276,24 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                        if (track > 0)
                                g_object_set (G_OBJECT (source), "track", track, NULL);
                }
-               else
-                       sourceinfo.containertype = ctNone;
        }
-       if ( !sourceinfo.is_streaming && sourceinfo.containertype != ctCDA )
+       else if ( sourceinfo.containertype == ctVCD )
+       {
+               int fd = open(filename,O_RDONLY);
+               char tmp[128*1024];
+               int ret = read(fd, tmp, 128*1024);
+               close(fd);
+               if ( ret == -1 ) // this is a "REAL" VCD
+               {
+                       source = gst_element_factory_make ("vcdsrc", "vcd-source");
+                       if (source)
+                       {
+                               g_object_set (G_OBJECT (source), "device", "/dev/cdroms/cdrom0", NULL);
+                               eDebug("servicemp3: this is a 'REAL' video cd... we use vcdsrc !");
+                       }
+               }
+       }
+       if ( !source && !sourceinfo.is_streaming )
        {
                source = gst_element_factory_make ("filesrc", "file-source");
                if (source)
@@ -269,7 +309,7 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                audio = gst_element_factory_make("dvbaudiosink", "audiosink");
                if (!audio)
                        m_error_message += "failed to create Gstreamer element dvbaudiosink\n";
-               
+
                video = gst_element_factory_make("dvbvideosink", "videosink");
                if (!video)
                        m_error_message += "failed to create Gstreamer element dvbvideosink\n";
@@ -320,35 +360,105 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                }
        } else /* is audio */
        {
-
-                       /* filesrc -> decodebin -> audioconvert -> capsfilter -> alsasink */
-               decoder = gst_element_factory_make ("decodebin", "decoder");
-               if (!decoder)
-                       m_error_message += "failed to create Gstreamer element decodebin\n";
-
-               conv = gst_element_factory_make ("audioconvert", "converter");
-               if (!conv)
-                       m_error_message += "failed to create Gstreamer element audioconvert\n";
-
-               flt = gst_element_factory_make ("capsfilter", "flt");
-               if (!flt)
-                       m_error_message += "failed to create Gstreamer element capsfilter\n";
-
-                       /* for some reasons, we need to set the sample format to depth/width=16, because auto negotiation doesn't work. */
-                       /* endianness, however, is not required to be set anymore. */
-               if (flt)
+               std::string demux_type;
+               switch ( sourceinfo.containertype )
                {
-                       GstCaps *caps = gst_caps_new_simple("audio/x-raw-int", /* "endianness", G_TYPE_INT, 4321, */ "depth", G_TYPE_INT, 16, "width", G_TYPE_INT, 16, /*"channels", G_TYPE_INT, 2, */NULL);
-                       g_object_set (G_OBJECT (flt), "caps", caps, NULL);
-                       gst_caps_unref(caps);
+                       case ctMP4:
+                               demux_type = "qtdemux";
+                               break;
+                       default:
+                               break;
+               }
+               if ( demux_type.length() )
+               {
+                       audiodemux = gst_element_factory_make(demux_type.c_str(), "audiodemux");
+                       if (!audiodemux)
+                               m_error_message = "GStreamer plugin " + demux_type + " not available!\n";
+               }
+               switch ( sourceinfo.audiotype )
+               {
+                       case atMP3:
+                       {
+                               id3demux = gst_element_factory_make("id3demux", "id3demux");
+                               if ( !id3demux )
+                               {
+                                       m_error_message += "failed to create Gstreamer element id3demux\n";
+                                       break;
+                               }
+                               parser = gst_element_factory_make("mp3parse", "audiosink");
+                               if ( !parser )
+                               {
+                                       m_error_message += "failed to create Gstreamer element mp3parse\n";
+                                       break;
+                               }
+                               sink = gst_element_factory_make("dvbaudiosink", "audiosink2");
+                               if ( !sink )
+                                       m_error_message += "failed to create Gstreamer element dvbaudiosink\n";
+                               else
+                                       all_ok = 1;
+                               break;
+                       }
+                       case atAAC:
+                       {
+                               if ( !audiodemux )
+                               {
+                                       m_error_message += "cannot parse raw AAC audio\n";
+                                       break;
+                               }
+                               sink = gst_element_factory_make("dvbaudiosink", "audiosink");
+                               if (!sink)
+                                       m_error_message += "failed to create Gstreamer element dvbaudiosink\n";
+                               else
+                                       all_ok = 1;
+                               break;
+                       }
+                       case atAC3:
+                       {
+                               if ( !audiodemux )
+                               {
+                                       m_error_message += "cannot parse raw AC3 audio\n";
+                                       break;
+                               }
+                               sink = gst_element_factory_make("dvbaudiosink", "audiosink");
+                               if ( !sink )
+                                       m_error_message += "failed to create Gstreamer element dvbaudiosink\n";
+                               else
+                                       all_ok = 1;
+                               break;
+                       }
+                       default:
+                       {       /* filesrc -> decodebin -> audioconvert -> capsfilter -> alsasink */
+                               decoder = gst_element_factory_make ("decodebin", "decoder");
+                               if (!decoder)
+                                       m_error_message += "failed to create Gstreamer element decodebin\n";
+               
+                               conv = gst_element_factory_make ("audioconvert", "converter");
+                               if (!conv)
+                                       m_error_message += "failed to create Gstreamer element audioconvert\n";
+               
+                               flt = gst_element_factory_make ("capsfilter", "flt");
+                               if (!flt)
+                                       m_error_message += "failed to create Gstreamer element capsfilter\n";
+               
+                                       /* for some reasons, we need to set the sample format to depth/width=16, because auto negotiation doesn't work. */
+                                       /* endianness, however, is not required to be set anymore. */
+                               if (flt)
+                               {
+                                       GstCaps *caps = gst_caps_new_simple("audio/x-raw-int", /* "endianness", G_TYPE_INT, 4321, */ "depth", G_TYPE_INT, 16, "width", G_TYPE_INT, 16, /*"channels", G_TYPE_INT, 2, */NULL);
+                                       g_object_set (G_OBJECT (flt), "caps", caps, NULL);
+                                       gst_caps_unref(caps);
+                               }
+               
+                               sink = gst_element_factory_make ("alsasink", "alsa-output");
+                               if (!sink)
+                                       m_error_message += "failed to create Gstreamer element alsasink\n";
+               
+                               if (source && decoder && conv && sink)
+                                       all_ok = 1;
+                               break;
+                       }
                }
 
-               sink = gst_element_factory_make ("alsasink", "alsa-output");
-               if (!sink)
-                       m_error_message += "failed to create Gstreamer element alsasink\n";
-
-               if (source && decoder && conv && sink)
-                       all_ok = 1;
        }
        if (m_gst_pipeline && all_ok)
        {
@@ -384,8 +494,9 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                        }
                        gst_bin_add_many(GST_BIN(m_gst_pipeline), source, videodemux, audio, queue_audio, video, queue_video, switch_audio, NULL);
 
-                       if ( sourceinfo.containertype == ctVCD )
+                       if ( sourceinfo.containertype == ctVCD && gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source") )
                        {
+                               eDebug("servicemp3: this is a fake video cd... we use filesrc ! cdxaparse !");
                                GstElement *cdxaparse = gst_element_factory_make("cdxaparse", "cdxaparse");
                                gst_bin_add(GST_BIN(m_gst_pipeline), cdxaparse);
                                gst_element_link(source, cdxaparse);
@@ -401,29 +512,52 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
 
                } else /* is audio*/
                {
-                       queue_audio = gst_element_factory_make("queue", "queue_audio");
-
-                       g_signal_connect (decoder, "new-decoded-pad", G_CALLBACK(gstCBnewPad), this);
-                       g_signal_connect (decoder, "unknown-type", G_CALLBACK(gstCBunknownType), this);
-
-                       g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL);
-
-                               /* gst_bin will take the 'floating references' */
-                       gst_bin_add_many (GST_BIN (m_gst_pipeline),
-                                               source, queue_audio, decoder, NULL);
-
-                               /* in decodebin's case we can just connect the source with the decodebin, and decodebin will take care about id3demux (or whatever is required) */
-                       gst_element_link_many(source, queue_audio, decoder, NULL);
-
-                               /* create audio bin with the audioconverter, the capsfilter and the audiosink */
-                       audio = gst_bin_new ("audiobin");
-
-                       GstPad *audiopad = gst_element_get_static_pad (conv, "sink");
-                       gst_bin_add_many(GST_BIN(audio), conv, flt, sink, NULL);
-                       gst_element_link_many(conv, flt, sink, NULL);
-                       gst_element_add_pad(audio, gst_ghost_pad_new ("sink", audiopad));
-                       gst_object_unref(audiopad);
-                       gst_bin_add (GST_BIN(m_gst_pipeline), audio);
+                       if ( decoder )
+                       {
+                               queue_audio = gst_element_factory_make("queue", "queue_audio");
+       
+                               g_signal_connect (decoder, "new-decoded-pad", G_CALLBACK(gstCBnewPad), this);
+                               g_signal_connect (decoder, "unknown-type", G_CALLBACK(gstCBunknownType), this);
+       
+                               g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL);
+       
+                                       /* gst_bin will take the 'floating references' */
+                               gst_bin_add_many (GST_BIN (m_gst_pipeline),
+                                                       source, queue_audio, decoder, NULL);
+       
+                                       /* in decodebin's case we can just connect the source with the decodebin, and decodebin will take care about id3demux (or whatever is required) */
+                               gst_element_link_many(source, queue_audio, decoder, NULL);
+       
+                                       /* create audio bin with the audioconverter, the capsfilter and the audiosink */
+                               audio = gst_bin_new ("audiobin");
+       
+                               GstPad *audiopad = gst_element_get_static_pad (conv, "sink");
+                               gst_bin_add_many(GST_BIN(audio), conv, flt, sink, NULL);
+                               gst_element_link_many(conv, flt, sink, NULL);
+                               gst_element_add_pad(audio, gst_ghost_pad_new ("sink", audiopad));
+                               gst_object_unref(audiopad);
+                               gst_bin_add (GST_BIN(m_gst_pipeline), audio);
+                       }
+                       else
+                       {
+                               gst_bin_add_many (GST_BIN (m_gst_pipeline), source, sink, NULL);
+                               if ( parser && id3demux )
+                               {
+                                       gst_bin_add_many (GST_BIN (m_gst_pipeline), parser, id3demux, NULL);
+                                       gst_element_link(source, id3demux);
+                                       g_signal_connect(id3demux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
+                                       gst_element_link(parser, sink);
+                               }
+                               if ( audiodemux )
+                               {
+                                       gst_bin_add (GST_BIN (m_gst_pipeline), audiodemux);
+                                       g_signal_connect(audiodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
+                                       gst_element_link(source, audiodemux);
+                               }
+                               audioStream audio;
+                               audio.type = sourceinfo.audiotype;
+                               m_audioStreams.push_back(audio);
+                       }
                }
        } else
        {
@@ -647,13 +781,13 @@ RESULT eServiceMP3::getPlayPosition(pts_t &pts)
                return -1;
        if (m_state != stRunning)
                return -1;
-       
+
        GstFormat fmt = GST_FORMAT_TIME;
        gint64 len;
        
        if (!gst_element_query_position(m_gst_pipeline, &fmt, &len))
                return -1;
-       
+
                /* len is in nanoseconds. we have 90 000 pts per second. */
        pts = len / 11111;
        return 0;
@@ -691,6 +825,11 @@ int eServiceMP3::getInfo(int w)
 
        switch (w)
        {
+       case sVideoHeight: return m_height;
+       case sVideoWidth: return m_width;
+       case sFrameRate: return m_framerate;
+       case sProgressive: return m_progressive;
+       case sAspect: return m_aspect;
        case sTitle:
        case sArtist:
        case sAlbum:
@@ -898,103 +1037,165 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
 #endif
        switch (GST_MESSAGE_TYPE (msg))
        {
-       case GST_MESSAGE_EOS:
-               m_event((iPlayableService*)this, evEOF);
-               break;
-       case GST_MESSAGE_ERROR:
-       {
-               gchar *debug;
-               GError *err;
-
-               gst_message_parse_error (msg, &err, &debug);
-               g_free (debug);
-               eWarning("Gstreamer error: %s (%i)", err->message, err->code );
-               if ( err->domain == GST_STREAM_ERROR && err->code == GST_STREAM_ERROR_DECODE )
+               case GST_MESSAGE_EOS:
+                       m_event((iPlayableService*)this, evEOF);
+                       break;
+               case GST_MESSAGE_ERROR:
                {
-                       if ( g_strrstr(sourceName, "videosink") )
-                               m_event((iPlayableService*)this, evUser+11);
+                       gchar *debug;
+                       GError *err;
+       
+                       gst_message_parse_error (msg, &err, &debug);
+                       g_free (debug);
+                       eWarning("Gstreamer error: %s (%i) from %s", err->message, err->code, sourceName );
+                       if ( err->domain == GST_STREAM_ERROR )
+                       {
+                               if ( err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND && g_strrstr(sourceName, "videosink") )
+                                       m_event((iPlayableService*)this, evUser+11);
+                               else if ( err->code == GST_STREAM_ERROR_FAILED && g_strrstr(sourceName, "file-source") )
+                               {
+                                       eWarning("error in tag parsing, linking mp3parse directly to file-sink, bypassing id3demux...");
+                                       GstElement *source = gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source");
+                                       GstElement *parser = gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"audiosink");
+                                       gst_element_set_state(m_gst_pipeline, GST_STATE_NULL);
+                                       gst_element_unlink(source, gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"id3demux"));
+                                       gst_element_link(source, parser);
+                                       gst_element_set_state (m_gst_pipeline, GST_STATE_PLAYING);
+                               }
+                       }
+                       g_error_free(err);
+                       break;
                }
-               g_error_free(err);
-                       /* TODO: signal error condition to user */
-               break;
-       }
-       case GST_MESSAGE_TAG:
-       {
-               GstTagList *tags, *result;
-               gst_message_parse_tag(msg, &tags);
-
-               result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_PREPEND);
-               if (result)
+               case GST_MESSAGE_INFO:
                {
-                       if (m_stream_tags)
-                               gst_tag_list_free(m_stream_tags);
-                       m_stream_tags = result;
+                       gchar *debug;
+                       GError *inf;
+       
+                       gst_message_parse_info (msg, &inf, &debug);
+                       g_free (debug);
+                       if ( inf->domain == GST_STREAM_ERROR && inf->code == GST_STREAM_ERROR_DECODE )
+                       {
+                               if ( g_strrstr(sourceName, "videosink") )
+                                       m_event((iPlayableService*)this, evUser+14);
+                       }
+                       g_error_free(inf);
+                       break;
                }
-
-               gchar *g_audiocodec;
-               if ( gst_tag_list_get_string(tags, GST_TAG_AUDIO_CODEC, &g_audiocodec) && m_audioStreams.size() == 0 )
+               case GST_MESSAGE_TAG:
                {
-                       GstPad* pad = gst_element_get_pad (GST_ELEMENT(source), "src");
-                       GstCaps* caps = gst_pad_get_caps(pad);
-                       GstStructure* str = gst_caps_get_structure(caps, 0);
-                       if ( !str )
-                               break;
-                       audioStream audio;
-                       audio.type = gstCheckAudioPad(str);
-                       m_audioStreams.push_back(audio);
+                       GstTagList *tags, *result;
+                       gst_message_parse_tag(msg, &tags);
+       
+                       result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_PREPEND);
+                       if (result)
+                       {
+                               if (m_stream_tags)
+                                       gst_tag_list_free(m_stream_tags);
+                               m_stream_tags = result;
+                       }
+       
+                       gchar *g_audiocodec;
+                       if ( gst_tag_list_get_string(tags, GST_TAG_AUDIO_CODEC, &g_audiocodec) && m_audioStreams.size() == 0 )
+                       {
+                               GstPad* pad = gst_element_get_pad (GST_ELEMENT(source), "src");
+                               GstCaps* caps = gst_pad_get_caps(pad);
+                               GstStructure* str = gst_caps_get_structure(caps, 0);
+                               if ( !str )
+                                       break;
+                               audioStream audio;
+                               audio.type = gstCheckAudioPad(str);
+                               m_audioStreams.push_back(audio);
+                       }
+       
+                       const GValue *gv_image = gst_tag_list_get_value_index(tags, GST_TAG_IMAGE, 0);
+                       if ( gv_image )
+                       {
+                               GstBuffer *buf_image;
+                               buf_image = gst_value_get_buffer (gv_image);
+                               int fd = open("/tmp/.id3coverart", O_CREAT|O_WRONLY|O_TRUNC, 0644);
+                               write(fd, GST_BUFFER_DATA(buf_image), GST_BUFFER_SIZE(buf_image));
+                               close(fd);
+                               m_event((iPlayableService*)this, evUser+13);
+                       }
+       
+                       gst_tag_list_free(tags);
+                       m_event((iPlayableService*)this, evUpdatedInfo);
+                       break;
                }
-
-               gst_tag_list_free(tags);
-               m_event((iPlayableService*)this, evUpdatedInfo);
-               break;
-       }
-       case GST_MESSAGE_ASYNC_DONE:
-       {
-               GstTagList *tags;
-               for (std::vector<audioStream>::iterator IterAudioStream(m_audioStreams.begin()); IterAudioStream != m_audioStreams.end(); ++IterAudioStream)
+               case GST_MESSAGE_ASYNC_DONE:
                {
-                       if ( IterAudioStream->pad )
+                       GstTagList *tags;
+                       for (std::vector<audioStream>::iterator IterAudioStream(m_audioStreams.begin()); IterAudioStream != m_audioStreams.end(); ++IterAudioStream)
                        {
-                               g_object_get(IterAudioStream->pad, "tags", &tags, NULL);
-                               gchar *g_language;
-                               if ( gst_is_tag_list(tags) && gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_language) )
+                               if ( IterAudioStream->pad )
                                {
-                                       eDebug("found audio language %s",g_language);
-                                       IterAudioStream->language_code = std::string(g_language);
-                                       g_free (g_language);
+                                       g_object_get(IterAudioStream->pad, "tags", &tags, NULL);
+                                       gchar *g_language;
+                                       if ( tags && gst_is_tag_list(tags) && gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_language) )
+                                       {
+                                               eDebug("found audio language %s",g_language);
+                                               IterAudioStream->language_code = std::string(g_language);
+                                               g_free (g_language);
+                                       }
                                }
                        }
-               }
-               for (std::vector<subtitleStream>::iterator IterSubtitleStream(m_subtitleStreams.begin()); IterSubtitleStream != m_subtitleStreams.end(); ++IterSubtitleStream)
-               {
-                       if ( IterSubtitleStream->pad )
+                       for (std::vector<subtitleStream>::iterator IterSubtitleStream(m_subtitleStreams.begin()); IterSubtitleStream != m_subtitleStreams.end(); ++IterSubtitleStream)
                        {
-                               g_object_get(IterSubtitleStream->pad, "tags", &tags, NULL);
-                               gchar *g_language;
-                               if ( gst_is_tag_list(tags) && gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_language) )
+                               if ( IterSubtitleStream->pad )
                                {
-                                       eDebug("found subtitle language %s",g_language);
-                                       IterSubtitleStream->language_code = std::string(g_language);
-                                       g_free (g_language);
+                                       g_object_get(IterSubtitleStream->pad, "tags", &tags, NULL);
+                                       gchar *g_language;
+                                       if ( tags && gst_is_tag_list(tags) && gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_language) )
+                                       {
+                                               eDebug("found subtitle language %s",g_language);
+                                               IterSubtitleStream->language_code = std::string(g_language);
+                                               g_free (g_language);
+                                       }
                                }
                        }
                }
-       }
-        case GST_MESSAGE_ELEMENT:
-       {
-               if ( gst_is_missing_plugin_message(msg) )
+               case GST_MESSAGE_ELEMENT:
                {
-                       gchar *description = gst_missing_plugin_message_get_description(msg);                   
-                       if ( description )
+                       if ( gst_is_missing_plugin_message(msg) )
+                       {
+                               gchar *description = gst_missing_plugin_message_get_description(msg);
+                               if ( description )
+                               {
+                                       m_error_message = "GStreamer plugin " + (std::string)description + " not available!\n";
+                                       g_free(description);
+                                       m_event((iPlayableService*)this, evUser+12);
+                               }
+                       }
+                       else if (const GstStructure *msgstruct = gst_message_get_structure(msg))
                        {
-                               m_error_message = "GStreamer plugin " + (std::string)description + " not available!\n";
-                               g_free(description);
-                               m_event((iPlayableService*)this, evUser+12);
+                               const gchar *eventname = gst_structure_get_name(msgstruct);
+                               if ( eventname )
+                               {
+                                       if (!strcmp(eventname, "eventSizeChanged") || !strcmp(eventname, "eventSizeAvail"))
+                                       {
+                                               gst_structure_get_int (msgstruct, "aspect_ratio", &m_aspect);
+                                               gst_structure_get_int (msgstruct, "width", &m_width);
+                                               gst_structure_get_int (msgstruct, "height", &m_height);
+                                               if (strstr(eventname, "Changed"))
+                                                       m_event((iPlayableService*)this, evVideoSizeChanged);
+                                       }
+                                       else if (!strcmp(eventname, "eventFrameRateChanged") || !strcmp(eventname, "eventFrameRateAvail"))
+                                       {
+                                               gst_structure_get_int (msgstruct, "frame_rate", &m_framerate);
+                                               if (strstr(eventname, "Changed"))
+                                                       m_event((iPlayableService*)this, evVideoFramerateChanged);
+                                       }
+                                       else if (!strcmp(eventname, "eventProgressiveChanged") || !strcmp(eventname, "eventProgressiveAvail"))
+                                       {
+                                               gst_structure_get_int (msgstruct, "progressive", &m_progressive);
+                                               if (strstr(eventname, "Changed"))
+                                                       m_event((iPlayableService*)this, evVideoProgressiveChanged);
+                                       }
+                               }
                        }
                }
-       }
-       default:
-               break;
+               default:
+                       break;
        }
        g_free (sourceName);
 }
@@ -1081,8 +1282,14 @@ void eServiceMP3::gstCBpadAdded(GstElement *decodebin, GstPad *pad, gpointer use
                }
                else
                {
-                       gst_pad_link(pad, gst_element_get_static_pad(gst_bin_get_by_name(pipeline,"queue_audio"), "sink"));
-                       _this->m_audioStreams.push_back(audio);
+                       GstElement *queue_audio = gst_bin_get_by_name(pipeline , "queue_audio");
+                       if ( queue_audio )
+                       {
+                               gst_pad_link(pad, gst_element_get_static_pad(queue_audio, "sink"));
+                               _this->m_audioStreams.push_back(audio);
+                       }
+                       else
+                               gst_pad_link(pad, gst_element_get_static_pad(gst_bin_get_by_name(pipeline , "audiosink"), "sink"));
                }
        }
        if (g_strrstr(type,"video"))
@@ -1232,14 +1439,17 @@ eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::servi
 void eServiceMP3::gstCBsubtitleAvail(GstElement *element, GstBuffer *buffer, GstPad *pad, gpointer user_data)
 {
        gint64 duration_ns = GST_BUFFER_DURATION(buffer);
-       const unsigned char *text = (unsigned char *)GST_BUFFER_DATA(buffer);
-       eDebug("gstCBsubtitleAvail: %s",text);
+       size_t len = GST_BUFFER_SIZE(buffer);
+       unsigned char tmp[len+1];
+       memcpy(tmp, GST_BUFFER_DATA(buffer), len);
+       tmp[len] = 0;
+       eDebug("gstCBsubtitleAvail: %s", tmp);
        eServiceMP3 *_this = (eServiceMP3*)user_data;
        if ( _this->m_subtitle_widget )
        {
                ePangoSubtitlePage page;
                gRGB rgbcol(0xD0,0xD0,0xD0);
-               page.m_elements.push_back(ePangoSubtitlePageElement(rgbcol, (const char*)text));
+               page.m_elements.push_back(ePangoSubtitlePageElement(rgbcol, (const char*)tmp));
                page.m_timeout = duration_ns / 1000000;
                (_this->m_subtitle_widget)->setPage(page);
        }
index a43c8ad95897d96c1d147d6293260233cc46dc56..5e706e9be09f7ca1097a3f59ef61c91bd3eaa3c4 100644 (file)
@@ -180,6 +180,7 @@ private:
        static void gstCBsubtitlePadEvent(GstPad *pad, GstEvent *event, gpointer user_data);
        GstPad* gstCreateSubtitleSink(eServiceMP3* _this, subtype_t type);
        void gstPoll(const int&);
+       gint m_aspect, m_width, m_height, m_framerate, m_progressive;
 };
 #endif
 
index 173a2cce00e68bfb38e7b1105e81b669ece7e442..583107d78f1312b1b5682ea963ffc607386df641 100644 (file)
@@ -67,7 +67,7 @@ extern std::string getLogBuffer();
 
 #define INFOFILE "/maintainer.info"
 
-void bsodFatal()
+void bsodFatal(const char *component)
 {
        char logfile[128];
        sprintf(logfile, "/media/hdd/enigma2_crash_%u.log", (unsigned int)time(0));
@@ -81,30 +81,35 @@ void bsodFatal()
        char crash_emailaddr[256] = CRASH_EMAILADDR;
        char crash_component[256] = "enigma2";
 
-       while ((start = lines.find("\n  File \"", start)) != std::string::npos)
+       if (component)
+               snprintf(crash_component, 256, component);
+       else
        {
-               start += 9;
-               size_t end = lines.find("\"", start);
-               if (end == std::string::npos)
-                       break;
-               end = lines.rfind("/", end);
-               if (end == std::string::npos)
-                       break;
-               if (end - start >= (256 - strlen(INFOFILE)))
-                       continue;
-               char filename[256];
-               snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE);
-               FILE *cf = fopen(filename, "r");
-               if (cf)
+               while ((start = lines.find("\n  File \"", start)) != std::string::npos)
                {
-                       fgets(crash_emailaddr, sizeof crash_emailaddr, cf);
-                       if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n')
-                               crash_emailaddr[strlen(crash_emailaddr)-1] = 0;
+                       start += 9;
+                       size_t end = lines.find("\"", start);
+                       if (end == std::string::npos)
+                               break;
+                       end = lines.rfind("/", end);
+                       if (end == std::string::npos)
+                               break;
+                       if (end - start >= (256 - strlen(INFOFILE)))
+                               continue;
+                       char filename[256];
+                       snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE);
+                       FILE *cf = fopen(filename, "r");
+                       if (cf)
+                       {
+                               fgets(crash_emailaddr, sizeof crash_emailaddr, cf);
+                               if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n')
+                                       crash_emailaddr[strlen(crash_emailaddr)-1] = 0;
 
-                       fgets(crash_component, sizeof crash_component, cf);
-                       if (*crash_component && crash_component[strlen(crash_component)-1] == '\n')
-                               crash_component[strlen(crash_component)-1] = 0;
-                       fclose(cf);
+                               fgets(crash_component, sizeof crash_component, cf);
+                               if (*crash_component && crash_component[strlen(crash_component)-1] == '\n')
+                                       crash_component[strlen(crash_component)-1] = 0;
+                               fclose(cf);
+                       }
                }
        }
 
@@ -242,7 +247,7 @@ void handleFatalSignal(int signum, siginfo_t *si, void *ctx)
        oops(uc->uc_mcontext, signum == SIGSEGV || signum == SIGABRT);
 #endif
        eDebug("-------");
-       bsodFatal();
+       bsodFatal("enigma2, signal");
 }
 
 void bsodCatchSignals()
index aa8cfb741778f8f819a8fcad84e1b8d76f4d4dc6..4ee4c48b19fad8099edfd8ee6a073684431e7bce 100644 (file)
@@ -3,6 +3,6 @@
 
 void bsodLogInit();
 void bsodCatchSignals();
-void bsodFatal();
+void bsodFatal(const char *component);
 
 #endif
index aa562399cd4081dc75a89e08a73cb6d073870519..1eaedb769e12636b923a948e158ec974ea553f36 100644 (file)
@@ -45,9 +45,9 @@ public:
                
                fesat.frequency = 12070000;
                fesat.symbol_rate = 27500000;
-               fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation::Horizontal;
-               fesat.fec = eDVBFrontendParametersSatellite::FEC::f3_4;
-               fesat.inversion = eDVBFrontendParametersSatellite::Inversion::Off;
+               fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation_Horizontal;
+               fesat.fec = eDVBFrontendParametersSatellite::FEC_3_4;
+               fesat.inversion = eDVBFrontendParametersSatellite::Inversion_Off;
                fesat.orbital_position = 192;
 
                eDVBFrontendParameters *fe = new eDVBFrontendParameters();
index 4233c0dc024ca9d5d91793d84750818f6252577b..208b15fd6c3df7e372a27b7c21713aea992996a2 100644 (file)
@@ -43,9 +43,9 @@ public:
                
                fesat.frequency = 11817000; // 12070000;
                fesat.symbol_rate = 27500000;
-               fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation::Vertical;
-               fesat.fec = eDVBFrontendParametersSatellite::FEC::f3_4;
-               fesat.inversion = eDVBFrontendParametersSatellite::Inversion::Off;
+               fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation_Vertical;
+               fesat.fec = eDVBFrontendParametersSatellite::FEC_3_4;
+               fesat.inversion = eDVBFrontendParametersSatellite::Inversion_Off;
                fesat.orbital_position = 192;
 
                eDVBFrontendParameters *fe = new eDVBFrontendParameters();
index 0893b035f74cb4cbf814f8ccfbb1f95579022ba9..98175c49425f927a358a41f8d1471f04b96ab328 100644 (file)
@@ -248,7 +248,7 @@ int main(int argc, char **argv)
        if (exit_code == 5) /* python crash */
        {
                eDebug("(exit code 5)");
-               bsodFatal();
+               bsodFatal(0);
        }
        
        dsk.paint();
index 88c035abecd0114d86bc1c66a3076dbe217c3484..8f23beacb1119d619b54c9422251ab2d698aa20e 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -42,13 +42,14 @@ from skin import readSkin
 
 profile("LOAD:Tools")
 from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
-from Components.config import config, configfile, ConfigText
+from Components.config import config, configfile, ConfigText, ConfigYesNo
 InitFallbackFiles()
 
 profile("ReloadProfiles")
 eDVBDB.getInstance().reloadBouquets()
 
 config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi")
+config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
 
 profile("Twisted")
 try:
@@ -276,7 +277,7 @@ class Session:
 
        def open(self, screen, *arguments, **kwargs):
                if len(self.dialog_stack) and not self.in_exec:
-                       raise "modal open are allowed only from a screen which is modal!"
+                       raise RuntimeError("modal open are allowed only from a screen which is modal!")
                        # ...unless it's the very first screen.
 
                self.pushCurrent()
@@ -320,7 +321,6 @@ class Session:
 profile("Standby,PowerKey")
 import Screens.Standby
 from Screens.Menu import MainMenu, mdom
-import xml.dom.minidom
 from GlobalActions import globalActionMap
 
 class PowerKey:
@@ -349,21 +349,16 @@ class PowerKey:
                        self.shutdown()
                elif action == "show_menu":
                        print "Show shutdown Menu"
-                       menu = mdom.childNodes[0]
-                       for x in menu.childNodes:
-                               if x.nodeType != xml.dom.minidom.Element.nodeType:
-                                   continue
-                               elif x.tagName == 'menu':
-                                       for y in x.childNodes:
-                                               if y.nodeType != xml.dom.minidom.Element.nodeType:
-                                                       continue
-                                               elif y.tagName == 'id':
-                                                       id = y.getAttribute("val")
-                                                       if id and id == "shutdown":
-                                                               self.session.infobar = self
-                                                               menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x, x.childNodes)
-                                                               menu_screen.setTitle(_("Standby / Restart"))
-                                                               return
+                       root = mdom.getroot()
+                       for x in root.findall("menu"):
+                               y = x.find("id")
+                               if y is not None:
+                                       id = y.get("val")
+                                       if id and id == "shutdown":
+                                               self.session.infobar = self
+                                               menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x)
+                                               menu_screen.setTitle(_("Standby / Restart"))
+                                               return
 
        def powerdown(self):
                self.standbyblocked = 0
@@ -415,7 +410,8 @@ def runScreenTest():
        plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
        profile("Init:Session")
-       session = Session(desktop = getDesktop(0), summary_desktop = getDesktop(1), navigation = Navigation())
+       nav = Navigation(config.misc.isNextRecordTimerAfterEventActionAuto.value)
+       session = Session(desktop = getDesktop(0), summary_desktop = getDesktop(1), navigation = nav)
 
        CiHandler.setSession(session)
 
@@ -464,8 +460,6 @@ def runScreenTest():
        profile("RunReactor")
        profile_final()
        runReactor()
-       profile("configfile.save")
-       configfile.save()
 
        profile("wakeup")
        from time import time
@@ -473,25 +467,32 @@ def runScreenTest():
        #get currentTime
        nowTime = time()
        wakeupList = [
-               x for x in
-                               [session.nav.RecordTimer.getNextRecordingTime(),
-                               session.nav.RecordTimer.getNextZapTime(),
-                               plugins.getNextWakeupTime()]
-               if x != -1
+               x for x in ((session.nav.RecordTimer.getNextRecordingTime(), 0, session.nav.RecordTimer.isNextRecordAfterEventActionAuto()),
+                                       (session.nav.RecordTimer.getNextZapTime(), 1),
+                                       (plugins.getNextWakeupTime(), 2))
+               if x[0] != -1
        ]
        wakeupList.sort()
+       recordTimerWakeupAuto = False
        if len(wakeupList):
                startTime = wakeupList.pop(0)
-               if (startTime - nowTime) < 330: # no time to switch box back on
+               if (startTime[0] - nowTime) < 330: # no time to switch box back on
                        wptime = nowTime + 30  # so switch back on in 30 seconds
                else:
-                       wptime = startTime - 300
+                       wptime = startTime[0] - 300
                setFPWakeuptime(wptime)
+               recordTimerWakeupAuto = startTime[1] == 0 and startTime[2]
+       config.misc.isNextRecordTimerAfterEventActionAuto.value = recordTimerWakeupAuto
+       config.misc.isNextRecordTimerAfterEventActionAuto.save()
+
        profile("stopService")
        session.nav.stopService()
        profile("nav shutdown")
        session.nav.shutdown()
 
+       profile("configfile.save")
+       configfile.save()
+
        return 0
 
 profile("Init:skin")
index 027279309f033286172b4bcba461f592d77761cd..26518b5696c55c3314835ebca2bd83d698a8be58 100644 (file)
@@ -5,7 +5,7 @@ GETTEXT=xgettext
 #MSGFMT = ./msgfmt.py
 MSGFMT = msgfmt
 
-LANGS := de en ar nl es is it da sv no fr fi tr ca cs hr hu ru pt el lt pl uk
+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
 LANGPO := $(foreach LANG, $(LANGS),$(LANG).po)
 LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo)
 
index 51720f332b1f527384eacdbc92c718ddff084ead..83c3c5ac268d7c0518b6492aa10ec77718b9c5c6 100755 (executable)
--- a/po/ar.po
+++ b/po/ar.po
@@ -355,7 +355,7 @@ msgid ""
 "Refer to your dreambox's manual on how to do that."
 msgstr ""
 
-msgid "Album:"
+msgid "Album"
 msgstr ""
 
 msgid "All"
@@ -395,7 +395,7 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
+msgid "Artist"
 msgstr ""
 
 msgid "Ask before shutdown:"
@@ -1281,7 +1281,7 @@ msgstr ""
 msgid "Gateway"
 msgstr ""
 
-msgid "Genre:"
+msgid "Genre"
 msgstr ""
 
 msgid "German"
@@ -3081,13 +3081,10 @@ msgstr ""
 msgid "Timezone"
 msgstr "منطقه الوقت"
 
-msgid "Title"
-msgstr ""
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
+msgid "Title"
 msgstr ""
 
 msgid "Titleset mode"
@@ -3430,7 +3427,7 @@ msgstr ""
 msgid "YPbPr"
 msgstr ""
 
-msgid "Year:"
+msgid "Year"
 msgstr ""
 
 msgid "Yes"
@@ -4366,9 +4363,6 @@ msgstr "اسبوعى"
 msgid "whitelist"
 msgstr ""
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "نعـم"
 
index 1fb6ad34c7b9a048affe355af487f8770b115f9d..2ab753cefcc13ad3f36b28d3993b1a7904aa872b 100755 (executable)
--- a/po/ca.po
+++ b/po/ca.po
@@ -1,9 +1,9 @@
-# translation of ca.po to\r
-# Copyright (C) 2006 THE tuxbox-enigma'S COPYRIGHT HOLDER\r
-# This file is distributed under the same license as the tuxbox-enigma package.\r
-# \r
-# Automatically generated, 2006.\r
-# Oriol Pellicer i Sabrià <oriol@elsud.org>, 2006, 2007.\r
+# 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"
@@ -382,8 +382,8 @@ msgstr ""
 "Quan acabi aquest assistent caldrà protegir els canals desitjats. Mira el "
 "manual de la Dreambox per saber com fer-ho."
 
-msgid "Album:"
-msgstr "Àlbum:"
+msgid "Album"
+msgstr "Àlbum"
 
 msgid "All"
 msgstr "Tot"
@@ -422,8 +422,8 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
-msgstr "Artista:"
+msgid "Artist"
+msgstr "Artista"
 
 msgid "Ask before shutdown:"
 msgstr "Pregunta abans d'apagar:"
@@ -1329,8 +1329,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Enrutador"
 
-msgid "Genre:"
-msgstr "Gènere:"
+msgid "Genre"
+msgstr "Gènere"
 
 msgid "German"
 msgstr "Alemany"
@@ -3166,14 +3166,11 @@ msgid "Timezone"
 msgstr "Zona horària"
 
 msgid "Title"
-msgstr ""
+msgstr "Títol"
 
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Títol:"
-
 msgid "Titleset mode"
 msgstr ""
 
@@ -3527,8 +3524,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Any:"
+msgid "Year"
+msgstr "Any"
 
 msgid "Yes"
 msgstr "Si"
@@ -4496,9 +4493,6 @@ msgstr "setmanalment"
 msgid "whitelist"
 msgstr "llista blanca"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "si"
 
index 14496784b459c4b020726d9ef00c47e1e55bbc5e..82191eca909e537d77af29fd4c94fdb74682c2ca 100755 (executable)
--- a/po/cs.po
+++ b/po/cs.po
@@ -368,8 +368,8 @@ msgstr ""
 "Po skončení průvodce je potřeba ochránit jednotlivé programy. Podívejte se "
 "do manuálu jak to udělat."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Vše"
@@ -410,8 +410,8 @@ msgstr ""
 "Jste si jistý, že chcete síťové rozhraní?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Herec:"
+msgid "Artist"
+msgstr "Herec"
 
 msgid "Ask before shutdown:"
 msgstr "Zeptat se před vypnutím:"
@@ -1318,8 +1318,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Brána"
 
-msgid "Genre:"
-msgstr "Žánr:"
+msgid "Genre"
+msgstr "Žánr"
 
 msgid "German"
 msgstr "Německy"
@@ -3202,9 +3202,6 @@ msgstr "Titul"
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Název:"
-
 msgid "Titleset mode"
 msgstr ""
 
@@ -3565,8 +3562,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Rok:"
+msgid "Year"
+msgstr "Rok"
 
 msgid "Yes"
 msgstr "Ano"
@@ -4536,9 +4533,6 @@ msgstr "týdně"
 msgid "whitelist"
 msgstr "bílá listina"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "ano"
 
old mode 100755 (executable)
new mode 100644 (file)
index 30a6c97..115b0f3
--- a/po/da.po
+++ b/po/da.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
-"PO-Revision-Date: 2008-10-23 19:33+0100\n"
+"POT-Creation-Date: 2008-11-26 14:56+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"
 "MIME-Version: 1.0\n"
@@ -87,17 +87,14 @@ msgid "(show optional DVD audio menu)"
 msgstr "(Vis ekstra DVD lyd menu)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Kun tilgængelig hvis mere end et interface er aktivt."
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
+msgstr "* Kun tilgængelig ved indtastning af skjult SSID eller netværks nøgle"
 
 msgid ".NFI Download failed:"
 msgstr ".NFI download fejlede:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ".NFI flash bootbar USB stick blev oprettet."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -377,8 +374,8 @@ msgstr ""
 "Efter start guiden er færdig, skal du beskytte enkelte kanaler. Se venligst "
 "i din DreamBox's manual hvordan du gør det."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Alle"
@@ -386,9 +383,6 @@ msgstr "Alle"
 msgid "All Satellites"
 msgstr "Alle satellitter"
 
-msgid "All..."
-msgstr "Alle..."
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -411,6 +405,8 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"Er du sikker på, at du vil aktivere denne netværks opsætning?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -419,8 +415,8 @@ msgstr ""
 "Er du sikker på at du vil genstarte dine interfaces?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Kunstner:"
+msgid "Artist"
+msgstr "Kunstner"
 
 msgid "Ask before shutdown:"
 msgstr "Spørg for slukning:"
@@ -525,7 +521,7 @@ msgid "Burn DVD"
 msgstr "Brænde DVD"
 
 msgid "Burn existing image to DVD"
-msgstr ""
+msgstr "Brænd eksisterende image til DVD"
 
 msgid "Burn to DVD..."
 msgstr "Brænd til DVD..."
@@ -689,7 +685,7 @@ msgid "Complete"
 msgstr "Færdig"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Kompleks (tillader blanding af lydspor og billedformater)"
 
 msgid "Configuration Mode"
 msgstr "Konfigurations Type"
@@ -734,9 +730,6 @@ msgstr "Fortsæt afspilning"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Kopierer USB flash boot imaget til stick..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Kunne ikke forbinde til Dreambox .NFI image feed serveren:"
 
@@ -744,7 +737,7 @@ msgid "Could not load Medium! No disc inserted?"
 msgstr "Kunne ikke indlæse media! Ingen disk isat?"
 
 msgid "Create DVD-ISO"
-msgstr ""
+msgstr "Opret DVD-ISO"
 
 msgid "Create movie folder failed"
 msgstr "Oprette Movie folder fejlede"
@@ -813,9 +806,6 @@ msgstr "Dansk"
 msgid "Date"
 msgstr "Dato"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Dekomprimerer USB stik flash boot image..."
-
 msgid "Deep Standby"
 msgstr "Afbryde"
 
@@ -943,9 +933,6 @@ msgstr ""
 "Vil du virkelig downloade\n"
 "pluginet \"%s\"?"
 
-msgid "Do you really want to exit?"
-msgstr "Ønsker du virkelig at afslutte?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -1037,9 +1024,6 @@ msgstr "Plugins der kan hentes"
 msgid "Downloading"
 msgstr "Henter"
 
-msgid "Downloading image description..."
-msgstr "Downloader image beskrivelse..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Henter plugin informationer. Vent venligst..."
 
@@ -1063,13 +1047,13 @@ msgid "East"
 msgstr "Øst"
 
 msgid "Edit"
-msgstr ""
+msgstr "Rediger"
 
 msgid "Edit DNS"
 msgstr "Ændre DNS"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Rediger titel"
 
 msgid "Edit chapters of current title"
 msgstr "Rediger kapitler i aktuel titel"
@@ -1117,14 +1101,11 @@ msgid "Encryption Key"
 msgstr "Kodnings Nøgle"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Kodnings nøgletype"
 
 msgid "Encryption Type"
 msgstr "Kodnings Type"
 
-msgid "End"
-msgstr "Slut"
-
 msgid "End time"
 msgstr "Stop tid"
 
@@ -1161,10 +1142,10 @@ msgid "Enter Rewind at speed"
 msgstr "Sæt Tilbagespolings hastighed"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Indtast WLAN netværks navn/SSID"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr ""
+msgstr "Indtast WLAN kodesætning/nøgle:"
 
 msgid "Enter main menu..."
 msgstr "Åbne hoved menu..."
@@ -1198,6 +1179,9 @@ msgstr "Kommando Status:"
 msgid "Execution finished!!"
 msgstr "Kommandoen udført!!"
 
+msgid "Exif"
+msgstr "Afslut"
+
 msgid "Exit"
 msgstr "Afslut"
 
@@ -1259,10 +1243,10 @@ msgid "Finished"
 msgstr "Færdig"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Afsluttede opsætning af dit netværk"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Afsluttede genstart af dit netværk"
 
 msgid "Finnish"
 msgstr "Finsk"
@@ -1271,9 +1255,6 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr "Først skal vi downloade seneste boot miljø for USB flash."
 
-msgid "Fix USB stick"
-msgstr "Klargør USB stick"
-
 msgid "Flash"
 msgstr "Flash"
 
@@ -1289,6 +1270,9 @@ msgstr "Formatere"
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Billed gentagelses tæller ved hurtig spoling"
 
+msgid "Frame size in full view"
+msgstr "Billed størrelse i fuld "
+
 msgid "French"
 msgstr "Fransk"
 
@@ -1310,6 +1294,9 @@ msgstr "Fre"
 msgid "Friday"
 msgstr "Fredag"
 
+msgid "Frisian"
+msgstr "Frisisk"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box TELEFON IP adresse"
 
@@ -1333,8 +1320,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Router Adresse"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Tysk"
@@ -1370,7 +1357,7 @@ msgid "Harddisk standby after"
 msgstr "Harddisk Hvile efter:"
 
 msgid "Hidden network SSID"
-msgstr ""
+msgstr "Skjult netværks SSID"
 
 msgid "Hierarchy Information"
 msgstr "Hiraki Information"
@@ -1388,10 +1375,10 @@ msgid "IP Address"
 msgstr "IP-Adresse"
 
 msgid "ISO file is too large for this filesystem!"
-msgstr ""
+msgstr "ISO filen er for stor til dette filsystem!"
 
 msgid "ISO path"
-msgstr ""
+msgstr "ISO stien"
 
 msgid "Icelandic"
 msgstr "Islandsk"
@@ -1808,6 +1795,9 @@ msgstr ""
 "Ingen HDD fundet eller\n"
 "HDD ikke initialiseret!."
 
+msgid "No Networks found"
+msgstr "Ingen netværk fundet"
+
 msgid "No backup needed"
 msgstr "Ingen backup nødvendig"
 
@@ -1841,6 +1831,9 @@ msgstr "Ingen brugbar Motor frontend fundet."
 msgid "No satellite frontend found!!"
 msgstr "Ingen satellit frontend fundet!!"
 
+msgid "No tags are set on these movies."
+msgstr "Ingen tags er sat på disse film"
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Ingen Tuner er konfigureret til brug af diseqc Motor!"
 
@@ -1877,18 +1870,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"Der kunne ikke findes en fungerende netværksadapter.\n"
+"Undersøg venligst, at du har tilsluttet kabler og at dit netværk er korrekt "
+"opsat."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"Der kunne ikke findes en fungerende trådløs netværksadapter.\n"
+"Undersøg venligst, at du har tilsluttet en kompatibel WLAN enhed og at "
+"netværket er korrekt opsat."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"Der kunne ikke findes et trådløs netværks interface.\n"
+"Undersøg venligst, at du har tilsluttet en kompatibel WLAN enhed eller "
+"aktiver dit lokale netværks interface."
 
 msgid "No, but restart from begin"
 msgstr "Nej, men genstart fra begyndelse"
@@ -1933,15 +1935,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Nu Afspilles"
 
-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 ""
-"Nu, indsæt venligst USB sticken (minimum størrelse 64MB) som du vil "
-"formattere og benytte som .NFI image flasher.Tryk på OK efter at sticken "
-"igen er sat i boxen."
-
 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 "
@@ -1981,9 +1974,6 @@ msgstr "Søg kun ukodet"
 msgid "Orbital Position"
 msgstr "Omløbs Position"
 
-msgid "Other..."
-msgstr "Andet..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2018,15 +2008,15 @@ msgstr "Forældre Kontrol Opsætning"
 msgid "Parental control type"
 msgstr "Forældre Kontrol Type"
 
-msgid "Partitioning USB stick..."
-msgstr "Partitionerer USB stick..."
-
 msgid "Pause movie at end"
 msgstr "Pause ved filmslutning"
 
 msgid "PiPSetup"
 msgstr "PiP Opsætning"
 
+msgid "PicturePlayer"
+msgstr "Billed afspiller"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Sort stribe i top og bund af billede"
@@ -2070,6 +2060,13 @@ msgstr "Vælg venligst en pakke..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Vælg venligst standard kanal lister som du ønsker at installere."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Fjern venligst alle USB enheder fra din Dreambox og (gen-)indsæt mål USB "
+"sticken (minimum størrelse 64 MB) nu!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Venligst ikke ændre værdier hvis du ikke ved hvad du gør!"
 
@@ -2125,8 +2122,8 @@ msgstr "Vælg en underkanal til at optagelse..."
 msgid "Please select a subservice..."
 msgstr "Vælg venligst en underkanal..."
 
-msgid "Please select keyword to filter..."
-msgstr "Vælg venligst et nøgleord til filter..."
+msgid "Please select tag to filter..."
+msgstr "Vælg venligst tag til filtrering..."
 
 msgid "Please select target directory or medium"
 msgstr "Vælg venligst destinations mappe eller media"
@@ -2160,19 +2157,16 @@ msgstr ""
 "knappen."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
-
-msgid "Please wait for md5 signature verification..."
-msgstr "Vent venligst på verificering af md5 signatur..."
+msgstr "Vent venligt på aktivering af din netværks opsætning..."
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Vent venligts, mens vi opsætter dit netværk..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Vent venligst, mens dit netværk genstartes..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Vent venligst..."
 
 msgid "Please wait... Loading list..."
 msgstr "Vent venligst... Henter liste..."
@@ -2256,7 +2250,7 @@ msgid "Primary DNS"
 msgstr "Primær DNS"
 
 msgid "Properties of current title"
-msgstr ""
+msgstr "Egenskaber for den aktuelle titel"
 
 msgid "Protect services"
 msgstr "Beskytte Kanaler?"
@@ -2345,9 +2339,6 @@ msgstr "Opdaterings  Rate"
 msgid "Refresh rate selection."
 msgstr "Opdaterings Rate vælger."
 
-msgid "Remounting stick partition..."
-msgstr "Genmonterer partitioner på stick..."
-
 msgid "Remove Bookmark"
 msgstr "Fjern bogmærke"
 
@@ -2395,7 +2386,7 @@ msgid "Reset"
 msgstr "Genstart"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Nulstiller og genoptæller titel navne"
 
 msgid "Resolution"
 msgstr "Opløsning"
@@ -2635,10 +2626,10 @@ msgid "Selected source image"
 msgstr "Vælg kilde image"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Sender DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Sender DiSEqC kun ved satellite skifte"
 
 msgid "Seperate titles with a main menu"
 msgstr "Adskil titler med en hoved menu"
@@ -2692,13 +2683,13 @@ msgid "Services"
 msgstr "Kanaler"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Sætter Spænding og 22KHz"
 
 msgid "Set as default Interface"
 msgstr "Sæt som standard interface"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "Sætter interfacet om standard interface"
 
 msgid "Set limits"
 msgstr "Indstil limits"
@@ -2758,7 +2749,7 @@ msgid "Simple"
 msgstr "Simpel"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Enkelt titelopsætning (kompatibel med legacy afspillere)"
 
 msgid "Single"
 msgstr "Enkelt"
@@ -2838,9 +2829,6 @@ msgstr "Standby"
 msgid "Standby / Restart"
 msgstr "Afbryde / Genstarte"
 
-msgid "Start"
-msgstr "Start"
-
 msgid "Start from the beginning"
 msgstr "Start fra begyndelse"
 
@@ -2940,7 +2928,7 @@ msgstr ""
 "http://www.dream-multimedia-tv.de/board/index.php?sid="
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "TS filen er for stor til ISO9660 level 1!"
 
 msgid "TV System"
 msgstr "TV System"
@@ -2948,6 +2936,15 @@ msgstr "TV System"
 msgid "Table of content for collection"
 msgstr "Indholdsfortegnelse for kollektion"
 
+msgid "Tag 1"
+msgstr "Tag 1"
+
+msgid "Tag 2"
+msgstr "Tag 2"
+
+msgid "Tags"
+msgstr "Tags"
+
 msgid "Terrestrial"
 msgstr "DVB T"
 
@@ -2970,16 +2967,6 @@ msgstr ""
 "Tak fordi du brugte Start Hjælpen. Din Dreambox er nu klar til brug .\n"
 "Tryk venligst OK, for at starte den."
 
-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 ""
-".NFI image flash USB sticken er nu klar til brug. Download venligst en .NFI "
-"image fil fra feed serveren og gem den på sticken. Genstart derefter og hold "
-"'NED' knappen på front panelet inde for at boote .NFI flash fra sticken!"
-
 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 "
@@ -2989,6 +2976,13 @@ msgstr ""
 "stedet oprette en Dreambox format DVD (som ikke kan afspilles i en "
 "almindelig DVD afspiller)? "
 
+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 ""
+"USB sticken er nu bootbar. Vil du downloade det seneste image fra feed "
+"serveren og gemme det på sticken?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Backup har slået fejl. Vælg en anden måde at lave backup på."
 
@@ -3196,6 +3190,9 @@ msgstr "Threshold"
 msgid "Thu"
 msgstr "Tor"
 
+msgid "Thumbnails"
+msgstr "Miniaturbilleder"
+
 msgid "Thursday"
 msgstr "Torsdag"
 
@@ -3245,6 +3242,9 @@ msgstr "Tidsskift"
 msgid "Timeshift not possible!"
 msgstr "Timeskift ikke mulig!."
 
+msgid "Timeshift path..."
+msgstr "Timeshift stien..."
+
 msgid "Timezone"
 msgstr "Tidszone"
 
@@ -3252,21 +3252,25 @@ msgid "Title"
 msgstr "Titel"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Titel:"
+msgstr "Titel egenskaber"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Titelopsætning modus"
 
 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."
-msgstr ""
-"For at sikre at du vil gøre dette, skal du venligst fjerne destinations USB "
-"sticken nu og sætte den tilbage, når du bliver anmodet herom. Tryk på OK, "
-"når du har taget sticken ud."
+"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 ""
+"Du skal følge disse trin, for at opdatere din Dreambox software:\n"
+"1) Sluk din box med afbryderknappen på bagsiden og indsæt din bootbare USB "
+"stick.\n"
+"2) Tænd igen på afbryderknappen og samtidig NED knappen på forsiden inde i "
+"10 sekunder.\n"
+"3) Afvent bootup og følg instruktionerne fra hjælperen på skærmen."
 
 msgid "Today"
 msgstr "Idag"
@@ -3355,6 +3359,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Stick"
 
+msgid "USB stick wizard"
+msgstr "USB stick hjælper"
+
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3399,6 +3409,9 @@ msgstr "Opdaterer"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Opdaterer Dreambox... Vent venligst"
 
+msgid "Use"
+msgstr "Brug"
+
 msgid "Use DHCP"
 msgstr "Brug (DHCP)"
 
@@ -3505,7 +3518,7 @@ msgid "View teletext..."
 msgstr "Se teletekst..."
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Virtuelt tastatur"
 
 msgid "Voltage mode"
 msgstr "Spændings type"
@@ -3523,7 +3536,7 @@ msgid "WPA"
 msgstr "WPA"
 
 msgid "WPA or WPA2"
-msgstr ""
+msgstr "WPA eller WPA2"
 
 msgid "WPA2"
 msgstr "WPA2"
@@ -3534,9 +3547,6 @@ msgstr "WSS på 4:3"
 msgid "Waiting"
 msgstr "Venter"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Venter på USB sticken..."
-
 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"
@@ -3602,6 +3612,9 @@ msgstr "Hvad vil du søge?"
 msgid "Where do you want to backup your settings?"
 msgstr "Hvor vil du lave en kopi af dine indstillinger?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Hvor skal midleridige timeshift optagelser gemmes?"
+
 msgid "Wireless"
 msgstr "Trådløst"
 
@@ -3617,20 +3630,17 @@ msgstr "Skrivning mislykkedes!"
 msgid "Writing NFI image file to flash completed"
 msgstr "Skrivning af NFI image til flash tilendebragt"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Skriver image fil til NAND flash"
-
 msgid "YPbPr"
 msgstr "Komponent"
 
-msgid "Year:"
-msgstr "År:"
+msgid "Year"
+msgstr "År"
 
 msgid "Yes"
 msgstr "Ja"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Ja, og slet denne film"
 
 msgid "Yes, backup my settings!"
 msgstr "Ja, start kopiering af mine indstillinger!"
@@ -3740,15 +3750,6 @@ msgstr ""
 "Instruktioner fra websiden, vil den nye firmware vil bede dig om at "
 "geninstallere, dine indstillinger."
 
-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 ""
-"Du må definere nogle nøgleord først!\n"
-"Tryk på menu for at definere nøgleord.\n"
-"Vil du definere nøgleord nu?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3789,7 +3790,7 @@ msgstr ""
 "Tryk OK for at starte opdateringen."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Din netværks opsætning er blevet aktiveret."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3797,6 +3798,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Din netværks opsætning er blevet aktiveret.\n"
+"Der er fundet et andet opsat interface.\n"
+"\n"
+"Vil du deaktivere det andet netværks interface?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr "Skift tilbage til kanal før Motor Opsætning?"
@@ -3829,10 +3834,10 @@ msgid "about to start"
 msgstr "Ved at starte"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "aktiver den aktuelle opsætning"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "tilføj en navneserver angivelse"
 
 msgid "add alternatives"
 msgstr "Tilføj alternativer"
@@ -3891,11 +3896,11 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "lydspor (%s) format"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "lydspor (%s) sprog"
 
 msgid "audio tracks"
 msgstr "lyd spor"
@@ -3906,18 +3911,24 @@ msgstr "Tilbage"
 msgid "background image"
 msgstr "baggrunds billede"
 
+msgid "backgroundcolor"
+msgstr "baggrundsfarve"
+
 msgid "better"
 msgstr "Bedre"
 
+msgid "black"
+msgstr "sort"
+
 msgid "blacklist"
 msgstr "Sortliste"
 
+msgid "blue"
+msgstr "blå"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "Via Exif"
+msgstr "brænd lydspor (%s)"
 
 msgid "change recording (duration)"
 msgstr "Skifte optagelse (længde)"
@@ -3970,12 +3981,12 @@ msgstr "Daglig"
 msgid "day"
 msgstr "dag"
 
-msgid "delete"
-msgstr "Slet"
-
 msgid "delete cut"
 msgstr "Slet klip"
 
+msgid "delete file"
+msgstr "slet fil"
+
 msgid "delete playlist entry"
 msgstr "Slette spilleliste indhold"
 
@@ -4043,7 +4054,7 @@ msgid "end favourites edit"
 msgstr "Afslut favorit redigering"
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 og netværk"
 
 msgid "equal to"
 msgstr "svarende til"
@@ -4061,23 +4072,26 @@ msgid "exit movielist"
 msgstr "Afslutte Filmliste"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "afslut navneserver opsætning"
 
 msgid "exit network adapter configuration"
-msgstr ""
+msgstr "afslut netværksadapter opsætning"
 
 msgid "exit network adapter setup menu"
-msgstr ""
+msgstr "afslut netværksadapter opsætnings menu"
 
 msgid "exit network interface list"
-msgstr ""
+msgstr "afslut netværks interface oversigt"
 
 msgid "exit networkadapter setup menu"
-msgstr ""
+msgstr "afslut netværksadapter opsætnings menu"
 
 msgid "failed"
 msgstr "mislykkedes"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "fil formater (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "fil navn"
 
@@ -4102,6 +4116,9 @@ msgstr "Gå til dyb standby"
 msgid "go to standby"
 msgstr "Gå til Standby"
 
+msgid "green"
+msgstr "grøn"
+
 msgid "headline"
 msgstr "overskrift"
 
@@ -4111,6 +4128,9 @@ msgstr "Høre radio..."
 msgid "help..."
 msgstr "Hjælp..."
 
+msgid "hidden network"
+msgstr "skjult netværk"
+
 msgid "hide extended description"
 msgstr "Skjule udvidet beskrivelse"
 
@@ -4219,16 +4239,16 @@ msgid "move PiP to main picture"
 msgstr "Flytte PiP til hoved billede"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "flyt ned til sidste indtastning"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "flyrt ned til næste indtastning"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "flyt op til første indtastning"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "flyt op til foregående indtastning"
 
 msgid "movie list"
 msgstr "Film liste"
@@ -4251,9 +4271,6 @@ msgstr "Nej"
 msgid "no HDD found"
 msgstr "Ingen HDD fundet"
 
-msgid "no Picture found"
-msgstr "Intet Billede fundet"
-
 msgid "no module found"
 msgstr "Ingen modul fundet"
 
@@ -4291,7 +4308,7 @@ msgid "once"
 msgstr "En gang"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "åbn navneserver opsætning"
 
 msgid "open servicelist"
 msgstr "Åbne kanalliste"
@@ -4303,7 +4320,7 @@ msgid "open servicelist(up)"
 msgstr "Åbne kanalliste(op)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "åbn hjælp til virtuel tastatur input"
 
 msgid "pass"
 msgstr "Ok"
@@ -4332,17 +4349,17 @@ msgstr "Forrige kanal"
 msgid "previous channel in history"
 msgstr "Forrige sete kanal"
 
-msgid "rebooting..."
-msgstr "genstarter..."
-
 msgid "record"
 msgstr "Optage"
 
 msgid "recording..."
 msgstr "Optager..."
 
+msgid "red"
+msgstr "rød"
+
 msgid "remove a nameserver entry"
-msgstr ""
+msgstr "fjern en navneserver angivelse"
 
 msgid "remove after this position"
 msgstr "Fjerne efter denne position"
@@ -4389,9 +4406,15 @@ msgstr "Kør tilbage til forrige kapitel"
 msgid "right"
 msgstr "Højre"
 
+msgid "save last directory on exit"
+msgstr "gem seneste mappe ved afbrydelse"
+
 msgid "save playlist"
 msgstr "Gem spilleliste"
 
+msgid "save playlist on exit"
+msgstr "gem afspilningsliste ved afbrydelse"
+
 msgid "scan done!"
 msgstr "Søgning slut!"
 
@@ -4421,10 +4444,10 @@ msgid "select image from server"
 msgstr "vælg image fra server"
 
 msgid "select interface"
-msgstr ""
+msgstr "vælg interface"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "vælg meny indgang"
 
 msgid "select movie"
 msgstr "Vælg Film"
@@ -4444,6 +4467,9 @@ msgstr "Vis DVD Hoved Menu"
 msgid "show EPG..."
 msgstr "Vis EPG..."
 
+msgid "show Infoline"
+msgstr "vis infoinje"
+
 msgid "show all"
 msgstr "Vis alle"
 
@@ -4456,11 +4482,11 @@ msgstr "Vis program detaljer"
 msgid "show extended description"
 msgstr "Vis udvidet beskrivelse"
 
-msgid "show first tag"
-msgstr "Vis første mærke"
+msgid "show first selected tag"
+msgstr "vis første valgte tag"
 
-msgid "show second tag"
-msgstr "Vis andet mærke"
+msgid "show second selected tag"
+msgstr "vis anden valgte tag"
 
 msgid "show shutdown menu"
 msgstr "Vise afbryde menu"
@@ -4495,6 +4521,9 @@ msgstr "Drop fremad"
 msgid "skip forward (enter time)"
 msgstr "Skip fremad (skriv tiden)"
 
+msgid "slide picture in loop"
+msgstr "vis billeder i sløjfe"
+
 msgid "sort by date"
 msgstr "Sorter på Dato"
 
@@ -4510,6 +4539,9 @@ msgstr "Standby"
 msgid "start cut here"
 msgstr "Start klip her"
 
+msgid "start directory"
+msgstr "starrt mappe"
+
 msgid "start timeshift"
 msgstr "Start timeskift"
 
@@ -4549,6 +4581,9 @@ msgstr "Skift til næste undertekst sprog"
 msgid "text"
 msgstr "Tekst"
 
+msgid "textcolor"
+msgstr "tekstfarve"
+
 msgid "this recording"
 msgstr "Denne optagelse"
 
@@ -4597,8 +4632,8 @@ msgstr "Ugentlig"
 msgid "whitelist"
 msgstr "Hvidliste"
 
-msgid "year"
-msgstr "år"
+msgid "yellow"
+msgstr "gul"
 
 msgid "yes"
 msgstr "Ja"
@@ -4629,6 +4664,9 @@ msgstr "Zappet"
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr ".NFI flash bootbar USB stick blev oprettet."
+
 #~ msgid "AV-Setup"
 #~ msgstr "AV-Indstilling"
 
@@ -4638,6 +4676,9 @@ msgstr "Zappet"
 #~ msgid "Add title..."
 #~ msgstr "Tilføj titel..."
 
+#~ msgid "All..."
+#~ msgstr "Alle..."
+
 #~ msgid "Allow Unsupported Modes"
 #~ msgstr "Tillade Usupporterede Typer"
 
@@ -4702,6 +4743,9 @@ msgstr "Zappet"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Tilslutte Internet til dit lokale LAN netværk"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Kopierer USB flash boot imaget til stick..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD ENTER tast"
 
@@ -4717,6 +4761,9 @@ msgstr "Zappet"
 #~ msgid "DVD up key"
 #~ msgstr "DVD op tast"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Dekomprimerer USB stik flash boot image..."
+
 #~ msgid "Default-Wizard"
 #~ msgstr "Default-Guide"
 
@@ -4746,6 +4793,12 @@ msgstr "Zappet"
 #~ "Vil du virkelig downloade\n"
 #~ "dette plugin \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Ønsker du virkelig at afslutte?"
+
+#~ msgid "Downloading image description..."
+#~ msgstr "Downloader image beskrivelse..."
+
 #~ msgid "Edit current title"
 #~ msgstr "Ændre nuværende titel"
 
@@ -4771,9 +4824,15 @@ msgstr "Zappet"
 #~ msgid "Enable zap history"
 #~ msgstr "Aktivere zap historie"
 
+#~ msgid "End"
+#~ msgstr "Slut"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Afslutte hjælpen og konfigure manuelt senere"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Klargør USB stick"
+
 #~ msgid "Hello!"
 #~ msgstr "Goddag!"
 
@@ -4846,9 +4905,24 @@ msgstr "Zappet"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nej, lad mig vælge standard lister"
 
+#~ 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 ""
+#~ "Nu, indsæt venligst USB sticken (minimum størrelse 64MB) som du vil "
+#~ "formattere og benytte som .NFI image flasher.Tryk på OK efter at sticken "
+#~ "igen er sat i boxen."
+
+#~ msgid "Other..."
+#~ msgstr "Andet..."
+
 #~ msgid "Output Type"
 #~ msgstr "Udgangs Type"
 
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Partitionerer USB stick..."
+
 #~ 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 "
@@ -4880,6 +4954,12 @@ msgstr "Zappet"
 #~ msgstr ""
 #~ "Venligst vælg nedenunder det trådløse Netværk du vil tilsluttes til."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Vælg venligst et nøgleord til filter..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Vent venligst på verificering af md5 signatur..."
+
 #~ 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 "
@@ -4921,6 +5001,9 @@ msgstr "Zappet"
 #~ "Optagelse(r) er igang eller starter op om få sekunder... vil du virkelig "
 #~ "afbryde nu?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Genmonterer partitioner på stick..."
+
 #~ msgid "Reset configuration"
 #~ msgstr "Genstart Konfiguration"
 
@@ -4949,6 +5032,9 @@ msgstr "Zappet"
 #~ msgid "Show files from %s"
 #~ msgstr "Vis filer fra %s"
 
+#~ msgid "Start"
+#~ msgstr "Start"
+
 #~ msgid "Startwizard"
 #~ msgstr "Start Hjælp"
 
@@ -4988,6 +5074,17 @@ msgstr "Zappet"
 #~ "Tak fordi du brugte hjælpen. Din Dreambox er nu klar til brug.\n"
 #~ "Tryk venligst OK for at starte din Dreambox nu."
 
+#~ 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 ""
+#~ ".NFI image flash USB sticken er nu klar til brug. Download venligst en ."
+#~ "NFI image fil fra feed serveren og gem den på sticken. Genstart derefter "
+#~ "og hold 'NED' knappen på front panelet inde for at boote .NFI flash fra "
+#~ "sticken!"
+
 #~ msgid ""
 #~ "This test checks whether your LAN Adapter is set up for automatic IP "
 #~ "Address configuration with DHCP.\n"
@@ -5008,6 +5105,15 @@ msgstr "Zappet"
 #~ "-kontroler om du har en konfigureret og virkende DHCP Server i dit "
 #~ "netværk."
 
+#~ 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."
+#~ msgstr ""
+#~ "For at sikre at du vil gøre dette, skal du venligst fjerne destinations "
+#~ "USB sticken nu og sætte den tilbage, når du bliver anmodet herom. Tryk på "
+#~ "OK, når du har taget sticken ud."
+
 #~ msgid ""
 #~ "Unable to initialize harddisk.\n"
 #~ "Please refer to the user manual.\n"
@@ -5026,6 +5132,9 @@ msgstr "Zappet"
 #~ msgid "Videosize:"
 #~ msgstr "Billedformat:"
 
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Venter på USB sticken..."
+
 #~ msgid ""
 #~ "Welcome.\n"
 #~ "\n"
@@ -5041,9 +5150,21 @@ msgstr "Zappet"
 #~ "\n"
 #~ "Tryk OK på din fjernbetjening for at gå videre til næste trin."
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Skriver image fil til NAND flash"
+
 #~ msgid "You can choose, what you want to install.."
 #~ msgstr "Du kan vælge, hvad du vil have indstalleret..."
 
+#~ 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 ""
+#~ "Du må definere nogle nøgleord først!\n"
+#~ "Tryk på menu for at definere nøgleord.\n"
+#~ "Vil du definere nøgleord nu?"
+
 #~ msgid ""
 #~ "Your local LAN internet connection is not working!\n"
 #~ "Please choose what you want to do next."
@@ -5079,6 +5200,12 @@ msgstr "Zappet"
 #~ "Din trådløse LAN internet tilslutning virker ikke!\n"
 #~ "Vælg venligst hvad du nu vil gøre."
 
+#~ msgid "by Exif"
+#~ msgstr "Via Exif"
+
+#~ msgid "delete"
+#~ msgstr "Slet"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "Som Tuner A"
 
@@ -5088,6 +5215,9 @@ msgstr "Zappet"
 #~ msgid "loopthrough to socket A"
 #~ msgstr "Forbundet til Tuner A"
 
+#~ msgid "no Picture found"
+#~ msgstr "Intet Billede fundet"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "Kun /etc/enigma2 direktorie"
 
@@ -5097,6 +5227,15 @@ msgstr "Zappet"
 #~ msgid "play previous playlist entry"
 #~ msgstr "Afspil forrige i spilleliste"
 
+#~ msgid "rebooting..."
+#~ msgstr "genstarter..."
+
+#~ msgid "show first tag"
+#~ msgstr "Vis første mærke"
+
+#~ msgid "show second tag"
+#~ msgstr "Vis andet mærke"
+
 #~ msgid "skip backward (self defined)"
 #~ msgstr "Skip tilbage (bruger defineret)"
 
index 75186438c6ba80ef66a75dfabe5c80e029affea1..be08747f76d4069ea7cb9f1ab2066e32fb54b433 100755 (executable)
--- a/po/de.po
+++ b/po/de.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 23:57+0100\n"
-"PO-Revision-Date: 2008-11-14 23:41+0100\n"
+"POT-Creation-Date: 2008-11-18 12:42+0100\n"
+"PO-Revision-Date: 2008-11-18 13:00+0100\n"
 "Last-Translator: Andreas Frisch <andreas.frisch@multimedia-labs.de>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -383,8 +383,8 @@ msgstr ""
 "Sender schützen. Wie Sie dies tun können, entnehmen Sie bitte dem Handbuch "
 "Ihrer Dreambox."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Alle"
@@ -427,8 +427,8 @@ msgstr ""
 "Sind Sie sicher, dass Sie die Netzwerkadapter neu starten wollen?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Künstler:"
+msgid "Artist"
+msgstr "Künstler"
 
 msgid "Ask before shutdown:"
 msgstr "Vor dem Ausschalten fragen:"
@@ -743,9 +743,6 @@ msgstr "Abspielen fortsetzen"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr ""
 
@@ -822,9 +819,6 @@ msgstr "Dänisch"
 msgid "Date"
 msgstr "Datum"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "Ausschalten"
 
@@ -858,7 +852,7 @@ msgid "Description"
 msgstr "Beschreibung"
 
 msgid "Destination directory"
-msgstr "Zielverzeichniss"
+msgstr "Zielverzeichnis"
 
 msgid "Detected HDD:"
 msgstr "Erkannte Festplatte:"
@@ -1039,9 +1033,6 @@ msgstr "Herunterladbare Erweiterungen"
 msgid "Downloading"
 msgstr "Herunterladen"
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Lade Plugin-Informationen herunter. Bitte warten..."
 
@@ -1124,9 +1115,6 @@ msgstr "Passwortverschlüsselungstyp"
 msgid "Encryption Type"
 msgstr "Verschlüssellungsart"
 
-msgid "End"
-msgstr "Ende"
-
 msgid "End time"
 msgstr "Endzeit"
 
@@ -1269,12 +1257,8 @@ msgstr "Netzwerkneustart abgeschlossen"
 msgid "Finnish"
 msgstr "Finnisch"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-
-msgid "Fix USB stick"
-msgstr ""
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Zuerst muss die neueste Bootumgebung für den USB-Flasher heruntergeladen werden."
 
 msgid "Flash"
 msgstr ""
@@ -1336,8 +1320,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Kategorie:"
+msgid "Genre"
+msgstr "Kategorie"
 
 msgid "German"
 msgstr "Deutsch"
@@ -1863,7 +1847,7 @@ msgstr ""
 "Bitte die Tuner konfigurieren bevor die Kanalsuche gestartet wird."
 
 msgid "No useable USB stick found"
-msgstr ""
+msgstr "Kein nutzbarer USB-Stick gefunden"
 
 msgid ""
 "No valid service PIN found!\n"
@@ -1994,9 +1978,6 @@ msgstr ""
 msgid "Orbital Position"
 msgstr "Orbitposition"
 
-msgid "Other..."
-msgstr "Andere..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2031,9 +2012,6 @@ msgstr "Jugendschutz-Einstellungen"
 msgid "Parental control type"
 msgstr "Jugendschutz-Typ"
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr "Am Filmende pausieren"
 
@@ -2081,8 +2059,10 @@ msgid "Please choose he package..."
 msgstr "Bitte wählen Sie das Paket aus..."
 
 msgid "Please choose the default services lists you want to install."
-msgstr ""
-"Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen."
+msgstr "Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen."
+
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Bitte ziehen Sie jetzt alle USB-Geräte von Ihrer Dreambox ab und stecken (erneut) den zu benutzenden USB-Stick (Mindestgröße von 64 MB) ein!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Bitte ändern Sie keine Werte, falls Sie nicht wissen, was Sie tun!"
@@ -2174,9 +2154,6 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr "Bitte warten während die Netzwerkkonfiguration aktiviert wird..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr ""
-
 msgid "Please wait while we configure your network..."
 msgstr "Bitte warten während das Netzwerk konfiguriert wird..."
 
@@ -2357,9 +2334,6 @@ msgstr "Bildwiederholrate"
 msgid "Refresh rate selection."
 msgstr "Auswahl der Bildwiederholungsrate."
 
-msgid "Remounting stick partition..."
-msgstr ""
-
 msgid "Remove Bookmark"
 msgstr "Bookmark entfernen"
 
@@ -2573,7 +2547,7 @@ msgid "Scan band EU VHF I"
 msgstr "Durchsuche EU VHF I"
 
 msgid "Scan band EU VHF III"
-msgstr "Durchsucher EU VHF III"
+msgstr "Durchsuche EU VHF III"
 
 msgid "Scan band US HIGH"
 msgstr "Durchsuche US HIGH"
@@ -2582,7 +2556,7 @@ msgid "Scan band US HYPER"
 msgstr "Durchsuche US HYPER"
 
 msgid "Scan band US LOW"
-msgstr "Durchsucher US LOW"
+msgstr "Durchsuche US LOW"
 
 msgid "Scan band US MID"
 msgstr "Durchsuche US MID"
@@ -2853,9 +2827,6 @@ msgstr "Standby"
 msgid "Standby / Restart"
 msgstr "Standby / Neustart"
 
-msgid "Start"
-msgstr "Start"
-
 msgid "Start from the beginning"
 msgstr "Am Anfang starten"
 
@@ -2978,21 +2949,11 @@ msgstr ""
 "Der Assistent ist hiermit beendet. Ihre Dreambox kann nun benutzt werden.\n"
 "Bitte drücken Sie OK, um den Assistenten zu verlassen."
 
-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 "Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-Player abspielbar ist) erstellt werden?"
 
-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 ""
-"Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen "
-"eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-"
-"Player abspielbar ist) erstellt werden?"
+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 "Der USB-Stick ist nun bootfähig. Wollen Sie das neueste Image vom Update-Server herunterladen und auf dem Stick speichern?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr ""
@@ -3007,6 +2968,11 @@ msgid ""
 "\n"
 "Do you want to write the USB flasher to this stick?"
 msgstr ""
+"Das folgende Medium wurde gefunden:\n"
+"\n"
+"%s\n"
+"\n"
+"Soll der USB-Flasher auf diesen Stick installiert werden?"
 
 msgid ""
 "The input port should be configured now.\n"
@@ -3250,16 +3216,19 @@ msgstr "Titel"
 msgid "Title properties"
 msgstr "Titeleigensch."
 
-msgid "Title:"
-msgstr "Titel:"
-
 msgid "Titleset mode"
 msgstr "Titleset"
 
 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 ""
+"Um Ihre Dreambox-Firmware zu aktualisieren, folgen Sie bitte diesen Anweisungen:\n"
+"1) Schalten Sie Ihre Dreambox mit dem Schalter auf der Rückseite aus und stecken Sie den bootfähigen USB-Stick ein.\n"
+"2) Schalten Sie den Netzschalter wieder ein und halten dabei den \"nach unten\"-Knopf auf der Vorderseite für 10 Sekunden gedrückt.\n"
+"3) Nach dem Bootvorgang folgen Sie bitten den Instruktionen des Assistenten."
 
 msgid "Today"
 msgstr "Heute"
@@ -3348,6 +3317,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB-Stick"
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3533,9 +3508,6 @@ msgstr "WSS bei 4:3"
 msgid "Waiting"
 msgstr "Warte"
 
-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"
@@ -3613,14 +3585,11 @@ msgstr "Schreiben fehlgeschlagen!"
 msgid "Writing NFI image file to flash completed"
 msgstr ""
 
-msgid "Writing image file to NAND Flash"
-msgstr ""
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Jahr:"
+msgid "Year"
+msgstr "Jahr"
 
 msgid "Yes"
 msgstr "Ja"
@@ -3924,9 +3893,6 @@ msgstr "Negativliste"
 msgid "burn audio track (%s)"
 msgstr "Brenne die Audiospur (%s)"
 
-msgid "by Exif"
-msgstr ""
-
 msgid "change recording (duration)"
 msgstr "Aufnahme ändern (Aufnahmelänge)"
 
@@ -4429,10 +4395,10 @@ msgid "select"
 msgstr "wähle"
 
 msgid "select .NFI flash file"
-msgstr "Wähle eine .NFI Flashdatei"
+msgstr "Wähle Sie eine .NFI Flashdatei"
 
 msgid "select image from server"
-msgstr "Wähle ein Image vom Server"
+msgstr "Wähle Sie ein Image vom Server"
 
 msgid "select interface"
 msgstr "Wähle einen Netzwerkadapter"
@@ -4614,9 +4580,6 @@ msgstr "wöchentlich"
 msgid "whitelist"
 msgstr "Positivliste"
 
-msgid "year"
-msgstr "Jahr"
-
 msgid "yes"
 msgstr "ja"
 
index 355391d54cd7a701d690fccdf90c7ae0fa7c2ed9..fda0f66e90d64899d827c5f93a386b64b02dc97d 100755 (executable)
--- a/po/el.po
+++ b/po/el.po
@@ -372,7 +372,7 @@ msgstr ""
 "Μετά το τέλος του wizard πρέπει να προστατευτούν τα «single services». "
 "Διάβαστε στο user manual για το πώς γίνεται."
 
-msgid "Album:"
+msgid "Album"
 msgstr "Άλμπουμ"
 
 msgid "All"
@@ -414,7 +414,7 @@ msgstr ""
 "Είστε σίγουρος οτι θέλετε να κάνετε επανεκκίνηση το network interfaces?\n"
 "\n"
 
-msgid "Artist:"
+msgid "Artist"
 msgstr "Καλλιτέχνης:"
 
 msgid "Ask before shutdown:"
@@ -1323,8 +1323,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Γερμανικά"
@@ -3200,14 +3200,11 @@ msgstr "Το timeshift δεν είναι εφαρμόσιμο!"
 msgid "Timezone"
 msgstr "Timezone"
 
-msgid "Title"
-msgstr "Τίτλος"
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Τίτλος:"
+msgid "Title"
+msgstr "Τίτλος"
 
 msgid "Titleset mode"
 msgstr ""
@@ -3571,8 +3568,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Έτος:"
+msgid "Year"
+msgstr "Έτος"
 
 msgid "Yes"
 msgstr "Ναι"
@@ -4541,9 +4538,6 @@ msgstr "Εβδομαδιαία"
 msgid "whitelist"
 msgstr "Άσπρη λίστα"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "Ναι"
 
index 61ab58324f0b48043837ad550b39303f2b2b02a0..4ddcf1254a868f56ebdad7af59376f90f3c715cd 100644 (file)
--- a/po/en.po
+++ b/po/en.po
@@ -350,7 +350,7 @@ msgid ""
 "Refer to your dreambox's manual on how to do that."
 msgstr ""
 
-msgid "Album:"
+msgid "Album"
 msgstr ""
 
 msgid "All"
@@ -390,7 +390,7 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
+msgid "Artist"
 msgstr ""
 
 msgid "Ask before shutdown:"
@@ -1274,7 +1274,7 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
+msgid "Genre"
 msgstr ""
 
 msgid "German"
@@ -3078,9 +3078,6 @@ msgstr ""
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr ""
-
 msgid "Titleset mode"
 msgstr ""
 
@@ -3414,7 +3411,7 @@ msgstr ""
 msgid "YPbPr"
 msgstr ""
 
-msgid "Year:"
+msgid "Year"
 msgstr ""
 
 msgid "Yes"
@@ -4350,9 +4347,6 @@ msgstr ""
 msgid "whitelist"
 msgstr ""
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr ""
 
index 9c131a7953f400be3500d448716d87de0f401299..7e78cc68a403715761d4a45dc4cbfb4ba0d2f375 100644 (file)
@@ -3,13 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#: ../lib/python/Screens/About.py:62
+#: ../lib/python/Screens/About.py:63
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-10 11:43+0200\n"
+"POT-Creation-Date: 2008-12-08 11:53+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,37 +17,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:205
-msgid ""
-"\n"
-"Enigma2 will restart after the restore"
+#: ../lib/python/Components/NimManager.py:951
+#: ../lib/python/Components/NimManager.py:953
+#: ../lib/python/Components/NimManager.py:1026
+#: ../lib/python/Components/NimManager.py:1028
+msgid "%H:%M"
 msgstr ""
 
-#: ../lib/python/Screens/PluginBrowser.py:117
-#: ../lib/python/Screens/PluginBrowser.py:119
-msgid "\"?"
+#: ../lib/python/Screens/Standby.py:113
+#, python-format
+msgid "%d jobs are running in the background!"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:759
-#: ../lib/python/Components/NimManager.py:761
-#: ../lib/python/Components/NimManager.py:834
-#: ../lib/python/Components/NimManager.py:836
-msgid "%H:%M"
+#: ../lib/python/Screens/EventView.py:121
+#, python-format
+msgid "%d min"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:106
+#: ../lib/python/Components/ServiceScan.py:33
+#: ../lib/python/Components/ServiceScan.py:92
+#: ../lib/python/Components/ServiceScan.py:94
 #, python-format
-msgid "%d min"
+msgid "%d services found!"
 msgstr ""
 
 #: ../lib/python/Screens/TimeDateInput.py:40
-#: ../lib/python/Screens/TimerEntry.py:103
-#: ../lib/python/Screens/TimerEntry.py:106
-#: ../lib/python/Screens/TimerEntry.py:111
+#: ../lib/python/Screens/TimerEntry.py:105
+#: ../lib/python/Screens/TimerEntry.py:115
 msgid "%d.%B %Y"
 msgstr ""
 
-#: ../lib/python/Screens/About.py:37
+#: ../lib/python/Screens/About.py:38
 #, python-format
 msgid ""
 "%s\n"
@@ -64,14 +64,32 @@ msgstr ""
 msgid "(ZAP)"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:408
+#: ../lib/python/Components/NimManager.py:485
 msgid "(empty)"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:305
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:316
 msgid "(show optional DVD audio menu)"
 msgstr ""
 
+#: ../lib/python/Screens/NetworkSetup.py:81
+msgid "* Only available if more than one interface is active."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:315
+msgid "* Only available when entering hidden SSID or network key"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:385
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:388
+msgid ".NFI Download failed:"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:434
+msgid ""
+".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
 msgid "/usr/share/enigma2 directory"
 msgstr ""
@@ -80,48 +98,52 @@ msgstr ""
 msgid "/var directory"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:811
+#: ../lib/python/Components/NimManager.py:1003
 msgid "1.0"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:811
+#: ../lib/python/Components/NimManager.py:1003
 msgid "1.1"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:811
+#: ../lib/python/Components/NimManager.py:1001
+#: ../lib/python/Components/NimManager.py:1003
 msgid "1.2"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:786
+#: ../lib/python/Components/NimManager.py:966
+#: ../lib/python/Components/NimManager.py:974
 msgid "13 V"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:102
+#: ../lib/python/Components/AVSwitch.py:124
 msgid "16:10"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:94
+#: ../lib/python/Components/AVSwitch.py:116
 msgid "16:10 Letterbox"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:95
+#: ../lib/python/Components/AVSwitch.py:117
 msgid "16:10 PanScan"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:92
-#: ../lib/python/Components/AVSwitch.py:101
+#: ../lib/python/Components/AVSwitch.py:114
+#: ../lib/python/Components/AVSwitch.py:123
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:17
 msgid "16:9"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:96
+#: ../lib/python/Components/AVSwitch.py:118
 msgid "16:9 Letterbox"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:93
+#: ../lib/python/Components/AVSwitch.py:115
 msgid "16:9 always"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:786
+#: ../lib/python/Components/NimManager.py:966
+#: ../lib/python/Components/NimManager.py:974
 msgid "18 V"
 msgstr ""
 
@@ -129,15 +151,16 @@ msgstr ""
 msgid "30 minutes"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:100
+#: ../lib/python/Components/AVSwitch.py:122
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:17
 msgid "4:3"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:90
+#: ../lib/python/Components/AVSwitch.py:112
 msgid "4:3 Letterbox"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:91
+#: ../lib/python/Components/AVSwitch.py:113
 msgid "4:3 PanScan"
 msgstr ""
 
@@ -149,16 +172,15 @@ msgstr ""
 msgid "60 minutes"
 msgstr ""
 
-#: ../lib/python/Components/TimerList.py:56
+#: ../lib/python/Components/TimerList.py:58
 msgid "<unknown>"
 msgstr ""
 
-#: ../lib/python/Screens/Menu.py:109 ../lib/python/Screens/Menu.py:156
-#: ../lib/python/Screens/Menu.py:159 ../lib/python/Screens/Setup.py:141
+#: ../lib/python/Screens/Menu.py:150 ../lib/python/Screens/Menu.py:153
 msgid "??"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:810 ../data/
+#: ../lib/python/Components/NimManager.py:999 ../data/
 msgid "A"
 msgstr ""
 
@@ -170,75 +192,80 @@ msgid ""
 "Do you want to keep your version?"
 msgstr ""
 
-#: ../RecordTimer.py:268
+#: ../RecordTimer.py:277
 msgid ""
 "A finished record timer wants to set your\n"
 "Dreambox to standby. Do that now?"
 msgstr ""
 
-#: ../RecordTimer.py:274
+#: ../RecordTimer.py:283
 msgid ""
 "A finished record timer wants to shut down\n"
 "your Dreambox. Shutdown now?"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:95
+#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:96
 msgid "A graphical EPG for all services of an specific bouquet"
 msgstr ""
 
-#: ../RecordTimer.py:327
+#: ../RecordTimer.py:335
 #, python-format
 msgid ""
 "A record has been started:\n"
 "%s"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1494
+#: ../lib/python/Screens/InfoBarGenerics.py:1553
 msgid ""
 "A recording is currently running.\n"
 "What do you want to do?"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:565
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:571
 msgid ""
 "A recording is currently running. Please stop the recording before trying to "
 "configure the positioner."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:276
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:289
 msgid ""
 "A recording is currently running. Please stop the recording before trying to "
 "start the satfinder."
 msgstr ""
 
-#: ../SleepTimer.py:30
+#: ../lib/python/Components/Task.py:379
+#, python-format
+msgid "A required tool (%s) was not found."
+msgstr ""
+
+#: ../lib/python/Screens/TaskView.py:118 ../SleepTimer.py:34
 msgid ""
 "A sleep timer wants to set your\n"
 "Dreambox to standby. Do that now?"
 msgstr ""
 
-#: ../SleepTimer.py:25
+#: ../lib/python/Screens/TaskView.py:115 ../SleepTimer.py:29
 msgid ""
 "A sleep timer wants to shut down\n"
 "your Dreambox. Shutdown now?"
 msgstr ""
 
-#: ../RecordTimer.py:223
+#: ../RecordTimer.py:232
 msgid ""
 "A timer failed to record!\n"
 "Disable TV and try again?\n"
 msgstr ""
 
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:34
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:204 ../data/
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:210 ../data/
 msgid "A/V Settings"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:792
+#: ../lib/python/Components/NimManager.py:981
 msgid "AA"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:792
+#: ../lib/python/Components/NimManager.py:981
 msgid "AB"
 msgstr ""
 
@@ -246,8 +273,8 @@ msgstr ""
 msgid "AC3 default"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1557
-#: ../lib/python/Screens/InfoBarGenerics.py:1575
+#: ../lib/python/Screens/InfoBarGenerics.py:1616
+#: ../lib/python/Screens/InfoBarGenerics.py:1634
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:96 ../data/
 msgid "AC3 downmix"
 msgstr ""
@@ -256,38 +283,59 @@ msgstr ""
 msgid "About..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1309
+#: ../lib/python/Screens/SleepTimerEdit.py:73
+#: ../lib/python/Screens/SleepTimerEdit.py:75
+msgid "Action:"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1347
 msgid "Activate Picture in Picture"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:484
+#: ../lib/python/Screens/NetworkSetup.py:857
 msgid "Adapter settings"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:77
-#: ../lib/python/Screens/TimerEdit.py:26
+#: ../lib/python/Screens/NetworkSetup.py:205
+#: ../lib/python/Screens/TimerEdit.py:43
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:140
 msgid "Add"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:199
+#: ../lib/python/Screens/LocationBox.py:199
+msgid "Add Bookmark"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:204
 msgid "Add a mark"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:59
-#: ../lib/python/Screens/EventView.py:31
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:346
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:43
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:104
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:143
+msgid "Add a new title"
+msgstr ""
+
+#: ../lib/python/Screens/EpgSelection.py:60
+#: ../lib/python/Screens/EventView.py:34
+#: ../lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py:366
 msgid "Add timer"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1675
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:43
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:61
+msgid "Add title"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1736
 msgid "Add to bouquet"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1677
+#: ../lib/python/Screens/InfoBarGenerics.py:1738
 msgid "Add to favourites"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:204
+#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:205
 msgid ""
 "Adjust the color settings so that all the color shades are distinguishable, "
 "but appear as saturated as possible. If you are happy with the result, press "
@@ -299,124 +347,154 @@ msgstr ""
 msgid "Advanced"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:213
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:219
 msgid "Advanced Video Setup"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:195
+#: ../lib/python/Screens/TaskView.py:52
+#: ../lib/python/Screens/TimerEntry.py:185
 msgid "After event"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:83
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:18
+msgid "Album"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:130
 msgid "Album:"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:652
-#: ../lib/python/Screens/ChannelSelection.py:792
+#: ../lib/python/Screens/ChannelSelection.py:651
+#: ../lib/python/Screens/ChannelSelection.py:791
+#: ../lib/python/Screens/MovieSelection.py:202
 msgid "All"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:181
-msgid "All..."
+#: ../lib/python/Components/NimManager.py:957
+msgid "All Satellites"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:207
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:18
+msgid "All keys"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:384
 msgid "An empty filename is illegal."
 msgstr ""
 
-#: ../lib/python/Components/Language.py:15
-msgid "Arabic"
+#: ../lib/python/Components/Task.py:345
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:168
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:282
+msgid "An unknown error occured!"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:408
-msgid ""
-"Are you sure you want to enable WLAN support?\n"
-"Connect your Wlan USB Stick to your Dreambox and press OK.\n"
-"\n"
+#: ../lib/python/Components/Language.py:18
+msgid "Arabic"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:410
+#: ../lib/python/Screens/NetworkSetup.py:593
 msgid ""
-"Are you sure you want to enable your local network?\n"
+"Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:406
+#: ../lib/python/Screens/NetworkSetup.py:788
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
 "\n"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:79
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:18
+msgid "Artist"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:126
 msgid "Artist:"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:67
-#: ../lib/python/Screens/SleepTimerEdit.py:69
+#: ../lib/python/Screens/SleepTimerEdit.py:83
+#: ../lib/python/Screens/SleepTimerEdit.py:85
 msgid "Ask before shutdown:"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:33
-#: ../lib/python/Components/UsageConfig.py:35
 #: ../lib/python/Components/UsageConfig.py:37
+#: ../lib/python/Components/UsageConfig.py:39
+#: ../lib/python/Components/UsageConfig.py:41
 msgid "Ask user"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:82
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:77 ../data/
 msgid "Aspect Ratio"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1518
+#: ../lib/python/Screens/InfoBarGenerics.py:1577
 msgid "Audio Options..."
 msgstr ""
 
-#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/ScanSetup.py:564
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:138
+msgid "Authoring mode"
+msgstr ""
+
+#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/ScanSetup.py:543
+#: ../lib/python/Screens/ScanSetup.py:546
+#: ../lib/python/Screens/ScanSetup.py:550
+#: ../lib/python/Screens/ScanSetup.py:554
+#: ../lib/python/Screens/ScanSetup.py:556
+#: ../lib/python/Screens/ScanSetup.py:561
+#: ../lib/python/Screens/ScanSetup.py:565
+#: ../lib/python/Screens/ScanSetup.py:566
 #: ../lib/python/Screens/ScanSetup.py:567
-#: ../lib/python/Screens/ScanSetup.py:571
-#: ../lib/python/Screens/ScanSetup.py:575
-#: ../lib/python/Screens/ScanSetup.py:577
-#: ../lib/python/Screens/ScanSetup.py:582
-#: ../lib/python/Screens/ScanSetup.py:586
-#: ../lib/python/Screens/ScanSetup.py:587
-#: ../lib/python/Screens/ScanSetup.py:588
-#: ../lib/python/Screens/ScanSetup.py:589
-#: ../lib/python/Screens/ScanSetup.py:590
-#: ../lib/python/Screens/ScanSetup.py:591
+#: ../lib/python/Screens/ScanSetup.py:568
+#: ../lib/python/Screens/ScanSetup.py:569
+#: ../lib/python/Screens/ScanSetup.py:570
 msgid "Auto"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:89
+msgid "Auto chapter split every ? minutes (0=never)"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:91 ../data/
 msgid "Auto scart switching"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:103
+#: ../lib/python/Components/AVSwitch.py:125
 msgid "Automatic"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:869 ../data/
+#: ../lib/python/Screens/ScanSetup.py:836 ../data/
 msgid "Automatic Scan"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:810 ../data/
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "Available format variables"
+msgstr ""
+
+#: ../lib/python/Components/NimManager.py:999 ../data/
 msgid "B"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:792
+#: ../lib/python/Components/NimManager.py:981
 msgid "BA"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:792
+#: ../lib/python/Components/NimManager.py:981
 msgid "BB"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:825
-#: ../lib/python/Screens/NetworkSetup.py:830
-#: ../lib/python/Screens/NetworkSetup.py:835
-#: ../lib/python/Screens/NetworkSetup.py:840
-#: ../lib/python/Screens/NetworkSetup.py:845
+#: ../lib/python/Screens/NetworkSetup.py:1220
+#: ../lib/python/Screens/NetworkSetup.py:1225
+#: ../lib/python/Screens/NetworkSetup.py:1230
+#: ../lib/python/Screens/NetworkSetup.py:1235
+#: ../lib/python/Screens/NetworkSetup.py:1240
 msgid "Back"
 msgstr ""
 
+#: ../lib/python/Screens/TaskView.py:31
+msgid "Background"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:73
 msgid "Backup"
 msgstr ""
@@ -429,29 +507,54 @@ msgstr ""
 msgid "Backup Mode"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:787
+#: ../lib/python/Components/NimManager.py:967
+#: ../lib/python/Components/NimManager.py:975
 msgid "Band"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:433
+#: ../lib/python/Screens/ScanSetup.py:425
 #: ../lib/python/Screens/ServiceInfo.py:140
 msgid "Bandwidth"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:41
-#: ../lib/python/Screens/Satconfig.py:217
+#: ../lib/python/Screens/Satconfig.py:47
+#: ../lib/python/Screens/Satconfig.py:270
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
 msgid "Begin time"
 msgstr ""
 
+#: ../lib/python/Screens/LocationBox.py:71
+msgid "Bookmarks"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:85 ../data/
 msgid "Brightness"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:862
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:901
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:920
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:47
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:94
+msgid "Burn DVD"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:97
+msgid "Burn existing image to DVD"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/plugin.py:15
+#: ../lib/python/Plugins/Extensions/DVDBurn/plugin.py:16
+msgid "Burn to DVD..."
+msgstr ""
+
 #: ../lib/python/Screens/HarddiskSetup.py:49
 msgid "Bus: "
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:804
+#: ../lib/python/Components/NimManager.py:993
 msgid "C-Band"
 msgstr ""
 
@@ -459,16 +562,16 @@ msgstr ""
 msgid "CF Drive"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:82
+#: ../lib/python/Components/AVSwitch.py:104
 msgid "CVBS"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:908
+#: ../lib/python/Screens/ChannelSelection.py:907
 #: ../lib/python/Components/ServiceScan.py:69
 msgid "Cable"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:405
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:172
 msgid "Cache Thumbnails"
 msgstr ""
 
@@ -476,27 +579,44 @@ msgstr ""
 msgid "Call monitoring"
 msgstr ""
 
-#: ../lib/python/Screens/Setup.py:95 ../lib/python/Screens/TimeDateInput.py:14
-#: ../lib/python/Screens/TimerEntry.py:28
+#: ../lib/python/Screens/LocationBox.py:94
+#: ../lib/python/Screens/LocationBox.py:128 ../lib/python/Screens/Setup.py:88
+#: ../lib/python/Screens/TimeDateInput.py:14
+#: ../lib/python/Screens/TimerEntry.py:29
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:44
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:102
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:39
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:30
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:69
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:72
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:163
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:37
+#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:160
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:197
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:37 ../data/
 msgid "Cancel"
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:323
+msgid "Cannot parse feed directory"
+msgstr ""
+
 #: ../lib/python/Screens/HarddiskSetup.py:48
 msgid "Capacity: "
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:279
+#: ../lib/python/Components/Harddisk.py:267
 msgid "Card"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:16
+#: ../lib/python/Components/Language.py:19
 msgid "Catalan"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:185
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:207
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:243
+msgid "Change dir."
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:184
 #: ../lib/python/Screens/ParentalControlSetup.py:18 ../data/
 msgid "Change pin code"
 msgstr ""
@@ -513,7 +633,10 @@ msgstr ""
 msgid "Change setup pin"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:197 ../data/
+#: ../lib/python/Screens/TimerEntry.py:175
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:16
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90 ../data/
 msgid "Channel"
 msgstr ""
 
@@ -521,15 +644,15 @@ msgstr ""
 msgid "Channel:"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:375
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:412
 msgid "Chap."
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:376
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:413
 msgid "Chapter"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:131
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:142
 msgid "Chapter:"
 msgstr ""
 
@@ -545,39 +668,38 @@ msgstr ""
 msgid "Choose source"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:344
+#: ../lib/python/Screens/TimerEntry.py:225
 msgid "Choose target folder"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:28
+#: ../lib/python/Screens/TimerEdit.py:165
 msgid "Cleanup"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:403
-#: ../lib/python/Screens/ScanSetup.py:408
-#: ../lib/python/Screens/ScanSetup.py:428
-#: ../lib/python/Screens/ScanSetup.py:442
-#: ../lib/python/Screens/ScanSetup.py:860
+#: ../lib/python/Screens/ScanSetup.py:433
+#: ../lib/python/Screens/ScanSetup.py:827
 msgid "Clear before scan"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:370
+#: ../lib/python/Screens/TimerEntry.py:387
 msgid "Clear log"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:79
-#: ../lib/python/Screens/NetworkSetup.py:230
-#: ../lib/python/Screens/NetworkSetup.py:347
-#: ../lib/python/Screens/NetworkSetup.py:618
-#: ../lib/python/Screens/NetworkSetup.py:940
+#: ../lib/python/Screens/NetworkSetup.py:60
+#: ../lib/python/Screens/NetworkSetup.py:207
+#: ../lib/python/Screens/NetworkSetup.py:350
+#: ../lib/python/Screens/NetworkSetup.py:697
+#: ../lib/python/Screens/NetworkSetup.py:1047
+#: ../lib/python/Screens/NetworkSetup.py:1307
+#: ../lib/python/Screens/TaskView.py:47
 msgid "Close"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:434
+#: ../lib/python/Screens/ScanSetup.py:426
 msgid "Code rate high"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:435
+#: ../lib/python/Screens/ScanSetup.py:427
 msgid "Code rate low"
 msgstr ""
 
@@ -589,31 +711,45 @@ msgstr ""
 msgid "Coderate LP"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:137
+msgid "Collection name"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:46
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:100
+msgid "Collection settings"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:87 ../data/
 msgid "Color Format"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:188
-#: ../lib/python/Screens/Satconfig.py:200
+#: ../lib/python/Screens/Satconfig.py:241
+#: ../lib/python/Screens/Satconfig.py:253
 msgid "Command order"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:184
+#: ../lib/python/Screens/Satconfig.py:237
 msgid "Committed DiSEqC command"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:280
+#: ../lib/python/Components/Harddisk.py:268
 msgid "Compact Flash"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:540
-#: ../lib/python/Screens/ScanSetup.py:541
+#: ../lib/python/Screens/ScanSetup.py:518
+#: ../lib/python/Screens/ScanSetup.py:519
 msgid "Complete"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:70 ../lib/python/Screens/Satconfig.py:95
-#: ../lib/python/Screens/Satconfig.py:129
-#: ../lib/python/Screens/Satconfig.py:236 ../data/
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:27
+msgid "Complex (allows mixing audio tracks and aspects)"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:92
+#: ../lib/python/Screens/Satconfig.py:144
+#: ../lib/python/Screens/Satconfig.py:178
+#: ../lib/python/Screens/Satconfig.py:289 ../data/
 msgid "Configuration Mode"
 msgstr ""
 
@@ -622,12 +758,12 @@ msgstr ""
 msgid "Configuring"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:68
-msgid "Confirm"
+#: ../lib/python/Screens/TimerEdit.py:335
+msgid "Conflicting timer"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:238
-msgid "Conflicting timer"
+#: ../lib/python/Screens/Satconfig.py:128
+msgid "Connected to"
 msgstr ""
 
 #: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:99
@@ -650,31 +786,55 @@ msgstr ""
 msgid "Constellation"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:445
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:276
+msgid "Content does not fit on DVD!"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:492
 msgid "Continue playing"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:144 ../data/
+#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:145 ../data/
 msgid "Contrast"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:295
+msgid "Could not connect to Dreambox .NFI Image Feed Server:"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:275
+msgid "Could not load Medium! No disc inserted?"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:28
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:866
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:905
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:96
+msgid "Create DVD-ISO"
+msgstr ""
+
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Create movie folder failed"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Screens/LocationBox.py:250
+#, python-format
+msgid "Creating directory %s failed."
+msgstr ""
+
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Creating partition failed"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:17
+#: ../lib/python/Components/Language.py:20
 msgid "Croatian"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:929
+#: ../lib/python/Screens/ChannelSelection.py:928
 msgid "Current Transponder"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:215
+#: ../lib/python/Screens/NetworkSetup.py:335
 msgid "Current settings:"
 msgstr ""
 
@@ -682,90 +842,87 @@ msgstr ""
 msgid "Current version:"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:78
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:81
 msgid "Cut"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:409
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:421
 msgid "Cutlist editor..."
 msgstr ""
 
-#: ../lib/python/Components/Language.py:18
+#: ../lib/python/Components/Language.py:21
 msgid "Czech"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:912
+#: ../lib/python/Screens/NetworkSetup.py:1286
 msgid "DHCP"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:562
+#: ../lib/python/Screens/ScanSetup.py:541
 msgid "DVB-S"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:562
+#: ../lib/python/Screens/ScanSetup.py:541
 msgid "DVB-S2"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:291
-msgid "DVD ENTER key"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:606
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:646
 msgid "DVD Player"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:274
-msgid "DVD down key"
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:151
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:98
+msgid "DVD media toolbox"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:271
-msgid "DVD left key"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:272
-msgid "DVD right key"
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:273
-msgid "DVD up key"
-msgstr ""
-
-#: ../lib/python/Components/Language.py:19
+#: ../lib/python/Components/Language.py:22
 msgid "Danish"
 msgstr ""
 
 #: ../lib/python/Screens/TimeDateInput.py:46
+#: ../lib/python/Screens/TimerEntry.py:164
 msgid "Date"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:62 ../data/
+#: ../lib/python/Screens/SleepTimerEdit.py:78 ../data/
 msgid "Deep Standby"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:78
-#: ../lib/python/Screens/TimerEdit.py:25
+#: ../lib/python/Screens/NetworkSetup.py:206
+#: ../lib/python/Screens/TimerEdit.py:131
 msgid "Delete"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:367
+#: ../lib/python/Screens/TimerEntry.py:384
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:491
 msgid "Delete entry"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:125
+#: ../lib/python/Screens/MovieSelection.py:143
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:652
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:707
 msgid "Delete failed!"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:274
+#: ../lib/python/Screens/Satconfig.py:327
 #, python-format
 msgid ""
 "Delete no more configured satellite\n"
 "%s?"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:144
+#: ../lib/python/Screens/TimerEntry.py:135
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:15
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:74
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
 msgid "Description"
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:241
+msgid "Destination directory"
+msgstr ""
+
 #: ../lib/python/Screens/About.py:34
 msgid "Detected HDD:"
 msgstr ""
@@ -774,31 +931,38 @@ msgstr ""
 msgid "Detected NIMs:"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:737
+#: ../lib/python/Components/NimManager.py:921
 msgid "DiSEqC A/B"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:738
+#: ../lib/python/Components/NimManager.py:922
 msgid "DiSEqC A/B/C/D"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:74
-msgid "Mode"
-msgstr ""
-
-#: ../lib/python/Screens/Satconfig.py:180
+#: ../lib/python/Screens/Satconfig.py:233
 msgid "DiSEqC mode"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:203
+#: ../lib/python/Screens/Satconfig.py:256
 msgid "DiSEqC repeats"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:103
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:26
+msgid "Direct playback of linked titles without menu"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:382
+#, python-format
+msgid "Directory %s nonexistent."
+msgstr ""
+
+#: ../lib/python/Screens/TimerEdit.py:144
+#: ../lib/python/Screens/TimerEdit.py:420
+#: ../lib/python/Screens/TimerEdit.py:440
 msgid "Disable"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1307
+#: ../lib/python/Screens/InfoBarGenerics.py:1345
 msgid "Disable Picture in Picture"
 msgstr ""
 
@@ -806,7 +970,11 @@ msgstr ""
 msgid "Disable Subtitles"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:59
+#: ../lib/python/Screens/SleepTimerEdit.py:75
+msgid "Disable timer"
+msgstr ""
+
+#: ../lib/python/Screens/SleepTimerEdit.py:29
 msgid "Disabled"
 msgstr ""
 
@@ -827,9 +995,10 @@ msgid "Display 4:3 content as"
 msgstr ""
 
 #: ../lib/python/Screens/PluginBrowser.py:119
+#, python-format
 msgid ""
 "Do you really want to REMOVE\n"
-"the plugin \""
+"the plugin \"%s\"?"
 msgstr ""
 
 #: ../lib/python/Screens/HarddiskSetup.py:84
@@ -838,20 +1007,20 @@ msgid ""
 "This could take lots of time!"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:108
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:522
+#: ../lib/python/Screens/InfoBar.py:195
+#: ../lib/python/Screens/MovieSelection.py:126
+#: ../lib/python/Screens/TimerEdit.py:206
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:644
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:693
 #, python-format
 msgid "Do you really want to delete %s?"
 msgstr ""
 
 #: ../lib/python/Screens/PluginBrowser.py:117
+#, python-format
 msgid ""
 "Do you really want to download\n"
-"the plugin \""
-msgstr ""
-
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:179
-msgid "Do you really want to exit?"
+"the plugin \"%s\"?"
 msgstr ""
 
 #: ../lib/python/Screens/HarddiskSetup.py:82
@@ -860,17 +1029,35 @@ msgid ""
 "All data on the disk will be lost!"
 msgstr ""
 
+#: ../lib/python/Screens/LocationBox.py:269
+#, python-format
+msgid "Do you really want to remove directory %s from the disk?"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:224
+#, python-format
+msgid "Do you really want to remove your bookmark of %s?"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:120
 msgid ""
 "Do you want to backup now?\n"
 "After pressing OK, please wait!"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:520
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:412
+msgid "Do you want to burn this collection to DVD medium?"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:563
 msgid "Do you want to play DVD in drive?"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1821
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:396
+msgid "Do you want to preview this DVD before burning?"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1885
 msgid "Do you want to resume this playback?"
 msgstr ""
 
@@ -883,7 +1070,7 @@ msgid ""
 "After pressing OK, please wait!"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:77
+#: ../lib/python/Screens/TimerEdit.py:101
 msgid "Don't stop current event but disable coming events"
 msgstr ""
 
@@ -897,10 +1084,24 @@ msgstr ""
 msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:205
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:334
+msgid "Download"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:695
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py:16
+msgid "Download .NFI-Files for USB-Flasher"
+msgstr ""
+
 #: ../lib/python/Screens/PluginBrowser.py:21
 msgid "Download Plugins"
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:474
+msgid "Download of USB flasher boot image failed: "
+msgstr ""
+
 #: ../lib/python/Screens/PluginBrowser.py:130
 msgid "Downloadable new plugins"
 msgstr ""
@@ -914,105 +1115,117 @@ msgstr ""
 msgid "Downloading plugin information. Please wait..."
 msgstr ""
 
-#: ../lib/python/Components/Language.py:20
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:26
+msgid "Dreambox format data DVD (HDTV compatible)"
+msgstr ""
+
+#: ../lib/python/Components/Language.py:23
 msgid "Dutch"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:916
-#: ../lib/python/Screens/Satconfig.py:272
+#: ../lib/python/Screens/ChannelSelection.py:915
+#: ../lib/python/Screens/Satconfig.py:325
 #: ../lib/python/Components/ServiceScan.py:55
 msgid "E"
 msgstr ""
 
-#: ../lib/python/Components/ServiceScan.py:99
+#: ../lib/python/Components/ServiceScan.py:97
 #, python-format
 msgid "ERROR - failed to scan (%s)!"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:752
-#: ../lib/python/Components/NimManager.py:827
+#: ../lib/python/Components/NimManager.py:944
+#: ../lib/python/Components/NimManager.py:1019
 msgid "East"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:232
+#: ../lib/python/Screens/TimerEdit.py:428
+msgid "Edit"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:352
 msgid "Edit DNS"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:41
+msgid "Edit Title"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:102
+msgid "Edit chapters of current title"
+msgstr ""
+
 #: ../lib/python/Screens/ParentalControlSetup.py:78
 msgid "Edit services list"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:936
+#: ../lib/python/Screens/NetworkSetup.py:1304
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:499
 msgid "Edit settings"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:444
+#: ../lib/python/Screens/NetworkSetup.py:824
 msgid "Edit the Nameserver configuration of your Dreambox.\n"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:438
+#: ../lib/python/Screens/NetworkSetup.py:820
 msgid "Edit the network configuration of your Dreambox.\n"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:139
+msgid "Edit title"
+msgstr ""
+
 #: ../lib/python/Screens/Subtitles.py:44
-#: ../lib/python/Screens/TimerEdit.py:101
+#: ../lib/python/Screens/TimerEdit.py:136
+#: ../lib/python/Screens/TimerEdit.py:412
+#: ../lib/python/Screens/TimerEdit.py:432
 msgid "Enable"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:134
+#: ../lib/python/Screens/Satconfig.py:183
 msgid "Enable 5V for active antenna"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:496
-#: ../lib/python/Screens/NetworkSetup.py:500
-msgid "Enable LAN"
-msgstr ""
-
-#: ../lib/python/Screens/NetworkSetup.py:498
-msgid "Enable WLAN"
-msgstr ""
-
 #: ../lib/python/Screens/ParentalControlSetup.py:60
 msgid "Enable parental control"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:442
-msgid ""
-"Enable the local network of your Dreambox.\n"
-"\n"
+#: ../lib/python/Screens/SleepTimerEdit.py:73
+msgid "Enable timer"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:57
+#: ../lib/python/Screens/SleepTimerEdit.py:27
 msgid "Enabled"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:271
+#: ../lib/python/Screens/NetworkSetup.py:501
 msgid "Encryption"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:276
+#: ../lib/python/Screens/NetworkSetup.py:509
+#: ../lib/python/Screens/NetworkSetup.py:512
 msgid "Encryption Key"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:275
-msgid "Encryption Type"
+#: ../lib/python/Screens/NetworkSetup.py:508
+msgid "Encryption Keytype"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:183
-msgid "End"
+#: ../lib/python/Screens/NetworkSetup.py:505
+msgid "Encryption Type"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:42
-#: ../lib/python/Screens/Satconfig.py:218
+#: ../lib/python/Screens/Satconfig.py:48
+#: ../lib/python/Screens/Satconfig.py:271
 msgid "End time"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:190
+#: ../lib/python/Screens/TimerEntry.py:171
 msgid "EndTime"
 msgstr ""
 
-#: ../lib/python/Screens/LanguageSelection.py:72
-#: ../lib/python/Components/Language.py:13
+#: ../lib/python/Components/Language.py:16
 #: ../lib/python/Components/SetupDevices.py:15
 msgid "English"
 msgstr ""
@@ -1027,19 +1240,40 @@ msgid ""
 "© 2006 - Stephan Reichholf"
 msgstr ""
 
+#: ../lib/python/Screens/NetworkSetup.py:528
+msgid "Enter WLAN network name/SSID:"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:530
+msgid "Enter WLAN passphrase/key:"
+msgstr ""
+
 #: ../lib/python/Screens/InfoBarGenerics.py:345
 msgid "Enter main menu..."
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:185
+#: ../lib/python/Screens/ChannelSelection.py:184
 msgid "Enter the service pin"
 msgstr ""
 
+#: ../lib/python/Components/Task.py:282
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:201
 #: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:337
 msgid "Error"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Plugins/Extensions/TuxboxPlugins/pluginrunner.py:34
+msgid "Error executing plugin"
+msgstr ""
+
+#: ../lib/python/Components/Task.py:280
+#, python-format
+msgid ""
+"Error: %s\n"
+"Retry?"
+msgstr ""
+
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Everything is fine"
 msgstr ""
 
@@ -1051,98 +1285,152 @@ msgstr ""
 msgid "Execution finished!!"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:445
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:61
+msgid "Exif"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:34
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:106
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:492
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:203
 msgid "Exit"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:201
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:206
 msgid "Exit editor"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:42
+#: ../lib/python/Components/UsageConfig.py:46
 msgid "Expert"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:390
-#: ../lib/python/Screens/ScanSetup.py:392
-#: ../lib/python/Screens/ScanSetup.py:425
+#: ../lib/python/Screens/NetworkSetup.py:881
+msgid "Extended Networksetup Plugin..."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:877
+msgid "Extended Setup..."
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:391
+#: ../lib/python/Screens/ScanSetup.py:393
+#: ../lib/python/Screens/ScanSetup.py:420
 #: ../lib/python/Screens/ServiceInfo.py:145
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:442
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:133
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:448
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:137
 msgid "FEC"
 msgstr ""
 
-#: ../lib/python/Screens/TaskView.py:41
+#: ../lib/python/Components/Task.py:41
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:436
 msgid "Failed"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:757
-#: ../lib/python/Components/NimManager.py:832
+#: ../lib/python/Components/NimManager.py:949
+#: ../lib/python/Components/NimManager.py:1024
 msgid "Fast"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:185
+#: ../lib/python/Screens/Satconfig.py:238
 msgid "Fast DiSEqC"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:757
-#: ../lib/python/Components/NimManager.py:832
+#: ../lib/python/Components/NimManager.py:949
+#: ../lib/python/Components/NimManager.py:1024
 msgid "Fast epoch"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:655
+#: ../lib/python/Screens/ChannelSelection.py:654
 msgid "Favourites"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:18
+msgid "Filename and path"
+msgstr ""
+
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Filesystem contains uncorrectable errors"
 msgstr ""
 
-#: ../lib/python/Screens/TaskView.py:41
+#: ../lib/python/Components/Task.py:41
 msgid "Finished"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:21
+#: ../lib/python/Screens/NetworkSetup.py:195
+msgid "Finished configuring your network"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:948
+msgid "Finished restarting your network"
+msgstr ""
+
+#: ../lib/python/Components/Language.py:24
 msgid "Finnish"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:22
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:453
+msgid ""
+"First we need to download the latest boot environment for the USB flasher."
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:144
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:251
+msgid "Flash"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:247
+msgid "Flashing failed"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:123
+msgid "Format"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:174
+msgid "Frame size in full view"
+msgstr ""
+
+#: ../lib/python/Components/Language.py:25
 msgid "French"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:385
-#: ../lib/python/Screens/ScanSetup.py:421
-#: ../lib/python/Screens/ScanSetup.py:431
+#: ../lib/python/Screens/ScanSetup.py:386
+#: ../lib/python/Screens/ScanSetup.py:416
+#: ../lib/python/Screens/ScanSetup.py:423
 #: ../lib/python/Screens/ServiceInfo.py:138
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:438
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:129
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:444
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:133
 msgid "Frequency"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:850
+#: ../lib/python/Components/NimManager.py:1042
 msgid "Frequency bands"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:117
+#: ../lib/python/Screens/Satconfig.py:166
 msgid "Frequency scan step size(khz)"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:850
+#: ../lib/python/Components/NimManager.py:1042
 msgid "Frequency steps"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Fri"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:169
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:160
 msgid "Friday"
 msgstr ""
 
+#: ../lib/python/Components/Language.py:39
+msgid "Frisian"
+msgstr ""
+
 #: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:34
 msgid "Fritz!Box FON IP address"
 msgstr ""
@@ -1152,7 +1440,7 @@ msgstr ""
 msgid "Frontprocessor version: %d"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Fsck failed"
 msgstr ""
 
@@ -1166,16 +1454,16 @@ msgid ""
 "Do you want to Restart the GUI now?"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:219
-#: ../lib/python/Screens/NetworkSetup.py:256 ../data/
+#: ../lib/python/Screens/NetworkSetup.py:339
+#: ../lib/python/Screens/NetworkSetup.py:481 ../data/
 msgid "Gateway"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:87
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:134
 msgid "Genre:"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:14
+#: ../lib/python/Components/Language.py:17
 #: ../lib/python/Components/SetupDevices.py:15
 msgid "German"
 msgstr ""
@@ -1184,20 +1472,20 @@ msgstr ""
 msgid "Getting plugin information. Please wait..."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:176
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:234
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:181
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:239
 msgid "Goto 0"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:231
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:236
 msgid "Goto position"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:94
+#: ../lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py:95
 msgid "Graphical Multi EPG"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:23
+#: ../lib/python/Components/Language.py:26
 msgid "Greek"
 msgstr ""
 
@@ -1205,40 +1493,52 @@ msgstr ""
 msgid "Guard Interval"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:438
+#: ../lib/python/Screens/ScanSetup.py:430
 msgid "Guard interval mode"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:278
+#: ../lib/python/Components/Harddisk.py:266
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:108
 #: ../data/
 msgid "Harddisk"
 msgstr ""
 
+#: ../lib/python/Screens/NetworkSetup.py:496
+msgid "Hidden network SSID"
+msgstr ""
+
 #: ../lib/python/Screens/ServiceInfo.py:151
 msgid "Hierarchy Information"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:439
+#: ../lib/python/Screens/ScanSetup.py:431
 msgid "Hierarchy mode"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1477
+#: ../lib/python/Screens/InfoBarGenerics.py:1530
 msgid "How many minutes do you want to record?"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:24
+#: ../lib/python/Components/Language.py:27
 msgid "Hungarian"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:217
-#: ../lib/python/Screens/NetworkSetup.py:252
-#: ../lib/python/Screens/NetworkSetup.py:920 ../data/
+#: ../lib/python/Screens/NetworkSetup.py:337
+#: ../lib/python/Screens/NetworkSetup.py:476
+#: ../lib/python/Screens/NetworkSetup.py:1292 ../data/
 msgid "IP Address"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:26
-msgid "Icelandic"
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:281
+msgid "ISO file is too large for this filesystem!"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:141
+msgid "ISO path"
+msgstr ""
+
+#: ../lib/python/Components/Language.py:29
+msgid "Icelandic"
 msgstr ""
 
 #: ../lib/python/Screens/Scart.py:25
@@ -1260,20 +1560,24 @@ msgid ""
 "If you are happy with the result, press OK."
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:52
+msgid "Image flash utility"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:32
 msgid "Image-Upgrade"
 msgstr ""
 
-#: ../lib/python/Screens/TaskView.py:41
+#: ../lib/python/Components/Task.py:41
 msgid "In Progress"
 msgstr ""
 
-#: ../RecordTimer.py:226
+#: ../RecordTimer.py:235
 msgid ""
 "In order to record a timer, the TV was switched to the recording service!\n"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:232
+#: ../lib/python/Screens/Satconfig.py:285
 msgid "Increased voltage"
 msgstr ""
 
@@ -1298,171 +1602,203 @@ msgstr ""
 msgid "Installing"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1367
+#: ../lib/python/Screens/InfoBarGenerics.py:1405
 msgid "Instant Record..."
 msgstr ""
 
-#: ../lib/python/Components/Network.py:211
+#: ../lib/python/Components/Network.py:290
 msgid "Integrated Ethernet"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:41
+#: ../lib/python/Components/Network.py:292
+msgid "Integrated Wireless"
+msgstr ""
+
+#: ../lib/python/Components/UsageConfig.py:45
 msgid "Intermediate"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:285
+#: ../lib/python/Components/Harddisk.py:273
 msgid "Internal Flash"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:218
+#: ../lib/python/Screens/LocationBox.py:396
 msgid "Invalid Location"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:386
-#: ../lib/python/Screens/ScanSetup.py:422
-#: ../lib/python/Screens/ScanSetup.py:432
+#: ../lib/python/Screens/LocationBox.py:275
+#, python-format
+msgid "Invalid directory selected: %s"
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:387
+#: ../lib/python/Screens/ScanSetup.py:417
+#: ../lib/python/Screens/ScanSetup.py:424
 #: ../lib/python/Screens/ServiceInfo.py:142
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:439
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:130
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:445
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:134
 msgid "Inversion"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:27
+#: ../lib/python/Components/Language.py:30
 msgid "Italian"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:308
-msgid "Jump to video title 1 (play movie from start)"
-msgstr ""
-
 #. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
-#: ../lib/python/Components/AVSwitch.py:111
-#: ../lib/python/Components/AVSwitch.py:121
+#: ../lib/python/Components/AVSwitch.py:133
+#: ../lib/python/Components/AVSwitch.py:143
 msgid "Just Scale"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:893
+#: ../lib/python/Screens/NetworkSetup.py:1270
 msgid "LAN Adapter"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:177
+#: ../lib/python/Screens/Satconfig.py:229
 msgid "LNB"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:225
+#: ../lib/python/Screens/Satconfig.py:278
 msgid "LOF"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:229
+#: ../lib/python/Screens/Satconfig.py:282
 msgid "LOF/H"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:228
+#: ../lib/python/Screens/Satconfig.py:281
 msgid "LOF/L"
 msgstr ""
 
-#: ../lib/python/Screens/LanguageSelection.py:63 ../data/
+#: ../lib/python/Components/Language.py:93 ../data/
 msgid "Language selection"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:94
+#: ../lib/python/Components/UsageConfig.py:100
 msgid "Last speed"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:31
-#: ../lib/python/Screens/Satconfig.py:207 ../data/
+#: ../lib/python/Screens/Satconfig.py:37
+#: ../lib/python/Screens/Satconfig.py:260 ../data/
 msgid "Latitude"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:445
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:495
 msgid "Leave DVD Player?"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1558
-#: ../lib/python/Screens/InfoBarGenerics.py:1563
+#: ../lib/python/Screens/InfoBarGenerics.py:1617
+#: ../lib/python/Screens/InfoBarGenerics.py:1622
 msgid "Left"
 msgstr ""
 
 #. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
-#: ../lib/python/Components/AVSwitch.py:107
+#: ../lib/python/Components/AVSwitch.py:129
 msgid "Letterbox"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:226
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:231
 msgid "Limit east"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:225
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:230
 msgid "Limit west"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:224
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:229
 msgid "Limits off"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:227
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:232
 msgid "Limits on"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:460
+#: ../lib/python/Screens/NetworkSetup.py:839
 msgid "Link:"
 msgstr ""
 
-#: ../lib/python/Components/FileList.py:140
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:26
+msgid "Linked titles with a DVD menu"
+msgstr ""
+
+#: ../lib/python/Components/config.py:950
+#: ../lib/python/Components/FileList.py:171
 msgid "List of Storage Devices"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:25
+#: ../lib/python/Components/Language.py:28
 msgid "Lithuanian"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:903
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:46
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:104
+msgid "Load"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:1279
 msgid "Local Network"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:29
-#: ../lib/python/Screens/TimerEntry.py:194
+#: ../lib/python/Screens/TimerEntry.py:178
 msgid "Location"
 msgstr ""
 
-#: ../lib/python/Screens/HelpMenu.py:40
+#: ../lib/python/Screens/HelpMenu.py:36
 msgid "Long Keypress"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:29
-#: ../lib/python/Screens/Satconfig.py:205 ../data/
+#: ../lib/python/Screens/Satconfig.py:35
+#: ../lib/python/Screens/Satconfig.py:258 ../data/
 msgid "Longitude"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:281
+#: ../lib/python/Components/Harddisk.py:269
 msgid "MMC Card"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:196
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:201
 msgid "Make this mark an 'in' point"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:197
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:202
 msgid "Make this mark an 'out' point"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:198
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:203
 msgid "Make this mark just a mark"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:460
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:164
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:466
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:172
 msgid "Manual transponder"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:735
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:944
 msgid "Media player"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:137
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:167
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:274
+msgid "Medium is not a writeable DVD!"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:279
+msgid "Medium is not empty!"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:143
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:144
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:145
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:146 ../data/
+msgid "Menu"
+msgstr ""
+
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Mkfs failed"
 msgstr ""
 
+#: ../lib/python/Screens/Satconfig.py:96
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:61
 msgid "Mode"
 msgstr ""
@@ -1471,46 +1807,46 @@ msgstr ""
 msgid "Model: "
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:393
-#: ../lib/python/Screens/ScanSetup.py:424
-#: ../lib/python/Screens/ScanSetup.py:436
+#: ../lib/python/Screens/ScanSetup.py:394
+#: ../lib/python/Screens/ScanSetup.py:419
+#: ../lib/python/Screens/ScanSetup.py:428
 #: ../lib/python/Screens/ServiceInfo.py:136
 msgid "Modulation"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Mon"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:101
+#: ../lib/python/Screens/TimerEntry.py:103
 msgid "Mon-Fri"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:165
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:156
 msgid "Monday"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Mount failed"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1315
+#: ../lib/python/Screens/InfoBarGenerics.py:1353
 msgid "Move Picture in Picture"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:217
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:222
 msgid "Move east"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:214
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:219
 msgid "Move west"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:153
+#: ../lib/python/Screens/EventView.py:168
 msgid "Multi EPG"
 msgstr ""
 
@@ -1518,69 +1854,78 @@ msgstr ""
 msgid "Multiple service support"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:539
+#: ../lib/python/Screens/ScanSetup.py:517
 msgid "Multisat"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:524
-#: ../lib/python/Components/NimManager.py:529
+#: ../lib/python/Screens/NetworkSetup.py:362
+#: ../lib/python/Screens/NetworkSetup.py:366
+#: ../lib/python/Screens/NetworkSetup.py:369
+#: ../lib/python/Screens/NetworkSetup.py:373
+#: ../lib/python/Screens/NetworkSetup.py:376
+#: ../lib/python/Components/NimManager.py:607
+#: ../lib/python/Components/NimManager.py:612
+#: ../lib/python/Components/NimManager.py:731
 msgid "N/A"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:123
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:242
+msgid "NFI image flashing completed. Press Yellow to Reboot!"
+msgstr ""
+
+#: ../lib/python/Components/AVSwitch.py:145
 msgid "NTSC"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:143
+#: ../lib/python/Screens/TimerEntry.py:134
 msgid "Name"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:928 ../data/
+#: ../lib/python/Screens/NetworkSetup.py:1298 ../data/
 msgid "Nameserver"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:106
+#: ../lib/python/Screens/NetworkSetup.py:244
 #, python-format
 msgid "Nameserver %d"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:485
+#: ../lib/python/Screens/NetworkSetup.py:858
 msgid "Nameserver settings"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:218
-#: ../lib/python/Screens/NetworkSetup.py:253 ../data/
+#: ../lib/python/Screens/NetworkSetup.py:338
+#: ../lib/python/Screens/NetworkSetup.py:477 ../data/
 msgid "Netmask"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:282
+#: ../lib/python/Components/Harddisk.py:270
 msgid "Network Mount"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:270
+#: ../lib/python/Screens/NetworkSetup.py:494
+#: ../lib/python/Screens/NetworkSetup.py:499
 msgid "Network SSID"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:398
-#: ../lib/python/Screens/ScanSetup.py:426
-#: ../lib/python/Screens/ScanSetup.py:440
+#: ../lib/python/Screens/ScanSetup.py:432
 msgid "Network scan"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:486
+#: ../lib/python/Screens/NetworkSetup.py:859
 msgid "Network test"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:226
-#: ../lib/python/Screens/NetworkSetup.py:458
+#: ../lib/python/Screens/NetworkSetup.py:346
+#: ../lib/python/Screens/NetworkSetup.py:837
 msgid "Network:"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:503
+#: ../lib/python/Screens/NetworkSetup.py:886
 msgid "NetworkWizard"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:900
+#: ../lib/python/Screens/ChannelSelection.py:899
 msgid "New"
 msgstr ""
 
@@ -1592,31 +1937,44 @@ msgstr ""
 msgid "New version:"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:45
+#: ../lib/python/Screens/EpgSelection.py:46
 msgid "Next"
 msgstr ""
 
-#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/InfoBar.py:158
-#: ../lib/python/Screens/InfoBar.py:190 ../data/
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
+#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/InfoBar.py:167
+#: ../data/ ../lib/python/Plugins/SystemPlugins/Videomode/
 msgid "No"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1489
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:278
+msgid "No (supported) DVDROM found!"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1548
 msgid "No HDD found or HDD not initialized!"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2129
+#: ../lib/python/Screens/NetworkSetup.py:433
+msgid "No Networks found"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:2193
 msgid ""
 "No data on transponder!\n"
 "(Timeout reading PAT)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1407
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:344
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:359
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:155
+msgid "No details for this image file"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1445
 msgid "No event info found, recording indefinitely."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2127
+#: ../lib/python/Screens/InfoBarGenerics.py:2191
 msgid "No free tuner!"
 msgstr ""
 
@@ -1625,24 +1983,32 @@ msgid ""
 "No packages were upgraded yet. So you can check your network and try again."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:562
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:568
 msgid "No positioner capable frontend found."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:273
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:286
 msgid "No satellite frontend found!!"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:577
+#: ../lib/python/Screens/MovieSelection.py:425
+msgid "No tags are set on these movies."
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:583
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:672
+#: ../lib/python/Screens/ScanSetup.py:650
 msgid ""
 "No tuner is enabled!\n"
 "Please setup your tuner settings before you start a service scan."
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:533
+msgid "No useable USB stick found"
+msgstr ""
+
 #: ../lib/python/Screens/ParentalControlSetup.py:131
 msgid ""
 "No valid service PIN found!\n"
@@ -1657,93 +2023,111 @@ msgid ""
 "When you say 'No' here the setup protection stay disabled!"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:34
+#: ../lib/python/Screens/NetworkSetup.py:54
 msgid ""
-"No working local networkadapter found.\n"
-"Please verify that you have attached a network cable and your Network is "
+"No working local network adapter found.\n"
+"Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:351
+#: ../lib/python/Screens/NetworkSetup.py:53
 msgid ""
-"No working wireless interface found.\n"
-" Please verify that you have attached a compatible WLAN USB Stick or enable "
-"you local network interface."
+"No working wireless network adapter found.\n"
+"Please verify that you have attached a compatible WLAN device and your "
+"network is configured correctly."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:33
+#: ../lib/python/Screens/NetworkSetup.py:701
 msgid ""
-"No working wireless networkadapter found.\n"
-"Please verify that you have attached a compatible WLAN USB Stick and your "
-"Network is configured correctly."
+"No working wireless network interface found.\n"
+" Please verify that you have attached a compatible WLAN device or enable "
+"your local network interface."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:160 ../lib/python/Screens/InfoBar.py:192
+#: ../lib/python/Screens/InfoBar.py:169
 msgid "No, but restart from begin"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:567
-#: ../lib/python/Screens/ScanSetup.py:577
-#: ../lib/python/Screens/ScanSetup.py:591
-#: ../lib/python/Components/NimManager.py:792
-#: ../lib/python/Components/NimManager.py:796
-#: ../lib/python/Components/NimManager.py:810
-#: ../lib/python/Components/NimManager.py:811
-#: ../lib/python/Components/NimManager.py:825
+#: ../lib/python/Screens/ScanSetup.py:546
+#: ../lib/python/Screens/ScanSetup.py:556
+#: ../lib/python/Screens/ScanSetup.py:570
+#: ../lib/python/Components/NimManager.py:981
+#: ../lib/python/Components/NimManager.py:985
+#: ../lib/python/Components/NimManager.py:999
+#: ../lib/python/Components/NimManager.py:1003
+#: ../lib/python/Components/NimManager.py:1017
 msgid "None"
 msgstr ""
 
 #. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
-#: ../lib/python/Components/AVSwitch.py:119
+#: ../lib/python/Components/AVSwitch.py:141
 msgid "Nonlinear"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:754
-#: ../lib/python/Components/NimManager.py:829
+#: ../lib/python/Components/NimManager.py:946
+#: ../lib/python/Components/NimManager.py:1021
 msgid "North"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:28
+#: ../lib/python/Components/Language.py:31
 msgid "Norwegian"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:787
-#: ../lib/python/Screens/ScanSetup.py:789
-#: ../lib/python/Screens/ScanSetup.py:945
-#: ../lib/python/Screens/ScanSetup.py:947
-#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:86
+#: ../lib/python/Components/Task.py:366
+#, python-format
+msgid ""
+"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
+"required, %d MB available)"
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:766
+#: ../lib/python/Screens/ScanSetup.py:768
+#: ../lib/python/Screens/ScanSetup.py:912
+#: ../lib/python/Screens/ScanSetup.py:914
+#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:90
 msgid ""
 "Nothing to scan!\n"
 "Please setup your tuner settings before you start a service scan."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:146
+#: ../lib/python/Plugins/SystemPlugins/VideoTune/VideoFinetune.py:147
 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."
 msgstr ""
 
-#: ../lib/python/Screens/Setup.py:94 ../lib/python/Screens/TimeDateInput.py:13
-#: ../lib/python/Screens/TimerEntry.py:27
+#: ../lib/python/Screens/LocationBox.py:91 ../lib/python/Screens/Setup.py:87
+#: ../lib/python/Screens/TimeDateInput.py:13
+#: ../lib/python/Screens/TimerEntry.py:28
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:45
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:103
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:198
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:40
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:71
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:36 ../data/
 msgid "OK"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1557
-#: ../lib/python/Screens/InfoBarGenerics.py:1575
-#: ../lib/python/Components/NimManager.py:787
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:99
+msgid "OSD visibility"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1616
+#: ../lib/python/Screens/InfoBarGenerics.py:1634
+#: ../lib/python/Components/NimManager.py:967
+#: ../lib/python/Components/NimManager.py:975
 msgid "Off"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1557
-#: ../lib/python/Screens/InfoBarGenerics.py:1575
-#: ../lib/python/Components/NimManager.py:787
+#: ../lib/python/Screens/InfoBarGenerics.py:1616
+#: ../lib/python/Screens/InfoBarGenerics.py:1634
+#: ../lib/python/Components/NimManager.py:967
+#: ../lib/python/Components/NimManager.py:975
 msgid "On"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:825
+#: ../lib/python/Components/NimManager.py:1017
 msgid "One"
 msgstr ""
 
@@ -1751,15 +2135,15 @@ msgstr ""
 msgid "Online-Upgrade"
 msgstr ""
 
-#: ../lib/python/Screens/ServiceInfo.py:137
-msgid "Orbital Position"
+#: ../lib/python/Screens/ScanSetup.py:434
+msgid "Only Free scan"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:311
-msgid "Other..."
+#: ../lib/python/Screens/ServiceInfo.py:137
+msgid "Orbital Position"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:123
+#: ../lib/python/Components/AVSwitch.py:145
 msgid "PAL"
 msgstr ""
 
@@ -1781,11 +2165,15 @@ msgid "Page"
 msgstr ""
 
 #. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
-#: ../lib/python/Components/AVSwitch.py:109
-#: ../lib/python/Components/AVSwitch.py:117
+#: ../lib/python/Components/AVSwitch.py:131
+#: ../lib/python/Components/AVSwitch.py:139
 msgid "Pan&Scan"
 msgstr ""
 
+#: ../lib/python/Components/FileList.py:173
+msgid "Parent Directory"
+msgstr ""
+
 #: ../lib/python/Components/ParentalControl.py:80 ../data/
 msgid "Parental control"
 msgstr ""
@@ -1794,12 +2182,17 @@ msgstr ""
 msgid "Parental control type"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:37
+#: ../lib/python/Components/UsageConfig.py:41
 msgid "Pause movie at end"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:595
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:596
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
-#: ../lib/python/Components/AVSwitch.py:115
+#: ../lib/python/Components/AVSwitch.py:137
 msgid "Pillarbox"
 msgstr ""
 
@@ -1808,54 +2201,77 @@ msgstr ""
 msgid "Pilot"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:92
+#: ../lib/python/Components/UsageConfig.py:98
 msgid "Play"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:48
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:479
+msgid "Play Audio-CD..."
+msgstr ""
+
+#: ../lib/python/Screens/InfoBar.py:45
 msgid "Play recorded movies..."
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Please Reboot"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaScanner/plugin.py:40
+#: ../lib/python/Plugins/Extensions/MediaScanner/plugin.py:44
 msgid "Please Select Medium to be Scanned"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1464
+#: ../lib/python/Screens/InfoBarGenerics.py:1515
 msgid "Please change recording endtime"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1252
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:295
+msgid "Please check your network settings!"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:237
+msgid "Please choose .NFI image file from feed server to download"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:498
+#: ../lib/python/Screens/InfoBarGenerics.py:1269
 msgid "Please choose an extension..."
 msgstr ""
 
-#: ../lib/python/Screens/DefaultWizard.py:96
+#: ../lib/python/Screens/DefaultWizard.py:95
 msgid "Please choose he package..."
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:52
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:507
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:55
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:173
+#: ../lib/python/Screens/ChannelSelection.py:172
 msgid "Please enter a name for the new bouquet"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:230
+#: ../lib/python/Screens/ChannelSelection.py:229
 msgid "Please enter a name for the new marker"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:195
+#: ../lib/python/Screens/LocationBox.py:372
 msgid "Please enter a new filename"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:476
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:597
 msgid "Please enter filename (empty = use current date)"
 msgstr ""
 
+#: ../lib/python/Screens/LocationBox.py:239
+msgid "Please enter name of the new directory"
+msgstr ""
+
 #: ../lib/python/Screens/ParentalControlSetup.py:24
 msgid "Please enter the correct pin code"
 msgstr ""
@@ -1864,32 +2280,52 @@ msgstr ""
 msgid "Please enter the old pin code"
 msgstr ""
 
+#: ../RecordTimer.py:337
+msgid ""
+"Please note that the previously selected media could not be accessed and "
+"therefore the default directory is being used instead."
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:299
+msgid "Please press OK to continue."
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py:21
 msgid "Please press OK!"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:517
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:53
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:87
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:203
+msgid "Please select .NFI flash image file from medium"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:639
 msgid "Please select a playlist to delete..."
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:497
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:618
 msgid "Please select a playlist..."
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:320
+#: ../lib/python/Screens/TimerEntry.py:325
 msgid "Please select a subservice to record..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1684
-#: ../lib/python/Screens/SubservicesQuickzap.py:101
+#: ../lib/python/Screens/InfoBarGenerics.py:1745
+#: ../lib/python/Screens/SubservicesQuickzap.py:106
 msgid "Please select a subservice..."
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:376
-msgid "Please select keyword to filter..."
+#: ../lib/python/Screens/MovieSelection.py:422
+msgid "Please select tag to filter..."
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:227
+msgid "Please select target directory or medium"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:337
+#: ../lib/python/Screens/MovieSelection.py:367
 msgid "Please select the movie path..."
 msgstr ""
 
@@ -1900,73 +2336,100 @@ msgid ""
 "Press OK to go back to the TV mode or EXIT to cancel the moving."
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:164
+#: ../lib/python/Components/Language.py:92
+msgid ""
+"Please use the UP and DOWN keys to select your language. Afterwards press "
+"the OK button."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:612
+msgid "Please wait for activation of your network configuration..."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:182
+msgid "Please wait while we configure your network..."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:936
+msgid "Please wait while your network is restarting..."
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:1149
+#: ../lib/python/Screens/NetworkSetup.py:1172
+#: ../lib/python/Screens/NetworkSetup.py:1179
+msgid "Please wait..."
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:180
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:67
 msgid "Please wait... Loading list..."
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:388
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:441
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:132
+#: ../lib/python/Screens/ScanSetup.py:389
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:447
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:136
 msgid "Polarity"
 msgstr ""
 
 #: ../lib/python/Screens/ServiceInfo.py:141
-#: ../lib/python/Components/NimManager.py:786
+#: ../lib/python/Components/NimManager.py:966
+#: ../lib/python/Components/NimManager.py:974
 msgid "Polarization"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:29
+#: ../lib/python/Components/Language.py:32
 msgid "Polish"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:19
+#: ../lib/python/Screens/Satconfig.py:22
 msgid "Port A"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:22
+#: ../lib/python/Screens/Satconfig.py:25
 msgid "Port B"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:24
+#: ../lib/python/Screens/Satconfig.py:27
 msgid "Port C"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:25
+#: ../lib/python/Screens/Satconfig.py:28
 msgid "Port D"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:30
+#: ../lib/python/Components/Language.py:33
 msgid "Portuguese"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:739
+#: ../lib/python/Screens/Satconfig.py:427
+#: ../lib/python/Components/NimManager.py:923
 msgid "Positioner"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:173
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:178
 msgid "Positioner fine movement"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:172
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:177
 msgid "Positioner movement"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:581
 #: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:587
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:593
 msgid "Positioner setup"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:175
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:180
 msgid "Positioner storage"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:37
-#: ../lib/python/Screens/Satconfig.py:213
+#: ../lib/python/Screens/Satconfig.py:43
+#: ../lib/python/Screens/Satconfig.py:266
 msgid "Power threshold in mA"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:461
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:164
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:467
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:172
 msgid "Predefined transponder"
 msgstr ""
 
@@ -1974,15 +2437,22 @@ msgstr ""
 msgid "Preparing... Please wait"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:349
+#: ../lib/python/Screens/NetworkSetup.py:55
+#: ../lib/python/Screens/NetworkSetup.py:296
+#: ../lib/python/Screens/NetworkSetup.py:699
 msgid "Press OK on your remote control to continue."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:228
+#: ../lib/python/Screens/NetworkSetup.py:208
+#: ../lib/python/Screens/NetworkSetup.py:348
 msgid "Press OK to activate the settings."
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:870
+#: ../lib/python/Screens/NetworkSetup.py:61
+msgid "Press OK to edit the settings."
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:837
 msgid "Press OK to scan"
 msgstr ""
 
@@ -1990,22 +2460,23 @@ msgstr ""
 msgid "Press OK to start the scan"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:452
-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 supported.\n"
-"Connect your Wlan USB Stick to your Dreambox before pressing OK.\n"
-"\n"
+#: ../lib/python/Screens/EpgSelection.py:45
+msgid "Prev"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:44
-msgid "Prev"
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:99
+msgid "Preview menu"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:210
+#: ../lib/python/Screens/NetworkSetup.py:330
 msgid "Primary DNS"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:44
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:103
+msgid "Properties of current title"
+msgstr ""
+
 #: ../lib/python/Screens/ParentalControlSetup.py:68
 msgid "Protect services"
 msgstr ""
@@ -2014,27 +2485,27 @@ msgstr ""
 msgid "Protect setup"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:654
-#: ../lib/python/Screens/ChannelSelection.py:788
-#: ../lib/python/Components/NimManager.py:852
+#: ../lib/python/Screens/ChannelSelection.py:653
+#: ../lib/python/Screens/ChannelSelection.py:787
+#: ../lib/python/Components/NimManager.py:1044
 msgid "Provider"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:101
+#: ../lib/python/Screens/Satconfig.py:150
 msgid "Provider to scan"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:898
+#: ../lib/python/Screens/ChannelSelection.py:897
 msgid "Providers"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1675
-#: ../lib/python/Screens/InfoBarGenerics.py:1677
-#: ../lib/python/Screens/InfoBarGenerics.py:1680
+#: ../lib/python/Screens/InfoBarGenerics.py:1736
+#: ../lib/python/Screens/InfoBarGenerics.py:1738
+#: ../lib/python/Screens/InfoBarGenerics.py:1741
 msgid "Quickzap"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:82
+#: ../lib/python/Components/AVSwitch.py:104
 msgid "RGB"
 msgstr ""
 
@@ -2042,50 +2513,52 @@ msgstr ""
 msgid "RSS Feed URI"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:283
+#: ../lib/python/Components/Harddisk.py:271
 msgid "Ram Disk"
 msgstr ""
 
-#: ../lib/python/Components/ConfigList.py:193
+#: ../lib/python/Components/ConfigList.py:196
 msgid "Really close without saving settings?"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:127
+#: ../lib/python/Screens/TimerEdit.py:193
 msgid "Really delete done timers?"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:137
-msgid "Really delete this timer?"
+#: ../lib/python/Screens/SubservicesQuickzap.py:117
+msgid "Really exit the subservices quickzap?"
 msgstr ""
 
-#: ../lib/python/Screens/SubservicesQuickzap.py:112
-msgid "Really exit the subservices quickzap?"
+#: ../lib/python/Screens/Standby.py:118
+msgid "Really reboot now?"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:326
-msgid "Recorded files..."
+#: ../lib/python/Screens/Standby.py:122
+msgid "Really restart now?"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:73
-msgid "Recording"
+#: ../lib/python/Screens/Standby.py:116
+msgid "Really shutdown now?"
 msgstr ""
 
-#: ../lib/python/Screens/Standby.py:104
-msgid ""
-"Recording(s) are in progress or coming up in few seconds... really reboot "
-"now?"
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:243
+msgid "Reboot"
 msgstr ""
 
-#: ../lib/python/Screens/Standby.py:108
-msgid ""
-"Recording(s) are in progress or coming up in few seconds... really restart "
-"now?"
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107 ../data/
+msgid "Record"
 msgstr ""
 
-#: ../lib/python/Screens/Standby.py:102
-msgid ""
-"Recording(s) are in progress or coming up in few seconds... really shutdown "
-"now?"
+#: ../lib/python/Screens/MovieSelection.py:351
+msgid "Recorded files..."
+msgstr ""
+
+#: ../lib/python/Screens/EventView.py:88
+msgid "Recording"
+msgstr ""
+
+#: ../lib/python/Screens/Standby.py:107
+msgid "Recording(s) are in progress or coming up in few seconds!"
 msgstr ""
 
 #: ../lib/python/Screens/ParentalControlSetup.py:236
@@ -2096,31 +2569,59 @@ msgstr ""
 msgid "Refresh Rate"
 msgstr ""
 
+#: ../lib/python/Screens/LocationBox.py:93
+#: ../lib/python/Screens/LocationBox.py:206
+msgid "Remove Bookmark"
+msgstr ""
+
 #: ../lib/python/Screens/PluginBrowser.py:20
 msgid "Remove Plugins"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:200
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:205
 msgid "Remove a mark"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:45
+msgid "Remove currently selected title"
+msgstr ""
+
 #: ../lib/python/Screens/PluginBrowser.py:132
 msgid "Remove plugins"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:69
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:437
+msgid "Remove the broken .NFI file?"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:385
+msgid "Remove the incomplete .NFI file?"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:45
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:60
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:105
+msgid "Remove title"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:285
+#, python-format
+msgid "Removing directory %s failed. (Maybe not empty.)"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:92
 msgid "Rename"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:147
+#: ../lib/python/Screens/TimerEntry.py:138
 msgid "Repeat Type"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:78
+#: ../lib/python/Screens/TimerEdit.py:102
 msgid "Repeating event currently recording... What do you want to do?"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:153
+#: ../lib/python/Screens/TimerEntry.py:144
 msgid "Repeats"
 msgstr ""
 
@@ -2128,6 +2629,10 @@ msgstr ""
 msgid "Reset"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:101
+msgid "Reset and renumerate title names"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:63
 msgid "Resolution"
 msgstr ""
@@ -2136,25 +2641,25 @@ msgstr ""
 msgid "Restart GUI now?"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:487
+#: ../lib/python/Screens/NetworkSetup.py:860
 msgid "Restart network"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:771
-#: ../lib/python/Screens/NetworkSetup.py:855
+#: ../lib/python/Screens/NetworkSetup.py:1249
+#: ../lib/python/Screens/NetworkSetup.py:1378
 msgid "Restart test"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:450
+#: ../lib/python/Screens/NetworkSetup.py:830
 msgid "Restart your network connection and interfaces.\n"
 msgstr ""
 
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:74
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:164
+#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:161
 msgid "Restore"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:33
+#: ../lib/python/Components/UsageConfig.py:37
 msgid "Resume from last position"
 msgstr ""
 
@@ -2165,36 +2670,36 @@ msgstr ""
 #. TRANSLATORS: in the middle somewhere and not from the beginning.
 #. TRANSLATORS: (Some translators seem to have interpreted it as a
 #. TRANSLATORS: question or a choice, but it is a statement.)
-#: ../lib/python/Screens/InfoBarGenerics.py:1830
+#: ../lib/python/Screens/InfoBarGenerics.py:1894
 msgid "Resuming playback"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:445
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:494
 msgid "Return to file browser"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:35
-#: ../lib/python/Components/UsageConfig.py:37
+#: ../lib/python/Components/UsageConfig.py:39
+#: ../lib/python/Components/UsageConfig.py:41
 msgid "Return to movie list"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:35
-#: ../lib/python/Components/UsageConfig.py:37
+#: ../lib/python/Components/UsageConfig.py:39
+#: ../lib/python/Components/UsageConfig.py:41
 msgid "Return to previous service"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1558
-#: ../lib/python/Screens/InfoBarGenerics.py:1563
+#: ../lib/python/Screens/InfoBarGenerics.py:1617
+#: ../lib/python/Screens/InfoBarGenerics.py:1622
 msgid "Right"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:395
+#: ../lib/python/Screens/ScanSetup.py:396
 #: ../lib/python/Screens/ServiceInfo.py:144
 msgid "Rolloff"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:38
-#: ../lib/python/Screens/Satconfig.py:214
+#: ../lib/python/Screens/Satconfig.py:44
+#: ../lib/python/Screens/Satconfig.py:267
 msgid "Rotor turning speed"
 msgstr ""
 
@@ -2202,212 +2707,253 @@ msgstr ""
 msgid "Running"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:31
+#: ../lib/python/Components/Language.py:34
 msgid "Russian"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:82
+#: ../lib/python/Components/AVSwitch.py:104
 msgid "S-Video"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Sat"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:17 ../lib/python/Screens/Satconfig.py:84
-#: ../lib/python/Screens/Satconfig.py:238
-#: ../lib/python/Screens/ScanSetup.py:384
-#: ../lib/python/Screens/ScanSetup.py:402
+#: ../lib/python/Screens/Satconfig.py:19
+#: ../lib/python/Screens/Satconfig.py:133
+#: ../lib/python/Screens/Satconfig.py:291
+#: ../lib/python/Screens/ScanSetup.py:385
+#: ../lib/python/Screens/ScanSetup.py:401
 #: ../lib/python/Components/ServiceScan.py:42
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:435
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:126
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:441
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:130
 msgid "Satellite"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:64
-#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:70
+#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:67
+#: ../lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/plugin.py:73
 msgid "Satellite Equipment Setup"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:653
-#: ../lib/python/Screens/ChannelSelection.py:790
+#: ../lib/python/Screens/ChannelSelection.py:652
+#: ../lib/python/Screens/ChannelSelection.py:789
 msgid "Satellites"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:285
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:291 ../data/
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:298
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:304 ../data/
 msgid "Satfinder"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:170
+#: ../lib/python/Screens/Satconfig.py:415
+msgid "Sats"
+msgstr ""
+
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:161
 msgid "Saturday"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:476
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:105
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:198
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:201
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:70
+msgid "Save"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:597
 msgid "Save Playlist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:404
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:171
 msgid "Scaling Mode"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:866
+#: ../lib/python/Screens/ScanSetup.py:833
 msgid "Scan "
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:121
+#: ../lib/python/Screens/Satconfig.py:170
 msgid "Scan QAM128"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:118
+#: ../lib/python/Screens/Satconfig.py:167
 msgid "Scan QAM16"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:122
+#: ../lib/python/Screens/Satconfig.py:171
 msgid "Scan QAM256"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:119
+#: ../lib/python/Screens/Satconfig.py:168
 msgid "Scan QAM32"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:120
+#: ../lib/python/Screens/Satconfig.py:169
 msgid "Scan QAM64"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:124
+#: ../lib/python/Screens/Satconfig.py:173
 msgid "Scan SR6875"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:123
+#: ../lib/python/Screens/Satconfig.py:172
 msgid "Scan SR6900"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:494
+#: ../lib/python/Screens/NetworkSetup.py:870
 msgid "Scan Wireless Networks"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:125
-#: ../lib/python/Screens/Satconfig.py:126
+#: ../lib/python/Screens/Satconfig.py:174
+#: ../lib/python/Screens/Satconfig.py:175
 msgid "Scan additional SR"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:110
+#: ../lib/python/Screens/Satconfig.py:159
 msgid "Scan band EU HYPER"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:105
+#: ../lib/python/Screens/Satconfig.py:154
 msgid "Scan band EU MID"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:109
+#: ../lib/python/Screens/Satconfig.py:158
 msgid "Scan band EU SUPER"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:107
+#: ../lib/python/Screens/Satconfig.py:156
 msgid "Scan band EU UHF IV"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:108
+#: ../lib/python/Screens/Satconfig.py:157
 msgid "Scan band EU UHF V"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:104
+#: ../lib/python/Screens/Satconfig.py:153
 msgid "Scan band EU VHF I"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:106
+#: ../lib/python/Screens/Satconfig.py:155
 msgid "Scan band EU VHF III"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:113
+#: ../lib/python/Screens/Satconfig.py:162
 msgid "Scan band US HIGH"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:115
+#: ../lib/python/Screens/Satconfig.py:164
 msgid "Scan band US HYPER"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:111
+#: ../lib/python/Screens/Satconfig.py:160
 msgid "Scan band US LOW"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:112
+#: ../lib/python/Screens/Satconfig.py:161
 msgid "Scan band US MID"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:114
+#: ../lib/python/Screens/Satconfig.py:163
 msgid "Scan band US SUPER"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:446
+#: ../lib/python/Screens/NetworkSetup.py:826
 msgid ""
 "Scan your network for wireless Access Points and connect to them using your "
 "WLAN USB Stick\n"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:129
+#: ../lib/python/Plugins/SystemPlugins/DefaultServicesScanner/plugin.py:137
 msgid ""
 "Scans default lamedbs sorted by satellite with a connected dish positioner"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:216
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:47
+msgid "Search"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:221
 msgid "Search east"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:215
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:82
+msgid "Search for"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:220
 msgid "Search west"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:211
+#: ../lib/python/Screens/NetworkSetup.py:331
 msgid "Secondary DNS"
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:39 ../data/
+#: ../lib/python/Screens/LocationBox.py:51
 msgid "Select Location"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1590
+#: ../lib/python/Screens/InfoBarGenerics.py:1649
 msgid "Select audio mode"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1566
+#: ../lib/python/Screens/InfoBarGenerics.py:1625
 msgid "Select audio track"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:228
+#: ../lib/python/Screens/TimerEntry.py:219
 msgid "Select channel to record from"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:186
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:209
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:233
+msgid "Select image"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:231
+msgid "Selected source image"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:20
+msgid "Send DiSEqC"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:31
+msgid "Send DiSEqC only on satellite change"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:26
+msgid "Seperate titles with a main menu"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:239
 msgid "Sequence repeat"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1708
+#: ../lib/python/Screens/InfoBarGenerics.py:1769
 msgid "Service has been added to the favourites."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1714
+#: ../lib/python/Screens/InfoBarGenerics.py:1775
 msgid "Service has been added to the selected bouquet."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2131
+#: ../lib/python/Screens/InfoBarGenerics.py:2195
 msgid ""
 "Service invalid!\n"
 "(Timeout reading PMT)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2130
+#: ../lib/python/Screens/InfoBarGenerics.py:2194
 msgid ""
 "Service not found!\n"
 "(SID not found in PAT)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2136
+#: ../lib/python/Screens/InfoBarGenerics.py:2200
 msgid ""
 "Service unavailable!\n"
 "Check tuner configuration!"
@@ -2417,28 +2963,46 @@ msgstr ""
 msgid "Serviceinfo"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:902
+#: ../lib/python/Screens/ChannelSelection.py:901
 msgid "Services"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:174
+#: ../lib/python/Screens/Satconfig.py:30
+msgid "Set Voltage and 22KHz"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:58
+msgid "Set as default Interface"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:81
+msgid "Set interface as default Interface"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:179
 msgid "Set limits"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:70
+#: ../lib/python/Screens/SleepTimerEdit.py:86
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:46
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:63
 #: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:38
 msgid "Settings"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:897
-#: ../lib/python/Screens/NetworkSetup.py:908
-#: ../lib/python/Screens/NetworkSetup.py:916
-#: ../lib/python/Screens/NetworkSetup.py:924
-#: ../lib/python/Screens/NetworkSetup.py:932
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:62 ../data/
+msgid "Setup"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:1273
+#: ../lib/python/Screens/NetworkSetup.py:1283
+#: ../lib/python/Screens/NetworkSetup.py:1289
+#: ../lib/python/Screens/NetworkSetup.py:1295
+#: ../lib/python/Screens/NetworkSetup.py:1301
 msgid "Show Info"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:495
+#: ../lib/python/Screens/NetworkSetup.py:872
 msgid "Show WLAN Status"
 msgstr ""
 
@@ -2446,66 +3010,74 @@ msgstr ""
 msgid "Show services beginning with"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:49
+#: ../lib/python/Screens/InfoBar.py:46
 msgid "Show the radio player..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:50
+#: ../lib/python/Screens/InfoBar.py:47
 msgid "Show the tv player..."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:448
+#: ../lib/python/Screens/NetworkSetup.py:828
 msgid "Shows the state of your wireless LAN connection.\n"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:24
+#: ../lib/python/Screens/SleepTimerEdit.py:41
 msgid "Shutdown Dreambox after"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:132
+#: ../lib/python/Screens/EventView.py:147
 msgid "Similar"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:126
+#: ../lib/python/Screens/EventView.py:141
 msgid "Similar broadcasts:"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:40
+#: ../lib/python/Components/UsageConfig.py:44
 msgid "Simple"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:735
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDProject.py:27
+msgid "Simple titleset (compatibility for legacy players)"
+msgstr ""
+
+#: ../lib/python/Components/NimManager.py:919
 msgid "Single"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:152
+#: ../lib/python/Screens/EventView.py:167
 msgid "Single EPG"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:539
+#: ../lib/python/Screens/ScanSetup.py:517
 msgid "Single satellite"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:539
-#: ../lib/python/Screens/ScanSetup.py:540
-#: ../lib/python/Screens/ScanSetup.py:541
+#: ../lib/python/Screens/ScanSetup.py:517
+#: ../lib/python/Screens/ScanSetup.py:518
+#: ../lib/python/Screens/ScanSetup.py:519
 msgid "Single transponder"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:93
+#: ../lib/python/Components/UsageConfig.py:99
 msgid "Singlestep (GOP)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1285 ../data/
+#: ../lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py:134
+msgid "Skin..."
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1323 ../data/
 msgid "Sleep Timer"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:62
-#: ../lib/python/Screens/SleepTimerEdit.py:64
+#: ../lib/python/Screens/SleepTimerEdit.py:78
+#: ../lib/python/Screens/SleepTimerEdit.py:80
 msgid "Sleep timer action:"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:403
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:170
 msgid "Slideshow Interval (sec.)"
 msgstr ""
 
@@ -2514,8 +3086,8 @@ msgstr ""
 msgid "Slot %d"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:757
-#: ../lib/python/Components/NimManager.py:832
+#: ../lib/python/Components/NimManager.py:949
+#: ../lib/python/Components/NimManager.py:1024
 msgid "Slow"
 msgstr ""
 
@@ -2523,7 +3095,7 @@ msgstr ""
 msgid "Some plugins are not available:\n"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:146
+#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:143
 msgid ""
 "Sorry your Backup destination does not exist\n"
 "\n"
@@ -2531,144 +3103,146 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../lib/python/Screens/EpgSelection.py:175
+#: ../lib/python/Screens/EpgSelection.py:176
 msgid "Sort A-Z"
 msgstr ""
 
 #. TRANSLATORS: This must fit into the header button in the EPG-List
-#: ../lib/python/Screens/EpgSelection.py:172
+#: ../lib/python/Screens/EpgSelection.py:173
 msgid "Sort Time"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:754
-#: ../lib/python/Components/NimManager.py:829
+#: ../lib/python/Components/NimManager.py:946
+#: ../lib/python/Components/NimManager.py:1021
 msgid "South"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:32
+#: ../lib/python/Components/Language.py:35
 msgid "Spanish"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:64 ../data/
+#: ../lib/python/Screens/SleepTimerEdit.py:80 ../data/
 msgid "Standby"
 msgstr ""
 
-#: ../mytest.py:438 ../data/
+#: ../mytest.py:360 ../data/
 msgid "Standby / Restart"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:176
-msgid "Start"
-msgstr ""
-
-#: ../lib/python/Components/UsageConfig.py:33
+#: ../lib/python/Components/UsageConfig.py:37
 msgid "Start from the beginning"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1505
+#: ../lib/python/Screens/InfoBarGenerics.py:1564
 msgid "Start recording?"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:942
+#: ../lib/python/Screens/NetworkSetup.py:1310
 msgid "Start test"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:181
+#: ../lib/python/Screens/TimerEntry.py:168
 msgid "StartTime"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:155
+#: ../lib/python/Screens/TimerEntry.py:146
 msgid "Starting on"
 msgstr ""
 
-#: ../lib/python/Screens/Wizard.py:428
-msgid "Step "
-msgstr ""
-
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:221
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:226
 msgid "Step east"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:220
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:225
 msgid "Step west"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1558
-#: ../lib/python/Screens/InfoBarGenerics.py:1563
+#: ../lib/python/Screens/InfoBarGenerics.py:1617
+#: ../lib/python/Screens/InfoBarGenerics.py:1622
 msgid "Stereo"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:209
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:210
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:211
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:212
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:214
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:215
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:216
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:217
 msgid "Stop"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1123
+#: ../lib/python/Screens/InfoBarGenerics.py:1140
 msgid "Stop Timeshift?"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:76
+#: ../lib/python/Screens/TimerEdit.py:100
 msgid "Stop current event and disable coming events"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEdit.py:75
+#: ../lib/python/Screens/TimerEdit.py:99
 msgid "Stop current event but not coming events"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:161 ../lib/python/Screens/InfoBar.py:193
+#: ../lib/python/Screens/InfoBar.py:172
 msgid "Stop playing this movie?"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:945
+#: ../lib/python/Screens/NetworkSetup.py:1313
 msgid "Stop test"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:230
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:235
 msgid "Store position"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:174
+#: ../lib/python/Screens/Satconfig.py:226
 msgid "Stored position"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1608
+#: ../lib/python/Screens/InfoBarGenerics.py:1667
 msgid "Subservice list..."
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:173 ../data/
+msgid "Subtitle selection"
+msgstr ""
+
+#: ../lib/python/Screens/Subtitles.py:61 ../lib/python/Screens/Subtitles.py:64
+#: ../lib/python/Screens/Subtitles.py:66
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:145 ../data/
+msgid "Subtitles"
+msgstr ""
+
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Sun"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:171
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:162
 msgid "Sunday"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1312
+#: ../lib/python/Screens/InfoBarGenerics.py:1350
 msgid "Swap Services"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:33
+#: ../lib/python/Components/Language.py:36
 msgid "Swedish"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1613
+#: ../lib/python/Screens/InfoBarGenerics.py:1672
 msgid "Switch to next subservice"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1614
+#: ../lib/python/Screens/InfoBarGenerics.py:1673
 msgid "Switch to previous subservice"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:387
-#: ../lib/python/Screens/ScanSetup.py:423
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:440
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:131
+#: ../lib/python/Screens/ScanSetup.py:388
+#: ../lib/python/Screens/ScanSetup.py:418
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:446
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:135
 msgid "Symbol Rate"
 msgstr ""
 
@@ -2676,26 +3250,47 @@ msgstr ""
 msgid "Symbolrate"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:379
+#: ../lib/python/Screens/ScanSetup.py:380
 #: ../lib/python/Screens/ServiceInfo.py:135 ../data/
 msgid "System"
 msgstr ""
 
 #. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
-#: ../lib/python/Screens/About.py:57
+#: ../lib/python/Screens/About.py:58
 msgid "TRANSLATOR_INFO"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:910
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:280
+msgid "TS file is too large for ISO9660 level 1!"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:190
+msgid "Table of content for collection"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:316
+msgid "Tag 1"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:321
+msgid "Tag 2"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:328
+#: ../lib/python/Screens/TimerEntry.py:179
+msgid "Tags"
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:909
 #: ../lib/python/Components/ServiceScan.py:78
 msgid "Terrestrial"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:133
+#: ../lib/python/Screens/Satconfig.py:182
 msgid "Terrestrial provider"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:440
+#: ../lib/python/Screens/NetworkSetup.py:822
 msgid "Test the network configuration of your Dreambox.\n"
 msgstr ""
 
@@ -2703,21 +3298,62 @@ msgstr ""
 msgid "Test-Messagebox?"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:275
+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 ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:622
+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 ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:535
+#, python-format
+msgid ""
+"The following device was found:\n"
+"\n"
+"%s\n"
+"\n"
+"Do you want to write the USB flasher to this stick?"
+msgstr ""
+
 #: ../lib/python/Screens/ScanSetup.py:299
 msgid "The installation of the default services lists is finished."
 msgstr ""
 
-#: ../lib/python/Screens/DefaultWizard.py:42
+#: ../lib/python/Screens/DefaultWizard.py:40
 msgid ""
 "The installation of the default settings is finished. You can now continue "
 "configuring your Dreambox by pressing the OK button on the remote control."
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:197
+msgid ""
+"The md5sum validation failed, the file may be corrupted! Are you sure that "
+"you want to burn this image to flash memory? You are doing this at your own "
+"risk!"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:437
+msgid ""
+"The md5sum validation failed, the file may be downloaded incompletely or be "
+"corrupted!"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:258
+#, python-format
+msgid "The path %s already exists."
+msgstr ""
+
 #: ../lib/python/Screens/ParentalControlSetup.py:274
 msgid "The pin code has been changed successfully."
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:192
+#: ../lib/python/Screens/ChannelSelection.py:191
 #: ../lib/python/Screens/ParentalControlSetup.py:36
 #: ../lib/python/Components/ParentalControl.py:141
 msgid "The pin code you entered is wrong."
@@ -2727,25 +3363,67 @@ msgstr ""
 msgid "The pin codes you entered are different."
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:80
+#: ../lib/python/Screens/SleepTimerEdit.py:98
 msgid "The sleep timer has been activated."
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:83
+#: ../lib/python/Screens/SleepTimerEdit.py:101
 msgid "The sleep timer has been disabled."
 msgstr ""
 
-#: ../RecordTimer.py:402
+#: ../RecordTimer.py:426
 msgid "The timer file (timers.xml) is corrupt and could not be loaded."
 msgstr ""
 
-#: ../lib/python/Screens/LocationBox.py:181
+#: ../lib/python/Screens/NetworkSetup.py:744
+#: ../lib/python/Screens/NetworkSetup.py:764
+#: ../lib/python/Screens/NetworkSetup.py:778
+#: ../lib/python/Screens/NetworkSetup.py:897
+msgid ""
+"The wireless LAN plugin is not installed!\n"
+"Please install it."
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:645 ../data/
+msgid ""
+"The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:359
 msgid ""
 "There might not be enough Space on the selected Partition.\n"
 "Do you really want to continue?"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:842
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:188
+#, python-format
+msgid "This .NFI file does not contain a valid %s image!"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:186
+msgid ""
+"This .NFI file does not have a md5sum signature and is not guaranteed to "
+"work. Do you really want to burn this image to flash memory?"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:195
+msgid ""
+"This .NFI file has a valid md5 signature. Continue programming this image to "
+"flash memory?"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:166
+msgid ""
+"This DVD RW medium is already formatted - reformatting will erase all "
+"content on the disc."
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:275
+#, python-format
+msgid "This Dreambox can't decode %s video streams!"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:1237
 msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
@@ -2754,7 +3432,7 @@ msgid ""
 "the \"Nameserver\" Configuration"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:827
+#: ../lib/python/Screens/NetworkSetup.py:1222
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
 "If you get a \"disconnected\" message:\n"
@@ -2762,7 +3440,7 @@ msgid ""
 "- verify that the cable is not broken"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:837
+#: ../lib/python/Screens/NetworkSetup.py:1232
 msgid ""
 "This test checks whether a valid IP Address is found for your LAN Adapter.\n"
 "If you get a \"unconfirmed\" message:\n"
@@ -2770,7 +3448,7 @@ msgid ""
 "- please check your DHCP, cabling and adapter setup"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:832
+#: ../lib/python/Screens/NetworkSetup.py:1227
 msgid ""
 "This test checks whether your LAN Adapter is set up for automatic IP Address "
 "configuration with DHCP.\n"
@@ -2782,27 +3460,31 @@ msgid ""
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:822
+#: ../lib/python/Screens/NetworkSetup.py:1217
 msgid "This test detects your configured LAN-Adapter."
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:825
+#: ../lib/python/Components/NimManager.py:1017
 msgid "Three"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:230
+#: ../lib/python/Screens/Satconfig.py:283
 msgid "Threshold"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Thu"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:168
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:59
+msgid "Thumbnails"
+msgstr ""
+
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:159
 msgid "Thursday"
 msgstr ""
 
@@ -2810,55 +3492,91 @@ msgstr ""
 msgid "Time"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:145
+#: ../lib/python/Screens/TimerEntry.py:136
 msgid "Timer Type"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:57
-#: ../lib/python/Screens/SleepTimerEdit.py:59
+#: ../RecordTimer.py:448
+msgid ""
+"Timer overlap in timers.xml detected!\n"
+"Please recheck it!"
+msgstr ""
+
+#: ../lib/python/Screens/SleepTimerEdit.py:27
+#: ../lib/python/Screens/SleepTimerEdit.py:29
 msgid "Timer status:"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1093
+#: ../lib/python/Screens/InfoBarGenerics.py:1110
 msgid "Timeshift not possible!"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:377
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:18
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py:14
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:144
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:73
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:90
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:414
 msgid "Title"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:81
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:44
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:62
+msgid "Title properties"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:128
 msgid "Title:"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:260
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:155
+msgid "Titleset mode"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:667
+msgid ""
+"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 ""
+
+#: ../lib/python/Screens/EpgSelection.py:273
 #: ../lib/python/Tools/FuzzyDate.py:10
 msgid "Today"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:169
+#: ../lib/python/Screens/Satconfig.py:220
 msgid "Tone mode"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:183
+#: ../lib/python/Screens/Satconfig.py:236
 msgid "Toneburst"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:736
+#: ../lib/python/Components/NimManager.py:920
 msgid "Toneburst A/B"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:72
+msgid "Track"
+msgstr ""
+
 #: ../lib/python/Screens/ServiceInfo.py:149
 msgid "Transmission Mode"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:437
+#: ../lib/python/Screens/ScanSetup.py:429
 msgid "Transmission mode"
 msgstr ""
 
 #: ../lib/python/Screens/ServiceInfo.py:87
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:444
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:135
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:450
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:139
 msgid "Transponder"
 msgstr ""
 
@@ -2866,7 +3584,7 @@ msgstr ""
 msgid "Transponder Type"
 msgstr ""
 
-#: ../lib/python/Screens/InputBox.py:173
+#: ../lib/python/Screens/InputBox.py:175
 msgid "Tries left:"
 msgstr ""
 
@@ -2878,35 +3596,38 @@ msgstr ""
 msgid "Try to find used transponders in cable network.. please wait..."
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Tue"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:166
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:157
 msgid "Tuesday"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:171
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:203
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:433
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:124
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:176
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:208
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:439
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:128
 msgid "Tune"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2128
+#: ../lib/python/Screens/InfoBarGenerics.py:2192
 msgid "Tune failed!"
 msgstr ""
 
+#: ../lib/python/Screens/Satconfig.py:110
+#: ../lib/python/Screens/Satconfig.py:119
+#: ../lib/python/Screens/Satconfig.py:410
 #: ../lib/python/Screens/ScanSetup.py:355
-#: ../lib/python/Components/ServiceScan.py:135
+#: ../lib/python/Components/ServiceScan.py:133
 msgid "Tuner"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:384
+#: ../lib/python/Components/NimManager.py:455
 msgid "Tuner "
 msgstr ""
 
@@ -2914,11 +3635,11 @@ msgstr ""
 msgid "Tuner status"
 msgstr ""
 
-#: ../lib/python/Components/Language.py:34
+#: ../lib/python/Components/Language.py:37
 msgid "Turkish"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:825
+#: ../lib/python/Components/NimManager.py:1017
 msgid "Two"
 msgstr ""
 
@@ -2928,15 +3649,24 @@ msgstr ""
 msgid "Type of scan"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:748
+#: ../lib/python/Screens/Satconfig.py:429
+#: ../lib/python/Components/NimManager.py:940
 msgid "USALS"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:284
+#: ../lib/python/Components/Harddisk.py:272
 #: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:108
 msgid "USB Stick"
 msgstr ""
 
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:210
+msgid "USB stick wizard"
+msgstr ""
+
+#: ../lib/python/Components/Language.py:38
+msgid "Ukrainian"
+msgstr ""
+
 #: ../lib/python/Screens/HarddiskSetup.py:75
 msgid ""
 "Unable to complete filesystem check.\n"
@@ -2949,18 +3679,22 @@ msgid ""
 "Error: "
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:201
+#: ../lib/python/Screens/Satconfig.py:254
 msgid "Uncommitted DiSEqC command"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:804
+#: ../lib/python/Components/NimManager.py:993
 msgid "Universal LNB"
 msgstr ""
 
-#: ../lib/python/Components/Harddisk.py:166
+#: ../lib/python/Components/Harddisk.py:171
 msgid "Unmount failed"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:35
+msgid "Update"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py:360
 msgid "Updates your receiver's software"
 msgstr ""
@@ -2991,35 +3725,47 @@ msgstr ""
 msgid "Upgrading Dreambox... Please wait"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:249 ../data/
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:31
+msgid "Use"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:473 ../data/
 msgid "Use DHCP"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:34
-#: ../lib/python/Screens/Satconfig.py:210
+#: ../lib/python/Screens/NetworkSetup.py:469
+msgid "Use Interface"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:40
+#: ../lib/python/Screens/Satconfig.py:263
 msgid "Use Power Measurement"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:254
+#: ../lib/python/Screens/NetworkSetup.py:478
 msgid "Use a gateway"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:454
+#: ../lib/python/Screens/NetworkSetup.py:832
 msgid "Use the Networkwizard to configure your Network\n"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:171
+#: ../lib/python/Screens/Satconfig.py:223
 msgid "Use usals for this sat"
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:98
+#: ../lib/python/Screens/Satconfig.py:147
 msgid "Used service scan type"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:804
+#: ../lib/python/Components/NimManager.py:993
 msgid "User defined"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:157
+msgid "VMGM (intro trailer)"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:33
 #: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
 msgid "Video Fine-Tuning"
@@ -3033,46 +3779,45 @@ msgstr ""
 msgid "Video Output"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:213
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:219
 msgid "Video Setup"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:216
+#: ../lib/python/Plugins/SystemPlugins/Videomode/plugin.py:222
 msgid "Video Wizard"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:1370
+#: ../lib/python/Screens/ChannelSelection.py:1369
 msgid "View Rass interactive..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:2043
+#: ../lib/python/Screens/InfoBarGenerics.py:2107
 msgid "View teletext..."
 msgstr ""
 
-#: ../lib/python/Screens/Satconfig.py:168
+#: ../lib/python/Screens/Satconfig.py:219
 msgid "Voltage mode"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:914
-#: ../lib/python/Screens/Satconfig.py:270
+#: ../lib/python/Screens/ChannelSelection.py:913
+#: ../lib/python/Screens/Satconfig.py:323
 #: ../lib/python/Components/ServiceScan.py:53
 msgid "W"
 msgstr ""
 
-#: ../lib/python/Screens/InetWizard.py:16
-#: ../lib/python/Screens/NetworkSetup.py:157
+#: ../lib/python/Screens/NetworkSetup.py:408
 msgid "WEP"
 msgstr ""
 
-#: ../lib/python/Screens/InetWizard.py:17
-#: ../lib/python/Screens/InetWizard.py:25
-#: ../lib/python/Screens/NetworkSetup.py:158
-#: ../lib/python/Screens/NetworkSetup.py:184
+#: ../lib/python/Screens/NetworkSetup.py:409
 msgid "WPA"
 msgstr ""
 
-#: ../lib/python/Screens/InetWizard.py:18
-#: ../lib/python/Screens/NetworkSetup.py:159
+#: ../lib/python/Screens/NetworkSetup.py:411
+msgid "WPA or WPA2"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:410
 msgid "WPA2"
 msgstr ""
 
@@ -3080,77 +3825,104 @@ msgstr ""
 msgid "WSS on 4:3"
 msgstr ""
 
-#: ../lib/python/Screens/TaskView.py:41
+#: ../lib/python/Components/Task.py:41
 msgid "Waiting"
 msgstr ""
 
-#: ../lib/python/Screens/EpgSelection.py:249
+#: ../lib/python/Screens/EpgSelection.py:262
 #: ../lib/python/Components/EpgList.py:38
 #: ../lib/python/Components/TimerList.py:24
 #: ../lib/python/Tools/FuzzyDate.py:13
 msgid "Wed"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:113
-#: ../lib/python/Screens/TimerEntry.py:167
+#: ../lib/python/Screens/TimerEntry.py:117
+#: ../lib/python/Screens/TimerEntry.py:158
 msgid "Wednesday"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:162
+#: ../lib/python/Screens/TimerEntry.py:153
 msgid "Weekday"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:752
-#: ../lib/python/Components/NimManager.py:827
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:229
+msgid ""
+"Welcome to the Cutlist editor.\n"
+"\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
+"cut'.\n"
+"\n"
+"Then seek to the end, press OK, select 'end cut'. That's it."
+msgstr ""
+
+#: ../lib/python/Components/NimManager.py:944
+#: ../lib/python/Components/NimManager.py:1019
 msgid "West"
 msgstr ""
 
-#: ../lib/python/Components/Network.py:212
+#: ../lib/python/Screens/LocationBox.py:516
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
+#: ../lib/python/Components/Network.py:291
 msgid "Wireless"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:901
+#: ../lib/python/Screens/NetworkSetup.py:1277
 msgid "Wireless Network"
 msgstr ""
 
-#: ../RecordTimer.py:321
+#: ../RecordTimer.py:330
 msgid "Write error while recording. Disk full?\n"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:86
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:277
+msgid "Write failed!"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:241
+msgid "Writing NFI image file to flash completed"
+msgstr ""
+
+#: ../lib/python/Components/AVSwitch.py:108
 msgid "YPbPr"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:85
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:132
 msgid "Year:"
 msgstr ""
 
-#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/InfoBar.py:155
-#: ../lib/python/Screens/InfoBar.py:187 ../data/
-#: ../lib/python/Plugins/SystemPlugins/Videomode/
+#: ../lib/python/Screens/Ci.py:19 ../lib/python/Screens/InfoBar.py:162
+#: ../data/ ../lib/python/Plugins/SystemPlugins/Videomode/
 msgid "Yes"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:157 ../lib/python/Screens/InfoBar.py:189
+#: ../lib/python/Screens/InfoBar.py:166
+msgid "Yes, and delete this movie"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBar.py:164
 msgid "Yes, returning to movie list"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:110
+#: ../lib/python/Screens/InfoBar.py:202
+#: ../lib/python/Screens/MovieSelection.py:128
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:695
 msgid "You cannot delete this!"
 msgstr ""
 
-#: ../lib/python/Screens/InputBox.py:102
-msgid "You have to wait for"
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:452
+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 ""
 
-#: ../lib/python/Screens/MovieSelection.py:380
-msgid ""
-"You need to define some keywords first!\n"
-"Press the menu-key to define keywords.\n"
-"Do you want to define keywords now?"
+#: ../lib/python/Screens/InputBox.py:104
+#, python-format
+msgid "You have to wait %s!"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:350
+#: ../lib/python/Screens/NetworkSetup.py:700
 msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr ""
 
@@ -3166,51 +3938,52 @@ msgid ""
 "Press OK to start upgrade."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:529
-msgid ""
-"Your wired LAN Adapter could not be started.\n"
-"Do you want to reboot your Dreambox to apply the new configuration?\n"
+#: ../lib/python/Screens/NetworkSetup.py:631
+#: ../lib/python/Screens/NetworkSetup.py:633
+msgid "Your network configuration has been activated."
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:518
+#: ../lib/python/Screens/NetworkSetup.py:628
 msgid ""
-"Your wireless LAN Adapter could not be started.\n"
-"Do you want to reboot your Dreambox to apply the new configuration?\n"
+"Your network configuration has been activated.\n"
+"A second configured interface has been found.\n"
+"\n"
+"Do you want to disable the second network interface?"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:139
+#: ../lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py:144
 msgid "Zap back to service before positioner setup?"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:235
+#: ../lib/python/Plugins/SystemPlugins/Satfinder/plugin.py:248
 msgid "Zap back to service before satfinder?"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:522
+#: ../lib/python/Screens/ChannelSelection.py:521
 msgid "[alternative edit]"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:526
+#: ../lib/python/Screens/ChannelSelection.py:525
 msgid "[bouquet edit]"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:528
+#: ../lib/python/Screens/ChannelSelection.py:527
 msgid "[favourite edit]"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:620
+#: ../lib/python/Screens/ChannelSelection.py:619
 msgid "[move mode]"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:158
+#: ../lib/python/Screens/ChannelSelection.py:157
 msgid "abort alternatives edit"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:152
+#: ../lib/python/Screens/ChannelSelection.py:151
 msgid "abort bouquet edit"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:155
+#: ../lib/python/Screens/ChannelSelection.py:154
 msgid "abort favourites edit"
 msgstr ""
 
@@ -3218,112 +3991,171 @@ msgstr ""
 msgid "about to start"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:145
+#: ../lib/python/Screens/NetworkSetup.py:214
+msgid "activate current configuration"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:220
+msgid "add a nameserver entry"
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:144
 msgid "add alternatives"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:127
+#: ../lib/python/Screens/LocationBox.py:403
+msgid "add bookmark"
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:126
 msgid "add bouquet"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:391
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:482
 msgid "add directory to playlist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:105
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:154
 msgid "add file to playlist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:393
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:484
 msgid "add files to playlist"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:135
+#: ../lib/python/Screens/ChannelSelection.py:134
 msgid "add marker"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1500
-#: ../lib/python/Screens/InfoBarGenerics.py:1508
+#: ../lib/python/Screens/InfoBarGenerics.py:1559
+#: ../lib/python/Screens/InfoBarGenerics.py:1567
 msgid "add recording (enter recording duration)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1501
-#: ../lib/python/Screens/InfoBarGenerics.py:1509
+#: ../lib/python/Screens/InfoBarGenerics.py:1560
+#: ../lib/python/Screens/InfoBarGenerics.py:1568
 msgid "add recording (enter recording endtime)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1498
-#: ../lib/python/Screens/InfoBarGenerics.py:1506
+#: ../lib/python/Screens/InfoBarGenerics.py:1557
+#: ../lib/python/Screens/InfoBarGenerics.py:1565
 msgid "add recording (indefinitely)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1499
-#: ../lib/python/Screens/InfoBarGenerics.py:1507
+#: ../lib/python/Screens/InfoBarGenerics.py:1558
+#: ../lib/python/Screens/InfoBarGenerics.py:1566
 msgid "add recording (stop after current event)"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:111
+#: ../lib/python/Screens/ChannelSelection.py:110
 msgid "add service to bouquet"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:113
+#: ../lib/python/Screens/ChannelSelection.py:112
 msgid "add service to favourites"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:107
+#: ../lib/python/Screens/ChannelSelection.py:106
 msgid "add to parental protection"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:702
-#: ../lib/python/Components/NimManager.py:714
+#: ../lib/python/Screens/Satconfig.py:60
+#: ../lib/python/Screens/Satconfig.py:435
+#: ../lib/python/Components/NimManager.py:900
 msgid "advanced"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:52
+#: ../lib/python/Screens/MovieSelection.py:75
 msgid "alphabetic sort"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:205
+#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:202
 msgid ""
 "are you sure you want to restore\n"
 "following backup:\n"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:160
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:51
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:79
+#, python-format
+msgid "audio track (%s) format"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:80
+#, python-format
+msgid "audio track (%s) language"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "audio tracks"
+msgstr ""
+
+#: ../lib/python/Screens/TimerEntry.py:96
+msgid "auto"
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:159
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:53
 msgid "back"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:19
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:146
+msgid "background image"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:176
+msgid "backgroundcolor"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:24
 msgid "better"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
+msgid "black"
+msgstr ""
+
 #: ../lib/python/Components/ParentalControl.py:16
 msgid "blacklist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:22
-msgid "by Exif"
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
+msgid "blue"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1496
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:77
+#, python-format
+msgid "burn audio track (%s)"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1555
 msgid "change recording (duration)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1497
+#: ../lib/python/Screens/InfoBarGenerics.py:1556
 msgid "change recording (endtime)"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:566
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py:94
+msgid "chapters"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:228
+msgid "choose destination directory"
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:545
 msgid "circular left"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:566
+#: ../lib/python/Screens/ScanSetup.py:545
 msgid "circular right"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:122
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:401
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:171
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:490
 msgid "clear playlist"
 msgstr ""
 
@@ -3331,202 +4163,277 @@ msgstr ""
 msgid "complex"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:740
-#: ../lib/python/Screens/NetworkSetup.py:757
+#: ../lib/python/Screens/NetworkSetup.py:1351
+#: ../lib/python/Screens/NetworkSetup.py:1365
 msgid "confirmed"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:965
-#: ../lib/python/Screens/NetworkSetup.py:983
+#: ../lib/python/Screens/NetworkSetup.py:1340
+#: ../lib/python/Screens/NetworkSetup.py:1397
 msgid "connected"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:638
+#: ../lib/python/Screens/InfoBarGenerics.py:655
 msgid "continue"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:119
+#: ../lib/python/Screens/ChannelSelection.py:118
 msgid "copy to bouquets"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:101
+#: ../lib/python/Screens/LocationBox.py:405
+msgid "create directory"
+msgstr ""
+
+#: ../lib/python/Screens/TimerEntry.py:103
 msgid "daily"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:400
-msgid "delete"
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "day"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:64
 #: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:66
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:68
 msgid "delete cut"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:121
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:487
+msgid "delete file"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:170
 msgid "delete playlist entry"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:405
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:498
 msgid "delete saved playlist"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:44
+#: ../lib/python/Screens/MovieSelection.py:67
 msgid "delete..."
 msgstr ""
 
-#: ../lib/python/Components/config.py:309
+#: ../lib/python/Components/config.py:322
 msgid "disable"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:147
+#: ../lib/python/Screens/ChannelSelection.py:146
 msgid "disable move mode"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:729
-#: ../lib/python/Components/NimManager.py:892
-#: ../lib/python/Components/TimerList.py:61
+#: ../lib/python/Screens/NetworkSetup.py:1163
+#: ../lib/python/Components/NimManager.py:1084
+#: ../lib/python/Components/TimerList.py:63
 msgid "disabled"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:960
-#: ../lib/python/Screens/NetworkSetup.py:970
-#: ../lib/python/Screens/NetworkSetup.py:988
+#: ../lib/python/Screens/NetworkSetup.py:1325
+#: ../lib/python/Screens/NetworkSetup.py:1344
+#: ../lib/python/Screens/NetworkSetup.py:1392
 msgid "disconnected"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:26
+#: ../lib/python/Components/UsageConfig.py:27
 msgid "do not change"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1502
-#: ../lib/python/Screens/TimerEntry.py:96
+#: ../lib/python/Screens/InfoBarGenerics.py:1561
+#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
 msgid "do nothing"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1510
+#: ../lib/python/Screens/InfoBarGenerics.py:1569
 msgid "don't record"
 msgstr ""
 
-#: ../lib/python/Components/TimerList.py:58
+#: ../lib/python/Components/TimerList.py:56
+#: ../lib/python/Components/TimerList.py:60
 msgid "done!"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:141
+#: ../lib/python/Screens/ChannelSelection.py:140
 msgid "edit alternatives"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:399
+#: ../lib/python/Components/NimManager.py:476
 msgid "empty"
 msgstr ""
 
-#: ../lib/python/Components/config.py:309
+#: ../lib/python/Components/config.py:322
 msgid "enable"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:137
+#: ../lib/python/Screens/ChannelSelection.py:136
 msgid "enable bouquet edit"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:139
+#: ../lib/python/Screens/ChannelSelection.py:138
 msgid "enable favourite edit"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:133
+#: ../lib/python/Screens/ChannelSelection.py:132
 msgid "enable move mode"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:724
-#: ../lib/python/Components/NimManager.py:840
-#: ../lib/python/Components/NimManager.py:880
+#: ../lib/python/Screens/NetworkSetup.py:1159
+#: ../lib/python/Screens/Satconfig.py:440
+#: ../lib/python/Components/NimManager.py:1032
+#: ../lib/python/Components/NimManager.py:1072
 msgid "enabled"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:157
+#: ../lib/python/Screens/ChannelSelection.py:156
 msgid "end alternatives edit"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:151
+#: ../lib/python/Screens/ChannelSelection.py:150
 msgid "end bouquet edit"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:59
 #: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:61
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:63
 msgid "end cut here"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:154
+#: ../lib/python/Screens/ChannelSelection.py:153
 msgid "end favourites edit"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:709
-msgid "equal to Socket A"
+#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
+msgid "enigma2 and network"
+msgstr ""
+
+#: ../lib/python/Screens/Satconfig.py:65
+#: ../lib/python/Screens/Satconfig.py:408
+#: ../lib/python/Components/NimManager.py:902
+msgid "equal to"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:245
+msgid "exceeds dual layer medium!"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:304
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:315
 msgid "exit DVD player or return to file browser"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:106
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:155
 msgid "exit mediaplayer"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:212
+#: ../lib/python/Screens/MovieSelection.py:232
 msgid "exit movielist"
 msgstr ""
 
+#: ../lib/python/Screens/NetworkSetup.py:213
+#: ../lib/python/Screens/NetworkSetup.py:219
+msgid "exit nameserver configuration"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:309
+msgid "exit network adapter configuration"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:303
+msgid "exit network adapter setup menu"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:70
+#: ../lib/python/Screens/NetworkSetup.py:76
+msgid "exit network interface list"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:713
+#: ../lib/python/Screens/NetworkSetup.py:719
+msgid "exit networkadapter setup menu"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:573
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:597
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:613
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:625
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:246
+msgid "failed"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:595
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:206
+msgid "filename"
+msgstr ""
+
 #: ../lib/python/Plugins/SystemPlugins/VideoTune/plugin.py:37
 msgid "fine-tune your display"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:300
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:311
 msgid "forward to the next chapter"
 msgstr ""
 
-#: ../lib/python/Components/DiskInfo.py:30
-msgid "free diskspace"
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:245
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:249
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:253
+msgid "free"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
-msgid "full /etc directory"
+#: ../lib/python/Components/DiskInfo.py:30
+msgid "free diskspace"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:96
+#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
 msgid "go to deep standby"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:96
+#: ../lib/python/Screens/TaskView.py:47 ../lib/python/Screens/TimerEntry.py:96
 msgid "go to standby"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:64
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
+msgid "green"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBar.py:61
 msgid "hear radio..."
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:60
+#: ../lib/python/Screens/NetworkSetup.py:442
+msgid "hidden network"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:83
 msgid "hide extended description"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:402
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:494
 msgid "hide player"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:566
+#: ../lib/python/Screens/ScanSetup.py:545
 msgid "horizontal"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:23
+#: ../lib/python/Components/UsageConfig.py:24
 msgid "hour"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:23
 #: ../lib/python/Components/UsageConfig.py:24
+#: ../lib/python/Components/UsageConfig.py:25
 msgid "hours"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:46
+#: ../lib/python/Components/UsageConfig.py:50
 msgid "immediate shutdown"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DJukeBox/plugin.py:83
+msgid "in..."
+msgstr ""
+
 #: ../lib/python/Plugins/Extensions/FritzCall/plugin.py:77
 #, python-format
 msgid ""
@@ -3538,59 +4445,63 @@ msgstr ""
 msgid "init module"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:74
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:76
 msgid "insert mark here"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:303
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:314
 msgid "jump back to the previous title"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:302
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:313
 msgid "jump forward to the next title"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:117
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:166
 msgid "jump to listbegin"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:118
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:167
 msgid "jump to listend"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1794
+#: ../lib/python/Screens/InfoBarGenerics.py:1858
 msgid "jump to next marked position"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1793
+#: ../lib/python/Screens/InfoBarGenerics.py:1857
 msgid "jump to previous marked position"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:135
+#: ../lib/python/Screens/InfoBar.py:139
 msgid "leave movie player..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1589
+#: ../lib/python/Screens/InfoBarGenerics.py:1648
 msgid "left"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:56
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "length"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:79
 msgid "list style compact"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:55
+#: ../lib/python/Screens/MovieSelection.py:78
 msgid "list style compact with description"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:54
+#: ../lib/python/Screens/MovieSelection.py:77
 msgid "list style default"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:57
+#: ../lib/python/Screens/MovieSelection.py:80
 msgid "list style single line"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:404
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:495
 msgid "load playlist"
 msgstr ""
 
@@ -3598,52 +4509,77 @@ msgstr ""
 msgid "locked"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:710
-msgid "loopthrough to socket A"
+#: ../lib/python/Screens/Satconfig.py:69
+#: ../lib/python/Screens/Satconfig.py:407
+#: ../lib/python/Components/NimManager.py:905
+msgid "loopthrough to"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:749
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:22
+#: ../lib/python/Screens/Satconfig.py:431
+#: ../lib/python/Components/NimManager.py:941
 msgid "manual"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:198
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:202
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:116
+#: ../lib/python/Screens/LocationBox.py:147
+#: ../lib/python/Screens/MovieSelection.py:218
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:207
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:52
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:165
 msgid "menu"
 msgstr ""
 
+#: ../lib/python/Screens/NetworkSetup.py:834
+msgid "menulist"
+msgstr ""
+
 #: ../lib/python/Components/TimerList.py:38
 #: ../lib/python/Components/TimerList.py:43
 msgid "mins"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:21
+#: ../lib/python/Components/UsageConfig.py:22
 msgid "minute"
 msgstr ""
 
-#: ../lib/python/Screens/SleepTimerEdit.py:26
-#: ../lib/python/Components/UsageConfig.py:21
+#: ../lib/python/Screens/InputBox.py:104
+#: ../lib/python/Screens/SleepTimerEdit.py:42
 #: ../lib/python/Components/UsageConfig.py:22
 #: ../lib/python/Components/UsageConfig.py:23
+#: ../lib/python/Components/UsageConfig.py:24
 msgid "minutes"
 msgstr ""
 
-#: ../lib/python/Screens/InputBox.py:102
-msgid "minutes and"
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "month"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:30
+#: ../lib/python/Components/UsageConfig.py:31
 msgid "move PiP to main picture"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1028
-#: ../lib/python/Screens/InfoBarGenerics.py:1029
-#: ../lib/python/Screens/InfoBarGenerics.py:1030
+#: ../lib/python/Screens/NetworkSetup.py:708
+msgid "move down to last entry"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:706
+msgid "move down to next entry"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:707
+msgid "move up to first entry"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:705
+msgid "move up to previous entry"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1045
+#: ../lib/python/Screens/InfoBarGenerics.py:1046
+#: ../lib/python/Screens/InfoBarGenerics.py:1047
 msgid "movie list"
 msgstr ""
 
-#: ../lib/python/Components/AVSwitch.py:123
+#: ../lib/python/Components/AVSwitch.py:145
 msgid "multinorm"
 msgstr ""
 
@@ -3659,12 +4595,12 @@ msgstr ""
 msgid "next channel in history"
 msgstr ""
 
-#: ../lib/python/Screens/MessageBox.py:41
-#: ../lib/python/Screens/MessageBox.py:43
-#: ../lib/python/Screens/ScanSetup.py:542
-#: ../lib/python/Screens/ScanSetup.py:859
-#: ../lib/python/Screens/SleepTimerEdit.py:69
-#: ../lib/python/Components/config.py:301
+#: ../lib/python/Screens/MessageBox.py:42
+#: ../lib/python/Screens/MessageBox.py:44
+#: ../lib/python/Screens/ScanSetup.py:520
+#: ../lib/python/Screens/ScanSetup.py:826
+#: ../lib/python/Screens/SleepTimerEdit.py:85
+#: ../lib/python/Components/config.py:314
 msgid "no"
 msgstr ""
 
@@ -3672,24 +4608,19 @@ msgstr ""
 msgid "no HDD found"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:94
-msgid "no Picture found"
-msgstr ""
-
 #: ../lib/python/Screens/Ci.py:309 ../lib/python/Screens/Ci.py:331
 msgid "no module found"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:20
+#: ../lib/python/Components/UsageConfig.py:21
 msgid "no standby"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:13
+#: ../lib/python/Components/UsageConfig.py:14
 msgid "no timeout"
 msgstr ""
 
-#: ../lib/python/Screens/About.py:39
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:22
+#: ../lib/python/Screens/About.py:40
 msgid "none"
 msgstr ""
 
@@ -3697,37 +4628,57 @@ msgstr ""
 msgid "not locked"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:703
-#: ../lib/python/Components/NimManager.py:711
-#: ../lib/python/Components/NimManager.py:841
-#: ../lib/python/Components/NimManager.py:881
+#: ../lib/python/Screens/Satconfig.py:58
+#: ../lib/python/Screens/Satconfig.py:412
+#: ../lib/python/Screens/Satconfig.py:438
+#: ../lib/python/Components/NimManager.py:898
+#: ../lib/python/Components/NimManager.py:934
+#: ../lib/python/Components/NimManager.py:935
+#: ../lib/python/Components/NimManager.py:936
+#: ../lib/python/Components/NimManager.py:937
+#: ../lib/python/Components/NimManager.py:1033
+#: ../lib/python/Components/NimManager.py:1073
 msgid "nothing connected"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:564
-#: ../lib/python/Screens/ScanSetup.py:571
-#: ../lib/python/Screens/ScanSetup.py:575
-#: ../lib/python/Screens/ScanSetup.py:582
-#: ../lib/python/Components/config.py:305
-#: ../lib/python/Components/UsageConfig.py:26
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:128
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:249
+msgid "of a DUAL layer medium used."
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:131
+#: ../lib/python/Plugins/Extensions/DVDBurn/TitleList.py:253
+msgid "of a SINGLE layer medium used."
+msgstr ""
+
+#: ../lib/python/Screens/ScanSetup.py:543
+#: ../lib/python/Screens/ScanSetup.py:550
+#: ../lib/python/Screens/ScanSetup.py:554
+#: ../lib/python/Screens/ScanSetup.py:561
+#: ../lib/python/Components/config.py:318
+#: ../lib/python/Components/UsageConfig.py:27
 msgid "off"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:564
-#: ../lib/python/Screens/ScanSetup.py:571
-#: ../lib/python/Screens/ScanSetup.py:575
-#: ../lib/python/Screens/ScanSetup.py:582
-#: ../lib/python/Components/config.py:305
-#: ../lib/python/Components/UsageConfig.py:26
+#: ../lib/python/Screens/ScanSetup.py:543
+#: ../lib/python/Screens/ScanSetup.py:550
+#: ../lib/python/Screens/ScanSetup.py:554
+#: ../lib/python/Screens/ScanSetup.py:561
+#: ../lib/python/Components/config.py:318
+#: ../lib/python/Components/UsageConfig.py:27
 msgid "on"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py:134
+msgid "on READ ONLY medium."
+msgstr ""
+
 #: ../lib/python/Screens/TimerEntry.py:97
 msgid "once"
 msgstr ""
 
-#: ../lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py:107
-msgid "only /etc/enigma2 directory"
+#: ../lib/python/Screens/NetworkSetup.py:310
+msgid "open nameserver configuration"
 msgstr ""
 
 #: ../lib/python/Screens/InfoBarGenerics.py:268
@@ -3742,24 +4693,28 @@ msgstr ""
 msgid "open servicelist(up)"
 msgstr ""
 
-#: ../lib/python/Components/ServiceScan.py:135
+#: ../lib/python/Screens/NetworkSetup.py:315
+msgid "open virtual keyboard input help"
+msgstr ""
+
+#: ../lib/python/Components/ServiceScan.py:133
 msgid "pass"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:637
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:112
+#: ../lib/python/Screens/InfoBarGenerics.py:654
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:161
 msgid "pause"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:111
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:160
 msgid "play entry"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:115
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:164
 msgid "play from next mark or playlist entry"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:114
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:163
 msgid "play from previous mark or playlist entry"
 msgstr ""
 
@@ -3767,7 +4722,8 @@ msgstr ""
 msgid "please press OK when ready"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:240
+#: ../lib/python/Plugins/Extensions/DVDBurn/Process.py:440
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:440
 msgid "please wait, loading picture..."
 msgstr ""
 
@@ -3787,105 +4743,146 @@ msgstr ""
 msgid "recording..."
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:69
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
+msgid "red"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:221
+msgid "remove a nameserver entry"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:71
 msgid "remove after this position"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:143
+#: ../lib/python/Screens/ChannelSelection.py:142
 msgid "remove all alternatives"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:121
+#: ../lib/python/Screens/ChannelSelection.py:120
 msgid "remove all new found flags"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:68
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:70
 msgid "remove before this position"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:123
-#: ../lib/python/Screens/ChannelSelection.py:128
+#: ../lib/python/Screens/LocationBox.py:409
+msgid "remove bookmark"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:406
+msgid "remove directory"
+msgstr ""
+
+#: ../lib/python/Screens/ChannelSelection.py:122
+#: ../lib/python/Screens/ChannelSelection.py:127
 msgid "remove entry"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:109
+#: ../lib/python/Screens/ChannelSelection.py:108
 msgid "remove from parental protection"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:125
+#: ../lib/python/Screens/ChannelSelection.py:124
 msgid "remove new found flag"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:116
+#: ../lib/python/Screens/ChannelSelection.py:115
 msgid "remove selected satellite"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:76
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:78
 msgid "remove this mark"
 msgstr ""
 
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:89
+msgid "repeat playlist"
+msgstr ""
+
 #: ../lib/python/Screens/TimerEntry.py:97
 msgid "repeated"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:301
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:312
 msgid "rewind to the previous chapter"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1589
+#: ../lib/python/Screens/InfoBarGenerics.py:1648
 msgid "right"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:403
-msgid "save playlist"
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:91
+msgid "save last directory on exit"
 msgstr ""
 
-#: ../lib/python/Components/ServiceScan.py:96
-#, python-format
-msgid "scan done! %d services found!"
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:497
+msgid "save playlist"
 msgstr ""
 
-#: ../lib/python/Components/ServiceScan.py:94
-msgid "scan done! No service found!"
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:90
+msgid "save playlist on exit"
 msgstr ""
 
 #: ../lib/python/Components/ServiceScan.py:92
-msgid "scan done! One service found!"
+#: ../lib/python/Components/ServiceScan.py:94
+msgid "scan done!"
 msgstr ""
 
 #: ../lib/python/Components/ServiceScan.py:33
 #, python-format
-msgid "scan in progress - %d %% done! %d services found!"
+msgid "scan in progress - %d%% done!"
 msgstr ""
 
 #: ../lib/python/Screens/ServiceScan.py:48
 msgid "scan state"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:13
+#: ../lib/python/Components/UsageConfig.py:14
 msgid "second"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:712
+#: ../lib/python/Screens/Satconfig.py:67
+#: ../lib/python/Screens/Satconfig.py:409
+#: ../lib/python/Components/NimManager.py:903
 msgid "second cable of motorized LNB"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:13
+#: ../lib/python/Screens/InputBox.py:104
 #: ../lib/python/Components/UsageConfig.py:14
 #: ../lib/python/Components/UsageConfig.py:15
-#: ../lib/python/Components/UsageConfig.py:20
+#: ../lib/python/Components/UsageConfig.py:16
+#: ../lib/python/Components/UsageConfig.py:21
 msgid "seconds"
 msgstr ""
 
-#: ../lib/python/Screens/InputBox.py:102
-msgid "seconds."
+#: ../lib/python/Screens/LocationBox.py:127
+msgid "select"
+msgstr ""
+
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py:88
+msgid "select .NFI flash file"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:213
+#: ../lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py:238
+msgid "select image from server"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:71
+msgid "select interface"
+msgstr ""
+
+#: ../lib/python/Screens/NetworkSetup.py:304
+#: ../lib/python/Screens/NetworkSetup.py:714
+msgid "select menu entry"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:233
 msgid "select movie"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:192
+#: ../lib/python/Screens/MovieSelection.py:212
 msgid "select the movie path"
 msgstr ""
 
@@ -3899,7 +4896,7 @@ msgstr ""
 msgid "setup pin"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:298
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:309
 msgid "show DVD main menu"
 msgstr ""
 
@@ -3907,148 +4904,174 @@ msgstr ""
 msgid "show EPG..."
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:204
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:173
+msgid "show Infoline"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:224
 msgid "show all"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:142
+#: ../lib/python/Screens/ChannelSelection.py:141
 msgid "show alternatives"
 msgstr ""
 
 #: ../lib/python/Screens/InfoBarGenerics.py:368
-#: ../lib/python/Screens/MovieSelection.py:199
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:128
+#: ../lib/python/Screens/MovieSelection.py:219
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:178
 msgid "show event details"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:62
+#: ../lib/python/Screens/MovieSelection.py:85
 msgid "show extended description"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:205
-msgid "show first tag"
+#: ../lib/python/Screens/MovieSelection.py:225
+msgid "show first selected tag"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:206
-msgid "show second tag"
+#: ../lib/python/Screens/MovieSelection.py:226
+msgid "show second selected tag"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:45
+#: ../lib/python/Components/UsageConfig.py:49
 msgid "show shutdown menu"
 msgstr ""
 
 #: ../lib/python/Screens/InfoBarGenerics.py:407
+#: ../lib/python/Screens/InfoBarGenerics.py:497
 msgid "show single service EPG..."
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:207
+#: ../lib/python/Screens/MovieSelection.py:227
 msgid "show tag menu"
 msgstr ""
 
-#: ../lib/python/Screens/ChannelSelection.py:100
+#: ../lib/python/Screens/ChannelSelection.py:99
 msgid "show transponder info"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:123
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:398
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:172
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:493
 msgid "shuffle playlist"
 msgstr ""
 
-#: ../SleepTimer.py:53
+#: ../SleepTimer.py:14
 msgid "shutdown"
 msgstr ""
 
-#: ../lib/python/Components/NimManager.py:701
-#: ../lib/python/Components/NimManager.py:713
+#: ../lib/python/Screens/Satconfig.py:59
+#: ../lib/python/Screens/Satconfig.py:433
+#: ../lib/python/Components/NimManager.py:899
 #: ../lib/python/Components/ParentalControl.py:12
-#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:19
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:24
 msgid "simple"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:642
+#: ../lib/python/Screens/InfoBarGenerics.py:659
 msgid "skip backward"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:643
+#: ../lib/python/Screens/InfoBarGenerics.py:660
 msgid "skip backward (enter time)"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:640
+#: ../lib/python/Screens/InfoBarGenerics.py:657
 msgid "skip forward"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:641
+#: ../lib/python/Screens/InfoBarGenerics.py:658
 msgid "skip forward (enter time)"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:50
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:175
+msgid "slide picture in loop"
+msgstr ""
+
+#: ../lib/python/Screens/MovieSelection.py:73
 msgid "sort by date"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:29
+#: ../lib/python/Components/UsageConfig.py:30
 msgid "standard"
 msgstr ""
 
-#: ../SleepTimer.py:53
+#: ../SleepTimer.py:14
 msgid "standby"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:54
 #: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:56
+#: ../lib/python/Plugins/Extensions/CutListEditor/plugin.py:58
 msgid "start cut here"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1065
+#: ../lib/python/Plugins/Extensions/MediaPlayer/settings.py:93
+msgid "start directory"
+msgstr ""
+
+#: ../lib/python/Screens/InfoBarGenerics.py:1082
 msgid "start timeshift"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1589
+#: ../lib/python/Screens/InfoBarGenerics.py:1648
 msgid "stereo"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:30
+#: ../lib/python/Components/UsageConfig.py:31
 msgid "stop PiP"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:113
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:162
 msgid "stop entry"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1495
+#: ../lib/python/Screens/InfoBarGenerics.py:1554
 msgid "stop recording"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1066
+#: ../lib/python/Screens/InfoBarGenerics.py:1083
 msgid "stop timeshift"
 msgstr ""
 
-#: ../lib/python/Components/UsageConfig.py:29
+#: ../lib/python/Components/UsageConfig.py:30
 msgid "swap PiP and main picture"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:120
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:396
+#: ../lib/python/Screens/LocationBox.py:141
+#: ../lib/python/Screens/LocationBox.py:402
+msgid "switch to bookmarks"
+msgstr ""
+
+#: ../lib/python/Screens/LocationBox.py:142
+#: ../lib/python/Screens/LocationBox.py:408
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:169
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:489
 msgid "switch to filelist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:119
-#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:394
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:168
+#: ../lib/python/Plugins/Extensions/MediaPlayer/plugin.py:485
 msgid "switch to playlist"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:306
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:317
 msgid "switch to the next audio track"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:307
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:318
 msgid "switch to the next subtitle language"
 msgstr ""
 
-#: ../lib/python/Screens/Wizard.py:396 ../lib/python/Screens/Wizard.py:436
-msgid "text"
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:143
+msgid "template file"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:177
+msgid "textcolor"
 msgstr ""
 
-#: ../lib/python/Screens/MovieSelection.py:101
+#: ../lib/python/Screens/InfoBar.py:191
+#: ../lib/python/Screens/MovieSelection.py:119
 msgid "this recording"
 msgstr ""
 
@@ -4056,20 +5079,20 @@ msgstr ""
 msgid "this service is protected by a parental control pin"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1795
+#: ../lib/python/Screens/InfoBarGenerics.py:1859
 msgid "toggle a cut mark at the current position"
 msgstr ""
 
-#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:299
+#: ../lib/python/Plugins/Extensions/DVDPlayer/plugin.py:310
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr ""
 
-#: ../lib/python/Screens/NetworkSetup.py:745
-#: ../lib/python/Screens/NetworkSetup.py:762
+#: ../lib/python/Screens/NetworkSetup.py:1355
+#: ../lib/python/Screens/NetworkSetup.py:1369
 msgid "unconfirmed"
 msgstr ""
 
-#: ../lib/python/Screens/EventView.py:79
+#: ../lib/python/Screens/EventView.py:94
 msgid "unknown service"
 msgstr ""
 
@@ -4077,19 +5100,19 @@ msgstr ""
 msgid "until restart"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:101
+#: ../lib/python/Screens/TimerEntry.py:103
 msgid "user defined"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:566
+#: ../lib/python/Screens/ScanSetup.py:545
 msgid "vertical"
 msgstr ""
 
-#: ../lib/python/Screens/InfoBarGenerics.py:1200
+#: ../lib/python/Screens/InfoBarGenerics.py:1217
 msgid "view extensions..."
 msgstr ""
 
-#: ../lib/python/Screens/InfoBar.py:63
+#: ../lib/python/Screens/InfoBar.py:60
 msgid "view recordings..."
 msgstr ""
 
@@ -4106,7 +5129,7 @@ msgstr ""
 msgid "waiting"
 msgstr ""
 
-#: ../lib/python/Screens/TimerEntry.py:101
+#: ../lib/python/Screens/TimerEntry.py:103
 msgid "weekly"
 msgstr ""
 
@@ -4114,17 +5137,26 @@ msgstr ""
 msgid "whitelist"
 msgstr ""
 
-#: ../lib/python/Screens/MessageBox.py:41
-#: ../lib/python/Screens/MessageBox.py:43
-#: ../lib/python/Screens/ScanSetup.py:542
-#: ../lib/python/Screens/ScanSetup.py:859
-#: ../lib/python/Screens/SleepTimerEdit.py:67
-#: ../lib/python/Components/config.py:301
+#: ../lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py:107
+msgid "year"
+msgstr ""
+
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:29
+#: ../lib/python/Plugins/Extensions/PicturePlayer/plugin.py:30
+msgid "yellow"
+msgstr ""
+
+#: ../lib/python/Screens/MessageBox.py:42
+#: ../lib/python/Screens/MessageBox.py:44
+#: ../lib/python/Screens/ScanSetup.py:520
+#: ../lib/python/Screens/ScanSetup.py:826
+#: ../lib/python/Screens/SleepTimerEdit.py:83
+#: ../lib/python/Components/config.py:314
 msgid "yes"
 msgstr ""
 
-#: ../lib/python/Screens/ScanSetup.py:542
-#: ../lib/python/Screens/ScanSetup.py:859
+#: ../lib/python/Screens/ScanSetup.py:520
+#: ../lib/python/Screens/ScanSetup.py:826
 msgid "yes (keep feeds)"
 msgstr ""
 
@@ -4310,6 +5342,10 @@ msgid ""
 "displayed."
 msgstr ""
 
+#: ../data/
+msgid "C"
+msgstr ""
+
 #: ../data/
 msgid "Change bouquets in quickzap"
 msgstr ""
@@ -4347,27 +5383,7 @@ msgid "Compact flash card"
 msgstr ""
 
 #: ../data/
-msgid "Configure your internal LAN"
-msgstr ""
-
-#: ../data/
-msgid "Configure your internal LAN again"
-msgstr ""
-
-#: ../data/
-msgid "Configure your wireless LAN"
-msgstr ""
-
-#: ../data/
-msgid "Configure your wireless LAN again"
-msgstr ""
-
-#: ../data/
-msgid "Connect to the Internet with a USB Wlan Stick"
-msgstr ""
-
-#: ../data/
-msgid "Connect to the Internet with your local LAN"
+msgid "Continue in background"
 msgstr ""
 
 #: ../data/
@@ -4386,6 +5402,10 @@ msgstr ""
 msgid "Customize"
 msgstr ""
 
+#: ../data/
+msgid "D"
+msgstr ""
+
 #: ../data/
 msgid "Default services lists"
 msgstr ""
@@ -4422,6 +5442,10 @@ msgstr ""
 msgid "Do you want to enable the parental control feature on your dreambox?"
 msgstr ""
 
+#: ../data/
+msgid "Do you want to install default sat lists?"
+msgstr ""
+
 #: ../data/
 msgid "Do you want to restore your settings?"
 msgstr ""
@@ -4471,10 +5495,6 @@ msgstr ""
 msgid "Exit wizard"
 msgstr ""
 
-#: ../data/
-msgid "Exit wizard and configure later manually"
-msgstr ""
-
 #: ../data/
 msgid "Extensions"
 msgstr ""
@@ -4567,6 +5587,10 @@ msgstr ""
 msgid "Language..."
 msgstr ""
 
+#: ../data/
+msgid "Load Length of Movies in Movielist"
+msgstr ""
+
 #: ../data/
 msgid "Lock:"
 msgstr ""
@@ -4599,10 +5623,6 @@ msgstr ""
 msgid "MediaPlayer"
 msgstr ""
 
-#: ../data/
-msgid "Menu"
-msgstr ""
-
 #: ../data/
 msgid "Message"
 msgstr ""
@@ -4663,10 +5683,6 @@ msgstr ""
 msgid "No, just start my dreambox"
 msgstr ""
 
-#: ../data/
-msgid "No, let me choose default lists"
-msgstr ""
-
 #: ../data/
 msgid "No, scan later manually"
 msgstr ""
@@ -4699,35 +5715,10 @@ msgstr ""
 msgid "Pin code needed"
 msgstr ""
 
-#: ../data/
-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 built "
-"in wireless network support"
-msgstr ""
-
 #: ../data/
 msgid "Please choose the default services lists you want to install."
 msgstr ""
 
-#: ../data/
-msgid ""
-"Please configure your local LAN internet connection by filling out the "
-"needed values.\n"
-"When you are ready please press OK to continue."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Please configure your wireless LAN internet connection by filling out the "
-"needed values.\n"
-"When you are ready please press OK to continue."
-msgstr ""
-
-#: ../data/
-msgid "Please select below the wireless network you want to connect to."
-msgstr ""
-
 #: ../data/
 msgid "Please set up tuner B"
 msgstr ""
@@ -4764,10 +5755,6 @@ msgstr ""
 msgid "Reception Settings"
 msgstr ""
 
-#: ../data/
-msgid "Record"
-msgstr ""
-
 #: ../data/
 msgid "Recordings always have priority"
 msgstr ""
@@ -4784,10 +5771,6 @@ msgstr ""
 msgid "Restart GUI"
 msgstr ""
 
-#: ../data/
-msgid "Restart your wireless interface"
-msgstr ""
-
 #: ../data/
 msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
@@ -4842,10 +5825,6 @@ msgstr ""
 msgid "Service scan"
 msgstr ""
 
-#: ../data/
-msgid "Setup"
-msgstr ""
-
 #: ../data/
 msgid "Setup Mode"
 msgstr ""
@@ -4890,14 +5869,6 @@ msgstr ""
 msgid "Subservices"
 msgstr ""
 
-#: ../data/
-msgid "Subtitle selection"
-msgstr ""
-
-#: ../data/
-msgid "Subtitles"
-msgstr ""
-
 #: ../data/
 msgid "TV System"
 msgstr ""
@@ -4906,34 +5877,10 @@ msgstr ""
 msgid "Test mode"
 msgstr ""
 
-#: ../data/
-msgid ""
-"Thank you for using the wizard. Your Dreambox is now ready to use.\n"
-"Please press OK to start using your Dreambox."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Thank you for using the wizard. Your Dreambox is now ready to use.\n"
-"\n"
-"Your local LAN internet connection is working now.\n"
-"\n"
-"Please press OK to continue."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Thank you for using the wizard. Your Dreambox is now ready to use.\n"
-"\n"
-"Your wireless internet connection is working now.\n"
-"\n"
-"Please press OK to continue."
-msgstr ""
-
 #: ../data/
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
-"Please press OK to start using you Dreambox."
+"Please press OK to start using your Dreambox."
 msgstr ""
 
 #: ../data/
@@ -4944,11 +5891,6 @@ msgstr ""
 msgid "The package doesn't contain anything."
 msgstr ""
 
-#: ../data/
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-
 #: ../data/
 msgid "The wizard is finished now."
 msgstr ""
@@ -5005,6 +5947,10 @@ msgstr ""
 msgid "Timeshift"
 msgstr ""
 
+#: ../data/
+msgid "Timeshift path..."
+msgstr ""
+
 #: ../data/
 msgid "Timezone"
 msgstr ""
@@ -5070,6 +6016,10 @@ msgstr ""
 msgid "VCR scart"
 msgstr ""
 
+#: ../data/
+msgid "Virtual KeyBoard"
+msgstr ""
+
 #: ../data/
 msgid "Volume"
 msgstr ""
@@ -5085,16 +6035,6 @@ msgstr ""
 msgid "Welcome..."
 msgstr ""
 
-#: ../data/
-msgid ""
-"Welcome.\n"
-"\n"
-"If you want to connect your Dreambox to the Internet, this wizard will guide "
-"you through the basic network setup of your Dreambox.\n"
-"\n"
-"Press the OK button on your remote control to move to the next step."
-msgstr ""
-
 #: ../data/
 msgid ""
 "Welcome.\n"
@@ -5216,24 +6156,6 @@ msgstr ""
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr ""
 
-#: ../data/
-msgid ""
-"Your local LAN internet connection is not working!\n"
-"Please choose what you want to do next."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Your network is restarting.\n"
-"You will be automatically forwarded to the next step."
-msgstr ""
-
-#: ../data/
-msgid ""
-"Your wireless internet connection is not working!\n"
-"Please choose what you want to do next."
-msgstr ""
-
 #: ../data/
 msgid "config menu"
 msgstr ""
index 583727c19595d88d11e7591ad66c3853a184737f..94a99120bd22bcb703ba316a3d3ddbd5c7bea488 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,8 +7,8 @@ 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"
-"PO-Revision-Date: 2008-10-24 13:27+0100\n"
+"POT-Creation-Date: 2009-01-16 00:54+0100\n"
+"PO-Revision-Date: 2009-01-09 17:40+0100\n"
 "Last-Translator: José Juan Zapater <josej@zapater.fdns.net>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -92,17 +92,14 @@ msgid "(show optional DVD audio menu)"
 msgstr "(muestra ménu de audio de DVD)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Solo disponible si más de un interface está activo"
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
+msgstr "* Sólo disponible cuando entra un SSID oculto o una clave de red"
 
 msgid ".NFI Download failed:"
 msgstr "Falló la descarga del .NFI:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr "Flasher .NFI de arranque USB creado correctamente."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -305,12 +302,6 @@ msgstr "AC3 por defecto"
 msgid "AC3 downmix"
 msgstr "mezcla AC3"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Acerca de"
 
@@ -383,8 +374,8 @@ msgstr ""
 "Después que haya terminado el asistente, necesita proteger los canales "
 "individualmente. Mire el manual de su dreambox para saber cómo."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Todo"
@@ -392,9 +383,6 @@ msgstr "Todo"
 msgid "All Satellites"
 msgstr "Todos satélites"
 
-msgid "All..."
-msgstr "Todo..."
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -417,6 +405,8 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"¿Está seguro de que quiere activar esta configuración de red?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -425,8 +415,8 @@ msgstr ""
 "Quiere reiniciar sus adaptadores de red?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artista:"
+msgid "Artist"
+msgstr "Artista"
 
 msgid "Ask before shutdown:"
 msgstr "Preguntar antes de apagar:"
@@ -531,7 +521,7 @@ msgid "Burn DVD"
 msgstr "Grabar DVD"
 
 msgid "Burn existing image to DVD"
-msgstr ""
+msgstr "Graba una imagen existente a DVD"
 
 msgid "Burn to DVD..."
 msgstr "Grabar a DVD..."
@@ -605,6 +595,9 @@ msgstr "Canal"
 msgid "Channel Selection"
 msgstr "Selección de Canal"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Canal:"
 
@@ -696,7 +689,7 @@ msgid "Complete"
 msgstr "Completado"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Complejo (permite mexclar pistas de audio y aspectos)"
 
 msgid "Configuration Mode"
 msgstr "Modo Configuración"
@@ -741,9 +734,6 @@ msgstr "Reproducción contínua"
 msgid "Contrast"
 msgstr "Contraste"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Copiando el flasher de arranque a la memoria USB..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "No puedo conectar al servidor de imágenes .NFI de Dreambox:"
 
@@ -751,7 +741,7 @@ msgid "Could not load Medium! No disc inserted?"
 msgstr "No puedo cargar el Medio! Hay disco insertado?"
 
 msgid "Create DVD-ISO"
-msgstr ""
+msgstr "Crear DVD-ISO"
 
 msgid "Create movie folder failed"
 msgstr "Falló la creación de la carpeta de películas"
@@ -820,9 +810,6 @@ msgstr "Danés"
 msgid "Date"
 msgstr "Fecha"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Descomprimiendo la imagen de arranque de la memoria USB..."
-
 msgid "Deep Standby"
 msgstr "Reposo profundo"
 
@@ -950,9 +937,6 @@ msgstr ""
 "Seguro que quiere descargar\n"
 "el plugin \"%s\"?"
 
-msgid "Do you really want to exit?"
-msgstr "¿Realmente quiere salir?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -1044,9 +1028,6 @@ msgstr "Plugins descargables"
 msgid "Downloading"
 msgstr "Descargando"
 
-msgid "Downloading image description..."
-msgstr "Descargando la descripción de la imagen..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Descargando información del plugin. Espere..."
 
@@ -1070,13 +1051,13 @@ msgid "East"
 msgstr "Este"
 
 msgid "Edit"
-msgstr ""
+msgstr "Editar"
 
 msgid "Edit DNS"
 msgstr "Editar DNS"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Editar Título"
 
 msgid "Edit chapters of current title"
 msgstr "Editar capítulos del título actual"
@@ -1124,14 +1105,11 @@ msgid "Encryption Key"
 msgstr "Clave de Encriptación"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Tipo de clave de Encriptación"
 
 msgid "Encryption Type"
 msgstr "Tipo de Encriptación"
 
-msgid "End"
-msgstr "Fin"
-
 msgid "End time"
 msgstr "Hora fin"
 
@@ -1168,10 +1146,10 @@ msgid "Enter Rewind at speed"
 msgstr "Introduzca velocidad de avance hacia atrás"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Introduzca el nombre/SSID de la red WLAN:"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr ""
+msgstr "Introduzca la frase/clave WLAN:"
 
 msgid "Enter main menu..."
 msgstr "Entre al menú principal..."
@@ -1205,6 +1183,9 @@ msgstr "Progreso de ejecución:"
 msgid "Execution finished!!"
 msgstr "¡Ejecución terminó!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Salir"
 
@@ -1266,10 +1247,10 @@ msgid "Finished"
 msgstr "Terminado"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Termió de configurar su red"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Terminó reiniciando su red"
 
 msgid "Finnish"
 msgstr "Finlandés"
@@ -1280,24 +1261,21 @@ msgstr ""
 "Primero necesitamos descargar el último entorno de arranque para el flasher "
 "USB."
 
-msgid "Fix USB stick"
-msgstr "Fijar memoria USB"
-
 msgid "Flash"
 msgstr "Flash"
 
 msgid "Flashing failed"
 msgstr "Falló el flasheo"
 
-msgid "Font size"
-msgstr "Tamaño de fuente"
-
 msgid "Format"
 msgstr "Formato"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Contador de tramas sin problemas de sombras"
 
+msgid "Frame size in full view"
+msgstr "Tamaño de trama en vista completa"
+
 msgid "French"
 msgstr "Francés"
 
@@ -1319,6 +1297,9 @@ msgstr "Vie"
 msgid "Friday"
 msgstr "Viernes"
 
+msgid "Frisian"
+msgstr "Frisón"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON dirección IP"
 
@@ -1342,8 +1323,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Puerta de enlace"
 
-msgid "Genre:"
-msgstr "Género:"
+msgid "Genre"
+msgstr "Género"
 
 msgid "German"
 msgstr "Alemán"
@@ -1379,7 +1360,7 @@ msgid "Harddisk standby after"
 msgstr "Disco duro en reposo después"
 
 msgid "Hidden network SSID"
-msgstr ""
+msgstr "SSID de red oculta"
 
 msgid "Hierarchy Information"
 msgstr "Información jerárquica"
@@ -1397,10 +1378,10 @@ msgid "IP Address"
 msgstr "Dirección IP"
 
 msgid "ISO file is too large for this filesystem!"
-msgstr ""
+msgstr "¡El fichero ISO es demasiado grande para este sistema de ficheros!"
 
 msgid "ISO path"
-msgstr ""
+msgstr "ruta ISO"
 
 msgid "Icelandic"
 msgstr "Islandés"
@@ -1616,6 +1597,9 @@ msgstr "Localización"
 msgid "Lock:"
 msgstr "Bloqueo:"
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr "Pulsar tecla largo"
 
@@ -1673,6 +1657,9 @@ msgstr "Menú"
 msgid "Message"
 msgstr "Mensaje"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Falló mkfs"
 
@@ -1816,6 +1803,9 @@ msgstr "Lo siento pero no hay 50 Hz. :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "¡HDD no encontrado o no inicializado!"
 
+msgid "No Networks found"
+msgstr "No he encontrado ninguna red"
+
 msgid "No backup needed"
 msgstr "No es necesario el backup"
 
@@ -1850,6 +1840,9 @@ msgstr "No he encontrado motor capaz"
 msgid "No satellite frontend found!!"
 msgstr "No he encontrado ningún sintonizador de satélite"
 
+msgid "No tags are set on these movies."
+msgstr "No hay etiquetas en estas películas."
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "¡No hay sintonizador configurado para usar con un motor diseqc!"
 
@@ -1887,18 +1880,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"No hay ningún adaptador de red local que funcione.\n"
+"Verifique que ha conectado un cable de red y su red está configurada "
+"correctamente."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"No hay ningún adaptador de red inalámbrica.\n"
+"Verifique que ha conectado un dispositivo WLAN compatible y su red esté "
+"configurada correctamente."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"No he encontrado ningún interface de red inalámbrica que funcione.\n"
+"Verifique que ha conectado un dispositivo WLAN compatible o active su "
+"interface de red local."
 
 msgid "No, but restart from begin"
 msgstr "No, debe reiniciar desde el principio"
@@ -1943,14 +1945,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Reproduciendo ahora"
 
-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 ""
-"Ahora inserte el USB stick (tamaño mínimo 64 MB) que quiera formatear y usar "
-"para flashear una imagen .NFI. Pulse OK despúes de conectarlo."
-
 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 "
@@ -1990,9 +1984,6 @@ msgstr "Sólo escanear libres"
 msgid "Orbital Position"
 msgstr "Posición Orbital"
 
-msgid "Other..."
-msgstr "Otro..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2027,15 +2018,15 @@ msgstr "Configuración del control de adultos"
 msgid "Parental control type"
 msgstr "Tipo de control de adultos"
 
-msgid "Partitioning USB stick..."
-msgstr "Particionando la memoria USB ..."
-
 msgid "Pause movie at end"
 msgstr "Parar película al final"
 
 msgid "PiPSetup"
 msgstr "PiPConfig"
 
+msgid "PicturePlayer"
+msgstr "Reproductor de Fotos"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2079,6 +2070,13 @@ msgstr "Por favor, elija su paquete..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Por favor, elija la lista de canales por defecto que quiere instalar."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"¡Desconecte todos los dispositivos USB de su Dreambox y (re)conecte el lápiz "
+"USB (tamaño mínimo 64 MB) ahora!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "¡Por favor no cambie valores cuando no sepa lo que hace!"
 
@@ -2134,8 +2132,8 @@ msgstr "Por favor, seleccione un subcanal a grabar..."
 msgid "Please select a subservice..."
 msgstr "Por favor, seleccione un subcanal..."
 
-msgid "Please select keyword to filter..."
-msgstr "Por favor, seleccione una palabra para filtrar..."
+msgid "Please select tag to filter..."
+msgstr "Seleccione una etiqueta para filtrar..."
 
 msgid "Please select target directory or medium"
 msgstr "Seleccione el directorio destino o el medio"
@@ -2169,19 +2167,19 @@ msgstr ""
 "botón OK."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgstr "Espere la activación de su configuración de red..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Espere para la verificación de firma md5..."
+msgid "Please wait while scanning is in progress..."
+msgstr ""
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Espere mientras configuramos su red..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Espere mientras su red está reiniciando..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Por favor, espere..."
 
 msgid "Please wait... Loading list..."
 msgstr "Espere... Cargando lista..."
@@ -2249,6 +2247,10 @@ msgstr "Pulse OK para activar la configuración."
 msgid "Press OK to edit the settings."
 msgstr "Pulse OK para editar la configuración."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "Pulse OK para buscar"
 
@@ -2264,9 +2266,12 @@ msgstr "Menú previsualizar"
 msgid "Primary DNS"
 msgstr "DNS Principal"
 
-msgid "Properties of current title"
+msgid "Priority"
 msgstr ""
 
+msgid "Properties of current title"
+msgstr "Propiedades del título actual"
+
 msgid "Protect services"
 msgstr "Proteger canales"
 
@@ -2282,6 +2287,9 @@ msgstr "Proveedor a buscar"
 msgid "Providers"
 msgstr "Proveedores"
 
+msgid "Quick"
+msgstr "Rápido"
+
 msgid "Quickzap"
 msgstr "Zapeo rápido"
 
@@ -2303,15 +2311,15 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Disco Ram"
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "¿Seguro que quiere cerrar sin grabar la configuración?"
 
 msgid "Really delete done timers?"
 msgstr "¿Quiere borrar las programaciones terminadas?"
 
-msgid "Really delete this timer?"
-msgstr "¿Seguro que quiere borrar la programación?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "¿Quiere salir del zapeo rápido de subcananles?"
 
@@ -2355,9 +2363,6 @@ msgstr "Velocidad de refresco"
 msgid "Refresh rate selection."
 msgstr "Selección de velocidad de refresco."
 
-msgid "Remounting stick partition..."
-msgstr "Remontando la partición de la memoria USB..."
-
 msgid "Remove Bookmark"
 msgstr "Borrar Marcador"
 
@@ -2379,6 +2384,9 @@ msgstr "¿Borrar el fichero corrupto .NFI?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "¿Borrar el fichero .NFI incompleto?"
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr "Borrar el título"
 
@@ -2405,7 +2413,7 @@ msgid "Reset"
 msgstr "Resetear"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Reinicia y renumera los nombre de títulos"
 
 msgid "Resolution"
 msgstr "Resolución"
@@ -2646,10 +2654,10 @@ msgid "Selected source image"
 msgstr "Imagen origen seleccionada"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Enviar DISEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Enviar DISEqC sólo en cambio de satélite"
 
 msgid "Seperate titles with a main menu"
 msgstr "Separar títulos con un menú principal"
@@ -2703,13 +2711,13 @@ msgid "Services"
 msgstr "Canales"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Poner Voltaje y 22kHz"
 
 msgid "Set as default Interface"
 msgstr "Poner como interface por defecto"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "Poner Interface como por defecto"
 
 msgid "Set limits"
 msgstr "Poner límites"
@@ -2769,7 +2777,7 @@ msgid "Simple"
 msgstr "Sencillo"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Título Simple (compatibilidad para más reproductores)"
 
 msgid "Single"
 msgstr "Uno"
@@ -2849,9 +2857,6 @@ msgstr "Reposo"
 msgid "Standby / Restart"
 msgstr "Reposo / Reiniciar"
 
-msgid "Start"
-msgstr "Inicio"
-
 msgid "Start from the beginning"
 msgstr "Comenzar desde el inicio"
 
@@ -2894,6 +2899,12 @@ msgstr "¿Parar la reproducción de esta película?"
 msgid "Stop test"
 msgstr "Parar test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr "Almacenar posición"
 
@@ -2950,7 +2961,7 @@ msgstr ""
 "al español no dude en ponerse en contacto conmigo."
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "El fichero TS es demasiado grande para el nivel 1 ISO9660."
 
 msgid "TV System"
 msgstr "Sistema de TV"
@@ -2958,12 +2969,27 @@ msgstr "Sistema de TV"
 msgid "Table of content for collection"
 msgstr "Tabla de contenido para la colección"
 
+msgid "Tag 1"
+msgstr "Etiqueta 1"
+
+msgid "Tag 2"
+msgstr "Etiqueta 2"
+
+msgid "Tags"
+msgstr "Etiquetas"
+
 msgid "Terrestrial"
 msgstr "Terrestre"
 
 msgid "Terrestrial provider"
 msgstr "Proveedor terrestre"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "Modo test"
 
@@ -2980,17 +3006,6 @@ msgstr ""
 "Gracias por usar el asistente. Su dream está ahora listo para su uso.\n"
 "Por favor, pulse OK para comenzar su 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 ""
-"El flasher de imagen .NFI a USB stick está preparado. Descarge una imagen ."
-"NFI desde el servidor y guárdela en la memoria USB. Entonces reinicie y "
-"pulse la tecla 'Abajo' en el panel frontal para arrancar desde el .NFI "
-"flasher desde la memoria USB."
-
 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 "
@@ -2999,6 +3014,13 @@ msgstr ""
 "El estándar DVD no soporta video H.264 (HDTV). ¿Quiere crear un DVD de datos "
 "Dreambox (el cuál no podrá ser reproducido por un reproductor de DVDs)?"
 
+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 ""
+"El lápiz USB es ahora arrancable. ¿Quiere descargar la última versioón desde "
+"el servidor y guardarla en el lápiz?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "El backup ha fallado. Elija una localización diferente para el backup."
 
@@ -3068,6 +3090,10 @@ msgstr "El pin introducido no es correcto."
 msgid "The pin codes you entered are different."
 msgstr "Los pins introducidos son diferentes."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr "El apagado automático ha sido activado."
 
@@ -3208,6 +3234,9 @@ msgstr "Umbral"
 msgid "Thu"
 msgstr "Jue"
 
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
 msgid "Thursday"
 msgstr "Jueves"
 
@@ -3257,6 +3286,9 @@ msgstr "Pausa"
 msgid "Timeshift not possible!"
 msgstr "¡Pausa no posible!"
 
+msgid "Timeshift path..."
+msgstr "Directorio de pausa..."
+
 msgid "Timezone"
 msgstr "Zona horaria"
 
@@ -3264,20 +3296,25 @@ msgid "Title"
 msgstr "Título"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Título:"
+msgstr "Propiedades de título"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Modo Título"
 
 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."
-msgstr ""
-"Esté seguro que realiza ésto. Quite el stick USB destino ahora y vuelvalo a "
-"ponerlo. Pulse OK cuando lo haya sacado."
+"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 ""
+"Para actualizar el firmware de su Dreambox, siga estos pasos:\n"
+"1) Apague su aparago con el interruptor trasero y conecte el lápiz USB "
+"arrancable.\n"
+"2) Vuelva a conectar la corriente y pulse el botón ABAJO en el panel frontal "
+"presiando por 10 segundos.\n"
+"3) Espere a que arranque y siga las instrucciones del asistente."
 
 msgid "Today"
 msgstr "Hoy"
@@ -3367,6 +3404,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "Memoria USB"
 
+msgid "USB stick wizard"
+msgstr "Asistente de lápiz USB"
+
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3411,6 +3454,9 @@ msgstr "Actualizando"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Actualizando Dreambox... Por favor espere"
 
+msgid "Use"
+msgstr "Uso"
+
 msgid "Use DHCP"
 msgstr "Usar DHCP"
 
@@ -3519,7 +3565,7 @@ msgid "View teletext..."
 msgstr "Ver teletexto..."
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Teclado Virtual"
 
 msgid "Voltage mode"
 msgstr "Modo voltaje"
@@ -3537,7 +3583,7 @@ msgid "WPA"
 msgstr "WPA"
 
 msgid "WPA or WPA2"
-msgstr ""
+msgstr "WPA o WPA2"
 
 msgid "WPA2"
 msgstr "WPA2"
@@ -3548,9 +3594,6 @@ msgstr "WSS en 4:3"
 msgid "Waiting"
 msgstr "Esperando"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Esperando a la memoria USB a resolver..."
-
 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"
@@ -3617,6 +3660,9 @@ msgstr "¿Qué quiere buscar?"
 msgid "Where do you want to backup your settings?"
 msgstr "¿Donde quiere backup su configuración?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "¿Dónde guardar las grabaciones temporales de pausa?"
+
 msgid "Wireless"
 msgstr "Inalámbrico"
 
@@ -3632,20 +3678,17 @@ msgstr "¡Falló la escritura!"
 msgid "Writing NFI image file to flash completed"
 msgstr "Se completó la escritura de la imagen la memoria flash"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Escribiendo el fichero de imagen a la Flash NAND"
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Año:"
+msgid "Year"
+msgstr "Año"
 
 msgid "Yes"
 msgstr "Si"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Si, y borre esta película"
 
 msgid "Yes, backup my settings!"
 msgstr "Si, ¡backup mi configuración!"
@@ -3755,15 +3798,6 @@ msgstr ""
 "Su dreambox será apagado. Después, realice las instrucciones del sitio web, "
 "y su firmware preguntará actualizar su configuración."
 
-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 ""
-"¡Necesita definir algunas palabras primero!\n"
-"Pulse la tecla-menu para definir palabras.\n"
-"¿Quiere definir palabras ahora?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3804,7 +3838,7 @@ msgstr ""
 "Pulse OK para comenzar la actualización."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Su configuración de red ha sido activada."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3812,6 +3846,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Su configuración de red ha sido activada.\n"
+"Un segundo interface configurado ha sido encontrado.\n"
+"\n"
+"¿Quiere desactivar el segundo interface?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr "¿Volver al canal antes de configurar el motor?"
@@ -3844,10 +3882,10 @@ msgid "about to start"
 msgstr "sobre comenzar"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "activar configuración actual"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "añadir un servidor de nombres"
 
 msgid "add alternatives"
 msgstr "añadir alternativas"
@@ -3906,33 +3944,42 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "format de pista de audio (%s)"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "idioma de pista de audio (%s)"
 
 msgid "audio tracks"
 msgstr "pistas de audio"
 
+msgid "auto"
+msgstr "auto"
+
 msgid "back"
 msgstr "atrás"
 
 msgid "background image"
 msgstr "imagen de fondo"
 
+msgid "backgroundcolor"
+msgstr "color de fondo"
+
 msgid "better"
 msgstr "mejor"
 
+msgid "black"
+msgstr "negro"
+
 msgid "blacklist"
 msgstr "lista negra"
 
+msgid "blue"
+msgstr "azul"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "por Exif"
+msgstr "grabar pista de audio (%s)"
 
 msgid "change recording (duration)"
 msgstr "cambiar la grabación (duración)"
@@ -3955,9 +4002,6 @@ msgstr "circular dcha"
 msgid "clear playlist"
 msgstr "limpiar lista"
 
-msgid "color"
-msgstr "color"
-
 msgid "complex"
 msgstr "complejo"
 
@@ -3985,12 +4029,12 @@ msgstr "diariamente"
 msgid "day"
 msgstr "día"
 
-msgid "delete"
-msgstr "borrar"
-
 msgid "delete cut"
 msgstr "borrar corte"
 
+msgid "delete file"
+msgstr "borrar fichero"
+
 msgid "delete playlist entry"
 msgstr "borrar entrada en la lista de reproducción"
 
@@ -4058,7 +4102,7 @@ msgid "end favourites edit"
 msgstr "fin edición de favoritos"
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 y red"
 
 msgid "equal to"
 msgstr "igual a"
@@ -4076,32 +4120,32 @@ msgid "exit movielist"
 msgstr "salir del menú de películas"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "salir de la configuración de servidor de nombres"
 
 msgid "exit network adapter configuration"
-msgstr ""
+msgstr "salir de la configuración de red"
 
 msgid "exit network adapter setup menu"
-msgstr ""
+msgstr "salir del menú de configuración de red"
 
 msgid "exit network interface list"
-msgstr ""
+msgstr "salir de la lista de interfaces de red"
 
 msgid "exit networkadapter setup menu"
-msgstr ""
+msgstr "salir del menú de configuración de adaptador de red"
 
 msgid "failed"
 msgstr "falló"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "formatos (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "nombre de fichero"
 
 msgid "fine-tune your display"
 msgstr "Configurar en detalle tu TV"
 
-msgid "font face"
-msgstr "fuente"
-
 msgid "forward to the next chapter"
 msgstr "salte al capítulo siguiente"
 
@@ -4117,8 +4161,8 @@ msgstr "ir a pausa profunda"
 msgid "go to standby"
 msgstr "ir a pausa"
 
-msgid "headline"
-msgstr "cabecera"
+msgid "green"
+msgstr "verde"
 
 msgid "hear radio..."
 msgstr "escuchar radio..."
@@ -4126,15 +4170,15 @@ msgstr "escuchar radio..."
 msgid "help..."
 msgstr "ayuda..."
 
+msgid "hidden network"
+msgstr "red oculta"
+
 msgid "hide extended description"
 msgstr "ocultar descripción extendida"
 
 msgid "hide player"
 msgstr "ocultar reproductor"
 
-msgid "highlighted button"
-msgstr "botón iluminado"
-
 msgid "horizontal"
 msgstr "horizontal"
 
@@ -4234,16 +4278,16 @@ msgid "move PiP to main picture"
 msgstr "mover PiP a la imagen principal"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "mover abajo la última entrada"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "mover abajo la entrada siguiente"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "mover arriba la primera entrada"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "mover arriba la entrada anterior"
 
 msgid "movie list"
 msgstr "lista de películas"
@@ -4266,9 +4310,6 @@ msgstr "no"
 msgid "no HDD found"
 msgstr "disco no encontrado"
 
-msgid "no Picture found"
-msgstr "Foto no encontrada"
-
 msgid "no module found"
 msgstr "módulo no encontrado"
 
@@ -4306,7 +4347,7 @@ msgid "once"
 msgstr "una vez"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "abir la configuración del servidor de nombres"
 
 msgid "open servicelist"
 msgstr "abrir lista de canales"
@@ -4318,7 +4359,7 @@ msgid "open servicelist(up)"
 msgstr "abrir lista de canales(arriba)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "abrir la ayuda del teclado virtual"
 
 msgid "pass"
 msgstr "clave"
@@ -4347,17 +4388,17 @@ msgstr "canal anterior"
 msgid "previous channel in history"
 msgstr "canal anterior en historia"
 
-msgid "rebooting..."
-msgstr "reiniciando..."
-
 msgid "record"
 msgstr "grabar"
 
 msgid "recording..."
 msgstr "grabando..."
 
+msgid "red"
+msgstr "rojo"
+
 msgid "remove a nameserver entry"
-msgstr ""
+msgstr "borrar entrada de servidor de nombres"
 
 msgid "remove after this position"
 msgstr "borrar después de esta posición"
@@ -4404,9 +4445,15 @@ msgstr "vuelva al capítulo anterior"
 msgid "right"
 msgstr "derecha"
 
+msgid "save last directory on exit"
+msgstr "guardar el último directorio al salir"
+
 msgid "save playlist"
 msgstr "guardar lista de reproducción"
 
+msgid "save playlist on exit"
+msgstr "guardar la lista al salir"
+
 msgid "scan done!"
 msgstr "¡búsqueda hecha!"
 
@@ -4436,10 +4483,10 @@ msgid "select image from server"
 msgstr "seleccione imagen desde el servidor"
 
 msgid "select interface"
-msgstr ""
+msgstr "seleccionar interface"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "seleccionar la entrada de menú"
 
 msgid "select movie"
 msgstr "seleccionar película"
@@ -4459,6 +4506,9 @@ msgstr "mostrar el menú principal de DVD"
 msgid "show EPG..."
 msgstr "mostrar EPG..."
 
+msgid "show Infoline"
+msgstr "mostrar Infoline"
+
 msgid "show all"
 msgstr "mostrar todo"
 
@@ -4471,11 +4521,11 @@ msgstr "mostrar detalles del evento"
 msgid "show extended description"
 msgstr "mostrar descripción extendida"
 
-msgid "show first tag"
-msgstr "mostrar la primera etiqueta"
+msgid "show first selected tag"
+msgstr "mostrar la primera etiqueta seleccionada"
 
-msgid "show second tag"
-msgstr "mostrar la segunda etiqueta"
+msgid "show second selected tag"
+msgstr "mostrar la segunda etiqueta seleccionada"
 
 msgid "show shutdown menu"
 msgstr "mostrar menú de apagado"
@@ -4510,12 +4560,12 @@ msgstr "saltar adelante"
 msgid "skip forward (enter time)"
 msgstr "pasar adelante (introducir tiempo)"
 
+msgid "slide picture in loop"
+msgstr "fotos en reproducción en bucle"
+
 msgid "sort by date"
 msgstr "ordenar por fecha"
 
-msgid "spaces (top, between rows, left)"
-msgstr "espacios (arriba, entre filas, izda)"
-
 msgid "standard"
 msgstr "estándar"
 
@@ -4525,6 +4575,9 @@ msgstr "pausa"
 msgid "start cut here"
 msgstr "comenzar corte aquí"
 
+msgid "start directory"
+msgstr "directorio de inicio"
+
 msgid "start timeshift"
 msgstr "comenzar pausa"
 
@@ -4555,14 +4608,20 @@ msgstr "cambiar a lista de ficheros"
 msgid "switch to playlist"
 msgstr "cambiar a lista"
 
+msgid "switch to the next angle"
+msgstr "cambiar al siguiente ángulo"
+
 msgid "switch to the next audio track"
 msgstr "cambiar a la siguiente pista de audio"
 
 msgid "switch to the next subtitle language"
 msgstr "cambiar al siguiente idioma de subtítulos"
 
-msgid "text"
-msgstr "texto"
+msgid "template file"
+msgstr "fichero de plantilla"
+
+msgid "textcolor"
+msgstr "color de texto"
 
 msgid "this recording"
 msgstr "esta grabación"
@@ -4612,8 +4671,11 @@ msgstr "semanalmente"
 msgid "whitelist"
 msgstr "lista blanca"
 
-msgid "year"
-msgstr "año"
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr "amarillo"
 
 msgid "yes"
 msgstr "si"
@@ -4653,12 +4715,24 @@ msgstr "zapeado"
 #~ msgid "#77ffffff"
 #~ msgstr "#77ffffff"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr "Flasher .NFI de arranque USB creado correctamente."
+
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "Add files to playlist"
 #~ msgstr "Añadir ficheros a la lista"
 
 #~ msgid "Add title..."
 #~ msgstr "Añadir título..."
 
+#~ msgid "All..."
+#~ msgstr "Todo..."
+
 #~ msgid "An error has occured. (%s)"
 #~ msgstr "Ha ocurrido un error. (%s)"
 
@@ -4696,6 +4770,9 @@ msgstr "zapeado"
 #~ msgid "Confirm"
 #~ msgstr "Confirmar"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Copiando el flasher de arranque a la memoria USB..."
+
 #~ msgid "Custom skip time for 1/3 keys"
 #~ msgstr "Configura el tiempo a avanzar para las teclas 1/3"
 
@@ -4714,6 +4791,9 @@ msgstr "zapeado"
 #~ msgid "DVD up key"
 #~ msgstr "DVD tecla arriba"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Descomprimiendo la imagen de arranque de la memoria USB..."
+
 #~ msgid "Default-Wizard"
 #~ msgstr "Asistente-pordefecto"
 
@@ -4740,9 +4820,15 @@ msgstr "zapeado"
 #~ "Seguro que quiere descargar\n"
 #~ "el complemento \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "¿Realmente quiere salir?"
+
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "¿Quiere ver un tutorial de la lista de corte?"
 
+#~ msgid "Downloading image description..."
+#~ msgstr "Descargando la descripción de la imagen..."
+
 #~ msgid "Edit current title"
 #~ msgstr "Editar título actual"
 
@@ -4762,9 +4848,18 @@ msgstr "zapeado"
 #~ "Habilitar la red local de su Dreambox.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Fin"
+
 #~ msgid "Factoryreset"
 #~ msgstr "Borrado de fábrica"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Fijar memoria USB"
+
+#~ msgid "Font size"
+#~ msgstr "Tamaño de fuente"
+
 #~ msgid "Games / Plugins"
 #~ msgstr "Juegos / Plugins"
 
@@ -4836,9 +4931,29 @@ msgstr "zapeado"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "No, dejeme elegir las listas por defecto"
 
+#~ 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 ""
+#~ "Ahora inserte el USB stick (tamaño mínimo 64 MB) que quiera formatear y "
+#~ "usar para flashear una imagen .NFI. Pulse OK despúes de conectarlo."
+
+#~ msgid "Other..."
+#~ msgstr "Otro..."
+
 #~ msgid "Output Type"
 #~ msgstr "Tipo de Salida"
 
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Particionando la memoria USB ..."
+
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Por favor, seleccione una palabra para filtrar..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Espere para la verificación de firma md5..."
+
 #~ 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 "
@@ -4851,12 +4966,12 @@ msgstr "zapeado"
 #~ "Conecte su USB Wlan a su Dreambox antes de presionar OK.\n"
 #~ "\n"
 
-#~ msgid "Quick"
-#~ msgstr "Rápido"
-
 #~ msgid "Rate"
 #~ msgstr "Velocidad"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "¿Seguro que quiere borrar la programación?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4899,6 +5014,9 @@ msgstr "zapeado"
 #~ "Hay grabaciones que están en proceso o que van a comenzar pronto... "
 #~ "¿quiere apagar ahora?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Remontando la partición de la memoria USB..."
+
 #~ msgid "Replace current playlist"
 #~ msgstr "Reemplazar la lista actual"
 
@@ -4923,12 +5041,34 @@ msgstr "zapeado"
 #~ msgid "Socket "
 #~ msgstr "Socket"
 
+#~ msgid "Start"
+#~ msgstr "Inicio"
+
 #~ msgid "Startwizard"
 #~ msgstr "Comenzar asistente"
 
 #~ msgid "Step "
 #~ msgstr "Paso "
 
+#~ 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 ""
+#~ "El flasher de imagen .NFI a USB stick está preparado. Descarge una "
+#~ "imagen .NFI desde el servidor y guárdela en la memoria USB. Entonces "
+#~ "reinicie y pulse la tecla 'Abajo' en el panel frontal para arrancar desde "
+#~ "el .NFI flasher desde la memoria USB."
+
+#~ 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."
+#~ msgstr ""
+#~ "Esté seguro que realiza ésto. Quite el stick USB destino ahora y vuelvalo "
+#~ "a ponerlo. Pulse OK cuando lo haya sacado."
+
 #~ msgid "Transpondertype"
 #~ msgstr "Tipo de Transpondedor"
 
@@ -4947,6 +5087,21 @@ msgstr "zapeado"
 #~ msgid "Video-Setup"
 #~ msgstr "Config-Video"
 
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Esperando a la memoria USB a resolver..."
+
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Escribiendo el fichero de imagen a la Flash NAND"
+
+#~ 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 ""
+#~ "¡Necesita definir algunas palabras primero!\n"
+#~ "Pulse la tecla-menu para definir palabras.\n"
+#~ "¿Quiere definir palabras ahora?"
+
 #~ msgid "You selected a playlist"
 #~ msgstr "Seleccionó una lista"
 
@@ -4964,21 +5119,42 @@ msgstr "zapeado"
 #~ "Su Adaptador de Red inalámbrica no puede ser iniciado.\n"
 #~ "Quiere reiniciar su Dreambox para aplicar la nueva configuración?\n"
 
+#~ msgid "by Exif"
+#~ msgstr "por Exif"
+
+#~ msgid "color"
+#~ msgstr "color"
+
+#~ msgid "delete"
+#~ msgstr "borrar"
+
 #~ msgid "empty/unknown"
 #~ msgstr "vacío/desconocido"
 
 #~ msgid "equal to Socket A"
 #~ msgstr "igual al socket A"
 
+#~ msgid "font face"
+#~ msgstr "fuente"
+
 #~ msgid "full /etc directory"
 #~ msgstr "todo el directorio /etc"
 
+#~ msgid "headline"
+#~ msgstr "cabecera"
+
+#~ msgid "highlighted button"
+#~ msgstr "botón iluminado"
+
 #~ msgid "list"
 #~ msgstr "lista"
 
 #~ msgid "loopthrough to socket A"
 #~ msgstr "conectado al socket A"
 
+#~ msgid "no Picture found"
+#~ msgstr "Foto no encontrada"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "sólo el directorio /etc/enigma2"
 
@@ -4988,6 +5164,9 @@ msgstr "zapeado"
 #~ msgid "play previous playlist entry"
 #~ msgstr "reproducir elemento anterior de la lista de reproducción"
 
+#~ msgid "rebooting..."
+#~ msgstr "reiniciando..."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "%d services found!"
@@ -5019,8 +5198,20 @@ msgstr "zapeado"
 #~ msgid "select Slot"
 #~ msgstr "seleccionar Slot"
 
+#~ msgid "show first tag"
+#~ msgstr "mostrar la primera etiqueta"
+
+#~ msgid "show second tag"
+#~ msgstr "mostrar la segunda etiqueta"
+
 #~ msgid "skip backward (self defined)"
 #~ msgstr "pasar atrás (definido)"
 
 #~ msgid "skip forward (self defined)"
 #~ msgstr "pasar adelante (definido)"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "espacios (arriba, entre filas, izda)"
+
+#~ msgid "text"
+#~ msgstr "texto"
old mode 100755 (executable)
new mode 100644 (file)
index 17394a0..80a62f7
--- a/po/fi.po
+++ b/po/fi.po
@@ -2,8 +2,8 @@ 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"
-"PO-Revision-Date: 2008-10-27 19:01+0200\n"
+"POT-Creation-Date: 2009-01-16 00:47+0100\n"
+"PO-Revision-Date: 2009-01-03 11:39+0200\n"
 "Last-Translator: Timo Jarvenpaa <timojarvenpaa@hotmail.com>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -86,17 +86,14 @@ msgid "(show optional DVD audio menu)"
 msgstr "(näytä  DVD-äänen lisävalikko)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Käytettävissä vain kun useampi kuin yksi sovitin on aktiivinen."
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
+msgstr "* Käytettävissä vain kun syötetään piilotettu SSID tai verkkoavain."
 
 msgid ".NFI Download failed:"
 msgstr ".NFI lataus epäonnistui:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ".NFI-päivitysohjelman asennus USB-muistille onnistui."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -300,12 +297,6 @@ msgstr "AC3-ääni ensisijaisena"
 msgid "AC3 downmix"
 msgstr "AC3 muunnos stereoksi"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Tietoja"
 
@@ -380,8 +371,8 @@ msgstr ""
 "Kun alkuasennus on päättynyt, pitää sinun valita lapsilukolla suojattavat "
 "kanavat. Katso ohjekirjasta kuinka se tehdään."
 
-msgid "Album:"
-msgstr "Albumi:"
+msgid "Album"
+msgstr "Albumi"
 
 msgid "All"
 msgstr "Kaikki"
@@ -389,9 +380,6 @@ msgstr "Kaikki"
 msgid "All Satellites"
 msgstr "Kaikki satelliitit"
 
-msgid "All..."
-msgstr "Kaikki"
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -414,16 +402,18 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"Haluatko aktivoida nämä verkkoasetukset?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
 "\n"
 msgstr ""
-"Haluatko uudelleenkäynnistää verkkosovittimet?\n"
+"Haluatko käynnistää verkkosovittimet uudelleen?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Esittäjä:"
+msgid "Artist"
+msgstr "Esittäjä"
 
 msgid "Ask before shutdown:"
 msgstr "Kysy varmistus ennen sammutusta:"
@@ -601,6 +591,9 @@ msgstr "Kanava"
 msgid "Channel Selection"
 msgstr "Kanavien valinta"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Kanava:"
 
@@ -738,9 +731,6 @@ msgstr "Jatka toistoa"
 msgid "Contrast"
 msgstr "Kontrasti"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Päivitysohjelman kopiointi USB-muistille käynnissä.."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "NFI-ohjelmistopäivityksien palvelimelle ei saatu yhteyttä:"
 
@@ -818,9 +808,6 @@ msgstr "Tanska"
 msgid "Date"
 msgstr "Päiväys"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Puretaan päivitysohjelmaa USB-muistia varten..."
-
 msgid "Deep Standby"
 msgstr "Virransäästötila"
 
@@ -936,8 +923,8 @@ msgstr ""
 #, python-format
 msgid "Do you really want to delete %s?"
 msgstr ""
-"Haluatko poistaa tallenteen\n"
-"”%s?”"
+"Haluatko poistaa\n"
+"\"%s\"?"
 
 #, python-format
 msgid ""
@@ -947,23 +934,20 @@ msgstr ""
 "Haluatko ladata\n"
 "lisäosan \"%s\"?"
 
-msgid "Do you really want to exit?"
-msgstr "Haluatko lopettaa?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
 msgstr ""
-"Haluatko varmasti alustaa kiintolevyn?\n"
+"Haluatko alustaa kiintolevyn?\n"
 "Kaikki levyllä oleva tieto menetetään!"
 
 #, python-format
 msgid "Do you really want to remove directory %s from the disk?"
-msgstr "Oletko varma, että haluat poistaa levyltä hakemiston %s?"
+msgstr "Haluatko poistaa levyltä hakemiston %s?"
 
 #, python-format
 msgid "Do you really want to remove your bookmark of %s?"
-msgstr "Oletko varma, että haluat poistaa kirjanmerkin %s?"
+msgstr "Haluatko poistaa kirjanmerkin %s?"
 
 msgid ""
 "Do you want to backup now?\n"
@@ -1052,9 +1036,6 @@ msgstr "Ladattavia lisäosia"
 msgid "Downloading"
 msgstr "Ladataan"
 
-msgid "Downloading image description..."
-msgstr "Ladataan päivitystiedoston kuvausta..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Ladataan tietoja lisäosista. Odota..."
 
@@ -1078,7 +1059,7 @@ msgid "East"
 msgstr "Itä"
 
 msgid "Edit"
-msgstr ""
+msgstr "Muokkaa"
 
 msgid "Edit DNS"
 msgstr "Muuta DNS"
@@ -1132,15 +1113,11 @@ msgid "Encryption Key"
 msgstr "Suojausavain"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Salausavaimen tyyppi"
 
 msgid "Encryption Type"
 msgstr "Suojausjärjestelmä"
 
-#  Asetuksen nimi ajastusikkunassa
-msgid "End"
-msgstr "Lopetus"
-
 msgid "End time"
 msgstr "Lopetusaika"
 
@@ -1171,7 +1148,7 @@ msgid "Enter Rewind at speed"
 msgstr "Aloita kelaus taaksepäin nopeudella"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Syötä WLAN-verkon nimi/SSID:"
 
 msgid "Enter WLAN passphrase/key:"
 msgstr ""
@@ -1208,6 +1185,9 @@ msgstr "Tehtävän edistyminen:"
 msgid "Execution finished!!"
 msgstr "Tehtävä valmis!"
 
+msgid "Exif"
+msgstr ""
+
 msgid "Exit"
 msgstr "Poistu"
 
@@ -1271,10 +1251,10 @@ msgid "Finished"
 msgstr "Päättyi"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Verkon määritys valmis"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Verkko käynnistyi uudelleen"
 
 msgid "Finnish"
 msgstr "Suomi"
@@ -1284,24 +1264,21 @@ msgid ""
 msgstr ""
 "Aluksi lataamme viimeisimmän käynnistysympäristön USB-päivitysohjelmalle."
 
-msgid "Fix USB stick"
-msgstr "Korjaa USB-muisti"
-
 msgid "Flash"
 msgstr ""
 
 msgid "Flashing failed"
 msgstr "Päivitys epäonnistui"
 
-msgid "Font size"
-msgstr "Fonttikoko"
-
 msgid "Format"
 msgstr "Alusta"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Ruudun toistomäärä hyppivällä kelauksella"
 
+msgid "Frame size in full view"
+msgstr ""
+
 msgid "French"
 msgstr "Ranska"
 
@@ -1323,6 +1300,9 @@ msgstr "pe"
 msgid "Friday"
 msgstr "Perjantai"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr ""
 
@@ -1348,8 +1328,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Yhdyskäytävä"
 
-msgid "Genre:"
-msgstr "Laji:"
+msgid "Genre"
+msgstr "Laji"
 
 msgid "German"
 msgstr "Saksa"
@@ -1628,6 +1608,9 @@ msgstr "Hakemisto"
 msgid "Lock:"
 msgstr "Lukitse:"
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr "Pitkä painallus"
 
@@ -1685,6 +1668,9 @@ msgstr "Valikko"
 msgid "Message"
 msgstr "Viesti"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Tiedostojärjestelmän luonti epäonnistui"
 
@@ -1744,7 +1730,7 @@ msgstr "SEURAAVA"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
 msgstr ""
-"NFI-päivityksen asennus on valmis. Uudelleenkäynnistä keltaisella "
+"NFI-päivityksen asennus on valmis. Käynnistä uudelleen keltaisella "
 "näppäimellä!"
 
 msgid "NOW"
@@ -1831,6 +1817,9 @@ msgstr ""
 "Kiintolevyä ei löydy tai sitä ei\n"
 "ole alustettu."
 
+msgid "No Networks found"
+msgstr ""
+
 msgid "No backup needed"
 msgstr "Varmuuskopiota ei tarvita"
 
@@ -1859,7 +1848,7 @@ msgstr ""
 "Voit tarkistaa verkkoasetukset ja yrittää uudelleen."
 
 msgid "No picture on TV? Press EXIT and retry."
-msgstr "Ei kuvaa TV:ssä? Paina EXIT ja yritä uudestaan."
+msgstr "Ei kuvaa TV:ssä? Paina EXIT ja yritä uudelleen."
 
 msgid "No positioner capable frontend found."
 msgstr ""
@@ -1869,6 +1858,9 @@ msgstr ""
 msgid "No satellite frontend found!!"
 msgstr "Dreamboxissasi ei ole satelliittiviritintä."
 
+msgid "No tags are set on these movies."
+msgstr ""
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr ""
 "Virittimiä ei ole asetettu käyttämään\n"
@@ -1907,18 +1899,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"Toimivaa verkkokorttia ei löydy.\n"
+"Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat "
+"oikein."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"Toimivaa langatonta yhteyttä ei löydy.\n"
+"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen ja verkko on "
+"määritelty oikein."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"Toimivaa langatonta yhteyttä ei löydy.\n"
+"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke "
+"lähiverkko päälle."
 
 msgid "No, but restart from begin"
 msgstr "Ei, aloita alusta"
@@ -1964,14 +1965,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Toistetaan"
 
-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 ""
-"Kytke USB-muisti (minimikoko 64MB) jota haluat käyttää NFI-päivitykseen. "
-"Paina OK-näppäintä kun olet kytkenyt muistin."
-
 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 "
@@ -2013,9 +2006,6 @@ msgstr "Hae vain salaamattomat"
 msgid "Orbital Position"
 msgstr "Sijainti"
 
-msgid "Other..."
-msgstr "Muu..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2050,15 +2040,15 @@ msgstr "Lapsilukon asetukset"
 msgid "Parental control type"
 msgstr "Lapsilukon tyyppi"
 
-msgid "Partitioning USB stick..."
-msgstr "Osioidaan USB-muistitikku..."
-
 msgid "Pause movie at end"
 msgstr "Pysähdy tallenteen loppuun"
 
 msgid "PiPSetup"
 msgstr "PiP-kuvan asetukset"
 
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr ""
@@ -2079,7 +2069,7 @@ msgid "Play recorded movies..."
 msgstr "Toista tallenteet..."
 
 msgid "Please Reboot"
-msgstr "Uudelleenkäynnistä"
+msgstr "Käynnistä uudelleen"
 
 msgid "Please Select Medium to be Scanned"
 msgstr "Valitse lähde josta haetaan"
@@ -2102,6 +2092,11 @@ msgstr "Valitse paketti..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Valitse oletuskanavalistat jotka haluat asentaa."
 
+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 "Älä muuta arvoja, ellet tiedä mitä teet!"
 
@@ -2157,8 +2152,8 @@ msgstr "Valitse tallennettava alipalvelu..."
 msgid "Please select a subservice..."
 msgstr "Valitse alipalvelu..."
 
-msgid "Please select keyword to filter..."
-msgstr "Valitse hakusana..."
+msgid "Please select tag to filter..."
+msgstr ""
 
 msgid "Please select target directory or medium"
 msgstr "Valitse kohdehakemisto tai levy"
@@ -2191,19 +2186,19 @@ msgid ""
 msgstr "Valitse kieli ylös/alas näppäimillä ja paina OK-näppäintä."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgstr "Odota, verkon määritykset aktivoidaan..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Odota md5-allekirjoituksen tarkistusta..."
+msgid "Please wait while scanning is in progress..."
+msgstr ""
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Odota, verkkoa määritetään..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Odota, verkko käynnistetään uudelleen..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Odota..."
 
 msgid "Please wait... Loading list..."
 msgstr "Odota... Luetteloa ladataan..."
@@ -2271,6 +2266,10 @@ msgstr "Hyväksy asetukset painamalla OK."
 msgid "Press OK to edit the settings."
 msgstr "Muokkaa asetuksia painamalla OK-näppäintä."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
 msgid "Press OK to scan"
 msgstr "Aloita haku painamalla OK"
 
@@ -2286,6 +2285,9 @@ msgstr "Esikatsele valikkoa"
 msgid "Primary DNS"
 msgstr "Ensisijainen DNS"
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr ""
 
@@ -2304,6 +2306,9 @@ msgstr "Hae toimittajalta"
 msgid "Providers"
 msgstr "Toimittajat"
 
+msgid "Quick"
+msgstr ""
+
 msgid "Quickzap"
 msgstr "Pikavaihto"
 
@@ -2325,29 +2330,29 @@ msgstr ""
 msgid "Ram Disk"
 msgstr "RAM-levy"
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "Haluatko poistua tallentamatta asetuksia?"
 
 msgid "Really delete done timers?"
-msgstr "Poistetaanko menneet ajastukset?"
-
-msgid "Really delete this timer?"
-msgstr "Poistetaanko tämä ajastus?"
+msgstr "Poistetaanko tallennetut ajastukset?"
 
 msgid "Really exit the subservices quickzap?"
 msgstr "Poistu alipalveluiden pikavaihdosta?"
 
 msgid "Really reboot now?"
-msgstr "Haluatko silti uudelleenkäynnistää?"
+msgstr "Haluatko silti käynnistää uudelleen?"
 
 msgid "Really restart now?"
-msgstr "Haluatko silti uudelleenkäynnistää?"
+msgstr "Haluatko silti käynnistää uudelleen?"
 
 msgid "Really shutdown now?"
 msgstr "Haluatko silti sammuttaa?"
 
 msgid "Reboot"
-msgstr "Uudelleenkäynnistys"
+msgstr "Käynnistä uudelleen"
 
 msgid "Reception Settings"
 msgstr "Vastaanotinasetukset"
@@ -2362,7 +2367,7 @@ msgid "Recording"
 msgstr "Tallenne"
 
 msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr "Tallennuksia käynnissä tai käynnistymässä!"
+msgstr "Tallennuksia on käynnissä tai käynnistymässä!"
 
 msgid "Recordings always have priority"
 msgstr "Tallennukset saavat keskeyttää suoran katselun"
@@ -2376,9 +2381,6 @@ msgstr "Virkistystaajuus"
 msgid "Refresh rate selection."
 msgstr "Virkistystaajuuden valinta."
 
-msgid "Remounting stick partition..."
-msgstr "Uudelleenliitetään USB-muistitikun osio..."
-
 msgid "Remove Bookmark"
 msgstr "Poista kirjanmerkki"
 
@@ -2400,6 +2402,9 @@ msgstr "Poista vioittunut .NFI-tiedosto"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Poista keskeneräinen .NFI-tiedosto"
 
+msgid "Remove timer"
+msgstr ""
+
 msgid "Remove title"
 msgstr "Poista otsikko"
 
@@ -2667,10 +2672,10 @@ msgid "Selected source image"
 msgstr "Valittu päivitys"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Lähetä DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Lähetä DiSEqC vain satelliitin vaihdossa"
 
 msgid "Seperate titles with a main menu"
 msgstr "Erilliset otsikot päävalikon kanssa"
@@ -2732,7 +2737,7 @@ msgid "Set as default Interface"
 msgstr "Aseta oletukseksi"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "Määritä sovitin oletussovittimeksi"
 
 msgid "Set limits"
 msgstr "Aseta rajat"
@@ -2872,10 +2877,6 @@ msgstr "Valmiustila"
 msgid "Standby / Restart"
 msgstr "Sammutusvalikko"
 
-#  Ajastusikkuna
-msgid "Start"
-msgstr "Aloitus"
-
 msgid "Start from the beginning"
 msgstr "Aloita alusta"
 
@@ -2919,6 +2920,12 @@ msgstr "Lopetetaanko tallenteen toistaminen?"
 msgid "Stop test"
 msgstr "Lopeta testi"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr "Tallenna sijainti"
 
@@ -2969,7 +2976,7 @@ msgid "TRANSLATOR_INFO"
 msgstr ""
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "TS-tiedosto on liian suuri ISO9660 1-tasolle!"
 
 msgid "TV System"
 msgstr "TV-järjestelmä"
@@ -2977,12 +2984,27 @@ msgstr "TV-järjestelmä"
 msgid "Table of content for collection"
 msgstr "Kokoelman hakemisto"
 
+msgid "Tag 1"
+msgstr ""
+
+msgid "Tag 2"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
 msgid "Terrestrial"
 msgstr "Antennivastaanotto (DVB-T)"
 
 msgid "Terrestrial provider"
 msgstr "Lähetysasema"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "Virityskuvan lähetys"
 
@@ -3010,17 +3032,6 @@ msgstr ""
 "värinäppäimien takaa löytyviä\n"
 "toimintoja."
 
-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 ""
-"NFI-päivitysohjelmalle tarkoitettu USB-muisti on nyt käyttövalmis. Lataa ."
-"NFI-päivitystiedosto palvelimelta ja tallenna se USB-muistille. Sen jälkeen "
-"uudelleenkäynnistä Dreambox ja pidä etupaneelin 'nuoli alas' näppäintä "
-"pohjassa jotta .NFI-päivitys käynnistyy USB-muistilta."
-
 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 "
@@ -3029,6 +3040,11 @@ msgstr ""
 "DVD-standardi ei tue H.264 (HDTV) videota. Haluatko luoda Dreamboxin omassa "
 "formaatissa olevan data-DVD:n? Levy ei toistu normaaleissa DVD-soittimissa."
 
+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 "Varmuuskopiointi epäonnistui. Valitse toinen varmuuskopiointipaikka."
 
@@ -3096,6 +3112,10 @@ msgstr "Syötit virheellisen tunnusluvun."
 msgid "The pin codes you entered are different."
 msgstr "Syöttämäsi tunnusluvut eroavat toisistaan."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr "Uniajastin on kytketty päälle."
 
@@ -3135,7 +3155,7 @@ msgstr ""
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
-msgstr "Tämä .NFI-tiedosto ei sisällä toimivaa ohjelmistopäivitystä!"
+msgstr "Tämä .NFI-tiedosto ei sisällä toimivaa %s ohjelmistopäivitystä!"
 
 msgid ""
 "This .NFI file does not have a md5sum signature and is not guaranteed to "
@@ -3235,6 +3255,9 @@ msgstr "Kynnys"
 msgid "Thu"
 msgstr "to"
 
+msgid "Thumbnails"
+msgstr ""
+
 msgid "Thursday"
 msgstr "Torstai"
 
@@ -3272,7 +3295,7 @@ msgstr ""
 "Tarkista ajastusasetukset!"
 
 msgid "Timer sanity error"
-msgstr "Ajastinvirhe"
+msgstr "Päällekkäinen ajastus"
 
 msgid "Timer selection"
 msgstr "Ajastinvalinta"
@@ -3286,6 +3309,9 @@ msgstr "Ajansiirto"
 msgid "Timeshift not possible!"
 msgstr "Ajansiirtotallennusta ei voida käyttää."
 
+msgid "Timeshift path..."
+msgstr ""
+
 msgid "Timezone"
 msgstr "Aikavyöhyke"
 
@@ -3295,19 +3321,17 @@ msgstr "Otsikko"
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Otsikko:"
-
 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 ""
-"Varmistaaksemme, että haluat todella tehdä tämän, ota USB-muisti nyt irti ja "
-"laita se takaisin ruudulla näkyvän kehoitteen jälkeen. Paina OK-näppäintä "
-"kun olet ottanut USB-muistin irti."
 
 msgid "Today"
 msgstr "Tänään"
@@ -3396,6 +3420,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB-muisti"
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3432,7 +3462,7 @@ msgid "Updating... Please wait... This can take some minutes..."
 msgstr "Päivitetään... Odota... Tämä voi kestää muutaman minuutin..."
 
 msgid "Upgrade finished. Do you want to reboot your Dreambox?"
-msgstr "Päivitys valmis. Haluatko uudelleenkäynnistää Dreamboxin?"
+msgstr "Päivitys valmis. Haluatko käynnistää Dreamboxin uudelleen?"
 
 msgid "Upgrading"
 msgstr "Päivitetään"
@@ -3440,6 +3470,9 @@ msgstr "Päivitetään"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Päivitetään Dreamboxia... Odota"
 
+msgid "Use"
+msgstr ""
+
 msgid "Use DHCP"
 msgstr "Käytä DHCP:tä"
 
@@ -3562,7 +3595,7 @@ msgid "View teletext..."
 msgstr "Näytä teksti-tv..."
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Virtuaalinen näppäimistö"
 
 msgid "Voltage mode"
 msgstr "Jännitetila"
@@ -3591,9 +3624,6 @@ msgstr "WSS-kuvasuhdesignaali"
 msgid "Waiting"
 msgstr "Odottaa"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Odotetaan USB-muistia..."
-
 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"
@@ -3673,6 +3703,9 @@ msgstr "Kanavahaun lisäasetukset:"
 msgid "Where do you want to backup your settings?"
 msgstr "Minne haluat varmuuskopioida asetukset?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
 msgid "Wireless"
 msgstr "Langaton"
 
@@ -3688,20 +3721,17 @@ msgstr "Kirjoitus epäonnistui!"
 msgid "Writing NFI image file to flash completed"
 msgstr "NFI-päivityksen asennus valmis"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Suoritetaan ohjelmistopäivitystä"
-
 msgid "YPbPr"
 msgstr "Komponentti (YPbPr)"
 
-msgid "Year:"
-msgstr "Vuosi:"
+msgid "Year"
+msgstr "Vuosi"
 
 msgid "Yes"
 msgstr "Kyllä"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Kyllä ja poista tämä tallenne"
 
 msgid "Yes, backup my settings!"
 msgstr "Kyllä, varmuuskopioi asetukset!"
@@ -3808,15 +3838,6 @@ msgstr ""
 "Dreamboksisi sammutetaan nyt. Kun olet tehnyt päivitystoimenpiteet sivuston "
 "mukaisesti, uusi ohjelmaversio pyytää sinua palauttamaan asetukset."
 
-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 ""
-"Sinun pitää ensin määritellä hakusanat.\n"
-"Määrittele ne Menu-napin kautta.\n"
-"Haluatko määritellä hakusanat nyt?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3855,7 +3876,7 @@ msgstr ""
 "Paina OK aloittaaksesi päivityksen."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Verkkoasetukset on aktivoitu."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3863,6 +3884,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Verkkoasetukset on aktivoitu.\n"
+"Toinen määritelty sovitin löytyi.\n"
+"\n"
+"Haluatko kytkeä sen pois päältä?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr ""
@@ -3899,10 +3924,10 @@ msgid "about to start"
 msgstr "alkaa juuri"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "aktivoi nykyiset asetukset"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "lisää nimipalvelin"
 
 msgid "add alternatives"
 msgstr "Vaihtoehtojen lisäys ja poisto"
@@ -3961,15 +3986,18 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "ääniraidan (%s) formaatti"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "ääniraidan (%s) kieli"
 
 msgid "audio tracks"
 msgstr "ääniraidat"
 
+msgid "auto"
+msgstr ""
+
 #  Tämä teksti näytetään monessa valikossa EXIT-napin
 #  kaltaisena poistumistoimintona.
 msgid "back"
@@ -3978,18 +4006,24 @@ msgstr "Takaisin"
 msgid "background image"
 msgstr "taustakuva"
 
+msgid "backgroundcolor"
+msgstr ""
+
 msgid "better"
 msgstr "parempi"
 
+msgid "black"
+msgstr ""
+
 msgid "blacklist"
 msgstr "kielletyt"
 
-#, python-format
-msgid "burn audio track (%s)"
+msgid "blue"
 msgstr ""
 
-msgid "by Exif"
-msgstr "EXIF-tietojen mukaan"
+#, python-format
+msgid "burn audio track (%s)"
+msgstr "polta ääniraita (%s)"
 
 msgid "change recording (duration)"
 msgstr "Aseta tallennuksen kesto"
@@ -4012,9 +4046,6 @@ msgstr "Kiertopolarisaatio oikea"
 msgid "clear playlist"
 msgstr "tyhjennä soittolista"
 
-msgid "color"
-msgstr "väri"
-
 msgid "complex"
 msgstr "monipuolinen"
 
@@ -4042,12 +4073,12 @@ msgstr "joka päivä"
 msgid "day"
 msgstr "päivä"
 
-msgid "delete"
-msgstr "poista"
-
 msgid "delete cut"
 msgstr "Poista leikkausmääritys"
 
+msgid "delete file"
+msgstr ""
+
 msgid "delete playlist entry"
 msgstr "poista soittolistan valinta"
 
@@ -4118,7 +4149,7 @@ msgid "end favourites edit"
 msgstr "Tallenna muutokset ja poistu"
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 ja verkko"
 
 msgid "equal to"
 msgstr "sama kuin"
@@ -4136,7 +4167,7 @@ msgid "exit movielist"
 msgstr "poistu tallenneluettelosta"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "lopeta nimipalvelimen määritys"
 
 msgid "exit network adapter configuration"
 msgstr ""
@@ -4153,15 +4184,15 @@ msgstr ""
 msgid "failed"
 msgstr "epäonnistui"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr ""
+
 msgid "filename"
 msgstr "tiedostonimi"
 
 msgid "fine-tune your display"
 msgstr "hienosäädä näyttöä"
 
-msgid "font face"
-msgstr "fonttityyli"
-
 msgid "forward to the next chapter"
 msgstr "eteenpäin seuraavaan kappaleeseen"
 
@@ -4177,8 +4208,8 @@ msgstr "siirry virransäästötilaan"
 msgid "go to standby"
 msgstr "siirry valmiustilaan"
 
-msgid "headline"
-msgstr "otsikko"
+msgid "green"
+msgstr ""
 
 msgid "hear radio..."
 msgstr "kuuntele radiota..."
@@ -4186,15 +4217,15 @@ msgstr "kuuntele radiota..."
 msgid "help..."
 msgstr "apua..."
 
+msgid "hidden network"
+msgstr ""
+
 msgid "hide extended description"
 msgstr "Piilota laajennettu ohjelmakuvaus"
 
 msgid "hide player"
 msgstr "piilota soitin"
 
-msgid "highlighted button"
-msgstr "valittu näppäin"
-
 msgid "horizontal"
 msgstr "horisontaali"
 
@@ -4324,9 +4355,6 @@ msgstr "Ei"
 msgid "no HDD found"
 msgstr "kiintolevyä ei löydy"
 
-msgid "no Picture found"
-msgstr "Ei kuvaa"
-
 msgid "no module found"
 msgstr "(Laitteessa ei ole CA-moduulia)"
 
@@ -4364,7 +4392,7 @@ msgid "once"
 msgstr "kerran"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "avaan nimipalvelimen asetus"
 
 msgid "open servicelist"
 msgstr "Avaa kanavalista"
@@ -4405,18 +4433,18 @@ msgstr "Edellinen kanava"
 msgid "previous channel in history"
 msgstr "Edellinen kanava historiassa"
 
-msgid "rebooting..."
-msgstr "uudelleenkäynnistetään..."
-
 msgid "record"
 msgstr "tallennus"
 
 msgid "recording..."
 msgstr "tallennetaan..."
 
-msgid "remove a nameserver entry"
+msgid "red"
 msgstr ""
 
+msgid "remove a nameserver entry"
+msgstr "poista nimipalvelin"
+
 msgid "remove after this position"
 msgstr "Poista tämän kohdan jälkeen"
 
@@ -4462,9 +4490,15 @@ msgstr "kelaa edelliseen kappaleeseen"
 msgid "right"
 msgstr "oikea"
 
+msgid "save last directory on exit"
+msgstr ""
+
 msgid "save playlist"
 msgstr "tallenna soittolista"
 
+msgid "save playlist on exit"
+msgstr ""
+
 msgid "scan done!"
 msgstr "Haku valmis!"
 
@@ -4494,7 +4528,7 @@ msgid "select image from server"
 msgstr "valitse päivitys palvelimelta"
 
 msgid "select interface"
-msgstr ""
+msgstr "valitse sovitin"
 
 msgid "select menu entry"
 msgstr ""
@@ -4517,6 +4551,9 @@ msgstr "näytä DVD:n päävalikko"
 msgid "show EPG..."
 msgstr "näytä EPG..."
 
+msgid "show Infoline"
+msgstr ""
+
 msgid "show all"
 msgstr "näytä kaikki"
 
@@ -4529,11 +4566,11 @@ msgstr "näytä ohjelman tarkemmat tiedot"
 msgid "show extended description"
 msgstr "Näytä laajennettu ohjelmakuvaus"
 
-msgid "show first tag"
-msgstr "näytä ensimmäinen avainsana"
+msgid "show first selected tag"
+msgstr ""
 
-msgid "show second tag"
-msgstr "näytä toinen avainsana"
+msgid "show second selected tag"
+msgstr ""
 
 msgid "show shutdown menu"
 msgstr "Näytä sammutusvalikko"
@@ -4568,12 +4605,12 @@ msgstr "siirry eteenpäin"
 msgid "skip forward (enter time)"
 msgstr "siirry eteenpäin (syötä aika)"
 
+msgid "slide picture in loop"
+msgstr ""
+
 msgid "sort by date"
 msgstr "Aikajärjestys"
 
-msgid "spaces (top, between rows, left)"
-msgstr "välit (yläosa, rivien väli, vasen)"
-
 msgid "standard"
 msgstr "Vakio"
 
@@ -4583,6 +4620,9 @@ msgstr "valmiustila"
 msgid "start cut here"
 msgstr "Aloita leikkaus tästä"
 
+msgid "start directory"
+msgstr ""
+
 msgid "start timeshift"
 msgstr "Aloita ajansiirtotallennus"
 
@@ -4613,14 +4653,20 @@ msgstr "vaihda tiedostolistaan"
 msgid "switch to playlist"
 msgstr "vaihda soittolistaan"
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr "vaihda seuraavalle ääniraidalle"
 
 msgid "switch to the next subtitle language"
 msgstr "vaihda seuraavalle tekstityskielelle"
 
-msgid "text"
-msgstr "teksti"
+msgid "template file"
+msgstr ""
+
+msgid "textcolor"
+msgstr ""
 
 msgid "this recording"
 msgstr "tämä tallennus"
@@ -4641,7 +4687,7 @@ msgid "unknown service"
 msgstr "tuntematon kanava"
 
 msgid "until restart"
-msgstr "uudelleenkäynnistykseen asti"
+msgstr "kunnes käynnistetään uudelleen"
 
 msgid "user defined"
 msgstr "käyttäjän määrittelemä"
@@ -4670,8 +4716,11 @@ msgstr "joka viikko"
 msgid "whitelist"
 msgstr "hyväksytyt"
 
-msgid "year"
-msgstr "vuosi"
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr ""
 
 msgid "yes"
 msgstr "Kyllä"
@@ -4693,35 +4742,137 @@ msgstr "kanavanvaihto"
 msgid "zapped"
 msgstr "vaihdettu"
 
-#~ msgid "Automatic SSID lookup"
-#~ msgstr "Automaattinen SSID etsintä"
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr ".NFI-päivitysohjelman asennus USB-muistille onnistui."
+
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
+#~ msgid "All..."
+#~ msgstr "Kaikki"
+
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Päivitysohjelman kopiointi USB-muistille käynnissä.."
+
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Puretaan päivitysohjelmaa USB-muistia varten..."
+
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Haluatko lopettaa?"
+
+#~ msgid "Downloading image description..."
+#~ msgstr "Ladataan päivitystiedoston kuvausta..."
+
+#  Asetuksen nimi ajastusikkunassa
+#~ msgid "End"
+#~ msgstr "Lopetus"
+
+#~ msgid "Fix USB stick"
+#~ msgstr "Korjaa USB-muisti"
+
+#~ msgid "Font size"
+#~ msgstr "Fonttikoko"
+
+#~ 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 ""
+#~ "Kytke USB-muisti (minimikoko 64MB) jota haluat käyttää NFI-päivitykseen. "
+#~ "Paina OK-näppäintä kun olet kytkenyt muistin."
+
+#~ msgid "Other..."
+#~ msgstr "Muu..."
+
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Osioidaan USB-muistitikku..."
+
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Valitse hakusana..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Odota md5-allekirjoituksen tarkistusta..."
+
+#~ msgid "Really delete this timer?"
+#~ msgstr "Poistetaanko tämä ajastus?"
+
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Uudelleenliitetään USB-muistitikun osio..."
+
+#  Ajastusikkuna
+#~ msgid "Start"
+#~ msgstr "Aloitus"
 
 #~ msgid ""
-#~ "No working local networkadapter found.\n"
-#~ "Please verify that you have attached a network cable and your Network is "
-#~ "configured correctly."
+#~ "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 ""
-#~ "Toimivaa verkkokorttia ei löydy.\n"
-#~ "Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat "
-#~ "oikein."
+#~ "NFI-päivitysohjelmalle tarkoitettu USB-muisti on nyt käyttövalmis. Lataa ."
+#~ "NFI-päivitystiedosto palvelimelta ja tallenna se USB-muistille. Sen "
+#~ "jälkeen käynnistä Dreambox uudelleen ja pidä etupaneelin 'nuoli alas' "
+#~ "näppäintä pohjassa jotta .NFI-päivitys käynnistyy USB-muistilta."
 
 #~ msgid ""
-#~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "you local network interface."
+#~ "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."
 #~ msgstr ""
-#~ "Toimivaa langatonta yhteyttä ei löydy.\n"
-#~ "Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke "
-#~ "lähiverkko päälle."
+#~ "Varmistaaksemme, että haluat todella tehdä tämän, ota USB-muisti nyt irti "
+#~ "ja laita se takaisin ruudulla näkyvän kehoitteen jälkeen. Paina OK-"
+#~ "näppäintä kun olet ottanut USB-muistin irti."
+
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Odotetaan USB-muistia..."
+
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Suoritetaan ohjelmistopäivitystä"
 
 #~ msgid ""
-#~ "No working wireless networkadapter found.\n"
-#~ "Please verify that you have attached a compatible WLAN USB Stick and your "
-#~ "Network is configured correctly."
+#~ "You need to define some keywords first!\n"
+#~ "Press the menu-key to define keywords.\n"
+#~ "Do you want to define keywords now?"
 #~ msgstr ""
-#~ "Toimivaa WLAN-sovitinta ei löytynyt.\n"
-#~ "Tarkista, että olet kytkenyt yhteensopivan USB-WLAN-tikun ja "
-#~ "verkkoasetukset ovat oikein."
+#~ "Sinun pitää ensin määritellä hakusanat.\n"
+#~ "Määrittele ne Menu-napin kautta.\n"
+#~ "Haluatko määritellä hakusanat nyt?"
+
+#~ msgid "by Exif"
+#~ msgstr "EXIF-tietojen mukaan"
+
+#~ msgid "color"
+#~ msgstr "väri"
+
+#~ msgid "delete"
+#~ msgstr "poista"
+
+#~ msgid "font face"
+#~ msgstr "fonttityyli"
+
+#~ msgid "headline"
+#~ msgstr "otsikko"
+
+#~ msgid "highlighted button"
+#~ msgstr "valittu näppäin"
+
+#~ msgid "no Picture found"
+#~ msgstr "Ei kuvaa"
+
+#~ msgid "rebooting..."
+#~ msgstr "käynnistetään uudelleen..."
+
+#~ msgid "show first tag"
+#~ msgstr "näytä ensimmäinen avainsana"
+
+#~ msgid "show second tag"
+#~ msgstr "näytä toinen avainsana"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "välit (yläosa, rivien väli, vasen)"
 
-#~ msgid "only /etc/enigma2 directory"
-#~ msgstr "vain /etc/enigma2-hakemisto"
+#~ msgid "text"
+#~ msgstr "teksti"
index be3a8420fde49026059db52215c2d7d864a30a9f..3f1a95643c982a6b96512195e4335edb3908c700 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -380,8 +380,8 @@ msgstr ""
 "services simples. Se référer au manuel de votre Dreambox pour savoir comment "
 "faire cela."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Toutes"
@@ -424,8 +424,8 @@ msgstr ""
 "Etes-vous sûr de vouloir redémarrer votre interface réseau?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artiste :"
+msgid "Artist"
+msgstr "Artiste"
 
 msgid "Ask before shutdown:"
 msgstr "Demander avant d'éteindre:"
@@ -1339,8 +1339,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Passerelle"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Allemand"
@@ -3286,9 +3286,6 @@ msgstr "Titre"
 msgid "Title properties"
 msgstr "Propriétés titre"
 
-msgid "Title:"
-msgstr "Titre :"
-
 msgid "Titleset mode"
 msgstr "Mode jeu titre"
 
@@ -3671,8 +3668,8 @@ msgstr "Ecriture fichier image vers NAND flash"
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Année :"
+msgid "Year"
+msgstr "Année"
 
 msgid "Yes"
 msgstr "Oui"
@@ -4665,9 +4662,6 @@ msgstr "hebdomadaire"
 msgid "whitelist"
 msgstr "liste blanche"
 
-msgid "year"
-msgstr "Année"
-
 msgid "yes"
 msgstr "oui"
 
diff --git a/po/fy.po b/po/fy.po
new file mode 100644 (file)
index 0000000..0a9b37d
--- /dev/null
+++ b/po/fy.po
@@ -0,0 +1,4666 @@
+# translation of fy.po to gerrit
+# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the tuxbox-enigma package.
+#
+# Automatically generated, 2005.
+# Gerrit <gerrit@nedlinux.nl>, 2007, 2008.
+# gerrit <gerrit@nedlinux.nl>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: fy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-01-02 16:24+0100\n"
+"PO-Revision-Date: 2008-12-29 16:22+0100\n"
+"Last-Translator: gerrit <gerrit@nedlinux.nl>\n"
+"Language-Team: gerrit <fy@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Nederlands\n"
+"X-Poedit-Country: NEDERLAND\n"
+"X-Poedit-SourceCharset: iso-8859-15\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid " "
+msgstr " "
+
+msgid "#000000"
+msgstr "#000000"
+
+msgid "#0064c7"
+msgstr "#0064c7"
+
+msgid "#25062748"
+msgstr "#25062748"
+
+msgid "#389416"
+msgstr "#389416"
+
+msgid "#80000000"
+msgstr "#80000000"
+
+msgid "#80ffffff"
+msgstr "#80ffffff"
+
+msgid "#bab329"
+msgstr "#bab329"
+
+msgid "#f23d21"
+msgstr "#f23d21"
+
+msgid "#ffffff"
+msgstr "#ffffff"
+
+msgid "#ffffffff"
+msgstr "#ffffffff"
+
+msgid "%H:%M"
+msgstr "%H:%M"
+
+#, python-format
+msgid "%d jobs are running in the background!"
+msgstr "%d processen rinne op 'e eftergrûn"
+
+#, python-format
+msgid "%d min"
+msgstr "%d min"
+
+#, python-format
+msgid "%d services found!"
+msgstr "%d services fûn"
+
+msgid "%d.%B %Y"
+msgstr "%d.%B %Y"
+
+#, python-format
+msgid ""
+"%s\n"
+"(%s, %d MB free)"
+msgstr ""
+"%s\n"
+"(%s, %d MB frij)"
+
+#, python-format
+msgid "%s (%s)\n"
+msgstr "%s (%s)\n"
+
+msgid "(ZAP)"
+msgstr "(ZAP)"
+
+msgid "(empty)"
+msgstr "(leech)"
+
+msgid "(show optional DVD audio menu)"
+msgstr "(opsje DVD lûd menu sjen litte)"
+
+msgid "* Only available if more than one interface is active."
+msgstr "* Allinne beskikber by meer dan ien aktieve ynterfaces"
+
+msgid "* Only available when entering hidden SSID or network key"
+msgstr "* Allinne bekikber by ynfieren ferberche SSID of netwurk kaai"
+
+msgid ".NFI Download failed:"
+msgstr "flater by it binnenhelje fan .NFI triem."
+
+msgid ""
+".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ""
+".NFI triem goedkarre by de md5sum kontrole. Dit image kin feilich nei flash "
+"skreawn wurde."
+
+msgid "/usr/share/enigma2 directory"
+msgstr "/usr/share/enigma2 map"
+
+msgid "/var directory"
+msgstr "/var map"
+
+msgid "0"
+msgstr "0"
+
+msgid "1"
+msgstr "1"
+
+msgid "1.0"
+msgstr "1.0"
+
+msgid "1.1"
+msgstr "1.1"
+
+msgid "1.2"
+msgstr "1.2"
+
+msgid "12V output"
+msgstr "12V útgong"
+
+msgid "13 V"
+msgstr "13 V"
+
+msgid "16:10"
+msgstr "16:10"
+
+msgid "16:10 Letterbox"
+msgstr "16:10 Letterbox"
+
+msgid "16:10 PanScan"
+msgstr "16:10 PanScan"
+
+msgid "16:9"
+msgstr "16:9"
+
+msgid "16:9 Letterbox"
+msgstr "16:9 Letterbox"
+
+msgid "16:9 always"
+msgstr "altiid 16:9"
+
+msgid "18 V"
+msgstr "18 V"
+
+msgid "2"
+msgstr "2"
+
+msgid "3"
+msgstr "3"
+
+msgid "30 minutes"
+msgstr "30 minuten"
+
+msgid "4"
+msgstr "4"
+
+msgid "4:3"
+msgstr "4:3"
+
+msgid "4:3 Letterbox"
+msgstr "4:3 Letterbox"
+
+msgid "4:3 PanScan"
+msgstr "4:3 PanScan"
+
+msgid "5"
+msgstr "5"
+
+msgid "5 minutes"
+msgstr "5 minuten"
+
+msgid "50 Hz"
+msgstr "50 Hz"
+
+msgid "6"
+msgstr "6"
+
+msgid "60 minutes"
+msgstr "60 minuten"
+
+msgid "7"
+msgstr "7"
+
+msgid "8"
+msgstr "8"
+
+msgid "9"
+msgstr "9"
+
+msgid "<unknown>"
+msgstr "<net bekend>"
+
+msgid "??"
+msgstr "??"
+
+msgid "A"
+msgstr "A"
+
+#, python-format
+msgid ""
+"A configuration file (%s) was modified since Installation.\n"
+"Do you want to keep your version?"
+msgstr ""
+"In konfiguraasje triem (%s) wie feroare nei ynstalaasje.\n"
+"Wolle jo jo ferzje hâlde ?"
+
+msgid ""
+"A finished record timer wants to set your\n"
+"Dreambox to standby. Do that now?"
+msgstr ""
+"In tiidsbarren wol de Dreambox yn sliipstand\n"
+"skeakelje... No nei de sliipstand ?"
+
+msgid ""
+"A finished record timer wants to shut down\n"
+"your Dreambox. Shutdown now?"
+msgstr ""
+"In tiidsbarren wol de Dreambox\n"
+"útskeakelje... No útskeakelje ?"
+
+msgid "A graphical EPG for all services of an specific bouquet"
+msgstr "In grafyske EPG foar alle kanalen fan in spesifyk bouquet"
+
+#, python-format
+msgid ""
+"A record has been started:\n"
+"%s"
+msgstr ""
+"In opnimmen is start:\n"
+"%s"
+
+msgid ""
+"A recording is currently running.\n"
+"What do you want to do?"
+msgstr ""
+"In opnimmen is dwaande.\n"
+"Wat wolle jo dwaan ?"
+
+msgid ""
+"A recording is currently running. Please stop the recording before trying to "
+"configure the positioner."
+msgstr ""
+"Opnimmen is dwaande. Stopje it opnimmen earst foar jo de rotor-ynstellingen "
+"wizigje."
+
+msgid ""
+"A recording is currently running. Please stop the recording before trying to "
+"start the satfinder."
+msgstr ""
+"Opnimmen is dwaande. Stopje it opnimmen earst, foar jo de satfyner brûke."
+
+#, python-format
+msgid "A required tool (%s) was not found."
+msgstr "In benedicht programma (%s) wie net fûn"
+
+msgid ""
+"A sleep timer wants to set your\n"
+"Dreambox to standby. Do that now?"
+msgstr ""
+"In sliiptiidsbarren wol de Dreambox yn paraatstand sette\n"
+"Dit no dwaan ?"
+
+msgid ""
+"A sleep timer wants to shut down\n"
+"your Dreambox. Shutdown now?"
+msgstr ""
+"In sliiptiidsbarren wol de Dreambox útskeakelje\n"
+"No útskeakelje ?"
+
+msgid ""
+"A timer failed to record!\n"
+"Disable TV and try again?\n"
+msgstr ""
+"In tiidsbarren koe net opnimme!\n"
+"TV utskeakelje en opnei besykje ?\n"
+
+msgid "A/V Settings"
+msgstr "A/F ynstellingen"
+
+msgid "AA"
+msgstr "AA"
+
+msgid "AB"
+msgstr "AB"
+
+msgid "AC3 default"
+msgstr "AC3 standert"
+
+msgid "AC3 downmix"
+msgstr "AC3 downmix"
+
+msgid "About"
+msgstr "Oer"
+
+msgid "About..."
+msgstr "Oer...."
+
+msgid "Action on long powerbutton press"
+msgstr "Aksje by lang yndrukken oanknop"
+
+msgid "Action:"
+msgstr "Aksje:"
+
+msgid "Activate Picture in Picture"
+msgstr "PIP ynskeakelje"
+
+msgid "Activate network settings"
+msgstr "Netwurk ynstellingen aktief meitsje"
+
+msgid "Adapter settings"
+msgstr "Adapter ynstellingen"
+
+msgid "Add"
+msgstr "Tafoegje"
+
+msgid "Add Bookmark"
+msgstr "In blêdwizer tafoegje"
+
+msgid "Add a mark"
+msgstr "In merker tafoegje"
+
+msgid "Add a new title"
+msgstr "In nije titel tafoegje"
+
+msgid "Add timer"
+msgstr "In tiidsbarren tafoegje"
+
+msgid "Add title"
+msgstr "In titel tafoegje"
+
+msgid "Add to bouquet"
+msgstr "Oan in boeket tafoegje"
+
+msgid "Add to favourites"
+msgstr "Oan favorieten tafoegje"
+
+msgid ""
+"Adjust the color settings so that all the color shades are distinguishable, "
+"but appear as saturated as possible. If you are happy with the result, press "
+"OK to close the video fine-tuning, or use the number keys to select other "
+"test screens."
+msgstr ""
+"Feroarje de ynstellingen sa, da't alle skaad fan 'e kleur fuort is, mar wol "
+"fol fan kleur binne. Ot jo lokkig binne mei it einresultaat, druk OK om "
+"fideo ôfstellen ôf te slúten, of brûk de nûmmer toetsen foar in oar test "
+"skerm."
+
+msgid "Advanced"
+msgstr "Afansjearre"
+
+msgid "Advanced Video Setup"
+msgstr "Afansjearre Fideo Ynstellingen"
+
+msgid "After event"
+msgstr "Nei it barren"
+
+msgid ""
+"After the start wizard is completed, you need to protect single services. "
+"Refer to your dreambox's manual on how to do that."
+msgstr ""
+"Ot de startgucheler klear is, kinne jo in service befeilichje. Sjoch yn 'e "
+"hânlieding foar ynformaasje."
+
+msgid "Album"
+msgstr "Album"
+
+msgid "All"
+msgstr "Alles"
+
+msgid "All Satellites"
+msgstr "Alle Satellyten"
+
+msgid "Alpha"
+msgstr "Alpha"
+
+msgid "Alternative radio mode"
+msgstr "Oare Radio mode"
+
+msgid "Alternative services tuner priority"
+msgstr "Alternatief kanaal tuner prioriteit"
+
+msgid "An empty filename is illegal."
+msgstr "Gjin triemnamme is net tastien"
+
+msgid "An unknown error occured!"
+msgstr "In unbekende flater !"
+
+msgid "Arabic"
+msgstr "Arabysk"
+
+msgid ""
+"Are you sure you want to activate this network configuration?\n"
+"\n"
+msgstr ""
+"Wolle jo wier dizze netwurk konfiguraasje aktief meitsje ?\n"
+"\n"
+
+msgid ""
+"Are you sure you want to restart your network interfaces?\n"
+"\n"
+msgstr ""
+"Wolle jo de netwurk interfaces nij starte?\n"
+"\n"
+
+msgid "Artist"
+msgstr "Artyst"
+
+msgid "Ask before shutdown:"
+msgstr "Freechje foar it útskeakeljen:"
+
+msgid "Ask user"
+msgstr "freechje gebrûker"
+
+msgid "Aspect Ratio"
+msgstr "Aspect ratio"
+
+msgid "Audio"
+msgstr "Lûd"
+
+msgid "Audio Options..."
+msgstr "Lûd opsjes..."
+
+msgid "Authoring mode"
+msgstr "Authentikaasje troch"
+
+msgid "Auto"
+msgstr "Auto"
+
+msgid "Auto chapter split every ? minutes (0=never)"
+msgstr "Haadstik automatysk eltse ? minuten splitse (0=nea)"
+
+msgid "Auto scart switching"
+msgstr "Auto scart skeakelje"
+
+msgid "Automatic"
+msgstr "Automatysk"
+
+msgid "Automatic Scan"
+msgstr "Automatysk sykjen"
+
+msgid "Available format variables"
+msgstr "Beskikbere variabele formaten"
+
+msgid "B"
+msgstr "B"
+
+msgid "BA"
+msgstr "BA"
+
+msgid "BB"
+msgstr "BB"
+
+msgid "BER"
+msgstr "BER"
+
+msgid "BER:"
+msgstr "BER:"
+
+msgid "Back"
+msgstr "Werom"
+
+msgid "Background"
+msgstr "Eftergrûn"
+
+msgid "Backup"
+msgstr "Backup"
+
+msgid "Backup Location"
+msgstr "Backup Lokaasje"
+
+msgid "Backup Mode"
+msgstr "Backup Mode"
+
+msgid "Backup is done. Please press OK to see the result."
+msgstr "Backup is klear. Druk Ok foar útfier"
+
+msgid "Band"
+msgstr "Bân"
+
+msgid "Bandwidth"
+msgstr "Bânbridte"
+
+msgid "Begin time"
+msgstr "Begjin tiid"
+
+msgid "Behavior of 'pause' when paused"
+msgstr "Gedrach fan 'pause' yn pause mode"
+
+msgid "Behavior of 0 key in PiP-mode"
+msgstr "Gedrach fan 0 toets yn PiP mode"
+
+msgid "Behavior when a movie is started"
+msgstr "Gedrach wannear in film start is"
+
+msgid "Behavior when a movie is stopped"
+msgstr "Gedrach wannear in film stoppe is"
+
+msgid "Behavior when a movie reaches the end"
+msgstr "Gedrach wannear in film bijna op syn ein is."
+
+msgid "Bookmarks"
+msgstr "Boekmerkers"
+
+msgid "Brightness"
+msgstr "Helderens"
+
+msgid "Burn DVD"
+msgstr "In DVD brâne"
+
+msgid "Burn existing image to DVD"
+msgstr "Besteand Image op DVD skiif brâne"
+
+msgid "Burn to DVD..."
+msgstr "Nei DVD brâne"
+
+msgid "Bus: "
+msgstr "Bus: "
+
+msgid ""
+"By pressing the OK Button on your remote control, the info bar is being "
+"displayed."
+msgstr "By de Ok toets op jo ôfstansbetsjinning, wurd de ynfo balke toant"
+
+msgid "C"
+msgstr "C"
+
+msgid "C-Band"
+msgstr "C-Bân"
+
+msgid "CF Drive"
+msgstr "CF Drive"
+
+msgid "CVBS"
+msgstr "CVBS"
+
+msgid "Cable"
+msgstr "Kabel"
+
+msgid "Cache Thumbnails"
+msgstr "Cache Plaatsjes"
+
+msgid "Call monitoring"
+msgstr "Skille monitor"
+
+msgid "Cancel"
+msgstr "Ôfbrekke"
+
+msgid "Cannot parse feed directory"
+msgstr "Kin feed map net ferwurkje"
+
+msgid "Capacity: "
+msgstr "Skiif-grutte:"
+
+msgid "Card"
+msgstr "Kaart"
+
+msgid "Catalan"
+msgstr "Catalânsk"
+
+msgid "Change bouquets in quickzap"
+msgstr "Feroarje fan boeket yn quickzap"
+
+msgid "Change dir."
+msgstr "Feroarje dir."
+
+msgid "Change pin code"
+msgstr "Feroarje pinkode"
+
+msgid "Change service pin"
+msgstr "Feroarje service pin"
+
+msgid "Change service pins"
+msgstr "Feroarje service pins"
+
+msgid "Change setup pin"
+msgstr "Feroarje ynstellingen pin"
+
+msgid "Channel"
+msgstr "Kanaal"
+
+msgid "Channel Selection"
+msgstr "Kanaal seleksje"
+
+msgid "Channel not in services list"
+msgstr ""
+
+msgid "Channel:"
+msgstr "Kanaal:"
+
+msgid "Channellist menu"
+msgstr "Kanaal-lyst menu"
+
+msgid "Chap."
+msgstr "Haads."
+
+msgid "Chapter"
+msgstr "Haadstik"
+
+msgid "Chapter:"
+msgstr "Haadstik:"
+
+msgid "Check"
+msgstr "Neisjen"
+
+msgid "Checking Filesystem..."
+msgstr "Bestânsysteem neisjen"
+
+msgid "Choose Tuner"
+msgstr "Kies Tuner"
+
+msgid "Choose bouquet"
+msgstr "Kies bouquet"
+
+msgid "Choose source"
+msgstr "Kies bron"
+
+msgid "Choose target folder"
+msgstr "Kies doel map"
+
+msgid "Choose your Skin"
+msgstr "Kies Oanklaaiing"
+
+msgid "Cleanup"
+msgstr "Opskjinje"
+
+msgid "Clear before scan"
+msgstr "Wiskje foar sykjen ?"
+
+msgid "Clear log"
+msgstr "Log wiskje"
+
+msgid "Close"
+msgstr "Slúte"
+
+msgid "Code rate high"
+msgstr "Kode faasje heech"
+
+msgid "Code rate low"
+msgstr "Kode faasje leech"
+
+msgid "Coderate HP"
+msgstr "Kode faasje HP"
+
+msgid "Coderate LP"
+msgstr "Kode faasje LP"
+
+msgid "Collection name"
+msgstr "Kolleksje namme"
+
+msgid "Collection settings"
+msgstr "Kolleksje ynstellingen"
+
+msgid "Color Format"
+msgstr "Kleur formaat"
+
+msgid "Command execution..."
+msgstr "Kommando útfiere"
+
+msgid "Command order"
+msgstr "Kommando folgoarde"
+
+msgid "Committed DiSEqC command"
+msgstr "Oanwizen DiSEqC kommando"
+
+msgid "Common Interface"
+msgstr "Common Interface"
+
+msgid "Compact Flash"
+msgstr "Compact flash"
+
+msgid "Compact flash card"
+msgstr "Compact flash kaart"
+
+msgid "Complete"
+msgstr "Kompleet"
+
+msgid "Complex (allows mixing audio tracks and aspects)"
+msgstr "Komplex(lud spoor & aspekt mixen tastien)"
+
+msgid "Configuration Mode"
+msgstr "Ynstellingen modus"
+
+msgid "Configuring"
+msgstr "Oan it ynstellen"
+
+msgid "Conflicting timer"
+msgstr "Tiidsbarren konflikt"
+
+msgid "Connected to"
+msgstr "Ferbûn mei"
+
+msgid "Connected to Fritz!Box!"
+msgstr "Ferbûn mei Fritz!Box!"
+
+msgid "Connecting to Fritz!Box..."
+msgstr "Ferbine mei Fritz!Box..."
+
+#, python-format
+msgid ""
+"Connection to Fritz!Box\n"
+"failed! (%s)\n"
+"retrying..."
+msgstr ""
+"Ferbine mei Fritz!Box\n"
+"mislearre ! (%s)\n"
+"Besykje opnei ..."
+
+msgid "Constellation"
+msgstr "Himmel"
+
+msgid "Content does not fit on DVD!"
+msgstr "Ynhald past net op in DVD !"
+
+msgid "Continue in background"
+msgstr "Fjierder gean yn 'e eftergrûn"
+
+msgid "Continue playing"
+msgstr "Kontinu spielje"
+
+msgid "Contrast"
+msgstr "Kontrast"
+
+msgid "Could not connect to Dreambox .NFI Image Feed Server:"
+msgstr "Kin net ferbine mei Dreambox .NFI Image feed server:"
+
+msgid "Could not load Medium! No disc inserted?"
+msgstr "Koe medium net lade ! Is der wol in disc oanwezig ?"
+
+msgid "Create DVD-ISO"
+msgstr "Meitsje DVD-ISO"
+
+msgid "Create movie folder failed"
+msgstr "Meitjse fan film map mislearre"
+
+#, python-format
+msgid "Creating directory %s failed."
+msgstr "Meitjse fan map %s is mislearre"
+
+msgid "Creating partition failed"
+msgstr "Meitsjen fan partisje is mislearre"
+
+msgid "Croatian"
+msgstr "Kroatysk"
+
+msgid "Current Transponder"
+msgstr "Hjoeddeiske Transponder"
+
+msgid "Current settings:"
+msgstr "Hjoeddeiske ynstellingen:"
+
+msgid "Current version:"
+msgstr "Hjoeddeiske ferzje :"
+
+msgid "Custom skip time for '1'/'3'-keys"
+msgstr "Brûker spring tiid foar knoppen 1-3"
+
+msgid "Custom skip time for '4'/'6'-keys"
+msgstr "Brûker spring tiid foar knoppen 4-6"
+
+msgid "Custom skip time for '7'/'9'-keys"
+msgstr "Brûker spring tiid foar knoppen 7-9"
+
+msgid "Customize"
+msgstr "Oanpasse"
+
+msgid "Cut"
+msgstr "Knip"
+
+msgid "Cutlist editor..."
+msgstr "Kniplyst bewurker..."
+
+msgid "Czech"
+msgstr "Tsjechysk"
+
+msgid "D"
+msgstr "D"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DVB-S"
+msgstr "DVB-S"
+
+msgid "DVB-S2"
+msgstr "DVB-S2"
+
+msgid "DVD Player"
+msgstr "DVD Spieler"
+
+msgid "DVD media toolbox"
+msgstr "DVD media arkbak"
+
+msgid "Danish"
+msgstr "Deensk"
+
+msgid "Date"
+msgstr "Datum"
+
+msgid "Deep Standby"
+msgstr "Sliip stand"
+
+msgid "Default services lists"
+msgstr "Standert ynstellingen lysten"
+
+msgid "Default settings"
+msgstr "Standert ynstellingen"
+
+msgid "Delay"
+msgstr "Fertraging"
+
+msgid "Delete"
+msgstr "Ferwiderje"
+
+msgid "Delete entry"
+msgstr "Ferwiderje ynfier"
+
+msgid "Delete failed!"
+msgstr "Ferwiderjen mislearre!"
+
+#, python-format
+msgid ""
+"Delete no more configured satellite\n"
+"%s?"
+msgstr ""
+"Ferwiderje de net brûkte satellyt\n"
+"%s?"
+
+msgid "Description"
+msgstr "Beskriuwing"
+
+msgid "Destination directory"
+msgstr "Doel Directory"
+
+msgid "Detected HDD:"
+msgstr "Fûne hurde skiif:"
+
+msgid "Detected NIMs:"
+msgstr "Fûne Tuners:"
+
+msgid "DiSEqC"
+msgstr "DiSEqC"
+
+msgid "DiSEqC A/B"
+msgstr "DiSEqC A/B"
+
+msgid "DiSEqC A/B/C/D"
+msgstr "DiSEqC A/B/C/D"
+
+msgid "DiSEqC mode"
+msgstr "DiSEqC-Mode"
+
+msgid "DiSEqC repeats"
+msgstr "DiSEqC herhellingen"
+
+msgid "Direct playback of linked titles without menu"
+msgstr "Direkt ôfspielje fan keppele titels sûnder menu"
+
+#, python-format
+msgid "Directory %s nonexistent."
+msgstr "Map %s bestiit net"
+
+msgid "Disable"
+msgstr "Utskeakelje"
+
+msgid "Disable Picture in Picture"
+msgstr "PIP utskeakelje"
+
+msgid "Disable Subtitles"
+msgstr "Undertitels út"
+
+msgid "Disable timer"
+msgstr "Tiidstjoering útskeakelje"
+
+msgid "Disabled"
+msgstr "Utskeakele"
+
+#, python-format
+msgid ""
+"Disconnected from\n"
+"Fritz!Box! (%s)\n"
+"retrying..."
+msgstr ""
+"Ferbining ferbrutsen mei\n"
+"Fritz!Box! (%s)\n"
+"besyket nochris..."
+
+msgid "Dish"
+msgstr "Panne"
+
+msgid "Display 16:9 content as"
+msgstr "16:9 ynhâld sjen litte as"
+
+msgid "Display 4:3 content as"
+msgstr "4:3 ynhâld sjen litte as"
+
+msgid "Display Setup"
+msgstr "Ynstellingen sjen litte"
+
+#, python-format
+msgid ""
+"Do you really want to REMOVE\n"
+"the plugin \"%s\"?"
+msgstr "Wolle jo wier de plugin \"%s\" ferwiderje ?"
+
+msgid ""
+"Do you really want to check the filesystem?\n"
+"This could take lots of time!"
+msgstr "Wolle jo echt it bestânsysteem neisjen ?<br> Dit kin lang duorje !"
+
+#, python-format
+msgid "Do you really want to delete %s?"
+msgstr "Wolle jo wier %s ferwiderje?"
+
+#, python-format
+msgid ""
+"Do you really want to download\n"
+"the plugin \"%s\"?"
+msgstr "Wolle jo wier de plugin \"%s\" binnenhelje ?"
+
+msgid ""
+"Do you really want to initialize the harddisk?\n"
+"All data on the disk will be lost!"
+msgstr ""
+"Wolle jo wier de hurde skiif formatearje?\n"
+"Alle data op skiif gjit ferlen !"
+
+#, python-format
+msgid "Do you really want to remove directory %s from the disk?"
+msgstr "Wolle jo echt map %s ferwiderje van skiif ?"
+
+#, python-format
+msgid "Do you really want to remove your bookmark of %s?"
+msgstr "Wolle jo echt boekmerk fan %s ferwiderje ?"
+
+msgid ""
+"Do you want to backup now?\n"
+"After pressing OK, please wait!"
+msgstr ""
+"Wolle jo no in backup meitsje?\n"
+"Nei OK, eefkes wachtsje"
+
+msgid "Do you want to burn this collection to DVD medium?"
+msgstr "Wolle jo dizze kolleksje nei DVD brâne ?"
+
+msgid "Do you want to do a service scan?"
+msgstr "Wolle jo no nei kanalen sykje ?"
+
+msgid "Do you want to do another manual service scan?"
+msgstr "Wolle jo opnei mei de hân sykje ?"
+
+msgid "Do you want to enable the parental control feature on your dreambox?"
+msgstr "Wolle jo it berne slot ynskeakelje ?"
+
+msgid "Do you want to install default sat lists?"
+msgstr "Wolle jo de standert sat lysten installearje ?"
+
+msgid "Do you want to play DVD in drive?"
+msgstr "Wolle jo de DVD ôfspielje ?"
+
+msgid "Do you want to preview this DVD before burning?"
+msgstr "Wolle jo de DVD besjen foar it brânen ?"
+
+msgid "Do you want to restore your settings?"
+msgstr "Wolle jo jo ynstellingen wêrom sette ?"
+
+msgid "Do you want to resume this playback?"
+msgstr "Wolle jo dit opnimmen fjierder ôfspielje ?"
+
+msgid ""
+"Do you want to update your Dreambox?\n"
+"After pressing OK, please wait!"
+msgstr ""
+"Wolle jo jo dreambox bywurkje ?\n"
+"Nei Ok, eefkes geduld !"
+
+msgid "Do you want to view a tutorial?"
+msgstr "Wolle jo in foarbyld sjen ?"
+
+msgid "Don't stop current event but disable coming events"
+msgstr "Dit barren net stopje, maar oankommende barren útskeakelje"
+
+#, python-format
+msgid "Done - Installed or upgraded %d packages"
+msgstr "Dien - %d paket(ten) ynstalllearre of bywurke"
+
+#, python-format
+msgid "Done - Installed or upgraded %d packages with %d errors"
+msgstr "Klear - %d paket(ten) ynstallearre of bywurke mei  %d flaters"
+
+msgid "Download"
+msgstr "Binnenhelje"
+
+msgid "Download .NFI-Files for USB-Flasher"
+msgstr "Binnenhelje fan .NFI triemen foar USB Flasher"
+
+msgid "Download Plugins"
+msgstr "Ynstekkers binnenhelje"
+
+msgid "Download of USB flasher boot image failed: "
+msgstr "Binnenhelje fan USB boot image misljearre:"
+
+msgid "Downloadable new plugins"
+msgstr "Binnen te heljen nije ynstekkers"
+
+msgid "Downloadable plugins"
+msgstr "Binnen te heljen ynstekkers"
+
+msgid "Downloading"
+msgstr "Binnenheljen fan"
+
+msgid "Downloading plugin information. Please wait..."
+msgstr "Binnenheljen fan ynstekker ynformaasje..."
+
+msgid "Dreambox format data DVD (HDTV compatible)"
+msgstr "Dreambox yndieling data DVD (HDTV geskikt)"
+
+msgid "Dutch"
+msgstr "Nederlansk"
+
+msgid "E"
+msgstr "E"
+
+msgid "EPG Selection"
+msgstr "EPG Seleksje"
+
+#, python-format
+msgid "ERROR - failed to scan (%s)!"
+msgstr "Flater - Sykjen mislearre (%s)!"
+
+msgid "East"
+msgstr "East"
+
+msgid "Edit"
+msgstr "Bewurkje"
+
+msgid "Edit DNS"
+msgstr "Wyzigje de DNS"
+
+msgid "Edit Title"
+msgstr "Bewurkje titel"
+
+msgid "Edit chapters of current title"
+msgstr "Bewurkje haadstik fan dizze titel"
+
+msgid "Edit services list"
+msgstr "Wyzigje kanaallyst"
+
+msgid "Edit settings"
+msgstr "Wyzigje ynstellingen"
+
+msgid "Edit the Nameserver configuration of your Dreambox.\n"
+msgstr "Bewrukje de nammeserver ynstellingen fan de Dreambox.\n"
+
+msgid "Edit the network configuration of your Dreambox.\n"
+msgstr "Bewurkje de netwurk ynstellingen fan de Dreambox.\n"
+
+msgid "Edit title"
+msgstr "Bewukje titel"
+
+msgid "Electronic Program Guide"
+msgstr "Elektroniske Programma Gids"
+
+msgid "Enable"
+msgstr "Ynskeakelje"
+
+msgid "Enable 5V for active antenna"
+msgstr "5V ynskeakelje foar hjoeddeiske antenne"
+
+msgid "Enable multiple bouquets"
+msgstr "Mear boeketten sjen litte"
+
+msgid "Enable parental control"
+msgstr "Alderlik tasjoch ynskeakelje"
+
+msgid "Enable timer"
+msgstr "Tiidsjtoering ynskeakelje"
+
+msgid "Enabled"
+msgstr "Ynskeakele"
+
+msgid "Encryption"
+msgstr "Encryption"
+
+msgid "Encryption Key"
+msgstr "Encryption Kaai"
+
+msgid "Encryption Keytype"
+msgstr "Encryption Kaai Type"
+
+msgid "Encryption Type"
+msgstr "Encryption Type"
+
+msgid "End time"
+msgstr "Eintiid"
+
+msgid "EndTime"
+msgstr "Eintiid"
+
+msgid "English"
+msgstr "Engelsk"
+
+msgid ""
+"Enigma2 Skinselector v0.5 BETA\n"
+"\n"
+"If you experience any problems please contact\n"
+"stephan@reichholf.net\n"
+"\n"
+"© 2006 - Stephan Reichholf"
+msgstr ""
+"Enigma2 Skinselector v0.5 BETA\n"
+"\n"
+"Ot jo problemen hawwe, kinne jo stephan@reichholf.net\n"
+"probearje te beriken\n"
+"© 2006 - Stephan Reichholf"
+
+#.   TRANSLATORS: Note that "Enter" in the two strings below should *not*
+#.       be interpreted as "Give speed as input". The intended meaning is
+#.       instead "Initial speed when starting winding", i.e. the speed at
+#.       which "winding mode" is entered when first pressing "rewind" or
+#.       "fast forward". 
+msgid "Enter Fast Forward at speed"
+msgstr "Ynjefte rap foarút by faasje"
+
+msgid "Enter Rewind at speed"
+msgstr "Ynjefte rap efterút by faasje"
+
+msgid "Enter WLAN network name/SSID:"
+msgstr "Ynjefte fan WLAN netwurk namme / SSID"
+
+msgid "Enter WLAN passphrase/key:"
+msgstr "Ynjefte van WLAN wachtwurd/kaai:"
+
+msgid "Enter main menu..."
+msgstr "Nei it haadmenu..."
+
+msgid "Enter the service pin"
+msgstr "Fier de service pin yn"
+
+msgid "Error"
+msgstr "Flater"
+
+msgid "Error executing plugin"
+msgstr "Flater by útfieren fan ynstekker"
+
+#, python-format
+msgid ""
+"Error: %s\n"
+"Retry?"
+msgstr ""
+"Flater: %s\n"
+"Opnei ?"
+
+msgid "Eventview"
+msgstr "Barren oersjoch"
+
+msgid "Everything is fine"
+msgstr "Alles is goed"
+
+msgid "Execution Progress:"
+msgstr "Utfieren foarutgong:"
+
+msgid "Execution finished!!"
+msgstr "Utfiering klear.."
+
+msgid "Exif"
+msgstr "Exif"
+
+msgid "Exit"
+msgstr "ofslúte"
+
+msgid "Exit editor"
+msgstr "Bewurker ofslúte"
+
+msgid "Exit the wizard"
+msgstr "De gucheler ofslúte"
+
+msgid "Exit wizard"
+msgstr "Gucheler ofslúte"
+
+msgid "Expert"
+msgstr "Avansearre"
+
+msgid "Extended Networksetup Plugin..."
+msgstr "Utwreide Netwurkynstellingen Ynstekker..."
+
+msgid "Extended Setup..."
+msgstr "Utwreide Ynstellingen..."
+
+msgid "Extensions"
+msgstr "Utwreidingen"
+
+msgid "FEC"
+msgstr "FEC"
+
+msgid "Factory reset"
+msgstr "Fabryks ynstellingen"
+
+msgid "Failed"
+msgstr "mislearre"
+
+msgid "Fast"
+msgstr "Rap"
+
+msgid "Fast DiSEqC"
+msgstr "Rappe DiSEqC"
+
+msgid "Fast Forward speeds"
+msgstr "Rap foarút faasje"
+
+msgid "Fast epoch"
+msgstr "Snelle epoch"
+
+msgid "Favourites"
+msgstr "Favoryten"
+
+msgid "Filesystem Check..."
+msgstr "Bestânsysteem Neisjen..."
+
+msgid "Filesystem contains uncorrectable errors"
+msgstr "It bestânsysteem hat grutte flaters"
+
+msgid "Finetune"
+msgstr "Fyn ôfstemme"
+
+msgid "Finished"
+msgstr "Ofrûn"
+
+msgid "Finished configuring your network"
+msgstr "Klear mei ynstellen fan it netwurk"
+
+msgid "Finished restarting your network"
+msgstr "Klear mei it opnei starten fan it netwurk"
+
+msgid "Finnish"
+msgstr "Finsk"
+
+msgid ""
+"First we need to download the latest boot environment for the USB flasher."
+msgstr ""
+"Earst moat de lêste opstart triemen binnenhelle wurde foar de USB flasher."
+
+msgid "Flash"
+msgstr "Flash"
+
+msgid "Flashing failed"
+msgstr "Flashen misljearre"
+
+msgid "Format"
+msgstr "Formaat"
+
+msgid "Frame repeat count during non-smooth winding"
+msgstr "Byld herhelling by net glêd foar/efterút spielen"
+
+msgid "Frame size in full view"
+msgstr "gedielte yn folslein skerm"
+
+msgid "French"
+msgstr "Frans"
+
+msgid "Frequency"
+msgstr "Frekwinsje"
+
+msgid "Frequency bands"
+msgstr "Frekwinsje bânnen"
+
+msgid "Frequency scan step size(khz)"
+msgstr "Frekwinsje sykjen stap grutte(kHz)"
+
+msgid "Frequency steps"
+msgstr "Oantal Frekwinsje stappen"
+
+msgid "Fri"
+msgstr "Fre"
+
+msgid "Friday"
+msgstr "Freed"
+
+msgid "Frisian"
+msgstr "Frysk "
+
+msgid "Fritz!Box FON IP address"
+msgstr "Fritz!Box FON IP adres"
+
+#, python-format
+msgid "Frontprocessor version: %d"
+msgstr "Foarprocessor ferzje: %d"
+
+msgid "Fsck failed"
+msgstr "mislearre fsck"
+
+msgid "Function not yet implemented"
+msgstr "Nog net ynbouwde funksje"
+
+msgid ""
+"GUI needs a restart to apply a new skin\n"
+"Do you want to Restart the GUI now?"
+msgstr ""
+"De GUI moat opnij starte fan wege de nije skin\n"
+"Wolle jo de GUI no opnei starte ?"
+
+msgid "Gateway"
+msgstr "Gateway"
+
+msgid "Genre"
+msgstr "Sjenre"
+
+msgid "German"
+msgstr "Dúts"
+
+msgid "Getting plugin information. Please wait..."
+msgstr "Binnenhelje fan ynstekker ynformaasje...."
+
+msgid "Goto 0"
+msgstr "Gjin nei 0"
+
+msgid "Goto position"
+msgstr "Gjin nei posysje"
+
+msgid "Graphical Multi EPG"
+msgstr "Grafyske Multi EPG"
+
+msgid "Greek"
+msgstr "Gryks"
+
+msgid "Guard Interval"
+msgstr "ynterfal yn 'e gaten halde"
+
+msgid "Guard interval mode"
+msgstr "Ynterfal modus yn 'e gaten halde"
+
+msgid "Harddisk"
+msgstr "Hurde skiif"
+
+msgid "Harddisk setup"
+msgstr "Hurde skiif ynstellingen"
+
+msgid "Harddisk standby after"
+msgstr "Hurde skiif yn sliipstand nei"
+
+msgid "Hidden network SSID"
+msgstr "Ferberche netwurk SSID"
+
+msgid "Hierarchy Information"
+msgstr "Hiërarchie Ynformaasje"
+
+msgid "Hierarchy mode"
+msgstr "Hiërarchie mode"
+
+msgid "How many minutes do you want to record?"
+msgstr "Hoe folle minuten wolle jo opnimme?"
+
+msgid "Hungarian"
+msgstr "Hongaarsk"
+
+msgid "IP Address"
+msgstr "IP Adres"
+
+msgid "ISO file is too large for this filesystem!"
+msgstr "ISO triem is te grut foar dit bestânsysteem!"
+
+msgid "ISO path"
+msgstr "ISO paad"
+
+msgid "Icelandic"
+msgstr "Iislansk"
+
+msgid "If you can see this page, please press OK."
+msgstr "Kinne dizze side sjen, druk dan op OK"
+
+msgid ""
+"If you see this, something is wrong with\n"
+"your scart connection. Press OK to return."
+msgstr ""
+"Ot jo dit leze, is der iets raar skeef mei\n"
+"jo skart oansluting. Druk OK om werom te gean."
+
+msgid ""
+"If your TV has a brightness or contrast enhancement, disable it. If there is "
+"something called \"dynamic\", set it to standard. Adjust the backlight level "
+"to a value suiting your taste. Turn down contrast on your TV as much as "
+"possible.\n"
+"Then turn the brightness setting as low as possible, but make sure that the "
+"two lowermost shades of gray stay distinguishable.\n"
+"Do not care about the bright shades now. They will be set up in the next "
+"step.\n"
+"If you are happy with the result, press OK."
+msgstr ""
+"Skeakelje in helderens of kontrast ferbettering op jo TV út. Is der iets mei "
+"de namme \"dynamysk\", set it nei standert. Set it eftergrûn helderens nivo "
+"nei jo eigen smaak. Set it konstrast sa leech mooglik op jo TV.\n"
+"Dan, set it helderens nivo sa leech as mooglik, mar soargje dat de twa "
+"leechste griistinten krek anwêzig bliuwe\n"
+"Meitsje jo net drok om de helderenstinten no. Die komme werom yn de folgende "
+"stap\n"
+"Binne jo tefreden mei it resultaat, druk OK"
+
+msgid "Image flash utility"
+msgstr "Image flash ark"
+
+msgid "Image-Upgrade"
+msgstr "Byld-bywurkje"
+
+msgid "In Progress"
+msgstr "Dwaande"
+
+msgid ""
+"In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Op in barren op te nimmen, wurd de TV nei opnimmen skeakele!\n"
+
+msgid "Increased voltage"
+msgstr "Ferheeche spanning"
+
+msgid "Index"
+msgstr "Yndex"
+
+msgid "InfoBar"
+msgstr "Ynfobalke"
+
+msgid "Infobar timeout"
+msgstr "Ynfobalke tiid"
+
+msgid "Information"
+msgstr "Ynformaasje"
+
+msgid "Init"
+msgstr "Initialisearje"
+
+msgid "Initialization..."
+msgstr "Formattearje..."
+
+msgid "Initialize"
+msgstr "Formattearje HDD"
+
+msgid "Initializing Harddisk..."
+msgstr "Hurde skiif wurd formatearre..."
+
+msgid "Input"
+msgstr "Ynfier"
+
+msgid "Installing"
+msgstr "Oan it ynstallearjen"
+
+msgid "Installing Software..."
+msgstr "Software oan it ynstallearjen..."
+
+msgid "Installing default sat lists... Please wait..."
+msgstr "Standert sat lyst oan it ynstalearjen... "
+
+msgid "Installing defaults... Please wait..."
+msgstr "Standert waarden an it ynstellen..."
+
+msgid "Installing package content... Please wait..."
+msgstr "Pakket ynhald an it ynstallearjen... Eefkes wachtsje"
+
+msgid "Instant Record..."
+msgstr "In direct opnimmen..."
+
+msgid "Integrated Ethernet"
+msgstr "Integreerd Ethernet"
+
+msgid "Integrated Wireless"
+msgstr "Integreerd Triidloas"
+
+msgid "Intermediate"
+msgstr "Yntermediate"
+
+msgid "Internal Flash"
+msgstr "Ynterne Flash"
+
+msgid "Invalid Location"
+msgstr "Plak net tastien"
+
+#, python-format
+msgid "Invalid directory selected: %s"
+msgstr "Unjildige map selektearre: %s"
+
+msgid "Inversion"
+msgstr "Infertearring"
+
+msgid "Invert display"
+msgstr "Infertearje LCD"
+
+msgid "Italian"
+msgstr "Italiaansk"
+
+msgid "Job View"
+msgstr "Opdracht oansjoch"
+
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
+msgid "Just Scale"
+msgstr "Alinne skale"
+
+msgid "Keyboard Map"
+msgstr "Toetseboerd Map"
+
+msgid "Keyboard Setup"
+msgstr "Toetseboerd Ynstellingen"
+
+msgid "Keymap"
+msgstr "Toetsebord yndieling"
+
+msgid "LAN Adapter"
+msgstr "LAN oanslúting"
+
+msgid "LNB"
+msgstr "LNB"
+
+msgid "LOF"
+msgstr "LOF"
+
+msgid "LOF/H"
+msgstr "LOF/H"
+
+msgid "LOF/L"
+msgstr "LOF/L"
+
+msgid "Language selection"
+msgstr "Taal Kieze"
+
+msgid "Language..."
+msgstr "Taal..."
+
+msgid "Last speed"
+msgstr "Lêste faasje"
+
+msgid "Latitude"
+msgstr "Bridtegraad"
+
+msgid "Leave DVD Player?"
+msgstr "DVD Spieler ôfslúte ?"
+
+msgid "Left"
+msgstr "Links"
+
+#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
+msgid "Letterbox"
+msgstr "Letterbox"
+
+msgid "Limit east"
+msgstr "Limyt east"
+
+msgid "Limit west"
+msgstr "Limyt west"
+
+msgid "Limits off"
+msgstr "Limyten út"
+
+msgid "Limits on"
+msgstr "Limyt oan"
+
+msgid "Link:"
+msgstr "Link:"
+
+msgid "Linked titles with a DVD menu"
+msgstr "Keppele titels mei in DVD menu"
+
+msgid "List of Storage Devices"
+msgstr "Lyst Opslach Apparatuur"
+
+msgid "Lithuanian"
+msgstr "Lithuaniansk"
+
+msgid "Load"
+msgstr "Laad"
+
+msgid "Load Length of Movies in Movielist"
+msgstr "Laad lengte fan films yn filmlyst"
+
+msgid "Local Network"
+msgstr "Lokaal netwurk"
+
+msgid "Location"
+msgstr "Doel"
+
+msgid "Lock:"
+msgstr "Slot:"
+
+msgid "Log results to harddisk"
+msgstr ""
+
+msgid "Long Keypress"
+msgstr "Lang taste yndrukken"
+
+msgid "Longitude"
+msgstr "Lingtegraad"
+
+msgid "MMC Card"
+msgstr "MMC kaart"
+
+msgid "MORE"
+msgstr "MEER"
+
+msgid "Main menu"
+msgstr "Haad menu"
+
+msgid "Mainmenu"
+msgstr "HaadMenu"
+
+msgid "Make this mark an 'in' point"
+msgstr "Markeer dit as in 'yn' punt"
+
+msgid "Make this mark an 'out' point"
+msgstr "Markeer dit as in 'út' punt"
+
+msgid "Make this mark just a mark"
+msgstr "Meitsje dit in gewoan markeer punt"
+
+msgid "Manual Scan"
+msgstr "Hanmatig sykje"
+
+msgid "Manual transponder"
+msgstr "Hanmatige transponder"
+
+msgid "Margin after record"
+msgstr "Extra tiid nei by it opnimmen"
+
+msgid "Margin before record (minutes)"
+msgstr "Extra tiid foar by it opnimmen"
+
+msgid "Media player"
+msgstr "Media Spieler"
+
+msgid "MediaPlayer"
+msgstr "MediaSpieler"
+
+msgid "Medium is not a writeable DVD!"
+msgstr "Medium is net in skriuwbêre DVD!"
+
+msgid "Medium is not empty!"
+msgstr "Medium is net leech!"
+
+msgid "Menu"
+msgstr "Menu"
+
+msgid "Message"
+msgstr "Berjocht"
+
+msgid "Message..."
+msgstr ""
+
+msgid "Mkfs failed"
+msgstr "Mkfs mislearre"
+
+msgid "Mode"
+msgstr "Moadus"
+
+msgid "Model: "
+msgstr "Model: "
+
+msgid "Modulation"
+msgstr "Modulaasje"
+
+msgid "Modulator"
+msgstr "Modulator"
+
+msgid "Mon"
+msgstr "Moan"
+
+msgid "Mon-Fri"
+msgstr "Moan - Fre"
+
+msgid "Monday"
+msgstr "Moandei"
+
+msgid "Mount failed"
+msgstr "Oankeppeljen mislearre"
+
+msgid "Move Picture in Picture"
+msgstr "Ferpleats Byld yn Byld"
+
+msgid "Move east"
+msgstr "Draai nei east"
+
+msgid "Move west"
+msgstr "Draai nei west"
+
+msgid "Movielist menu"
+msgstr "Filmlyst menu"
+
+msgid "Multi EPG"
+msgstr "Multi EPG"
+
+msgid "Multiple service support"
+msgstr "Kin meardere utstjoeringen oan"
+
+msgid "Multisat"
+msgstr "Multisat"
+
+msgid "Mute"
+msgstr "Mute"
+
+msgid "N/A"
+msgstr "Net oanwêzig"
+
+msgid "NEXT"
+msgstr "Folgende"
+
+msgid "NFI image flashing completed. Press Yellow to Reboot!"
+msgstr "NFI image flashen is klear. Druk giel om nei te starten!"
+
+msgid "NOW"
+msgstr "No"
+
+msgid "NTSC"
+msgstr "NTSC"
+
+msgid "Name"
+msgstr "Namme"
+
+msgid "Nameserver"
+msgstr "Nammeserver"
+
+#, python-format
+msgid "Nameserver %d"
+msgstr "Nammeserver %d"
+
+msgid "Nameserver Setup"
+msgstr "Nammeserver Ynstellingen"
+
+msgid "Nameserver settings"
+msgstr "Nammeserver ynstellingen"
+
+msgid "Netmask"
+msgstr "Netmasker"
+
+msgid "Network Configuration..."
+msgstr "Netwurk configuraasje"
+
+msgid "Network Mount"
+msgstr "Netwurk oankeppelingen"
+
+msgid "Network SSID"
+msgstr "Netwurk SSID"
+
+msgid "Network Setup"
+msgstr "Netwurk Ynstellingen"
+
+msgid "Network scan"
+msgstr "Netwurk ôfsykje"
+
+msgid "Network setup"
+msgstr "Netwurk ynstellingen"
+
+msgid "Network test"
+msgstr "Netwurk test"
+
+msgid "Network test..."
+msgstr "Netwurk test..."
+
+msgid "Network..."
+msgstr "Netwurk..."
+
+msgid "Network:"
+msgstr "Netwurk:"
+
+msgid "NetworkWizard"
+msgstr "Netwurk gûcheler"
+
+msgid "New"
+msgstr "Nij"
+
+msgid "New pin"
+msgstr "Nije pin"
+
+msgid "New version:"
+msgstr "Nije ferzje:"
+
+msgid "Next"
+msgstr "Folgende"
+
+msgid "No"
+msgstr "Nee"
+
+msgid "No (supported) DVDROM found!"
+msgstr "Gjin (ondersteunde) DVDROM fûn!"
+
+msgid "No 50 Hz, sorry. :("
+msgstr "Gjin 50 Hz, sorry. :("
+
+msgid "No HDD found or HDD not initialized!"
+msgstr "Gjin hurde skiif fûn of HDD net formatearre!"
+
+msgid "No Networks found"
+msgstr "Gjin netwurken fûn"
+
+msgid "No backup needed"
+msgstr "Gjin backup nedich"
+
+msgid ""
+"No data on transponder!\n"
+"(Timeout reading PAT)"
+msgstr ""
+"Gjin data op transponder\n"
+"(tiid fan lêzen PAT)"
+
+msgid "No details for this image file"
+msgstr "Gjin details beskikber foar dit image triem"
+
+msgid "No event info found, recording indefinitely."
+msgstr "Gjin barren ynfo fûn, giit foar altiid troch mei opnimmen.."
+
+msgid "No free tuner!"
+msgstr "Gjin tuner oer"
+
+msgid ""
+"No packages were upgraded yet. So you can check your network and try again."
+msgstr "Pakketten bin net bywurke. Besjoch it netwurk en besykje opnei."
+
+msgid "No picture on TV? Press EXIT and retry."
+msgstr "Gjin plaatsje op TV? Druk EXIT en probearje opnei"
+
+msgid "No positioner capable frontend found."
+msgstr "Gjin posysjesyker foarein fûn."
+
+msgid "No satellite frontend found!!"
+msgstr "Gjin sattelyt foarein fûn."
+
+msgid "No tags are set on these movies."
+msgstr "Gjin merkers oanwêzig op dizze films"
+
+msgid "No tuner is configured for use with a diseqc positioner!"
+msgstr "Der is gjin tuner ynsteld foar gebrûk mei in diseqc posysje syker!"
+
+msgid ""
+"No tuner is enabled!\n"
+"Please setup your tuner settings before you start a service scan."
+msgstr ""
+"Gjin tuner aktief!\n"
+"Stel dizze earst yn foar jo kanalen sykje kinne."
+
+msgid "No useable USB stick found"
+msgstr "Gjin brûkbere USB stick fûn"
+
+msgid ""
+"No valid service PIN found!\n"
+"Do you like to change the service PIN now?\n"
+"When you say 'No' here the service protection stay disabled!"
+msgstr ""
+"Gjin jildige service PIN fûn !\n"
+"Wolle jo dizze no ynstelle ?\n"
+"By 'nee' wurd de service befeiliging útskeakele !"
+
+msgid ""
+"No valid setup PIN found!\n"
+"Do you like to change the setup PIN now?\n"
+"When you say 'No' here the setup protection stay disabled!"
+msgstr ""
+"Gjin jildige ynstellingen PIN fûn !\n"
+"Wolle jo dizze no ynstelle ?\n"
+"By 'nee' wurd de ynstellingen befeiliging útskeakele !"
+
+msgid ""
+"No working local network adapter found.\n"
+"Please verify that you have attached a network cable and your network is "
+"configured correctly."
+msgstr ""
+"Gjin wurkende netwurk adatpter fûn.\n"
+"Sjoch nei ot in kabel oanslúten is en it netwurk goed ynsteld is."
+
+msgid ""
+"No working wireless network adapter found.\n"
+"Please verify that you have attached a compatible WLAN device and your "
+"network is configured correctly."
+msgstr ""
+"Gjin wurkende triidloaze netwurk adatpter fûn.\n"
+"Sjoch nei ot in WLAN adapter oanslúten is en it netwurk goed ynsteld is."
+
+msgid ""
+"No working wireless network interface found.\n"
+" Please verify that you have attached a compatible WLAN device or enable "
+"your local network interface."
+msgstr ""
+"Gjin wurkende triidloaze netwurk adatpter fûn.\n"
+"Sjoch nei ot in WLAN adapter oanslúten is of skeakelje de lokale netwurk "
+"ynterface yn."
+
+msgid "No, but restart from begin"
+msgstr "Nee, mar start fanôf it begjin"
+
+msgid "No, do nothing."
+msgstr "Nee, doch neat.."
+
+msgid "No, just start my dreambox"
+msgstr "Nee, allinne myn box starte"
+
+msgid "No, scan later manually"
+msgstr "Nee, letter mei de hân sykje"
+
+msgid "None"
+msgstr "Gjin"
+
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
+msgid "Nonlinear"
+msgstr "Net lineair"
+
+msgid "North"
+msgstr "Noard"
+
+msgid "Norwegian"
+msgstr "Noarsk"
+
+#, python-format
+msgid ""
+"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
+"required, %d MB available)"
+msgstr ""
+"Net genôch diskrûmte. Rûmje wat rotzooi op en besykje opnei. (%d MB nedich, %"
+"d oanwêzich)"
+
+msgid ""
+"Nothing to scan!\n"
+"Please setup your tuner settings before you start a service scan."
+msgstr ""
+"Neat te sykjen\n"
+"Earst de tuner ynstellingen dwaan, foar jo senders sykje kinne."
+
+msgid "Now Playing"
+msgstr "No oan it ôfspieljen"
+
+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."
+msgstr ""
+"No, feroare it helderens nivo en set it sa heech, mar wêz seker dat jo "
+"altiid nog it ferskil sjogge tusken de twa helderste skaadnivos.Binne jo "
+"klear, druk OK"
+
+msgid "OK"
+msgstr "Ok"
+
+msgid "OK, guide me through the upgrade process"
+msgstr "Ok, rin troch it bywurkjen proces"
+
+msgid "OSD Settings"
+msgstr "OSD-ynstellingen"
+
+msgid "OSD visibility"
+msgstr "OSD sichtberhiid"
+
+msgid "Off"
+msgstr "Ut"
+
+msgid "On"
+msgstr "Oan"
+
+msgid "One"
+msgstr "Ien"
+
+msgid "Online-Upgrade"
+msgstr "Online-Bywurkje"
+
+msgid "Only Free scan"
+msgstr "Allinne Freie útstjoeringen"
+
+msgid "Orbital Position"
+msgstr "Rumtelyke posisje"
+
+msgid "PAL"
+msgstr "PAL"
+
+msgid "PIDs"
+msgstr "PIDs"
+
+msgid "Package list update"
+msgstr "Bywurkje pakketlyst  "
+
+msgid "Packet management"
+msgstr "Pakket beheer"
+
+msgid "Page"
+msgstr "Side"
+
+#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
+msgid "Pan&Scan"
+msgstr "Pan&Scan"
+
+msgid "Parent Directory"
+msgstr "Boppelizzende map"
+
+msgid "Parental control"
+msgstr "Alderlik tasjoch"
+
+msgid "Parental control services Editor"
+msgstr "Alderlik tasjoch bewurker"
+
+msgid "Parental control setup"
+msgstr "Alderlik tasjoch"
+
+msgid "Parental control type"
+msgstr "Alderlik tasjoch type"
+
+msgid "Pause movie at end"
+msgstr "Film op pause by ein"
+
+msgid "PiPSetup"
+msgstr "PIP Ynstellingen"
+
+msgid "PicturePlayer"
+msgstr "Plaatsje spieler"
+
+#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
+msgid "Pillarbox"
+msgstr "Pillar box"
+
+msgid "Pilot"
+msgstr "Pilot"
+
+msgid "Pin code needed"
+msgstr "Pinkode is needich"
+
+msgid "Play"
+msgstr "Ofspylje"
+
+msgid "Play Audio-CD..."
+msgstr "Ofspylje fan Audio-CD..."
+
+msgid "Play recorded movies..."
+msgstr "Opname films ôfspielje..."
+
+msgid "Please Reboot"
+msgstr "Start Dreambox opnei"
+
+msgid "Please Select Medium to be Scanned"
+msgstr "Graach Medium kieze om ôf te sykjen"
+
+msgid "Please change recording endtime"
+msgstr "Graach eintiid fan it opnimmen feroarje."
+
+msgid "Please check your network settings!"
+msgstr "Graach netwurk ynstellingen neisjen!"
+
+msgid "Please choose .NFI image file from feed server to download"
+msgstr "Graach .NFI image triem kize fan feed server om binnen te heljen"
+
+msgid "Please choose an extension..."
+msgstr "Kies in uitbreiding..."
+
+msgid "Please choose he package..."
+msgstr "Kies it pakket..."
+
+msgid "Please choose the default services lists you want to install."
+msgstr "Kies de standert lysts, welk jo  ynstallearje wolle."
+
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Helje alle USB apparaten út de Dreambox en doch de doel USB stick dan lyk "
+"deryn. minimum grutte is 64 MB."
+
+msgid "Please do not change any values unless you know what you are doing!"
+msgstr "Feroarje gjin waarden, wannear jo net witte wat jo dogge!"
+
+msgid "Please enter a name for the new bouquet"
+msgstr "Namme ynjefte foar it nije bouquet"
+
+msgid "Please enter a name for the new marker"
+msgstr "Namme ynjefte foar in nije markering"
+
+msgid "Please enter a new filename"
+msgstr "Jou in nije bestânnamme yn"
+
+msgid "Please enter filename (empty = use current date)"
+msgstr "Jou in triemnamme yn (leech = datum fan hjoed)"
+
+msgid "Please enter name of the new directory"
+msgstr "Jou in namme yn foar de nije map"
+
+msgid "Please enter the correct pin code"
+msgstr "Graach de júste pinkode yn jaan"
+
+msgid "Please enter the old pin code"
+msgstr "De âlde pinkode graach yn jaan"
+
+msgid "Please follow the instructions on the TV"
+msgstr "Folgje de ynstruksjes op TV"
+
+msgid ""
+"Please note that the previously selected media could not be accessed and "
+"therefore the default directory is being used instead."
+msgstr ""
+"Tink der om dat de foarige selektearre media net oansprutsen wurde koe, en "
+"dêrom de standert map brûkt wurd."
+
+msgid "Please press OK to continue."
+msgstr "Druk OK om fierder te gean."
+
+msgid "Please press OK!"
+msgstr "Druk Ok!"
+
+msgid "Please select .NFI flash image file from medium"
+msgstr "Selektearje in .NFI flash image triem fan medium"
+
+msgid "Please select a playlist to delete..."
+msgstr "Selektearje in ofspiellyst om te ferwiderjen..."
+
+msgid "Please select a playlist..."
+msgstr "Selektearje in ofspiellyst"
+
+msgid "Please select a subservice to record..."
+msgstr "Jou in undersender op, om op te nimmen."
+
+msgid "Please select a subservice..."
+msgstr "Selektearje in undersender..."
+
+msgid "Please select tag to filter..."
+msgstr "Selektearje diel foar it filterjen..."
+
+msgid "Please select target directory or medium"
+msgstr "Selektearje doel map of medium"
+
+msgid "Please select the movie path..."
+msgstr "Selektearje it paad nei de film"
+
+msgid "Please set up tuner B"
+msgstr "ynstelle fan tuner B"
+
+msgid "Please set up tuner C"
+msgstr "ynstelle fan tuner C"
+
+msgid "Please set up tuner D"
+msgstr "ynstelle fan tuner D"
+
+msgid ""
+"Please use direction keys to move the PiP window.\n"
+"Press Bouquet +/- to resize the window.\n"
+"Press OK to go back to the TV mode or EXIT to cancel the moving."
+msgstr ""
+"Pylkje knoppen om BIB finster te ferskowen.\n"
+"Druk Bouquet +/- om finstergrutte te feroarjen"
+
+msgid ""
+"Please use the UP and DOWN keys to select your language. Afterwards press "
+"the OK button."
+msgstr "Brúk de op en del toets om jo taal te kiezen. Dernei druk op OK"
+
+msgid "Please wait for activation of your network configuration..."
+msgstr "Wachtsje op it aktief wurden fan de netwurk konfiguraasje"
+
+msgid "Please wait while scanning is in progress..."
+msgstr ""
+
+msgid "Please wait while we configure your network..."
+msgstr "Wachtsje oant it netwurk ynstelt wurden is..."
+
+msgid "Please wait while your network is restarting..."
+msgstr "Wachtsje oant it netwurk opnei start is..."
+
+msgid "Please wait..."
+msgstr "Graach eefkes wachtsje.."
+
+msgid "Please wait... Loading list..."
+msgstr "Lyst wurd laden..."
+
+msgid "Plugin browser"
+msgstr "Ynstekker browser"
+
+msgid "Plugins"
+msgstr "Ynstekkers"
+
+msgid "Polarity"
+msgstr "Polariteit"
+
+msgid "Polarization"
+msgstr "Polarisaasje"
+
+msgid "Polish"
+msgstr "Poolsk"
+
+msgid "Port A"
+msgstr "Poort A"
+
+msgid "Port B"
+msgstr "Poort B"
+
+msgid "Port C"
+msgstr "Poort C"
+
+msgid "Port D"
+msgstr "Poort D"
+
+msgid "Portuguese"
+msgstr "Portugeesk"
+
+msgid "Positioner"
+msgstr "Rotor"
+
+msgid "Positioner fine movement"
+msgstr "Fyn ôfstelling rotor"
+
+msgid "Positioner movement"
+msgstr "Rotor beweging"
+
+msgid "Positioner setup"
+msgstr "Rotor ynstellingen"
+
+msgid "Positioner storage"
+msgstr "Rotor positie opslach"
+
+msgid "Power threshold in mA"
+msgstr "Stroom nivo yn mA"
+
+msgid "Predefined transponder"
+msgstr "Foarôf ynstelde transponder"
+
+msgid "Preparing... Please wait"
+msgstr "Foarbereide fan... Eefkes wachtsje"
+
+msgid "Press OK on your remote control to continue."
+msgstr "Druk OK op of ôfstandsbestjinning om fierder te gean."
+
+msgid "Press OK to activate the settings."
+msgstr "Druk Ok om ynstellingen aktief te meitsjen."
+
+msgid "Press OK to edit the settings."
+msgstr "Druk OK om dizze ynstellingen te bewurkjen"
+
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr ""
+
+msgid "Press OK to scan"
+msgstr "Druk Ok om te sykjen"
+
+msgid "Press OK to start the scan"
+msgstr "Druk Ok om sykjen te starten"
+
+msgid "Prev"
+msgstr "Foarige"
+
+msgid "Preview menu"
+msgstr "Foarige menu"
+
+msgid "Primary DNS"
+msgstr "Eerste DNS"
+
+msgid "Priority"
+msgstr ""
+
+msgid "Properties of current title"
+msgstr "Eigenskippen fan dizze titel"
+
+msgid "Protect services"
+msgstr "Befeilich kanalen"
+
+msgid "Protect setup"
+msgstr "Ynstellingen befeiligje"
+
+msgid "Provider"
+msgstr "Leveransier"
+
+msgid "Provider to scan"
+msgstr "Utstjoerder ôfsykje"
+
+msgid "Providers"
+msgstr "Providers"
+
+msgid "Quick"
+msgstr ""
+
+msgid "Quickzap"
+msgstr "Rapzappe"
+
+msgid "RC Menu"
+msgstr "Ofstandsbetsjinnings menu"
+
+msgid "RF output"
+msgstr "RF Ynstellingen"
+
+msgid "RGB"
+msgstr "RGB"
+
+msgid "RSS Feed URI"
+msgstr "RSS Feed URI"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Ram Disk"
+msgstr "Ram Disk"
+
+msgid "Random"
+msgstr ""
+
+msgid "Really close without saving settings?"
+msgstr "Slúte sunder op te slaan ?"
+
+msgid "Really delete done timers?"
+msgstr "Ferwiderje diene tiidsbarren?"
+
+msgid "Really exit the subservices quickzap?"
+msgstr "De undersender rapzap ôfslúte?"
+
+msgid "Really reboot now?"
+msgstr "Wier no kompleet opnei starte ?"
+
+msgid "Really restart now?"
+msgstr "Wier no nei starte ?"
+
+msgid "Really shutdown now?"
+msgstr "Wier no kompleet útskeakelje ?"
+
+msgid "Reboot"
+msgstr "kompleet nei starte"
+
+msgid "Reception Settings"
+msgstr "Untfangst Ynstellingen"
+
+msgid "Record"
+msgstr "Opnimme"
+
+msgid "Recorded files..."
+msgstr "Opnâme bestannen..."
+
+msgid "Recording"
+msgstr "An it opnimmen"
+
+msgid "Recording(s) are in progress or coming up in few seconds!"
+msgstr "In Opnimmen is dwaande of start binnen in pear sekonden!"
+
+msgid "Recordings always have priority"
+msgstr "Opnimmen hat altiid foarrang"
+
+msgid "Reenter new pin"
+msgstr "pin opnei ynjaan"
+
+msgid "Refresh Rate"
+msgstr "Fernij faasje"
+
+msgid "Refresh rate selection."
+msgstr "Fernij faasje seleksje"
+
+msgid "Remove Bookmark"
+msgstr "Ferwiderje boekmerk"
+
+msgid "Remove Plugins"
+msgstr "Ferwiderje ynstekkers"
+
+msgid "Remove a mark"
+msgstr "Ferwiderje in Markeerder"
+
+msgid "Remove currently selected title"
+msgstr "Ferwiderje it selektearre bestan"
+
+msgid "Remove plugins"
+msgstr "Ferwiderje ynstekker"
+
+msgid "Remove the broken .NFI file?"
+msgstr "Foute .NFI triem fuortsmite ?"
+
+msgid "Remove the incomplete .NFI file?"
+msgstr "Net komplete .NFI triem fuortsmite ?"
+
+msgid "Remove timer"
+msgstr ""
+
+msgid "Remove title"
+msgstr "Ferwiderje de titel"
+
+#, python-format
+msgid "Removing directory %s failed. (Maybe not empty.)"
+msgstr "Ferwiderje fan map %s mislearre ( miskien is der net leech )"
+
+msgid "Rename"
+msgstr "Omneame"
+
+msgid "Repeat"
+msgstr "Herhelje"
+
+msgid "Repeat Type"
+msgstr "Herhelje Type"
+
+msgid "Repeating event currently recording... What do you want to do?"
+msgstr "Herhelle barren an it opnimmen... Wat wolle jo dwaan ?"
+
+msgid "Repeats"
+msgstr "Herhellingen"
+
+msgid "Reset"
+msgstr "Reset"
+
+msgid "Reset and renumerate title names"
+msgstr "Titel nammen opnei oanmeitsje en nûmerje.."
+
+msgid "Resolution"
+msgstr "Skermresolusje"
+
+msgid "Restart"
+msgstr "Opnij starte"
+
+msgid "Restart GUI"
+msgstr "GUI opnij starte"
+
+msgid "Restart GUI now?"
+msgstr "GUI no opnij starte?"
+
+msgid "Restart network"
+msgstr "Netwurk nij starte"
+
+msgid "Restart test"
+msgstr "Test nij starte"
+
+msgid "Restart your network connection and interfaces.\n"
+msgstr "netwurk oanslúting en interfaces nij starte.\n"
+
+msgid "Restore"
+msgstr "Werom sette"
+
+msgid ""
+"Restoring the settings is done. Please press OK to activate the restored "
+"settings now."
+msgstr ""
+"Werom sette fan ynstellingen is klear. Druk Ok om ynstellingen aktief te "
+"meitsjen"
+
+msgid "Resume from last position"
+msgstr "Fierder gean fanôf lêste posysje"
+
+#. TRANSLATORS: The string "Resuming playback" flashes for a moment
+#. TRANSLATORS: at the start of a movie, when the user has selected
+#. TRANSLATORS: "Resume from last position" as start behavior.
+#. TRANSLATORS: The purpose is to notify the user that the movie starts
+#. TRANSLATORS: in the middle somewhere and not from the beginning.
+#. TRANSLATORS: (Some translators seem to have interpreted it as a
+#. TRANSLATORS: question or a choice, but it is a statement.)
+msgid "Resuming playback"
+msgstr "Fierder gean mei ôfspieljen"
+
+msgid "Return to file browser"
+msgstr "Werom nei triem browser"
+
+msgid "Return to movie list"
+msgstr "Werom nei de film lyst"
+
+msgid "Return to previous service"
+msgstr "Werom nei foariche service"
+
+msgid "Rewind speeds"
+msgstr "Werom spiel faasje"
+
+msgid "Right"
+msgstr "Rjochts"
+
+msgid "Rolloff"
+msgstr "Utrolje"
+
+msgid "Rotor turning speed"
+msgstr "Rotor rotaasje faasje"
+
+msgid "Running"
+msgstr "Dwaande"
+
+msgid "Russian"
+msgstr "Russysk"
+
+msgid "S-Video"
+msgstr "S Video"
+
+msgid "SNR"
+msgstr "SNR"
+
+msgid "SNR:"
+msgstr "SNR:"
+
+msgid "Sat"
+msgstr "Sneon"
+
+msgid "Sat / Dish Setup"
+msgstr "Sat / Panne Ynstellingen"
+
+msgid "Satellite"
+msgstr "Satellyt"
+
+msgid "Satellite Equipment Setup"
+msgstr "Satellyt ynstellingen"
+
+msgid "Satellites"
+msgstr "Satellyten"
+
+msgid "Satfinder"
+msgstr "Sat  syker"
+
+msgid "Sats"
+msgstr "Sats"
+
+msgid "Saturday"
+msgstr "Sneon"
+
+msgid "Save"
+msgstr "Opslaan"
+
+msgid "Save Playlist"
+msgstr "Ofspiellyst opslaan"
+
+msgid "Scaling Mode"
+msgstr "Skaal Moadus"
+
+msgid "Scan "
+msgstr "Sykje"
+
+msgid "Scan QAM128"
+msgstr "Sykje QAM128"
+
+msgid "Scan QAM16"
+msgstr "Sykje QAM16"
+
+msgid "Scan QAM256"
+msgstr "Sykje QAM256"
+
+msgid "Scan QAM32"
+msgstr "Sykje QAM32"
+
+msgid "Scan QAM64"
+msgstr "Sykje QAM64"
+
+msgid "Scan SR6875"
+msgstr "Sykje SR6875"
+
+msgid "Scan SR6900"
+msgstr "Sykje SR6900"
+
+msgid "Scan Wireless Networks"
+msgstr "Sykje Triitloaze netwerken"
+
+msgid "Scan additional SR"
+msgstr "Sykje op in oanfullende SR"
+
+msgid "Scan band EU HYPER"
+msgstr "Sykje op bân EU HYPER"
+
+msgid "Scan band EU MID"
+msgstr "Sykje op bân EU MID"
+
+msgid "Scan band EU SUPER"
+msgstr "Sykje op bân EU SUPER"
+
+msgid "Scan band EU UHF IV"
+msgstr "Sykje op bân EU UHF IV"
+
+msgid "Scan band EU UHF V"
+msgstr "Sykje op bân EU UHF V"
+
+msgid "Scan band EU VHF I"
+msgstr "Sykje op bân EU VHF I"
+
+msgid "Scan band EU VHF III"
+msgstr "Sykje op bân EU VHF III"
+
+msgid "Scan band US HIGH"
+msgstr "Sykje op bân US HIGH"
+
+msgid "Scan band US HYPER"
+msgstr "Sykje op bân US HYPER"
+
+msgid "Scan band US LOW"
+msgstr "Sykje op bân US LOW"
+
+msgid "Scan band US MID"
+msgstr "Sykje op bân US MID"
+
+msgid "Scan band US SUPER"
+msgstr "Sykje op bân US SUPER"
+
+msgid ""
+"Scan your network for wireless Access Points and connect to them using your "
+"WLAN USB Stick\n"
+msgstr ""
+"Sykje nei triidloaze oankeppel punten en ferbyn der mei troch de WLAN USB "
+"stick\n"
+
+msgid ""
+"Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr ""
+"Sykje standert lame dbs, neffens de sattelyt mei in oanslúten panne ôfsteller"
+
+msgid "Search east"
+msgstr "Sykje east"
+
+msgid "Search west"
+msgstr "Sykje west"
+
+msgid "Secondary DNS"
+msgstr "Twadde DNS"
+
+msgid "Seek"
+msgstr "Sykje"
+
+msgid "Select HDD"
+msgstr "Kies hurde skiif"
+
+msgid "Select Location"
+msgstr "Kies Lokaasje"
+
+msgid "Select Network Adapter"
+msgstr "Kies Netwurk Adapter"
+
+msgid "Select a movie"
+msgstr "Kies in film"
+
+msgid "Select audio mode"
+msgstr "Kies lûd mode"
+
+msgid "Select audio track"
+msgstr "Kies lûd spoor"
+
+msgid "Select channel to record from"
+msgstr "Kies kanaal om fan op te nimmen"
+
+msgid "Select image"
+msgstr "Kies image"
+
+msgid "Select refresh rate"
+msgstr "Kies faasje fan fernije"
+
+msgid "Select video input"
+msgstr "Kies fideo yngong"
+
+msgid "Select video mode"
+msgstr "Kies fideo moadus"
+
+msgid "Selected source image"
+msgstr "Koazen bron image"
+
+msgid "Send DiSEqC"
+msgstr "Stjoer DiSEqC"
+
+msgid "Send DiSEqC only on satellite change"
+msgstr "Stjoer DiSEqC alline by feroarjen fan satellyt"
+
+msgid "Seperate titles with a main menu"
+msgstr "Aparte triemen mei in haad menu"
+
+msgid "Sequence repeat"
+msgstr "folch oarde herhelling"
+
+msgid "Service"
+msgstr "Kanaal ynfo"
+
+msgid "Service Scan"
+msgstr "Kanaal sykje"
+
+msgid "Service Searching"
+msgstr "Kanalen sykje"
+
+msgid "Service has been added to the favourites."
+msgstr "Kanaal is tafoege oan favorieten."
+
+msgid "Service has been added to the selected bouquet."
+msgstr "Kanaal is tafoege oan selektearre bouquet."
+
+msgid ""
+"Service invalid!\n"
+"(Timeout reading PMT)"
+msgstr ""
+"Kanaal net jildig!\n"
+"(Tiidsoerskriding lêzen fan PMT)"
+
+msgid ""
+"Service not found!\n"
+"(SID not found in PAT)"
+msgstr ""
+"Service net fûn!\n"
+"(SID net fûn yn PAT)"
+
+msgid "Service scan"
+msgstr "Kanaal sykje"
+
+msgid ""
+"Service unavailable!\n"
+"Check tuner configuration!"
+msgstr "Kanaal net beskikber!<br> Sjoch tuner ynstellingen nei."
+
+msgid "Serviceinfo"
+msgstr "Kanaal ynformaasje"
+
+msgid "Services"
+msgstr "Kanalen"
+
+msgid "Set Voltage and 22KHz"
+msgstr "Set spanning en 22 kHz"
+
+msgid "Set as default Interface"
+msgstr "Ynstelle as standert ynterface"
+
+msgid "Set interface as default Interface"
+msgstr "Set ynterface as standerd ynterface"
+
+msgid "Set limits"
+msgstr "Set limyten"
+
+msgid "Settings"
+msgstr "Ynstellingen"
+
+msgid "Setup"
+msgstr "Ynstelle"
+
+msgid "Setup Mode"
+msgstr "Ynstellingen Moadus"
+
+msgid "Show Info"
+msgstr "Ynformaasje sjen litte"
+
+msgid "Show WLAN Status"
+msgstr "WLAN status sjen litte"
+
+msgid "Show blinking clock in display during recording"
+msgstr "Lit klok knipperje yn display by opnimmen"
+
+msgid "Show infobar on channel change"
+msgstr "Ynfobalke sjen litte by kanaal wiksel"
+
+msgid "Show infobar on event change"
+msgstr "Ynfobalke sjen litte by barren wiksel"
+
+msgid "Show infobar on skip forward/backward"
+msgstr "Ynfobalke sjen by rap foarút / efterút"
+
+msgid "Show positioner movement"
+msgstr "Rotor beweching sjen litte"
+
+msgid "Show services beginning with"
+msgstr "Kanalen sjen litte beginnent mei"
+
+msgid "Show the radio player..."
+msgstr "Radio spieler sjen litte..."
+
+msgid "Show the tv player..."
+msgstr "TV Spieler sjen litte..."
+
+msgid "Shows the state of your wireless LAN connection.\n"
+msgstr "Status fan WLAN sjen litte.\n"
+
+msgid "Shutdown Dreambox after"
+msgstr "Dreambox útskeakelje nei"
+
+msgid "Similar"
+msgstr "Gelykese"
+
+msgid "Similar broadcasts:"
+msgstr "Gelykese utsjoeringen"
+
+msgid "Simple"
+msgstr "Simpel"
+
+msgid "Simple titleset (compatibility for legacy players)"
+msgstr "Simpele titelset (ek geskikt foar standaard spielers)"
+
+msgid "Single"
+msgstr "Inkel"
+
+msgid "Single EPG"
+msgstr "Inkele EPG"
+
+msgid "Single satellite"
+msgstr "Ien satellyt"
+
+msgid "Single transponder"
+msgstr "Ien transponder"
+
+msgid "Singlestep (GOP)"
+msgstr "Ien stap (GOP)"
+
+msgid "Skin..."
+msgstr "Oanklaaiing"
+
+msgid "Sleep Timer"
+msgstr "Tiidstjoering"
+
+msgid "Sleep timer action:"
+msgstr "Sleep tiid barren aksje:"
+
+msgid "Slideshow Interval (sec.)"
+msgstr "Slide foarstelling tiid (sec.)"
+
+#, python-format
+msgid "Slot %d"
+msgstr "Slot %d"
+
+msgid "Slow"
+msgstr "Langsaam"
+
+msgid "Slow Motion speeds"
+msgstr "Langsaam beweechjen faasje"
+
+msgid "Some plugins are not available:\n"
+msgstr "Inkele ynstekkers binne net anwêzig:\n"
+
+msgid "Somewhere else"
+msgstr "Ergens oars"
+
+msgid ""
+"Sorry your Backup destination does not exist\n"
+"\n"
+"Please choose an other one."
+msgstr ""
+"Sorry.. Jo Reserve kopie plak bestiit net\n"
+"\n"
+"Kies in oar plak aub..."
+
+#. TRANSLATORS: This must fit into the header button in the EPG-List
+msgid "Sort A-Z"
+msgstr "Sorteer op A-Z"
+
+#. TRANSLATORS: This must fit into the header button in the EPG-List
+msgid "Sort Time"
+msgstr "Sorteer op Tiid"
+
+msgid "Sound"
+msgstr "Lûd"
+
+msgid "Soundcarrier"
+msgstr "Lûd-drager"
+
+msgid "South"
+msgstr "Sud"
+
+msgid "Spanish"
+msgstr "Spaans"
+
+msgid "Standby"
+msgstr "Paraatmode"
+
+msgid "Standby / Restart"
+msgstr "Paraatmode / Nijstart"
+
+msgid "Start from the beginning"
+msgstr "Start fanôf it begjin"
+
+msgid "Start recording?"
+msgstr "Start opnimmen?"
+
+msgid "Start test"
+msgstr "Start test"
+
+msgid "StartTime"
+msgstr "Starttiid"
+
+msgid "Starting on"
+msgstr "Starte op"
+
+msgid "Step east"
+msgstr "Stap nei east"
+
+msgid "Step west"
+msgstr "Stap nei west"
+
+msgid "Stereo"
+msgstr "Stereo"
+
+msgid "Stop"
+msgstr "Stop"
+
+msgid "Stop Timeshift?"
+msgstr "Tiidsskowen stopje?"
+
+msgid "Stop current event and disable coming events"
+msgstr "Stopje hjoeddeiske en ankommend barren"
+
+msgid "Stop current event but not coming events"
+msgstr "Stopje hjoeddeiske mar net ankommend barren"
+
+msgid "Stop playing this movie?"
+msgstr "Stopje ôfspieljen fan dizze film?"
+
+msgid "Stop test"
+msgstr "Stop test"
+
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
+msgid "Store position"
+msgstr "Posysje opslaan"
+
+msgid "Stored position"
+msgstr "Opsleine posysje"
+
+msgid "Subservice list..."
+msgstr "UnderSender lyst..."
+
+msgid "Subservices"
+msgstr "UnderSender"
+
+msgid "Subtitle selection"
+msgstr "Undertitel seleksje"
+
+msgid "Subtitles"
+msgstr "Undertitels"
+
+msgid "Sun"
+msgstr "Sne"
+
+msgid "Sunday"
+msgstr "Snein"
+
+msgid "Swap Services"
+msgstr "Kanalen wikselje"
+
+msgid "Swedish"
+msgstr "Zweeds"
+
+msgid "Switch to next subservice"
+msgstr "Gjin nei folgende undersender"
+
+msgid "Switch to previous subservice"
+msgstr "Gjin nei foarige undersender"
+
+msgid "Symbol Rate"
+msgstr "Symbool faasje"
+
+msgid "Symbolrate"
+msgstr "Symboolfaasje"
+
+msgid "System"
+msgstr "Systeem"
+
+#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
+msgid "TRANSLATOR_INFO"
+msgstr "Oersetter ynfo"
+
+msgid "TS file is too large for ISO9660 level 1!"
+msgstr "TS triem is te grut foar ISO 9660 level 1!"
+
+msgid "TV System"
+msgstr "TV Systeem"
+
+msgid "Table of content for collection"
+msgstr "Ynhalds tabel foar kolleksje"
+
+msgid "Tag 1"
+msgstr "Merker 1"
+
+msgid "Tag 2"
+msgstr "Merker 2"
+
+msgid "Tags"
+msgstr "Merkers"
+
+msgid "Terrestrial"
+msgstr "Ether"
+
+msgid "Terrestrial provider"
+msgstr "Ether útstjoerder"
+
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
+msgid "Test mode"
+msgstr "Test moadus"
+
+msgid "Test the network configuration of your Dreambox.\n"
+msgstr "Test de netwurk konfiguraasje fan de Dreambox.\n"
+
+msgid "Test-Messagebox?"
+msgstr "Test-Berjochtbox?"
+
+msgid ""
+"Thank you for using the wizard. Your box is now ready to use.\n"
+"Please press OK to start using your Dreambox."
+msgstr ""
+"Bedankt foar it brûken fan de gucheler. Jo box is no klear om te brûken.\n"
+"Druk OK om mei de Dreambox te begjinnen."
+
+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 ""
+"De DVD standert kin gjin H.264 (HDTV) fideo streams an. Wolle jo dan in "
+"Dreambox formaat data DVD meitsje ? Tink der om, dizze kin net in gewoane "
+"DVD spielers ôfspiele wurde !"
+
+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 ""
+"Der kin no opstart wurde fan USB stick. Wolle jo de lêste programmaferzje "
+"binnenhelje en op stick sette ?"
+
+msgid "The backup failed. Please choose a different backup location."
+msgstr "Backup is mislearre. Kies in oare backup lokaasje."
+
+#, python-format
+msgid ""
+"The following device was found:\n"
+"\n"
+"%s\n"
+"\n"
+"Do you want to write the USB flasher to this stick?"
+msgstr ""
+"It folgende apparaat wie fûn:\n"
+"\n"
+"%s\n"
+"\n"
+"Wolle jo de USB flasher nei dizze stick skriuwe ?"
+
+msgid ""
+"The input port should be configured now.\n"
+"You can now configure the screen by displaying some test pictures. Do you "
+"want to do that now?"
+msgstr ""
+"De yngongs poort moat no ynstelt wurde\n"
+"Ynstelle kin mei it sjen litten fan in oantal bylden. No dwaan ?"
+
+msgid "The installation of the default services lists is finished."
+msgstr "Ynstalaasje fan standert ynstellingen is klear."
+
+msgid ""
+"The installation of the default settings is finished. You can now continue "
+"configuring your Dreambox by pressing the OK button on the remote control."
+msgstr ""
+"Standert ynstellingen binne werom set. Jo kinne fierder gean mei it "
+"ynstellen fan de Dreambox troch OK te drukken op de ôfstandsbetsjinning"
+
+msgid ""
+"The md5sum validation failed, the file may be corrupted! Are you sure that "
+"you want to burn this image to flash memory? You are doing this at your own "
+"risk!"
+msgstr ""
+"De md5sum misljearre, de triem is blikber Korrupt. Wolle jo wier dit byld yn "
+"it flash geheugen sette ? Dit gjid op eigen risiko !"
+
+msgid ""
+"The md5sum validation failed, the file may be downloaded incompletely or be "
+"corrupted!"
+msgstr ""
+"De md5sum misljearre. De triem mei net kompleet binnen helle wêze of gewoan "
+"korrupt weze !"
+
+msgid "The package doesn't contain anything."
+msgstr "It pakket hat gjin ynhâld"
+
+#, python-format
+msgid "The path %s already exists."
+msgstr "It paad %s bestiit al."
+
+msgid "The pin code has been changed successfully."
+msgstr "De pinkode is mei sukses feroare."
+
+msgid "The pin code you entered is wrong."
+msgstr "De ynjûne pinkode is ferkeard."
+
+msgid "The pin codes you entered are different."
+msgstr "De pinkodes binne net gelyk."
+
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
+msgid "The sleep timer has been activated."
+msgstr "De sliep tiid klok is aktiveert."
+
+msgid "The sleep timer has been disabled."
+msgstr "De sliep tiid klok is útskeakele"
+
+msgid "The timer file (timers.xml) is corrupt and could not be loaded."
+msgstr "De tiidsbarrenlyst is korrupt en koe net laden wurde."
+
+msgid ""
+"The wireless LAN plugin is not installed!\n"
+"Please install it."
+msgstr ""
+"De WLAN ynstekker is net ynstallearre!\n"
+"Ynstallearje dizze earst."
+
+msgid ""
+"The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr ""
+"De gucheler kin jo ynstellingen efterút sette. Wolle jo no een backup "
+"meitsje ?"
+
+msgid "The wizard is finished now."
+msgstr "De gucheler is klear."
+
+msgid "There are no default services lists in your image."
+msgstr "Der binne gjin standert lysts yn de Dreambox"
+
+msgid "There are no default settings in your image."
+msgstr "Der binne gjin standert ynstellingen yn jo byld"
+
+msgid ""
+"There might not be enough Space on the selected Partition.\n"
+"Do you really want to continue?"
+msgstr ""
+"Blikber is der net genôch rûmte op de koazen partysje.\n"
+"Wolle jo trochgean ?"
+
+#, python-format
+msgid "This .NFI file does not contain a valid %s image!"
+msgstr "Dizze .NFI triem hat net in jildich %s image!"
+
+msgid ""
+"This .NFI file does not have a md5sum signature and is not guaranteed to "
+"work. Do you really want to burn this image to flash memory?"
+msgstr ""
+"Dizze .NFI triem had gjin md5sum kontrolesom en mei misskien net wurkje. "
+"Wolle jo wier dit byld yn flash geheugen sette ?"
+
+msgid ""
+"This .NFI file has a valid md5 signature. Continue programming this image to "
+"flash memory?"
+msgstr ""
+"Dit .NFI triem hat it jildige md5 kontrolesom. Fjierder gean mei it nei "
+"flash skriuwen fan dit byld ?"
+
+msgid ""
+"This DVD RW medium is already formatted - reformatting will erase all "
+"content on the disc."
+msgstr ""
+"Dit DVD RW medium is al formattearre. Wer opnei dwaan sil alle gegevens op "
+"disk wiskje."
+
+#, python-format
+msgid "This Dreambox can't decode %s video streams!"
+msgstr "De Dreambox kin %s fideo streams net oan !"
+
+msgid "This is step number 2."
+msgstr "Dit is stap nûmer 2."
+
+msgid "This is unsupported at the moment."
+msgstr "Dit wurd no nog net ondersteund."
+
+msgid ""
+"This test checks for configured Nameservers.\n"
+"If you get a \"unconfirmed\" message:\n"
+"- please check your DHCP, cabling and Adapter setup\n"
+"- if you configured your Nameservers manually please verify your entries in "
+"the \"Nameserver\" Configuration"
+msgstr ""
+"Dizze test sjocht nei ynstelde nammeservers.\n"
+"Krije jo in \"net befestige\" berjocht :\n"
+"- Sjoch nei de DHCP, kabels/tridden en adapter ynstellingen\n"
+"- By hânmatig ynstellen fan nammeservers, sjoch nei de ynjeftes yn de "
+"\"nammeservers\" konfiguraasje"
+
+msgid ""
+"This test checks whether a network cable is connected to your LAN-Adapter.\n"
+"If you get a \"disconnected\" message:\n"
+"- verify that a network cable is attached\n"
+"- verify that the cable is not broken"
+msgstr ""
+"Dizze test sjocht nei in oanslúten LAN adapter.\n"
+"Krije jo in \"net oanslúten\" berjocht :\n"
+"- Sjoch nei wol of net oanslúten kabels/tridden\n"
+"- Sjoch ot de kabel miskien net brutsen is"
+
+msgid ""
+"This test checks whether a valid IP Address is found for your LAN Adapter.\n"
+"If you get a \"unconfirmed\" message:\n"
+"- no valid IP Address was found\n"
+"- please check your DHCP, cabling and adapter setup"
+msgstr ""
+"Dizze test sjocht nei ynstelde IP adressen foar de LAN adapter.\n"
+"Krije jo in \"net befestige\" berjocht :\n"
+"- Is der in jildig IP adres ynstelt ?\n"
+"- Sjoch nei de DHCP, kabels/tridden en adapter ynstellingen"
+
+msgid ""
+"This test checks whether your LAN Adapter is set up for automatic IP Address "
+"configuration with DHCP.\n"
+"If you get a \"disabled\" message:\n"
+" - then your LAN Adapter is configured for manual IP Setup\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup "
+"dialog.\n"
+"If you get an \"enabeld\" message:\n"
+"-verify that you have a configured and working DHCP Server in your network."
+msgstr ""
+"Dizze test sjocht ot de LAN adapter ynsteld is foar automatysk IP Adres "
+"ferkrije troch DHCP.\n"
+"Krije jo in \"útskeakele\" berjocht :\n"
+"- In hânmatig IP adres is ynstelt ?\n"
+"- Is de ynjûne IP ynformaasje goed, yn it Adapterynstellingen menu ?\n"
+"Krije jo in \"ynskeakele\" berjocht :\n"
+"- Is der ek een DHCP server aktyf yn jo netwurk ?"
+
+msgid "This test detects your configured LAN-Adapter."
+msgstr "Dizze test syket nei de ynstelde LAN-Adapter"
+
+msgid "Three"
+msgstr "Trije"
+
+msgid "Threshold"
+msgstr "Drompel"
+
+msgid "Thu"
+msgstr "Tong"
+
+msgid "Thumbnails"
+msgstr "Tumkegrutte"
+
+msgid "Thursday"
+msgstr "Tongersdei"
+
+msgid "Time"
+msgstr "Tiid"
+
+msgid "Time/Date Input"
+msgstr "Tiid / Dei ynjefte"
+
+msgid "Timer"
+msgstr "Tiidssjtoering"
+
+msgid "Timer Edit"
+msgstr "Tiidsbarren bewurkje"
+
+msgid "Timer Editor"
+msgstr "Tiidsbarren bewurker"
+
+msgid "Timer Type"
+msgstr "Tiidsbarren type"
+
+msgid "Timer entry"
+msgstr "Tiidsbarren item"
+
+msgid "Timer log"
+msgstr "Tiidsbarren log"
+
+msgid ""
+"Timer overlap in timers.xml detected!\n"
+"Please recheck it!"
+msgstr ""
+"Tiidstjoerings conflicten fûn yn timers.xml\n"
+"Graach nei sjen en meitsje!"
+
+msgid "Timer sanity error"
+msgstr "Tiidsbarren kontrole flater"
+
+msgid "Timer selection"
+msgstr "Tiidsbarren seleksje"
+
+msgid "Timer status:"
+msgstr "Tiidsbarren status:"
+
+msgid "Timeshift"
+msgstr "Tiidsskowen"
+
+msgid "Timeshift not possible!"
+msgstr "Tiidsskowen is net mooglik !"
+
+msgid "Timeshift path..."
+msgstr "Tiidsskow paad..."
+
+msgid "Timezone"
+msgstr "Tiidszone"
+
+msgid "Title"
+msgstr "Titel"
+
+msgid "Title properties"
+msgstr "Titel eigenskippen"
+
+msgid "Titleset mode"
+msgstr "Titelset moadus"
+
+msgid ""
+"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 ""
+"Om de software fan de Dreambox by te wurken, folgje de folgende stappen :\n"
+"1) Dreambox útskeakelje mei de skeakeler op de efterside en doch de USB "
+"stick der yn.\n"
+"2) Skeakelje de Dreamobx wer yn en hald de 'nei beneden' taste op 'e "
+"foarkant fan de box yndrukt foar 10 seconden.\n"
+"3) Is de box opstart, folgje dan de opjeftes fan de gûcheler."
+
+msgid "Today"
+msgstr "Hjoed"
+
+msgid "Tone mode"
+msgstr "Toan moadus"
+
+msgid "Toneburst"
+msgstr "Toan piek"
+
+msgid "Toneburst A/B"
+msgstr "Toneburst A/B"
+
+msgid "Track"
+msgstr "Nummer"
+
+msgid "Translation"
+msgstr "Oersetting"
+
+msgid "Translation:"
+msgstr "Oersetting:"
+
+msgid "Transmission Mode"
+msgstr "Oerstjoeren moadus"
+
+msgid "Transmission mode"
+msgstr "Oerstjoeren type"
+
+msgid "Transponder"
+msgstr "Transponder"
+
+msgid "Transponder Type"
+msgstr "Transponder type"
+
+msgid "Tries left:"
+msgstr "Oantal kearen besykjen oer:"
+
+msgid "Try to find used Transponders in cable network.. please wait..."
+msgstr "Besykje brûkte transponders te finen yn kabel netwurk.. "
+
+msgid "Try to find used transponders in cable network.. please wait..."
+msgstr "Besykje brûkte transponders te finen yn kabel netwurk.. "
+
+msgid "Tue"
+msgstr "Tiis"
+
+msgid "Tuesday"
+msgstr "Tiisdei"
+
+msgid "Tune"
+msgstr "Ofstimme"
+
+msgid "Tune failed!"
+msgstr "Ofstimme mislearre !"
+
+msgid "Tuner"
+msgstr "Tuner"
+
+msgid "Tuner "
+msgstr "Tuner"
+
+msgid "Tuner Slot"
+msgstr "Tuner Slot"
+
+msgid "Tuner configuration"
+msgstr "Tuner ynstellingen"
+
+msgid "Tuner status"
+msgstr "Tuner status"
+
+msgid "Turkish"
+msgstr "Turks"
+
+msgid "Two"
+msgstr "Twa"
+
+msgid "Type of scan"
+msgstr "Type fan sykjen"
+
+msgid "USALS"
+msgstr "USALS"
+
+msgid "USB"
+msgstr "USB"
+
+msgid "USB Stick"
+msgstr "USB Stick"
+
+msgid "USB stick wizard"
+msgstr "USB stick gûcheler"
+
+msgid "Ukrainian"
+msgstr "Oekraïne"
+
+msgid ""
+"Unable to complete filesystem check.\n"
+"Error: "
+msgstr ""
+"Net yn steat om bestânsysteem nei te sjen\n"
+"Flater: "
+
+msgid ""
+"Unable to initialize harddisk.\n"
+"Error: "
+msgstr ""
+"Kin hurde skiif net formatearje.\n"
+"Flater: "
+
+msgid "Uncommitted DiSEqC command"
+msgstr "Net oanwizen DiSEqC kommando"
+
+msgid "Universal LNB"
+msgstr "Unifersele LNB"
+
+msgid "Unmount failed"
+msgstr "Ofkeppeljen mislearre"
+
+msgid "Update"
+msgstr "Bywurkje"
+
+msgid "Updates your receiver's software"
+msgstr "UntfangerSoftware bywurkje"
+
+msgid "Updating finished. Here is the result:"
+msgstr "Klear met bywurkjen. Dit hat allegear bart :"
+
+msgid "Updating... Please wait... This can take some minutes..."
+msgstr "Bywurkjen is dwaande. Waachtje even. Dit kin inkele minuten duorje."
+
+msgid "Upgrade finished. Do you want to reboot your Dreambox?"
+msgstr "Klear mei bywurkjen. Wolle jo de Dreambox opnij starte?"
+
+msgid "Upgrading"
+msgstr "An it bywurkjen"
+
+msgid "Upgrading Dreambox... Please wait"
+msgstr "Dreambox an it bywurkjen..."
+
+msgid "Use"
+msgstr "Brûk"
+
+msgid "Use DHCP"
+msgstr "DHCP brûke"
+
+msgid "Use Interface"
+msgstr "Brûk ynterface"
+
+msgid "Use Power Measurement"
+msgstr "Bruk Enerzy behear"
+
+msgid "Use a gateway"
+msgstr "In gateway brûke"
+
+#.   TRANSLATORS: The effect of "Non-smooth winding" is that rather
+#.       than using ordinary "continuous" or "smooth" winding, a fast
+#.       sequence of stills is shown when winding at high speeds. This
+#.       makes it much easier too follow when almost each frame comes from
+#.       a new scene. The effect is achieved by repeating each shown frame
+#.       a couple of times. The settings control both at which speed this
+#.       winding mode sets in, and how many times each frame should be
+#.       repeated. This was previously called "Discontinuous playback"
+#.       which was incomprehensible. "Non-smooth winding" may be a better
+#.       term, but note that there is nothing irregular about it. Synonyms
+#.       better suited for translation to other languages may be "stepwise
+#.       winding/playback", or "winding/playback using stills". 
+msgid "Use non-smooth winding at speeds above"
+msgstr "Brûk net glêd spielen by faasjes heecher"
+
+msgid "Use power measurement"
+msgstr "Fermogensmjitting brûke"
+
+msgid "Use the Networkwizard to configure your Network\n"
+msgstr "Bruk de netwurk gûcheler om it netwurk yn te stellen\n"
+
+msgid ""
+"Use the left and right buttons to change an option.\n"
+"\n"
+"Please set up tuner A"
+msgstr ""
+"Knoppen links en rjochts brûke om in opsje te feroarjen.\n"
+"\n"
+"Stel tuner A yn"
+
+msgid ""
+"Use the up/down keys on your remote control to select an option. After that, "
+"press OK."
+msgstr "Knoppen op en del brûke om in opsje te kiezen. Dêrnei druk Ok"
+
+msgid "Use usals for this sat"
+msgstr "USALS foar dizze satellyt brûke"
+
+msgid "Use wizard to set up basic features"
+msgstr "Gucheler foar basis ynstellingen brûke"
+
+msgid "Used service scan type"
+msgstr "Brukte type kanaal sykjen"
+
+msgid "User defined"
+msgstr "Gebruker ynstelling"
+
+msgid "VCR scart"
+msgstr "VCR scart"
+
+msgid "VMGM (intro trailer)"
+msgstr "VMGM (yntro fan film)"
+
+msgid "Video Fine-Tuning"
+msgstr "Fideo fyn ynstellen"
+
+msgid "Video Fine-Tuning Wizard"
+msgstr "Fideo fyn ynstel gucheler"
+
+msgid "Video Output"
+msgstr "Fideo útgong"
+
+msgid "Video Setup"
+msgstr "Fideo ynstellingen"
+
+msgid "Video Wizard"
+msgstr "Fideo gucheler"
+
+msgid ""
+"Video input selection\n"
+"\n"
+"Please press OK if you can see this page on your TV (or select a different "
+"input port).\n"
+"\n"
+"The next input port will be automatically probed in 10 seconds."
+msgstr ""
+"Fideo yngong seleksje\n"
+"\n"
+"Druk OK wannear jo dit sjen kinne op jo TV (of kies in oare yngong).\n"
+"\n"
+"De folgende yngong wurd automatysk probearre yn 10 seconden."
+
+msgid "Video mode selection."
+msgstr "Fideo moadus seleksje"
+
+msgid "View Rass interactive..."
+msgstr "Rass interaktief sjen litte"
+
+msgid "View teletext..."
+msgstr "tiletekst toane..."
+
+msgid "Virtual KeyBoard"
+msgstr "Virtueel Toetseboerd"
+
+msgid "Voltage mode"
+msgstr "Spanning mode"
+
+msgid "Volume"
+msgstr "Lûdsterkte"
+
+msgid "W"
+msgstr "W"
+
+msgid "WEP"
+msgstr "WEP"
+
+msgid "WPA"
+msgstr "WPA"
+
+msgid "WPA or WPA2"
+msgstr "WPA of WPA2"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WSS on 4:3"
+msgstr "WSS by 4:3"
+
+msgid "Waiting"
+msgstr "Oan it wachtsjen"
+
+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"
+"Please press OK to begin."
+msgstr ""
+"Wy probearje no of jo TV dizze resolusje dwaan kin by 50 Hz. Giet jo skerm "
+"op swart, wachtsje 20 sec. en it giet werom nei 60 Hz.\n"
+"Druk OK om te begjinnen."
+
+msgid "Wed"
+msgstr "Woa"
+
+msgid "Wednesday"
+msgstr "Woansdei"
+
+msgid "Weekday"
+msgstr "Wiekdei"
+
+msgid ""
+"Welcome to the Cutlist editor.\n"
+"\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
+"cut'.\n"
+"\n"
+"Then seek to the end, press OK, select 'end cut'. That's it."
+msgstr ""
+"Wolkom by de Cutlist bewurker.\n"
+"\n"
+"Sykje oant it begjin fan wat jo fuorthelje wolle. Druk OK, kies start cut.\n"
+"\n"
+"Dan kies oant it ein, druk OK, kies ein cut. Klear.."
+
+msgid ""
+"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."
+msgstr ""
+"Wolkom by de byld bywurkje gucheler. De gucheler helpt jo by it bywurkjen "
+"fan de software yn jo Dreambox, in backup mochelikhiid foar jo ynstellingen "
+"en in koarte útlis fan hoe de software by te wurkjen."
+
+msgid ""
+"Welcome.\n"
+"\n"
+"This start wizard will guide you through the basic setup of your Dreambox.\n"
+"Press the OK button on your remote control to move to the next step."
+msgstr ""
+"Wolkom.\n"
+"\n"
+"Dizze gucheler helpt jo troch de basis ynstellingen fan jo Dreambox.\n"
+"Druk Ok op jo ôfstandsbetsjinning om nei de folgende stap te gean."
+
+msgid "Welcome..."
+msgstr "Wolkom..."
+
+msgid "West"
+msgstr "West"
+
+msgid "What do you want to scan?"
+msgstr "Wat wolle jo ôfsykje ?"
+
+msgid "Where do you want to backup your settings?"
+msgstr "Wêr wolle jo de gegevens opslaan?"
+
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Wêr moatte it opnimmen mei tiidsferskowing opslein wurde ?"
+
+msgid "Wireless"
+msgstr "Triitloas"
+
+msgid "Wireless Network"
+msgstr "Triidloas netwurk"
+
+msgid "Write error while recording. Disk full?\n"
+msgstr "Skriuw flater by it opnimmen. Skiif fol ?\n"
+
+msgid "Write failed!"
+msgstr "Skriuw flater!"
+
+msgid "Writing NFI image file to flash completed"
+msgstr "Skriuwen fan NFI byld nei flash is klear"
+
+msgid "YPbPr"
+msgstr "YPbPr"
+
+msgid "Year"
+msgstr "Jier"
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "Yes, and delete this movie"
+msgstr "Ja, en ferwiderje dizze film"
+
+msgid "Yes, backup my settings!"
+msgstr "Ja, myn ynstellingen extra bewarje"
+
+msgid "Yes, do a manual scan now"
+msgstr "Ja, no hânmatig sykje"
+
+msgid "Yes, do an automatic scan now"
+msgstr "Ja, no automatysk sykje"
+
+msgid "Yes, do another manual scan now"
+msgstr "Ja, no nochris hânmatig sykje"
+
+msgid "Yes, perform a shutdown now."
+msgstr "Ja, no útskeakelje"
+
+msgid "Yes, restore the settings now"
+msgstr "Ja, no de ynstellingen werom sette"
+
+msgid "Yes, returning to movie list"
+msgstr "Ja, werom nei de film lyst"
+
+msgid "Yes, view the tutorial"
+msgstr "Ja, besjoch de hânlieding"
+
+msgid ""
+"You can choose some default settings now. Please select the settings you "
+"want to be installed."
+msgstr ""
+"Jo kinne inkele ynstellingen dwaan no. Kies de ynstellingen die't jo "
+"ynstallearje wolle"
+
+msgid "You can choose, what you want to install..."
+msgstr "Jo kinne kieze wat te ynstallearen"
+
+msgid "You cannot delete this!"
+msgstr "Jo kinne dit net ferwiderje!"
+
+msgid "You chose not to install any default services lists."
+msgstr "Jo hawwe koazen gjin standert kanaallysten te ynstallearjen."
+
+msgid ""
+"You chose not to install any default settings. You can however install the "
+"default settings later in the settings menu."
+msgstr ""
+"Jo hawwe koazen gjin standert ynstellingen te ynstallearjen. Jo kinne letter "
+"dit altiid nog dwaan in it ynstellingen menu"
+
+msgid ""
+"You chose not to install anything. Please press OK finish the install wizard."
+msgstr ""
+"Jo hawwe koazen neat te ynstallearjen. Druk OK om de gucheler ôf te slúten."
+
+msgid ""
+"You do not seem to have a harddisk in your Dreambox. So backing up to a "
+"harddisk is not an option for you."
+msgstr ""
+"Jo hawwe blykber gjin hurde skiif yn jo Dreambox. Extra bewarje fan "
+"ynstellingen nei in hurde skiif kin net by jo."
+
+msgid ""
+"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!\n"
+"Please press OK to start the backup now."
+msgstr ""
+"Jo wolle de ynstellingen extra bewarje op in compact flash kaart. De kaart "
+"moat oanwezig weze. Wy sjogge net nei, at it ek werkelijk brukt wurd. It is "
+"better om op hurde skiif te bewarjen.\n"
+"Druk Ok om de ynstellingen extra op te slaan."
+
+msgid ""
+"You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
+"Please press OK to start the backup now."
+msgstr ""
+"Jo wolle de ynstellingen extra bewarje op in USB skiif. It is better om dit "
+"nei hurde skiif te dwaan\n"
+"Druk Ok om de ynstellingen extra te bewarjen."
+
+msgid ""
+"You have chosen to backup to your harddisk. Please press OK to start the "
+"backup now."
+msgstr ""
+"Jo wolle de ynstellingen extra bewarje op hurde skiif.Druk Ok om de "
+"ynstellingen extra te bewarjen."
+
+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 ""
+"Jo hawwe koazen in neie .NFI opstart USB stick te meitsjen. Dit sil de USB "
+"opnei partitionearje en sa sil alle data ferlên gean."
+
+#, python-format
+msgid "You have to wait %s!"
+msgstr "Jo moatte %s wachtsje!"
+
+msgid ""
+"You need a PC connected to your dreambox. If you need further instructions, "
+"please visit the website http://www.dm7025.de.\n"
+"Your 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."
+msgstr ""
+"De moat in PC oan de dreambox ansluten weze. Foar mear ynstruktiessjoch op "
+"de webside http://www.dm7025.de.\n"
+"Jo dreambox sil no stopje. Nei it bywurkjen neffens de webside, de neie "
+"software sil jo freegje om de oarspronkelike ynstellingen werom te setten."
+
+msgid ""
+"You need to set a pin code and hide it from your children.\n"
+"\n"
+"Do you want to set the pin now?"
+msgstr ""
+"In pincode moat brûkt wurde om of te sluten foar bern.\n"
+"\n"
+"No in pinkode ynstelle ?"
+
+msgid "Your Dreambox will restart after pressing OK on your remote control."
+msgstr "Jo D"
+
+msgid "Your TV works with 50 Hz. Good!"
+msgstr "Jo TV wurket goed mei 50 Hz. Ok !"
+
+msgid ""
+"Your backup succeeded. We will now continue to explain the further upgrade "
+"process."
+msgstr ""
+"It extra bewarjen is slagge. Wy gjinne jo fierder mei utlizzen fan it bywurk "
+"proces."
+
+msgid "Your dreambox is shutting down. Please stand by..."
+msgstr "Jo Dreambox wurd no ôfsluten. Eefkes wachtsje..."
+
+msgid ""
+"Your dreambox isn't connected to the internet properly. Please check it and "
+"try again."
+msgstr ""
+"Jo Dreambox is net goed ferbun mei it internet. Kontrolearje en besykje "
+"opnij."
+
+msgid ""
+"Your frontprocessor firmware must be upgraded.\n"
+"Press OK to start upgrade."
+msgstr ""
+"Jo foarprocessor software moat bywurke wurde\n"
+"Druk Ok om te begjinnen."
+
+msgid "Your network configuration has been activated."
+msgstr "Netwurk ynstellingen binne no aktief."
+
+msgid ""
+"Your network configuration has been activated.\n"
+"A second configured interface has been found.\n"
+"\n"
+"Do you want to disable the second network interface?"
+msgstr ""
+"De netwurk ynstellingen binne no aktief.\n"
+"In twadde ynstelde ynterface is fûn.\n"
+"\n"
+"Wolle jo de twadde ynterface útskeakelje ?"
+
+msgid "Zap back to service before positioner setup?"
+msgstr "Werom zappe nei kanaal foar rotor ynstellingen?"
+
+msgid "Zap back to service before satfinder?"
+msgstr "Werom zappe nei kanaal foar satellytsyker?"
+
+msgid "[alternative edit]"
+msgstr "[alternatief bewurkje]"
+
+msgid "[bouquet edit]"
+msgstr "[bouquet bewurkje]"
+
+msgid "[favourite edit]"
+msgstr "[favorieten bewurkje]"
+
+msgid "[move mode]"
+msgstr "[Ferpleats moadus]"
+
+msgid "abort alternatives edit"
+msgstr "alternatieven bewurkjen ôfbrekke"
+
+msgid "abort bouquet edit"
+msgstr "boeket bewurkjen ôfbrekke"
+
+msgid "abort favourites edit"
+msgstr "favoriet bewurkje ôfbrekke"
+
+msgid "about to start"
+msgstr "op it punt om te starten"
+
+msgid "activate current configuration"
+msgstr "Dizze ynstellingen aktief meitsje"
+
+msgid "add a nameserver entry"
+msgstr "In nammeserver tafoegje"
+
+msgid "add alternatives"
+msgstr "alernatief tafoegje"
+
+msgid "add bookmark"
+msgstr "boekmerk tafoegje"
+
+msgid "add bouquet"
+msgstr "boeket tafoegje"
+
+msgid "add directory to playlist"
+msgstr "map oan ofspiellyst tafoegje"
+
+msgid "add file to playlist"
+msgstr "triem oan ofspiellyst tafoegje"
+
+msgid "add files to playlist"
+msgstr "triemen tafoegje an ôfspiellyst"
+
+msgid "add marker"
+msgstr "marker tafoegje"
+
+msgid "add recording (enter recording duration)"
+msgstr "opnimmen tafoegje (opnimtiid)"
+
+msgid "add recording (enter recording endtime)"
+msgstr "opnimmen tafoegje (eintiid opnimmen ynjaan)"
+
+msgid "add recording (indefinitely)"
+msgstr "opnimmen tafoegje (foar altiid trochgean)"
+
+msgid "add recording (stop after current event)"
+msgstr "opnimmen tafoegje (stopje nei dit barren)"
+
+msgid "add service to bouquet"
+msgstr "kanaal tafoegje oan bouquet"
+
+msgid "add service to favourites"
+msgstr "kanaal tafoegje oan favorieten"
+
+msgid "add to parental protection"
+msgstr "âlderlik tasjoch tafoegje "
+
+msgid "advanced"
+msgstr "afansjearre"
+
+msgid "alphabetic sort"
+msgstr "sortearje op alfabet"
+
+msgid ""
+"are you sure you want to restore\n"
+"following backup:\n"
+msgstr ""
+"witte jo seker dizze werom te setten\n"
+"de extra kopie:\n"
+
+#, python-format
+msgid "audio track (%s) format"
+msgstr "Lûd spoor (%s) formaat"
+
+#, python-format
+msgid "audio track (%s) language"
+msgstr "Lûd spoor (%s) taal"
+
+msgid "audio tracks"
+msgstr "audio spoor"
+
+msgid "auto"
+msgstr "auto"
+
+msgid "back"
+msgstr "werom"
+
+msgid "background image"
+msgstr "Eftergrûn ôfbylding"
+
+msgid "backgroundcolor"
+msgstr "Eftergrûn kleur"
+
+msgid "better"
+msgstr "better"
+
+msgid "black"
+msgstr "swart"
+
+msgid "blacklist"
+msgstr "swarte lyst"
+
+msgid "blue"
+msgstr "blauw"
+
+#, python-format
+msgid "burn audio track (%s)"
+msgstr "Audio Titel brâne (%s)"
+
+msgid "change recording (duration)"
+msgstr "feroarje opnim tiiden"
+
+msgid "change recording (endtime)"
+msgstr "wizigje opnimmen (eintiid)"
+
+msgid "chapters"
+msgstr "Haadstikken"
+
+msgid "choose destination directory"
+msgstr "kies doel map"
+
+msgid "circular left"
+msgstr "circular links"
+
+msgid "circular right"
+msgstr "circular rjochts"
+
+msgid "clear playlist"
+msgstr "ofspiellyst leeg meitsje"
+
+msgid "complex"
+msgstr "complex"
+
+msgid "config menu"
+msgstr "konfiguraasje menu"
+
+msgid "confirmed"
+msgstr "befestigt"
+
+msgid "connected"
+msgstr "oanslúten"
+
+msgid "continue"
+msgstr "gjea fierder"
+
+msgid "copy to bouquets"
+msgstr "kopieer nei boeketten"
+
+msgid "create directory"
+msgstr "map meitsje"
+
+msgid "daily"
+msgstr "eltse dei"
+
+msgid "day"
+msgstr "dei"
+
+msgid "delete cut"
+msgstr "ferwiderje stik"
+
+msgid "delete file"
+msgstr "triem ferwiderje"
+
+msgid "delete playlist entry"
+msgstr "ofspiellyst rigele ferwiderje"
+
+msgid "delete saved playlist"
+msgstr "ferwiderje opsleine ofspiellyst"
+
+msgid "delete..."
+msgstr "ferwiderje..."
+
+msgid "disable"
+msgstr "utskeakelje"
+
+msgid "disable move mode"
+msgstr "ferpleats modus útskeakelje"
+
+msgid "disabled"
+msgstr "útskeakele"
+
+msgid "disconnected"
+msgstr "net oanslúten"
+
+msgid "do not change"
+msgstr "net feroarje"
+
+msgid "do nothing"
+msgstr "doch neat"
+
+msgid "don't record"
+msgstr "net opnimme"
+
+msgid "done!"
+msgstr "Klear!"
+
+msgid "edit alternatives"
+msgstr "bewurkje alternatief"
+
+msgid "empty"
+msgstr "leeg"
+
+msgid "enable"
+msgstr "ynskeakelje"
+
+msgid "enable bouquet edit"
+msgstr "bewurkjen boeket oan"
+
+msgid "enable favourite edit"
+msgstr "bewurkjen favorieten oan"
+
+msgid "enable move mode"
+msgstr "ferpleatsen mode oan"
+
+msgid "enabled"
+msgstr "ynskeakele"
+
+msgid "end alternatives edit"
+msgstr "bewurkjen alternatief út"
+
+msgid "end bouquet edit"
+msgstr "bewurkjen boeket út"
+
+msgid "end cut here"
+msgstr "stop stik hjirre"
+
+msgid "end favourites edit"
+msgstr "bewurkjen favoriet út"
+
+msgid "enigma2 and network"
+msgstr "enigma2 en netwurk"
+
+msgid "equal to"
+msgstr "gelyk oan"
+
+msgid "exceeds dual layer medium!"
+msgstr "te grut foar 2 laags medium!"
+
+msgid "exit DVD player or return to file browser"
+msgstr "DVD spieler ferlitte en werom nei triem browser"
+
+msgid "exit mediaplayer"
+msgstr "mediaspieler ferlitte"
+
+msgid "exit movielist"
+msgstr "filmlyst ferlitte"
+
+msgid "exit nameserver configuration"
+msgstr "nammeserver ynstellingen ferlitte"
+
+msgid "exit network adapter configuration"
+msgstr "netwurk adapter konfiguraasje ferlitte"
+
+msgid "exit network adapter setup menu"
+msgstr "netwurk adapter ynstellingen menu ferlitte"
+
+msgid "exit network interface list"
+msgstr "netwurk ynterface lyst ferlitte"
+
+msgid "exit networkadapter setup menu"
+msgstr "netwurkadapter ynstellingen menu ferlitte"
+
+msgid "failed"
+msgstr "mislearre"
+
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "triemformaat (BMP, PNG, JPG, GIF)"
+
+msgid "filename"
+msgstr "triemnamme"
+
+msgid "fine-tune your display"
+msgstr "it skerm fyn tune"
+
+msgid "forward to the next chapter"
+msgstr "foarút nei it folgende haadstik"
+
+msgid "free"
+msgstr "frij"
+
+msgid "free diskspace"
+msgstr "freie skiif rûmte"
+
+msgid "go to deep standby"
+msgstr "gean nei djip paraatstand"
+
+msgid "go to standby"
+msgstr "gean nei paraatstand"
+
+msgid "green"
+msgstr "grien"
+
+msgid "hear radio..."
+msgstr "nei radio harkje..."
+
+msgid "help..."
+msgstr "help..."
+
+msgid "hidden network"
+msgstr "ferstoppe netwurk"
+
+msgid "hide extended description"
+msgstr "utbreide beskriuwing ferbergje"
+
+msgid "hide player"
+msgstr "spieler ferbergje"
+
+msgid "horizontal"
+msgstr "horizontal"
+
+msgid "hour"
+msgstr "oere"
+
+msgid "hours"
+msgstr "oeren"
+
+msgid "immediate shutdown"
+msgstr "direkt útskeakelje"
+
+#, python-format
+msgid ""
+"incoming call!\n"
+"%s calls on %s!"
+msgstr ""
+"binnenkommend gesprek!\n"
+"%s skillet nei %s!"
+
+msgid "init module"
+msgstr "CI-Module initialisearje"
+
+msgid "insert mark here"
+msgstr "tuskenfoegje marker"
+
+msgid "jump back to the previous title"
+msgstr "werom nei de foarige titel"
+
+msgid "jump forward to the next title"
+msgstr "foarút nei de folgende titel"
+
+msgid "jump to listbegin"
+msgstr "spring nei begjin fan lyst"
+
+msgid "jump to listend"
+msgstr "spring nei ein fan lyst"
+
+msgid "jump to next marked position"
+msgstr "spring nei folgende index punt"
+
+msgid "jump to previous marked position"
+msgstr "spring nei foarige index punt"
+
+msgid "leave movie player..."
+msgstr "film ôfspieljen ferlitte..."
+
+msgid "left"
+msgstr "links"
+
+msgid "length"
+msgstr "lengte"
+
+msgid "list style compact"
+msgstr "lyst styl kompakt"
+
+msgid "list style compact with description"
+msgstr "lyst styl kompakt mei beskriuwing"
+
+msgid "list style default"
+msgstr "lyst styl standert"
+
+msgid "list style single line"
+msgstr "lyst styl ien rigele"
+
+msgid "load playlist"
+msgstr "ofspiellyst lade"
+
+msgid "locked"
+msgstr "op slot"
+
+msgid "loopthrough to"
+msgstr "trochskeakele nei"
+
+msgid "manual"
+msgstr "hânmatig"
+
+msgid "menu"
+msgstr "menu"
+
+msgid "menulist"
+msgstr "menulyst"
+
+msgid "mins"
+msgstr "min"
+
+msgid "minute"
+msgstr "minuut"
+
+msgid "minutes"
+msgstr "minuten"
+
+msgid "month"
+msgstr "maand"
+
+msgid "move PiP to main picture"
+msgstr "ferplaats PiP nei haad skerm"
+
+msgid "move down to last entry"
+msgstr "Nei it lêste menu item gean"
+
+msgid "move down to next entry"
+msgstr "Nei it folgende menu item gean"
+
+msgid "move up to first entry"
+msgstr "Neit it earste menu item gean"
+
+msgid "move up to previous entry"
+msgstr "Nei it foarige menu item "
+
+msgid "movie list"
+msgstr "film lyst"
+
+msgid "multinorm"
+msgstr "multinorm"
+
+msgid "never"
+msgstr "nea"
+
+msgid "next channel"
+msgstr "folgend kanaal"
+
+msgid "next channel in history"
+msgstr "set folgende kanaal in skiednis"
+
+msgid "no"
+msgstr "nee"
+
+msgid "no HDD found"
+msgstr "Gjin hurde skiif fûn"
+
+msgid "no module found"
+msgstr "gjin CI-Module fûn"
+
+msgid "no standby"
+msgstr "gjin paraatstand"
+
+msgid "no timeout"
+msgstr "gjin tiidslimyt"
+
+msgid "none"
+msgstr "gjin"
+
+msgid "not locked"
+msgstr "net op slot"
+
+msgid "nothing connected"
+msgstr "neat anslúten"
+
+msgid "of a DUAL layer medium used."
+msgstr "fan in DUAL layer medium brûkt"
+
+msgid "of a SINGLE layer medium used."
+msgstr "fan in SINGLE layer medium brûkt"
+
+msgid "off"
+msgstr "uit"
+
+msgid "on"
+msgstr "oan"
+
+msgid "on READ ONLY medium."
+msgstr "fan in ALLINNE-LEZE medium"
+
+msgid "once"
+msgstr "ienmalig"
+
+msgid "open nameserver configuration"
+msgstr "Iepenje nammeserver konfiguraasje"
+
+msgid "open servicelist"
+msgstr "iepenje kanaallyst"
+
+msgid "open servicelist(down)"
+msgstr "iepenje kanaallyst (nei beneden)"
+
+msgid "open servicelist(up)"
+msgstr "iepenje kanaallyst (nei boppe)"
+
+msgid "open virtual keyboard input help"
+msgstr "Iepenje virtueel toetseboerd ynjefte help"
+
+msgid "pass"
+msgstr "trochgean"
+
+msgid "pause"
+msgstr "pause"
+
+msgid "play entry"
+msgstr "rigele ofspielje"
+
+msgid "play from next mark or playlist entry"
+msgstr "Spielje fanôf it folgende punt of ôfspiellyst rigele"
+
+msgid "play from previous mark or playlist entry"
+msgstr "Spielje fanôf it foarige punt of ôfspiellyst rigele"
+
+msgid "please press OK when ready"
+msgstr "druk Ok wanneer klear"
+
+msgid "please wait, loading picture..."
+msgstr "plaatsje wurd laden..."
+
+msgid "previous channel"
+msgstr "foariche kanaal"
+
+msgid "previous channel in history"
+msgstr "set foarich kanaal yn skiednis"
+
+msgid "record"
+msgstr "opnimme"
+
+msgid "recording..."
+msgstr "an it opnimmen..."
+
+msgid "red"
+msgstr "read"
+
+msgid "remove a nameserver entry"
+msgstr "Ferwiderje in nammeserver"
+
+msgid "remove after this position"
+msgstr "nei dizze posysje alles ferwiderje"
+
+msgid "remove all alternatives"
+msgstr "ferwiderje alle alternatieven"
+
+msgid "remove all new found flags"
+msgstr "ferwiderje nij fûn flaggen"
+
+msgid "remove before this position"
+msgstr "foar dizze posysje alles ferwiderje"
+
+msgid "remove bookmark"
+msgstr "boekmerk ferwiderje"
+
+msgid "remove directory"
+msgstr "map ferwiderje"
+
+msgid "remove entry"
+msgstr "ferwiderje yngong"
+
+msgid "remove from parental protection"
+msgstr "ferwiderje út alderlik tasjoch"
+
+msgid "remove new found flag"
+msgstr "ferwiderje nij fun flagge"
+
+msgid "remove selected satellite"
+msgstr "selektearre sat ferwiderje"
+
+msgid "remove this mark"
+msgstr "ferwiderje punt"
+
+msgid "repeat playlist"
+msgstr "ôfspyllyst opnei spylje"
+
+msgid "repeated"
+msgstr "herhelle"
+
+msgid "rewind to the previous chapter"
+msgstr "werom spile nei it foarige haadstik"
+
+msgid "right"
+msgstr "rjochts"
+
+msgid "save last directory on exit"
+msgstr "Lêste map opslaan by ôfsluten"
+
+msgid "save playlist"
+msgstr "ofspiellyst opslaan"
+
+msgid "save playlist on exit"
+msgstr "Ofspiellyst opslaan by ôfsluten"
+
+msgid "scan done!"
+msgstr "sykjen klear !"
+
+#, python-format
+msgid "scan in progress - %d%% done!"
+msgstr "sykjen dwaande - %d%% klear!"
+
+msgid "scan state"
+msgstr "sykjen status"
+
+msgid "second"
+msgstr "seconde"
+
+msgid "second cable of motorized LNB"
+msgstr "twadde kabel fan LNB-motor"
+
+msgid "seconds"
+msgstr "seconden"
+
+msgid "select"
+msgstr "kies"
+
+msgid "select .NFI flash file"
+msgstr "kies .NFI flash triem"
+
+msgid "select image from server"
+msgstr "kies byld fan server"
+
+msgid "select interface"
+msgstr "Kies ynterface"
+
+msgid "select menu entry"
+msgstr "Kies menu item"
+
+msgid "select movie"
+msgstr "kies film"
+
+msgid "select the movie path"
+msgstr "kies it film paad"
+
+msgid "service pin"
+msgstr "service pin"
+
+msgid "setup pin"
+msgstr "pin ynstellingen"
+
+msgid "show DVD main menu"
+msgstr "DVD haadmenu sjen litte"
+
+msgid "show EPG..."
+msgstr "EPG sjen litte..."
+
+msgid "show Infoline"
+msgstr "Infolyne sjen litte"
+
+msgid "show all"
+msgstr "alles sjen litte"
+
+msgid "show alternatives"
+msgstr "alternatieven sjen litte"
+
+msgid "show event details"
+msgstr "EPG details sjen litte"
+
+msgid "show extended description"
+msgstr "útbreide beskriuwing sjen litte"
+
+msgid "show first selected tag"
+msgstr "De earst selektearre merker sjen litte"
+
+msgid "show second selected tag"
+msgstr "De twadde selektearre merker sjen litte"
+
+msgid "show shutdown menu"
+msgstr "útskeakel menu sjen litte"
+
+msgid "show single service EPG..."
+msgstr "ien kanaals EPG sjen litte"
+
+msgid "show tag menu"
+msgstr "label menu sjen litte"
+
+msgid "show transponder info"
+msgstr "transponder ynfo sjen litte"
+
+msgid "shuffle playlist"
+msgstr "meitsje willekeurige ôfspiellyst"
+
+msgid "shutdown"
+msgstr "útskeakelje"
+
+msgid "simple"
+msgstr "simpel"
+
+msgid "skip backward"
+msgstr "efterút oerslaan"
+
+msgid "skip backward (enter time)"
+msgstr "efterút oerslaan (tiid ynjaan)"
+
+msgid "skip forward"
+msgstr "foarút oerslaan"
+
+msgid "skip forward (enter time)"
+msgstr "foarút oerslaan (tiid ynjaan)"
+
+msgid "slide picture in loop"
+msgstr "Plaatjes efter mekoar sjen litte"
+
+msgid "sort by date"
+msgstr "sortearje op datum"
+
+msgid "standard"
+msgstr "standert"
+
+msgid "standby"
+msgstr "paraatstand"
+
+msgid "start cut here"
+msgstr "start stik hjirre"
+
+msgid "start directory"
+msgstr "start map"
+
+msgid "start timeshift"
+msgstr "tiidskowen starte"
+
+msgid "stereo"
+msgstr "stereo"
+
+msgid "stop PiP"
+msgstr "stopje PiP"
+
+msgid "stop entry"
+msgstr "stopje rigele"
+
+msgid "stop recording"
+msgstr "stopje opnimmen"
+
+msgid "stop timeshift"
+msgstr "tiidskowen stopje"
+
+msgid "swap PiP and main picture"
+msgstr "Pip en haad skerm wikselje"
+
+msgid "switch to bookmarks"
+msgstr "skeakelje nei boekmerkers"
+
+msgid "switch to filelist"
+msgstr "skeakelje nei triemlyst"
+
+msgid "switch to playlist"
+msgstr "skeakelje nei ofspiellyst"
+
+msgid "switch to the next audio track"
+msgstr "skeakelje nei it folgende lûd spoor"
+
+msgid "switch to the next subtitle language"
+msgstr "skeakelje nei de folgende undertiteling taal"
+
+msgid "template file"
+msgstr "sjabloon triem"
+
+msgid "textcolor"
+msgstr "tekst kleur"
+
+msgid "this recording"
+msgstr "dit opnimmen"
+
+msgid "this service is protected by a parental control pin"
+msgstr "dit kanaal is net beskikber troch it alderlik tasjoch."
+
+msgid "toggle a cut mark at the current position"
+msgstr "merker oan/út op dizze posysje"
+
+msgid "toggle time, chapter, audio, subtitle info"
+msgstr "tiid, haadstik, lûd en undertiteling ynfo omskeakelje"
+
+msgid "unconfirmed"
+msgstr "net befestigt"
+
+msgid "unknown service"
+msgstr "unbeneame kanaal"
+
+msgid "until restart"
+msgstr "oant nijstart ta"
+
+msgid "user defined"
+msgstr "brûkers ynstelling"
+
+msgid "vertical"
+msgstr "ferticaal"
+
+msgid "view extensions..."
+msgstr "lit útbreidingen sjen..."
+
+msgid "view recordings..."
+msgstr "lit opname triemen sjen..."
+
+msgid "wait for ci..."
+msgstr "wachtsje op ci..."
+
+msgid "wait for mmi..."
+msgstr "wachtsje op mmi"
+
+msgid "waiting"
+msgstr "oan it wachtsjen"
+
+msgid "weekly"
+msgstr "wikeliks"
+
+msgid "whitelist"
+msgstr "wyte lyst"
+
+msgid "working"
+msgstr ""
+
+msgid "yellow"
+msgstr "giel"
+
+msgid "yes"
+msgstr "ja"
+
+msgid "yes (keep feeds)"
+msgstr "ja (feeds hâlde)"
+
+msgid ""
+"your dreambox might be unusable now. Please consult the manual for further "
+"assistance before rebooting your dreambox."
+msgstr ""
+"jo Dreambox is miskien no net brûkber. sjoch yn de hanlieding foar jo jo "
+"Dreambox opnij starte."
+
+msgid "zap"
+msgstr "knip"
+
+msgid "zapped"
+msgstr "knipt"
+
+#~ msgid ""
+#~ "\n"
+#~ "Enigma2 will restart after the restore"
+#~ msgstr ""
+#~ "\n"
+#~ "Enigma2 wurd nij start nei it werom setten."
index 73ec37e3e3be42f7a90607f306334422ca504e0b..51b0dc377984a1349906eb1926683993c499ac59 100755 (executable)
--- a/po/hr.po
+++ b/po/hr.po
@@ -370,8 +370,8 @@ msgstr ""
 "Nakon što Čarobnjak završi, vi trebate zaštititi pojedine usluge. Pogledajte "
 "u korisničke upute kako to učiniti."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Svi"
@@ -410,8 +410,8 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
-msgstr "Izvođač:"
+msgid "Artist"
+msgstr "Izvođač"
 
 msgid "Ask before shutdown:"
 msgstr "Pitaj prije isključivanja:"
@@ -1316,8 +1316,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Žanrovi:"
+msgid "Genre"
+msgstr "Žanrovi"
 
 msgid "German"
 msgstr "Njemački"
@@ -3151,14 +3151,11 @@ msgstr "Vremenski pomak nije moguć!"
 msgid "Timezone"
 msgstr "Vremenska zona"
 
-msgid "Title"
-msgstr ""
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Titl:"
+msgid "Title"
+msgstr "Titl"
 
 msgid "Titleset mode"
 msgstr ""
@@ -3513,8 +3510,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Godina:"
+msgid "Year"
+msgstr "Godina"
 
 msgid "Yes"
 msgstr "Da"
@@ -4481,9 +4478,6 @@ msgstr "tjedno"
 msgid "whitelist"
 msgstr "bijelalista"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "Da "
 
old mode 100755 (executable)
new mode 100644 (file)
index 90de480..7ef60bc
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,8 +7,8 @@ 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"
-"PO-Revision-Date: 2008-10-02 10:56+0100\n"
+"POT-Creation-Date: 2009-01-02 16:24+0100\n"
+"PO-Revision-Date: 2008-11-26 15:36+0100\n"
 "Last-Translator: MediaVox-Extrasat <info@mediavox.hu>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -55,7 +55,7 @@ msgstr "%H:%M"
 
 #, python-format
 msgid "%d jobs are running in the background!"
-msgstr ""
+msgstr "%d feladat fut a háttérben!"
 
 #, python-format
 msgid "%d min"
@@ -96,14 +96,13 @@ msgid "* Only available when entering hidden SSID or network key"
 msgstr ""
 
 msgid ".NFI Download failed:"
-msgstr ""
-
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
+msgstr ".NFI letöltés sikertelen:"
 
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
+"Az .NFI fájl md5sum szignatúra ellenőrzése sikeres. Ezt az imaget "
+"biztonságosan lehet használni!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 könyvtár"
@@ -301,12 +300,6 @@ msgstr "AC3 elsődlegesen"
 msgid "AC3 downmix"
 msgstr "AC3 lekeverés"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Infó"
 
@@ -332,7 +325,7 @@ msgid "Add"
 msgstr "Hozzáadás"
 
 msgid "Add Bookmark"
-msgstr ""
+msgstr "Bookmark hozzáadása"
 
 msgid "Add a mark"
 msgstr "Jelző hozzáadása"
@@ -344,7 +337,7 @@ msgid "Add timer"
 msgstr "Időzítés"
 
 msgid "Add title"
-msgstr ""
+msgstr "Cím hozzáadása"
 
 msgid "Add to bouquet"
 msgstr "Hozzáadás a bouquet listához"
@@ -380,17 +373,14 @@ msgstr ""
 "szolgáltatásokat. Olvassa el a DreamBox kezelési útmutatóját, hogyan kell "
 "ezt elvégeznie."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr ""
 
 msgid "All"
 msgstr "Összes"
 
 msgid "All Satellites"
-msgstr ""
-
-msgid "All..."
-msgstr "Összes..."
+msgstr "Összes műhold"
 
 msgid "Alpha"
 msgstr "Alfa"
@@ -405,7 +395,7 @@ msgid "An empty filename is illegal."
 msgstr "Egy üres fájl érvénytelen."
 
 msgid "An unknown error occured!"
-msgstr ""
+msgstr "Ismeretlen hiba keletkezett!"
 
 msgid "Arabic"
 msgstr "Arab"
@@ -422,8 +412,8 @@ msgstr ""
 "Biztos hogy újra akarja indítani a hálózati interfészt?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Előadó:"
+msgid "Artist"
+msgstr ""
 
 msgid "Ask before shutdown:"
 msgstr "Kikapcsolás elött rákérdez:"
@@ -441,13 +431,13 @@ msgid "Audio Options..."
 msgstr "Hang beállítások..."
 
 msgid "Authoring mode"
-msgstr ""
+msgstr "Authoring mód"
 
 msgid "Auto"
 msgstr "Automata"
 
 msgid "Auto chapter split every ? minutes (0=never)"
-msgstr ""
+msgstr "Automatikus chapter készítés ? percenként (0=soha)"
 
 msgid "Auto scart switching"
 msgstr "Automatikus SCART átkapcsolás"
@@ -459,7 +449,7 @@ msgid "Automatic Scan"
 msgstr "Automatikus keresés"
 
 msgid "Available format variables"
-msgstr ""
+msgstr "Lehetséges formátum variációk"
 
 msgid "B"
 msgstr "B"
@@ -480,7 +470,7 @@ msgid "Back"
 msgstr "Vissza"
 
 msgid "Background"
-msgstr ""
+msgstr "Háttér"
 
 msgid "Backup"
 msgstr "Mentés"
@@ -519,7 +509,7 @@ msgid "Behavior when a movie reaches the end"
 msgstr "Művelet ha egy film a végére ér"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Bookmarkok"
 
 msgid "Brightness"
 msgstr "Fényerő"
@@ -531,7 +521,7 @@ msgid "Burn existing image to DVD"
 msgstr ""
 
 msgid "Burn to DVD..."
-msgstr ""
+msgstr "DVD-re kiírás..."
 
 msgid "Bus: "
 msgstr "Bus: "
@@ -542,7 +532,7 @@ msgid ""
 msgstr "Az OK gomb megnyomásával kijelzésre kerül az info-sáv."
 
 msgid "C"
-msgstr ""
+msgstr "C"
 
 msgid "C-Band"
 msgstr "C-sáv"
@@ -566,7 +556,7 @@ msgid "Cancel"
 msgstr "Mégse"
 
 msgid "Cannot parse feed directory"
-msgstr ""
+msgstr "Nem található a feed könyvtár"
 
 msgid "Capacity: "
 msgstr "Kapacitás:"
@@ -581,7 +571,7 @@ msgid "Change bouquets in quickzap"
 msgstr "Bouquet-ek változtatása a gyors ZAP-ben"
 
 msgid "Change dir."
-msgstr ""
+msgstr "Könyvtár váltása"
 
 msgid "Change pin code"
 msgstr "PIN kód megváltoztatása"
@@ -601,6 +591,9 @@ msgstr "Csatorna"
 msgid "Channel Selection"
 msgstr "Csatorna választás"
 
+msgid "Channel not in services list"
+msgstr ""
+
 msgid "Channel:"
 msgstr "Csatorna:"
 
@@ -662,10 +655,10 @@ msgid "Coderate LP"
 msgstr "LP kódarány"
 
 msgid "Collection name"
-msgstr ""
+msgstr "Gyűjtemény neve"
 
 msgid "Collection settings"
-msgstr ""
+msgstr "Gyűjtemény beállítások"
 
 msgid "Color Format"
 msgstr "Színformátum"
@@ -704,7 +697,7 @@ msgid "Conflicting timer"
 msgstr "Konfliktus időzítő"
 
 msgid "Connected to"
-msgstr ""
+msgstr "Csatlakoztatva"
 
 msgid "Connected to Fritz!Box!"
 msgstr "Fritz!Box!-hoz csatlakoztatva"
@@ -726,10 +719,10 @@ msgid "Constellation"
 msgstr "Együttállás"
 
 msgid "Content does not fit on DVD!"
-msgstr ""
+msgstr "A tartalom nem fér fel a DVD-re!"
 
 msgid "Continue in background"
-msgstr ""
+msgstr "Folytatás a háttérben"
 
 msgid "Continue playing"
 msgstr "Lejátszás folytatása"
@@ -737,14 +730,11 @@ msgstr "Lejátszás folytatása"
 msgid "Contrast"
 msgstr "Kontraszt"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
+msgstr "Nem lehet csatlakozni a Dreambox .NFI Image feed szerveréhez:"
 
 msgid "Could not load Medium! No disc inserted?"
-msgstr ""
+msgstr "Nem lehet betölteni a médiumot! Van bennt lemez?"
 
 msgid "Create DVD-ISO"
 msgstr ""
@@ -754,7 +744,7 @@ msgstr "Film könyvtár létrehozása nem sikerült"
 
 #, python-format
 msgid "Creating directory %s failed."
-msgstr ""
+msgstr "A %s könyvtár létrehozása nem sikerült."
 
 msgid "Creating partition failed"
 msgstr "Partíció létrehozása nem sikerült"
@@ -793,7 +783,7 @@ msgid "Czech"
 msgstr "Cseh"
 
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgid "DHCP"
 msgstr "DHCP"
@@ -808,7 +798,7 @@ msgid "DVD Player"
 msgstr "DVD lejátszó"
 
 msgid "DVD media toolbox"
-msgstr ""
+msgstr "DVD media toolbox"
 
 msgid "Danish"
 msgstr "Dán"
@@ -816,9 +806,6 @@ msgstr "Dán"
 msgid "Date"
 msgstr "Dátum"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "Teljes kikapcsolás"
 
@@ -852,7 +839,7 @@ msgid "Description"
 msgstr "Leírás"
 
 msgid "Destination directory"
-msgstr ""
+msgstr "Célkönyvtár"
 
 msgid "Detected HDD:"
 msgstr "Beépített merevlemez:"
@@ -876,11 +863,11 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC ismétlések"
 
 msgid "Direct playback of linked titles without menu"
-msgstr ""
+msgstr "Linkelt címek menü nélküli közvetlen lejátszása"
 
 #, python-format
 msgid "Directory %s nonexistent."
-msgstr ""
+msgstr "A %s könyvtár nem létezik"
 
 msgid "Disable"
 msgstr "Letiltás"
@@ -924,6 +911,8 @@ msgid ""
 "Do you really want to REMOVE\n"
 "the plugin \"%s\"?"
 msgstr ""
+"Biztos hogy el akarja távolítani\n"
+"a \"%s\" plugint?"
 
 msgid ""
 "Do you really want to check the filesystem?\n"
@@ -941,9 +930,8 @@ msgid ""
 "Do you really want to download\n"
 "the plugin \"%s\"?"
 msgstr ""
-
-msgid "Do you really want to exit?"
-msgstr "Biztos ki akar lépni?"
+"Biztos hogy le akarja tölteni\n"
+"a \"%s\" plugint?"
 
 msgid ""
 "Do you really want to initialize the harddisk?\n"
@@ -954,11 +942,11 @@ msgstr ""
 
 #, python-format
 msgid "Do you really want to remove directory %s from the disk?"
-msgstr ""
+msgstr "Biztos hogy el akarja távolítani a %s könyvtárat a merevlemezről?"
 
 #, python-format
 msgid "Do you really want to remove your bookmark of %s?"
-msgstr ""
+msgstr "El akarja távolítani a %s bolkmarkot?"
 
 msgid ""
 "Do you want to backup now?\n"
@@ -968,7 +956,7 @@ msgstr ""
 "Az OK gombbal elindíthatja, kérem várjon!"
 
 msgid "Do you want to burn this collection to DVD medium?"
-msgstr ""
+msgstr "Fel akarja írni ezt a gyűjteményt a DVD lemezre?"
 
 msgid "Do you want to do a service scan?"
 msgstr "Akar most egy csatornakeresést csinálni?"
@@ -980,13 +968,13 @@ msgid "Do you want to enable the parental control feature on your dreambox?"
 msgstr "Szeretné bekapcsolni a DreamBox gyermekzárját?"
 
 msgid "Do you want to install default sat lists?"
-msgstr ""
+msgstr "Telepíteni akarja az alapértelmezett műholdlistát?"
 
 msgid "Do you want to play DVD in drive?"
 msgstr "Le akarja játszani a behelyezett DVD-t?"
 
 msgid "Do you want to preview this DVD before burning?"
-msgstr ""
+msgstr "Kiírás előtt meg akarja nézni a DVD tartalmat?"
 
 msgid "Do you want to restore your settings?"
 msgstr "Szeretné visszaállítani a beállításait?"
@@ -1016,16 +1004,16 @@ msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr "Kész - A %d csomag módosítása/telepítése %d hibával megtörtént"
 
 msgid "Download"
-msgstr ""
+msgstr "Letöltés"
 
 msgid "Download .NFI-Files for USB-Flasher"
-msgstr ""
+msgstr ".NFI fájlok letöltése az USB Flasherhez"
 
 msgid "Download Plugins"
 msgstr "Pluginek letöltése"
 
 msgid "Download of USB flasher boot image failed: "
-msgstr ""
+msgstr "USB Flasher boot image letöltése sikertelen:"
 
 msgid "Downloadable new plugins"
 msgstr "Letölthető új pluginek"
@@ -1036,14 +1024,11 @@ msgstr "Letölthető pluginek"
 msgid "Downloading"
 msgstr "Letöltés"
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Plugin információk letöltése. Kérem várjon..."
 
 msgid "Dreambox format data DVD (HDTV compatible)"
-msgstr ""
+msgstr "Dreambox formátumú adat DVD (HDTV kompatibilis)"
 
 msgid "Dutch"
 msgstr "Holland"
@@ -1071,7 +1056,7 @@ msgid "Edit Title"
 msgstr ""
 
 msgid "Edit chapters of current title"
-msgstr ""
+msgstr "Jelenlegi cím jeleneteinek módosítása"
 
 msgid "Edit services list"
 msgstr "Védett csatornák kijelölése"
@@ -1086,7 +1071,7 @@ msgid "Edit the network configuration of your Dreambox.\n"
 msgstr "A Dreambox hálózati beállítások módosítása.\n"
 
 msgid "Edit title"
-msgstr ""
+msgstr "Cím módosítása"
 
 msgid "Electronic Program Guide"
 msgstr "Elektronikus Műsorújság"
@@ -1121,9 +1106,6 @@ msgstr ""
 msgid "Encryption Type"
 msgstr "Kódolás típusa"
 
-msgid "End"
-msgstr "Befejezési időpont"
-
 msgid "End time"
 msgstr "Vége idő"
 
@@ -1175,7 +1157,7 @@ msgid "Error"
 msgstr "Hiba"
 
 msgid "Error executing plugin"
-msgstr ""
+msgstr "Plugin indítási hiba"
 
 #, python-format
 msgid ""
@@ -1197,6 +1179,9 @@ msgstr "Végrehajtási állapot:"
 msgid "Execution finished!!"
 msgstr "Végrehajtás befejezve!"
 
+msgid "Exif"
+msgstr ""
+
 msgid "Exit"
 msgstr "Kilépés"
 
@@ -1213,7 +1198,7 @@ msgid "Expert"
 msgstr "Haladó"
 
 msgid "Extended Networksetup Plugin..."
-msgstr ""
+msgstr "Bővített hálózati beállítások Plugin..."
 
 msgid "Extended Setup..."
 msgstr "Bővített beállítások..."
@@ -1269,25 +1254,23 @@ msgstr "Finn"
 msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr ""
-
-msgid "Fix USB stick"
-msgstr ""
+"Először le kell töltenünk az utolsó boot környezetet az USB flasherhez."
 
 msgid "Flash"
-msgstr ""
+msgstr "Flash"
 
 msgid "Flashing failed"
-msgstr ""
-
-msgid "Font size"
-msgstr ""
+msgstr "Flashelés sikertelen"
 
 msgid "Format"
-msgstr ""
+msgstr "Formázás"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Képkocka ismétlések száma non-smooth csévélésnél"
 
+msgid "Frame size in full view"
+msgstr ""
+
 msgid "French"
 msgstr "Francia"
 
@@ -1309,6 +1292,9 @@ msgstr "Pén"
 msgid "Friday"
 msgstr "Péntek"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP szám"
 
@@ -1332,8 +1318,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Átjáró IP címe"
 
-msgid "Genre:"
-msgstr "Műfaj:"
+msgid "Genre"
+msgstr ""
 
 msgid "German"
 msgstr "Német"
@@ -1429,7 +1415,7 @@ msgstr ""
 "Amennyiben az eredmény megfelelő, nyomja meg az OK gombot."
 
 msgid "Image flash utility"
-msgstr ""
+msgstr "Image flash alkalmazás"
 
 msgid "Image-Upgrade"
 msgstr "Image-Frissítés"
@@ -1493,7 +1479,7 @@ msgid "Integrated Ethernet"
 msgstr "Beépített Ethernet"
 
 msgid "Integrated Wireless"
-msgstr ""
+msgstr "Integrált Wireless"
 
 msgid "Intermediate"
 msgstr "Középfokú"
@@ -1506,7 +1492,7 @@ msgstr "Érvénytelen helymeghatározás"
 
 #, python-format
 msgid "Invalid directory selected: %s"
-msgstr ""
+msgstr "A kiválasztott könyvtár érvénytelen: %s"
 
 msgid "Inversion"
 msgstr "Invertálás"
@@ -1586,7 +1572,7 @@ msgid "Link:"
 msgstr "Link:"
 
 msgid "Linked titles with a DVD menu"
-msgstr ""
+msgstr "DVD menüvel linkelt címek"
 
 msgid "List of Storage Devices"
 msgstr "Tárolóeszközök listája"
@@ -1595,10 +1581,10 @@ msgid "Lithuanian"
 msgstr "Litván"
 
 msgid "Load"
-msgstr ""
+msgstr "Betöltés"
 
 msgid "Load Length of Movies in Movielist"
-msgstr ""
+msgstr "Filmek hosszának betöltése a filmlistában"
 
 msgid "Local Network"
 msgstr "Helyi hálózat"
@@ -1609,6 +1595,9 @@ msgstr "Pozíció"
 msgid "Lock:"
 msgstr "Zárol:"
 
+msgid "Log results to harddisk"
+msgstr ""
+
 msgid "Long Keypress"
 msgstr "Hosszú gombnyomás"
 
@@ -1655,10 +1644,10 @@ msgid "MediaPlayer"
 msgstr "Médialejátszó"
 
 msgid "Medium is not a writeable DVD!"
-msgstr ""
+msgstr "A médium nem írható DVD"
 
 msgid "Medium is not empty!"
-msgstr ""
+msgstr "A médium nem üres!"
 
 msgid "Menu"
 msgstr "Menü"
@@ -1666,6 +1655,9 @@ msgstr "Menü"
 msgid "Message"
 msgstr "Üzenet"
 
+msgid "Message..."
+msgstr ""
+
 msgid "Mkfs failed"
 msgstr "Hibás Mkfs-ek"
 
@@ -1725,6 +1717,7 @@ msgstr "KÖVETKEZŐ"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
 msgstr ""
+"NFI image flashelése megörtént. Nyomja meg a Sárga gombot az újraindításhoz!"
 
 msgid "NOW"
 msgstr "MOST"
@@ -1800,7 +1793,7 @@ msgid "No"
 msgstr "Nem"
 
 msgid "No (supported) DVDROM found!"
-msgstr ""
+msgstr "Nincs (támogatott) DVD ROM!"
 
 msgid "No 50 Hz, sorry. :("
 msgstr "Sajnos nincs 50 Hz. :("
@@ -1808,6 +1801,9 @@ msgstr "Sajnos nincs 50 Hz. :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "Nem találtam HDD-t, vagy az nem lett inicializálva!"
 
+msgid "No Networks found"
+msgstr ""
+
 msgid "No backup needed"
 msgstr "Nincs mentésre szükség"
 
@@ -1819,7 +1815,7 @@ msgstr ""
 "(PAT olvasási időtúllépés)"
 
 msgid "No details for this image file"
-msgstr ""
+msgstr "Ehhez az image fájlhoz nincs leírás"
 
 msgid "No event info found, recording indefinitely."
 msgstr "Nincs esemény infó, felvétel korlátlanul."
@@ -1842,6 +1838,9 @@ msgstr "Nem találtam pozícionert támogató tunert."
 msgid "No satellite frontend found!!"
 msgstr "Nem találtam műholdas tunert!!"
 
+msgid "No tags are set on these movies."
+msgstr ""
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Az egyik tuner sincs beállítva DiSEqC pozícionerhez!"
 
@@ -1853,7 +1852,7 @@ msgstr ""
 "Csatornakeresés előtt állítsa be a tunereket."
 
 msgid "No useable USB stick found"
-msgstr ""
+msgstr "Nem találok használható USB sticket"
 
 msgid ""
 "No valid service PIN found!\n"
@@ -1934,12 +1933,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Most "
 
-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 "
@@ -1960,7 +1953,7 @@ msgid "OSD Settings"
 msgstr "OSD beállítások"
 
 msgid "OSD visibility"
-msgstr ""
+msgstr "OSD láthatóság"
 
 msgid "Off"
 msgstr "Ki"
@@ -1975,14 +1968,11 @@ msgid "Online-Upgrade"
 msgstr "Online-Frissítés"
 
 msgid "Only Free scan"
-msgstr ""
+msgstr "Csak FTA keresés"
 
 msgid "Orbital Position"
 msgstr "Pálya pozíció"
 
-msgid "Other..."
-msgstr "Egyéb..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2003,7 +1993,7 @@ msgid "Pan&Scan"
 msgstr "Pan&Scan"
 
 msgid "Parent Directory"
-msgstr ""
+msgstr "Szülő könyvtár"
 
 msgid "Parental control"
 msgstr "Gyermekzár"
@@ -2017,15 +2007,15 @@ msgstr "Gyermekzár beállítások"
 msgid "Parental control type"
 msgstr "Gyermekzár típusa"
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr "Film megállítása a végén"
 
 msgid "PiPSetup"
 msgstr "PIP beállítások"
 
+msgid "PicturePlayer"
+msgstr ""
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2040,7 +2030,7 @@ msgid "Play"
 msgstr "Lejátszás"
 
 msgid "Play Audio-CD..."
-msgstr ""
+msgstr "Audio-CD lejátszás..."
 
 msgid "Play recorded movies..."
 msgstr "Felvett filmek lejátszása..."
@@ -2055,10 +2045,12 @@ msgid "Please change recording endtime"
 msgstr "Kérem változtassa meg a felvétel vége idejét"
 
 msgid "Please check your network settings!"
-msgstr ""
+msgstr "Kérem ellenőrizze a hálózati beállításokat!"
 
 msgid "Please choose .NFI image file from feed server to download"
 msgstr ""
+"Kérem válasszon ki egy .NFI image fájlt a feed szerveren amit le szeretne "
+"tölteni"
 
 msgid "Please choose an extension..."
 msgstr "Kérem válasszon egy funkciót..."
@@ -2069,6 +2061,11 @@ msgstr "Válassza ki a csomagot..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Válassza ki azt a csatornalistát melyet telepíteni szeretne."
 
+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 ""
 "Ha nem tudja mi mit jelent, akkor kérem ne változtassa meg az adatokat!"
@@ -2086,7 +2083,7 @@ msgid "Please enter filename (empty = use current date)"
 msgstr "Adja meg a fájlnevet (üres = jelenlegi adatok használata)"
 
 msgid "Please enter name of the new directory"
-msgstr ""
+msgstr "Kérem adja meg az új konyvtár nevét"
 
 msgid "Please enter the correct pin code"
 msgstr "Adja meg a helyes PIN kódot"
@@ -2101,15 +2098,17 @@ msgid ""
 "Please note that the previously selected media could not be accessed and "
 "therefore the default directory is being used instead."
 msgstr ""
+"Az előbb kiválaszott média nem elérhető és ezért inkább az alapkönyvtár lesz "
+"használva."
 
 msgid "Please press OK to continue."
-msgstr ""
+msgstr "Nyomja meg az OK-t a folytatáshoz."
 
 msgid "Please press OK!"
 msgstr "Nyomja meg az OK-t!"
 
 msgid "Please select .NFI flash image file from medium"
-msgstr ""
+msgstr "Kérem válasszon a mediumról egy .NFI flash Image fájlt"
 
 msgid "Please select a playlist to delete..."
 msgstr "Válasszon ki a playlistát melyet törölni szeretne..."
@@ -2123,11 +2122,11 @@ msgstr "Válasszon ki egy alcsatornát a felvételhez..."
 msgid "Please select a subservice..."
 msgstr "Válasszon egy alcsatornát..."
 
-msgid "Please select keyword to filter..."
-msgstr "Válasszon egy keresési kulcsszót..."
+msgid "Please select tag to filter..."
+msgstr ""
 
 msgid "Please select target directory or medium"
-msgstr ""
+msgstr "Kérem válasszon célkönyvtárat vagy médiumot"
 
 msgid "Please select the movie path..."
 msgstr "Válassza ki a film útvonalát..."
@@ -2155,11 +2154,13 @@ msgid ""
 "Please use the UP and DOWN keys to select your language. Afterwards press "
 "the OK button."
 msgstr ""
+"Kérem használja a FEL és LE gombokat a nyelvezet kiválasztásához. Ez után "
+"nyomja meg az OK gombot."
 
 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..."
@@ -2235,6 +2236,10 @@ msgid "Press OK to activate the settings."
 msgstr "Az OK gombbal aktiválhatja a beállításokat."
 
 msgid "Press OK to edit the settings."
+msgstr "Nyomja meg az OK gombot a beállítások módosításához."
+
+#, python-format
+msgid "Press OK to get further details for %s"
 msgstr ""
 
 msgid "Press OK to scan"
@@ -2247,11 +2252,14 @@ msgid "Prev"
 msgstr "Előző"
 
 msgid "Preview menu"
-msgstr ""
+msgstr "Előnézeti menü"
 
 msgid "Primary DNS"
 msgstr "Elsődleges DNS"
 
+msgid "Priority"
+msgstr ""
+
 msgid "Properties of current title"
 msgstr ""
 
@@ -2270,6 +2278,9 @@ msgstr "Szolgáltató melyet lekeressek"
 msgid "Providers"
 msgstr "Szolgáltatók"
 
+msgid "Quick"
+msgstr "Gyors"
+
 msgid "Quickzap"
 msgstr "GyorsZAP"
 
@@ -2291,29 +2302,29 @@ msgstr "Rádió"
 msgid "Ram Disk"
 msgstr "Ram Disk"
 
+msgid "Random"
+msgstr ""
+
 msgid "Really close without saving settings?"
 msgstr "Bezárjam mentés nélkül?"
 
 msgid "Really delete done timers?"
 msgstr "Töröljem a befejezett idözítéseket?"
 
-msgid "Really delete this timer?"
-msgstr "Biztos töröljem ezt az időzítést?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Biztos ki akar lépni az alcsatorna gyorsZAP módból?"
 
 msgid "Really reboot now?"
-msgstr ""
+msgstr "Biztos újraindítsam most?"
 
 msgid "Really restart now?"
-msgstr ""
+msgstr "Biztos újraindítsam most?"
 
 msgid "Really shutdown now?"
-msgstr ""
+msgstr "Biztos lekapcsoljam most?"
 
 msgid "Reboot"
-msgstr ""
+msgstr "Újraindítás"
 
 msgid "Reception Settings"
 msgstr "Vételi beállítások"
@@ -2328,7 +2339,7 @@ msgid "Recording"
 msgstr "Felvétel"
 
 msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr ""
+msgstr "Felvétel folyik, vagy hamarosan indulni fog!"
 
 msgid "Recordings always have priority"
 msgstr "A felvételnek mindíg elsőbbsége van"
@@ -2342,11 +2353,8 @@ msgstr "Frissítési arány"
 msgid "Refresh rate selection."
 msgstr "Frissítés kiválasztása."
 
-msgid "Remounting stick partition..."
-msgstr ""
-
 msgid "Remove Bookmark"
-msgstr ""
+msgstr "Bokkmark eltávolítása"
 
 msgid "Remove Plugins"
 msgstr "Pluginek eltávolítása"
@@ -2361,9 +2369,12 @@ msgid "Remove plugins"
 msgstr "Pluginek eltávolítása"
 
 msgid "Remove the broken .NFI file?"
-msgstr ""
+msgstr "Eltávolítsam a sérült .NFI fájlt?"
 
 msgid "Remove the incomplete .NFI file?"
+msgstr "Eltávolítsam a hiányos .NFI fájlt?"
+
+msgid "Remove timer"
 msgstr ""
 
 msgid "Remove title"
@@ -2371,7 +2382,7 @@ msgstr "Cím eltávolítása"
 
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
-msgstr ""
+msgstr "%s könyvtárak eltávolítása sikertelen. (Lehet nem üres.)"
 
 msgid "Rename"
 msgstr "Átnevezés"
@@ -2493,13 +2504,13 @@ msgid "Satfinder"
 msgstr "Műholdkereső"
 
 msgid "Sats"
-msgstr ""
+msgstr "Műholdak"
 
 msgid "Saturday"
 msgstr "Szombat"
 
 msgid "Save"
-msgstr ""
+msgstr "Mentés"
 
 msgid "Save Playlist"
 msgstr "Playlista mentése"
@@ -2618,7 +2629,7 @@ msgid "Select channel to record from"
 msgstr "Csatorna kiválasztása melyről fel szeretne venni"
 
 msgid "Select image"
-msgstr ""
+msgstr "Image kiválasztása"
 
 msgid "Select refresh rate"
 msgstr "Válassza ki a frissítési arányt"
@@ -2630,7 +2641,7 @@ msgid "Select video mode"
 msgstr "Válassza ki a video módot"
 
 msgid "Selected source image"
-msgstr ""
+msgstr "Kiválasztott forrás image"
 
 msgid "Send DiSEqC"
 msgstr ""
@@ -2639,7 +2650,7 @@ msgid "Send DiSEqC only on satellite change"
 msgstr ""
 
 msgid "Seperate titles with a main menu"
-msgstr ""
+msgstr "Címek elválasztása egy főmenüvel"
 
 msgid "Sequence repeat"
 msgstr "Szekvencia ismétlés"
@@ -2693,7 +2704,7 @@ msgid "Set Voltage and 22KHz"
 msgstr ""
 
 msgid "Set as default Interface"
-msgstr ""
+msgstr "Jelölje meg mint alapértelmezett interfészt"
 
 msgid "Set interface as default Interface"
 msgstr ""
@@ -2774,7 +2785,7 @@ msgid "Singlestep (GOP)"
 msgstr "Lépés (GOP)"
 
 msgid "Skin..."
-msgstr ""
+msgstr "Skin..."
 
 msgid "Sleep Timer"
 msgstr "Elalvás időzítő"
@@ -2836,9 +2847,6 @@ msgstr "Készenlét"
 msgid "Standby / Restart"
 msgstr "Készenlét / Újraindítás"
 
-msgid "Start"
-msgstr "Indítási időpont"
-
 msgid "Start from the beginning"
 msgstr "Indítsa az elejétől"
 
@@ -2881,6 +2889,12 @@ msgstr "Megállítsam ezt a filmet?"
 msgid "Stop test"
 msgstr "Teszt megállítása"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr ""
+
+msgid "Stop testing plane after # successful transponders"
+msgstr ""
+
 msgid "Store position"
 msgstr "Pozíció tárolása"
 
@@ -2943,6 +2957,15 @@ msgid "TV System"
 msgstr "TV rendszer"
 
 msgid "Table of content for collection"
+msgstr "Gyűjtemény tartalmának táblázata"
+
+msgid "Tag 1"
+msgstr ""
+
+msgid "Tag 2"
+msgstr ""
+
+msgid "Tags"
 msgstr ""
 
 msgid "Terrestrial"
@@ -2951,6 +2974,12 @@ msgstr "Földi"
 msgid "Terrestrial provider"
 msgstr "Földi szolgáltató"
 
+msgid "Test DiSEqC settings"
+msgstr ""
+
+msgid "Test Type"
+msgstr ""
+
 msgid "Test mode"
 msgstr "Teszt mód"
 
@@ -2967,18 +2996,19 @@ msgstr ""
 "Köszönöm hogy használta a varázslót. A készüléke most már be van állítva.\n"
 "Az OK gomb megnyomása után máris használatba veheti a beltérijét."
 
-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 ""
+"A DVD szabvány nem támogatja a H.264 (HDTV) videó streamet. Szeretne "
+"ehelyett létrehozni egy Dreambox formátumó adat DVD-t (mely azonban nem "
+"játszható le a hagyományos lejátszókban)?"
+
+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 "A mentés nem sikerült. Válasszon másik célt ahova menthetem."
@@ -2991,6 +3021,11 @@ msgid ""
 "\n"
 "Do you want to write the USB flasher to this stick?"
 msgstr ""
+"A következő eszközt találtam:\n"
+"\n"
+"%s\n"
+"\n"
+"Fel akarja írni az USB flashert erre a stickre?"
 
 msgid ""
 "The input port should be configured now.\n"
@@ -3015,18 +3050,22 @@ msgid ""
 "you want to burn this image to flash memory? You are doing this at your own "
 "risk!"
 msgstr ""
+"Az md5 ellenőrzés sikertelen, a fájl valószínűleg sérült! Biztos hogy ezt az "
+"imaget be akarja írni a flash memóriába? Csak saját felelősségre!"
 
 msgid ""
 "The md5sum validation failed, the file may be downloaded incompletely or be "
 "corrupted!"
 msgstr ""
+"Az md5 ellenőrzés sikertelen, a fájl valószínűleg nem lett letöltve "
+"teljesen, vagy sérült!"
 
 msgid "The package doesn't contain anything."
 msgstr "A csomag nem tartalmaz semmit."
 
 #, python-format
 msgid "The path %s already exists."
-msgstr ""
+msgstr "A %s útvonal már létezik."
 
 msgid "The pin code has been changed successfully."
 msgstr "A PIN kódot sikeresen megváltoztattam."
@@ -3037,6 +3076,10 @@ msgstr "A megadott PIN kód helytelen."
 msgid "The pin codes you entered are different."
 msgstr "A megadott PIN kódok eltérnek egymástól."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr ""
+
 msgid "The sleep timer has been activated."
 msgstr "Az elalvás időzítő aktiválva lett."
 
@@ -3077,26 +3120,32 @@ msgstr ""
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
-msgstr ""
+msgstr "Ez az .NFI fájl nem tartalmaz valós %s imaget!"
 
 msgid ""
 "This .NFI file does not have a md5sum signature and is not guaranteed to "
 "work. Do you really want to burn this image to flash memory?"
 msgstr ""
+"Ennek az .NFI fájlnak nincs md5sum szignatúrája ezért nem garantált a "
+"működése. Biztos hogy be akarja írni ezt az imaget a flash memóriába?"
 
 msgid ""
 "This .NFI file has a valid md5 signature. Continue programming this image to "
 "flash memory?"
 msgstr ""
+"Ennek az .NFI fájlnak van érvényes md5 szignatórája. Folytassam az image "
+"beírását a flash memóriába?"
 
 msgid ""
 "This DVD RW medium is already formatted - reformatting will erase all "
 "content on the disc."
 msgstr ""
+"Ez a DVD RW medium már meg van formázva - a lemez újraformázásával minden "
+"adat el fog veszni."
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
-msgstr ""
+msgstr "Ez a Dreambox nem tudja dekódolni a %s videó streamet!"
 
 msgid "This is step number 2."
 msgstr "Ez a 2. lépés."
@@ -3171,6 +3220,9 @@ msgstr "Threshold"
 msgid "Thu"
 msgstr "Csü"
 
+msgid "Thumbnails"
+msgstr ""
+
 msgid "Thursday"
 msgstr "Csütörtök"
 
@@ -3202,6 +3254,8 @@ msgid ""
 "Timer overlap in timers.xml detected!\n"
 "Please recheck it!"
 msgstr ""
+"Időzítési átfedést találtam a timers.xml fájlban!\n"
+"Kérem ellenőrizze!"
 
 msgid "Timer sanity error"
 msgstr "Időzítési logikai hiba"
@@ -3218,6 +3272,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Timeshift nem lehetséges!"
 
+msgid "Timeshift path..."
+msgstr ""
+
 msgid "Timezone"
 msgstr "Időzóna"
 
@@ -3227,15 +3284,16 @@ msgstr "Cím"
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Cím:"
-
 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"
@@ -3251,7 +3309,7 @@ msgid "Toneburst A/B"
 msgstr "Toneburst A/B"
 
 msgid "Track"
-msgstr ""
+msgstr "Sáv"
 
 msgid "Translation"
 msgstr "Fordítás"
@@ -3327,6 +3385,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Stick"
 
+msgid "USB stick wizard"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3351,7 +3415,7 @@ msgid "Unmount failed"
 msgstr "Leállítás sikertelen"
 
 msgid "Update"
-msgstr ""
+msgstr "Frissítés"
 
 msgid "Updates your receiver's software"
 msgstr "A beltéri szoftverét frissíti fel"
@@ -3371,11 +3435,14 @@ msgstr "Frissítés"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Dreambox frissítése... Kérem várjon"
 
+msgid "Use"
+msgstr ""
+
 msgid "Use DHCP"
 msgstr "DHCP használata"
 
 msgid "Use Interface"
-msgstr ""
+msgstr "Interfész használata"
 
 msgid "Use Power Measurement"
 msgstr "Forgatási paraméterek használata"
@@ -3435,7 +3502,7 @@ msgid "VCR scart"
 msgstr "VCR scart"
 
 msgid "VMGM (intro trailer)"
-msgstr ""
+msgstr "VMGM (Intro trailer)"
 
 msgid "Video Fine-Tuning"
 msgstr "Video finom beállítások"
@@ -3505,9 +3572,6 @@ msgstr "WSS 4:3-on"
 msgid "Waiting"
 msgstr "Várakozás"
 
-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"
@@ -3535,6 +3599,13 @@ msgid ""
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
+"Üdvözlöm a Vágólista szerkesztőben.\n"
+"\n"
+"Keresse meg a kivágandó rész elejét majd nyomja meg az OK gombot és válassza "
+"ki a 'Vágás eleje' opciót.\n"
+"\n"
+"Majd menjen a kivágandó rész végére, nyomja meg az OK gombot és válassza a "
+"\"Vágás vége\" opciót. Ennyi az egész."
 
 msgid ""
 "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading "
@@ -3570,6 +3641,9 @@ msgstr "Mit szeretne lekeresni?"
 msgid "Where do you want to backup your settings?"
 msgstr "Hova szeretné elmenteni a beállításait?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr ""
+
 msgid "Wireless"
 msgstr "Wireless"
 
@@ -3580,19 +3654,16 @@ msgid "Write error while recording. Disk full?\n"
 msgstr "Felvétel közben írási hiba történt. Megtelt a lemez?\n"
 
 msgid "Write failed!"
-msgstr ""
+msgstr "Íz írás sikertelen!"
 
 msgid "Writing NFI image file to flash completed"
-msgstr ""
-
-msgid "Writing image file to NAND Flash"
-msgstr ""
+msgstr "NFI image beírása a flash-be befejezve"
 
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Év:"
+msgid "Year"
+msgstr ""
 
 msgid "Yes"
 msgstr "Igen"
@@ -3691,6 +3762,9 @@ 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 ""
+"Azt választotta hogy létrehoz egy új .NFI flasher bootolható USB sticket. Ez "
+"az USB sticket újra fogja partícionálni, ezért az azon található összes adat "
+"el fog veszni."
 
 #, python-format
 msgid "You have to wait %s!"
@@ -3709,15 +3783,6 @@ msgstr ""
 "utasításokat, az új firmware fel fogja Önt kérni a saját beállításainak "
 "visszatöltésére."
 
-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 ""
-"Elöbb meg kell határoznia pár kulcsszót!\n"
-"Nyomja meg a menü gombot a kulcsszavak megadásához.\n"
-"Akar most megadni néhány kulcsszót?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3807,7 +3872,7 @@ msgid "add alternatives"
 msgstr "alternatívák hozzáadása"
 
 msgid "add bookmark"
-msgstr ""
+msgstr "bookmark hozzáadása"
 
 msgid "add bouquet"
 msgstr "bouquet hozzáadása"
@@ -3867,27 +3932,36 @@ msgid "audio track (%s) language"
 msgstr ""
 
 msgid "audio tracks"
+msgstr "hangsávok"
+
+msgid "auto"
 msgstr ""
 
 msgid "back"
 msgstr "vissza"
 
 msgid "background image"
+msgstr "háttérkép"
+
+msgid "backgroundcolor"
 msgstr ""
 
 msgid "better"
 msgstr "jobb"
 
+msgid "black"
+msgstr ""
+
 msgid "blacklist"
 msgstr "feketelista"
 
+msgid "blue"
+msgstr ""
+
 #, python-format
 msgid "burn audio track (%s)"
 msgstr ""
 
-msgid "by Exif"
-msgstr "Exif-el"
-
 msgid "change recording (duration)"
 msgstr "felvétel módosítása (hossz)"
 
@@ -3895,10 +3969,10 @@ msgid "change recording (endtime)"
 msgstr "felvétel módosítása (vége időpont)"
 
 msgid "chapters"
-msgstr ""
+msgstr "jelenetek"
 
 msgid "choose destination directory"
-msgstr ""
+msgstr "válasszon célkönyvtárat"
 
 msgid "circular left"
 msgstr "forgó balos"
@@ -3909,9 +3983,6 @@ msgstr "forgó jobbos"
 msgid "clear playlist"
 msgstr "playlista törlése"
 
-msgid "color"
-msgstr ""
-
 msgid "complex"
 msgstr "komplex"
 
@@ -3931,20 +4002,20 @@ msgid "copy to bouquets"
 msgstr "másolás a bouquetek-be"
 
 msgid "create directory"
-msgstr ""
+msgstr "könyvtár létrehozása"
 
 msgid "daily"
 msgstr "naponta"
 
 msgid "day"
-msgstr ""
-
-msgid "delete"
-msgstr "törlés"
+msgstr "nap"
 
 msgid "delete cut"
 msgstr "vágópont törlése"
 
+msgid "delete file"
+msgstr ""
+
 msgid "delete playlist entry"
 msgstr "playlista bejegyzés törlése"
 
@@ -4015,10 +4086,10 @@ msgid "enigma2 and network"
 msgstr ""
 
 msgid "equal to"
-msgstr ""
+msgstr "egyenlő"
 
 msgid "exceeds dual layer medium!"
-msgstr ""
+msgstr "meghaladja a dual layer medium méretét!"
 
 msgid "exit DVD player or return to file browser"
 msgstr "DVD Player bezárása és visszatérés a keresőbe"
@@ -4045,22 +4116,22 @@ msgid "exit networkadapter setup menu"
 msgstr ""
 
 msgid "failed"
+msgstr "sikertelen"
+
+msgid "fileformats (BMP, PNG, JPG, GIF)"
 msgstr ""
 
 msgid "filename"
-msgstr ""
+msgstr "fájlnév"
 
 msgid "fine-tune your display"
 msgstr "megjelenítő finom beállítása"
 
-msgid "font face"
-msgstr ""
-
 msgid "forward to the next chapter"
 msgstr "ugrás a következő chapterre"
 
 msgid "free"
-msgstr ""
+msgstr "szabad"
 
 msgid "free diskspace"
 msgstr "üres terület van a HDD-n."
@@ -4071,7 +4142,7 @@ msgstr "teljes kikapcsoláshoz ugrás"
 msgid "go to standby"
 msgstr "lekapcsolás készenléti módba"
 
-msgid "headline"
+msgid "green"
 msgstr ""
 
 msgid "hear radio..."
@@ -4080,15 +4151,15 @@ msgstr "Rádiólista megnyitása..."
 msgid "help..."
 msgstr "HELP..."
 
+msgid "hidden network"
+msgstr ""
+
 msgid "hide extended description"
 msgstr "bővített leírás elrejtése"
 
 msgid "hide player"
 msgstr "lejátszó elrejtése"
 
-msgid "highlighted button"
-msgstr ""
-
 msgid "horizontal"
 msgstr "vízszintes"
 
@@ -4140,7 +4211,7 @@ msgid "left"
 msgstr "bal"
 
 msgid "length"
-msgstr ""
+msgstr "hossz"
 
 msgid "list style compact"
 msgstr "kompakt lista stílus"
@@ -4161,7 +4232,7 @@ msgid "locked"
 msgstr "zárolt"
 
 msgid "loopthrough to"
-msgstr ""
+msgstr "átfűzés ide"
 
 msgid "manual"
 msgstr "kézi"
@@ -4170,7 +4241,7 @@ msgid "menu"
 msgstr "menü"
 
 msgid "menulist"
-msgstr ""
+msgstr "menülista"
 
 msgid "mins"
 msgstr "perc"
@@ -4220,9 +4291,6 @@ msgstr "nem"
 msgid "no HDD found"
 msgstr "nincs HDD"
 
-msgid "no Picture found"
-msgstr "nincs kép"
-
 msgid "no module found"
 msgstr "nincs behelyezve modul"
 
@@ -4242,10 +4310,10 @@ msgid "nothing connected"
 msgstr "semmi sincs csatlakoztatva"
 
 msgid "of a DUAL layer medium used."
-msgstr ""
+msgstr "DUAL layer medium felhasználva."
 
 msgid "of a SINGLE layer medium used."
-msgstr ""
+msgstr "egyoldalas (single layer) medium felhasználva."
 
 msgid "off"
 msgstr "ki"
@@ -4254,7 +4322,7 @@ msgid "on"
 msgstr "be"
 
 msgid "on READ ONLY medium."
-msgstr ""
+msgstr "a csak olvasható médiumon."
 
 msgid "once"
 msgstr "egyszeri"
@@ -4301,15 +4369,15 @@ msgstr "Előző csatorna"
 msgid "previous channel in history"
 msgstr "Előző csatorna az előzményekben"
 
-msgid "rebooting..."
-msgstr ""
-
 msgid "record"
 msgstr "felvétel"
 
 msgid "recording..."
 msgstr "felvétel..."
 
+msgid "red"
+msgstr ""
+
 msgid "remove a nameserver entry"
 msgstr ""
 
@@ -4326,10 +4394,10 @@ msgid "remove before this position"
 msgstr "e pont elött mindent töröljön"
 
 msgid "remove bookmark"
-msgstr ""
+msgstr "bookmark eltávolítása"
 
 msgid "remove directory"
-msgstr ""
+msgstr "könyvtár eltávolítása"
 
 msgid "remove entry"
 msgstr "bejegyzés törlése"
@@ -4347,7 +4415,7 @@ msgid "remove this mark"
 msgstr "e jelzö eltávolítása"
 
 msgid "repeat playlist"
-msgstr ""
+msgstr "playlista ismétlése"
 
 msgid "repeated"
 msgstr "többszöri"
@@ -4358,9 +4426,15 @@ msgstr "visszatekerés az előző chapterhez"
 msgid "right"
 msgstr "jobb"
 
+msgid "save last directory on exit"
+msgstr ""
+
 msgid "save playlist"
 msgstr "playlista mentése"
 
+msgid "save playlist on exit"
+msgstr ""
+
 msgid "scan done!"
 msgstr "keresés kész!"
 
@@ -4384,10 +4458,10 @@ msgid "select"
 msgstr "válasszon"
 
 msgid "select .NFI flash file"
-msgstr ""
+msgstr "válasszon ki egy .NFI fájlt"
 
 msgid "select image from server"
-msgstr ""
+msgstr "válasszon image-t a szerverről"
 
 msgid "select interface"
 msgstr ""
@@ -4413,6 +4487,9 @@ msgstr "DVD főmenü mutatéása"
 msgid "show EPG..."
 msgstr "EPG megnyitása..."
 
+msgid "show Infoline"
+msgstr ""
+
 msgid "show all"
 msgstr "összes mutatása"
 
@@ -4425,11 +4502,11 @@ msgstr "részletes adatok mutatása"
 msgid "show extended description"
 msgstr "bővített leírás mutatása"
 
-msgid "show first tag"
-msgstr "első cimke mutatása"
+msgid "show first selected tag"
+msgstr ""
 
-msgid "show second tag"
-msgstr "második cimke mutatása"
+msgid "show second selected tag"
+msgstr ""
 
 msgid "show shutdown menu"
 msgstr "kikapcsolási menü"
@@ -4464,12 +4541,12 @@ msgstr "Előre kihagyása"
 msgid "skip forward (enter time)"
 msgstr "Ugrás előre (adja meg az időt)"
 
+msgid "slide picture in loop"
+msgstr ""
+
 msgid "sort by date"
 msgstr "rendezés dátum szerint"
 
-msgid "spaces (top, between rows, left)"
-msgstr ""
-
 msgid "standard"
 msgstr "hagyományos"
 
@@ -4479,6 +4556,9 @@ msgstr "készenlét"
 msgid "start cut here"
 msgstr "vágás belépő pontja"
 
+msgid "start directory"
+msgstr ""
+
 msgid "start timeshift"
 msgstr "Timeshift elindítása"
 
@@ -4501,7 +4581,7 @@ msgid "swap PiP and main picture"
 msgstr "PiP és főkép megcserélése"
 
 msgid "switch to bookmarks"
-msgstr ""
+msgstr "átkapcsolás a bookmarkokra"
 
 msgid "switch to filelist"
 msgstr "kapcsolás fájllistára"
@@ -4515,8 +4595,11 @@ msgstr "átkapcsolás a következő hangsávra"
 msgid "switch to the next subtitle language"
 msgstr "átkapcsolás a következő felirat nyelvre"
 
-msgid "text"
-msgstr "text"
+msgid "template file"
+msgstr ""
+
+msgid "textcolor"
+msgstr ""
 
 msgid "this recording"
 msgstr "ez a felvétel"
@@ -4566,7 +4649,10 @@ msgstr "hetente"
 msgid "whitelist"
 msgstr "fehér lista"
 
-msgid "year"
+msgid "working"
+msgstr ""
+
+msgid "yellow"
 msgstr ""
 
 msgid "yes"
@@ -4601,6 +4687,9 @@ msgstr "zap-elt"
 #~ msgid "#33294a6b"
 #~ msgstr "#33294a6b"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr "Az .NFI Flasher bootolható USB Stick létrehozása sikerült."
+
 #~ msgid "0 V"
 #~ msgstr "0 V"
 
@@ -4624,6 +4713,12 @@ msgstr "zap-elt"
 #~ "Az elalvás kapcsoló le akarja\n"
 #~ "kapcsolni a DreamBox-ot. Mehet?"
 
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "AV-Setup"
 #~ msgstr "AV-beállítások"
 
@@ -4639,6 +4734,12 @@ msgstr "zap-elt"
 #~ msgid "Add title..."
 #~ msgstr "Cím hozzáadása..."
 
+#~ msgid "Album:"
+#~ msgstr "Album:"
+
+#~ msgid "All..."
+#~ msgstr "Összes..."
+
 #~ msgid "Allow Unsupported Modes"
 #~ msgstr "Nem támogatott módok engedélyezése"
 
@@ -4661,6 +4762,12 @@ msgstr "zap-elt"
 #~ "Biztos hogy engedélyezni akarja a helyi hálózatot?\n"
 #~ "\n"
 
+#~ msgid "Artist:"
+#~ msgstr "Előadó:"
+
+#~ msgid "Automatic SSID lookup"
+#~ msgstr "Automatikus SSID keresés"
+
 #~ msgid "Burn"
 #~ msgstr "Égetés"
 
@@ -4691,6 +4798,9 @@ msgstr "zap-elt"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Csatlakozás az Internethez a helyi hálózat segítségével"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "USB flasher image másolása stickre..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD ENTER gomb"
 
@@ -4706,12 +4816,18 @@ msgstr "zap-elt"
 #~ msgid "DVD up key"
 #~ msgstr "DVD fel gomb"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "USB Stick flasher boot image kicsomagolása..."
+
 #~ msgid "Default-Wizard"
 #~ msgstr "Alap-Varázsló"
 
 #~ msgid "Device Setup..."
 #~ msgstr "Eszközök beállítása..."
 
+#~ msgid "DiSEqC Mode"
+#~ msgstr "DiSEqC mód"
+
 #~ msgid "Discontinuous playback at speeds above"
 #~ msgstr "Nem folytatólagos lejátszás a fenti sebességekre"
 
@@ -4732,9 +4848,15 @@ msgstr "zap-elt"
 #~ "Biztos le akarja tölteni a\n"
 #~ "plugint? \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Biztos ki akar lépni?"
+
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "Meg szeretné nézni a vágólista ismertetöt?"
 
+#~ msgid "Downloading image description..."
+#~ msgstr "Image leírások letöltése..."
+
 #~ msgid "Edit current title"
 #~ msgstr "Kijelölt cím módosítása"
 
@@ -4754,12 +4876,24 @@ msgstr "zap-elt"
 #~ "A Dreambox helyi hálózatának engedélyezése.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Befejezési időpont"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Kilépés a varázslóból, beállítás kézi módszerrel késöbb"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Fix USB stick"
+
+#~ msgid "Font size"
+#~ msgstr "Font méret"
+
 #~ msgid "Games / Plugins"
 #~ msgstr "Játékok / Pluginek"
 
+#~ msgid "Genre:"
+#~ msgstr "Műfaj:"
+
 #~ msgid "Hello!"
 #~ msgstr "Helló!"
 
@@ -4799,6 +4933,15 @@ msgstr "zap-elt"
 #~ "Ellenőrizze hogy be van dugva egy a Dreamboxal kompatibilis wireless "
 #~ "hálózati eszköz vagy engedélyezze a helyi hálózati interfészt."
 
+#~ msgid ""
+#~ "No working wireless interface found.\n"
+#~ " Please verify that you have attached a compatible WLAN device or enable "
+#~ "your local network interface."
+#~ msgstr ""
+#~ "Nincs használható wireless interfész.\n"
+#~ " Kérem ellenőrizze hogy van csatlakoztatott WLAN eszköz vagy engedélyezze "
+#~ "a helyi hálózati interfészt."
+
 #~ msgid ""
 #~ "No working wireless networkadapter found.\n"
 #~ "Please verify that you have attached a compatible WLAN USB Stick and your "
@@ -4811,9 +4954,24 @@ msgstr "zap-elt"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nem, az alaphelyzeti listát választom"
 
+#~ 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 ""
+#~ "Most helyezze be az USB sticket (minimális méret: 64 MB) amit meg "
+#~ "szeretne formázni és mint .NFI image flasher használni. Nyomja meg az OK "
+#~ "gombot amint behelyezte hátul a sticket."
+
+#~ msgid "Other..."
+#~ msgstr "Egyéb..."
+
 #~ msgid "Output Type"
 #~ msgstr "Kimeneti típus"
 
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "USB stick partícionálása..."
+
 #~ 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 "
@@ -4845,6 +5003,12 @@ msgstr "zap-elt"
 #~ msgstr ""
 #~ "Válassza ki alul azt a wireless hálózatot melyhez csatlakozni szeretne."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Válasszon egy keresési kulcsszót..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Kérem várjon, az md5 szignatúra ellenőrzés folyik..."
+
 #~ 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 "
@@ -4860,12 +5024,12 @@ msgstr "zap-elt"
 #~ "Dreamboxhoz.\n"
 #~ "\n"
 
-#~ msgid "Quick"
-#~ msgstr "Gyors"
-
 #~ msgid "Rate"
 #~ msgstr "Arány"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "Biztos töröljem ezt az időzítést?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4884,6 +5048,9 @@ msgstr "zap-elt"
 #~ msgstr ""
 #~ "Felvétel van éppen, vagy hamarosan indul... biztos kikapcsoljam most?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Stick partíció újramountolása..."
+
 #~ msgid "Remove service"
 #~ msgstr "Csatorna eltávolítása"
 
@@ -4920,6 +5087,9 @@ msgstr "zap-elt"
 #~ msgid "Socket "
 #~ msgstr "Foglalat"
 
+#~ msgid "Start"
+#~ msgstr "Indítási időpont"
+
 #~ msgid "Startwizard"
 #~ msgstr "Indítási varázsló"
 
@@ -4962,6 +5132,28 @@ msgstr "zap-elt"
 #~ "veheti.\n"
 #~ "Nyomja meg az OK-t a folytatáshoz."
 
+#~ 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 ""
+#~ "Az .NFI image flasher USB stick most készen áll a használatra. Kérem "
+#~ "töltsön le egy .NFI fájlt a feed szerverről és mentse el a stickre. Ez "
+#~ "után indítsa újra a boxot, miközben tartsa lenyomva az előlapon a "
+#~ "'Lefelé' gombot hogy a sticken lévő .NFI flasher induljon el!"
+
+#~ msgid "Title:"
+#~ msgstr "Cím:"
+
+#~ 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."
+#~ msgstr ""
+#~ "Ha biztos ezt akarja csinálni akkor távolítsa most el a cél USB sticket "
+#~ "és kérésre tegye azt vissza. Nyomja meg az OK gombot ha kivette a sticket."
+
 #~ msgid ""
 #~ "Unable to initialize harddisk.\n"
 #~ "Please refer to the user manual.\n"
@@ -4977,6 +5169,9 @@ msgstr "zap-elt"
 #~ msgid "Video-Setup"
 #~ msgstr "Videó-beállítások"
 
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Várakozás az USB stick behelyezésére..."
+
 #~ msgid ""
 #~ "Welcome.\n"
 #~ "\n"
@@ -4991,6 +5186,21 @@ msgstr "zap-elt"
 #~ "\n"
 #~ "Nyomja meg az OK gombot a távirányítón a következő lépéshez."
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Image fájl beírása a NAND Flashbe"
+
+#~ msgid "Year:"
+#~ msgstr "Év:"
+
+#~ 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 ""
+#~ "Elöbb meg kell határoznia pár kulcsszót!\n"
+#~ "Nyomja meg a menü gombot a kulcsszavak megadásához.\n"
+#~ "Akar most megadni néhány kulcsszót?"
+
 #~ msgid "You selected a playlist"
 #~ msgstr "Ön egy playlistát választott ki"
 
@@ -5029,21 +5239,42 @@ msgstr "zap-elt"
 #~ "A wireless LAN internet kapcsolata nem műkösik!\n"
 #~ "Kérem válassza ki mit szeretne tenni."
 
+#~ msgid "by Exif"
+#~ msgstr "Exif-el"
+
+#~ msgid "color"
+#~ msgstr "szín"
+
+#~ msgid "delete"
+#~ msgstr "törlés"
+
 #~ msgid "empty/unknown"
 #~ msgstr "üres/ismeretlen"
 
 #~ msgid "equal to Socket A"
 #~ msgstr "olyan mint az A foglalat"
 
+#~ msgid "font face"
+#~ msgstr "font arculat"
+
 #~ msgid "full /etc directory"
 #~ msgstr "a teljes /etc könyvtár"
 
+#~ msgid "headline"
+#~ msgstr "főcím"
+
+#~ msgid "highlighted button"
+#~ msgstr "kiemelt gomb"
+
 #~ msgid "list"
 #~ msgstr "lista"
 
 #~ msgid "loopthrough to socket A"
 #~ msgstr "átfüzés az A foglalathoz"
 
+#~ msgid "no Picture found"
+#~ msgstr "nincs kép"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "csak az /etc/enigma2 könyvtár"
 
@@ -5053,6 +5284,9 @@ msgstr "zap-elt"
 #~ msgid "play previous playlist entry"
 #~ msgstr "előző playlista bejegyzés lejátszása"
 
+#~ msgid "rebooting..."
+#~ msgstr "újraindítás..."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "%d services found!"
@@ -5084,8 +5318,23 @@ msgstr "zap-elt"
 #~ msgid "select Slot"
 #~ msgstr "válasszon nyílást"
 
+#~ msgid "show first tag"
+#~ msgstr "első cimke mutatása"
+
+#~ msgid "show second tag"
+#~ msgstr "második cimke mutatása"
+
 #~ msgid "skip backward (self defined)"
 #~ msgstr "Ugrás visszafelé (előre megadott)"
 
 #~ msgid "skip forward (self defined)"
 #~ msgstr "Ugrás előre (előre megadott)"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "szünetek (fennt, sorok között, bal oldalt)"
+
+#~ msgid "text"
+#~ msgstr "text"
+
+#~ msgid "year"
+#~ msgstr "év"
index 7ce1bc7c7fa5ccc01c04eec23f02488bc1994770..419fc8911cd5328eec75ded34d094d040fba4b02 100644 (file)
--- a/po/is.po
+++ b/po/is.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Icelandic translation v.1.41\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
+"POT-Creation-Date: 2008-10-23 17:06+0200\n"
 "PO-Revision-Date: 2008-11-13 09:24-0000\n"
 "Last-Translator: Baldur Sveinsson <baldur@oreind.is>\n"
 "Language-Team: Polar Team/LT Team <baddi@oreind.is>\n"
@@ -88,22 +88,14 @@ msgstr "(tómt)"
 msgid "(show optional DVD audio menu)"
 msgstr "(sýna viðbótar DVD hljóð valmynd)"
 
-msgid "* Only available if more than one interface is active."
-msgstr ""
-
-msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
-
 msgid ".NFI Download failed:"
 msgstr ".NFI Niðurhal tókst ekki:"
 
 msgid ".NFI Flasher bootable USB stick successfully created."
 msgstr ".NFI keyranlegt stýrikerfi af USB staut tilbúið."
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI skráin stóðst md5sum undirskrifta próf. Þú getur notað þetta stýrikerfi!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI skráin stóðst md5sum undirskrifta próf. Þú getur notað þetta stýrikerfi!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 mappa"
@@ -247,19 +239,11 @@ msgstr ""
 "Upptaka er nú í gangi.\n"
 "Hvað viltu núna gera?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Upptaka er nú í gangi. Stoppið vinsamlega upptökuna áður en að þú reynir að "
-"stilla staðsetjara."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Upptaka er nú í gangi. Stoppið vinsamlega upptökuna áður en að þú reynir að stilla staðsetjara."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Upptaka er í gangi núna. Stoppaðu upptökuna áður en að þú byrjar "
-"gervihnattaleit."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Upptaka er í gangi núna. Stoppaðu upptökuna áður en að þú byrjar gervihnattaleit."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -352,15 +336,8 @@ msgstr "Bæta við rásavönd"
 msgid "Add to favourites"
 msgstr "Bæta við uppáhaldsrásir"
 
-msgid ""
-"Adjust the color settings so that all the color shades are distinguishable, "
-"but appear as saturated as possible. If you are happy with the result, press "
-"OK to close the video fine-tuning, or use the number keys to select other "
-"test screens."
-msgstr ""
-"Stilltu lita stillingar þannig að öll litablæbrigði séu aðgreinanleg og eru "
-"eins björt og hægt er. Ef þú ert ánægður með árangurinn, ýttu þá á OK til að "
-"loka stillinga skjánum eða ýttu á númeralykil til að velja aðra prufumynd."
+msgid "Adjust the color settings so that all the color shades are distinguishable, but appear as saturated as possible. If you are happy with the result, press OK to close the video fine-tuning, or use the number keys to select other test screens."
+msgstr "Stilltu lita stillingar þannig að öll litablæbrigði séu aðgreinanleg og eru eins björt og hægt er. Ef þú ert ánægður með árangurinn, ýttu þá á OK til að loka stillinga skjánum eða ýttu á númeralykil til að velja aðra prufumynd."
 
 msgid "Advanced"
 msgstr "Sérfræði"
@@ -371,12 +348,8 @@ msgstr "Sérfræði myndstillingar"
 msgid "After event"
 msgstr "Eftir atriði"
 
-msgid ""
-"After the start wizard is completed, you need to protect single services. "
-"Refer to your dreambox's manual on how to do that."
-msgstr ""
-"Eftir að álfurinn er búinn þá þarft þú að læsa sumum rásum. Skoðaðu "
-"leiðbeiningarnar til að sjá hvernig á að gera það."
+msgid "After the start wizard is completed, you need to protect single services. Refer to your dreambox's manual on how to do that."
+msgstr "Eftir að álfurinn er búinn þá þarft þú að læsa sumum rásum. Skoðaðu leiðbeiningarnar til að sjá hvernig á að gera það."
 
 msgid "Album:"
 msgstr "Albúm:"
@@ -408,11 +381,6 @@ msgstr "Óþekkt villa varð!"
 msgid "Arabic"
 msgstr "Arabíska"
 
-msgid ""
-"Are you sure you want to activate this network configuration?\n"
-"\n"
-msgstr ""
-
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
 "\n"
@@ -453,6 +421,9 @@ msgstr "Sjálfvirk skipting á scarti"
 msgid "Automatic"
 msgstr "Sjálfvirkt"
 
+msgid "Automatic SSID lookup"
+msgstr "Leita að SSID sjálfvirkt"
+
 msgid "Automatic Scan"
 msgstr "Sjálfvirk leit"
 
@@ -525,21 +496,14 @@ msgstr "Birta"
 msgid "Burn DVD"
 msgstr "Brenna DVD"
 
-msgid "Burn existing image to DVD"
-msgstr ""
-
 msgid "Burn to DVD..."
 msgstr "Brenna á DVD"
 
 msgid "Bus: "
 msgstr "Rás:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-"Með því að ýta á OK takkann á fjárstýringunni þá sjást upplýsingarnar á "
-"skjánum."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
+msgstr "Með því að ýta á OK takkann á fjárstýringunni þá sjást upplýsingarnar á skjánum."
 
 msgid "C"
 msgstr "C"
@@ -691,9 +655,6 @@ msgstr "Compact flash kort"
 msgid "Complete"
 msgstr "Búið"
 
-msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
-
 msgid "Configuration Mode"
 msgstr "Stillingar"
 
@@ -746,9 +707,6 @@ msgstr "Gat ekki tengt við Dreambox .NFI stýrikerfis vefþjón:"
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Gat ekki lesið disk! Er enginn diskur í drifi?"
 
-msgid "Create DVD-ISO"
-msgstr ""
-
 msgid "Create movie folder failed"
 msgstr "Tókst ekki að búa til bíómyndamöppu"
 
@@ -869,6 +827,9 @@ msgstr "DiSEqC A/B"
 msgid "DiSEqC A/B/C/D"
 msgstr "DiSEqC A/B/C/D"
 
+msgid "DiSEqC Mode"
+msgstr "DiSEqC Gerð"
+
 msgid "DiSEqC mode"
 msgstr "DiSEqC gerð"
 
@@ -1065,15 +1026,9 @@ msgstr "VILLA - gat ekki opnað leit (%s)!"
 msgid "East"
 msgstr "Austur"
 
-msgid "Edit"
-msgstr ""
-
 msgid "Edit DNS"
 msgstr "Breyta DNS"
 
-msgid "Edit Title"
-msgstr ""
-
 msgid "Edit chapters of current title"
 msgstr "Breyta kafla núverandi titils"
 
@@ -1119,9 +1074,6 @@ msgstr "Kóðun"
 msgid "Encryption Key"
 msgstr "Kóðunar lykill"
 
-msgid "Encryption Keytype"
-msgstr ""
-
 msgid "Encryption Type"
 msgstr "Gerð kóðunar"
 
@@ -1156,19 +1108,13 @@ msgstr ""
 #.       be interpreted as "Give speed as input". The intended meaning is
 #.       instead "Initial speed when starting winding", i.e. the speed at
 #.       which "winding mode" is entered when first pressing "rewind" or
-#.       "fast forward". 
+#.       "fast forward".
 msgid "Enter Fast Forward at speed"
 msgstr "Hraðspólunar hraði áfram, fyrst"
 
 msgid "Enter Rewind at speed"
 msgstr "Hraðspólunar hraði til baka, fyrst"
 
-msgid "Enter WLAN network name/SSID:"
-msgstr ""
-
-msgid "Enter WLAN passphrase/key:"
-msgstr ""
-
 msgid "Enter main menu..."
 msgstr "Fara í aðal valmynd..."
 
@@ -1261,20 +1207,11 @@ msgstr "Fínstilla"
 msgid "Finished"
 msgstr "Búið"
 
-msgid "Finished configuring your network"
-msgstr ""
-
-msgid "Finished restarting your network"
-msgstr ""
-
 msgid "Finnish"
 msgstr "Finnska"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-"Fyrst þarf að hala niður nýjustu uppfærslum til að búa til keyranlegan USB "
-"Staut. "
+msgid "First we need to download the latest boot environment for the USB flasher."
+msgstr "Fyrst þarf að hala niður nýjustu uppfærslum til að búa til keyranlegan USB Staut. "
 
 msgid "Fix USB stick"
 msgstr "Laga USB staut"
@@ -1374,9 +1311,6 @@ msgstr "Uppsetning harða disks"
 msgid "Harddisk standby after"
 msgstr "Harði diskur í biðstöðu eftir"
 
-msgid "Hidden network SSID"
-msgstr ""
-
 msgid "Hierarchy Information"
 msgstr "Stigskipta upplýsingar"
 
@@ -1392,12 +1326,6 @@ msgstr "Ungverska"
 msgid "IP Address"
 msgstr "IP Netfang"
 
-msgid "ISO file is too large for this filesystem!"
-msgstr ""
-
-msgid "ISO path"
-msgstr ""
-
 msgid "Icelandic"
 msgstr "Íslenska"
 
@@ -1412,21 +1340,12 @@ msgstr ""
 "tengingunni.Ýttu á OK til að fara til baka."
 
 msgid ""
-"If your TV has a brightness or contrast enhancement, disable it. If there is "
-"something called \"dynamic\", set it to standard. Adjust the backlight level "
-"to a value suiting your taste. Turn down contrast on your TV as much as "
-"possible.\n"
-"Then turn the brightness setting as low as possible, but make sure that the "
-"two lowermost shades of gray stay distinguishable.\n"
-"Do not care about the bright shades now. They will be set up in the next "
-"step.\n"
+"If your TV has a brightness or contrast enhancement, disable it. If there is something called \"dynamic\", set it to standard. Adjust the backlight level to a value suiting your taste. Turn down contrast on your TV as much as possible.\n"
+"Then turn the brightness setting as low as possible, but make sure that the two lowermost shades of gray stay distinguishable.\n"
+"Do not care about the bright shades now. They will be set up in the next step.\n"
 "If you are happy with the result, press OK."
 msgstr ""
-"Ef sjónvarpið þitt hefur skerpu aukningu (contrast enhancement), slökktu þá "
-"á því. Ef það er með eitthvað kallað \"dynamic\", settu það þá á Standard "
-"eða Normal. Stilltu birtu baklýsingar eins og þér finnst best. Minnkaðu "
-"skerpu (contrast) stillingu sjónvarpsins eins mikið og hægt er en vertu samt "
-"viss um að rétt sjá dekkstu tvo grátónana.\n"
+"Ef sjónvarpið þitt hefur skerpu aukningu (contrast enhancement), slökktu þá á því. Ef það er með eitthvað kallað \"dynamic\", settu það þá á Standard eða Normal. Stilltu birtu baklýsingar eins og þér finnst best. Minnkaðu skerpu (contrast) stillingu sjónvarpsins eins mikið og hægt er en vertu samt viss um að rétt sjá dekkstu tvo grátónana.\n"
 "Ekki hafa áhyggjur af björtum svæðum núna. Þeir verða stilltir næst.\n"
 "Ef stillingin er orðin eins og þér finnst best ýttu þá á OK."
 
@@ -1439,10 +1358,8 @@ msgstr "Uppfærsla stýrikerfi"
 msgid "In Progress"
 msgstr "Í vinnslu"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Til að taka upp á tíma stillingu þá var sjónvarpið stillt á upptökurás!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Til að taka upp á tíma stillingu þá var sjónvarpið stillt á upptökurás!\n"
 
 msgid "Increased voltage"
 msgstr "Aukin spenna"
@@ -1830,10 +1747,8 @@ msgstr "Engar upplýsingar um atriði fundust, tek upp endalaust."
 msgid "No free tuner!"
 msgstr "Enginn laus móttakari!"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Enginn hugbúnaðar pakki uppfærður enn. Athugðu netkerfi og reyndu aftur."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Enginn hugbúnaðar pakki uppfærður enn. Athugðu netkerfi og reyndu aftur."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "Engin mynd á skjánum? Ýttu á EXIT og prófaðu aftur."
@@ -1876,22 +1791,25 @@ msgstr ""
 "Ef þú svarar \"Nei\" þá er engin læsing virk."
 
 msgid ""
-"No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
+"No working local networkadapter found.\n"
+"Please verify that you have attached a network cable and your Network is configured correctly."
 msgstr ""
+"Engin nothæf nettenging fannst.\n"
+"Vinsamlega athugið hvort að netsnúra sé tengd og að stillingar netkerfis séu réttar."
 
 msgid ""
-"No working wireless network adapter found.\n"
-"Please verify that you have attached a compatible WLAN device and your "
-"network is configured correctly."
+"No working wireless interface found.\n"
+" Please verify that you have attached a compatible WLAN device or enable your local network interface."
 msgstr ""
+"Engin nothæf þráðlaus nettenging fannst.\n"
+"Vinsamlega athugið hvort að það sé tengt þráðlaust netkort eða athugaðu stillingar þínar."
 
 msgid ""
-"No working wireless network interface found.\n"
-" Please verify that you have attached a compatible WLAN device or enable "
-"your local network interface."
+"No working wireless networkadapter found.\n"
+"Please verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly."
 msgstr ""
+"Engin nothæf þráðlaus nettenging fannst.\n"
+"Vinsamlega athugið hvort að það sé tengt þráðlaust USB netkort eða athugaðu stillingar þínar."
 
 msgid "No, but restart from begin"
 msgstr "Nei, en byrja frá byrjun"
@@ -1919,12 +1837,8 @@ msgid "Norwegian"
 msgstr "Norska"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Ekki nóg diskpláss. Taktu til á diskinum og reyndu aftur. (%d MB þarf, %d MB "
-"tiltæk)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Ekki nóg diskpláss. Taktu til á diskinum og reyndu aftur. (%d MB þarf, %d MB tiltæk)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -1936,23 +1850,11 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Spila núna"
 
-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 ""
-"Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota fyrir "
-"keyranlegar USB stýrikerfi. Ýttu á OK þegar þú ert búinn að setja hann í "
-"samband."
+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 "Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota fyrir keyranlegar USB stýrikerfi. Ýttu á OK þegar þú ert búinn að setja hann í samband."
 
-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."
-msgstr ""
-"Notaðu núna skerpu (contrast) stillingar til að auka birtu bakgrunns eins "
-"mikið og hægt er en vertu samt viss um að sjá mun á björtustu tveim hlutum "
-"myndarinnar. Þegar þú hefur gert það ýttu þá á OK."
+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."
+msgstr "Notaðu núna skerpu (contrast) stillingar til að auka birtu bakgrunns eins mikið og hægt er en vertu samt viss um að sjá mun á björtustu tveim hlutum myndarinnar. Þegar þú hefur gert það ýttu þá á OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2100,12 +2002,8 @@ msgstr "Sláðu inn gamla kóðann"
 msgid "Please follow the instructions on the TV"
 msgstr "Fylgdu leiðbeiningum á skjá."
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Vinsamlega athugið að áður valinn diskur er ekki tiltækur núna og þá verður "
-"notuð sjálfgefin mappa í staðinn."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Vinsamlega athugið að áður valinn diskur er ekki tiltækur núna og þá verður notuð sjálfgefin mappa í staðinn."
 
 msgid "Please press OK to continue."
 msgstr "Ýttu á OK til að halda áfram."
@@ -2155,28 +2053,12 @@ msgstr ""
 "Ýttu á Bouquet +/- til að breyta stærð á glugga.\n"
 "Ýttu á OK til að fara aftur í venjulega stillingu eða EXIT til að hætta við."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Vinsamlega notið UP og NIÐUR takka til að velja tungumál. Ýttu svo á OK til "
-"að nota."
-
-msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Vinsamlega notið UP og NIÐUR takka til að velja tungumál. Ýttu svo á OK til að nota."
 
 msgid "Please wait for md5 signature verification..."
 msgstr "Vinsamlega bíðið eftir staðfestingu md5 staðfestingu..."
 
-msgid "Please wait while we configure your network..."
-msgstr ""
-
-msgid "Please wait while your network is restarting..."
-msgstr ""
-
-msgid "Please wait..."
-msgstr ""
-
 msgid "Please wait... Loading list..."
 msgstr "Vinsamlega bíðið.. les inn lista...."
 
@@ -2258,9 +2140,6 @@ msgstr "Forskoða valmynd"
 msgid "Primary DNS"
 msgstr "Aðal DNS"
 
-msgid "Properties of current title"
-msgstr ""
-
 msgid "Protect services"
 msgstr "Læsa rásum"
 
@@ -2397,9 +2276,6 @@ msgstr "Endurtaka"
 msgid "Reset"
 msgstr "Endursetja"
 
-msgid "Reset and renumerate title names"
-msgstr ""
-
 msgid "Resolution"
 msgstr "Upplausn"
 
@@ -2424,11 +2300,8 @@ msgstr "Endurræsa nettengingu og netkort.\n"
 msgid "Restore"
 msgstr "Setja inn"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Innsetning stillinga er lokið. Ýtið á OK til að virkja innsettar stillingar."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Innsetning stillinga er lokið. Ýtið á OK til að virkja innsettar stillingar."
 
 msgid "Resume from last position"
 msgstr "Halda áfram frá sama stað og síðast"
@@ -2578,14 +2451,10 @@ msgstr "Leita á bandi US MID"
 msgid "Scan band US SUPER"
 msgstr "Leita á bandi US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Leita að þráðlausum netkerfum og tengjast þeim með þráðlausa USB netkortinu\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Leita að þráðlausum netkerfum og tengjast þeim með þráðlausa USB netkortinu\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
 msgstr "Leita sjálfgefna gervihnetti, raðað eftir hnöttum með tengdum mótor"
 
 msgid "Search east"
@@ -2636,12 +2505,6 @@ msgstr "Veldu mynd stillingu"
 msgid "Selected source image"
 msgstr "Veldu grunn stýrikerfi"
 
-msgid "Send DiSEqC"
-msgstr ""
-
-msgid "Send DiSEqC only on satellite change"
-msgstr ""
-
 msgid "Seperate titles with a main menu"
 msgstr "Taka út titla af aðalvalmynd"
 
@@ -2693,15 +2556,9 @@ msgstr "Upplýsingar"
 msgid "Services"
 msgstr "Rásir"
 
-msgid "Set Voltage and 22KHz"
-msgstr ""
-
 msgid "Set as default Interface"
 msgstr "Gera að sjálfgefnu netkorti"
 
-msgid "Set interface as default Interface"
-msgstr ""
-
 msgid "Set limits"
 msgstr "Setja mörk"
 
@@ -2759,9 +2616,6 @@ msgstr "Svipuð útsending:"
 msgid "Simple"
 msgstr "Einfalt"
 
-msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
-
 msgid "Single"
 msgstr "Einn"
 
@@ -2940,9 +2794,6 @@ msgstr ""
 "Email: oreind@oreind.is\n"
 "Vefur: http://www.oreind.is"
 
-msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
-
 msgid "TV System"
 msgstr "Sjónvarps kerfi"
 
@@ -2971,24 +2822,11 @@ msgstr ""
 "Takk fyrir að nota álfinn. Núna er móttakarinn tilbúinn til notkunar.\n"
 "Ýttu á OK til að byrja að nota móttakarann,"
 
-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 ""
-".NFI stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið "
-"niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá getur "
-"þú endurræst og með því að halda niður 'Niður' takka framaná móttakaranum þá "
-"getur þú valið stýrikerfi frá stautnum!"
+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 ".NFI stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá getur þú endurræst og með því að halda niður 'Niður' takka framaná móttakaranum þá getur þú valið stýrikerfi frá stautnum!"
 
-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 ""
-"DVD staðallinn er ekki með möguleika á H.264 (HDTV). Viltu búa til Dreambox "
-"gagna disk (sem ekki er hægt að venjulegum DVD spilara) í staðinn."
+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 "DVD staðallinn er ekki með möguleika á H.264 (HDTV). Viltu búa til Dreambox gagna disk (sem ekki er hægt að venjulegum DVD spilara) í staðinn."
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Afritun mistókst. Veldu annan stað fyrir afritið."
@@ -3009,8 +2847,7 @@ msgstr ""
 
 msgid ""
 "The input port should be configured now.\n"
-"You can now configure the screen by displaying some test pictures. Do you "
-"want to do that now?"
+"You can now configure the screen by displaying some test pictures. Do you want to do that now?"
 msgstr ""
 "Stilla þarf inngang núna.\n"
 "Þú getur stillt skjáinn með því að nota prufumyndir. Viltu gera það núna?"
@@ -3018,28 +2855,14 @@ msgstr ""
 msgid "The installation of the default services lists is finished."
 msgstr "Innsetning sjálfgefins rásalista er lokið."
 
-msgid ""
-"The installation of the default settings is finished. You can now continue "
-"configuring your Dreambox by pressing the OK button on the remote control."
-msgstr ""
-"Innsetning sjálfgefins rásalista er lokið. Þú getur nú haldið áfram að "
-"stilla Dreamboxið með því að ýta á OK takkann á fjarstýringunni."
+msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."
+msgstr "Innsetning sjálfgefins rásalista er lokið. Þú getur nú haldið áfram að stilla Dreamboxið með því að ýta á OK takkann á fjarstýringunni."
 
-msgid ""
-"The md5sum validation failed, the file may be corrupted! Are you sure that "
-"you want to burn this image to flash memory? You are doing this at your own "
-"risk!"
-msgstr ""
-"Staðfesting md5sum tókst ekki, skráin gæti verið skemmd! Ertu viss um að þú "
-"viljir setja þetta stýrikerfi inn í minni? Það er ekki mælt með því að gera "
-"það!"
+msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"
+msgstr "Staðfesting md5sum tókst ekki, skráin gæti verið skemmd! Ertu viss um að þú viljir setja þetta stýrikerfi inn í minni? Það er ekki mælt með því að gera það!"
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"Staðfesting md5sum tókst ekki, það gæti vantað hluta á skrána eða þá að hún "
-"sé skemmd!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "Staðfesting md5sum tókst ekki, það gæti vantað hluta á skrána eða þá að hún sé skemmd!"
 
 msgid "The package doesn't contain anything."
 msgstr "Þessi pakki inniheldur ekkert."
@@ -3073,8 +2896,7 @@ msgstr ""
 "Þráðlausa netkortið er ekki tengt!\n"
 "Vinsamlega tengið það."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
 msgstr "Álfurinn getur tekið afrit af stillingum þínum. Viltu taka afrit núna?"
 
 msgid "The wizard is finished now."
@@ -3097,26 +2919,14 @@ msgstr ""
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Þessi .NFI skrá inniheldur ekki %s stýrikerfi í lagi!"
 
-msgid ""
-"This .NFI file does not have a md5sum signature and is not guaranteed to "
-"work. Do you really want to burn this image to flash memory?"
-msgstr ""
-"Þessi .NFI skrá er ekki með md5sum undirskrift og er ekki hægt að tryggja að "
-"hún virki. Viltu örugglega forrita hana inn í minni?"
+msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"
+msgstr "Þessi .NFI skrá er ekki með md5sum undirskrift og er ekki hægt að tryggja að hún virki. Viltu örugglega forrita hana inn í minni?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Þessi .NFI skrá er með gilda md5 undirskrift. Viltu halda áfram að forrita "
-"minni móttakarans með henni?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Þessi .NFI skrá er með gilda md5 undirskrift. Viltu halda áfram að forrita minni móttakarans með henni?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Þessi DVD RW diskur er þegar formaður - endurformun mun eyða öllum gögnum af "
-"honum."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Þessi DVD RW diskur er þegar formaður - endurformun mun eyða öllum gögnum af honum."
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
@@ -3132,14 +2942,12 @@ msgid ""
 "This test checks for configured Nameservers.\n"
 "If you get a \"unconfirmed\" message:\n"
 "- please check your DHCP, cabling and Adapter setup\n"
-"- if you configured your Nameservers manually please verify your entries in "
-"the \"Nameserver\" Configuration"
+"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"
 msgstr ""
 "Þessi prufun athugar stillingar nafnaþjóns.\n"
 "Ef þú færð \"óstaðfest\" skilaboð:\n"
 "- athugaðu DHCP þjónustu, tengingar og uppsetningu\n"
-"- ef að þú hefur sett upp nafnaþjón handvirkt athugaðu þá þínar nafnaþjóns "
-"stillingar."
+"- ef að þú hefur sett upp nafnaþjón handvirkt athugaðu þá þínar nafnaþjóns stillingar."
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -3164,21 +2972,17 @@ msgstr ""
 "- athugaðu DHCP uppsetningu, tengingar eða uppsetningu nets"
 
 msgid ""
-"This test checks whether your LAN Adapter is set up for automatic IP Address "
-"configuration with DHCP.\n"
+"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n"
 "If you get a \"disabled\" message:\n"
 " - then your LAN Adapter is configured for manual IP Setup\n"
-"- verify thay you have entered correct IP informations in the AdapterSetup "
-"dialog.\n"
+"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n"
 "If you get an \"enabeld\" message:\n"
 "-verify that you have a configured and working DHCP Server in your network."
 msgstr ""
-"Þessi prufun athugar hvort að netkortið þitt sé sett upp fyrir sjálfvirka "
-"úthlutun á IP tölu með DHCP þjón.\n"
+"Þessi prufun athugar hvort að netkortið þitt sé sett upp fyrir sjálfvirka úthlutun á IP tölu með DHCP þjón.\n"
 "Ef þú færð skilaboðiin \"óvirkt\":\n"
 "- þá er netkortið stillt fyrir handvirka IP uppsetningu\n"
-"- athugaðu hvort að þú hafir sett inn réttar IP uppsetngingar í stillingum "
-"netkorts\n"
+"- athugaðu hvort að þú hafir sett inn réttar IP uppsetngingar í stillingum netkorts\n"
 "Ef þú færð skilaboðin \"virkt\":\n"
 "- athugaðu hvort að það sé DHCP þjónn sem úthlutar IP tölum á innra neti þínu"
 
@@ -3249,22 +3053,11 @@ msgstr "Tímabelti"
 msgid "Title"
 msgstr "Titill"
 
-msgid "Title properties"
-msgstr ""
-
 msgid "Title:"
 msgstr "Titill:"
 
-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."
-msgstr ""
-"Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB stautinn "
-"úr sambandi og tengja hann aftur þegar þú ert beðinn um það. Ýttu á OK þegar "
-"þú er búinn að taka hann úr sambandi."
+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."
+msgstr "Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB stautinn úr sambandi og tengja hann aftur þegar þú ert beðinn um það. Ýttu á OK þegar þú er búinn að taka hann úr sambandi."
 
 msgid "Today"
 msgstr "Í dag"
@@ -3420,7 +3213,7 @@ msgstr "Nota beini"
 #.       which was incomprehensible. "Non-smooth winding" may be a better
 #.       term, but note that there is nothing irregular about it. Synonyms
 #.       better suited for translation to other languages may be "stepwise
-#.       winding/playback", or "winding/playback using stills". 
+#.       winding/playback", or "winding/playback using stills".
 msgid "Use non-smooth winding at speeds above"
 msgstr "Nota kyrrmyndir við hraðspólun hraðar en"
 
@@ -3439,9 +3232,7 @@ msgstr ""
 "\n"
 "Vinsamlega settu upp móttakara A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
 msgstr "Ýttu á up/niður takka á fjarstýringu til að velja. Ýttu svo á OK."
 
 msgid "Use usals for this sat"
@@ -3480,8 +3271,7 @@ msgstr "Mynd álfur"
 msgid ""
 "Video input selection\n"
 "\n"
-"Please press OK if you can see this page on your TV (or select a different "
-"input port).\n"
+"Please press OK if you can see this page on your TV (or select a different input port).\n"
 "\n"
 "The next input port will be automatically probed in 10 seconds."
 msgstr ""
@@ -3500,9 +3290,6 @@ msgstr "Skoða gagnvirkt Útvarp"
 msgid "View teletext..."
 msgstr "Skoða textavarp..."
 
-msgid "Virtual KeyBoard"
-msgstr ""
-
 msgid "Voltage mode"
 msgstr "Spennu stýring"
 
@@ -3518,9 +3305,6 @@ msgstr "WEP"
 msgid "WPA"
 msgstr "WPA"
 
-msgid "WPA or WPA2"
-msgstr ""
-
 msgid "WPA2"
 msgstr "WPA2"
 
@@ -3534,13 +3318,10 @@ msgid "Waiting for USB stick to settle..."
 msgstr "Bíð eftir að USB tengist..."
 
 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"
+"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"
 "Please press OK to begin."
 msgstr ""
-"Við munum nú prufa hvort að sjónvarpið þitt getur einnig sýnt þessa upplaust "
-"með 50 Hz. Ef að skjárinn verður svartur, hinkraðu við í 20 sekúndur og þá "
-"breytist hann aftur.\n"
+"Við munum nú prufa hvort að sjónvarpið þitt getur einnig sýnt þessa upplaust með 50 Hz. Ef að skjárinn verður svartur, hinkraðu við í 20 sekúndur og þá breytist hann aftur.\n"
 "Ýttu á OK til að byrja."
 
 msgid "Wed"
@@ -3555,27 +3336,18 @@ msgstr "Vikudagur"
 msgid ""
 "Welcome to the Cutlist editor.\n"
 "\n"
-"Seek to the start of the stuff you want to cut away. Press OK, select 'start "
-"cut'.\n"
+"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n"
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
 "Velkominn í klippinga stjórann.\n"
 "\n"
-"Farðu að byrjun á því sem að þú ætlar að klippa. Ýttu á OK og veldu 'byrja "
-"klippingu'.\n"
+"Farðu að byrjun á því sem að þú ætlar að klippa. Ýttu á OK og veldu 'byrja klippingu'.\n"
 "\n"
-"Farðu þá að enda þess og ýttu á OK, veldu 'enda klippingu'. Það er allt og "
-"sumt."
+"Farðu þá að enda þess og ýttu á OK, veldu 'enda klippingu'. Það er allt og sumt."
 
-msgid ""
-"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."
-msgstr ""
-"Velkominn til stýrikerfis uppfærslu álfinn. Álfurinn aðstoðar þig við að "
-"uppfæra stýrikerfi Dreamboxins með því að sjá um afritun af þínum stillingum "
-"og sýnir svo hverning uppfærslan fer fram."
+msgid "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."
+msgstr "Velkominn til stýrikerfis uppfærslu álfinn. Álfurinn aðstoðar þig við að uppfæra stýrikerfi Dreamboxins með því að sjá um afritun af þínum stillingum og sýnir svo hverning uppfærslan fer fram."
 
 msgid ""
 "Welcome.\n"
@@ -3627,9 +3399,6 @@ msgstr "Ár:"
 msgid "Yes"
 msgstr "Já"
 
-msgid "Yes, and delete this movie"
-msgstr ""
-
 msgid "Yes, backup my settings!"
 msgstr "Já, taka afrit að stilinunum!"
 
@@ -3654,12 +3423,8 @@ msgstr "Já, fara til baka á mynda lista"
 msgid "Yes, view the tutorial"
 msgstr "Já, skoða kennslu"
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Þú getur valið sjálfgefnar stillingar núna. Vinsamlega veldu stillignar sem "
-"að þú vilt setja inn."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Þú getur valið sjálfgefnar stillingar núna. Vinsamlega veldu stillignar sem að þú vilt setja inn."
 
 msgid "You can choose, what you want to install..."
 msgstr "Þú getur valið það sem að þú vilt setja inn..."
@@ -3670,74 +3435,45 @@ msgstr "Þú getur ekki eytt þessu!"
 msgid "You chose not to install any default services lists."
 msgstr "Þú valdir að setja ekki inn neinar sjálfgefnar stillingar."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Þú valdir ekki að setja inn neinar sjálfgefnar stillingar. Þú getur "
-"hinsvegar valið að setja inn seinna þessar stillingar."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Þú valdir ekki að setja inn neinar sjálfgefnar stillingar. Þú getur hinsvegar valið að setja inn seinna þessar stillingar."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Þú valdir ekki að setja in neitt. Vinsamlega ýttu á OK til að ljúka álfi."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Þú valdir ekki að setja in neitt. Vinsamlega ýttu á OK til að ljúka álfi."
 
-msgid ""
-"You do not seem to have a harddisk in your Dreambox. So backing up to a "
-"harddisk is not an option for you."
-msgstr ""
-"Þú ert ekki með harðan disk í boxinu svo að afritun á harðan disk er ekki "
-"möguleg fyrir þig."
+msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you."
+msgstr "Þú ert ekki með harðan disk í boxinu svo að afritun á harðan disk er ekki möguleg fyrir þig."
 
 msgid ""
-"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!\n"
+"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!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Þú hefur kosið að senda afritið á compact flash kort. Kortið verður að vera "
-"í raufinni. Við skoðum ekki hvort að það sé notað núna. Betra er að senda "
-"afritið á harða diskinn!\n"
+"Þú hefur kosið að senda afritið á compact flash kort. Kortið verður að vera í raufinni. Við skoðum ekki hvort að það sé notað núna. Betra er að senda afritið á harða diskinn!\n"
 "Ýttu á OK til að byrja afritunina núna."
 
 msgid ""
 "You have chosen to backup to an usb drive. Better backup to the harddisk!\n"
 "Please press OK to start the backup now."
 msgstr ""
-"Þú hefur valið að taka afrit á USB staut. Það er betra að taka afrit á harða "
-"diskinn!\n"
+"Þú hefur valið að taka afrit á USB staut. Það er betra að taka afrit á harða diskinn!\n"
 "Ýttu á OK til að byrja afritun núna."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Þú hefur valið að senda afritið á harða diskinn. Ýttu á OK til að byrja "
-"afritunina núna."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Þú hefur valið að senda afritið á harða diskinn. Ýttu á OK til að byrja afritunina núna."
 
-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 ""
-"Þú hefur valið að búa til nýjan keyranlegan .NFI USB staut. Þetta veldur því "
-"að öllum gögnum af USB stautum verður eytt."
+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 "Þú hefur valið að búa til nýjan keyranlegan .NFI USB staut. Þetta veldur því að öllum gögnum af USB stautum verður eytt."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Þú þarf að bíða %s!"
 
 msgid ""
-"You need a PC connected to your dreambox. If you need further instructions, "
-"please visit the website http://www.dm7025.de.\n"
-"Your 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."
+"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n"
+"Your 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."
 msgstr ""
-"Þú þarft að hafa tölvu tengda við dreamboxið. Ef þú þarft nánari upplýsingar "
-"þá skoðaðu síðuna http://www.dm7025.de.\n"
-"Dreamboxið verður núna stoppað. Eftir að þú hefur uppfært samkvæmt "
-"leiðbeinungunum á síðunni þá mun nýja stýrikerfið biðja þig um að setja "
-"aftur inn afritið."
+"Þú þarft að hafa tölvu tengda við dreamboxið. Ef þú þarft nánari upplýsingar þá skoðaðu síðuna http://www.dm7025.de.\n"
+"Dreamboxið verður núna stoppað. Eftir að þú hefur uppfært samkvæmt leiðbeinungunum á síðunni þá mun nýja stýrikerfið biðja þig um að setja aftur inn afritið."
 
 msgid ""
 "You need to define some keywords first!\n"
@@ -3758,23 +3494,18 @@ msgstr ""
 "Viltu búa til númerið núna?"
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Dreamboxið þitt mun endurræsa sig eftir að þú ýtir á OK á fjarstýringunni."
+msgstr "Dreamboxið þitt mun endurræsa sig eftir að þú ýtir á OK á fjarstýringunni."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Sjónvarpið þitt virkar á 50 Hz. Gott mál!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
 msgstr "Það tókst að taka afrit. Nú höldum við áfram með uppfærsluna."
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Dreamboxið er að slökkva á sér. Vinsamlega bíðið..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
 msgstr "Dreamboxið er ekki tengt við internetið. Athugaðu það og reyndu aftur."
 
 msgid ""
@@ -3784,16 +3515,6 @@ msgstr ""
 "Það þarf að uppfæra heila í framtölvu.\n"
 "Ýtið á OK til að byrja uppfærslu."
 
-msgid "Your network configuration has been activated."
-msgstr ""
-
-msgid ""
-"Your network configuration has been activated.\n"
-"A second configured interface has been found.\n"
-"\n"
-"Do you want to disable the second network interface?"
-msgstr ""
-
 msgid "Zap back to service before positioner setup?"
 msgstr "Fara aftur á rás fyrir stillingu á mótorstýringu?"
 
@@ -3824,12 +3545,6 @@ msgstr "hætta við að breyta uppáhaldsl ista"
 msgid "about to start"
 msgstr "er að byrja"
 
-msgid "activate current configuration"
-msgstr ""
-
-msgid "add a nameserver entry"
-msgstr ""
-
 msgid "add alternatives"
 msgstr "bæta við valkosti"
 
@@ -3885,14 +3600,6 @@ msgstr ""
 "ertu viss um að þú viljir setja inn\n"
 "eftirfarandi afrit:\n"
 
-#, python-format
-msgid "audio track (%s) format"
-msgstr ""
-
-#, python-format
-msgid "audio track (%s) language"
-msgstr ""
-
 msgid "audio tracks"
 msgstr "hljóð rás"
 
@@ -3908,10 +3615,6 @@ msgstr "betra"
 msgid "blacklist"
 msgstr "svarti listi"
 
-#, python-format
-msgid "burn audio track (%s)"
-msgstr ""
-
 msgid "by Exif"
 msgstr "by Exif"
 
@@ -4038,9 +3741,6 @@ msgstr "enda klippingu hér"
 msgid "end favourites edit"
 msgstr "hætta að breyta uppáhalds lista"
 
-msgid "enigma2 and network"
-msgstr ""
-
 msgid "equal to"
 msgstr "jafnt og"
 
@@ -4056,21 +3756,6 @@ msgstr "hætta í spilara"
 msgid "exit movielist"
 msgstr "loka myndalista"
 
-msgid "exit nameserver configuration"
-msgstr ""
-
-msgid "exit network adapter configuration"
-msgstr ""
-
-msgid "exit network adapter setup menu"
-msgstr ""
-
-msgid "exit network interface list"
-msgstr ""
-
-msgid "exit networkadapter setup menu"
-msgstr ""
-
 msgid "failed"
 msgstr "tókst ekki"
 
@@ -4214,18 +3899,6 @@ msgstr "mánuður"
 msgid "move PiP to main picture"
 msgstr "nota mynd glugga sem aðal mynd"
 
-msgid "move down to last entry"
-msgstr ""
-
-msgid "move down to next entry"
-msgstr ""
-
-msgid "move up to first entry"
-msgstr ""
-
-msgid "move up to previous entry"
-msgstr ""
-
 msgid "movie list"
 msgstr "myndalisti"
 
@@ -4286,8 +3959,8 @@ msgstr "á READ ONLY disk."
 msgid "once"
 msgstr "einu sinni"
 
-msgid "open nameserver configuration"
-msgstr ""
+msgid "only /etc/enigma2 directory"
+msgstr "bara /etc/enigma2 mappa"
 
 msgid "open servicelist"
 msgstr "opna rása lista"
@@ -4298,9 +3971,6 @@ msgstr "opna rásalista (niður)"
 msgid "open servicelist(up)"
 msgstr "opna rásalista (upp)"
 
-msgid "open virtual keyboard input help"
-msgstr ""
-
 msgid "pass"
 msgstr "í lagi"
 
@@ -4337,9 +4007,6 @@ msgstr "taka upp"
 msgid "recording..."
 msgstr "tek upp...."
 
-msgid "remove a nameserver entry"
-msgstr ""
-
 msgid "remove after this position"
 msgstr "eyða fyrir aftan þetta"
 
@@ -4416,12 +4083,6 @@ msgstr "veldu .NFI stýrikerfis skrá"
 msgid "select image from server"
 msgstr "veldu stýrikerfi frá vefþjón"
 
-msgid "select interface"
-msgstr ""
-
-msgid "select menu entry"
-msgstr ""
-
 msgid "select movie"
 msgstr "veldu mynd"
 
@@ -4602,12 +4263,8 @@ msgstr "já"
 msgid "yes (keep feeds)"
 msgstr "já (halda fæðirásum)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Dreamboxið þitt gæti verið óstöðugt núna.  Athugaðu leiðbeiningar um aðstoð "
-"með að endurræsa Dreamboxið."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Dreamboxið þitt gæti verið óstöðugt núna.  Athugaðu leiðbeiningar um aðstoð með að endurræsa Dreamboxið."
 
 msgid "zap"
 msgstr "stökk"
@@ -4621,354 +4278,228 @@ msgstr "stokkið"
 #~ msgstr ""
 #~ "\n"
 #~ "Enigma2 mun endurræsa eftir að hafa sett inn afrit"
-
 #~ msgid "\"?"
 #~ msgstr "\"?"
-
 #~ msgid "#0000ff"
 #~ msgstr "#0000ff"
-
 #~ msgid "#003258"
 #~ msgstr "#003258"
-
 #~ msgid "#00ff00"
 #~ msgstr "#00ff00"
-
 #~ msgid "#20294a6b"
 #~ msgstr "#20294a6b"
-
 #~ msgid "#33294a6b"
 #~ msgstr "#33294a6b"
-
 #~ msgid "#77ffffff"
 #~ msgstr "#77ffffff"
-
 #~ msgid "#c0c000"
 #~ msgstr "#c0c000"
-
 #~ msgid "#ff0000"
 #~ msgstr "#ff0000"
-
 #~ msgid "%s (%s, %d MB free)"
 #~ msgstr "%s (%s, %d MB laus)"
-
 #~ msgid "0 V"
 #~ msgstr "0 V"
-
 #~ msgid "12 V"
 #~ msgstr "12 V"
-
 #~ msgid "12V Output"
 #~ msgstr "12V Út"
-
 #~ msgid "A sleep timer want's to set your"
 #~ msgstr "Tíma stilling vill stilla "
-
 #~ msgid ""
 #~ "A sleep timer want's to set your\n"
 #~ "Dreambox to standby. Do that now?"
 #~ msgstr ""
 #~ "Búið er að stilla tímann núna til\n"
 #~ "að setja á biðstöðu. Gera það núna?"
-
 #~ msgid "A sleep timer want's to shut down"
 #~ msgstr "Tíma stilling vill slökkva á boxinu"
-
 #~ msgid ""
 #~ "A sleep timer want's to shut down\n"
 #~ "your Dreambox. Shutdown now?"
 #~ msgstr ""
 #~ "Búið er að stilla tímann núna til að\n"
 #~ "slökkva á boxinu. Gera það núna?"
-
 #~ msgid "Add Timer"
 #~ msgstr "Bæta við Tímastillingu"
-
 #~ msgid "Add alternative"
 #~ msgstr "Bæta við öðru"
-
 #~ msgid "Add files to playlist"
 #~ msgstr "Bæta skrám við spilunarlista"
-
 #~ msgid "Add service"
 #~ msgstr "Bæta við rás"
-
 #~ msgid "Ask before zapping"
 #~ msgstr "Spyrja fyrir rásastökk"
-
 #~ msgid "Audio / Video"
 #~ msgstr "Hljóð / Mynd"
-
 #~ msgid "Auto show inforbar"
 #~ msgstr "Sýna upplýsingar sjálfvirkt"
-
-#~ msgid "Automatic SSID lookup"
-#~ msgstr "Leita að SSID sjálfvirkt"
-
 #~ msgid "Cable provider"
 #~ msgstr "Kapal sendandi"
-
 #~ msgid "Choose Location"
 #~ msgstr "Velja staðsetningu"
-
 #~ msgid "Classic"
 #~ msgstr "Sígilt"
-
 #~ msgid "Confirm"
 #~ msgstr "Staðfestu"
-
 #~ msgid "Custom skip time for 1/3 keys"
 #~ msgstr "Setja sökk tímabil fyrir 1/3 lykla"
-
 #~ msgid "Default"
 #~ msgstr "Venjulegt"
-
 #~ msgid "Device Setup..."
 #~ msgstr "Uppsetning tækja..."
-
-#~ msgid "DiSEqC Mode"
-#~ msgstr "DiSEqC Gerð"
-
 #~ msgid "Disable subtitles"
 #~ msgstr "Taka af undirtexta"
-
 #~ msgid ""
 #~ "Do you really want to REMOVE\n"
 #~ "the plugin \""
 #~ msgstr ""
 #~ "Viltu örugglega taka út\n"
 #~ "þetta innskot \""
-
 #~ msgid "Do you really want to delete this recording?"
 #~ msgstr "Viltu virkilega eyða þessari upptöku?"
-
 #~ msgid ""
 #~ "Do you really want to download\n"
 #~ "the plugin \""
 #~ msgstr ""
 #~ "Viltu örugglega hala niður\n"
 #~ "þetta innskot \""
-
 #~ msgid "Do you want to enable the parental control feature or your dreambox?"
 #~ msgstr "Viltu gera barnalæsingu virka í Dreamboxinu?"
-
 #~ msgid ""
 #~ "Do you want to stop the current\n"
 #~ "(instant) recording?"
 #~ msgstr ""
 #~ "Viltu hætta þessari þessari\n"
 #~ "(skyndi) upptöku?"
-
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "Viltu horfa á leiðbeinungar um klippingar?"
-
 #~ msgid "Dreambox to standby. Do that now?"
 #~ msgstr "Fara í biðstöðu. Gera það núna?"
-
 #~ msgid "Enigma1 like radiomode"
 #~ msgstr "Útvarps stilling eins og Enigma1"
-
 #~ msgid "Equal to Socket A"
 #~ msgstr "Eins og Tengi A"
-
 #~ msgid "Expert Setup"
 #~ msgstr "Sérfræði uppsetning"
-
 #~ msgid "Fast zapping"
 #~ msgstr "Stökkva hratt"
-
 #~ msgid "Games / Plugins"
 #~ msgstr "Leikir / Innskot"
-
 #~ msgid "Hello!"
 #~ msgstr "Halló!"
-
 #~ msgid "Hide error windows"
 #~ msgstr "Fela villuglugga"
-
 #~ msgid "Invert"
 #~ msgstr "Snúa við"
-
 #~ msgid "LCD"
 #~ msgstr "LCD"
-
 #~ msgid "LCD Setup"
 #~ msgstr "LCD uppsetning"
-
 #~ msgid "Language"
 #~ msgstr "Tungumál"
-
 #~ msgid "Loopthrough to Socket A"
 #~ msgstr "Tengt á milli í tengi A"
-
 #~ msgid "Movie Menu"
 #~ msgstr "Bíómynda valmynd"
-
 #~ msgid "Multi bouquets"
 #~ msgstr "Margar fléttur"
-
 #~ msgid "NIM "
 #~ msgstr "NIM"
-
 #~ msgid "Nameserver Setup..."
 #~ msgstr "Uppsetning nafnaþjóns..."
-
 #~ msgid "Network"
 #~ msgstr "Netkerfi"
-
-#~ msgid ""
-#~ "No working local networkadapter found.\n"
-#~ "Please verify that you have attached a network cable and your Network is "
-#~ "configured correctly."
-#~ msgstr ""
-#~ "Engin nothæf nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að netsnúra sé tengd og að stillingar netkerfis "
-#~ "séu réttar."
-
-#~ msgid ""
-#~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "your local network interface."
-#~ msgstr ""
-#~ "Engin nothæf þráðlaus nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust netkort eða athugaðu "
-#~ "stillingar þínar."
-
-#~ msgid ""
-#~ "No working wireless networkadapter found.\n"
-#~ "Please verify that you have attached a compatible WLAN USB Stick and your "
-#~ "Network is configured correctly."
-#~ msgstr ""
-#~ "Engin nothæf þráðlaus nettenging fannst.\n"
-#~ "Vinsamlega athugið hvort að það sé tengt þráðlaust USB netkort eða "
-#~ "athugaðu stillingar þínar."
-
 #~ msgid "Nothing connected"
 #~ msgstr "Ekkert tengt"
-
 #~ msgid "Parental Control"
 #~ msgstr "Foreldra stýring"
-
 #~ msgid "Parental Lock"
 #~ msgstr "Foreldra stýring"
-
 #~ msgid "Positioner mode"
 #~ msgstr "Stilling mótorstýringar"
-
 #~ msgid "Predefined satellite"
 #~ msgstr "Fyrirfram stilltur gervihnöttur"
-
 #~ msgid "Quick"
 #~ msgstr "Hratt"
-
 #~ msgid "Record Splitsize"
 #~ msgstr "Stærð upptökuhluta"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
 #~ msgstr "Upptaka byrjar eftir smástund... viltu virkilega endurræsa núna?"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really "
 #~ "restart now?"
 #~ msgstr "Upptaka byrjar eftir smástund... viltu virkilega endurræsa núna?"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really "
 #~ "shutdown now?"
 #~ msgstr "Upptaka byrjar eftir smástund... viltu virkilega slökkva núna?"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or comming up in few seconds... really "
 #~ "reboot now?"
 #~ msgstr ""
 #~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa "
 #~ "núna?"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or comming up in few seconds... really "
 #~ "restart now?"
 #~ msgstr ""
 #~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega endurræsa "
 #~ "núna?"
-
 #~ msgid ""
 #~ "Recording(s) are in progress or comming up in few seconds... really "
 #~ "shutdown now?"
 #~ msgstr ""
 #~ "Upptaka er í gangi eða fljótlega fyrirhuguð... viltu virkilega slökkva "
 #~ "núna?"
-
 #~ msgid "Remember service pin"
 #~ msgstr "Muna kóða fyrir rásir"
-
 #~ msgid "Remove service"
 #~ msgstr "Eyða rás"
-
 #~ msgid "Replace current playlist"
 #~ msgstr "Skipta út núverandi spilunarlista"
-
 #~ msgid "Satconfig"
 #~ msgstr "Stilla gervihnetti"
-
 #~ msgid "Satelliteconfig"
 #~ msgstr "Stilling gervihnatta"
-
 #~ msgid "Scan NIM"
 #~ msgstr "Leita NIM"
-
 #~ msgid "Secondary cable from motorized LNB"
 #~ msgstr "Seinni kapall frá mótorstýrðum nema"
-
 #~ msgid "Select alternative service"
 #~ msgstr "Velja aðra rás"
-
 #~ msgid "Select reference service"
 #~ msgstr "Velja viðmiðunarrás"
-
 #~ msgid "Service scan type needed"
 #~ msgstr "Vantar gerð rásaleitar"
-
 #~ msgid "Setup Lock"
 #~ msgstr "Setja upp læsingu"
-
 #~ msgid "Show Satposition"
 #~ msgstr "Sýna staðsetningu gervihnattar"
-
 #~ msgid "Show files from %s"
 #~ msgstr "Sýna skrár frá %s"
-
 #~ msgid "Skip confirmations"
 #~ msgstr "Sleppa staðfestingum"
-
 #~ msgid "Slot "
 #~ msgstr "Hólf"
-
 #~ msgid "Socket "
 #~ msgstr "Tengi"
-
 #~ msgid "Startwizard"
 #~ msgstr "Byrja álf"
-
 #~ msgid "Step "
 #~ msgstr "Þrep"
-
 #~ msgid "Swap services"
 #~ msgstr "Skipta á milli rása"
-
 #~ msgid "The sleep timer has been acitvated."
 #~ msgstr "Tímastilling fyrir biðstöðu er virkur."
-
 #~ msgid "Timeshifting"
 #~ msgstr "Lifandi pása"
-
 #~ msgid "Transpondertype"
 #~ msgstr "Gerð sendis"
-
 #~ msgid "UHF Modulator"
 #~ msgstr "UHF Mótari"
-
 #~ msgid ""
 #~ "Unable to initialize harddisk.\n"
 #~ "Please refer to the user manual.\n"
@@ -4977,100 +4508,72 @@ msgstr "stokkið"
 #~ "Gat ekki formað harða disk.\n"
 #~ "Athugaðu upplýsingar um diskinn.\n"
 #~ "Villa:"
-
 #~ msgid "Usage Settings"
 #~ msgstr "Stilla notkun"
-
 #~ msgid "Usage settings"
 #~ msgstr "Stillia notkun"
-
 #~ msgid "VCR Switch"
 #~ msgstr "Vídeó rofi"
-
 #~ msgid "Visualize positioner movement"
 #~ msgstr "Sýna færslu mótorsins"
-
 #~ msgid "Yes, scan now"
 #~ msgstr "Já, leita núna"
-
 #~ msgid "You selected a playlist"
 #~ msgstr "Þú valdir spilunarlista"
-
 #~ msgid "add bouquet..."
 #~ msgstr "bæta við rásavendi..."
-
 #~ msgid "copy to favourites"
 #~ msgstr "bæta við uppáhalds lista"
-
 #~ msgid "empty/unknown"
 #~ msgstr "tómur/óþekkt"
-
 #~ msgid "equal to Socket A"
 #~ msgstr "eins og tengi A"
-
 #~ msgid "full /etc directory"
 #~ msgstr "alla /etc möppuna"
-
 #~ msgid "list"
 #~ msgstr "listi"
-
 #~ msgid "loopthrough to socket A"
 #~ msgstr "tengt frá tengi A"
-
-#~ msgid "only /etc/enigma2 directory"
-#~ msgstr "bara /etc/enigma2 mappa"
-
 #~ msgid "play next playlist entry"
 #~ msgstr "spila næsta atriði á spilunarlista"
-
 #~ msgid "play previous playlist entry"
 #~ msgstr "spila fyrra atriði á spilunarlista"
-
 #~ msgid "remove bouquet"
 #~ msgstr "eyða fléttu"
-
 #~ msgid "remove service"
 #~ msgstr "eyða rás"
-
 #~ msgid ""
 #~ "scan done!\n"
 #~ "%d services found!"
 #~ msgstr ""
 #~ "leit lokið!\n"
 #~ "%d rásir fundust!"
-
 #~ msgid ""
 #~ "scan done!\n"
 #~ "No service found!"
 #~ msgstr ""
 #~ "leit lokið!\n"
 #~ "Engin rás fannst!"
-
 #~ msgid ""
 #~ "scan done!\n"
 #~ "One service found!"
 #~ msgstr ""
 #~ "leit lokið!\n"
 #~ "Ein rás fannst!"
-
 #~ msgid ""
 #~ "scan in progress - %d %% done!\n"
 #~ "%d services found!"
 #~ msgstr ""
 #~ "leit í gangi - %d %% búið!\n"
 #~ "%d rásir fundust!"
-
 #~ msgid "select Slot"
 #~ msgstr "veldu hólf"
-
 #~ msgid "skip backward (self defined)"
 #~ msgstr "stökkva til baka (ákveðinn tíma)"
-
 #~ msgid "skip forward (self defined)"
 #~ msgstr "stökkva áfram (ákveðinn tíma)"
-
 #~ msgid "use power delta"
 #~ msgstr "nota afl delta"
-
 #~ msgid "your Dreambox. Shutdown now?"
 #~ msgstr "Dreamboxið þitt. Slökkva núna?"
+
old mode 100755 (executable)
new mode 100644 (file)
index b7a6d6f..e7587a1
--- a/po/it.po
+++ b/po/it.po
@@ -4,8 +4,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: enigma2 Italian Locale\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-14 07:24+0100\n"
-"PO-Revision-Date: 2008-09-23 09:02+0100\n"
+"POT-Creation-Date: 2009-01-16 00:49+0100\n"
+"PO-Revision-Date: 2009-01-05 22:24+0100\n"
 "Last-Translator: Spaeleus <spaeleus@croci.org>\n"
 "Language-Team: WWW.LINSAT.NET <spaeleus@croci.org>\n"
 "MIME-Version: 1.0\n"
@@ -54,7 +54,7 @@ msgstr "%H:%M"
 
 #, python-format
 msgid "%d jobs are running in the background!"
-msgstr ""
+msgstr "%d applicazioni attive in background!"
 
 #, python-format
 msgid "%d min"
@@ -89,20 +89,18 @@ msgid "(show optional DVD audio menu)"
 msgstr "(Mostrare il menu opzionale DVD audio)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Disponibile solo se più di una intefaccia è attiva."
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
+msgstr "* Disponibile solo su inserimento SSID nascosto o chiave di rete"
 
 msgid ".NFI Download failed:"
-msgstr ""
-
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
+msgstr "Scaricamento .nfi fallito:"
 
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
+"Verifica \"md5sum\" file .nfi superata.L'immagine può essere installata!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "Cartella /usr/share/enigma2"
@@ -297,12 +295,6 @@ msgstr "Default AC3"
 msgid "AC3 downmix"
 msgstr "AC3 -> stereo (downmix)"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Info"
 
@@ -328,7 +320,7 @@ msgid "Add"
 msgstr "Aggiungere"
 
 msgid "Add Bookmark"
-msgstr "Agg. segnalibro"
+msgstr "Agg.Segnalibro"
 
 msgid "Add a mark"
 msgstr "Aggiungere contrassegno"
@@ -340,7 +332,7 @@ msgid "Add timer"
 msgstr "Agg. timer"
 
 msgid "Add title"
-msgstr "Aggiungere titolo"
+msgstr "Agg. Titolo"
 
 msgid "Add to bouquet"
 msgstr "Aggiungere al bouquet"
@@ -375,8 +367,8 @@ msgstr ""
 "Dopo il termine del wizard iniziale, occorre proteggere i singoli canali. "
 "Fare riferimento al manuale del DreamBox per informazioni in merito."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Tutti"
@@ -384,9 +376,6 @@ msgstr "Tutti"
 msgid "All Satellites"
 msgstr "Tutti i satelliti"
 
-msgid "All..."
-msgstr "Tutti"
-
 msgid "Alpha"
 msgstr "Trasparenza"
 
@@ -409,6 +398,8 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"Attivare questa configurazione di rete?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -417,8 +408,8 @@ msgstr ""
 "Riavviare la rete?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artista:"
+msgid "Artist"
+msgstr "Artista"
 
 msgid "Ask before shutdown:"
 msgstr "Chiedere prima di spegnere:"
@@ -442,7 +433,7 @@ msgid "Auto"
 msgstr "Auto"
 
 msgid "Auto chapter split every ? minutes (0=never)"
-msgstr "Divisione automatica capitoli ogni ? minuti (0=mai)"
+msgstr "Divisione automatica capitoli ogni \"x\" minuti (0=mai)"
 
 msgid "Auto scart switching"
 msgstr "Scambio automatico scart"
@@ -475,7 +466,7 @@ msgid "Back"
 msgstr "Indietro"
 
 msgid "Background"
-msgstr ""
+msgstr "Sfondo"
 
 msgid "Backup"
 msgstr "Backup"
@@ -523,7 +514,7 @@ msgid "Burn DVD"
 msgstr "Masterizzare DVD"
 
 msgid "Burn existing image to DVD"
-msgstr ""
+msgstr "Scrivere immagine esistente su DVD"
 
 msgid "Burn to DVD..."
 msgstr "Masterizzare su DVD"
@@ -561,7 +552,7 @@ msgid "Cancel"
 msgstr "Annulla"
 
 msgid "Cannot parse feed directory"
-msgstr ""
+msgstr "Analisi cartella feed impossibile!"
 
 msgid "Capacity: "
 msgstr "Capacità: "
@@ -576,7 +567,7 @@ msgid "Change bouquets in quickzap"
 msgstr "Cambio di bouquet nello zapping veloce"
 
 msgid "Change dir."
-msgstr ""
+msgstr "Camb. cart."
 
 msgid "Change pin code"
 msgstr "Cambiare codice PIN"
@@ -596,6 +587,9 @@ msgstr "Canale"
 msgid "Channel Selection"
 msgstr "Selezione Canale"
 
+msgid "Channel not in services list"
+msgstr "Canale non in elenco"
+
 msgid "Channel:"
 msgstr "Canale:"
 
@@ -627,7 +621,7 @@ msgid "Choose source"
 msgstr "Selezionare la sorgente"
 
 msgid "Choose target folder"
-msgstr "Cartella di destinazione"
+msgstr "Cartella destinazione"
 
 msgid "Choose your Skin"
 msgstr "Selezionare la Skin"
@@ -687,7 +681,7 @@ msgid "Complete"
 msgstr "Completo"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Complessa (permette mix tracce audio e aspetti)"
 
 msgid "Configuration Mode"
 msgstr "Configurazione"
@@ -724,7 +718,7 @@ msgid "Content does not fit on DVD!"
 msgstr "Le dimensioni superano la capacità del DVD!"
 
 msgid "Continue in background"
-msgstr ""
+msgstr "Proseguire in background"
 
 msgid "Continue playing"
 msgstr "Riproduzione continua"
@@ -732,17 +726,14 @@ msgstr "Riproduzione continua"
 msgid "Contrast"
 msgstr "Contrasto"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr ""
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
+msgstr "Collegamento a server Immagini .nfi Dreambox impossibile:"
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Impossibile caricare supporto! Nessun disco Inserito?"
 
 msgid "Create DVD-ISO"
-msgstr ""
+msgstr "Creare DVD-ISO"
 
 msgid "Create movie folder failed"
 msgstr "Creazione cartella video fallita!"
@@ -803,7 +794,7 @@ msgid "DVD Player"
 msgstr "Player DVD"
 
 msgid "DVD media toolbox"
-msgstr ""
+msgstr "Strumenti supporti DVD"
 
 msgid "Danish"
 msgstr "Danese"
@@ -811,9 +802,6 @@ msgstr "Danese"
 msgid "Date"
 msgstr "Data"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-
 msgid "Deep Standby"
 msgstr "Spegnimento (Deep-Standby)"
 
@@ -847,7 +835,7 @@ msgid "Description"
 msgstr "Descrizione"
 
 msgid "Destination directory"
-msgstr ""
+msgstr "Cartella destinazione"
 
 msgid "Detected HDD:"
 msgstr "HDD rilevato:"
@@ -871,7 +859,7 @@ msgid "DiSEqC repeats"
 msgstr "Ripetizioni DiSEqC"
 
 msgid "Direct playback of linked titles without menu"
-msgstr "Riproduzione diretta dei titoli collegati senza Menu"
+msgstr "Riproduzione diretta dei titoli senza Menu"
 
 #, python-format
 msgid "Directory %s nonexistent."
@@ -919,6 +907,8 @@ msgid ""
 "Do you really want to REMOVE\n"
 "the plugin \"%s\"?"
 msgstr ""
+"Confermare la cancellazione\n"
+"del plugin \"%s\"?"
 
 msgid ""
 "Do you really want to check the filesystem?\n"
@@ -936,9 +926,8 @@ msgid ""
 "Do you really want to download\n"
 "the plugin \"%s\"?"
 msgstr ""
-
-msgid "Do you really want to exit?"
-msgstr "Uscire?"
+"Confermare il download\n"
+"del plugin \"%s\"?"
 
 msgid ""
 "Do you really want to initialize the harddisk?\n"
@@ -1011,16 +1000,16 @@ msgid "Done - Installed or upgraded %d packages with %d errors"
 msgstr "Fatto! Installati o aggiornati  %d pacchetti con %d errori"
 
 msgid "Download"
-msgstr ""
+msgstr "Download"
 
 msgid "Download .NFI-Files for USB-Flasher"
-msgstr ""
+msgstr "Scaricare file .nfi per Flasher USB"
 
 msgid "Download Plugins"
 msgstr "Scaricare Plugin"
 
 msgid "Download of USB flasher boot image failed: "
-msgstr ""
+msgstr "Scaricamento immagine di avvio Flasher USB fallito: "
 
 msgid "Downloadable new plugins"
 msgstr "Nuovi plugin scaricabili"
@@ -1031,14 +1020,11 @@ msgstr "Plugin scaricabili"
 msgid "Downloading"
 msgstr "Download in corso"
 
-msgid "Downloading image description..."
-msgstr ""
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Ricerca informazioni plugin in corso. Attendere..."
 
 msgid "Dreambox format data DVD (HDTV compatible)"
-msgstr "DVD in formato dati Dreambox (compatibile HDTV)"
+msgstr "DVD in formato dati Dreambox (compat. HDTV)"
 
 msgid "Dutch"
 msgstr "Olandese"
@@ -1057,16 +1043,16 @@ msgid "East"
 msgstr "Est"
 
 msgid "Edit"
-msgstr ""
+msgstr "Modif."
 
 msgid "Edit DNS"
 msgstr "Mod. DNS"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Mod. Titolo"
 
 msgid "Edit chapters of current title"
-msgstr "Modifica capitolo del titolo corrente"
+msgstr "Modifica capitoli del titolo corrente"
 
 msgid "Edit services list"
 msgstr "Modificare lista canali"
@@ -1081,7 +1067,7 @@ msgid "Edit the network configuration of your Dreambox.\n"
 msgstr "Modificare la configurazione di rete del DreamBox.\n"
 
 msgid "Edit title"
-msgstr "Modificare titolo"
+msgstr "Mod. Titolo"
 
 msgid "Electronic Program Guide"
 msgstr "Guida Programmi Elettronica"
@@ -1111,14 +1097,11 @@ msgid "Encryption Key"
 msgstr "Chiave Codifica"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Tipo chiave codifica"
 
 msgid "Encryption Type"
 msgstr "Tipo Codifica"
 
-msgid "End"
-msgstr "Fine"
-
 msgid "End time"
 msgstr "Ora fine"
 
@@ -1156,10 +1139,10 @@ msgid "Enter Rewind at speed"
 msgstr "Avviare REW a velocità"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Inserire nome di rete/SSID WLAN:"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr ""
+msgstr "Inserire password/chiave WLAN"
 
 msgid "Enter main menu..."
 msgstr "Menu Principale"
@@ -1171,7 +1154,7 @@ msgid "Error"
 msgstr "Errore"
 
 msgid "Error executing plugin"
-msgstr ""
+msgstr "Errore in esecuzione plugin!"
 
 #, python-format
 msgid ""
@@ -1188,11 +1171,14 @@ msgid "Everything is fine"
 msgstr "Tutto OK!"
 
 msgid "Execution Progress:"
-msgstr "Esecuzione processo:"
+msgstr "Processo in esecuzione:"
 
 msgid "Execution finished!!"
 msgstr "Esecuzione finita!!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Uscire"
 
@@ -1209,10 +1195,10 @@ msgid "Expert"
 msgstr "Esperto"
 
 msgid "Extended Networksetup Plugin..."
-msgstr ""
+msgstr "Plugin esteso Configurazione Rete"
 
 msgid "Extended Setup..."
-msgstr ""
+msgstr "Configurazione Estesa"
 
 msgid "Extensions"
 msgstr "Estensioni"
@@ -1254,36 +1240,33 @@ msgid "Finished"
 msgstr "Terminato"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Configurazione di rete terminata"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Riavvio rete terminato"
 
 msgid "Finnish"
 msgstr "Finlandese"
 
 msgid ""
 "First we need to download the latest boot environment for the USB flasher."
-msgstr ""
-
-msgid "Fix USB stick"
-msgstr ""
+msgstr "E' necessario scaricare l'ambiente aggiornato per il flasher USB."
 
 msgid "Flash"
-msgstr ""
+msgstr "Flash"
 
 msgid "Flashing failed"
-msgstr ""
-
-msgid "Font size"
-msgstr "Dimensione carattere"
+msgstr "Flash fallito!"
 
 msgid "Format"
-msgstr ""
+msgstr "Formattare"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "FRC durante riproduzione discontinua"
 
+msgid "Frame size in full view"
+msgstr "Dimensione frame in visualizzazione piena"
+
 msgid "French"
 msgstr "Francese"
 
@@ -1305,6 +1288,9 @@ msgstr "Ven"
 msgid "Friday"
 msgstr "Venerdì"
 
+msgid "Frisian"
+msgstr "Frisone"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Indirizzo IP Fritz!Box FON"
 
@@ -1328,8 +1314,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genere:"
+msgid "Genre"
+msgstr "Genere"
 
 msgid "German"
 msgstr "Tedesco"
@@ -1365,7 +1351,7 @@ msgid "Harddisk standby after"
 msgstr "Standby Harddisk dopo"
 
 msgid "Hidden network SSID"
-msgstr ""
+msgstr "SSID Rete nascosto"
 
 msgid "Hierarchy Information"
 msgstr "Informazioni gerarchia"
@@ -1383,10 +1369,10 @@ msgid "IP Address"
 msgstr "Indirizzo IP"
 
 msgid "ISO file is too large for this filesystem!"
-msgstr ""
+msgstr "File ISO troppo grande per questo filesystem!"
 
 msgid "ISO path"
-msgstr ""
+msgstr "Percorso ISO"
 
 msgid "Icelandic"
 msgstr "Islandese"
@@ -1423,7 +1409,7 @@ msgstr ""
 "Quando il risultato appare soddisfacente, premere OK."
 
 msgid "Image flash utility"
-msgstr ""
+msgstr "Utilità flash immagini"
 
 msgid "Image-Upgrade"
 msgstr "Aggiornamento Immagine"
@@ -1594,7 +1580,7 @@ msgid "Load"
 msgstr "Caricare"
 
 msgid "Load Length of Movies in Movielist"
-msgstr ""
+msgstr "Caricare durata registrazioni nella lista"
 
 msgid "Local Network"
 msgstr "Rete Locale"
@@ -1605,6 +1591,9 @@ msgstr "Destinazione"
 msgid "Lock:"
 msgstr "Lock:"
 
+msgid "Log results to harddisk"
+msgstr "Salvare log su harddisk"
+
 msgid "Long Keypress"
 msgstr "Lunga pressione tasto"
 
@@ -1662,6 +1651,9 @@ msgstr "Menu"
 msgid "Message"
 msgstr "Messaggio"
 
+msgid "Message..."
+msgstr "Messaggio..."
+
 msgid "Mkfs failed"
 msgstr "Mkfs fallito!"
 
@@ -1720,7 +1712,7 @@ msgid "NEXT"
 msgstr "PROSSIMI"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
-msgstr ""
+msgstr "Inst. immagine completata. Per riavviare premere \"Giallo\"!"
 
 msgid "NOW"
 msgstr "IN ONDA"
@@ -1804,6 +1796,9 @@ msgstr "50 Hz non disponibili. :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "HDD non trovato o non formattato!"
 
+msgid "No Networks found"
+msgstr "Nessuna rete rilevata!"
+
 msgid "No backup needed"
 msgstr "Backup non necessario"
 
@@ -1815,7 +1810,7 @@ msgstr ""
 "(Timeout in lettura PAT)"
 
 msgid "No details for this image file"
-msgstr ""
+msgstr "Nessun dettaglio disponibile per questo file"
 
 msgid "No event info found, recording indefinitely."
 msgstr "Nessuna informazione sull'evento, registrazione illimitata."
@@ -1837,6 +1832,9 @@ msgstr "Nessun apparato in grado di pilotare un motore è disponibile!"
 msgid "No satellite frontend found!!"
 msgstr "Nessun apparato satellitare trovato!!!"
 
+msgid "No tags are set on these movies."
+msgstr "Nessuna etichetta configurata su queste registrazioni."
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Nessun tuner è configurato per l'utilizzo di un motore!"
 
@@ -1848,7 +1846,7 @@ msgstr ""
 "Configurare i tuner prima di effettuare una ricerca canali."
 
 msgid "No useable USB stick found"
-msgstr ""
+msgstr "Nessuna penna USB utilizzabile rilevata!"
 
 msgid ""
 "No valid service PIN found!\n"
@@ -1873,18 +1871,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"Nessuna scheda di rete locate trovata!\n"
+"Verificare che il cavo sia collegato e che la rete sia configurata "
+"correttamente."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"Nessun adattatore di rete wireless trovato!\n"
+"Verificare di aver collegato un adattatore WLAN compatibile e che la rete "
+"sia configurata correttamente."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"Nessuna interfaccia wireless attiva trovata!\n"
+"Verificare di aver collegato un dispositivo WLAN compatibile e di aver "
+"abilitato l'interfaccia di rete locale."
 
 msgid "No, but restart from begin"
 msgstr "No, riprendere dall'inizio"
@@ -1929,12 +1936,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "In riproduzione"
 
-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 "
@@ -1954,7 +1955,7 @@ msgid "OSD Settings"
 msgstr "Configurazione OSD"
 
 msgid "OSD visibility"
-msgstr ""
+msgstr "Trasparenza OSD"
 
 msgid "Off"
 msgstr "Off"
@@ -1974,9 +1975,6 @@ msgstr "Solo canali \"in chiaro\""
 msgid "Orbital Position"
 msgstr "Posizione orbitale"
 
-msgid "Other..."
-msgstr "Altro"
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2011,15 +2009,15 @@ msgstr "Configurazione Controllo Parentale"
 msgid "Parental control type"
 msgstr "Tipo Controllo Parentale"
 
-msgid "Partitioning USB stick..."
-msgstr ""
-
 msgid "Pause movie at end"
 msgstr "Riproduzione in pausa al termine"
 
 msgid "PiPSetup"
 msgstr "Configurazione PiP"
 
+msgid "PicturePlayer"
+msgstr "PicturePlayer"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2034,7 +2032,7 @@ msgid "Play"
 msgstr "Play"
 
 msgid "Play Audio-CD..."
-msgstr ""
+msgstr "Rirodurre CD Audio..."
 
 msgid "Play recorded movies..."
 msgstr "Riprodurre Registrazioni"
@@ -2049,10 +2047,10 @@ msgid "Please change recording endtime"
 msgstr "Cambiare ora fine registrazione"
 
 msgid "Please check your network settings!"
-msgstr ""
+msgstr "Verificare la configurazione di rete!"
 
 msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
+msgstr "Selezionare l'immagine .nfi da scaricare dal server feed"
 
 msgid "Please choose an extension..."
 msgstr "Selezionare un'estensione"
@@ -2063,6 +2061,13 @@ msgstr "Selezionare il pacchetto"
 msgid "Please choose the default services lists you want to install."
 msgstr "Sceglere la lista di canali predefinita da installare."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Ora scollegare tutti i dispositivi USB dal Dreambox, poi ricollegare la "
+"penna USB di destinazione (capacità minima 64 MB)!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr ""
 "Non modificare alcun valore se non si è sicuri di quello che si sta facendo!"
@@ -2105,7 +2110,7 @@ msgid "Please press OK!"
 msgstr "Premere OK!"
 
 msgid "Please select .NFI flash image file from medium"
-msgstr ""
+msgstr "Selezionare immagine .nfi dal supporto"
 
 msgid "Please select a playlist to delete..."
 msgstr "Selezionare la playlist da cancellare"
@@ -2119,11 +2124,11 @@ msgstr "Selezionare un sottoservizio da registrare"
 msgid "Please select a subservice..."
 msgstr "Selezionare un sottoservizio"
 
-msgid "Please select keyword to filter..."
-msgstr "Selezionare una parola chiave come filtro"
+msgid "Please select tag to filter..."
+msgstr "Selezionare una etichetta come filtro"
 
 msgid "Please select target directory or medium"
-msgstr ""
+msgstr "Selezionare cartella o supporto di destinazione"
 
 msgid "Please select the movie path..."
 msgstr "Selezionare cartella video"
@@ -2154,19 +2159,19 @@ msgstr ""
 "confermare."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgstr "Attendere: attivazione configurazione di rete in corso..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr ""
+msgid "Please wait while scanning is in progress..."
+msgstr "Attendere: scansione in corso..."
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Attendere: configurazione rete in corso..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Attendere: riavvio della rete in corso..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Attendere..."
 
 msgid "Please wait... Loading list..."
 msgstr "Attendere... Lista in caricamento."
@@ -2234,6 +2239,10 @@ msgstr "OK -> Attivare la config."
 msgid "Press OK to edit the settings."
 msgstr "OK => per Configurare."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr "Per maggiori dettagli su %s, premere OK."
+
 msgid "Press OK to scan"
 msgstr "Premere OK per la ricerca"
 
@@ -2249,8 +2258,11 @@ msgstr "Menu Anteprima"
 msgid "Primary DNS"
 msgstr "DNS Primario"
 
+msgid "Priority"
+msgstr "Priorità"
+
 msgid "Properties of current title"
-msgstr ""
+msgstr "Proprietà titolo corrente"
 
 msgid "Protect services"
 msgstr "Proteggere canali"
@@ -2267,6 +2279,9 @@ msgstr "Provider su cui cercare"
 msgid "Providers"
 msgstr "Provider"
 
+msgid "Quick"
+msgstr "Veloce"
+
 msgid "Quickzap"
 msgstr "Zapping veloce"
 
@@ -2288,29 +2303,29 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Disco Ram"
 
+msgid "Random"
+msgstr "Casuale"
+
 msgid "Really close without saving settings?"
 msgstr "Chiudere senza salvare le modifiche?"
 
 msgid "Really delete done timers?"
 msgstr "Cancellare i timer conclusi?"
 
-msgid "Really delete this timer?"
-msgstr "Cancellare questo timer?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Uscire dallo zapping veloce sottoservizi?"
 
 msgid "Really reboot now?"
-msgstr ""
+msgstr "Riavviare ora?"
 
 msgid "Really restart now?"
-msgstr ""
+msgstr "Riavviare ora?"
 
 msgid "Really shutdown now?"
-msgstr ""
+msgstr "Spegnere ora?"
 
 msgid "Reboot"
-msgstr ""
+msgstr "Riavvio"
 
 msgid "Reception Settings"
 msgstr "Configurazione ricezione"
@@ -2322,10 +2337,10 @@ msgid "Recorded files..."
 msgstr "Registrazioni..."
 
 msgid "Recording"
-msgstr "Registrazione in corso"
+msgstr "Registrazione..."
 
 msgid "Recording(s) are in progress or coming up in few seconds!"
-msgstr ""
+msgstr "Registrazioni in corso o in avvio a breve!"
 
 msgid "Recordings always have priority"
 msgstr "Le registrazioni hanno sempre la priorità"
@@ -2339,11 +2354,8 @@ msgstr "Frequenza di aggiornamento"
 msgid "Refresh rate selection."
 msgstr "Selezione frequenza di aggiornamento."
 
-msgid "Remounting stick partition..."
-msgstr ""
-
 msgid "Remove Bookmark"
-msgstr "Rimuovere segnalibro"
+msgstr "Canc.Segnalibro"
 
 msgid "Remove Plugins"
 msgstr "Cancellare Plugin"
@@ -2358,13 +2370,16 @@ msgid "Remove plugins"
 msgstr "Cancellare plugin"
 
 msgid "Remove the broken .NFI file?"
-msgstr ""
+msgstr "Rimuovere il file .nfi corrotto?"
 
 msgid "Remove the incomplete .NFI file?"
-msgstr ""
+msgstr "Rimuovere il file .nfi incompleto?"
+
+msgid "Remove timer"
+msgstr "Canc. Timer"
 
 msgid "Remove title"
-msgstr "Cancellare titolo"
+msgstr "Canc. Titolo"
 
 #, python-format
 msgid "Removing directory %s failed. (Maybe not empty.)"
@@ -2389,7 +2404,7 @@ msgid "Reset"
 msgstr "Reset"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Resettare e rinumerare i titoli"
 
 msgid "Resolution"
 msgstr "Risoluzione"
@@ -2617,7 +2632,7 @@ msgid "Select channel to record from"
 msgstr "Selezionare il canale di registrazione"
 
 msgid "Select image"
-msgstr ""
+msgstr "Selezionare un'immagine"
 
 msgid "Select refresh rate"
 msgstr "Selezionare la frequenza di refresh"
@@ -2629,13 +2644,13 @@ msgid "Select video mode"
 msgstr "Selezionare la modalità video"
 
 msgid "Selected source image"
-msgstr ""
+msgstr "Selezionare immagine sorgente"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Inviare DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Inviare DiSEqC solo su cambio satellite"
 
 msgid "Seperate titles with a main menu"
 msgstr "Separare i titoli con un Menu Principale"
@@ -2689,19 +2704,19 @@ msgid "Services"
 msgstr "Canali"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Configurare voltaggio e 22KHz"
 
 msgid "Set as default Interface"
 msgstr "=> interfaccia predefinita"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "=> interfaccia predefinita"
 
 msgid "Set limits"
 msgstr "Impostare limiti"
 
 msgid "Settings"
-msgstr "Setting"
+msgstr "Config."
 
 msgid "Setup"
 msgstr "Configurazione"
@@ -2755,7 +2770,7 @@ msgid "Simple"
 msgstr "Semplice"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Set titoli semplice (compatibilità con riproduttori legacy)"
 
 msgid "Single"
 msgstr "Singolo"
@@ -2835,9 +2850,6 @@ msgstr "Standby"
 msgid "Standby / Restart"
 msgstr "Standby / Riavvio"
 
-msgid "Start"
-msgstr "Avvio"
-
 msgid "Start from the beginning"
 msgstr "Partire dall'inizio"
 
@@ -2880,6 +2892,12 @@ msgstr "Arrestare la riproduzione?"
 msgid "Stop test"
 msgstr "Arrestare il test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr "Arrestare il test dopo # transpondere falliti"
+
+msgid "Stop testing plane after # successful transponders"
+msgstr "Arrestare il test dopo # transponder controllati con successo"
+
 msgid "Store position"
 msgstr "Memorizzare posizione"
 
@@ -2928,14 +2946,14 @@ msgstr "Sistema"
 #. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
 msgid "TRANSLATOR_INFO"
 msgstr ""
-"Traduzione italiana\n"
-"Dreambox - Enigma2 image\n"
-"Dario Croci - WWW.LINSAT.NET\n"
+"Traduzione italiana per\n"
+"enigma2 - Dreambox\n"
+"Dario Croci - www.linsat.net\n"
 "Supporto: spaeleus@croci.org.\n"
-"- 7 Settembre 2008 -"
+"- 05 gennaio 2009 -"
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "File TS troppo grande per ISO9660 livello 1!"
 
 msgid "TV System"
 msgstr "Standard TV"
@@ -2943,12 +2961,27 @@ msgstr "Standard TV"
 msgid "Table of content for collection"
 msgstr "Elenco contenuti raccolta"
 
+msgid "Tag 1"
+msgstr "Etich. 1"
+
+msgid "Tag 2"
+msgstr "Etich. 2"
+
+msgid "Tags"
+msgstr "Etich."
+
 msgid "Terrestrial"
 msgstr "Terrestre"
 
 msgid "Terrestrial provider"
 msgstr "Provider terrestre"
 
+msgid "Test DiSEqC settings"
+msgstr "Test configurazione DiSEqC"
+
+msgid "Test Type"
+msgstr "Tipo Test"
+
 msgid "Test mode"
 msgstr "Modalità test"
 
@@ -2963,14 +2996,7 @@ msgid ""
 "Please press OK to start using your Dreambox."
 msgstr ""
 "Grazie per aver usato questo wizard. Il DreamBox ora è pronto.\n"
-"Premere OK per inziare ad usarlo."
-
-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 ""
+"Premere OK per iniziare ad usarlo."
 
 msgid ""
 "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
@@ -2980,6 +3006,13 @@ msgstr ""
 "Lo standard DVD non supporta flussi video H.264 (HDTV). Creare un DVD in "
 "formato dati Dreambox? (NON sarà riproducibile su lettori DVD standard!)"
 
+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 ""
+"Ora la penna USB è avviabile. Scaricare l'immagine più recente dal server e "
+"salvarla sulla penna?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Backup fallito! Selezionare una destinazione differente per il backup."
 
@@ -2991,6 +3024,11 @@ msgid ""
 "\n"
 "Do you want to write the USB flasher to this stick?"
 msgstr ""
+"Rilevato il seguente dispositivo:\n"
+"\n"
+"%s\n"
+"\n"
+"Installare il flasher USB su questa penna?"
 
 msgid ""
 "The input port should be configured now.\n"
@@ -3016,11 +3054,16 @@ msgid ""
 "you want to burn this image to flash memory? You are doing this at your own "
 "risk!"
 msgstr ""
+"Validazione md5sum fallita, il file potrebbe essere corrotto! Il caricamento "
+"di questa immagine su memoria flash potrebbe rappresentare un rischio! "
+"Continuare?"
 
 msgid ""
 "The md5sum validation failed, the file may be downloaded incompletely or be "
 "corrupted!"
 msgstr ""
+"Convalida md5sum fallita: il file potrebbe essere stato scaricato solo "
+"parzialmente o essere corrotto!"
 
 msgid "The package doesn't contain anything."
 msgstr "Il pacchetto non contiene nulla"
@@ -3038,6 +3081,10 @@ msgstr "Il codice PIN inserito è errato!"
 msgid "The pin codes you entered are different."
 msgstr "I codici PIN inseriti sono diversi!"
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr "Risultati salvati su %s."
+
 msgid "The sleep timer has been activated."
 msgstr "Timer di spegnimento attivato!"
 
@@ -3077,22 +3124,28 @@ msgstr ""
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
-msgstr ""
+msgstr "Il file .nfi non contiene un'immagine %s valida!"
 
 msgid ""
 "This .NFI file does not have a md5sum signature and is not guaranteed to "
 "work. Do you really want to burn this image to flash memory?"
 msgstr ""
+"Il file .nfi non possiede una firma md5 valida: non è garantito il suo "
+"funzionamento. Installare comunque l'immagine sulla memoria flash?"
 
 msgid ""
 "This .NFI file has a valid md5 signature. Continue programming this image to "
 "flash memory?"
 msgstr ""
+"Il file .nfi possiede una firma md5 valida. Continuare l'installazione "
+"dell'immagine sulla memoria flash?"
 
 msgid ""
 "This DVD RW medium is already formatted - reformatting will erase all "
 "content on the disc."
 msgstr ""
+"Il DVD-RW è già formattato - una nuova formattazione cancellerà tutto il "
+"contenuto del disco!"
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
@@ -3173,6 +3226,9 @@ msgstr "Soglia"
 msgid "Thu"
 msgstr "Gio"
 
+msgid "Thumbnails"
+msgstr "Miniature"
+
 msgid "Thursday"
 msgstr "Giovedì"
 
@@ -3204,6 +3260,8 @@ msgid ""
 "Timer overlap in timers.xml detected!\n"
 "Please recheck it!"
 msgstr ""
+"Sovrapposizione Timer rilevata in timers.xml!\n"
+"Ricontrollare!"
 
 msgid "Timer sanity error"
 msgstr "Errore congruenza Timer!"
@@ -3220,6 +3278,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Timeshift impossibile!"
 
+msgid "Timeshift path..."
+msgstr "Percorso Timeshift"
+
 msgid "Timezone"
 msgstr "Fuso orario"
 
@@ -3227,18 +3288,25 @@ msgid "Title"
 msgstr "Titolo"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Titolo:"
+msgstr "Proprietà titolo"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Modalità set tioli"
 
 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."
-msgstr ""
+"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 ""
+"Per aggiornare il firmware del Dreambox, seguire queste indicazioni:\n"
+"1) Spegnere il box tramite l'interruttore posteriore e collegare la penna "
+"USB avviabile.\n"
+"2) Riaccendere il box tenendo premuto il tasto GIU' del pannello frontale "
+"per 10 secondi.\n"
+"3) Attendere l'avvio e seguire le istruzioni della configurazione guidata."
 
 msgid "Today"
 msgstr "Oggi"
@@ -3327,6 +3395,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "Penna USB"
 
+msgid "USB stick wizard"
+msgstr "Configurazione Guidata Penna USB"
+
+msgid "Ukrainian"
+msgstr "Ucraino"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3342,7 +3416,7 @@ msgstr ""
 "Errore: "
 
 msgid "Uncommitted DiSEqC command"
-msgstr "Coamdo DiSEqC 'Uncommitted'"
+msgstr "Comando DiSEqC 'Uncommitted'"
 
 msgid "Universal LNB"
 msgstr "LNB Universale"
@@ -3351,7 +3425,7 @@ msgid "Unmount failed"
 msgstr "Unmount fallito!"
 
 msgid "Update"
-msgstr ""
+msgstr "Aggiornare"
 
 msgid "Updates your receiver's software"
 msgstr "Aggiornare il software del ricevitore"
@@ -3371,6 +3445,9 @@ msgstr "Aggiornamento in corso"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "DreamBox in aggiornamento... Attendere."
 
+msgid "Use"
+msgstr "Usare"
+
 msgid "Use DHCP"
 msgstr "Usare DHCP"
 
@@ -3478,7 +3555,7 @@ msgid "View teletext..."
 msgstr "Televideo"
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Tastiera virtuale"
 
 msgid "Voltage mode"
 msgstr "Modalità voltaggio"
@@ -3496,7 +3573,7 @@ msgid "WPA"
 msgstr "WPA"
 
 msgid "WPA or WPA2"
-msgstr ""
+msgstr "WPA o WPA2"
 
 msgid "WPA2"
 msgstr "WPA2"
@@ -3507,9 +3584,6 @@ msgstr "WSS su 4:3"
 msgid "Waiting"
 msgstr "In attesa"
 
-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"
@@ -3579,6 +3653,9 @@ msgstr "Cosa cercare?"
 msgid "Where do you want to backup your settings?"
 msgstr "Dove salvare il backup configurazione?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Dove salvare le registrazioni temporanee \"timeshift\"?"
+
 msgid "Wireless"
 msgstr "Wireless"
 
@@ -3592,22 +3669,19 @@ msgid "Write failed!"
 msgstr "Scrittura fallita!"
 
 msgid "Writing NFI image file to flash completed"
-msgstr ""
-
-msgid "Writing image file to NAND Flash"
-msgstr ""
+msgstr "Scrittura file immagine su flash completata"
 
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Anno:"
+msgid "Year"
+msgstr "Anno"
 
 msgid "Yes"
 msgstr "Sì"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Sì, e cancellare questa registrazione"
 
 msgid "Yes, backup my settings!"
 msgstr "Sì, eseguire backup configurazione!"
@@ -3694,10 +3768,13 @@ 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 ""
+"La creazione di una nuova penna USB avviabile come Flasher .nfi richiede la "
+"riscrittura delle partizioni. Tutti i dati presenti sulla penna saranno "
+"cancellati!"
 
 #, python-format
 msgid "You have to wait %s!"
-msgstr "Occorre attendere %s!"
+msgstr "Occorre attendere per %s!"
 
 msgid ""
 "You need a PC connected to your dreambox. If you need further instructions, "
@@ -3711,15 +3788,6 @@ msgstr ""
 "Il DreamBox sarà arrestato, e al termine delle operazioni il nuovo firmware "
 "chiederà di ripristinare le configurazioni."
 
-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 ""
-"Per prima cosa occorre definire alcune\n"
-"parole chiave! Premere il tasto MENU per\n"
-"definirle. Iniziare?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3759,7 +3827,7 @@ msgstr ""
 "Premere OK per iniziare l'aggiornamento."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Configurazione di rete attivata."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3767,6 +3835,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Configurazione di rete attivata.\n"
+"Rilevata seconda intefaccia di rete.\n"
+"\n"
+"Disabilitare la seconda interfaccia di rete?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr ""
@@ -3803,16 +3875,16 @@ msgid "about to start"
 msgstr "Avvio in corso"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "Attivare configurazione corrente"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "Aggiungere voce Nameserver"
 
 msgid "add alternatives"
 msgstr "Aggiungere alternative"
 
 msgid "add bookmark"
-msgstr "Agg. segnalibro"
+msgstr "Agg.Segnalibro"
 
 msgid "add bouquet"
 msgstr "Aggiungere bouquet"
@@ -3865,33 +3937,42 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "Formato traccia audio (%s)"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "Lingua traccia audio (%s)"
 
 msgid "audio tracks"
 msgstr "Tracce audio"
 
+msgid "auto"
+msgstr "Auto"
+
 msgid "back"
 msgstr "Indietro"
 
 msgid "background image"
-msgstr "Immagine di sfondo"
+msgstr "immagine di sfondo"
+
+msgid "backgroundcolor"
+msgstr "Colore di sfondo"
 
 msgid "better"
 msgstr "Migliore"
 
+msgid "black"
+msgstr "Nero"
+
 msgid "blacklist"
 msgstr "Lista nera"
 
+msgid "blue"
+msgstr "Blu"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "by Exif"
+msgstr "Masterizzare traccia audio (%s)"
 
 msgid "change recording (duration)"
 msgstr "Cambiare la registrazione (durata)"
@@ -3903,7 +3984,7 @@ msgid "chapters"
 msgstr "Capitoli"
 
 msgid "choose destination directory"
-msgstr ""
+msgstr "Selezionare cartella destinazione"
 
 msgid "circular left"
 msgstr "Circolare a sinistra"
@@ -3914,9 +3995,6 @@ msgstr "Circolare a destra"
 msgid "clear playlist"
 msgstr "Cancellare playlist"
 
-msgid "color"
-msgstr "Immagine di sfondo"
-
 msgid "complex"
 msgstr "Complesso"
 
@@ -3944,12 +4022,12 @@ msgstr "Giornaliero"
 msgid "day"
 msgstr "Giorno"
 
-msgid "delete"
-msgstr "Cancellare"
-
 msgid "delete cut"
 msgstr "Cancellare taglio"
 
+msgid "delete file"
+msgstr "Cancellare file"
+
 msgid "delete playlist entry"
 msgstr "Cancellare voce dalla playlist"
 
@@ -4017,7 +4095,7 @@ msgid "end favourites edit"
 msgstr "Fine edit preferiti"
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 e rete"
 
 msgid "equal to"
 msgstr "Uguale a:"
@@ -4026,7 +4104,7 @@ msgid "exceeds dual layer medium!"
 msgstr "Supera la capacità di DVD doppio strato!"
 
 msgid "exit DVD player or return to file browser"
-msgstr "Uscire dal Player DVD e trornare alla lista file"
+msgstr "Uscire dal Player DVD e tornare alla lista file"
 
 msgid "exit mediaplayer"
 msgstr "Uscire dal Mediaplayer"
@@ -4035,32 +4113,32 @@ msgid "exit movielist"
 msgstr "Uscire da lista registrazioni"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "Uscire da configurazione Nameserver"
 
 msgid "exit network adapter configuration"
-msgstr ""
+msgstr "Uscire da Configurazione Interfaccia di Rete"
 
 msgid "exit network adapter setup menu"
-msgstr ""
+msgstr "Uscire da menu configurazione interfaccia di rete"
 
 msgid "exit network interface list"
-msgstr ""
+msgstr "Uscire da elenco interfacce di rete"
 
 msgid "exit networkadapter setup menu"
-msgstr ""
+msgstr "Uscire dal menu configurazione interfaccia di rete"
 
 msgid "failed"
 msgstr "Fallito"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "Formati file (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "Nome file"
 
 msgid "fine-tune your display"
 msgstr "Regolazione fine schermo"
 
-msgid "font face"
-msgstr "Modalità \"Authoring\""
-
 msgid "forward to the next chapter"
 msgstr "Passare al capitolo successivo"
 
@@ -4076,8 +4154,8 @@ msgstr "Spegnimento (Deep Standby)"
 msgid "go to standby"
 msgstr "Standby"
 
-msgid "headline"
-msgstr "Titolo"
+msgid "green"
+msgstr "Verde"
 
 msgid "hear radio..."
 msgstr "Radio"
@@ -4085,15 +4163,15 @@ msgstr "Radio"
 msgid "help..."
 msgstr "Aiuto"
 
+msgid "hidden network"
+msgstr "Rete nascosta"
+
 msgid "hide extended description"
 msgstr "Nascondere descrizione estesa"
 
 msgid "hide player"
 msgstr "Nascondere il player"
 
-msgid "highlighted button"
-msgstr "Pulsante evidenziato"
-
 msgid "horizontal"
 msgstr "Orizzontale"
 
@@ -4175,7 +4253,7 @@ msgid "menu"
 msgstr "Menu"
 
 msgid "menulist"
-msgstr ""
+msgstr "Menu"
 
 msgid "mins"
 msgstr "Min"
@@ -4193,16 +4271,16 @@ msgid "move PiP to main picture"
 msgstr "Inviare PiP a schermo principale"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "Andare all'ultima voce"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "Andare alla voce successiva"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "Andare alla prima voce"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "Tornare alla voce precedente"
 
 msgid "movie list"
 msgstr "Lista registrazioni"
@@ -4225,9 +4303,6 @@ msgstr "No"
 msgid "no HDD found"
 msgstr "Nessun HDD trovato!"
 
-msgid "no Picture found"
-msgstr "Nessuna immagine trovata!"
-
 msgid "no module found"
 msgstr "Nessun modulo trovato!"
 
@@ -4259,13 +4334,13 @@ msgid "on"
 msgstr "On"
 
 msgid "on READ ONLY medium."
-msgstr ""
+msgstr "su supporto A SOLA LETTURA."
 
 msgid "once"
 msgstr "Una volta"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "Configurazione Nameserver"
 
 msgid "open servicelist"
 msgstr "Lista canali"
@@ -4277,7 +4352,7 @@ msgid "open servicelist(up)"
 msgstr "Lista canali (sù)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "Aprire help imput tastiera virtuale"
 
 msgid "pass"
 msgstr "Pass"
@@ -4306,17 +4381,17 @@ msgstr "Canale precedente"
 msgid "previous channel in history"
 msgstr "Canale precedente nella history"
 
-msgid "rebooting..."
-msgstr ""
-
 msgid "record"
 msgstr "Registrare"
 
 msgid "recording..."
-msgstr "Registrazione in corso..."
+msgstr "Registrazione..."
+
+msgid "red"
+msgstr "Rosso"
 
 msgid "remove a nameserver entry"
-msgstr ""
+msgstr "Eliminare voce Nameserver"
 
 msgid "remove after this position"
 msgstr "Cancellare dopo questa pos."
@@ -4363,15 +4438,21 @@ msgstr "Tornare al capitolo precedente"
 msgid "right"
 msgstr "Destro"
 
+msgid "save last directory on exit"
+msgstr "Salvare l'ultima cartella uscendo"
+
 msgid "save playlist"
 msgstr "Salvare la playlist"
 
+msgid "save playlist on exit"
+msgstr "Salvare la playlist uscendo"
+
 msgid "scan done!"
 msgstr "Ricerca terminata!"
 
 #, python-format
 msgid "scan in progress - %d%% done!"
-msgstr "Ricerca in corso - %d%% completato:"
+msgstr "Ricerca in corso - %d%% completata!"
 
 msgid "scan state"
 msgstr "Stato ricerca"
@@ -4389,16 +4470,16 @@ msgid "select"
 msgstr "Selezionare"
 
 msgid "select .NFI flash file"
-msgstr ""
+msgstr "Selezionare il file flash .nfi"
 
 msgid "select image from server"
-msgstr ""
+msgstr "Selezionare immagine dal server"
 
 msgid "select interface"
-msgstr ""
+msgstr "Selezionare Interfaccia"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "Selezionare voce menu"
 
 msgid "select movie"
 msgstr "Selezionare registrazione"
@@ -4418,6 +4499,9 @@ msgstr "Mostrare il Menu Principale DVD"
 msgid "show EPG..."
 msgstr "EPG"
 
+msgid "show Infoline"
+msgstr "Mostrare Informazioni"
+
 msgid "show all"
 msgstr "Mostrare tutto"
 
@@ -4430,11 +4514,11 @@ msgstr "Mostrare dettagli evento"
 msgid "show extended description"
 msgstr "Mostrare descrizione estesa"
 
-msgid "show first tag"
-msgstr "Mostrare la prima etichetta"
+msgid "show first selected tag"
+msgstr "Mostrare la prima etichetta selezionata"
 
-msgid "show second tag"
-msgstr "Mostrare la seconda etichetta"
+msgid "show second selected tag"
+msgstr "Mostrare la seconda etichetta selezionata"
 
 msgid "show shutdown menu"
 msgstr "Mostrare menu di arresto"
@@ -4469,12 +4553,12 @@ msgstr "Skip avanti"
 msgid "skip forward (enter time)"
 msgstr "Skip avanti (inserire intervallo)"
 
+msgid "slide picture in loop"
+msgstr "Scorrere immagini in loop"
+
 msgid "sort by date"
 msgstr "Ordine per data"
 
-msgid "spaces (top, between rows, left)"
-msgstr "Margini (alto, tra le righe, sinistro)"
-
 msgid "standard"
 msgstr "Standard"
 
@@ -4484,6 +4568,9 @@ msgstr "Standby"
 msgid "start cut here"
 msgstr "Inizio Taglio"
 
+msgid "start directory"
+msgstr "Cartella di avvio"
+
 msgid "start timeshift"
 msgstr "Avviare timeshift"
 
@@ -4514,14 +4601,20 @@ msgstr "Passare alla lista file"
 msgid "switch to playlist"
 msgstr "Passare alla playlist"
 
+msgid "switch to the next angle"
+msgstr "Passare all'angolazione successiva"
+
 msgid "switch to the next audio track"
 msgstr "Passare alla traccia audio successiva"
 
 msgid "switch to the next subtitle language"
 msgstr "Passare alla lingua sottotitoli successiva"
 
-msgid "text"
-msgstr "Testo"
+msgid "template file"
+msgstr "File modello"
+
+msgid "textcolor"
+msgstr "Colore testo"
 
 msgid "this recording"
 msgstr "Questa registrazione"
@@ -4571,8 +4664,11 @@ msgstr "Settimanale"
 msgid "whitelist"
 msgstr "Lista bianca"
 
-msgid "year"
-msgstr "Anno"
+msgid "working"
+msgstr "Test in corso..."
+
+msgid "yellow"
+msgstr "Giallo"
 
 msgid "yes"
 msgstr "Sì"
@@ -4600,85 +4696,101 @@ msgstr "Zapped"
 #~ "\n"
 #~ "Enigma2 sarà riavviato dopo il ripristino"
 
-#~ msgid "\"?"
-#~ msgstr "\"?"
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr "Creazione penna USB per Flasher .nfi terminata con successo"
 
-#~ msgid "DVD ENTER key"
-#~ msgstr "Tasto ENTER DVD"
+#~ msgid "AGC"
+#~ msgstr "AGC"
 
-#~ msgid "DVD down key"
-#~ msgstr "Tasto 'Giù' DVD"
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
 
-#~ msgid "DVD left key"
-#~ msgstr "Tasto 'Sx' DVD"
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Copia immagine di avvio Flasher USB in corso..."
 
-#~ msgid "DVD right key"
-#~ msgstr "Tasto 'Dx' DVD"
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Decompressione immagine di avvio USB Flasher in corso..."
 
-#~ msgid "DVD up key"
-#~ msgstr "Tasto 'Sù' DVD"
+#~ msgid "Downloading image description..."
+#~ msgstr "Scaricamento descrizione immagine in corso..."
 
-#~ msgid ""
-#~ "Do you really want to REMOVE\n"
-#~ "the plugin \""
-#~ msgstr ""
-#~ "Si conferma la rimozione\n"
-#~ "del plugin \"%s\"?"
+#~ msgid "Fix USB stick"
+#~ msgstr "Conf. Penna"
+
+#~ msgid "Font size"
+#~ msgstr "Dim. Carattere"
 
 #~ msgid ""
-#~ "Do you really want to download\n"
-#~ "the plugin \""
+#~ "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 ""
-#~ "Si conferma il download\n"
-#~ "del plugin \"%s\"?"
+#~ "Ora inserire la penna USB (min. 64 MB) che sarà formattata per essere "
+#~ "utilizzata come flasher di immagini .nfi. Premere OK dopo aver inserito "
+#~ "la penna."
 
-#~ msgid "Jump to video title 1 (play movie from start)"
-#~ msgstr "Passare al titolo video 1 (riprodurre dall'inizio)"
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Partizione penna USB in corso..."
 
-#~ msgid ""
-#~ "No working local networkadapter found.\n"
-#~ "Please verify that you have attached a network cable and your Network is "
-#~ "configured correctly."
-#~ msgstr ""
-#~ "Nessuna scheda di rete locate trovata!\n"
-#~ "Verificare di aver collegato il cavo e che la rete sia configurata "
-#~ "correttamente."
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Attendere la verifica della firma md5..."
+
+#~ msgid "Really delete this timer?"
+#~ msgstr "Cancellare questo timer?"
+
+#~ msgid "Remounting stick partition..."
+#~ msgstr "\"Remount\" partizione penna in corso..."
 
 #~ msgid ""
-#~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "you local network interface."
-#~ msgstr ""
-#~ "Nessun adattatore di rete wireless trovato!\n"
-#~ "Verificare di aver collegato un adattatore WLAN USB compatibile o "
-#~ "abilitare l'intefaccia di rete locale."
+#~ "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 "La penna USB - Flasher Immagini .nfi è pronta per l'uso. Scaricare "
+
+#~ msgid "Title:"
+#~ msgstr "Titolo:"
 
 #~ msgid ""
-#~ "No working wireless networkadapter found.\n"
-#~ "Please verify that you have attached a compatible WLAN USB Stick and your "
-#~ "Network is configured correctly."
+#~ "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."
 #~ msgstr ""
-#~ "Nessun adattatore di rete wireless trovato!\n"
-#~ "Verificare di aver collegato un adattatore WLAN USB compatibile e che la "
-#~ "rete sia configutata correttamente."
+#~ "Ora, per maggiore sicurezza, rimuovere la penna USB e ricollegarla solo "
+#~ "quando verrà richiesto. Premere OK dopo aver rimosso la penna."
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr "Registrazioni in corso o in avvio a breve! Riavviare ora?"
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Configurazione penna USB in corso..."
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr "Registrazioni in corso o in avvio a breve! Riavviare ora?"
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Scrittura file immagine su Flash NAND"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr "Registrazioni in corso o in avvio a breve! Spegnere ora?"
+#~ msgid "by Exif"
+#~ msgstr "by Exif"
+
+#~ msgid "color"
+#~ msgstr "colore"
+
+#~ msgid "font face"
+#~ msgstr "Carattere"
+
+#~ msgid "headline"
+#~ msgstr "Intest."
+
+#~ msgid "highlighted button"
+#~ msgstr "Puls. evidenziato"
+
+#~ msgid "no Picture found"
+#~ msgstr "Nessuna immagine trovata!"
+
+#~ msgid "rebooting..."
+#~ msgstr "Riavvio in corso..."
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "Margini (alto, tra le righe, sinistro)"
 
-#~ msgid "full /etc directory"
-#~ msgstr "Cartella /etc completa"
+#~ msgid "text"
+#~ msgstr "Testo"
 
-#~ msgid "only /etc/enigma2 directory"
-#~ msgstr "Solo la cartella /etc/enigma2"
+#~ msgid "year"
+#~ msgstr "Anno"
old mode 100755 (executable)
new mode 100644 (file)
index 6aecc95..fa2e034
--- a/po/lt.po
+++ b/po/lt.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-16 23:21+0100\n"
-"PO-Revision-Date: 2008-11-15 22:37+0200\n"
+"POT-Creation-Date: 2008-11-26 13:07+0100\n"
+"PO-Revision-Date: 2008-11-25 00:26+0200\n"
 "Last-Translator: Audronis, Grincevicius <audrgrin@takas.lt>\n"
 "Language-Team: Adga / enigma2 (c) <audrgrin@takas.lt>\n"
 "MIME-Version: 1.0\n"
@@ -94,9 +94,6 @@ msgstr "* Pasiekiamas tiktai, surinkus paslėptą SSID ar tinklo raktą"
 msgid ".NFI Download failed:"
 msgstr ".NFI parsisiuntimas klaidingas:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ".NFI diegėjo paleidimo USB raktelis sėkmingai sukurtas."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -378,8 +375,8 @@ msgstr ""
 "Po nustatymų vedlio darbo baigimo Jūs galite nustatyti kai kurių kanalų "
 "apribojimus. Paskaitykite imtuvo instrukciją kaip tai padaryti."
 
-msgid "Album:"
-msgstr "Albumas:"
+msgid "Album"
+msgstr "Albumas"
 
 msgid "All"
 msgstr "Visi"
@@ -387,9 +384,6 @@ msgstr "Visi"
 msgid "All Satellites"
 msgstr "Visi palydovai"
 
-msgid "All..."
-msgstr "Visi..."
-
 msgid "Alpha"
 msgstr "Permatoma"
 
@@ -422,8 +416,8 @@ msgstr ""
 "Jūs esate įsitikinęs, kad norite iš naujo paleisti savo tinklo sąsajas? \n"
 "\n"
 
-msgid "Artist:"
-msgstr "Atlikėjas:"
+msgid "Artist"
+msgstr "Atlikėjas"
 
 msgid "Ask before shutdown:"
 msgstr "Klausti prieš išjungiant: "
@@ -737,9 +731,6 @@ msgstr "Tęsti žiūrėjimą"
 msgid "Contrast"
 msgstr "Kontrastas"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Kopijuojamas USB diegėjo paleidimo atvaizdas į raktelį..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Negalima prisijungti prie Dreambox .NFI atvaizdo perdavimo serverio:"
 
@@ -816,9 +807,6 @@ msgstr "Danų"
 msgid "Date"
 msgstr "Duomenys"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Dekompresuojamas USB raktelis, diegėjo paleidžiamasis atvaizdas..."
-
 msgid "Deep Standby"
 msgstr "Visiškai išjungti"
 
@@ -1037,9 +1025,6 @@ msgstr "Galimi įdiegti priedai"
 msgid "Downloading"
 msgstr "Parsisiunčiama"
 
-msgid "Downloading image description..."
-msgstr "Atvaizdo apibūdinimo parsisiuntimas..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Parsiunčiama informacija apie priedus. Prašome palaukti..."
 
@@ -1122,9 +1107,6 @@ msgstr "Rakto užšifravimo tipas"
 msgid "Encryption Type"
 msgstr "Užšifravimo būdas"
 
-msgid "End"
-msgstr "Pabaiga"
-
 msgid "End time"
 msgstr "Pabaigos laikas"
 
@@ -1198,6 +1180,9 @@ msgstr "Vykdymo eiga:"
 msgid "Execution finished!!"
 msgstr "Vykdymas baigtas!!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Išeiti"
 
@@ -1271,9 +1256,6 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr "Iš pradžių reikia parsisiųsti paskutinę aplinką USB atvaizdo diegėjui."
 
-msgid "Fix USB stick"
-msgstr "Taisyti USB"
-
 msgid "Flash"
 msgstr "Vidinė atmintis"
 
@@ -1289,6 +1271,9 @@ msgstr "Formatas"
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Rėmo pakartojimo skaičiavimas per nelygų vingiavimą"
 
+msgid "Frame size in full view"
+msgstr "Kadro dydis pilname vaizde"
+
 msgid "French"
 msgstr "Prancūzų"
 
@@ -1310,6 +1295,9 @@ msgstr "Pen"
 msgid "Friday"
 msgstr "Penktadienis"
 
+msgid "Frisian"
+msgstr ""
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP adresas"
 
@@ -1333,8 +1321,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Šliuzas"
 
-msgid "Genre:"
-msgstr "Žanras:"
+msgid "Genre"
+msgstr "Žanras"
 
 msgid "German"
 msgstr "Vokiečių"
@@ -1813,7 +1801,7 @@ msgid "No HDD found or HDD not initialized!"
 msgstr "Kietas diskas nerastas arba neinicializuotas!"
 
 msgid "No Networks found"
-msgstr ""
+msgstr "Jokie Tinklai nesurasti"
 
 msgid "No backup needed"
 msgstr "Atsarginės kopijos nereikia"
@@ -1850,6 +1838,9 @@ msgstr "Nėra pozicionieriaus, kuris rastų priekinį kraštą."
 msgid "No satellite frontend found!!"
 msgstr "Nerastas palydovas!!"
 
+msgid "No tags are set on these movies."
+msgstr "Jokios kortelės su užrašu nėra nustatytos šiems kino filmams"
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Nėra imtuvo, suderinto naudotis su diseqc pozicionieriumi!"
 
@@ -1953,15 +1944,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Dabar grojama"
 
-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 ""
-"Dabar prašome įdėti USB raktelį (minimalus dydis yra 64 MB), kad "
-"suformatuoti ir naudoti kaip.NFI atvaizdo diegėją. Spauskite OK  po to, kai "
-"jūs įdėjote raktelį."
-
 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 "
@@ -2001,9 +1983,6 @@ msgstr "Tik nekoduotus"
 msgid "Orbital Position"
 msgstr "Pozicija orbitoje"
 
-msgid "Other..."
-msgstr "Kitas..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2038,15 +2017,15 @@ msgstr "Tėvų kontrolės nustatymai"
 msgid "Parental control type"
 msgstr "Tėvų kontrolės rūšis"
 
-msgid "Partitioning USB stick..."
-msgstr "Padalijamas USB raktelis..."
-
 msgid "Pause movie at end"
 msgstr "Filmo pauzė pabaigoje"
 
 msgid "PiPSetup"
 msgstr "PiP nustatymas"
 
+msgid "PicturePlayer"
+msgstr "Paveikslėlių grotuvas"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2091,6 +2070,13 @@ msgid "Please choose the default services lists you want to install."
 msgstr ""
 "Prašome pasirinkti numatytuosius kanalų sąrašus, kuriuos jūs norite įdiegti."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Prašome atjungti visus USB prietaisus nuo savo Dreambox, ir (per-) įjungti "
+"pasirinktą USB prietaisą (minimalus dydis yra 64 MB) dabar!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Prašome nekeisti reikšmių, jeigu Jūs nežinote ką darote! "
 
@@ -2146,8 +2132,8 @@ msgstr "Prašome išsirinkti subkanalą dėl įrašymo..."
 msgid "Please select a subservice..."
 msgstr "Prašome išsirinkti subkanalą..."
 
-msgid "Please select keyword to filter..."
-msgstr "Prašome išsirinkti raktinį žodį dėl filtravimo..."
+msgid "Please select tag to filter..."
+msgstr "Prašome išsirinkti kortelę filtravimui..."
 
 msgid "Please select target directory or medium"
 msgstr "Prašome išsirinkti direktoriją arba diską"
@@ -2183,9 +2169,6 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr "Prašome laukti jūsų tinklo konfigūracijos aktyvavimo..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Prašome laukti md5 parašo patikrinimo..."
-
 msgid "Please wait while we configure your network..."
 msgstr "Prašome laukti kol konfigūruojamas jūsų tinklas..."
 
@@ -2366,9 +2349,6 @@ msgstr "Atnaujinimo norma"
 msgid "Refresh rate selection."
 msgstr "Atnaujinkite normos pasirinkimą"
 
-msgid "Remounting stick partition..."
-msgstr "Perjungiamas raktelio padalinimas..."
-
 msgid "Remove Bookmark"
 msgstr "Pašalinti žymę"
 
@@ -2862,9 +2842,6 @@ msgstr "Budėti"
 msgid "Standby / Restart"
 msgstr "Budėti / Perkrauti"
 
-msgid "Start"
-msgstr "Pradėti"
-
 msgid "Start from the beginning"
 msgstr "Pradžia nuo pradžios"
 
@@ -2965,6 +2942,15 @@ msgstr "TV sistema"
 msgid "Table of content for collection"
 msgstr "Turinio lentelė dėl kolekcijos"
 
+msgid "Tag 1"
+msgstr "Kortelė 1"
+
+msgid "Tag 2"
+msgstr "Kortelė 2"
+
+msgid "Tags"
+msgstr "Kortelės"
+
 msgid "Terrestrial"
 msgstr "Antžeminė"
 
@@ -2988,17 +2974,6 @@ msgstr ""
 "naudojimui.\n"
 "Prašome nuspauskite OK, kad pradėti naudotis imtuvu."
 
-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 ""
-".NFI atvaizdo diegimo USB raktelis yra paruoštas naudoti. Prašome perkelti ."
-"NFI atvaizdo failą iš perdavimo serverio ir išsaugoti jį raktelyje. Tada "
-"perkraukite ir laikykite nuspaustą mygtuką 'Žemyn' ant priekinės imtuvo "
-"panėlės kad paleisti .NFI diegėją iš raktelio!"
-
 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 "
@@ -3008,6 +2983,13 @@ msgstr ""
 "Dreambox formato duomenų DVD (kuris nepasileis viena pozicija DVD "
 "grotuvuose), vietoj to?"
 
+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 ""
+"USB prietaisas dabar yra paleidžiamasis. Jūs norite persisiųsti paskutinį "
+"atvaizdą iš perdavimo serverio ir išsaugoti tai prietaise?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Išsaugoti nepavyko. Pasirinkite kitą vietą išsaugojimui. "
 
@@ -3218,6 +3200,9 @@ msgstr "Heterodinas"
 msgid "Thu"
 msgstr "Ket"
 
+msgid "Thumbnails"
+msgstr "Miniatiūros"
+
 msgid "Thursday"
 msgstr "Ketvirtadienis"
 
@@ -3267,6 +3252,9 @@ msgstr "Laiko perst."
 msgid "Timeshift not possible!"
 msgstr "Laiko perstumimas negalimas!"
 
+msgid "Timeshift path..."
+msgstr "Laiko poslinkio kelias..."
+
 msgid "Timezone"
 msgstr "Laiko juosta"
 
@@ -3276,18 +3264,23 @@ msgstr "Antraštė"
 msgid "Title properties"
 msgstr "Ypatybės"
 
-msgid "Title:"
-msgstr "Pavadinimas:"
-
 msgid "Titleset mode"
 msgstr "Pavadinimo nustatymo būdas"
 
 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 ""
-"Jeigu jūs ketinate daryti tai, prašome pašalinti USB raktelį dabar. "
-"Spauskite OK, kai išimsite raktelįį."
+"Kad atnaujintumėte jūsų imtuvo programinę įrangą, prašome atlikti:\n"
+"1) Išjunkite savo imtuvą su galiniu įtampos išjungimo mygtuku ir prijunkite "
+"paleidžiamąjį USB prietaisą.\n"
+"2) Vėl įjunkite maitinimo tinklą laikydami nuspaustą ŽEMYN mygtuką ant "
+"priekinės panėlės apie 10 sekundžių \n"
+"3) Laukite paleidimo ir sekite nustatymų vedlio instrukcijas."
 
 msgid "Today"
 msgstr "Šiandien"
@@ -3378,8 +3371,11 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB raktelis"
 
+msgid "USB stick wizard"
+msgstr "USB prietaiso vedlys"
+
 msgid "Ukrainian"
-msgstr ""
+msgstr "Ukrainiečių"
 
 msgid ""
 "Unable to complete filesystem check.\n"
@@ -3426,7 +3422,7 @@ msgid "Upgrading Dreambox... Please wait"
 msgstr "Atnaujinamas imtuvas... Prašome palaukti"
 
 msgid "Use"
-msgstr ""
+msgstr "Naudoti"
 
 msgid "Use DHCP"
 msgstr "Naudoti DHCP"
@@ -3564,9 +3560,6 @@ msgstr "WSS į 4:3"
 msgid "Waiting"
 msgstr "Laukite"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Laukite kol USB raktelis susitvarkys..."
-
 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"
@@ -3635,6 +3628,9 @@ msgstr "Ką Jūs norite skanuoti?"
 msgid "Where do you want to backup your settings?"
 msgstr "Kur Jūs norite išsaugoti nustatymų atsarginę kopiją?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Kur saugoti laikinus laiko poslinkio įrašus?"
+
 msgid "Wireless"
 msgstr "Belaidis "
 
@@ -3650,14 +3646,11 @@ msgstr "Įrašymas klaidingas!"
 msgid "Writing NFI image file to flash completed"
 msgstr "NFI atvaizdo failo įrašymas į vidinę atmintį užbaigtas"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Atvaizdo failo į NAND fliašą įrašymas"
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Metai:"
+msgid "Year"
+msgstr "Metai"
 
 msgid "Yes"
 msgstr "Taip"
@@ -3775,15 +3768,6 @@ msgstr ""
 "Jūsų imtuvas turi būti sustabdytas. Po atnaujinimo nauja PĮ paprašys atkurti "
 "Jūsų nustatymus. "
 
-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 ""
-"Jums iš pradžių reikia nustatyti keletą raktinių žodžių!\n"
-"Spauskite MENU-mygtuką nustatykite raktinius žodžius.\n"
-"Ar jūs norite nustatyti raktinius žodžius dabar?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3944,19 +3928,25 @@ msgstr "atgal"
 msgid "background image"
 msgstr "foninis atvaizdas"
 
+msgid "backgroundcolor"
+msgstr "foninė spalva"
+
 msgid "better"
 msgstr "geriau"
 
+msgid "black"
+msgstr "juodas"
+
 msgid "blacklist"
 msgstr "juodas sąrašas"
 
+msgid "blue"
+msgstr "mėlynas"
+
 #, python-format
 msgid "burn audio track (%s)"
 msgstr "išdeginkite garso takelį (%s)"
 
-msgid "by Exif"
-msgstr "pagal Exif"
-
 msgid "change recording (duration)"
 msgstr "pakeisti įrašymą (trukmę)"
 
@@ -4012,7 +4002,7 @@ msgid "delete cut"
 msgstr "trinti iškirpimą"
 
 msgid "delete file"
-msgstr ""
+msgstr "trinti failą"
 
 msgid "delete playlist entry"
 msgstr "trinti įrašą iš grojaraščio "
@@ -4116,6 +4106,9 @@ msgstr "išeiti iš tinklo adapterio nustatymų meniu"
 msgid "failed"
 msgstr "klaidingas"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "failų formatai (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "failo pavadinimas"
 
@@ -4140,6 +4133,9 @@ msgstr "eiti į visišką išjungimą"
 msgid "go to standby"
 msgstr "eiti į išjungimą"
 
+msgid "green"
+msgstr "žalias"
+
 msgid "headline"
 msgstr "antraštė"
 
@@ -4150,7 +4146,7 @@ msgid "help..."
 msgstr "Pagalba..."
 
 msgid "hidden network"
-msgstr ""
+msgstr "paslėptas tinklas"
 
 msgid "hide extended description"
 msgstr "slėpti išplėstą aprašymą"
@@ -4292,9 +4288,6 @@ msgstr "ne"
 msgid "no HDD found"
 msgstr "Kietas diskas nerastas"
 
-msgid "no Picture found"
-msgstr "Paveikslėlių nerasta"
-
 msgid "no module found"
 msgstr "modulis nerastas"
 
@@ -4373,15 +4366,15 @@ msgstr "Buvęs kanalas"
 msgid "previous channel in history"
 msgstr "Buvęs kanalas į istoriją"
 
-msgid "rebooting..."
-msgstr "perleidžiama..."
-
 msgid "record"
 msgstr "įrašas"
 
 msgid "recording..."
 msgstr "įrašoma..."
 
+msgid "red"
+msgstr "raudonas"
+
 msgid "remove a nameserver entry"
 msgstr "pašalinkite serverio pavadinimo įėjimą"
 
@@ -4431,13 +4424,13 @@ msgid "right"
 msgstr "dešinys"
 
 msgid "save last directory on exit"
-msgstr ""
+msgstr "išsaugoti paskutinę direktoriją išeinant"
 
 msgid "save playlist"
 msgstr "išsaugoti grojaraštį"
 
 msgid "save playlist on exit"
-msgstr ""
+msgstr "išsaugoti grojaraštį išeinant"
 
 msgid "scan done!"
 msgstr "skanavimas baigtas!"
@@ -4491,6 +4484,9 @@ msgstr "rodyti DVD pagrindinį meniu"
 msgid "show EPG..."
 msgstr "Rodyti EPG..."
 
+msgid "show Infoline"
+msgstr "rodyti informacijos eilutę"
+
 msgid "show all"
 msgstr "rodyti viską"
 
@@ -4503,11 +4499,11 @@ msgstr "rodyti užduočių detales"
 msgid "show extended description"
 msgstr "rodyti išplėstą informaciją"
 
-msgid "show first tag"
-msgstr "rodyti pirmą etiketę"
+msgid "show first selected tag"
+msgstr "rodyti pirmą išsirinktą kortelę su užrašu"
 
-msgid "show second tag"
-msgstr "rodyti sekančią kortelę"
+msgid "show second selected tag"
+msgstr "rodyti kitą išsirinktą kortelę su užrašu"
 
 msgid "show shutdown menu"
 msgstr "išjungimo meniu"
@@ -4542,6 +4538,9 @@ msgstr "Praleisti sukimą į priekį"
 msgid "skip forward (enter time)"
 msgstr "Praleisti pirmyn (įrašykite laiką)"
 
+msgid "slide picture in loop"
+msgstr "skaidrės paveikslėlis kontūre"
+
 msgid "sort by date"
 msgstr "rūšiuoti pagal datą"
 
@@ -4558,7 +4557,7 @@ msgid "start cut here"
 msgstr "pradėti iškirpimą čia"
 
 msgid "start directory"
-msgstr ""
+msgstr "pradėti direktoriją"
 
 msgid "start timeshift"
 msgstr "Pradėti laiko perstumimą"
@@ -4599,6 +4598,9 @@ msgstr "perjungti į kitą subtitrų kalbą"
 msgid "text"
 msgstr "tekstas"
 
+msgid "textcolor"
+msgstr "teksto spalva"
+
 msgid "this recording"
 msgstr "tai įrašyta"
 
@@ -4647,8 +4649,8 @@ msgstr "kas savaitę"
 msgid "whitelist"
 msgstr "baltas sąrašas"
 
-msgid "year"
-msgstr "metai"
+msgid "yellow"
+msgstr "geltonas"
 
 msgid "yes"
 msgstr "taip"
@@ -4679,6 +4681,9 @@ msgstr "įjungta"
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr ".NFI diegėjo paleidimo USB raktelis sėkmingai sukurtas."
+
 #~ msgid "Abort"
 #~ msgstr "Nutraukti"
 
@@ -4689,6 +4694,9 @@ msgstr "įjungta"
 #~ msgid "Adress"
 #~ msgstr "IP adresas"
 
+#~ msgid "All..."
+#~ msgstr "Visi..."
+
 #~ msgid "Allow zapping via webif"
 #~ msgstr "Leisti jungti per webif"
 
@@ -4752,6 +4760,9 @@ msgstr "įjungta"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Prisijunkite prie interneto su vietiniu tinklu"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Kopijuojamas USB diegėjo paleidimo atvaizdas į raktelį..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD SURINKTI raktą"
 
@@ -4767,6 +4778,9 @@ msgstr "įjungta"
 #~ msgid "DVD up key"
 #~ msgstr "DVD aukštyn raktas"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Dekompresuojamas USB raktelis, diegėjo paleidžiamasis atvaizdas..."
+
 #~ msgid "Default-Wizard"
 #~ msgstr "Numatytas vedlys"
 
@@ -4796,6 +4810,9 @@ msgstr "įjungta"
 #~ msgid "Do you really want to exit?"
 #~ msgstr "Jūs tikrai norite išeiti?"
 
+#~ msgid "Downloading image description..."
+#~ msgstr "Atvaizdo apibūdinimo parsisiuntimas..."
+
 #~ msgid "Edit current title"
 #~ msgstr "Suredaguokite dabartinį pavadinimą"
 
@@ -4819,12 +4836,18 @@ msgstr "įjungta"
 #~ "Įjunkite vietinį tinklą savo imtuve.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Pabaiga"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Išjunkite nustatymų vedlį ir konfigūruokite vėliau rankiniu būdu "
 
 #~ msgid "Factoryreset"
 #~ msgstr "Gamykliniai nustatymai"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Taisyti USB"
+
 #~ msgid "Jump to video title 1 (play movie from start)"
 #~ msgstr "Šuolis į vaizdo pavadinimą 1 (rodo kino filmą nuo pradžios)"
 
@@ -4885,6 +4908,21 @@ msgstr "įjungta"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Ne, leiskite man pasirinkti numatytuosius sąrašus"
 
+#~ 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 ""
+#~ "Dabar prašome įdėti USB raktelį (minimalus dydis yra 64 MB), kad "
+#~ "suformatuoti ir naudoti kaip.NFI atvaizdo diegėją. Spauskite OK  po to, "
+#~ "kai jūs įdėjote raktelį."
+
+#~ msgid "Other..."
+#~ msgstr "Kitas..."
+
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Padalijamas USB raktelis..."
+
 #~ 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 "
@@ -4936,6 +4974,9 @@ msgstr "įjungta"
 #~ msgid "Please select below the wireless network you want to connect to."
 #~ msgstr "Prašome išsirinkti belaidį tinklą, prie kurio jūs norite jungtis."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Prašome išsirinkti raktinį žodį dėl filtravimo..."
+
 #, fuzzy
 #~ msgid ""
 #~ "Please select the network interface that you want to use for your "
@@ -4950,6 +4991,9 @@ msgstr "įjungta"
 #~ "\n"
 #~ "Prašome spausti OK, kad tęsti."
 
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Prašome laukti md5 parašo patikrinimo..."
+
 #, fuzzy
 #~ msgid "Port"
 #~ msgstr "Jungtis A"
@@ -4987,6 +5031,9 @@ msgstr "įjungta"
 #~ msgstr ""
 #~ "Vyksta įrašymas arba netrukus prasidės... tikrai norite išjungti dabar?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Perjungiamas raktelio padalinimas..."
+
 #~ msgid "Restart your wireless interface"
 #~ msgstr "Paleiskite iš naujo savo belaidį įrenginį"
 
@@ -4999,6 +5046,9 @@ msgstr "įjungta"
 #~ msgid "Show files from %s"
 #~ msgstr "Rodyti failus iš %s"
 
+#~ msgid "Start"
+#~ msgstr "Pradėti"
+
 #, fuzzy
 #~ msgid "Start Webinterface"
 #~ msgstr "Pasirinkti numatytą sąsają"
@@ -5066,6 +5116,25 @@ msgstr "įjungta"
 #~ "naudojimui.\n"
 #~ "Prašome nuspauskite OK, kad pradėti naudotis imtuvu."
 
+#~ 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 ""
+#~ ".NFI atvaizdo diegimo USB raktelis yra paruoštas naudoti. Prašome "
+#~ "perkelti .NFI atvaizdo failą iš perdavimo serverio ir išsaugoti jį "
+#~ "raktelyje. Tada perkraukite ir laikykite nuspaustą mygtuką 'Žemyn' ant "
+#~ "priekinės imtuvo panėlės kad paleisti .NFI diegėją iš raktelio!"
+
+#~ 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."
+#~ msgstr ""
+#~ "Jeigu jūs ketinate daryti tai, prašome pašalinti USB raktelį dabar. "
+#~ "Spauskite OK, kai išimsite raktelįį."
+
 #, fuzzy
 #~ msgid "Use Authorization"
 #~ msgstr "Poliarizacija"
@@ -5080,6 +5149,9 @@ msgstr "įjungta"
 #~ msgid "VCR Switch"
 #~ msgstr "VCR perjungėjas"
 
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Laukite kol USB raktelis susitvarkys..."
+
 #, fuzzy
 #~ msgid ""
 #~ "Welcome.\n"
@@ -5100,6 +5172,9 @@ msgstr "įjungta"
 #~ msgid "When complete, press Key 0 to burn the collection!"
 #~ msgstr "Kai bus baigta, spauskite mygtuką 0, kad išdegintumėte kolekciją!"
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Atvaizdo failo į NAND fliašą įrašymas"
+
 #, fuzzy
 #~ msgid "You can choose, what you want to install.."
 #~ msgstr "Jūs galite išsirinkti, ką jūs norite įdiegti..."
@@ -5107,6 +5182,15 @@ msgstr "įjungta"
 #~ msgid "You have to wait for"
 #~ msgstr "Jūs turite laukti"
 
+#~ 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 ""
+#~ "Jums iš pradžių reikia nustatyti keletą raktinių žodžių!\n"
+#~ "Spauskite MENU-mygtuką nustatykite raktinius žodžius.\n"
+#~ "Ar jūs norite nustatyti raktinius žodžius dabar?"
+
 #, fuzzy
 #~ msgid ""
 #~ "Your Dreambox is now ready to use.\n"
@@ -5158,6 +5242,9 @@ msgstr "įjungta"
 #~ "Jūsų belaidžio interneto prisijungimas neveikia!\n"
 #~ "Prašom pasirinkti tai, ką jūs norite padaryti paskui."
 
+#~ msgid "by Exif"
+#~ msgstr "pagal Exif"
+
 #~ msgid "cancel"
 #~ msgstr "panaikinti"
 
@@ -5176,9 +5263,15 @@ msgstr "įjungta"
 #~ msgid "minutes and"
 #~ msgstr "minučių ir"
 
+#~ msgid "no Picture found"
+#~ msgstr "Paveikslėlių nerasta"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "tik /etc/enigma2 direktoriją"
 
+#~ msgid "rebooting..."
+#~ msgstr "perleidžiama..."
+
 #~ msgid "scan done! %d services found!"
 #~ msgstr "Paieška atlikta! %d Kanalai surasti!"
 
@@ -5193,3 +5286,9 @@ msgstr "įjungta"
 
 #~ msgid "seconds."
 #~ msgstr "sekundžių."
+
+#~ msgid "show first tag"
+#~ msgstr "rodyti pirmą etiketę"
+
+#~ msgid "show second tag"
+#~ msgstr "rodyti sekančią kortelę"
index ef3cd85d6191ea60f3ea04cfa40d049cd662506e..e2d91fd3a4a382666f2c55024f906af7c8b4f7ab 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,14 +1,14 @@
-# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER\r
-# This file is distributed under the same license as the tuxbox-enigma package.\r
-# Automatically generated, 2005.\r
-# \r
+# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the tuxbox-enigma package.
+# Automatically generated, 2005.
+#
 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"
-"PO-Revision-Date: 2008-10-26 01:38+0100\n"
-"Last-Translator: FeReNGi\n"
+"POT-Creation-Date: 2009-02-04 14:59+0100\n"
+"PO-Revision-Date: 2009-01-24 12:54+0100\n"
+"Last-Translator: Benny De Tandt <Benny.DeTandt@gmail.com>\n"
 "Language-Team: none <michel@weeren.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -91,22 +91,20 @@ msgid "(show optional DVD audio menu)"
 msgstr "(optioneel DVD audio menu weergeven)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Enkel beschikbaar indien meer dan één interface  actief is."
 
 msgid "* Only available when entering hidden SSID or network key"
 msgstr ""
+"* Enkel beschikbaar bij het ingegeven van de verborgen SSID of netwerk "
+"sleutel"
 
 msgid ".NFI Download failed:"
 msgstr ".NFI Download mislukt:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ".NFI Flasher opstart USB stick succesvol aangemaakt."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
-".NFI bestand heeft sucesvol de md5 controle doorlopen. U kan veilig dit "
-"image schrijven!"
+"Md5 controle was succesvol op .NFI bestand. U kan veilig dit image schrijven!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 map"
@@ -304,12 +302,6 @@ msgstr "Standaard AC3"
 msgid "AC3 downmix"
 msgstr "AC3 downmix"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Uw Dreambox"
 
@@ -329,7 +321,7 @@ msgid "Activate network settings"
 msgstr "Activeer netwerkinstellingen"
 
 msgid "Adapter settings"
-msgstr "Adapter instelllingen"
+msgstr "Adapter instellingen"
 
 msgid "Add"
 msgstr "Toevoegen"
@@ -381,8 +373,8 @@ msgstr ""
 "Zodra de installatiewizard gereed is, kunt u een zender beveiligen. "
 "Raadpleeg de handleiding voor aanwijzigingen."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Alles"
@@ -390,9 +382,6 @@ msgstr "Alles"
 msgid "All Satellites"
 msgstr "Alle Satellieten"
 
-msgid "All..."
-msgstr "Alles..."
-
 msgid "Alpha"
 msgstr "Transparantie"
 
@@ -415,6 +404,8 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"Bent u zeker om deze netwerk configuratie te activeren?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -423,8 +414,8 @@ msgstr ""
 "Weet u zeker dat u de netwerkverbinding wilt herstarten?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artiest:"
+msgid "Artist"
+msgstr "Artiest"
 
 msgid "Ask before shutdown:"
 msgstr "Slaaptimer aktie bevestigen:"
@@ -520,7 +511,7 @@ msgid "Behavior when a movie reaches the end"
 msgstr "Aktie na 'einde bestand'"
 
 msgid "Bookmarks"
-msgstr "Markeerpunten"
+msgstr "Markeerpunten :"
 
 msgid "Brightness"
 msgstr "Helderheid"
@@ -529,7 +520,7 @@ msgid "Burn DVD"
 msgstr "Beschrijf DVD"
 
 msgid "Burn existing image to DVD"
-msgstr ""
+msgstr "Brand deze image op DVD"
 
 msgid "Burn to DVD..."
 msgstr "Schrijf op DVD..."
@@ -604,6 +595,9 @@ msgstr "Kanaal"
 msgid "Channel Selection"
 msgstr "Zenderkeuze"
 
+msgid "Channel not in services list"
+msgstr "Kanaal niet in zenderlijst"
+
 msgid "Channel:"
 msgstr "Zender:"
 
@@ -640,6 +634,12 @@ msgstr "Kies doelmap"
 msgid "Choose your Skin"
 msgstr "Kies een Skin"
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr "Opruimen"
 
@@ -695,7 +695,7 @@ msgid "Complete"
 msgstr "Compleet"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Complex (mixen audio sporen en aspecten)"
 
 msgid "Configuration Mode"
 msgstr "Configuratie modus"
@@ -729,7 +729,7 @@ msgid "Constellation"
 msgstr "Constellatie"
 
 msgid "Content does not fit on DVD!"
-msgstr "De inhoud pas niet op deze DVD!"
+msgstr "De inhoud past niet op deze DVD!"
 
 msgid "Continue in background"
 msgstr "Verder in de achtergrond"
@@ -740,18 +740,19 @@ msgstr "Afspelen voortzetten"
 msgid "Contrast"
 msgstr "Contrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Kopieer USB flasher opstart bestand naar stick..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Kan niet connecteren naar Dreambox .NFI Feed Server:"
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Kan medium niet laden! Geen disk in speler?"
 
-msgid "Create DVD-ISO"
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
 msgstr ""
 
+msgid "Create DVD-ISO"
+msgstr "DVD-ISO maken"
+
 msgid "Create movie folder failed"
 msgstr "Aanmaken van de opname map is mislukt"
 
@@ -819,9 +820,6 @@ msgstr "Deens"
 msgid "Date"
 msgstr "Datum"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Uitpakken flasher opstart bestand van USB stick..."
-
 msgid "Deep Standby"
 msgstr "Uitschakelen"
 
@@ -919,6 +917,9 @@ msgstr "16:9 materiaal weergeven als"
 msgid "Display 4:3 content as"
 msgstr "4:3 materiaal weergeven als"
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Display instellingen"
 
@@ -949,9 +950,6 @@ msgstr ""
 "Wilt u echt deze applicatie\n"
 "\"%s\" downloaden?"
 
-msgid "Do you really want to exit?"
-msgstr "Wilt u echt afsluiten?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -1043,9 +1041,6 @@ msgstr "Beschikbare applicaties"
 msgid "Downloading"
 msgstr "Downloading"
 
-msgid "Downloading image description..."
-msgstr "Downloaden beschrijving..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Ophalen informatie. Een ogenblik a.u.b..."
 
@@ -1069,13 +1064,13 @@ msgid "East"
 msgstr "Oost"
 
 msgid "Edit"
-msgstr ""
+msgstr "Bewerk"
 
 msgid "Edit DNS"
 msgstr "DNS wijzigen"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Bewerk Titel"
 
 msgid "Edit chapters of current title"
 msgstr "Wijzig hoofdstuk van de huidige titel"
@@ -1123,14 +1118,11 @@ msgid "Encryption Key"
 msgstr "Encryptie sleutel"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Encryptie Sleuteltype"
 
 msgid "Encryption Type"
 msgstr "Encryptie type"
 
-msgid "End"
-msgstr "Einde"
-
 msgid "End time"
 msgstr "Eindtijd"
 
@@ -1167,10 +1159,10 @@ msgid "Enter Rewind at speed"
 msgstr "Snel terugspoelen op volgende snelheid"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Geef WLAN netwerk naam/SSID:"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr ""
+msgstr "Geef WLAN wachtwoord/sleutel:"
 
 msgid "Enter main menu..."
 msgstr "Ga naar hoofdmenu..."
@@ -1204,6 +1196,9 @@ msgstr "Voortgang extern commando:"
 msgid "Execution finished!!"
 msgstr "Voortgang voltooid!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Afsluiten"
 
@@ -1265,10 +1260,10 @@ msgid "Finished"
 msgstr "Voltooid"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Configuratie van uw netwerk is voltooid"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Herstarten van uw netwerk is voltooid"
 
 msgid "Finnish"
 msgstr "Fins"
@@ -1277,24 +1272,21 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr "Eerst dienen we de opstart omgeving voor de USB flasher te downloaden."
 
-msgid "Fix USB stick"
-msgstr "Herstel USB stick"
-
 msgid "Flash"
 msgstr "Flash"
 
 msgid "Flashing failed"
 msgstr "Flashen mislukt"
 
-msgid "Font size"
-msgstr "Font formaat"
-
 msgid "Format"
 msgstr "Formaat"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Beeldherhalingsfrequentie tijdens 'ruw' spoelen"
 
+msgid "Frame size in full view"
+msgstr "Frame grootte in vol beeld"
+
 msgid "French"
 msgstr "Frans"
 
@@ -1316,6 +1308,9 @@ msgstr "Vr"
 msgid "Friday"
 msgstr "Vrijdag"
 
+msgid "Frisian"
+msgstr "Fries"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP adres"
 
@@ -1339,8 +1334,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Duits"
@@ -1376,7 +1371,7 @@ msgid "Harddisk standby after"
 msgstr "Harde schijf standby na"
 
 msgid "Hidden network SSID"
-msgstr ""
+msgstr "Verborgen netwerk SSID"
 
 msgid "Hierarchy Information"
 msgstr "Hiërarchie informatie"
@@ -1384,6 +1379,9 @@ msgstr "Hiërarchie informatie"
 msgid "Hierarchy mode"
 msgstr "Hiërarchie modus"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Hoeveel minuten wilt u opnemen?"
 
@@ -1394,10 +1392,10 @@ msgid "IP Address"
 msgstr "IP Adres"
 
 msgid "ISO file is too large for this filesystem!"
-msgstr ""
+msgstr "ISO betand is te groot voor dit bestandsysteem!"
 
 msgid "ISO path"
-msgstr ""
+msgstr "ISO pad"
 
 msgid "Icelandic"
 msgstr "Ijslands"
@@ -1615,6 +1613,9 @@ msgstr "Locatie"
 msgid "Lock:"
 msgstr "Lock:"
 
+msgid "Log results to harddisk"
+msgstr "Schrijf resultaten naar de harde schijf"
+
 msgid "Long Keypress"
 msgstr "Lange toetsdruk"
 
@@ -1648,6 +1649,9 @@ msgstr "Handmatig zoeken"
 msgid "Manual transponder"
 msgstr "Transponder handmatig"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Marge na afloop opname (minuten)"
 
@@ -1672,6 +1676,9 @@ msgstr "Menu"
 msgid "Message"
 msgstr "Bericht"
 
+msgid "Message..."
+msgstr "Boodschap..."
+
 msgid "Mkfs failed"
 msgstr "MakeFileSystem mislukt"
 
@@ -1814,6 +1821,9 @@ msgstr "Geen 50Hz, sorry! :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "Geen harde schijf gevonden of de harde schijf is niet geformatteerd."
 
+msgid "No Networks found"
+msgstr "Geen Netwerken gevonden"
+
 msgid "No backup needed"
 msgstr "Backup niet benodigd"
 
@@ -1825,7 +1835,7 @@ msgstr ""
 "(Timeout reading PAT)"
 
 msgid "No details for this image file"
-msgstr "Geen gedetailleerde gegevens voor dit bestand"
+msgstr "Geen details voor dit bestand:"
 
 msgid "No event info found, recording indefinitely."
 msgstr "Geen EPG gegevens gevonden. Opname voor onbepaalde tijd."
@@ -1848,6 +1858,9 @@ msgstr "Geen geschikte positioner gevonden."
 msgid "No satellite frontend found!!"
 msgstr "Geen satelliet tuner gevonden!"
 
+msgid "No tags are set on these movies."
+msgstr "Geen markeringen geplaatst op deze opnames."
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Er is geen tuner ingesteld voor gebruik van een DiSEqC motor!"
 
@@ -1884,18 +1897,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"Geen werkende locale netwerk adapter gevonden.\n"
+"Controleer of er een netwerk kabel is geplaatst en uw netwerk correct is "
+"geconfigureerd."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"Geen werkende draadloze netwerk adapter gevonden.\n"
+"Controleer of er een compatibel WLAN apparaat is geplaatst en uw netwerk "
+"correct is geconfigureerd."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"Geen werkende draadloze netwerk interface gevonden.\n"
+"Controleer of er een compatibel WLAN apparaat is geplaatst of activeer uw "
+"lokale netwerk interface."
 
 msgid "No, but restart from begin"
 msgstr "Nee, vanaf begin herstarten"
@@ -1940,14 +1962,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Weergave loopt"
 
-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 ""
-"Plaats nu de USB stick (min grootte 64 MB) dat u wenst te formatteren en te "
-"gebruiken als .NFI image flasher. Druk op OK na het plaatsen van de stick."
-
 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 "
@@ -1988,9 +2002,6 @@ msgstr "Alleen ongecodeerde zenders scannen"
 msgid "Orbital Position"
 msgstr "Orbit positie"
 
-msgid "Other..."
-msgstr "Anders..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2025,15 +2036,15 @@ msgstr "Kinderslot instellingen"
 msgid "Parental control type"
 msgstr "Kinderslot type"
 
-msgid "Partitioning USB stick..."
-msgstr "Bezig partitie te maken op USB stick..."
-
 msgid "Pause movie at end"
 msgstr "Pauzeer afspelen aan het einde"
 
 msgid "PiPSetup"
 msgstr "PiP Instellingen"
 
+msgid "PicturePlayer"
+msgstr "PicturePlayer"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2057,7 +2068,7 @@ msgid "Please Reboot"
 msgstr "A.u.b. herstarten"
 
 msgid "Please Select Medium to be Scanned"
-msgstr "Selecteer het te scannen medium"
+msgstr "Selecteer het te scannen medium..."
 
 msgid "Please change recording endtime"
 msgstr "Wijzig de opname eindtijd a.u.b."
@@ -2077,6 +2088,13 @@ msgstr "Kies het gewenste pakket a.u.b..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Kies de te installeren standaard zenderlijst a.u.b."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Verwijder al uw USB apparaten van uw Dreambox en plaats nu de doel USB stick "
+"(min grootte van 64 mb)!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr ""
 "Wijzig hier geen instellingen indien u niet precies weet waar u mee bezig "
@@ -2092,7 +2110,7 @@ msgid "Please enter a new filename"
 msgstr "Voer a.u.b. een bestandsnaam in "
 
 msgid "Please enter filename (empty = use current date)"
-msgstr "Voer een bestandsnaam in (leeg=gebruik huidige datum)"
+msgstr "Voer een bestandsnaam in (leeg= huidige datum)"
 
 msgid "Please enter name of the new directory"
 msgstr "Voer de naam van de nieuwe map in a.u.b."
@@ -2123,7 +2141,7 @@ msgid "Please select .NFI flash image file from medium"
 msgstr "Selecteer.NFI flash image bestand van medium"
 
 msgid "Please select a playlist to delete..."
-msgstr "Selecteer de afspeellijst die u wilt verwijderen"
+msgstr "Selecteer de afspeellijst die u wilt verwijderen..."
 
 msgid "Please select a playlist..."
 msgstr "Selecteer een afspeellijst..."
@@ -2134,8 +2152,8 @@ msgstr "Selecteer een subzender voor opname a.u.b..."
 msgid "Please select a subservice..."
 msgstr "Selecteer een subzender..."
 
-msgid "Please select keyword to filter..."
-msgstr "Selecteer te filteren sleutelwoord..."
+msgid "Please select tag to filter..."
+msgstr "Selecteer markering om te filteren..."
 
 msgid "Please select target directory or medium"
 msgstr "Selecteer doel map of medium"
@@ -2169,19 +2187,19 @@ msgstr ""
 "daarna op OK."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk activeren..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Wacht op md5 controle verificatie..."
+msgid "Please wait while scanning is in progress..."
+msgstr "Een ogenblikje geduld, zoeken is bezig..."
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk configureren..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Een ogenblikje geduld a.u.b. terwijl we uw netwerk herstarten..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Eventjes geduld..."
 
 msgid "Please wait... Loading list..."
 msgstr "Ogenblik a.u.b. De lijst wordt geladen..."
@@ -2249,6 +2267,10 @@ msgstr "Druk op OK om op te slaan"
 msgid "Press OK to edit the settings."
 msgstr "Druk op OK om te wijzigen."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr "Druk op OK voor meer detail van: %s"
+
 msgid "Press OK to scan"
 msgstr "Druk OK om te zoeken."
 
@@ -2264,8 +2286,11 @@ msgstr "Voorbeeld menu"
 msgid "Primary DNS"
 msgstr "Primaire DNS"
 
+msgid "Priority"
+msgstr "Prioriteit"
+
 msgid "Properties of current title"
-msgstr ""
+msgstr "Instellingen van huidige titel"
 
 msgid "Protect services"
 msgstr "Beveilig zenders"
@@ -2282,6 +2307,9 @@ msgstr "Zoek op provider"
 msgid "Providers"
 msgstr "Providers"
 
+msgid "Quick"
+msgstr "Snel"
+
 msgid "Quickzap"
 msgstr "Snelzap"
 
@@ -2303,15 +2331,15 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Ram Disk"
 
+msgid "Random"
+msgstr "Random"
+
 msgid "Really close without saving settings?"
 msgstr "Afsluiten zonder opslaan?"
 
 msgid "Really delete done timers?"
 msgstr "Wilt u de gebruikte timers echt wissen?"
 
-msgid "Really delete this timer?"
-msgstr "Wilt u deze timer echt verwijderen?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Subzenders snelzap verlaten?"
 
@@ -2333,6 +2361,10 @@ msgstr "Ontvangstinstellingen"
 msgid "Record"
 msgstr "Opname"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Opgenomen bestanden..."
 
@@ -2354,9 +2386,6 @@ msgstr "Ververs ratio"
 msgid "Refresh rate selection."
 msgstr "Herhalingsfrequentie selectie"
 
-msgid "Remounting stick partition..."
-msgstr "Herladen USB stick partitie..."
-
 msgid "Remove Bookmark"
 msgstr "Markeerpunt verwijderen"
 
@@ -2378,6 +2407,9 @@ msgstr "Verwijder het defecte .NFI bestand?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Verwijder het onvolledige .NFI bestand?"
 
+msgid "Remove timer"
+msgstr "Verwijder timer"
+
 msgid "Remove title"
 msgstr "Titel verwijderen"
 
@@ -2404,7 +2436,7 @@ msgid "Reset"
 msgstr "Herladen"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Herstel en renumerate titel namen"
 
 msgid "Resolution"
 msgstr "Resolutie"
@@ -2646,10 +2678,10 @@ msgid "Selected source image"
 msgstr "Selecteer bron bestand"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Verstuur DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Verstuur DiSEqC enkel bij satelliet wijziging"
 
 msgid "Seperate titles with a main menu"
 msgstr "Zonder titels af met een hoofdmenu"
@@ -2703,13 +2735,13 @@ msgid "Services"
 msgstr "Zenders"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Gebruik Voltage en 22KHz"
 
 msgid "Set as default Interface"
 msgstr "Als standaard interface instellen"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "Stel deze interface in als standaard"
 
 msgid "Set limits"
 msgstr "Limieten instellen"
@@ -2769,7 +2801,7 @@ msgid "Simple"
 msgstr "Eenvoudig"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Eenvoudige titelset (compatibel met gewone spelers)"
 
 msgid "Single"
 msgstr "Enkel"
@@ -2849,9 +2881,6 @@ msgstr "Standby"
 msgid "Standby / Restart"
 msgstr "Afsluiten"
 
-msgid "Start"
-msgstr "Start"
-
 msgid "Start from the beginning"
 msgstr "Start vanaf het begin"
 
@@ -2894,6 +2923,12 @@ msgstr "Stop afspelen van deze opname?"
 msgid "Stop test"
 msgstr "Stop test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr "Stop testen na # falende transponders"
+
+msgid "Stop testing plane after # successful transponders"
+msgstr "Stop testen na # succesvolle transponders"
+
 msgid "Store position"
 msgstr "Sla positie op"
 
@@ -2949,7 +2984,7 @@ msgstr ""
 "Dream Multimedia producten"
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "TS bestand is te groot voor ISO9660 level1!"
 
 msgid "TV System"
 msgstr "TV Systeem"
@@ -2957,12 +2992,27 @@ msgstr "TV Systeem"
 msgid "Table of content for collection"
 msgstr "Inhoudslijst voor verzameling"
 
+msgid "Tag 1"
+msgstr "Tag 1"
+
+msgid "Tag 2"
+msgstr "Tag 2"
+
+msgid "Tags"
+msgstr "Markeringen"
+
 msgid "Terrestrial"
 msgstr "Terrestrisch"
 
 msgid "Terrestrial provider"
 msgstr "Regio"
 
+msgid "Test DiSEqC settings"
+msgstr "Test DiSEqC instellingen"
+
+msgid "Test Type"
+msgstr "Test Type"
+
 msgid "Test mode"
 msgstr "Test modus"
 
@@ -2979,17 +3029,6 @@ msgstr ""
 "Bedankt voor het gebruik van deze wizard. Uw box is klaar voor gebruik.\n"
 "Druk op OK om uw Dreambox te gebruiken."
 
-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 ""
-"De .NFI Image flasher USB stick is klaar voor gebruik. Download eerst een ."
-"NFI image bestand van de feed server en bewaar het op de stick. Herstart en "
-"druk op de 'Down' toets op het front paneel om te starten van de .NFI "
-"flasher stick!"
-
 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 "
@@ -2998,6 +3037,13 @@ msgstr ""
 "De DVD standaard  supporteerd geen H.264 (HDTV) video. Wil je een Dreambox "
 "formaat data DVD maken (deze speelt niet af in een DVD speler) ?"
 
+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 ""
+"De USB stick is opstartbaar. Wilt u de laatste image downloaden van de feed "
+"server en opslaan op de stick ?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Backup is mislukt. Kies een andere backup locatie a.u.b."
 
@@ -3031,8 +3077,8 @@ msgid ""
 "The installation of the default settings is finished. You can now continue "
 "configuring your Dreambox by pressing the OK button on the remote control."
 msgstr ""
-"De installatie van de standaard zenderlijst is voltooid. U kunt nu Dreambox "
-"verder configureren door op OK te drukken."
+"De installatie van de standaard zenderlijst is voltooid. U kunt nu uw "
+"Dreambox verder configureren door op OK te drukken."
 
 msgid ""
 "The md5sum validation failed, the file may be corrupted! Are you sure that "
@@ -3065,6 +3111,10 @@ msgstr "De ingevoerde pincode is onjuist."
 msgid "The pin codes you entered are different."
 msgstr "De ingevoerde pincodes komen niet overeen."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr "De resultaten zijn bewaard op %s."
+
 msgid "The sleep timer has been activated."
 msgstr "De slaaptimer is geactiveerd."
 
@@ -3110,14 +3160,14 @@ msgid ""
 "work. Do you really want to burn this image to flash memory?"
 msgstr ""
 "Dit .NFI bestand bevat geen geldige md5 signatuur en is niet gegarandeerd om "
-"te werken. Wilt u echt dit image schrijven in het flash geheugen?"
+"te werken. Wilt u echt dit image in het flash geheugen schrijven?"
 
 msgid ""
 "This .NFI file has a valid md5 signature. Continue programming this image to "
 "flash memory?"
 msgstr ""
-"Dit .NFI bestand heeft een geldige md5 signatuur. Wilt u dit image schrijven "
-"in het flash geheugen?"
+"Dit .NFI bestand heeft een geldige md5 signatuur. Wilt u dit image in het "
+"flash geheugen schrijven?"
 
 msgid ""
 "This DVD RW medium is already formatted - reformatting will erase all "
@@ -3128,7 +3178,7 @@ msgstr ""
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
-msgstr "Deze Dreambox kan volgende %s video niet decoderen"
+msgstr "Deze Dreambox kan volgende %s video niet decoderen!"
 
 msgid "This is step number 2."
 msgstr "Dit is stap nummer 2."
@@ -3203,6 +3253,9 @@ msgstr "Drempelwaarde"
 msgid "Thu"
 msgstr "Do"
 
+msgid "Thumbnails"
+msgstr "Voorbeelden"
+
 msgid "Thursday"
 msgstr "Donderdag"
 
@@ -3252,6 +3305,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Timeshift is niet mogelijk!"
 
+msgid "Timeshift path..."
+msgstr "Timeshift pad..."
+
 msgid "Timezone"
 msgstr "Tijdzone"
 
@@ -3259,20 +3315,25 @@ msgid "Title"
 msgstr "Titel"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Titel:"
+msgstr "Titel instellingen"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Titelset modus"
 
 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."
-msgstr ""
-"Om er zeker van te zijn, verwijder nu de doel USB stick en plaats terug "
-"wanneer gevraagd. Druk op  OK wanneer de stick is verwijderd."
+"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 ""
+"Om de Dreambox firmware te upgraden, volg de volgende stappen :\n"
+"1)Zet uw box af via de knop achteraan het toestel en plaats een opstartbare "
+"USB stick.\n"
+"2)Zet de box aan via dezelfde knop en druk op de DOWN toets gedurende 10 "
+"seconden.\n"
+"3)Wacht op het opstarten en volg de instructies van de wizard."
 
 msgid "Today"
 msgstr "Vandaag"
@@ -3353,6 +3414,9 @@ msgstr "Turks"
 msgid "Two"
 msgstr "Twee"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
 msgstr "Zoekmodus"
 
@@ -3365,6 +3429,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Stick"
 
+msgid "USB stick wizard"
+msgstr "USB stick wizard"
+
+msgid "Ukrainian"
+msgstr "Oekraïens"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3382,6 +3452,15 @@ msgstr ""
 msgid "Uncommitted DiSEqC command"
 msgstr "Uncommitted DiSEqC commando"
 
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
+
 msgid "Universal LNB"
 msgstr "Universeel LNB"
 
@@ -3411,6 +3490,9 @@ msgstr "Bezig met update"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Dreambox update bezig... Een ogenblik geduld a.u.b."
 
+msgid "Use"
+msgstr "Gebruik"
+
 msgid "Use DHCP"
 msgstr "Automatisch IP verkrijgen (DHCP)"
 
@@ -3478,6 +3560,9 @@ msgstr "VCR scart"
 msgid "VMGM (intro trailer)"
 msgstr "VMGM (intro trailer)"
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr "Video fijn instellingen..."
 
@@ -3516,7 +3601,7 @@ msgid "View teletext..."
 msgstr "Teletekst weergeven..."
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Virtueel Toetsenbord"
 
 msgid "Voltage mode"
 msgstr "Spanningsmodus"
@@ -3534,7 +3619,7 @@ msgid "WPA"
 msgstr "WPA"
 
 msgid "WPA or WPA2"
-msgstr ""
+msgstr "WPA of WPA2"
 
 msgid "WPA2"
 msgstr "WPA2"
@@ -3545,9 +3630,6 @@ msgstr "WSS bij 4:3"
 msgid "Waiting"
 msgstr "Wacht..."
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Wachten op USB stick..."
-
 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"
@@ -3614,6 +3696,9 @@ msgstr "Wat wilt u zoeken?"
 msgid "Where do you want to backup your settings?"
 msgstr "Waar wilt u de instellingen opslaan?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Waar de tijdelijke timeshift opnames bewaren?"
+
 msgid "Wireless"
 msgstr "Draadloos"
 
@@ -3629,20 +3714,17 @@ msgstr "Schrijven mislukt!"
 msgid "Writing NFI image file to flash completed"
 msgstr "Schrijven NFI image naar flash is voltooid"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Bezig NAND FLash aan het schrijven"
-
 msgid "YPbPr"
 msgstr "Component"
 
-msgid "Year:"
-msgstr "Jaar:"
+msgid "Year"
+msgstr "Jaar"
 
 msgid "Yes"
 msgstr "Ja"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Ja en verwijder dit bestand"
 
 msgid "Yes, backup my settings!"
 msgstr "Ja, mijn instellingen opslaan!"
@@ -3754,15 +3836,6 @@ msgstr ""
 "volgt, zal de Dreambox u na de update vragen of u uw instellingen terug wilt "
 "plaatsen."
 
-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 ""
-"Definieer eerst een aantal sleutelwoorden!\n"
-"Druk op MENU om sleutelwoorden te definiëren.\n"
-"Wilt u nu sleutelwoorden definiëren?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3803,7 +3876,7 @@ msgstr ""
 "Druk op OK, om dit proces te starten."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Uw netwerk configuratie is geactiveerd."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3811,6 +3884,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Uw netwerk configuratie is geactiveerd.\n"
+"Een tweede reeds geconfigureerde interface is gevonden.\n"
+"\n"
+"Wilt u de tweede netwerk interface deactiveren?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr "Wilt u terugkeren naar de vorige zender?"
@@ -3843,10 +3920,10 @@ msgid "about to start"
 msgstr "start direct"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "activeer huidige configuratie"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "voeg een nameserver toe"
 
 msgid "add alternatives"
 msgstr "Alternatieven toevoegen"
@@ -3905,33 +3982,42 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "Audio spoor (%s) formaat"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "Audio spoor (%s) taal"
 
 msgid "audio tracks"
 msgstr "audio sporen"
 
+msgid "auto"
+msgstr "auto"
+
 msgid "back"
 msgstr "Terug"
 
 msgid "background image"
 msgstr "achtergrond bestand"
 
+msgid "backgroundcolor"
+msgstr "Achtergrond kleur"
+
 msgid "better"
 msgstr "beter"
 
+msgid "black"
+msgstr "zwart"
+
 msgid "blacklist"
 msgstr "zwarte lijst"
 
+msgid "blue"
+msgstr "blauw"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "door Exif"
+msgstr "Schrijf audio spoor (%s)"
 
 msgid "change recording (duration)"
 msgstr "Wijzig opnameduur"
@@ -3952,10 +4038,7 @@ msgid "circular right"
 msgstr "circular rechts"
 
 msgid "clear playlist"
-msgstr "afspeellijst legen"
-
-msgid "color"
-msgstr "kleur"
+msgstr "Afspeellijst leeg maken"
 
 msgid "complex"
 msgstr "complex"
@@ -3973,7 +4056,7 @@ msgid "continue"
 msgstr "Doorgaan"
 
 msgid "copy to bouquets"
-msgstr "kopieer naar boeketten"
+msgstr "Kopieer naar boeketten"
 
 msgid "create directory"
 msgstr "Map aanmaken"
@@ -3984,11 +4067,11 @@ msgstr "dagelijks"
 msgid "day"
 msgstr "dag"
 
-msgid "delete"
-msgstr "wissen"
-
 msgid "delete cut"
-msgstr "wis snijpunt"
+msgstr "Wis snijpunt"
+
+msgid "delete file"
+msgstr "Verwijder bestand"
 
 msgid "delete playlist entry"
 msgstr "wis item in de afspeellijst"
@@ -4051,13 +4134,13 @@ msgid "end bouquet edit"
 msgstr "Boeket bewerken deactiveren"
 
 msgid "end cut here"
-msgstr "stop snijpunt hier"
+msgstr "Stop snijpunt hier"
 
 msgid "end favourites edit"
 msgstr "favorieten bewerken deactiveren "
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 en netwerk"
 
 msgid "equal to"
 msgstr "gelijk aan"
@@ -4075,32 +4158,32 @@ msgid "exit movielist"
 msgstr "Opname menu afsluiten"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "verlaat nameserver configuratie"
 
 msgid "exit network adapter configuration"
-msgstr ""
+msgstr "verlaat netwerk adapter configuratie"
 
 msgid "exit network adapter setup menu"
-msgstr ""
+msgstr "verlaat netwerk adapter instellingen menu"
 
 msgid "exit network interface list"
-msgstr ""
+msgstr "verlaat netwerk interface lijst"
 
 msgid "exit networkadapter setup menu"
-msgstr ""
+msgstr "verlaat netwerk adapter instellingen menu"
 
 msgid "failed"
 msgstr "mislukt"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "Bestand formaat (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "bestandnaam"
 
 msgid "fine-tune your display"
 msgstr "Uw scherm fijn-afstellen"
 
-msgid "font face"
-msgstr "font layout"
-
 msgid "forward to the next chapter"
 msgstr "Vooruit naar volgend hoofdstuk"
 
@@ -4116,8 +4199,8 @@ msgstr "uitschakelen"
 msgid "go to standby"
 msgstr "standby-stand"
 
-msgid "headline"
-msgstr "kop"
+msgid "green"
+msgstr "groen"
 
 msgid "hear radio..."
 msgstr "Luister naar radio..."
@@ -4125,15 +4208,15 @@ msgstr "Luister naar radio..."
 msgid "help..."
 msgstr "help..."
 
+msgid "hidden network"
+msgstr "verborgen netwerk"
+
 msgid "hide extended description"
 msgstr "Weergave: Zonder uitgebreide informatie"
 
 msgid "hide player"
 msgstr "Afspelen op de achtergrond"
 
-msgid "highlighted button"
-msgstr "gemarkeerde kop"
-
 msgid "horizontal"
 msgstr "horizontaal"
 
@@ -4158,7 +4241,7 @@ msgid "init module"
 msgstr "CI module initializeren"
 
 msgid "insert mark here"
-msgstr "makeerpunt invoegen"
+msgstr "Markeerpunt invoegen"
 
 msgid "jump back to the previous title"
 msgstr "terug naar vorige titel"
@@ -4233,16 +4316,16 @@ msgid "move PiP to main picture"
 msgstr "PiP naar hoofdbeeld"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "verplaats omlaag naar laaste ingave"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "verplaats omlaag naar volgende ingave"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "verplaats omhoog naar eerste ingave"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "verplaats omhoog naar vorige ingave"
 
 msgid "movie list"
 msgstr "Opname menu"
@@ -4265,9 +4348,6 @@ msgstr "nee"
 msgid "no HDD found"
 msgstr "geen harde schijf gevonden"
 
-msgid "no Picture found"
-msgstr "geen foto gevonden"
-
 msgid "no module found"
 msgstr "geen CI module gevonden"
 
@@ -4283,6 +4363,9 @@ msgstr "geen"
 msgid "not locked"
 msgstr "Nee"
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr "niets aangesloten"
 
@@ -4305,7 +4388,7 @@ msgid "once"
 msgstr "éénmalig"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "Open naamserver configuratie"
 
 msgid "open servicelist"
 msgstr "Open zenderlijst"
@@ -4317,7 +4400,7 @@ msgid "open servicelist(up)"
 msgstr "Open zenderlijst (omhoog)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "open virtueel toetsenbord hulp"
 
 msgid "pass"
 msgstr "passage"
@@ -4338,7 +4421,7 @@ msgid "please press OK when ready"
 msgstr "indien gereed, druk dan op OK a.u.b."
 
 msgid "please wait, loading picture..."
-msgstr "ogenblik, de foto wordt geladen..."
+msgstr "Een ogenblikje geduld, de foto wordt geladen..."
 
 msgid "previous channel"
 msgstr "Vorige zender"
@@ -4346,20 +4429,20 @@ msgstr "Vorige zender"
 msgid "previous channel in history"
 msgstr "Vorige zender in geschiedenis"
 
-msgid "rebooting..."
-msgstr "herstarten..."
-
 msgid "record"
 msgstr "opname"
 
 msgid "recording..."
 msgstr "opnemen..."
 
+msgid "red"
+msgstr "rood"
+
 msgid "remove a nameserver entry"
-msgstr ""
+msgstr "verwijder een nameserver "
 
 msgid "remove after this position"
-msgstr "verwijder achter deze positie"
+msgstr "Verwijder achter deze positie"
 
 msgid "remove all alternatives"
 msgstr "Verwijder alle alternatieven"
@@ -4368,7 +4451,7 @@ msgid "remove all new found flags"
 msgstr "verwijder alle 'nieuw gevonden' vlaggetjes"
 
 msgid "remove before this position"
-msgstr "verwijder voor deze positie"
+msgstr "Verwijder voor deze positie"
 
 msgid "remove bookmark"
 msgstr "Markeerpunt verwijderen"
@@ -4386,13 +4469,13 @@ msgid "remove new found flag"
 msgstr "verwijder 'nieuw gevonden' vlag"
 
 msgid "remove selected satellite"
-msgstr "geselecteerde satelliet verwijderen"
+msgstr "Deze satelliet verwijderen"
 
 msgid "remove this mark"
 msgstr "verwijder dit merkteken"
 
 msgid "repeat playlist"
-msgstr "herhaal afspeellijst"
+msgstr "Herhaal afspeellijst"
 
 msgid "repeated"
 msgstr "herhalen"
@@ -4403,9 +4486,15 @@ msgstr "terugspoelen naar vorig hoofdstuk"
 msgid "right"
 msgstr "rechts"
 
+msgid "save last directory on exit"
+msgstr "Bij verlaten bewaar laatste map"
+
 msgid "save playlist"
 msgstr "Afspeellijst opslaan"
 
+msgid "save playlist on exit"
+msgstr "Bij verlaten bewaar afspeellijst"
+
 msgid "scan done!"
 msgstr "Zoeken voltooid."
 
@@ -4432,13 +4521,13 @@ msgid "select .NFI flash file"
 msgstr "selecteer .NFI flash bestand"
 
 msgid "select image from server"
-msgstr "selecteer image van server"
+msgstr "Selecteer image van server"
 
 msgid "select interface"
-msgstr ""
+msgstr "selecteer interface"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "selecteer menu item"
 
 msgid "select movie"
 msgstr "Selecteer opname"
@@ -4458,6 +4547,9 @@ msgstr "DVD hoofdmenu weergeven"
 msgid "show EPG..."
 msgstr "EPG weergeven..."
 
+msgid "show Infoline"
+msgstr "Toon Infolijn"
+
 msgid "show all"
 msgstr "alles weergeven"
 
@@ -4470,11 +4562,11 @@ msgstr "EPG details weergeven"
 msgid "show extended description"
 msgstr "Weergave: Met uitgebreide informatie"
 
-msgid "show first tag"
-msgstr "Eerste markeerpunt weergeven"
+msgid "show first selected tag"
+msgstr "toon eerste geselecteerde markering"
 
-msgid "show second tag"
-msgstr "Tweede markeerpunt weergeven"
+msgid "show second selected tag"
+msgstr "toon tweede gesecteerde markering"
 
 msgid "show shutdown menu"
 msgstr "Afsluitmenu weergeven"
@@ -4509,12 +4601,12 @@ msgstr "Vooruit spoelen"
 msgid "skip forward (enter time)"
 msgstr "Verspring voorwaarts (tijd invoeren)"
 
+msgid "slide picture in loop"
+msgstr "Toon foto's in een loop"
+
 msgid "sort by date"
 msgstr "Alfabetisch"
 
-msgid "spaces (top, between rows, left)"
-msgstr "spacies (boven, tussen rijen, links)"
-
 msgid "standard"
 msgstr "Standaard"
 
@@ -4522,7 +4614,10 @@ msgid "standby"
 msgstr "standby"
 
 msgid "start cut here"
-msgstr "start knippen hier"
+msgstr "Start knippen hier"
+
+msgid "start directory"
+msgstr "Start map"
 
 msgid "start timeshift"
 msgstr "Timeshift starten"
@@ -4554,20 +4649,26 @@ msgstr "Ga naar bestandenlijst"
 msgid "switch to playlist"
 msgstr "Ga naar afspeellijst"
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr "Volgend audio spoor"
 
 msgid "switch to the next subtitle language"
 msgstr "Volgende ondertitel taal"
 
-msgid "text"
-msgstr "tekst"
+msgid "template file"
+msgstr "template bestand"
+
+msgid "textcolor"
+msgstr "Tekstkleur"
 
 msgid "this recording"
 msgstr "deze opname"
 
 msgid "this service is protected by a parental control pin"
-msgstr "dit kanaal is beveiligd d.m.v. een kinderslot pincode"
+msgstr "Dit kanaal is beveiligd d.m.v. een kinderslot pincode"
 
 msgid "toggle a cut mark at the current position"
 msgstr "Op huidige positie een markering wijzigen"
@@ -4611,8 +4712,11 @@ msgstr "wekelijks"
 msgid "whitelist"
 msgstr "witte lijst"
 
-msgid "year"
-msgstr "jaar"
+msgid "working"
+msgstr "bezig"
+
+msgid "yellow"
+msgstr "geel"
 
 msgid "yes"
 msgstr "ja"
@@ -4632,409 +4736,3 @@ msgstr "zap"
 
 msgid "zapped"
 msgstr "zapte"
-
-#~ msgid ""
-#~ "\n"
-#~ "Enigma2 will restart after the restore"
-#~ msgstr ""
-#~ "\n"
-#~ "Na herstelling zal Enigma2 herstarten"
-
-#~ msgid "\"?"
-#~ msgstr "\"?"
-
-#~ msgid "4:3 Zoom"
-#~ msgstr "4:3 Zoom"
-
-#~ msgid "AC3 audio delay (ms)"
-#~ msgstr "AC3 audio vertraging (in ms)"
-
-#~ msgid "About Ronaldd image"
-#~ msgstr "Ronaldd image informatie"
-
-#~ msgid "Add title..."
-#~ msgstr "Titel toevoegen..."
-
-#~ msgid "All Satellites 1"
-#~ msgstr "Alle satellieten 1"
-
-#~ msgid "All Satellites 2"
-#~ msgstr "Alle satellieten 2"
-
-#~ msgid "All Satellites 3"
-#~ msgstr "Alle satellieten 3"
-
-#~ msgid "All Satellites 4"
-#~ msgstr "Alle satellieten 4"
-
-#~ msgid "An error has occured. (%s)"
-#~ msgstr "Er is een fout opgetreden. (%s)"
-
-#~ msgid "April"
-#~ msgstr "April"
-
-#~ msgid "Aspect Ratio 16:9"
-#~ msgstr "Beeldverhouding 16:9"
-
-#~ msgid "Aspect Ratio 4:3"
-#~ msgstr "Beeldverhouding 4:3"
-
-#~ msgid "Aspect Ratio Rass"
-#~ msgstr "Beeldverhouding Rass"
-
-#~ msgid "August"
-#~ msgstr "Augustus"
-
-#~ msgid "Automatic SSID lookup"
-#~ msgstr "Automatisch SSID zoeken"
-
-#~ msgid "Behaviour of 'pause' when paused"
-#~ msgstr "Aktie bij 'pauzeren'"
-
-#~ msgid "Behaviour of 0 key in PiP-mode"
-#~ msgstr "Functie van 0-toets in PiP"
-
-#~ msgid "Burn"
-#~ msgstr "Schrijven"
-
-#~ msgid "Burn To DVD..."
-#~ msgstr "Schrijf naar DVD..."
-
-#~ msgid "Calculate movie length"
-#~ msgstr "Opname lengte calculeren"
-
-#~ msgid "Cas Setup"
-#~ msgstr "CAS instellingen"
-
-#~ msgid "Choose Location"
-#~ msgstr "Kies locatie"
-
-#~ msgid "Confirm"
-#~ msgstr "Bevestigen"
-
-#~ msgid "DVD ENTER key"
-#~ msgstr "DVD ENTER toets"
-
-#~ msgid "DVD down key"
-#~ msgstr "DVD toets omlaag"
-
-#~ msgid "DVD left key"
-#~ msgstr "DVD toets links"
-
-#~ msgid "DVD right key"
-#~ msgstr "DVD toets rechts"
-
-#~ msgid "DVD up key"
-#~ msgstr "DVD toets omhoog"
-
-#~ msgid "December"
-#~ msgstr "December"
-
-#~ msgid "Default-Wizard"
-#~ msgstr "Herstel-Wizard"
-
-#~ msgid "Device Setup..."
-#~ msgstr "Apparaat instellingen..."
-
-#~ msgid "Discontinuous playback at speeds above"
-#~ msgstr "Langzaam afspelen op volgende snelheid"
-
-#~ msgid "Discontinuous playback frame repeat count"
-#~ msgstr "Langzaam afspelen op volgende frame-ratio"
-
-#~ msgid "Do not Calculate movie length"
-#~ msgstr "Opname lengte niet calculeren"
-
-#~ msgid "Do not show video preview"
-#~ msgstr "Geen opname preview weergeven"
-
-#~ msgid ""
-#~ "Do you really want to REMOVE\n"
-#~ "the plugin \""
-#~ msgstr ""
-#~ "Wilt u deze applicatie echt\n"
-#~ "verwijderen? \""
-
-#~ msgid ""
-#~ "Do you really want to download\n"
-#~ "the plugin \""
-#~ msgstr ""
-#~ "Wilt u dit bestand echt\n"
-#~ "downloaden \""
-
-#~ msgid "Edit current title"
-#~ msgstr "Huidige titel wijzigen"
-
-#~ msgid "Edit title..."
-#~ msgstr "Wijzig titel..."
-
-#~ msgid "Factoryreset"
-#~ msgstr "Fabrieksinstellingen"
-
-#~ msgid "Februari"
-#~ msgstr "Februari"
-
-#~ msgid "Januari"
-#~ msgstr "Januari"
-
-#~ msgid "July"
-#~ msgstr "Juli"
-
-#~ msgid "Jump to video title 1 (play movie from start)"
-#~ msgstr "Spring naar video titel 1 (afspelen vanaf begin)"
-
-#~ msgid "June"
-#~ msgstr "Juni"
-
-#~ msgid "Local directory"
-#~ msgstr "Lokale map"
-
-#~ msgid "Lower smartcard"
-#~ msgstr "Onderste smartcard"
-
-#~ msgid "March"
-#~ msgstr "Maart"
-
-#~ msgid "May"
-#~ msgstr "Mei"
-
-#~ msgid "Mount manager"
-#~ msgstr "Mount manager"
-
-#~ msgid "Mount options"
-#~ msgstr "Mount opties"
-
-#~ msgid "Mount type"
-#~ msgstr "Mount type"
-
-#~ msgid "Movie Menu"
-#~ msgstr "Opname menu"
-
-#~ msgid "Nameserver Setup..."
-#~ msgstr "Nameserver instellingen..."
-
-#~ msgid "Netbios name"
-#~ msgstr "Netbios naam"
-
-#~ msgid "New DVD"
-#~ msgstr "Nieuwe DVD"
-
-#~ msgid ""
-#~ "No working local networkadapter found.\n"
-#~ "Please verify that you have attached a network cable and your Network is "
-#~ "configured correctly."
-#~ msgstr ""
-#~ "Geen werkende lokale netwerk adapter gevonden.\n"
-#~ "Controleer of u de netwerk kabel goed verbonden hebt en uw netwerk "
-#~ "instellingen correct zijn."
-
-#~ msgid ""
-#~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "you local network interface."
-#~ msgstr ""
-#~ "Geen werkende WiFi adapter gevonden.\n"
-#~ "Controleer of u de WiFi module correct geplaatst heeft of schakel de "
-#~ "lokale netwerk adapter aan."
-
-#~ msgid ""
-#~ "No working wireless interface found.\n"
-#~ " Please verify that you have attached a compatible WLAN device or enable "
-#~ "your local network interface."
-#~ msgstr ""
-#~ "Geen werkende WiFi gevonden.\n"
-#~ "Controleer of u een geschikte WiFi adapter geplaatst heeft of activeer de "
-#~ "netwerk instellingen."
-
-#~ msgid ""
-#~ "No working wireless networkadapter found.\n"
-#~ "Please verify that you have attached a compatible WLAN USB Stick and your "
-#~ "Network is configured correctly."
-#~ msgstr ""
-#~ "Geen werkende WiFi adapter gevonden.\n"
-#~ "Controleer of u een geschikte USB WiFi adapter geplaatst heeft of "
-#~ "controleer de netwerk instellingen."
-
-#~ msgid "None (Softcam)"
-#~ msgstr "Geen (softcam)"
-
-#~ msgid "November"
-#~ msgstr "November"
-
-#~ msgid "October"
-#~ msgstr "Oktober"
-
-#~ msgid "PCM audio delay (ms)"
-#~ msgstr "PCM audio vertraging (in ms)"
-
-#~ msgid "Password"
-#~ msgstr "Wachtwoord"
-
-#~ msgid "Please do not change values when you not know what you do!"
-#~ msgstr ""
-#~ "Wijzig deze instellingen niet als je niet exact weet waar ze voor staan!"
-
-#~ msgid "Please wait, restarting softcam and cardserver."
-#~ msgstr "Softcam en cardserver worden herstart, ogenblik a.u.b..."
-
-#~ msgid "Please wait, restarting softcam."
-#~ msgstr "Softcam wordt herstart. Ogenblik a.u.b..."
-
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr ""
-#~ "Een opname is bezig of zal elk moment aanvangen. Wilt u toch herstarten?"
-
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Een opname is bezig of zal elk moment aanvangen. Wilt u toch herstarten?"
-
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Een opname is bezig of zal elk moment aanvangen. Wilt u toch uitschakelen?"
-
-#~ msgid "Remote Control setup"
-#~ msgstr "Afstandsbediening instellingen"
-
-#~ msgid "Reset Softcam"
-#~ msgstr "Herstart Softcam"
-
-#~ msgid "Reset both"
-#~ msgstr "Herstart beide"
-
-#~ msgid "Samba settings"
-#~ msgstr "Samba gegevens"
-
-#~ msgid "Samba setup"
-#~ msgstr "Samba instellingen"
-
-#~ msgid "Save current project to disk"
-#~ msgstr "Huidig project op schijf opslaan"
-
-#~ msgid "Save..."
-#~ msgstr "Opslaan..."
-
-#~ msgid "Search for Picon on harddisk"
-#~ msgstr "Zoek naar picons op harde schijf"
-
-#~ msgid "Select Card Server"
-#~ msgstr "Selecteer Cardserver"
-
-#~ msgid "Select Softcam"
-#~ msgstr "Selecteer Softcam"
-
-#~ msgid "September"
-#~ msgstr "September"
-
-#~ msgid "Server IP"
-#~ msgstr "Server IP adres"
-
-#~ msgid "Server SHARE"
-#~ msgstr "Server SHARE"
-
-#~ msgid "Settings installed. Press OK te restart enigma"
-#~ msgstr ""
-#~ "De zenderlijst is geinstalleerd\n"
-#~ "Druk op OK om Enigma2 te herstarten "
-
-#~ msgid "Show files from %s"
-#~ msgstr "Bestanden op %s weergeven"
-
-#~ msgid "Show video preview"
-#~ msgstr "Video preview weergeven"
-
-#~ msgid "Softcam Setup"
-#~ msgstr "Softcam instellingen"
-
-#~ msgid "Startwizard"
-#~ msgstr "Installatiewizard"
-
-#~ msgid "Step "
-#~ msgstr "Stap "
-
-#~ msgid "Table of content to be burned to DVD:"
-#~ msgstr "Inhoudsopgave zoals deze naar DVD gebrand moet worden:"
-
-#~ msgid ""
-#~ "Thank you for using the wizard. Your box is now ready to use.\n"
-#~ "Please press OK to start using you Dreambox."
-#~ msgstr ""
-#~ "De wizard is gereed. U kunt uw Dreambox nu gebruiken.\n"
-#~ "Druk OK om de installatiewizard te verlaten."
-
-#~ msgid ""
-#~ "Unable to initialize harddisk.\n"
-#~ "Please refer to the user manual.\n"
-#~ "Error: "
-#~ msgstr ""
-#~ "De harde schijf kan niet geformatteerd worden.\n"
-#~ "Raadpleeg de handleiding a.u.b.\n"
-#~ "Fout:  "
-
-#~ msgid "Upper smartcard"
-#~ msgstr "Bovenste smartcard"
-
-#~ msgid "Username"
-#~ msgstr "Gebruikersnaam"
-
-#~ msgid "VCR Switch"
-#~ msgstr "VCR Switch"
-
-#~ msgid "When complete, press Key 0 to burn the collection!"
-#~ msgstr "Indien gereed, druk dan op de 0-toets om de verzameling te branden."
-
-#~ msgid "Workgroup"
-#~ msgstr "Werkgroep"
-
-#~ msgid "You have to wait for"
-#~ msgstr "Wacht op"
-
-#~ msgid "cancel"
-#~ msgstr "Annuleren"
-
-#~ msgid "equal to Socket A"
-#~ msgstr "gelijk aan socket A"
-
-#~ msgid "full /etc directory"
-#~ msgstr "complete map /etc "
-
-#~ msgid "loopthrough to socket A"
-#~ msgstr "doorgelust naar socket A"
-
-#~ msgid "minutes and"
-#~ msgstr "minuten en"
-
-#~ msgid "only /etc/enigma2 directory"
-#~ msgstr "alleen map /etc/enigma2"
-
-#~ msgid "play next playlist entry"
-#~ msgstr "Volgende afspelen"
-
-#~ msgid "play previous playlist entry"
-#~ msgstr "Vorige afspelen"
-
-#~ msgid "scan done! %d services found!"
-#~ msgstr "Zoeken voltooid. %d zenders gevonden"
-
-#~ msgid "scan done! No service found!"
-#~ msgstr "Zoeken voltooid. Geen zenders gevonden"
-
-#~ msgid "scan done! One service found!"
-#~ msgstr "Zoeken voltooid. 1 zender gevonden"
-
-#~ msgid "scan in progress - %d %% done! %d services found!"
-#~ msgstr "Bezig met zoeken - %d %% voltooid. %d zenders gevonden"
-
-#~ msgid "seconds."
-#~ msgstr "seconden."
-
-#~ msgid "skip backward (self defined)"
-#~ msgstr "Verspring terugwaarts (invoeren)"
-
-#~ msgid "skip forward (self defined)"
-#~ msgstr "Verspring voorwaarts (invoeren)"
index 5613fe9509dbfc9b0975da79f0349ff80b6adae7..802b43d68aa8b826bcc68cac36ab0523e2834817 100755 (executable)
--- a/po/no.po
+++ b/po/no.po
@@ -376,8 +376,8 @@ msgstr ""
 "Etter oppstartsguiden er ferdig, trenger du beskytte enkelte kanaler. Les i "
 "manualen for din Dreambox hvordan det gjøres."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Alle"
@@ -416,8 +416,8 @@ msgid ""
 "\n"
 msgstr "Er du sikker på at du vil restarte ditt nettverkskort?\n"
 
-msgid "Artist:"
-msgstr "Artist:"
+msgid "Artist"
+msgstr "Artist"
 
 msgid "Ask before shutdown:"
 msgstr "Spør før avstegning"
@@ -1322,8 +1322,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Tysk"
@@ -3202,14 +3202,11 @@ msgstr "Timeshift er ikke mulig!"
 msgid "Timezone"
 msgstr "Tidssone"
 
-msgid "Title"
-msgstr "Tittel"
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Tittel:"
+msgid "Title"
+msgstr "Tittel"
 
 msgid "Titleset mode"
 msgstr ""
@@ -3568,8 +3565,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "År:"
+msgid "Year"
+msgstr "År"
 
 msgid "Yes"
 msgstr "Ja"
@@ -4539,9 +4536,6 @@ msgstr "Ukentlig"
 msgid "whitelist"
 msgstr "hvitliste"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "Ja"
 
old mode 100755 (executable)
new mode 100644 (file)
index bb95e9f..072b8a5
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,9 +7,9 @@ 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"
-"PO-Revision-Date: 2008-10-24 10:04+0100\n"
-"Last-Translator:  <silelis@tlen.pl>\n"
+"POT-Creation-Date: 2009-02-04 14:59+0100\n"
+"PO-Revision-Date: 2009-01-28 12:07+0100\n"
+"Last-Translator: Sebastian <zbigzbig2@op.pl>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -89,17 +89,14 @@ msgid "(show optional DVD audio menu)"
 msgstr "(pokaż opcjonalne menu ustawień DVD audio)"
 
 msgid "* Only available if more than one interface is active."
-msgstr ""
+msgstr "* Dostępne tylko gdy więcej niż jeden interfejs jest aktywny."
 
 msgid "* Only available when entering hidden SSID or network key"
-msgstr ""
+msgstr "* Dostępne tylko gdy wpisujesz ukryty SSID lub klucz sieciowy"
 
 msgid ".NFI Download failed:"
 msgstr "Ładowanie pliku .NFI nie powiodło się:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr "Utworzenie bootowalnego nośnika USB z .NFI Flasher powiodło się."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -107,10 +104,10 @@ msgstr ""
 "flashować tym image'm!"
 
 msgid "/usr/share/enigma2 directory"
-msgstr "katalog /usr/share/enigma2"
+msgstr "Katalog /usr/share/enigma2"
 
 msgid "/var directory"
-msgstr "katalog /var"
+msgstr "Katalog /var"
 
 msgid "0"
 msgstr "0"
@@ -300,12 +297,6 @@ msgstr "AC3 domyślnie"
 msgid "AC3 downmix"
 msgstr "AC3 downmix"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "O tunerze..."
 
@@ -379,17 +370,14 @@ msgstr ""
 "dowiedzieć sie więcej jak to uczynić, przeczytaj instrukcję obsługi "
 "Dreamboxa."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Wszystkie"
 
 msgid "All Satellites"
-msgstr "Wwszystkie satelity"
-
-msgid "All..."
-msgstr "Wszystkie..."
+msgstr "Wszystkie satelity"
 
 msgid "Alpha"
 msgstr "Przezroczystość"
@@ -413,6 +401,8 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
+"Jesteś pewien że chcesz aktywować tą konfigurację sieci?\n"
+"\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
@@ -421,8 +411,8 @@ msgstr ""
 "Czy jesteś pewien, że chcesz zrestartować interfejs sieciowy?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artysta:"
+msgid "Artist"
+msgstr "Artysta"
 
 msgid "Ask before shutdown:"
 msgstr "Zapytaj przed wyłączeniem:"
@@ -527,7 +517,7 @@ msgid "Burn DVD"
 msgstr "Wypal DVD"
 
 msgid "Burn existing image to DVD"
-msgstr ""
+msgstr "Nagraj dostępne image na DVD"
 
 msgid "Burn to DVD..."
 msgstr "Nagrywanie na DVD..."
@@ -565,7 +555,7 @@ msgid "Cancel"
 msgstr "Anuluj"
 
 msgid "Cannot parse feed directory"
-msgstr "Nie można odnaleÅ\9bć katalogu"
+msgstr "Nie można odnaleźć katalogu"
 
 msgid "Capacity: "
 msgstr "Pojemność:"
@@ -600,6 +590,9 @@ msgstr "Kanał"
 msgid "Channel Selection"
 msgstr "Wybór kanału"
 
+msgid "Channel not in services list"
+msgstr "Kanału nie ma na liście serwisów"
+
 msgid "Channel:"
 msgstr "Kanał:"
 
@@ -634,7 +627,13 @@ msgid "Choose target folder"
 msgstr "Wybierz folder docelowy"
 
 msgid "Choose your Skin"
-msgstr "Wybierz Skin"
+msgstr "Wybierz Skina"
+
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
 
 msgid "Cleanup"
 msgstr "Czyść"
@@ -673,10 +672,10 @@ msgid "Command execution..."
 msgstr "Wykonywanie polecenia..."
 
 msgid "Command order"
-msgstr "Wydawanie poleceń"
+msgstr "Kolejność poleceń"
 
 msgid "Committed DiSEqC command"
-msgstr "Wypełnij polecenia DiSEqC"
+msgstr "Komenda DiSEqC Commited"
 
 msgid "Common Interface"
 msgstr "Moduł Dostępu"
@@ -691,7 +690,7 @@ msgid "Complete"
 msgstr "Zakończ"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Kompleksowe (pozwala mixować ścieżki audio i aspekty)"
 
 msgid "Configuration Mode"
 msgstr "Tryb konfiguracji"
@@ -736,18 +735,19 @@ msgstr "Kontynuuj odtwarzanie"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Kopiowanie USB flasher image'a na nosnik..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Połączenie z Dreambox .NFI Image Serwerem nie powiodło sie:"
 
 msgid "Could not load Medium! No disc inserted?"
-msgstr "Nie moge odczytać nosnika. Czy nośnik znajduje się w czytniku?"
+msgstr "Nie mogę odczytać nośnika. Czy nośnik znajduje się w czytniku?"
 
-msgid "Create DVD-ISO"
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
 msgstr ""
 
+msgid "Create DVD-ISO"
+msgstr "Stwórz DVD-ISO"
+
 msgid "Create movie folder failed"
 msgstr "Tworzenie katalogu filmu nie powiodło się"
 
@@ -780,13 +780,13 @@ msgid "Custom skip time for '7'/'9'-keys"
 msgstr "Ustaw czas opuszczenia dla kluczy '7'/'9'"
 
 msgid "Customize"
-msgstr "Przystosuj"
+msgstr "Konfiguracja"
 
 msgid "Cut"
 msgstr "Wytnij"
 
 msgid "Cutlist editor..."
-msgstr "Edytor wyciętej listy..."
+msgstr "Edytor cięcia filmu..."
 
 msgid "Czech"
 msgstr "Czeski"
@@ -804,10 +804,10 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD Player"
-msgstr "Odtważacz DVD"
+msgstr "Odtwarzacz DVD"
 
 msgid "DVD media toolbox"
-msgstr "Narzedzia nosnika DVD"
+msgstr "Narzedzia nośnika DVD"
 
 msgid "Danish"
 msgstr "Duński"
@@ -815,9 +815,6 @@ msgstr "Duński"
 msgid "Date"
 msgstr "Data"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Dekompresja USB flasher image'a..."
-
 msgid "Deep Standby"
 msgstr "Głębokie Czuwanie"
 
@@ -872,10 +869,10 @@ msgid "DiSEqC mode"
 msgstr "Tryb DiSEqC"
 
 msgid "DiSEqC repeats"
-msgstr "Odpowiedzi DiSEqC"
+msgstr "Ilość powtorzeń DiSEqC"
 
 msgid "Direct playback of linked titles without menu"
-msgstr "Bezpośrednie odtważanie podczepionych tytułów bez menu"
+msgstr "Bezpośrednie odtwarzanie podczepionych tytułów bez menu"
 
 #, python-format
 msgid "Directory %s nonexistent."
@@ -915,6 +912,9 @@ msgstr "Wyświetlaj zawartość 16:9 jako"
 msgid "Display 4:3 content as"
 msgstr "Wyświetlaj zawartość 4:3 jako"
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Ustawienia wyświtlania"
 
@@ -945,9 +945,6 @@ msgstr ""
 "Czy naprawdę chcesz zciągnąć\n"
 "tę  \"%s\" wtyczkę?"
 
-msgid "Do you really want to exit?"
-msgstr "Czy na pewno chcesz wyjść?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -980,13 +977,13 @@ msgid "Do you want to do another manual service scan?"
 msgstr "Czy chcesz wykonać kolejne ręczne skanowanie?"
 
 msgid "Do you want to enable the parental control feature on your dreambox?"
-msgstr "czy chcesz włączyć kontrole rodzicielską w Twoim Dreamboxie?"
+msgstr "Czy chcesz włączyć kontrole rodzicielską w Twoim Dreamboxie?"
 
 msgid "Do you want to install default sat lists?"
 msgstr "Czy chcesz zainstalować domyślna listę satelit?"
 
 msgid "Do you want to play DVD in drive?"
-msgstr "Czy chcesz odtważać DVD znajdujące się w czytniku?"
+msgstr "Czy chcesz odtwarzać DVD znajdujące się w czytniku?"
 
 msgid "Do you want to preview this DVD before burning?"
 msgstr "Czy chcesz obejrzeć DVD przed jego nagraniem?"
@@ -1039,9 +1036,6 @@ msgstr "Pluginy do pobrania"
 msgid "Downloading"
 msgstr "Pobieranie..."
 
-msgid "Downloading image description..."
-msgstr "Ładowanie opisu image'u..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Pobieranie informacji o pluginie. Proszę czekać..."
 
@@ -1065,13 +1059,13 @@ msgid "East"
 msgstr "Wschód"
 
 msgid "Edit"
-msgstr ""
+msgstr "Edytuj"
 
 msgid "Edit DNS"
 msgstr "Edytuj DNS"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Edytuj Tytuł"
 
 msgid "Edit chapters of current title"
 msgstr "Edycja rozdziału"
@@ -1104,7 +1098,7 @@ msgid "Enable multiple bouquets"
 msgstr "Włącz tryb wielu bukietów"
 
 msgid "Enable parental control"
-msgstr "Włącz kontrole rodzicielską"
+msgstr "Włącz kontrolę rodzicielską"
 
 msgid "Enable timer"
 msgstr "Włącz timer"
@@ -1119,14 +1113,11 @@ msgid "Encryption Key"
 msgstr "Klucz szyfrujący"
 
 msgid "Encryption Keytype"
-msgstr ""
+msgstr "Typ klucza kodowania"
 
 msgid "Encryption Type"
 msgstr "Typ szyfrowania"
 
-msgid "End"
-msgstr "Koniec"
-
 msgid "End time"
 msgstr "Czas zakończenia"
 
@@ -1163,10 +1154,10 @@ msgid "Enter Rewind at speed"
 msgstr "Przejdź wstecz bardzo szybko"
 
 msgid "Enter WLAN network name/SSID:"
-msgstr ""
+msgstr "Wpisz nazwę sieci WLAN / SSID:"
 
 msgid "Enter WLAN passphrase/key:"
-msgstr ""
+msgstr "Wpisz określenie / klucz WLAN :"
 
 msgid "Enter main menu..."
 msgstr "Wejdź do menu głównego..."
@@ -1195,11 +1186,14 @@ msgid "Everything is fine"
 msgstr "Wszystko jest OK"
 
 msgid "Execution Progress:"
-msgstr "Wyknywanie procesu:"
+msgstr "Wykonywanie procesu:"
 
 msgid "Execution finished!!"
 msgstr "Wykonywanie zakończone!!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Wyjście"
 
@@ -1261,10 +1255,10 @@ msgid "Finished"
 msgstr "Skończone"
 
 msgid "Finished configuring your network"
-msgstr ""
+msgstr "Zakończono konfigurowanie sieci"
 
 msgid "Finished restarting your network"
-msgstr ""
+msgstr "Zakończono restartowanie sieci"
 
 msgid "Finnish"
 msgstr "Fiński"
@@ -1272,28 +1266,24 @@ msgstr "Fiński"
 msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr ""
-"najpierw musisz załadować najnowszą wersję środowiska bootującego dla  USB "
+"Najpierw musisz załadować najnowszą wersję środowiska bootującego dla  USB "
 "flash'era."
 
-#, fuzzy
-msgid "Fix USB stick"
-msgstr "Ustaw nośnik USB"
-
 msgid "Flash"
 msgstr "Flash"
 
 msgid "Flashing failed"
 msgstr "Flash'owanie nie powiodło się"
 
-msgid "Font size"
-msgstr "Rozmiar fontu"
-
 msgid "Format"
 msgstr "Format"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Oblicz powtórzenie ramki podczas nie-płynnego zwijania"
 
+msgid "Frame size in full view"
+msgstr "Rozmiar ramki w pełnym widoku"
+
 msgid "French"
 msgstr "Francuski"
 
@@ -1315,6 +1305,9 @@ msgstr "Pią"
 msgid "Friday"
 msgstr "Piątek"
 
+msgid "Frisian"
+msgstr "Fryzyjski"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP Adres"
 
@@ -1338,8 +1331,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Brama"
 
-msgid "Genre:"
-msgstr "Gatunek:"
+msgid "Genre"
+msgstr "Gatunek"
 
 msgid "German"
 msgstr "Niemiecki"
@@ -1375,7 +1368,7 @@ msgid "Harddisk standby after"
 msgstr "Tryb czuwania dysku twardego po"
 
 msgid "Hidden network SSID"
-msgstr ""
+msgstr "Ukryty sieciowy SSID"
 
 msgid "Hierarchy Information"
 msgstr "Informacja hierarchii"
@@ -1383,6 +1376,9 @@ msgstr "Informacja hierarchii"
 msgid "Hierarchy mode"
 msgstr "Tryb hierarchii"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Ile minut ma trwać nagranie?"
 
@@ -1393,10 +1389,10 @@ msgid "IP Address"
 msgstr "Adres IP"
 
 msgid "ISO file is too large for this filesystem!"
-msgstr ""
+msgstr "Plik ISO jest za duży dla tego systemu plików!"
 
 msgid "ISO path"
-msgstr ""
+msgstr "Ścieżka ISO"
 
 msgid "Icelandic"
 msgstr "Islandzki"
@@ -1500,7 +1496,7 @@ msgid "Integrated Wireless"
 msgstr "Zintegrowana sieś bezprzewodowa"
 
 msgid "Intermediate"
-msgstr "Pośredni"
+msgstr "Pośrednia"
 
 msgid "Internal Flash"
 msgstr "Wewnętrzny Flash"
@@ -1565,7 +1561,7 @@ msgid "Latitude"
 msgstr "Szerokość geogr."
 
 msgid "Leave DVD Player?"
-msgstr "Zamknąć odtważacz DVD?"
+msgstr "Zamknąć odtwarzacz DVD?"
 
 msgid "Left"
 msgstr "Lewo"
@@ -1611,7 +1607,10 @@ msgid "Location"
 msgstr "Lokalizacja"
 
 msgid "Lock:"
-msgstr "Blokada:"
+msgstr "Block:"
+
+msgid "Log results to harddisk"
+msgstr "Wyniki Loga na HDD"
 
 msgid "Long Keypress"
 msgstr "Długie naciskanie klawisza"
@@ -1646,6 +1645,9 @@ msgstr "Ręczne skanowanie"
 msgid "Manual transponder"
 msgstr "Ręczny transponder"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Margines po nagraniu (w min)"
 
@@ -1653,7 +1655,7 @@ msgid "Margin before record (minutes)"
 msgstr "Margines przed nagraniem (w min)"
 
 msgid "Media player"
-msgstr "Odtwarzacz Multimedialny"
+msgstr "Odtwarzacz"
 
 msgid "MediaPlayer"
 msgstr "Odtwarzacz Multimedialny"
@@ -1670,6 +1672,9 @@ msgstr "Menu"
 msgid "Message"
 msgstr "Wiadomość"
 
+msgid "Message..."
+msgstr "Wiadomość..."
+
 msgid "Mkfs failed"
 msgstr "Mkfs zawiódł"
 
@@ -1729,7 +1734,7 @@ msgstr "Następny"
 
 msgid "NFI image flashing completed. Press Yellow to Reboot!"
 msgstr ""
-"Flaskowanie plikiem NFI zakończone. Aby zrestartować wciśnij Żółty przycisk!"
+"Flashowanie z pliku NFI zakończone. Aby zrestartować wciśnij Żółty przycisk!"
 
 msgid "NOW"
 msgstr "Teraz"
@@ -1748,10 +1753,10 @@ msgid "Nameserver %d"
 msgstr "Nameserver %d"
 
 msgid "Nameserver Setup"
-msgstr "Ustawienia Nameserver"
+msgstr "Konfiguracja Nameserver"
 
 msgid "Nameserver settings"
-msgstr "Ustawienia serwera nazw"
+msgstr "Ustawienia nameserver"
 
 msgid "Netmask"
 msgstr "Maska sieci"
@@ -1775,7 +1780,7 @@ msgid "Network setup"
 msgstr "Ustawienia sieci"
 
 msgid "Network test"
-msgstr "Test połaczenia sieciowego"
+msgstr "Test połączenia sieciowego"
 
 msgid "Network test..."
 msgstr "Testowanie połączenia sieciowego..."
@@ -1813,6 +1818,9 @@ msgstr "Brak 50 Hz, przepraszam. :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "Nie znaleziono HDD lub HDD nie jest zainicjowany!"
 
+msgid "No Networks found"
+msgstr "Nie znaleziono sieci"
+
 msgid "No backup needed"
 msgstr "Kopia zapasowa jest nie potrzebna"
 
@@ -1847,6 +1855,9 @@ msgstr "Nie znaleziono nadającego się pozycjonera."
 msgid "No satellite frontend found!!"
 msgstr "Nie znaleziono satelity!!!"
 
+msgid "No tags are set on these movies."
+msgstr "Brak ustawionych oznaczeń na tych filmach."
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Brak skonfigurowanego tunera aby używać go z pozycjonerem diseqc!"
 
@@ -1883,18 +1894,27 @@ msgid ""
 "Please verify that you have attached a network cable and your network is "
 "configured correctly."
 msgstr ""
+"Nie znaleziono działającego adaptera sieciowego.\n"
+"Sprawdź czy podłączyłeś kabel sieciowy i czy twoja sieć jest dobrze "
+"skonfigurowana."
 
 msgid ""
 "No working wireless network adapter found.\n"
 "Please verify that you have attached a compatible WLAN device and your "
 "network is configured correctly."
 msgstr ""
+"Nie znaleziono działającego adaptera sieci bezprzewowej.\n"
+"Sprawdź czy podłączyłeś kompatybilne urządzenie WLAN i czy twoja sieć jest "
+"dobrze skonfigurowana."
 
 msgid ""
 "No working wireless network interface found.\n"
 " Please verify that you have attached a compatible WLAN device or enable "
 "your local network interface."
 msgstr ""
+"Nie znaleziono działającego interfejsu sieci bezprzewodowej.\n"
+" Sprawdź czy podłączyłeś kompatybilne urządzenie WLAN lub czy włączyłeś twój "
+"lokalny interfejs sieciowy."
 
 msgid "No, but restart from begin"
 msgstr "Nie, ale zrestartuj od początku"
@@ -1909,7 +1929,7 @@ msgid "No, scan later manually"
 msgstr "Nie, skanuj ręcznie później"
 
 msgid "None"
-msgstr "Żaden"
+msgstr "Brak"
 
 #. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
 msgid "Nonlinear"
@@ -1939,14 +1959,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Odtwarzane"
 
-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 ""
-"Proszę włożyć nosnik USB (minimalny rozmiar 64MB) który chcesz sformatować i "
-"używać jako .NFI image flasher. Po podłączeniu napędu nacisnij przycisk OK."
-
 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 "
@@ -1966,7 +1978,7 @@ msgid "OSD Settings"
 msgstr "Ustawienia OSD"
 
 msgid "OSD visibility"
-msgstr "wizualizacja OSD"
+msgstr "Pokazywanie OSD"
 
 msgid "Off"
 msgstr "Wyłącz"
@@ -1986,9 +1998,6 @@ msgstr "Tylko wolne skanowanie"
 msgid "Orbital Position"
 msgstr "Pozycja orbitalna"
 
-msgid "Other..."
-msgstr "Inne..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2023,15 +2032,15 @@ msgstr "Ustawienia kontroli rodzicielskiej"
 msgid "Parental control type"
 msgstr "Typ kontroli rodzicielskiej"
 
-msgid "Partitioning USB stick..."
-msgstr "Tworzenie partycji na nośniku USB..."
-
 msgid "Pause movie at end"
 msgstr "Zatrzymaj film na końcu"
 
 msgid "PiPSetup"
 msgstr "Ustawienia PiP"
 
+msgid "PicturePlayer"
+msgstr "Odtwarzacz Zdjęć"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2046,7 +2055,7 @@ msgid "Play"
 msgstr "Odtwarzaj"
 
 msgid "Play Audio-CD..."
-msgstr "Odtważanie CD-Audio..."
+msgstr "Odtwarzanie CD-Audio..."
 
 msgid "Play recorded movies..."
 msgstr "Odtwarzanie nagranego filmu..."
@@ -2075,6 +2084,13 @@ msgstr "Proszę wybrać pakiet ..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Proszę wybrać standardową listę serwisów, które chcesz zainstalować."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Odłącz wszystkie urządzenia USB od Dreamboxa i podłącz ponownie daną pamięć "
+"USB (minimalny rozmiar to 64 MB) !"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Nie zmieniaj wartości jeśli nie wiesz co zrobić!"
 
@@ -2082,7 +2098,7 @@ msgid "Please enter a name for the new bouquet"
 msgstr "Wpisz nazwę dla nowego bukietu"
 
 msgid "Please enter a name for the new marker"
-msgstr "Wpisz nazwę dla nowego zanacznika"
+msgstr "Wpisz nazwę dla nowego znacznika"
 
 msgid "Please enter a new filename"
 msgstr "Wpisz nową nazwę pliku"
@@ -2130,8 +2146,8 @@ msgstr "Wybierz subserwis..."
 msgid "Please select a subservice..."
 msgstr "Prosze wybierz subserwis..."
 
-msgid "Please select keyword to filter..."
-msgstr "Wybierz słowo kluczowe do filtrowania..."
+msgid "Please select tag to filter..."
+msgstr "Wybierz oznaczenie do filtrowania..."
 
 msgid "Please select target directory or medium"
 msgstr "Proszę wybrać nośnik lub katalog docelowy"
@@ -2165,19 +2181,19 @@ msgstr ""
 "OK."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr ""
+msgstr "Poczekaj na aktywację twojej konfiguracji sieci..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Suma kontrolna md5 jest sprawdzana. Proszę czekać..."
+msgid "Please wait while scanning is in progress..."
+msgstr "Poczekaj podczas gdy skanowanie jest w toku..."
 
 msgid "Please wait while we configure your network..."
-msgstr ""
+msgstr "Poczekaj podczas gdy skonfuguruję twoją sieć..."
 
 msgid "Please wait while your network is restarting..."
-msgstr ""
+msgstr "Poczekaj podczas restartowania twojej sieci..."
 
 msgid "Please wait..."
-msgstr ""
+msgstr "Proszę czekać..."
 
 msgid "Please wait... Loading list..."
 msgstr "Proszę czekać... Ładowanie listy..."
@@ -2245,6 +2261,10 @@ msgstr "Wciśnij OK aby aktywować ustawienia."
 msgid "Press OK to edit the settings."
 msgstr "W celu edytowania ustawień nacisnij OK."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr "Wciśnij OK aby dostać więcej info o %s"
+
 msgid "Press OK to scan"
 msgstr "Wciśnij OK aby skanować"
 
@@ -2260,8 +2280,11 @@ msgstr "Podgląd menu"
 msgid "Primary DNS"
 msgstr "Pierwszy DNS"
 
+msgid "Priority"
+msgstr "Priorytet konwertera"
+
 msgid "Properties of current title"
-msgstr ""
+msgstr "Właściwości aktualnego tytułu"
 
 msgid "Protect services"
 msgstr "Ochrona serwisów"
@@ -2278,6 +2301,9 @@ msgstr "Provider do skanowania"
 msgid "Providers"
 msgstr "Providerzy"
 
+msgid "Quick"
+msgstr "Szybko"
+
 msgid "Quickzap"
 msgstr "Szybkie przełączanie"
 
@@ -2299,15 +2325,15 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Ram Dysk"
 
+msgid "Random"
+msgstr "Losowo"
+
 msgid "Really close without saving settings?"
 msgstr "Wyjść bez zapisywania ustawień?"
 
 msgid "Really delete done timers?"
 msgstr "Usunąć wykonane timery?"
 
-msgid "Really delete this timer?"
-msgstr "Usunąć ten timer?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Wyjść z subserwisów?"
 
@@ -2329,6 +2355,10 @@ msgstr "Ustawienia powitania"
 msgid "Record"
 msgstr "Nagraj"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Nagrane pliki..."
 
@@ -2350,9 +2380,6 @@ msgstr "Wartość odświeżania"
 msgid "Refresh rate selection."
 msgstr "Wybór prędkości odświeżania"
 
-msgid "Remounting stick partition..."
-msgstr "Podowne montowanie partycji USB..."
-
 msgid "Remove Bookmark"
 msgstr "Usuń zakładkę"
 
@@ -2374,6 +2401,9 @@ msgstr "Czy usunąć popsuty plik .NFI?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Czy usunąć niekompletne pliki .NFI?"
 
+msgid "Remove timer"
+msgstr "Usuń timer"
+
 msgid "Remove title"
 msgstr "Usuń tytuł"
 
@@ -2401,7 +2431,7 @@ msgid "Reset"
 msgstr "Resetuj"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Zresetuj i zmień numerację nazw tytułów"
 
 msgid "Resolution"
 msgstr "Rozdzielczość"
@@ -2622,7 +2652,7 @@ msgid "Select audio mode"
 msgstr "Wybierz tryb audio"
 
 msgid "Select audio track"
-msgstr "Wybierz ścieżke audio"
+msgstr "Wybierz ścieżkę audio :"
 
 msgid "Select channel to record from"
 msgstr "Wybierz kanał do nagrania z "
@@ -2643,10 +2673,10 @@ msgid "Selected source image"
 msgstr "Wybierz image źródłowy"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Wyślij DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Wyślij DiSEqC tylko podczas zmiany satelity"
 
 msgid "Seperate titles with a main menu"
 msgstr "Rozdziel tytuły z wykozystaniem menu"
@@ -2655,7 +2685,7 @@ msgid "Sequence repeat"
 msgstr "Potwórka sekwencji"
 
 msgid "Service"
-msgstr "Serwis"
+msgstr "Informacje o serwisie..."
 
 msgid "Service Scan"
 msgstr "Skanowanie serwisu"
@@ -2700,13 +2730,13 @@ msgid "Services"
 msgstr "Serwisy"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Ustaw napięcie 22KHz"
 
 msgid "Set as default Interface"
 msgstr "Ustaw jako domyslny interfejs"
 
 msgid "Set interface as default Interface"
-msgstr ""
+msgstr "Ustaw interfejs jako domyślny"
 
 msgid "Set limits"
 msgstr "Ustaw limity"
@@ -2727,7 +2757,7 @@ msgid "Show WLAN Status"
 msgstr "Pokaż status WLAN"
 
 msgid "Show blinking clock in display during recording"
-msgstr "Pokaż migający zegar na wyświetlaczu podczas nagrywania"
+msgstr "Pokaż migający zegar na wyświetlaczu gdy nagrywa"
 
 msgid "Show infobar on channel change"
 msgstr "Pokaż pasek info podczas zmiany kanału"
@@ -2763,16 +2793,16 @@ msgid "Similar broadcasts:"
 msgstr "Podobne transmisje:"
 
 msgid "Simple"
-msgstr "Proste"
+msgstr "Prosta"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Proste tytuły (kompatybilne z odtwarzaczami)"
 
 msgid "Single"
 msgstr "Jeden"
 
 msgid "Single EPG"
-msgstr "Pojedyńczy EPG"
+msgstr "Zwykłe EPG"
 
 msgid "Single satellite"
 msgstr "Jeden satelita"
@@ -2784,7 +2814,7 @@ msgid "Singlestep (GOP)"
 msgstr "Pojedyńczy krok (GOP)"
 
 msgid "Skin..."
-msgstr "Skóry..."
+msgstr "Skiny..."
 
 msgid "Sleep Timer"
 msgstr "Wyłącznik czasowy"
@@ -2803,7 +2833,7 @@ msgid "Slow"
 msgstr "Wolno"
 
 msgid "Slow Motion speeds"
-msgstr "Odtważanie w zwolnionym tempie"
+msgstr "Odtwarzanie w zwolnionym tempie"
 
 msgid "Some plugins are not available:\n"
 msgstr "Niektóre pluginy są niedostępne:\n"
@@ -2846,9 +2876,6 @@ msgstr "Czuwanie"
 msgid "Standby / Restart"
 msgstr "Czuwanie / Restart"
 
-msgid "Start"
-msgstr "Rozpocznij"
-
 msgid "Start from the beginning"
 msgstr "Rozpocznij od początku"
 
@@ -2880,10 +2907,10 @@ msgid "Stop Timeshift?"
 msgstr "Zatrzymać Timeshift?"
 
 msgid "Stop current event and disable coming events"
-msgstr "zatrzymaj aktualne wydarzenie i wyłącz przychodzące wydarzenia"
+msgstr "Zatrzymaj aktualne wydarzenie i wyłącz przychodzące wydarzenia"
 
 msgid "Stop current event but not coming events"
-msgstr "zatrzymaj aktualne wydarzenie ale nie przychodzące"
+msgstr "Zatrzymaj aktualne wydarzenie ale nie przychodzące"
 
 msgid "Stop playing this movie?"
 msgstr "Zatrzymać odtwarzanie tego filmu?"
@@ -2891,6 +2918,12 @@ msgstr "Zatrzymać odtwarzanie tego filmu?"
 msgid "Stop test"
 msgstr "Zakończ test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr "Zatrzymaj testowanie poziomu po # nieudanych transponderach"
+
+msgid "Stop testing plane after # successful transponders"
+msgstr "Zatrzymaj testowanie poziomu po # udanych transponderach"
+
 msgid "Store position"
 msgstr "Zapamiętaj pozycje"
 
@@ -2944,7 +2977,7 @@ msgstr ""
 "Best Regards for DM box owners...  Sebastian :) ... Cheers"
 
 msgid "TS file is too large for ISO9660 level 1!"
-msgstr ""
+msgstr "Plik TS jest za duży dla ISO9660 poziom 1!"
 
 msgid "TV System"
 msgstr "System TV"
@@ -2952,12 +2985,27 @@ msgstr "System TV"
 msgid "Table of content for collection"
 msgstr "Tabela zawartości dla kolekcji"
 
+msgid "Tag 1"
+msgstr "Oznaczenie 1"
+
+msgid "Tag 2"
+msgstr "Oznaczenie 2"
+
+msgid "Tags"
+msgstr "Oznaczenia"
+
 msgid "Terrestrial"
 msgstr "Naziemny"
 
 msgid "Terrestrial provider"
 msgstr "Naziemny provider"
 
+msgid "Test DiSEqC settings"
+msgstr "Test ustawień DiSEqC"
+
+msgid "Test Type"
+msgstr "Typ Testu"
+
 msgid "Test mode"
 msgstr "Tryb testowy"
 
@@ -2974,15 +3022,6 @@ msgstr ""
 "Dziękuję za użycie kreatora. Twój tuner jest już gotowy do użycia.\n"
 "Wciśnij OK i rozpocznij zabawę z Dreamboxem."
 
-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 ""
-"Naped USB .NFI flash'era jest gotowy do użycia. Proszę załadować omage .NFI "
-"z serwera"
-
 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 "
@@ -2992,6 +3031,13 @@ msgstr ""
 "chcesz nagrać dane w formacie data DVD? Dane nie będą czytane w "
 "stacjonarnych czytnikach DVD."
 
+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 ""
+"Pamięć USB jest teraz bootowalna. Chcesz pobrać teraz ostatnie image z "
+"servera i zachować je na USB?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Nieudane tworzenie kopia zapasowa. Wybierz inna lokalizacje kopii."
 
@@ -3059,6 +3105,10 @@ msgstr "Kod pin który wpisałeś jest zły."
 msgid "The pin codes you entered are different."
 msgstr "Kod pin który wpisałeś jest inny."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr "Wyniki będą zapisane w %s."
+
 msgid "The sleep timer has been activated."
 msgstr "Wyłącznik czasowy został aktywowany."
 
@@ -3198,6 +3248,9 @@ msgstr "Próg"
 msgid "Thu"
 msgstr "Czw"
 
+msgid "Thumbnails"
+msgstr "Miniatury"
+
 msgid "Thursday"
 msgstr "Czwartek"
 
@@ -3247,6 +3300,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Timeshift niemożliwy!"
 
+msgid "Timeshift path..."
+msgstr "Ścieżka timeshift..."
+
 msgid "Timezone"
 msgstr "Strefa czasu"
 
@@ -3254,20 +3310,24 @@ msgid "Title"
 msgstr "Tytuł"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Tytuł:"
+msgstr "Właściwości tytułu"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Tryb tytułu"
 
 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."
-msgstr ""
-"Aby się upewnić, że tego oczekiwałeś, usuń docelowy napęd USB i podłącz go "
-"ponownie po zgłoszeniu takiej konieczności."
+"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 ""
+"Aby zaktualizować soft w Dreamboxie podążaj wg. tych kroków:\n"
+"1) Wyłącz Dreamboxa przyciskiem z tyłu, podłącz bootującą pamięć USB.\n"
+"2) Włącz tuner ponownie i trzymaj strzałkę W DÓŁ na przednim panelu przez 10 "
+"sekund.\n"
+"3) Poczekaj aż zbootuje i podążaj wg. instrukcji kreatora."
 
 msgid "Today"
 msgstr "Dzisiaj"
@@ -3346,8 +3406,11 @@ msgstr "Turecki"
 msgid "Two"
 msgstr "Dwa"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
-msgstr "Tym skanowania"
+msgstr "Typ skanowania"
 
 msgid "USALS"
 msgstr "USALS"
@@ -3358,6 +3421,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Stick"
 
+msgid "USB stick wizard"
+msgstr "Kreator pamięci USB"
+
+msgid "Ukrainian"
+msgstr "Ukraiński"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3373,7 +3442,16 @@ msgstr ""
 "Błąd: "
 
 msgid "Uncommitted DiSEqC command"
-msgstr "Niewykonane polecenia DiSEqC"
+msgstr "Komenda DiSEqC Uncommited"
+
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
 
 msgid "Universal LNB"
 msgstr "Uniwersalny LNB"
@@ -3382,7 +3460,7 @@ msgid "Unmount failed"
 msgstr "Błąd odmontowania"
 
 msgid "Update"
-msgstr "uaktualnienie"
+msgstr "Uaktualnienie"
 
 msgid "Updates your receiver's software"
 msgstr "Aktualizuje oprogramowanie Twojego tunera"
@@ -3402,6 +3480,9 @@ msgstr "Aktualizowanie"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Aktualizowanie Dreamboxa... Proszę czekać"
 
+msgid "Use"
+msgstr "Użyj"
+
 msgid "Use DHCP"
 msgstr "Użyj DHCP"
 
@@ -3450,7 +3531,7 @@ msgid ""
 msgstr "Użyj przycisku góra/dół aby zmienić opcje. Po tym , wciśnij OK."
 
 msgid "Use usals for this sat"
-msgstr "Użyj USALD dla tej satelity"
+msgstr "Użyj USALS dla tej satelity"
 
 msgid "Use wizard to set up basic features"
 msgstr "Użyj kreatora aby ustawić podstawowe funkcje"
@@ -3467,6 +3548,9 @@ msgstr "Przełącz VCR"
 msgid "VMGM (intro trailer)"
 msgstr "VMGM (intro trailer)"
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr "Ustawienia czysości obrazu"
 
@@ -3507,7 +3591,7 @@ msgid "View teletext..."
 msgstr "Pokaż teletext..."
 
 msgid "Virtual KeyBoard"
-msgstr ""
+msgstr "Wirtualna klawiatura"
 
 msgid "Voltage mode"
 msgstr "Tryb napięcia"
@@ -3525,7 +3609,7 @@ msgid "WPA"
 msgstr "WPA"
 
 msgid "WPA or WPA2"
-msgstr ""
+msgstr "WPA lub WPA2"
 
 msgid "WPA2"
 msgstr "WPA2"
@@ -3536,9 +3620,6 @@ msgstr "WSS na 4:3"
 msgid "Waiting"
 msgstr "Oczekiwanie"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Oczekuję na osadzenie nośnika USB..."
-
 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"
@@ -3566,7 +3647,7 @@ msgid ""
 "\n"
 "Then seek to the end, press OK, select 'end cut'. That's it."
 msgstr ""
-"Witamy w edytorze prycięć.\n"
+"Witamy w edytorze przycięć.\n"
 "\n"
 "Przejdź do miejsca, które ma być nowym początkiem pliku. Nacisnij OK, "
 "wybierz 'początek cięcia'.\n"
@@ -3607,6 +3688,9 @@ msgstr "Co chcesz skanować?"
 msgid "Where do you want to backup your settings?"
 msgstr "Gdzie chcesz zrobić kopie zapasową ustawień?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Gdzie zachować tymczasowe nagrania timeshift?"
+
 msgid "Wireless"
 msgstr "Bezprzewodowy"
 
@@ -3622,20 +3706,17 @@ msgstr "Błąd zapisu!"
 msgid "Writing NFI image file to flash completed"
 msgstr "Zapisywanie image'a NFI do flash'a zakończone"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Zapisywanie pliku image'a do NAND Flash"
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Rok:"
+msgid "Year"
+msgstr "Rok"
 
 msgid "Yes"
 msgstr "Tak"
 
 msgid "Yes, and delete this movie"
-msgstr ""
+msgstr "Tak, usuń ten film"
 
 msgid "Yes, backup my settings!"
 msgstr "Tak, zrób kopie moich ustawień!"
@@ -3659,7 +3740,7 @@ msgid "Yes, returning to movie list"
 msgstr "Tak, powróć do listy filmów"
 
 msgid "Yes, view the tutorial"
-msgstr "tak, pokaż podręcznik"
+msgstr "Tak, pokaż podręcznik"
 
 msgid ""
 "You can choose some default settings now. Please select the settings you "
@@ -3743,15 +3824,6 @@ msgstr ""
 "Teraz Dreambox zostanie zatrzymany. Po wykonaniu  instrukcji aktualizacji ze "
 "strony, nowe oprogramowanie zapyta Ciebie czy powinno przywrocić ustawienia."
 
-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 ""
-"Najpierw musisz zdefiniować kilka wyrażeń!\n"
-"Wciśnij przycisk MENU aby zdefiniować wyrażenia.\n"
-"Czy chcesz zdefiniować je teraz?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3765,7 +3837,7 @@ msgid "Your Dreambox will restart after pressing OK on your remote control."
 msgstr "W celu zrestartowania Dreamboxa naciśnij przycisk OK pilota."
 
 msgid "Your TV works with 50 Hz. Good!"
-msgstr "Twój telewizor działa z 50 Hz. Wspaniale!"
+msgstr "Twój telewizor działa z 50 Hz  Wspaniale!"
 
 msgid ""
 "Your backup succeeded. We will now continue to explain the further upgrade "
@@ -3792,7 +3864,7 @@ msgstr ""
 "Naciśnij OK aby rozpocząć aktualizacje."
 
 msgid "Your network configuration has been activated."
-msgstr ""
+msgstr "Twoja konfiguracja sieci została aktywowana."
 
 msgid ""
 "Your network configuration has been activated.\n"
@@ -3800,6 +3872,10 @@ msgid ""
 "\n"
 "Do you want to disable the second network interface?"
 msgstr ""
+"Twoja konfiguracja sieci została aktywowana.\n"
+"Drugi skonfigurowany interfejs został znaleziony.\n"
+"\n"
+"Czy chcesz wyłączyć drugi interfejs sieciowy?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr "Przełączyć z powrotem na serwis przed ustawieniem pozycjonera?"
@@ -3832,22 +3908,22 @@ msgid "about to start"
 msgstr "jak rozpocząć"
 
 msgid "activate current configuration"
-msgstr ""
+msgstr "akrywuj aktualną konfigurację"
 
 msgid "add a nameserver entry"
-msgstr ""
+msgstr "dodaj wpis nameservera"
 
 msgid "add alternatives"
-msgstr "dodaj wybrane"
+msgstr "Dodaj wybrane kanały"
 
 msgid "add bookmark"
-msgstr "dodaj zakładkę"
+msgstr "Dodaj zakładkę"
 
 msgid "add bouquet"
-msgstr "dodaj bukiet"
+msgstr "Dodaj bukiet"
 
 msgid "add directory to playlist"
-msgstr "dodaj katalog do playlisty "
+msgstr "Dodaj katalog do playlisty "
 
 msgid "add file to playlist"
 msgstr "dodaj plik do playlisty"
@@ -3856,22 +3932,22 @@ msgid "add files to playlist"
 msgstr "dodaj pliki do playlisty"
 
 msgid "add marker"
-msgstr "dodaj zaznaczenie"
+msgstr "Dodaj zaznaczenie"
 
 msgid "add recording (enter recording duration)"
-msgstr "dodaj nagranie (wpisz trwanie nagrania)"
+msgstr "Nagrywaj (wpisz trwanie nagrania)"
 
 msgid "add recording (enter recording endtime)"
-msgstr "dodaj nagranie (wpisz koniec czasu nagrania)"
+msgstr "Nagrywaj (wpisz koniec czasu nagrania)"
 
 msgid "add recording (indefinitely)"
-msgstr "dodaj nagranie (na czas nieokreślony)"
+msgstr "Nagrywaj (na czas nieokreślony)"
 
 msgid "add recording (stop after current event)"
-msgstr "dodaj nagranie (zatrzymaj po aktualnym wydarzeniu)"
+msgstr "Nagrywaj (zatrzymaj po aktualnym wydarzeniu)"
 
 msgid "add service to bouquet"
-msgstr "dodaj serwis do bukietu"
+msgstr "Dodaj serwis do bukietu"
 
 msgid "add service to favourites"
 msgstr "dodaj serwis do ulubionych"
@@ -3880,10 +3956,10 @@ msgid "add to parental protection"
 msgstr "dodaj do kontroli rodzicielskiej"
 
 msgid "advanced"
-msgstr "zaawansowane"
+msgstr "Zaawansowana"
 
 msgid "alphabetic sort"
-msgstr "sortuj alfabetycznie"
+msgstr "Sortuj alfabetycznie"
 
 msgid ""
 "are you sure you want to restore\n"
@@ -3894,39 +3970,48 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "format ścieżki audio (%s)"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "język ścieżki audio (%s)"
 
 msgid "audio tracks"
 msgstr "ścieżki audio"
 
+msgid "auto"
+msgstr "auto"
+
 msgid "back"
-msgstr "wróć"
+msgstr "Wróć"
 
 msgid "background image"
 msgstr "obraz tła"
 
+msgid "backgroundcolor"
+msgstr "kolor tła"
+
 msgid "better"
 msgstr "lepszy"
 
+msgid "black"
+msgstr "czarny"
+
 msgid "blacklist"
 msgstr "Czarna lista"
 
+msgid "blue"
+msgstr "niebieski"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "przez Exif"
+msgstr "nagraj ścieżkę audio (%s)"
 
 msgid "change recording (duration)"
-msgstr "zmień czas trwania nagrania"
+msgstr "Zmień czas trwania nagrania"
 
 msgid "change recording (endtime)"
-msgstr "zmień koniec czasu nagrania"
+msgstr "Zmień koniec czasu nagrania"
 
 msgid "chapters"
 msgstr "rozdziały"
@@ -3943,9 +4028,6 @@ msgstr "Kołój w prawo"
 msgid "clear playlist"
 msgstr "Wyczyść playliste"
 
-msgid "color"
-msgstr "kolor"
-
 msgid "complex"
 msgstr "złożony"
 
@@ -3959,7 +4041,7 @@ msgid "connected"
 msgstr "połączony"
 
 msgid "continue"
-msgstr "kontynuuj"
+msgstr "Kontynuuj"
 
 msgid "copy to bouquets"
 msgstr "Kopiuj do bukietów"
@@ -3973,17 +4055,17 @@ msgstr "Codziennie"
 msgid "day"
 msgstr "dzień"
 
-msgid "delete"
-msgstr "usuń"
-
 msgid "delete cut"
 msgstr "Usuń wycięte"
 
+msgid "delete file"
+msgstr "usuń plik"
+
 msgid "delete playlist entry"
 msgstr "Usuń wpis playlisty"
 
 msgid "delete saved playlist"
-msgstr "usuń zachowaną playlistę"
+msgstr "Usuń zachowaną playlistę"
 
 msgid "delete..."
 msgstr "Usuń..."
@@ -4013,7 +4095,7 @@ msgid "done!"
 msgstr "Zrobione!"
 
 msgid "edit alternatives"
-msgstr "Edytuj wybrane"
+msgstr "Edytuj wybrane kanały"
 
 msgid "empty"
 msgstr "Puste"
@@ -4046,7 +4128,7 @@ msgid "end favourites edit"
 msgstr "Koniec edycji ulubionych"
 
 msgid "enigma2 and network"
-msgstr ""
+msgstr "enigma2 i sieć"
 
 msgid "equal to"
 msgstr "równy"
@@ -4055,7 +4137,7 @@ msgid "exceeds dual layer medium!"
 msgstr "przekroczona pojemność nosnika dual layer!"
 
 msgid "exit DVD player or return to file browser"
-msgstr "Wyjdź z odtważacza DVD lub powróć do przeglądarki plików"
+msgstr "Wyjdź z odtwarzacza DVD lub powróć do przeglądarki plików"
 
 msgid "exit mediaplayer"
 msgstr "Wyjdź z mediaplayera"
@@ -4064,32 +4146,32 @@ msgid "exit movielist"
 msgstr "Wyjdź z listy filmów"
 
 msgid "exit nameserver configuration"
-msgstr ""
+msgstr "wyjdź z konfiguracji nameservera"
 
 msgid "exit network adapter configuration"
-msgstr ""
+msgstr "wyjdź z konfiguracji adaptera sieciowego"
 
 msgid "exit network adapter setup menu"
-msgstr ""
+msgstr "wyjdź z menu konfiguracji adaptera sieciowego"
 
 msgid "exit network interface list"
-msgstr ""
+msgstr "wyjdź z listy interfejsu sieciowego"
 
 msgid "exit networkadapter setup menu"
-msgstr ""
+msgstr "wyjdź z menu konfiguracji adaptera sieciowego"
 
 msgid "failed"
 msgstr "zawiódł"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "formaty plików (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "nazwa pliku"
 
 msgid "fine-tune your display"
 msgstr "czysto ustaw swój ekran"
 
-msgid "font face"
-msgstr "font face"
-
 msgid "forward to the next chapter"
 msgstr "Przeskocz do nastepnego rozdziału"
 
@@ -4105,8 +4187,8 @@ msgstr "Przejdź do głębokiego czuwania"
 msgid "go to standby"
 msgstr "Przejdź do stanu czuwania"
 
-msgid "headline"
-msgstr "nagłówek"
+msgid "green"
+msgstr "zielony"
 
 msgid "hear radio..."
 msgstr "Słuchaj radia..."
@@ -4114,15 +4196,15 @@ msgstr "Słuchaj radia..."
 msgid "help..."
 msgstr "Pomoc..."
 
+msgid "hidden network"
+msgstr "ukryta sieć"
+
 msgid "hide extended description"
 msgstr "ukryj rozszerzony opis"
 
 msgid "hide player"
 msgstr "Ukryj odtwarzacz"
 
-msgid "highlighted button"
-msgstr "podświetlone przyciski"
-
 msgid "horizontal"
 msgstr "Pozioma (H)"
 
@@ -4133,7 +4215,7 @@ msgid "hours"
 msgstr "Godziny"
 
 msgid "immediate shutdown"
-msgstr "wyłącz natychmiast"
+msgstr "Wyłącz natychmiast"
 
 #, python-format
 msgid ""
@@ -4177,19 +4259,19 @@ msgid "length"
 msgstr "długość"
 
 msgid "list style compact"
-msgstr "kompaktowy styl listy"
+msgstr "Kompaktowy styl listy"
 
 msgid "list style compact with description"
-msgstr "kompaktowy styl listy z opisem"
+msgstr "Kompaktowy styl listy z opisem"
 
 msgid "list style default"
-msgstr "domyślny styl listy"
+msgstr "Domyślny styl listy"
 
 msgid "list style single line"
-msgstr "styl listy pojedyncza linia"
+msgstr "Styl listy pojedyńcza linia"
 
 msgid "load playlist"
-msgstr "załaduj playliste"
+msgstr "Załaduj playliste"
 
 msgid "locked"
 msgstr "zablokowany"
@@ -4222,16 +4304,16 @@ msgid "move PiP to main picture"
 msgstr "przesuń PiP do głównego obrazu"
 
 msgid "move down to last entry"
-msgstr ""
+msgstr "przesuń na dół do ostatniego wpisu"
 
 msgid "move down to next entry"
-msgstr ""
+msgstr "przesuń na dól do następnego wpisu"
 
 msgid "move up to first entry"
-msgstr ""
+msgstr "przesuń w górę do pierwszego wpisu"
 
 msgid "move up to previous entry"
-msgstr ""
+msgstr "przesuń w górę do poprzedniego wpisu"
 
 msgid "movie list"
 msgstr "lista filmów"
@@ -4254,9 +4336,6 @@ msgstr "Nie"
 msgid "no HDD found"
 msgstr "Nie znaleziono HDD"
 
-msgid "no Picture found"
-msgstr "Nie znaleziono obrazka"
-
 msgid "no module found"
 msgstr "Nie znaleziono modułu"
 
@@ -4267,11 +4346,14 @@ msgid "no timeout"
 msgstr "Bez końca"
 
 msgid "none"
-msgstr "Żaden"
+msgstr "Brak"
 
 msgid "not locked"
 msgstr "Nie zablokowany"
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr "nic nie połączono"
 
@@ -4294,7 +4376,7 @@ msgid "once"
 msgstr "Raz"
 
 msgid "open nameserver configuration"
-msgstr ""
+msgstr "otwórz konfigurację nameserwera"
 
 msgid "open servicelist"
 msgstr "Otwórz listę serwisów"
@@ -4306,7 +4388,7 @@ msgid "open servicelist(up)"
 msgstr "Otwórz listę serwisów (góra)"
 
 msgid "open virtual keyboard input help"
-msgstr ""
+msgstr "otwórz pomoc wirtualnej klawiatury"
 
 msgid "pass"
 msgstr "Hasło"
@@ -4335,17 +4417,17 @@ msgstr "Poprzedni kanał"
 msgid "previous channel in history"
 msgstr "Poprzedni kanał w historii"
 
-msgid "rebooting..."
-msgstr "restatrowanie..."
-
 msgid "record"
 msgstr "Nagraj"
 
 msgid "recording..."
 msgstr "Nagrywanie..."
 
+msgid "red"
+msgstr "czerwony"
+
 msgid "remove a nameserver entry"
-msgstr ""
+msgstr "usuń wpis nameserwera"
 
 msgid "remove after this position"
 msgstr "Usuń po tej pozycji"
@@ -4363,10 +4445,10 @@ msgid "remove bookmark"
 msgstr "Usuń zakładkę"
 
 msgid "remove directory"
-msgstr "usuń katalog"
+msgstr "Usuń katalog"
 
 msgid "remove entry"
-msgstr "Usuń wstęp"
+msgstr "Usuń"
 
 msgid "remove from parental protection"
 msgstr "Usuń z kontroli rodzicielskiej"
@@ -4375,7 +4457,7 @@ msgid "remove new found flag"
 msgstr "Usuń nowo znalezioną flage"
 
 msgid "remove selected satellite"
-msgstr "usuń wybranego satelitę"
+msgstr "Usuń wybranego satelitę"
 
 msgid "remove this mark"
 msgstr "Usuń to zaznaczenie"
@@ -4392,8 +4474,14 @@ msgstr "przewiń do poprzedniego rozdziału"
 msgid "right"
 msgstr "Prawo"
 
+msgid "save last directory on exit"
+msgstr "zapisz ostatni katalog przy wyjściu"
+
 msgid "save playlist"
-msgstr "zapisz playliste"
+msgstr "Zapisz playliste"
+
+msgid "save playlist on exit"
+msgstr "zapisz playlistę przy wyjściu"
 
 msgid "scan done!"
 msgstr "Skanowanie zakończone!"
@@ -4424,10 +4512,10 @@ msgid "select image from server"
 msgstr "wybierz plik z serwera"
 
 msgid "select interface"
-msgstr ""
+msgstr "wybierz interfejs"
 
 msgid "select menu entry"
-msgstr ""
+msgstr "wybierz wpis menu"
 
 msgid "select movie"
 msgstr "wybierz film"
@@ -4447,29 +4535,32 @@ msgstr "pokaż główne menu DVD"
 msgid "show EPG..."
 msgstr "Pokaż EPG..."
 
+msgid "show Infoline"
+msgstr "pokaż Linię Info"
+
 msgid "show all"
 msgstr "pokaż wszystkie"
 
 msgid "show alternatives"
-msgstr "Pokaż wybrane"
+msgstr "Pokaż wybrane kanały"
 
 msgid "show event details"
 msgstr "Pokaż szczegóły wydarzenia"
 
 msgid "show extended description"
-msgstr "pokaż rozszerzony opis"
+msgstr "Pokaż rozszerzony opis"
 
-msgid "show first tag"
-msgstr "pokaż pierwszą etykietę"
+msgid "show first selected tag"
+msgstr "pokaż pierwsze wybrane oznaczenie "
 
-msgid "show second tag"
-msgstr "pokaż drugą etykietę"
+msgid "show second selected tag"
+msgstr "pokaż drugie wybrane oznaczenie"
 
 msgid "show shutdown menu"
-msgstr "pokaż menu wyłączania"
+msgstr "Pokaż menu wyłączania"
 
 msgid "show single service EPG..."
-msgstr "pokaz pojedyńczy serwis EPG..."
+msgstr "Pokaż pojedyńczy serwis EPG..."
 
 msgid "show tag menu"
 msgstr "pokaż etykietę menu"
@@ -4478,7 +4569,7 @@ msgid "show transponder info"
 msgstr "Pokaż info transpondera"
 
 msgid "shuffle playlist"
-msgstr "tasuj playliste"
+msgstr "Tasuj playliste"
 
 msgid "shutdown"
 msgstr "Wyłącz"
@@ -4490,20 +4581,20 @@ msgid "skip backward"
 msgstr "Skocz wstecz"
 
 msgid "skip backward (enter time)"
-msgstr "skocz do tyłu (wpisz czas)"
+msgstr "Skocz do tyłu (wpisz czas)"
 
 msgid "skip forward"
 msgstr "Skocz w przód"
 
 msgid "skip forward (enter time)"
-msgstr "skocz naprzód (wpisz czas)"
+msgstr "Skocz naprzód (wpisz czas)"
+
+msgid "slide picture in loop"
+msgstr "zapętlony pokaz slajdów"
 
 msgid "sort by date"
 msgstr "sortuj poprzez datę"
 
-msgid "spaces (top, between rows, left)"
-msgstr "przestrzeń (góra, pomiedzy rzedami, lewo)"
-
 msgid "standard"
 msgstr "standardowy"
 
@@ -4513,6 +4604,9 @@ msgstr "Czuwanie"
 msgid "start cut here"
 msgstr "Rozpocznij cięcie tutaj"
 
+msgid "start directory"
+msgstr "katalog początkowy"
+
 msgid "start timeshift"
 msgstr "Rozpocznij timeshift"
 
@@ -4543,14 +4637,20 @@ msgstr "Przeącz na listę plików"
 msgid "switch to playlist"
 msgstr "Przełącz na playliste"
 
+msgid "switch to the next angle"
+msgstr "przełącz do następnego rogu"
+
 msgid "switch to the next audio track"
 msgstr "przełącz na następna ścieżke audio"
 
 msgid "switch to the next subtitle language"
 msgstr "przełącz na nastepną sćieżkę napisów"
 
-msgid "text"
-msgstr "Tekst"
+msgid "template file"
+msgstr "plik szablonu"
+
+msgid "textcolor"
+msgstr "kolor tekstu"
 
 msgid "this recording"
 msgstr "To nagranie"
@@ -4562,7 +4662,7 @@ msgid "toggle a cut mark at the current position"
 msgstr "przełącz ucięty znacznik w aktualną pozycję"
 
 msgid "toggle time, chapter, audio, subtitle info"
-msgstr "czas odtważania, rozdział, audio, informacja o napisach"
+msgstr "czas odtwarzania, rozdział, audio, informacja o napisach"
 
 msgid "unconfirmed"
 msgstr "niepotwierdzone"
@@ -4600,8 +4700,11 @@ msgstr "Tygodniowy"
 msgid "whitelist"
 msgstr "Biała lista"
 
-msgid "year"
-msgstr "rok"
+msgid "working"
+msgstr "pracuje"
+
+msgid "yellow"
+msgstr "żółty"
 
 msgid "yes"
 msgstr "Tak"
@@ -4633,12 +4736,27 @@ msgstr "Przełączony"
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr "Utworzenie bootowalnego nośnika USB z .NFI Flasher powiodło się."
+
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "Abort"
 #~ msgstr "Przerwij"
 
 #~ msgid "Add title..."
 #~ msgstr "Dodaję tytuł..."
 
+#~ msgid "Album:"
+#~ msgstr "Album:"
+
+#~ msgid "All..."
+#~ msgstr "Wszystkie..."
+
 #~ msgid "An error has occured. (%s)"
 #~ msgstr "Pojawił się błąd. (%s)"
 
@@ -4658,6 +4776,9 @@ msgstr "Przełączony"
 #~ "Czy jesteś pewien, że chcesz włączyć sieć lokalną?\n"
 #~ "\n"
 
+#~ msgid "Artist:"
+#~ msgstr "Artysta:"
+
 #~ msgid "Automatic SSID lookup"
 #~ msgstr "Automatyczne oddzukiwanie SSID"
 
@@ -4691,6 +4812,9 @@ msgstr "Przełączony"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Podłącz do Internetu przy użyciu lokalnego LAN"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Kopiowanie USB flasher image'a na nosnik..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD przycisk ENTER"
 
@@ -4706,9 +4830,15 @@ msgstr "Przełączony"
 #~ msgid "DVD up key"
 #~ msgstr "DVD przycisk góra"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Dekompresja USB flasher image'a..."
+
 #~ msgid "Device Setup..."
 #~ msgstr "Ustawienia urządzenia:"
 
+#~ msgid "DiSEqC Mode"
+#~ msgstr "Tryb DiSEqC"
+
 #~ msgid ""
 #~ "Do you really want to REMOVE\n"
 #~ "the plugin \""
@@ -4723,6 +4853,9 @@ msgstr "Przełączony"
 #~ "Czy na pewno chcesz pobrać\n"
 #~ "plugin \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Czy na pewno chcesz wyjść?"
+
 #~ msgid "Do you want to burn this project to DVD medium?"
 #~ msgstr "Czy chcesz zapisac projekt na nośnik DVD"
 
@@ -4732,6 +4865,9 @@ msgstr "Przełączony"
 #~ msgid "Do you want to view a cutlist tutorial?"
 #~ msgstr "czy chcesz zobaczyć podręcznik wyciętej listy?"
 
+#~ msgid "Downloading image description..."
+#~ msgstr "Ładowanie opisu image'u..."
+
 #~ msgid "Dreambox DVD record"
 #~ msgstr "Nagrywarka DVD Dreambox"
 
@@ -4754,12 +4890,24 @@ msgstr "Przełączony"
 #~ "Włacz sieć lokalną Dreamboxa.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Koniec"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Zamknij kreator i skonfiguruj ręcznie w późniejszym czasie"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Napraw pamięć USB"
+
+#~ msgid "Font size"
+#~ msgstr "Rozmiar fontu"
+
 #~ msgid "Games / Plugins"
 #~ msgstr "Gry / Pluginy"
 
+#~ msgid "Genre:"
+#~ msgstr "Gatunek:"
+
 #~ msgid "Jump to video title 1 (play movie from start)"
 #~ msgstr "Skocz do tytułu 1  (odtważaj film od początku)"
 
@@ -4823,6 +4971,21 @@ msgstr "Przełączony"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nie, pozwól mi wybrać listę standardową"
 
+#~ 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 ""
+#~ "Proszę włożyć nosnik USB (minimalny rozmiar 64MB) który chcesz "
+#~ "sformatować i używać jako .NFI image flasher. Po podłączeniu napędu "
+#~ "nacisnij przycisk OK."
+
+#~ msgid "Other..."
+#~ msgstr "Inne..."
+
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Tworzenie partycji na nośniku USB..."
+
 #~ 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 "
@@ -4853,6 +5016,12 @@ msgstr "Przełączony"
 #~ msgid "Please select below the wireless network you want to connect to."
 #~ msgstr "Proszę wybrać sieć bezprzewodową do której chcesz sie podłączyć."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Wybierz słowo kluczowe do filtrowania..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Suma kontrolna md5 jest sprawdzana. Proszę czekać..."
+
 #~ 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 "
@@ -4866,6 +5035,9 @@ msgstr "Przełączony"
 #~ "Przed naciśnięciem OK podłącz Wlan USB Stick do Dreamboxa.\n"
 #~ "\n"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "Usunąć ten timer?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4887,6 +5059,9 @@ msgstr "Przełączony"
 #~ "Nagrywanie(a) są w toku lub rozpoczną się za kilka sekund... wyłączyć "
 #~ "ponownie teraz?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Podowne montowanie partycji USB..."
+
 #~ msgid "Restart your wireless interface"
 #~ msgstr "Restary interfejsu bezprzewodowego"
 
@@ -4905,6 +5080,9 @@ msgstr "Przełączony"
 #~ msgid "Show files from %s"
 #~ msgstr "Pokaż pliki od %s"
 
+#~ msgid "Start"
+#~ msgstr "Rozpocznij"
+
 #~ msgid "Startwizard"
 #~ msgstr "Uruchom kreatora"
 
@@ -4947,6 +5125,26 @@ msgstr "Przełączony"
 #~ "Dziękuję za użycie kreatora. Dreambox jest gotowy do pracy.\n"
 #~ "Aby rozpocząć pracę naciśnij przycisk OK."
 
+#~ 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 ""
+#~ "Naped USB .NFI flash'era jest gotowy do użycia. Proszę załadować omage ."
+#~ "NFI z serwera"
+
+#~ msgid "Title:"
+#~ msgstr "Tytuł:"
+
+#~ 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."
+#~ msgstr ""
+#~ "Aby się upewnić, że tego oczekiwałeś, usuń docelowy napęd USB i podłącz "
+#~ "go ponownie po zgłoszeniu takiej konieczności."
+
 #~ msgid ""
 #~ "Unable to initialize harddisk.\n"
 #~ "Please refer to the user manual.\n"
@@ -4959,6 +5157,9 @@ msgstr "Przełączony"
 #~ msgid "VCR Switch"
 #~ msgstr "Automatycznie przełącz VCR"
 
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Oczekuję na osadzenie nośnika USB..."
+
 #~ msgid ""
 #~ "Welcome.\n"
 #~ "\n"
@@ -4977,6 +5178,21 @@ msgstr "Przełączony"
 #~ msgid "When complete, press Key 0 to burn the collection!"
 #~ msgstr "Kiedy skończysz, w celu nagrania kolekcji nacisnij klawisz 0!"
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Zapisywanie pliku image'a do NAND Flash"
+
+#~ msgid "Year:"
+#~ msgstr "Rok:"
+
+#~ 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 ""
+#~ "Najpierw musisz zdefiniować kilka wyrażeń!\n"
+#~ "Wciśnij przycisk MENU aby zdefiniować wyrażenia.\n"
+#~ "Czy chcesz zdefiniować je teraz?"
+
 #~ msgid ""
 #~ "Your local LAN internet connection is not working!\n"
 #~ "Please choose what you want to do next."
@@ -5012,21 +5228,45 @@ msgstr "Przełączony"
 #~ "Interfejs sieci bezprzewodowej nie działa!\n"
 #~ "Proszę wybrać kolejną akcję."
 
+#~ msgid "by Exif"
+#~ msgstr "przez Exif"
+
 #~ msgid "cancel"
 #~ msgstr "skauj"
 
+#~ msgid "color"
+#~ msgstr "kolor"
+
+#~ msgid "delete"
+#~ msgstr "Usuń"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "Równaj do Gniazda A"
 
+#~ msgid "font face"
+#~ msgstr "font face"
+
 #~ msgid "full /etc directory"
 #~ msgstr "Pełen folder /etc"
 
+#~ msgid "headline"
+#~ msgstr "nagłówek"
+
+#~ msgid "highlighted button"
+#~ msgstr "podświetlone przyciski"
+
 #~ msgid "loopthrough to socket A"
 #~ msgstr "Zapętl bezpośrednio do Gniazda A"
 
+#~ msgid "no Picture found"
+#~ msgstr "Nie znaleziono obrazka"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "Tylko katalog /etc/enigma2"
 
+#~ msgid "rebooting..."
+#~ msgstr "restatrowanie..."
+
 #~ msgid ""
 #~ "scan done!\n"
 #~ "%d services found!"
@@ -5054,3 +5294,18 @@ msgstr "Przełączony"
 #~ msgstr ""
 #~ "Skanowanie w toku - %d %% Zakończone!\n"
 #~ "%d znalezionych serwisów!"
+
+#~ msgid "show first tag"
+#~ msgstr "pokaż pierwszą etykietę"
+
+#~ msgid "show second tag"
+#~ msgstr "pokaż drugą etykietę"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "przestrzeń (góra, pomiedzy rzedami, lewo)"
+
+#~ msgid "text"
+#~ msgstr "Tekst"
+
+#~ msgid "year"
+#~ msgstr "rok"
index c8951a832f95ef6ccc7b92f1c661ee874de7229f..7c30ad6c62c705da09c19fa81c06af9306912e52 100755 (executable)
--- a/po/pt.po
+++ b/po/pt.po
@@ -418,7 +418,7 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
+msgid "Artist"
 msgstr "Artista"
 
 msgid "Ask before shutdown:"
@@ -1325,8 +1325,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genero:"
+msgid "Genre"
+msgstr "Genero"
 
 msgid "German"
 msgstr "Alemão"
@@ -3168,14 +3168,11 @@ msgstr "Timeshift não permitido!"
 msgid "Timezone"
 msgstr "Zona Horária"
 
-msgid "Title"
-msgstr ""
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Título:"
+msgid "Title"
+msgstr "Título"
 
 msgid "Titleset mode"
 msgstr ""
@@ -3536,8 +3533,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Ano:"
+msgid "Year"
+msgstr "Ano"
 
 msgid "Yes"
 msgstr "Sim"
@@ -4496,9 +4493,6 @@ msgstr "Semanal"
 msgid "whitelist"
 msgstr "Lista Branca"
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "Sim"
 
index d0328bbb768bbe51be6b566a2d8321f58aa952d1..e05c8e5ea6dd2e2b947f1474973e063bf215ade1 100755 (executable)
--- a/po/ru.po
+++ b/po/ru.po
@@ -358,8 +358,8 @@ msgstr ""
 "По окончанию работы мастера Вы можете установить ограничение на некоторые "
 "сервисы.Прочитайте в инструкции к тюнеру как это сделать."
 
-msgid "Album:"
-msgstr "Альбом:"
+msgid "Album"
+msgstr "Альбом"
 
 msgid "All"
 msgstr "Все"
@@ -398,8 +398,8 @@ msgid ""
 "\n"
 msgstr ""
 
-msgid "Artist:"
-msgstr "Актер:"
+msgid "Artist"
+msgstr "Актер"
 
 msgid "Ask before shutdown:"
 msgstr "Спросить перед выключением?: "
@@ -1288,8 +1288,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Шлюз"
 
-msgid "Genre:"
-msgstr "Жанр:"
+msgid "Genre"
+msgstr "Жанр"
 
 msgid "German"
 msgstr "Немецкий"
@@ -3109,14 +3109,11 @@ msgstr "Сдвиг времени не возможен!"
 msgid "Timezone"
 msgstr "Часовой пояс"
 
-msgid "Title"
-msgstr ""
-
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Название:"
+msgid "Title"
+msgstr "Название"
 
 msgid "Titleset mode"
 msgstr ""
@@ -3463,8 +3460,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr ""
 
-msgid "Year:"
-msgstr "Год:"
+msgid "Year"
+msgstr "Год"
 
 msgid "Yes"
 msgstr "Да"
@@ -4421,9 +4418,6 @@ msgstr "Еженедельно"
 msgid "whitelist"
 msgstr ""
 
-msgid "year"
-msgstr ""
-
 msgid "yes"
 msgstr "да"
 
index 5e5542519655fdde7acb0553a0147fd9e4df37b5..be7f2002c627063a1cf908e8c4d8e47f652bbf27 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,8 +7,8 @@ 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"
-"PO-Revision-Date: 2008-11-12 12:27+0100\n"
+"POT-Creation-Date: 2009-02-04 14:59+0100\n"
+"PO-Revision-Date: 2009-01-28 12:36+0100\n"
 "Last-Translator: WeeGull <weegull@hotmail.com>\n"
 "Language-Team: WeeGull <weegull@hotmail.com>\n"
 "MIME-Version: 1.0\n"
@@ -100,9 +100,6 @@ msgstr "* Enbart tillgänglig vid angiven dold SSID eller nätverksnyckel"
 msgid ".NFI Download failed:"
 msgstr ".NFI Nedladdning misslyckades:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ".NFI Flash bootbar USB stick skapad. "
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -304,12 +301,6 @@ msgstr "AC3 standard"
 msgid "AC3 downmix"
 msgstr "AC3 nedmixning"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Om"
 
@@ -382,8 +373,8 @@ msgstr ""
 "Efter startguiden är avslutad, behöver du skydda enskilda kanaler. Läs i din "
 "manual för Dreambox om hur du utför det."
 
-msgid "Album:"
-msgstr "Album:"
+msgid "Album"
+msgstr "Album"
 
 msgid "All"
 msgstr "Alla"
@@ -391,9 +382,6 @@ msgstr "Alla"
 msgid "All Satellites"
 msgstr "Alla Satelliter"
 
-msgid "All..."
-msgstr "Alla..."
-
 msgid "Alpha"
 msgstr "Alpha"
 
@@ -426,8 +414,8 @@ msgstr ""
 "Är du säker på att du vill starta om dina nätverkskort?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Artist:"
+msgid "Artist"
+msgstr "Artist"
 
 msgid "Ask before shutdown:"
 msgstr "Fråga före avstängning:"
@@ -605,6 +593,9 @@ msgstr "Kanal"
 msgid "Channel Selection"
 msgstr "Kanallista"
 
+msgid "Channel not in services list"
+msgstr "Kanal finns ej i servicelistan"
+
 msgid "Channel:"
 msgstr "Kanal:"
 
@@ -641,6 +632,12 @@ msgstr "Välj målkatalog"
 msgid "Choose your Skin"
 msgstr "Välj utseende"
 
+msgid "Circular left"
+msgstr ""
+
+msgid "Circular right"
+msgstr ""
+
 msgid "Cleanup"
 msgstr "Rensa"
 
@@ -696,7 +693,7 @@ msgid "Complete"
 msgstr "Komplett"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
-msgstr ""
+msgstr "Komplex (tillåter mixning av ljudspår och aspekt)"
 
 msgid "Configuration Mode"
 msgstr "Konfigurationsläge"
@@ -741,15 +738,16 @@ msgstr "Fortsätt spela"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Kopiera USB flash boot image till stick..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Kunde inte ansluta till Dreambox .NFI image feed Server:"
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Kunde inte ladda media! Ingen disk istoppad?"
 
+#, python-format
+msgid "Couldn't record due to conflicting timer %s"
+msgstr ""
+
 msgid "Create DVD-ISO"
 msgstr "Skapa DVD-ISO"
 
@@ -820,9 +818,6 @@ msgstr "Danska"
 msgid "Date"
 msgstr "Datum"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr "Packar upp USB flash boot image..."
-
 msgid "Deep Standby"
 msgstr "Stäng av"
 
@@ -920,6 +915,9 @@ msgstr "Visa 16:9 sändning som"
 msgid "Display 4:3 content as"
 msgstr "Visa 4:3 sändning som"
 
+msgid "Display >16:9 content as"
+msgstr ""
+
 msgid "Display Setup"
 msgstr "Display installation"
 
@@ -950,9 +948,6 @@ msgstr ""
 "Vill du verkligen ladda ner\n"
 "pluginet \"%s\"?"
 
-msgid "Do you really want to exit?"
-msgstr "Vill du verkligen avsluta?"
-
 msgid ""
 "Do you really want to initialize the harddisk?\n"
 "All data on the disk will be lost!"
@@ -1044,9 +1039,6 @@ msgstr "Nerladdningsbara plugins"
 msgid "Downloading"
 msgstr "Laddar ner"
 
-msgid "Downloading image description..."
-msgstr "Ladda ner image beskrivning..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Hämtar plugin information. Var vänlig vänta..."
 
@@ -1076,7 +1068,7 @@ msgid "Edit DNS"
 msgstr "Ändra DNS"
 
 msgid "Edit Title"
-msgstr ""
+msgstr "Ändra titel"
 
 msgid "Edit chapters of current title"
 msgstr "Ändra kapitel i nuvarande titel"
@@ -1129,9 +1121,6 @@ msgstr "Krypterings Nyckelvariant"
 msgid "Encryption Type"
 msgstr "Krypteringstyp"
 
-msgid "End"
-msgstr "Slut"
-
 msgid "End time"
 msgstr "Sluttid"
 
@@ -1205,6 +1194,9 @@ msgstr "Exekverings pågår:"
 msgid "Execution finished!!"
 msgstr "Exekvering färdig!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Avsluta"
 
@@ -1278,24 +1270,21 @@ msgid ""
 "First we need to download the latest boot environment for the USB flasher."
 msgstr "Först måste vi ladda ner senaste bootmiljön för USB flasher."
 
-msgid "Fix USB stick"
-msgstr "Fix USB stick"
-
 msgid "Flash"
 msgstr "Flash"
 
 msgid "Flashing failed"
 msgstr "Flashning misslyckades"
 
-msgid "Font size"
-msgstr "Font storlek"
-
 msgid "Format"
 msgstr "Format"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Bildupprepning vid hackig spolning"
 
+msgid "Frame size in full view"
+msgstr "Ramstorlek i fullskärm"
+
 msgid "French"
 msgstr "Franska"
 
@@ -1317,6 +1306,9 @@ msgstr "Fre"
 msgid "Friday"
 msgstr "Fredag"
 
+msgid "Frisian"
+msgstr "Frisiska"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP adress"
 
@@ -1340,8 +1332,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Gateway"
 
-msgid "Genre:"
-msgstr "Genre:"
+msgid "Genre"
+msgstr "Genre"
 
 msgid "German"
 msgstr "Tyska"
@@ -1385,6 +1377,9 @@ msgstr "Hierarkisk information "
 msgid "Hierarchy mode"
 msgstr "Hierarkiskt läge"
 
+msgid "Horizontal"
+msgstr ""
+
 msgid "How many minutes do you want to record?"
 msgstr "Hur många minuter vill du spela in?"
 
@@ -1614,6 +1609,9 @@ msgstr "Lokation"
 msgid "Lock:"
 msgstr "Lås:"
 
+msgid "Log results to harddisk"
+msgstr "Logga resultatet till hårddisk"
+
 msgid "Long Keypress"
 msgstr "Lång knapptryckning"
 
@@ -1647,6 +1645,9 @@ msgstr "Manuell sökning"
 msgid "Manual transponder"
 msgstr "Manuell transponder"
 
+msgid "Manufacturer"
+msgstr ""
+
 msgid "Margin after record"
 msgstr "Marginal efter inspelning (i minuter)"
 
@@ -1671,6 +1672,9 @@ msgstr "Meny"
 msgid "Message"
 msgstr "Meddelande"
 
+msgid "Message..."
+msgstr "Meddelande..."
+
 msgid "Mkfs failed"
 msgstr "Mkfs misslyckades"
 
@@ -1813,6 +1817,9 @@ msgstr "Ingen 50 Hz, tyvärr. :("
 msgid "No HDD found or HDD not initialized!"
 msgstr "Ingen hårddisk hittad eller initierad!"
 
+msgid "No Networks found"
+msgstr "Inget nätverk funnet"
+
 msgid "No backup needed"
 msgstr "Ingen backup behövs"
 
@@ -1845,6 +1852,9 @@ msgstr "Ingen motorkapabel frontend hittad."
 msgid "No satellite frontend found!!"
 msgstr "Ingen satellit frontend funnen!!"
 
+msgid "No tags are set on these movies."
+msgstr "Ingen märkning är gjord på dessa filmer."
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "Ingen tuner är konfigurerad för motor diseqc!"
 
@@ -1946,14 +1956,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Spelas nu"
 
-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 ""
-"Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera och "
-"använda som .NFI image flasher. Tryck OK efter du anslutit stickan i boxen. "
-
 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 "
@@ -1993,9 +1995,6 @@ msgstr "Bara Fri sökning"
 msgid "Orbital Position"
 msgstr "Orbital position"
 
-msgid "Other..."
-msgstr "Annat..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2030,15 +2029,15 @@ msgstr "Föräldrakontroll installation"
 msgid "Parental control type"
 msgstr "Föräldrakontroll typ"
 
-msgid "Partitioning USB stick..."
-msgstr "Partitionera USB stick..."
-
 msgid "Pause movie at end"
 msgstr "Pausa filmen"
 
 msgid "PiPSetup"
 msgstr "BiB konfiguration"
 
+msgid "PicturePlayer"
+msgstr "Bildspelare"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Svarta kanter"
@@ -2082,6 +2081,13 @@ msgstr "Vänligen välj paket"
 msgid "Please choose the default services lists you want to install."
 msgstr "Vänligen välj vilken grundservicelista som du vill installera."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Vänligen koppla bort alla USB enheter från din Dreambox och (åter-)anslut "
+"mål USB stick (minimumstorlek är 64MB) nu!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Vänligen ändra inte om du inte vet vad du gör!"
 
@@ -2137,8 +2143,8 @@ msgstr "Vänligen välj en underkanal för inspelning..."
 msgid "Please select a subservice..."
 msgstr "Vänligen välj en underkanal..."
 
-msgid "Please select keyword to filter..."
-msgstr "Vänligen välj nyckelord för filter..."
+msgid "Please select tag to filter..."
+msgstr "Vänligen välj märkning för filtrering..."
 
 msgid "Please select target directory or medium"
 msgstr "Vänligen välj målbibliotek eller media"
@@ -2175,8 +2181,8 @@ msgstr ""
 msgid "Please wait for activation of your network configuration..."
 msgstr "Vänligen vänta för aktivering av din nätverkskonfiguration..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "Vänligen vänta för md5 signatur verifiering..."
+msgid "Please wait while scanning is in progress..."
+msgstr "Vänligen vänta medans sökning pågår..."
 
 msgid "Please wait while we configure your network..."
 msgstr "Vänligen vänta medans ditt nätverk konfigureras..."
@@ -2253,6 +2259,10 @@ msgstr "Tryck OK för aktivera inställningarna."
 msgid "Press OK to edit the settings."
 msgstr "Tryck OK för att ändra inställningar."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr "Tryck OK för att få utförligare information om %s"
+
 msgid "Press OK to scan"
 msgstr "Tryck OK för sökning"
 
@@ -2268,8 +2278,11 @@ msgstr "Förvisningsmeny"
 msgid "Primary DNS"
 msgstr "Primär DNS"
 
+msgid "Priority"
+msgstr "Prioritet"
+
 msgid "Properties of current title"
-msgstr ""
+msgstr "Egenskaper på nuvarande titel"
 
 msgid "Protect services"
 msgstr "Skydda kanaler"
@@ -2286,6 +2299,9 @@ msgstr "Leverantör att scanna"
 msgid "Providers"
 msgstr "Leverantörer"
 
+msgid "Quick"
+msgstr "Snabb"
+
 msgid "Quickzap"
 msgstr "Snabbzap"
 
@@ -2307,15 +2323,15 @@ msgstr "Radio"
 msgid "Ram Disk"
 msgstr "Ram Disk"
 
+msgid "Random"
+msgstr "Slumpmässig"
+
 msgid "Really close without saving settings?"
 msgstr "Verkligen stänga utan att spara inställningarna?"
 
 msgid "Really delete done timers?"
 msgstr "Verkligen ta bort färdiga timerinspelningar?"
 
-msgid "Really delete this timer?"
-msgstr "Verkligen ta bort denna timer?"
-
 msgid "Really exit the subservices quickzap?"
 msgstr "Verkligen avsluta underkanals snabbzap?"
 
@@ -2337,6 +2353,10 @@ msgstr "Mottagning inställningar"
 msgid "Record"
 msgstr "Spela in"
 
+#, python-format
+msgid "Record time limited due to conflicting timer %s"
+msgstr ""
+
 msgid "Recorded files..."
 msgstr "Inspelade filer..."
 
@@ -2358,9 +2378,6 @@ msgstr "Uppdateringstakt"
 msgid "Refresh rate selection."
 msgstr "Uppdateringsfrekvens val."
 
-msgid "Remounting stick partition..."
-msgstr "Ommontera stcik partition..."
-
 msgid "Remove Bookmark"
 msgstr "Ta bort Bokmärke"
 
@@ -2382,6 +2399,9 @@ msgstr "Ta bort trasig .NFI fil?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Ta bort ofullständig .NFI fil?"
 
+msgid "Remove timer"
+msgstr "Ta bort timer"
+
 msgid "Remove title"
 msgstr "Ta bort titel"
 
@@ -2408,7 +2428,7 @@ msgid "Reset"
 msgstr "Nollställ"
 
 msgid "Reset and renumerate title names"
-msgstr ""
+msgstr "Återställ och omnumrera titelnamnen"
 
 msgid "Resolution"
 msgstr "Upplösning"
@@ -2649,10 +2669,10 @@ msgid "Selected source image"
 msgstr "Välj käll image"
 
 msgid "Send DiSEqC"
-msgstr ""
+msgstr "Skicka DiSEqC"
 
 msgid "Send DiSEqC only on satellite change"
-msgstr ""
+msgstr "Skicka enbart DiSEqC vid ändrad satellit"
 
 msgid "Seperate titles with a main menu"
 msgstr "Separera titlar med en huvudmeny"
@@ -2706,7 +2726,7 @@ msgid "Services"
 msgstr "Kanaler"
 
 msgid "Set Voltage and 22KHz"
-msgstr ""
+msgstr "Ange Volt och 22KHz"
 
 msgid "Set as default Interface"
 msgstr "Använd som standard Interface"
@@ -2772,7 +2792,7 @@ msgid "Simple"
 msgstr "Enkel"
 
 msgid "Simple titleset (compatibility for legacy players)"
-msgstr ""
+msgstr "Enkelt titelset (kompabilitet för äldre spelare)"
 
 msgid "Single"
 msgstr "Singel"
@@ -2852,9 +2872,6 @@ msgstr "Viloläge"
 msgid "Standby / Restart"
 msgstr "Viloläge / Omstart"
 
-msgid "Start"
-msgstr "Start"
-
 msgid "Start from the beginning"
 msgstr "Spela upp från början"
 
@@ -2897,6 +2914,12 @@ msgstr "Avsluta uppspelningen?"
 msgid "Stop test"
 msgstr "Stoppa test"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr "Sluta testa efter # misslyckade transponders"
+
+msgid "Stop testing plane after # successful transponders"
+msgstr "Sluta testa efter # lyckade transponders"
+
 msgid "Store position"
 msgstr "Lagra position"
 
@@ -2958,12 +2981,27 @@ msgstr "TV System"
 msgid "Table of content for collection"
 msgstr "Index över innehållet av samligen"
 
+msgid "Tag 1"
+msgstr "Märke 1"
+
+msgid "Tag 2"
+msgstr "Märke 2"
+
+msgid "Tags"
+msgstr "Märke 3"
+
 msgid "Terrestrial"
 msgstr "Marksänd"
 
 msgid "Terrestrial provider"
 msgstr "Marksänd leverantör"
 
+msgid "Test DiSEqC settings"
+msgstr "Test DiSEqC inställningar"
+
+msgid "Test Type"
+msgstr "Test Typ"
+
 msgid "Test mode"
 msgstr "Testläge"
 
@@ -2980,17 +3018,6 @@ msgstr ""
 "Tack för att du använde guiden. Din box är nu konfigurerad.\n"
 "Tryck OK för att börja använda din 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 ""
-".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda "
-"ner .NFI image fil från feed server och spara på stickan. Efter det starta "
-"om och håll 'Ner' knappen på fronten intryckt för att starta .NFI flasher "
-"från stickan!"
-
 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 "
@@ -3000,6 +3027,13 @@ msgstr ""
 "Dreambox format data DVD (kommer ej kunnas spelas i vanlig DVD spelare) "
 "istället? "
 
+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 ""
+"USB sticken är nu bootbar. Vill du ladda ner senaste image från feed server "
+"och spara den på sticken?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Backupen misslyckades, välj en annan plats för din backup "
 
@@ -3066,6 +3100,10 @@ msgstr "PIN koden du angav var fel."
 msgid "The pin codes you entered are different."
 msgstr "PIN koderna du angav är olika."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr "Resultatet har skrivits till %s."
+
 msgid "The sleep timer has been activated."
 msgstr "Sovtimer har aktiverats."
 
@@ -3207,6 +3245,9 @@ msgstr "Gränsvärde"
 msgid "Thu"
 msgstr "Tors"
 
+msgid "Thumbnails"
+msgstr "Thumbnails"
+
 msgid "Thursday"
 msgstr "Torsdag"
 
@@ -3256,6 +3297,9 @@ msgstr "Timeshift"
 msgid "Timeshift not possible!"
 msgstr "Timeshift inte möjligt!"
 
+msgid "Timeshift path..."
+msgstr "Timeshift sökväg..."
+
 msgid "Timezone"
 msgstr "Tidszon"
 
@@ -3263,21 +3307,25 @@ msgid "Title"
 msgstr "Titel"
 
 msgid "Title properties"
-msgstr ""
-
-msgid "Title:"
-msgstr "Title:"
+msgstr "Titel egenskaper"
 
 msgid "Titleset mode"
-msgstr ""
+msgstr "Titelset läge"
 
 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."
-msgstr ""
-"För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål USB "
-"stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har tagit ut "
-"stickan."
+"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 ""
+"För att uppdatera din Dreambox firmware, vänligen utför följande steg:\n"
+"1) Stäng av din box med strömbrytaren på baksidan och sätt in bootbar USB "
+"stick.\n"
+"2) Slå på strömbrytaren och håll NER pil på fronten intryckt i ungerfär 10 "
+"sekunder.\n"
+"3) Vänta på uppstart och följ instruktionerna från guiden."
 
 msgid "Today"
 msgstr "Idag"
@@ -3354,6 +3402,9 @@ msgstr "Turkiska"
 msgid "Two"
 msgstr "Två"
 
+msgid "Type"
+msgstr ""
+
 msgid "Type of scan"
 msgstr "Typ av sökning"
 
@@ -3366,6 +3417,12 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Minne"
 
+msgid "USB stick wizard"
+msgstr "USB stick guide"
+
+msgid "Ukrainian"
+msgstr "Ukrainska"
+
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
@@ -3383,6 +3440,15 @@ msgstr ""
 msgid "Uncommitted DiSEqC command"
 msgstr "Uncommitted DiSEqC kommando"
 
+msgid "Unicable"
+msgstr ""
+
+msgid "Unicable LNB"
+msgstr ""
+
+msgid "Unicable Martix"
+msgstr ""
+
 msgid "Universal LNB"
 msgstr "Universal LNB"
 
@@ -3410,6 +3476,9 @@ msgstr "Uppgradering"
 msgid "Upgrading Dreambox... Please wait"
 msgstr "Uppgraderar Dreambox... Vänligen vänta"
 
+msgid "Use"
+msgstr "Använd"
+
 msgid "Use DHCP"
 msgstr "Använd DHCP"
 
@@ -3476,6 +3545,9 @@ msgstr "VCR Scart"
 msgid "VMGM (intro trailer)"
 msgstr "VMGM (intro trailer)"
 
+msgid "Vertical"
+msgstr ""
+
 msgid "Video Fine-Tuning"
 msgstr "Video fininställning"
 
@@ -3545,9 +3617,6 @@ msgstr "WSS på 4:3"
 msgid "Waiting"
 msgstr "Väntar"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "Väntar på USB stick..."
-
 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"
@@ -3614,6 +3683,9 @@ msgstr "Vad vill du söka efter?"
 msgid "Where do you want to backup your settings?"
 msgstr "Var vill du spara dina inställningar?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Var ska temporära timeshift inspelningar sparas?"
+
 msgid "Wireless"
 msgstr "Trådlöst"
 
@@ -3629,14 +3701,11 @@ msgstr "Skrivning misslyckades!"
 msgid "Writing NFI image file to flash completed"
 msgstr "Skrivning av NFI image fil till flash klart"
 
-msgid "Writing image file to NAND Flash"
-msgstr "Skrivning av image fil till NAND flash"
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "År:"
+msgid "Year"
+msgstr "År"
 
 msgid "Yes"
 msgstr "Ja"
@@ -3754,15 +3823,6 @@ msgstr ""
 "instruktioner från websidan, din nya mjukvara kommer att fråga dig om du "
 "vill återställa dina inställningar."
 
-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 ""
-"Du måste ange några nyckelord först!\n"
-"Tryck Meny för att ange nyckelord.\n"
-"Vill du ange nyckelord nu?"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3909,33 +3969,42 @@ msgstr ""
 
 #, python-format
 msgid "audio track (%s) format"
-msgstr ""
+msgstr "ljudspår (%s) format"
 
 #, python-format
 msgid "audio track (%s) language"
-msgstr ""
+msgstr "ljudspår (%s) språk"
 
 msgid "audio tracks"
 msgstr "ljudspår"
 
+msgid "auto"
+msgstr "auto"
+
 msgid "back"
 msgstr "tillbaka"
 
 msgid "background image"
 msgstr "bakgrundsbild"
 
+msgid "backgroundcolor"
+msgstr "bakgrundsfärg"
+
 msgid "better"
 msgstr "bättre"
 
+msgid "black"
+msgstr "svart"
+
 msgid "blacklist"
 msgstr "svartlista"
 
+msgid "blue"
+msgstr "blå"
+
 #, python-format
 msgid "burn audio track (%s)"
-msgstr ""
-
-msgid "by Exif"
-msgstr "av Exif"
+msgstr "bränn ljudspår (%s)"
 
 msgid "change recording (duration)"
 msgstr "ändra inspelning (längd)"
@@ -3958,9 +4027,6 @@ msgstr "circulär höger"
 msgid "clear playlist"
 msgstr "rensa spellista"
 
-msgid "color"
-msgstr "färg"
-
 msgid "complex"
 msgstr "komplex"
 
@@ -3988,12 +4054,12 @@ msgstr "daglig"
 msgid "day"
 msgstr "dag"
 
-msgid "delete"
-msgstr "ta bort"
-
 msgid "delete cut"
 msgstr "ta bort klipp"
 
+msgid "delete file"
+msgstr "ta bort fil"
+
 msgid "delete playlist entry"
 msgstr "ta bort post i spellista"
 
@@ -4096,15 +4162,15 @@ msgstr "avsluta nätverkskort installationsmeny"
 msgid "failed"
 msgstr "misslyckades"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "filformat (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "filnamn"
 
 msgid "fine-tune your display"
 msgstr "fininställ din skärm"
 
-msgid "font face"
-msgstr "font utseende"
-
 msgid "forward to the next chapter"
 msgstr "framåt till nästa kapitel"
 
@@ -4120,8 +4186,8 @@ msgstr "stäng av mottagaren"
 msgid "go to standby"
 msgstr "inta standby"
 
-msgid "headline"
-msgstr "rubrik"
+msgid "green"
+msgstr "grön"
 
 msgid "hear radio..."
 msgstr "lyssna på radio..."
@@ -4129,15 +4195,15 @@ msgstr "lyssna på radio..."
 msgid "help..."
 msgstr "hjälp..."
 
+msgid "hidden network"
+msgstr "gömt nätverk"
+
 msgid "hide extended description"
 msgstr "dölj utökad beskrivning"
 
 msgid "hide player"
 msgstr "dölj spelare"
 
-msgid "highlighted button"
-msgstr "Vald knapp"
-
 msgid "horizontal"
 msgstr "horisontal"
 
@@ -4269,9 +4335,6 @@ msgstr "nej"
 msgid "no HDD found"
 msgstr "ingen hårddisk hittad"
 
-msgid "no Picture found"
-msgstr "ingen bild hittad"
-
 msgid "no module found"
 msgstr "ingen modul hittad"
 
@@ -4287,6 +4350,9 @@ msgstr "ingen"
 msgid "not locked"
 msgstr "inte låst"
 
+msgid "not used"
+msgstr ""
+
 msgid "nothing connected"
 msgstr "inget anslutet"
 
@@ -4350,15 +4416,15 @@ msgstr "föregående kanal"
 msgid "previous channel in history"
 msgstr "föregående kanal i historiken"
 
-msgid "rebooting..."
-msgstr "startar om..."
-
 msgid "record"
 msgstr "spela in"
 
 msgid "recording..."
 msgstr "spelar in..."
 
+msgid "red"
+msgstr "röd"
+
 msgid "remove a nameserver entry"
 msgstr "ta bort en namnserver post"
 
@@ -4407,9 +4473,15 @@ msgstr "spola bakåt till föregående kapitel"
 msgid "right"
 msgstr "höger"
 
+msgid "save last directory on exit"
+msgstr "spara sista biblioteket vid avslut"
+
 msgid "save playlist"
 msgstr "spara spellista"
 
+msgid "save playlist on exit"
+msgstr "spara spellista vid avslut"
+
 msgid "scan done!"
 msgstr "sökning klar!"
 
@@ -4462,6 +4534,9 @@ msgstr "visa DVD huvudmeny"
 msgid "show EPG..."
 msgstr "visa EPG..."
 
+msgid "show Infoline"
+msgstr "visa Infolinje"
+
 msgid "show all"
 msgstr "visa alla"
 
@@ -4474,11 +4549,11 @@ msgstr "visa programdetaljer"
 msgid "show extended description"
 msgstr "visa utökad beskrivning"
 
-msgid "show first tag"
-msgstr "visa första märkning"
+msgid "show first selected tag"
+msgstr "visa första valda märkning"
 
-msgid "show second tag"
-msgstr "visa andra märkning"
+msgid "show second selected tag"
+msgstr "visa andra valda märkning"
 
 msgid "show shutdown menu"
 msgstr "visa avstängningsmeny"
@@ -4513,12 +4588,12 @@ msgstr "hoppa framåt"
 msgid "skip forward (enter time)"
 msgstr "hoppa framåt (ange tid)"
 
+msgid "slide picture in loop"
+msgstr "bildspel i loop"
+
 msgid "sort by date"
 msgstr "sortera efter datum"
 
-msgid "spaces (top, between rows, left)"
-msgstr "utrymme (topp, mellan rader, vänster)"
-
 msgid "standard"
 msgstr "standard"
 
@@ -4528,6 +4603,9 @@ msgstr "viloläge"
 msgid "start cut here"
 msgstr "startklipp här"
 
+msgid "start directory"
+msgstr "startbibliotek"
+
 msgid "start timeshift"
 msgstr "starta timeshift"
 
@@ -4558,14 +4636,20 @@ msgstr "byt till fillista"
 msgid "switch to playlist"
 msgstr "byt till spellista"
 
+msgid "switch to the next angle"
+msgstr "byt till nästa position"
+
 msgid "switch to the next audio track"
 msgstr "byt till nästa ljudspår"
 
 msgid "switch to the next subtitle language"
 msgstr "byt till nästa textningsspråk"
 
-msgid "text"
-msgstr "text"
+msgid "template file"
+msgstr "mallfil"
+
+msgid "textcolor"
+msgstr "textfärg"
 
 msgid "this recording"
 msgstr "denna inspelning"
@@ -4615,8 +4699,11 @@ msgstr "veckolig"
 msgid "whitelist"
 msgstr "vitlista"
 
-msgid "year"
-msgstr "år"
+msgid "working"
+msgstr "arbetar"
+
+msgid "yellow"
+msgstr "gul"
 
 msgid "yes"
 msgstr "ja"
@@ -4647,12 +4734,24 @@ msgstr "zapped"
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr ".NFI Flash bootbar USB stick skapad. "
+
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
 #~ msgid "Abort"
 #~ msgstr "Avbryt"
 
 #~ msgid "Add title..."
 #~ msgstr "Lägg till titel..."
 
+#~ msgid "All..."
+#~ msgstr "Alla..."
+
 #~ msgid "An error has occured. (%s)"
 #~ msgstr "Ett fel har uppstått. (%s)"
 
@@ -4705,6 +4804,9 @@ msgstr "zapped"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Anslut Internet till dit lokala LAN"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Kopiera USB flash boot image till stick..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD ENTER tangent"
 
@@ -4720,6 +4822,9 @@ msgstr "zapped"
 #~ msgid "DVD up key"
 #~ msgstr "DVD upp tangent"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr "Packar upp USB flash boot image..."
+
 #~ msgid "Device Setup..."
 #~ msgstr "Nätverksinstallation..."
 
@@ -4740,6 +4845,12 @@ msgstr "zapped"
 #~ "Vill du verkligen ladda ner\n"
 #~ "pluginen \""
 
+#~ msgid "Do you really want to exit?"
+#~ msgstr "Vill du verkligen avsluta?"
+
+#~ msgid "Downloading image description..."
+#~ msgstr "Ladda ner image beskrivning..."
+
 #~ msgid "Edit current title"
 #~ msgstr "Ändra vald titel"
 
@@ -4759,9 +4870,18 @@ msgstr "zapped"
 #~ "Aktivera lokalt nätverk i din Dreambox.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Slut"
+
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Avsluta guide och konfigurera manuellt senare"
 
+#~ msgid "Fix USB stick"
+#~ msgstr "Fix USB stick"
+
+#~ msgid "Font size"
+#~ msgstr "Font storlek"
+
 #~ msgid "Jump to video title 1 (play movie from start)"
 #~ msgstr "Hoppa till video titel 1 (spela film från start)"
 
@@ -4819,6 +4939,21 @@ msgstr "zapped"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nej, låt mig välja grundlista"
 
+#~ 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 ""
+#~ "Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera "
+#~ "och använda som .NFI image flasher. Tryck OK efter du anslutit stickan i "
+#~ "boxen. "
+
+#~ msgid "Other..."
+#~ msgstr "Annat..."
+
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "Partitionera USB stick..."
+
 #~ 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 "
@@ -4849,6 +4984,12 @@ msgstr "zapped"
 #~ msgid "Please select below the wireless network you want to connect to."
 #~ msgstr "Vänligen välj nedan vilket trådlöst nätverk du vill ansluta till."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Vänligen välj nyckelord för filter..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "Vänligen vänta för md5 signatur verifiering..."
+
 #~ 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 "
@@ -4863,6 +5004,9 @@ msgstr "zapped"
 #~ "Anslut ditt WLAN USB Stick till din Dreambox före du trycker på OK.\n"
 #~ "\n"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "Verkligen ta bort denna timer?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4881,6 +5025,9 @@ msgstr "zapped"
 #~ msgstr ""
 #~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen stänga av nu?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "Ommontera stcik partition..."
+
 #~ msgid "Restart your wireless interface"
 #~ msgstr "Omstart av din trådlösa adapter"
 
@@ -4893,6 +5040,9 @@ msgstr "zapped"
 #~ msgid "Show files from %s"
 #~ msgstr "Visa filer från %s"
 
+#~ msgid "Start"
+#~ msgstr "Start"
+
 #~ msgid "Step "
 #~ msgstr "Steg "
 
@@ -4932,6 +5082,29 @@ msgstr "zapped"
 #~ "användas.\n"
 #~ "Vänligen tryck OK för att börja använda din 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 ""
+#~ ".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda "
+#~ "ner .NFI image fil från feed server och spara på stickan. Efter det "
+#~ "starta om och håll 'Ner' knappen på fronten intryckt för att starta .NFI "
+#~ "flasher från stickan!"
+
+#~ 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."
+#~ msgstr ""
+#~ "För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål "
+#~ "USB stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har "
+#~ "tagit ut stickan."
+
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "Väntar på USB stick..."
+
 #~ msgid ""
 #~ "Welcome.\n"
 #~ "\n"
@@ -4947,6 +5120,18 @@ msgstr "zapped"
 #~ "\n"
 #~ "Tryck OK på din fjärrkontroll för att gå till nästa steg."
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "Skrivning av image fil till NAND flash"
+
+#~ 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 ""
+#~ "Du måste ange några nyckelord först!\n"
+#~ "Tryck Meny för att ange nyckelord.\n"
+#~ "Vill du ange nyckelord nu?"
+
 #~ msgid ""
 #~ "Your local LAN internet connection is not working!\n"
 #~ "Please choose what you want to do next."
@@ -4982,14 +5167,50 @@ msgstr "zapped"
 #~ "Din trådlösa Internet anslutning fungerar inte!\n"
 #~ "Vänligen välj vad du vill göra."
 
+#~ msgid "by Exif"
+#~ msgstr "av Exif"
+
+#~ msgid "color"
+#~ msgstr "färg"
+
+#~ msgid "delete"
+#~ msgstr "ta bort"
+
 #~ msgid "equal to Socket A"
 #~ msgstr "likadant som Ingång A"
 
+#~ msgid "font face"
+#~ msgstr "font utseende"
+
 #~ msgid "full /etc directory"
 #~ msgstr "fullt /etc bibliotek"
 
+#~ msgid "headline"
+#~ msgstr "rubrik"
+
+#~ msgid "highlighted button"
+#~ msgstr "Vald knapp"
+
 #~ msgid "loopthrough to socket A"
 #~ msgstr "loopthrough till ingång A"
 
+#~ msgid "no Picture found"
+#~ msgstr "ingen bild hittad"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "endast /etc/enigma2 bibliotek"
+
+#~ msgid "rebooting..."
+#~ msgstr "startar om..."
+
+#~ msgid "show first tag"
+#~ msgstr "visa första märkning"
+
+#~ msgid "show second tag"
+#~ msgstr "visa andra märkning"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "utrymme (topp, mellan rader, vänster)"
+
+#~ msgid "text"
+#~ msgstr "text"
index 67d6891f19d276311ab870c014101d5f27e95770..f85d268b6bbe9889ced5e26af6f5646b07322d0b 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,11 +1,11 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: enigma2\n"
+"Project-Id-Version: enigma2 Turkish Locale\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-16 23:21+0100\n"
-"PO-Revision-Date: \n"
+"POT-Creation-Date: 2009-01-16 00:54+0100\n"
+"PO-Revision-Date: 2009-01-05 12:39+0200\n"
 "Last-Translator: Zülfikar Veyisoğlu <zveyis@gmail.com>\n"
-"Language-Team: \n"
+"Language-Team: http://www.turkeyforum.com/satforum <zveyis@gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -93,10 +93,6 @@ msgstr "* Yalnızca gizlenmiş SSID veya ağ anahtarı girildiğinde kullanılab
 msgid ".NFI Download failed:"
 msgstr ".NFI dosyası indirilirken hata oluştu:"
 
-msgid ".NFI Flasher bootable USB stick successfully created."
-msgstr ""
-"USB bellek için önyükleme yapabilir .NFI Flaşlayıcı başarıyla oluşturuldu."
-
 msgid ""
 ".NFI file passed md5sum signature check. You can safely flash this image!"
 msgstr ""
@@ -219,7 +215,7 @@ msgid ""
 "Dreambox to standby. Do that now?"
 msgstr ""
 "Bitmiş olan bir kayıt zamanlayıcısı Dreambox'ı\n"
-"uyku moduna almak istiyor. Şimdi alınsın mı?"
+"uyku kipine almak istiyor. Şimdi alınsın mı?"
 
 msgid ""
 "A finished record timer wants to shut down\n"
@@ -257,7 +253,7 @@ msgid ""
 "A recording is currently running. Please stop the recording before trying to "
 "start the satfinder."
 msgstr ""
-"Kayıt devam ediyor. Lütfen Uydu Arayıcıyı başlatmadan önce kaydı durdurun."
+"Kayıt devam ediyor. Lütfen uydu arayıcıyı başlatmadan önce kaydı durdurun."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -268,7 +264,7 @@ msgid ""
 "Dreambox to standby. Do that now?"
 msgstr ""
 "Zamanlanmış bir görev Dreambox'ı\n"
-"uyku moduna almak istiyor. Şimdi alınsın mı?"
+"uyku kipine almak istiyor. Şimdi alınsın mı?"
 
 msgid ""
 "A sleep timer wants to shut down\n"
@@ -281,7 +277,7 @@ msgid ""
 "A timer failed to record!\n"
 "Disable TV and try again?\n"
 msgstr ""
-"Kayıt zamanlayıcı başarısız!\n"
+"Kayıt zamanlayıcı başarısız!\n"
 "TV fonksiyonu devre dışı bırakılıp tekrar denensin mi?\n"
 
 msgid "A/V Settings"
@@ -299,12 +295,6 @@ msgstr "AC3 varsayılan"
 msgid "AC3 downmix"
 msgstr "AC3 downmix"
 
-msgid "AGC"
-msgstr "AGC"
-
-msgid "AGC:"
-msgstr "AGC:"
-
 msgid "About"
 msgstr "Hakkında"
 
@@ -330,7 +320,7 @@ msgid "Add"
 msgstr "Ekle"
 
 msgid "Add Bookmark"
-msgstr "Yer imi Ekle"
+msgstr "Yer imi ekle"
 
 msgid "Add a mark"
 msgstr "İşaret ekle"
@@ -376,10 +366,10 @@ msgid ""
 msgstr ""
 "Sihirbaz tamamlandıktan sonra, kanal korumasına ihtiyacınız olacak. Nasıl "
 "yapılacağını öğrenmek istiyorsanız Dreambox'ınızın kullanım kılavuzuna "
-"başvurunuz."
+"başvurun."
 
-msgid "Album:"
-msgstr "Albüm:"
+msgid "Album"
+msgstr "Albüm"
 
 msgid "All"
 msgstr "Tümü"
@@ -387,17 +377,14 @@ msgstr "Tümü"
 msgid "All Satellites"
 msgstr "Tüm uydular"
 
-msgid "All..."
-msgstr "Tümü..."
-
 msgid "Alpha"
-msgstr "Alfa"
+msgstr "Saydamlık"
 
 msgid "Alternative radio mode"
-msgstr "Alternatif radyo modu"
+msgstr "Alternatif radyo kipi"
 
 msgid "Alternative services tuner priority"
-msgstr "Alternatif kanallarda tuner önceliği"
+msgstr "Alternatifli kanallarda tuner önceliği"
 
 msgid "An empty filename is illegal."
 msgstr "Boş dosya adı geçersiz."
@@ -412,18 +399,18 @@ msgid ""
 "Are you sure you want to activate this network configuration?\n"
 "\n"
 msgstr ""
-"Bu ağ yapılandırmasını aktifleştirmek istediğinizden emin misiniz?\n"
+"Bu ağ yapılandırmasını etkinleştirmek istiyor musunuz?\n"
 "\n"
 
 msgid ""
 "Are you sure you want to restart your network interfaces?\n"
 "\n"
 msgstr ""
-"Ağ arayüzlerini yeniden başlatmak istediğinizden emin misiniz?\n"
+"Ağ arayüzlerini yeniden başlatmak istiyor musunuz?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Sanatçı:"
+msgid "Artist"
+msgstr "Sanatçı"
 
 msgid "Ask before shutdown:"
 msgstr "Kapatmadan önce sor:"
@@ -483,10 +470,10 @@ msgid "Background"
 msgstr "Arkaplan"
 
 msgid "Backup"
-msgstr "Yedek Al"
+msgstr "Yedek al"
 
 msgid "Backup Location"
-msgstr "Yedeğin Yükleneceği Hedef Konum"
+msgstr "Yedeğin yükleneceği hedef konum"
 
 msgid "Backup Mode"
 msgstr "Yedeklenecek klasör"
@@ -504,10 +491,10 @@ msgid "Begin time"
 msgstr "Başlangıç"
 
 msgid "Behavior of 'pause' when paused"
-msgstr "Duraklama modunda 'duraklat' tuşuna basıldığında"
+msgstr "Duraklama kipinde 'duraklat' tuşuna basıldığında"
 
 msgid "Behavior of 0 key in PiP-mode"
-msgstr "PiP modunda 0 tuşuna basıldığında"
+msgstr "PiP kipinde 0 tuşuna basıldığında"
 
 msgid "Behavior when a movie is started"
 msgstr "Film başlatıldığı zaman"
@@ -539,7 +526,7 @@ msgstr "Yol:"
 msgid ""
 "By pressing the OK Button on your remote control, the info bar is being "
 "displayed."
-msgstr "Kumandanın OK tuşuna basıldığı zaman, Bilgi Çubuğunu göster"
+msgstr "OK tuşuna basıldığı zaman bilgi çubuğu gösterilsin mi?"
 
 msgid "C"
 msgstr "C"
@@ -581,7 +568,7 @@ msgid "Change bouquets in quickzap"
 msgstr "Kanal değiştirirken buketler arası geçişe izin ver"
 
 msgid "Change dir."
-msgstr "Klasör değiştir."
+msgstr "Klasör değiştir"
 
 msgid "Change pin code"
 msgstr "Şifre değiştir"
@@ -601,6 +588,9 @@ msgstr "Kanal"
 msgid "Channel Selection"
 msgstr "Kanal Seçimi"
 
+msgid "Channel not in services list"
+msgstr "Kanal, kanal listesinde mevcut değil"
+
 msgid "Channel:"
 msgstr "Kanal:"
 
@@ -671,7 +661,7 @@ msgid "Color Format"
 msgstr "Renk Biçimi"
 
 msgid "Command execution..."
-msgstr "Komut yürütülüyor..."
+msgstr "Komut çalıştırılıyor..."
 
 msgid "Command order"
 msgstr "Emir sıralaması"
@@ -689,13 +679,13 @@ msgid "Compact flash card"
 msgstr "Compact flash kartı"
 
 msgid "Complete"
-msgstr "Tamamlandı"
+msgstr "Tamamı"
 
 msgid "Complex (allows mixing audio tracks and aspects)"
 msgstr "Kompleks (karışık ses izlerine ve açılara izin verir)"
 
 msgid "Configuration Mode"
-msgstr "Konfigürasyon modu"
+msgstr "Konfigürasyon kipi"
 
 msgid "Configuring"
 msgstr "Ayarlanıyor"
@@ -737,9 +727,6 @@ msgstr "Oynatmaya devam et"
 msgid "Contrast"
 msgstr "Kontrast"
 
-msgid "Copying USB flasher boot image to stick..."
-msgstr "Önyükleme yapabilir USB flaşlayıcı imajı belleğe kopyalanıyor..."
-
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
 msgstr "Dreambox .NFI imaj sunucusuna bağlanamıyor:"
 
@@ -816,10 +803,6 @@ msgstr "Danca"
 msgid "Date"
 msgstr "Tarih"
 
-msgid "Decompressing USB stick flasher boot image..."
-msgstr ""
-"Sıkıştırılmış önyükleme yapabilir USB bellek flaşlayıcı çıkartılıyor..."
-
 msgid "Deep Standby"
 msgstr "Derin Uyku"
 
@@ -856,10 +839,10 @@ msgid "Destination directory"
 msgstr "Hedef Klasör"
 
 msgid "Detected HDD:"
-msgstr "Tanımlanan HDD:"
+msgstr "Tanınan HDD:"
 
 msgid "Detected NIMs:"
-msgstr "Tanımlanan NIM:"
+msgstr "Tanınan NIM:"
 
 msgid "DiSEqC"
 msgstr "DiSEqC"
@@ -871,7 +854,7 @@ msgid "DiSEqC A/B/C/D"
 msgstr "DiSEqC A/B/C/D"
 
 msgid "DiSEqC mode"
-msgstr "DiSEqC modu"
+msgstr "DiSEqC kipi"
 
 msgid "DiSEqC repeats"
 msgstr "DiSEqC tekrarı"
@@ -896,7 +879,7 @@ msgid "Disable timer"
 msgstr "Zamanlayıcıyı Kapat"
 
 msgid "Disabled"
-msgstr "Kapat"
+msgstr "Devre dışı"
 
 #, python-format
 msgid ""
@@ -926,18 +909,18 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr ""
 " \"%s\" eklentisini KALDIRMAK\n"
-"istediğinizden emin misiniz?"
+"istiyor musunuz?"
 
 msgid ""
 "Do you really want to check the filesystem?\n"
 "This could take lots of time!"
 msgstr ""
-"Dosya sistemini kontrol etmek istediğinizden emin misiniz?\n"
+"Dosya sistemini kontrol etmek istiyor musunuz?\n"
 "Bu işlem çok uzun sürebilir!"
 
 #, python-format
 msgid "Do you really want to delete %s?"
-msgstr "%s 'i silmek istediğinizden emin misiniz?"
+msgstr "%s 'i silmek istiyor musunuz?"
 
 #, python-format
 msgid ""
@@ -945,7 +928,7 @@ msgid ""
 "the plugin \"%s\"?"
 msgstr ""
 "\"%s\" eklentisini indirmek\n"
-"istediğinizden emin misiniz?"
+"istiyor musunuz?"
 
 msgid ""
 "Do you really want to initialize the harddisk?\n"
@@ -956,21 +939,21 @@ msgstr ""
 
 #, python-format
 msgid "Do you really want to remove directory %s from the disk?"
-msgstr "%s klasörünü silmek istediğinizden emin misiniz?"
+msgstr "%s klasörünü silmek istiyor musunuz?"
 
 #, python-format
 msgid "Do you really want to remove your bookmark of %s?"
-msgstr "%s isimli yer imini silmek istediğinizden emin misiniz?"
+msgstr "%s isimli yer imini silmek istiyor musunuz?"
 
 msgid ""
 "Do you want to backup now?\n"
 "After pressing OK, please wait!"
 msgstr ""
-"Yedeklemeyi şimdi başlatmak istediğinizden emin misiniz?\n"
+"Yedeklemeyi şimdi başlatmak istiyor musunuz?\n"
 "Lütfen OK tuşuna bastıktan sonra bekleyiniz!"
 
 msgid "Do you want to burn this collection to DVD medium?"
-msgstr "Bu koleksiyonu DVD medyasına bazmak istiyor musunuz?"
+msgstr "Bu koleksiyonu DVD medyasına yazmak istiyor musunuz?"
 
 msgid "Do you want to do a service scan?"
 msgstr "Kanal araması yapmak ister misiniz?"
@@ -979,10 +962,10 @@ msgid "Do you want to do another manual service scan?"
 msgstr "Başka kanal araması yapacak mısınız?"
 
 msgid "Do you want to enable the parental control feature on your dreambox?"
-msgstr "Ebeveyn kontrolü özelliğini aktifleştirmek ister misiniz?"
+msgstr "Ebeveyn kontrolü özelliğini etkinleştirmek ister misiniz?"
 
 msgid "Do you want to install default sat lists?"
-msgstr "Varsayılan kanal listesi yüklemek istiyor musunuz?"
+msgstr "Varsayılan kanal listesini yüklemek ister misiniz?"
 
 msgid "Do you want to play DVD in drive?"
 msgstr "DVD'yi oynatmak istiyor musunuz?"
@@ -1001,7 +984,7 @@ msgid ""
 "After pressing OK, please wait!"
 msgstr ""
 "Dreambox'ı güncellemek istiyor musunuz?\n"
-"Lütfen OK a bastıktan sonra bekleyin!"
+"Lütfen OK'a bastıktan sonra bekleyin!"
 
 msgid "Do you want to view a tutorial?"
 msgstr "Cihaz kullanımını anlatan öğreticiyi görmek ister misiniz?"
@@ -1039,9 +1022,6 @@ msgstr "İndirilebilir eklentiler"
 msgid "Downloading"
 msgstr "İndiriliyor"
 
-msgid "Downloading image description..."
-msgstr "İmaj açıklaması indiriliyor..."
-
 msgid "Downloading plugin information. Please wait..."
 msgstr "Eklenti bilgisi indiriliyor. Lütfen bekleyin..."
 
@@ -1092,10 +1072,10 @@ msgid "Edit title"
 msgstr "Başlığı düzenle"
 
 msgid "Electronic Program Guide"
-msgstr "Elektronik Program Rehberi"
+msgstr "Elektronik Televizyon Rehberi"
 
 msgid "Enable"
-msgstr "Açık"
+msgstr "Etkinleştir"
 
 msgid "Enable 5V for active antenna"
 msgstr "aktif anten için 5V gerilimi etkinleştir"
@@ -1110,7 +1090,7 @@ msgid "Enable timer"
 msgstr "Zamanlayıcıyı aç"
 
 msgid "Enabled"
-msgstr "Açık"
+msgstr "Etkin"
 
 msgid "Encryption"
 msgstr "Şifreleme"
@@ -1124,14 +1104,11 @@ msgstr "Şifreleme anahtar tipi"
 msgid "Encryption Type"
 msgstr "Şifreleme Tipi"
 
-msgid "End"
-msgstr "Bitiş zamanı"
-
 msgid "End time"
 msgstr "Bitiş zamanı"
 
 msgid "EndTime"
-msgstr "Bitiş Saati"
+msgstr "Bitiş saati"
 
 msgid "English"
 msgstr "İngilizce"
@@ -1146,7 +1123,7 @@ msgid ""
 msgstr ""
 "Enigma2 Arayüz Seçici v0.5 BETA\n"
 "\n"
-"Herhangi bir hatayla karşılaştıysanız lüften\n"
+"Herhangi bir hatayla karşılaşırsanız lüften\n"
 "stephan@reichholf.net ile irtibata geçiniz\n"
 "\n"
 "© 2006 - Stephan Reichholf"
@@ -1169,10 +1146,10 @@ msgid "Enter WLAN passphrase/key:"
 msgstr "WLAN ön paylaşımlı anahtarı (passphrase/key) girin:"
 
 msgid "Enter main menu..."
-msgstr "Ana menüye gir..."
+msgstr "Ana menüyü göster..."
 
 msgid "Enter the service pin"
-msgstr "Kanal şifresi girin"
+msgstr "Kanal şifresini girin"
 
 msgid "Error"
 msgstr "Hata"
@@ -1200,6 +1177,9 @@ msgstr "Uygulama ilerliyor:"
 msgid "Execution finished!!"
 msgstr "Uygulama bitti!!"
 
+msgid "Exif"
+msgstr "Exif"
+
 msgid "Exit"
 msgstr "Çıkış"
 
@@ -1249,7 +1229,7 @@ msgid "Favourites"
 msgstr "Favoriler"
 
 msgid "Filesystem Check..."
-msgstr "Dosya sistemi Kontrolü..."
+msgstr "Dosya sistemi kontrolü..."
 
 msgid "Filesystem contains uncorrectable errors"
 msgstr "Dosya sistemi içeriğinde düzeltilemeyen hatalar var"
@@ -1258,7 +1238,7 @@ msgid "Finetune"
 msgstr "İnce ayar"
 
 msgid "Finished"
-msgstr "Bitmiş"
+msgstr "Tamamlanmış"
 
 msgid "Finished configuring your network"
 msgstr "Ağ yapılandırması tamamlandı."
@@ -1275,24 +1255,21 @@ msgstr ""
 "Öncelikle en güncel önyükleme yapabilir USB flaşlayıcı ortamının indirilmesi "
 "gerekiyor."
 
-msgid "Fix USB stick"
-msgstr "USB belleği onar"
-
 msgid "Flash"
 msgstr "Flaşa yaz"
 
 msgid "Flashing failed"
 msgstr "Flaşa yazma başarısız"
 
-msgid "Font size"
-msgstr "Yazıtipi boyutu"
-
 msgid "Format"
 msgstr "Biçimlendir"
 
 msgid "Frame repeat count during non-smooth winding"
 msgstr "Adım adım ilerletmede çerçeve tekrar sayısı "
 
+msgid "Frame size in full view"
+msgstr "Tam ekranda çerçeve boyutu"
+
 msgid "French"
 msgstr "Fransızca"
 
@@ -1314,6 +1291,9 @@ msgstr "Cuma"
 msgid "Friday"
 msgstr "Cuma"
 
+msgid "Frisian"
+msgstr "Frizyece"
+
 msgid "Fritz!Box FON IP address"
 msgstr "Fritz!Box FON IP adresi"
 
@@ -1331,14 +1311,14 @@ msgid ""
 "GUI needs a restart to apply a new skin\n"
 "Do you want to Restart the GUI now?"
 msgstr ""
-"Yeni arayüzü aktif hale getirmek için yeniden başlatma gerekiyor\n"
-"Grafik arayüzünü (GUI) yeniden başlatmak istediğinize emin misiniz?"
+"Yeni arayüzü etkinleştirmek için yeniden başlatma gerekiyor\n"
+"Grafik arayüzünü (GUI) yeniden başlatmak istiyor musunuz?"
 
 msgid "Gateway"
 msgstr "Ağ geçidi"
 
-msgid "Genre:"
-msgstr "Tür:"
+msgid "Genre"
+msgstr "Tür"
 
 msgid "German"
 msgstr "Almanca"
@@ -1353,10 +1333,10 @@ msgid "Goto position"
 msgstr "Pozisyona git"
 
 msgid "Graphical Multi EPG"
-msgstr "Grafik çoklu EPG"
+msgstr "Grafik arayüzlü çoklu EPG'yi göster"
 
 msgid "Greek"
-msgstr "Greek"
+msgstr "Yunanca"
 
 msgid "Guard Interval"
 msgstr "Koruma Süresi"
@@ -1371,7 +1351,7 @@ msgid "Harddisk setup"
 msgstr "Sabitdisk kurulumu"
 
 msgid "Harddisk standby after"
-msgstr "Belirtilen süre kullanılmadığında Sabitdiski uyku moduna al"
+msgstr "Kullanılmadığında sabit diski uyku kipine geçir"
 
 msgid "Hidden network SSID"
 msgstr "Gizlenmiş ağ SSID"
@@ -1380,7 +1360,7 @@ msgid "Hierarchy Information"
 msgstr "Hiyerarşi Bilgisi"
 
 msgid "Hierarchy mode"
-msgstr "Hiyerarşi modu"
+msgstr "Hiyerarşi kipi"
 
 msgid "How many minutes do you want to record?"
 msgstr "Kaç dakikalık kayıt başlatmak istiyorsunuz?"
@@ -1401,7 +1381,7 @@ msgid "Icelandic"
 msgstr "İzlandaca"
 
 msgid "If you can see this page, please press OK."
-msgstr "Bu sayfayı görebiliyorsanız, OK a basınız."
+msgstr "Bu sayfayı görebiliyorsanız, OK'a basınız."
 
 msgid ""
 "If you see this, something is wrong with\n"
@@ -1436,7 +1416,7 @@ msgid "Image flash utility"
 msgstr "İmaj flaş aracı"
 
 msgid "Image-Upgrade"
-msgstr "İmaj-Güncelle"
+msgstr "İmaj Güncelle"
 
 msgid "In Progress"
 msgstr "İlerliyor"
@@ -1454,10 +1434,10 @@ msgid "Index"
 msgstr "Dizin"
 
 msgid "InfoBar"
-msgstr "Bilgi Ã\87ubuğu"
+msgstr "Bilgi Ã§ubuğu"
 
 msgid "Infobar timeout"
-msgstr "Bilgi Ã\87ubuğu zaman aşımı süresi"
+msgstr "Bilgi Ã§ubuğu zaman aşımı süresi"
 
 msgid "Information"
 msgstr "Bilgi"
@@ -1472,7 +1452,7 @@ msgid "Initialize"
 msgstr "Sıfırla"
 
 msgid "Initializing Harddisk..."
-msgstr "Sabitdisk Sıfırlanıyor..."
+msgstr "Sabitdisk sıfırlanıyor..."
 
 msgid "Input"
 msgstr "Giriş"
@@ -1481,16 +1461,16 @@ msgid "Installing"
 msgstr "Kuruluyor"
 
 msgid "Installing Software..."
-msgstr "Yazılım Yükleniyor..."
+msgstr "Yazılım yükleniyor..."
 
 msgid "Installing default sat lists... Please wait..."
 msgstr "Varsayılan uydu listesi yükleniyor... Lütfen bekleyin..."
 
 msgid "Installing defaults... Please wait..."
-msgstr "Varsayılan bilgiler yükleniyor... Lütfen bekleyiniz..."
+msgstr "Varsayılan bilgiler yükleniyor... Lütfen bekleyin..."
 
 msgid "Installing package content... Please wait..."
-msgstr "Paket içeriği yükleniyor... Lütfen yükleyiniz..."
+msgstr "Paket içeriği yükleniyor... Lütfen bekleyin..."
 
 msgid "Instant Record..."
 msgstr "Anlık Kayıt..."
@@ -1615,8 +1595,11 @@ msgstr "Konum"
 msgid "Lock:"
 msgstr "Kilitli:"
 
+msgid "Log results to harddisk"
+msgstr "Sonuçlara ilişkin sabitdiskte günlük tut"
+
 msgid "Long Keypress"
-msgstr "Tuşa uzun basıldığında"
+msgstr "Tuşa uzun süre basıldığında"
 
 msgid "Longitude"
 msgstr "Boylam"
@@ -1672,11 +1655,14 @@ msgstr "Menü"
 msgid "Message"
 msgstr "Mesaj"
 
+msgid "Message..."
+msgstr "Mesaj..."
+
 msgid "Mkfs failed"
 msgstr "Mkfs (disk biçimlendirme) başarısız"
 
 msgid "Mode"
-msgstr "Mod"
+msgstr "Kip"
 
 msgid "Model: "
 msgstr "Model: "
@@ -1762,7 +1748,7 @@ msgid "Network Configuration..."
 msgstr "Ağ Yapılandırması..."
 
 msgid "Network Mount"
-msgstr "Ağ Bağla"
+msgstr "Ağ Depolama Aygıtı Bağla"
 
 msgid "Network SSID"
 msgstr "Ağ SSID"
@@ -1777,7 +1763,7 @@ msgid "Network setup"
 msgstr "Ağ kurulumu"
 
 msgid "Network test"
-msgstr "Ağ testi"
+msgstr "Ağ yapılandırmasını test et"
 
 msgid "Network test..."
 msgstr "Ağ testi..."
@@ -1852,6 +1838,9 @@ msgstr "Pozisyoner uyumlu uç ekipman bulunamadı."
 msgid "No satellite frontend found!!"
 msgstr "Uydu uç ekipmanı (frontend) bulunamadı!!"
 
+msgid "No tags are set on these movies."
+msgstr "Bu filmler için etiket tanımlanmamış"
+
 msgid "No tuner is configured for use with a diseqc positioner!"
 msgstr "DiSEqC pozisyoner kullanımı için tuner ayarı yapılmamış."
 
@@ -1859,7 +1848,7 @@ msgid ""
 "No tuner is enabled!\n"
 "Please setup your tuner settings before you start a service scan."
 msgstr ""
-"Tuner tanımı yapılmamış!\n"
+"Tuner ayarları yapılmamış!\n"
 "Lütfen kanal aramasına başlamadan önce tuner ayarlarınızı yapınız."
 
 msgid "No useable USB stick found"
@@ -1898,7 +1887,7 @@ msgid ""
 "network is configured correctly."
 msgstr ""
 "Çalışan kablosuz ağ donanımı bulunamadı.\n"
-" Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ "
+"Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ "
 "yapılandırmanızı doğru yaptığınızdan emin olun."
 
 msgid ""
@@ -1920,7 +1909,7 @@ msgid "No, just start my dreambox"
 msgstr "Hayır, Dreambox'ımı şimdi başlat"
 
 msgid "No, scan later manually"
-msgstr "Hayır, daha sonra elle tara"
+msgstr "Hayır, taramayı daha sonra elle yapacağım"
 
 msgid "None"
 msgstr "Yok"
@@ -1953,14 +1942,6 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Oynatılıyor"
 
-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 ""
-"Lütfen şimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB bellek "
-"takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuşuna basın."
-
 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 "
@@ -1992,7 +1973,7 @@ msgid "One"
 msgstr "Bir"
 
 msgid "Online-Upgrade"
-msgstr "Online-Güncelle"
+msgstr "Çevrimiçi Güncelle"
 
 msgid "Only Free scan"
 msgstr "Yalnızca şifresiz"
@@ -2000,9 +1981,6 @@ msgstr "Yalnızca şifresiz"
 msgid "Orbital Position"
 msgstr "Yörüngesel (orbital) Pozisyon"
 
-msgid "Other..."
-msgstr "Diğer..."
-
 msgid "PAL"
 msgstr "PAL"
 
@@ -2037,15 +2015,15 @@ msgstr "Ebeveyn kontrolü kurulumu"
 msgid "Parental control type"
 msgstr "Ebeveyn kontrolü tipi"
 
-msgid "Partitioning USB stick..."
-msgstr "USB bellek bölümlendiriliyor..."
-
 msgid "Pause movie at end"
 msgstr "Bittiğinde filmi duraklat"
 
 msgid "PiPSetup"
 msgstr "PiP Kurulumu"
 
+msgid "PicturePlayer"
+msgstr "Resim Oynatıcı"
+
 #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
@@ -2063,7 +2041,7 @@ msgid "Play Audio-CD..."
 msgstr "Ses CD'si (Audio CD) oynat..."
 
 msgid "Play recorded movies..."
-msgstr "Kayıtlı fimleri oynat..."
+msgstr "Kayıtlı video dosyalarını göster..."
 
 msgid "Please Reboot"
 msgstr "Lütfen yeniden başlatın"
@@ -2089,29 +2067,36 @@ msgstr "Lütfen paket seçin..."
 msgid "Please choose the default services lists you want to install."
 msgstr "Lütfen yüklemek istediğiniz varsayılan kanal listesini seçin."
 
+msgid ""
+"Please disconnect all USB devices from your Dreambox and (re-)attach the "
+"target USB stick (minimum size is 64 MB) now!"
+msgstr ""
+"Lütfen tüm USB aygıtlarını Dreambox'ınızdan çıkarın ve işlem yapmak "
+"istediğiniz USB belleği (min. 64MB kapasiteli) tekrar takın!"
+
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Lütfen ne yaptığınızı bilmiyorsanız hiçbir değeri değiştirmeyin!"
 
 msgid "Please enter a name for the new bouquet"
-msgstr "Yeni buket için isim giriniz"
+msgstr "Yeni buket için isim girin"
 
 msgid "Please enter a name for the new marker"
-msgstr "Yeni işaretleyici için isim giriniz"
+msgstr "Yeni işaretleyici için isim girin"
 
 msgid "Please enter a new filename"
 msgstr "Lütfen yeni dosya adını girin"
 
 msgid "Please enter filename (empty = use current date)"
-msgstr "Lütfen dosya adı giriniz (boş = geçerli tarih)"
+msgstr "Lütfen dosya adı girin (boş = geçerli tarih)"
 
 msgid "Please enter name of the new directory"
-msgstr "Lütfen klasör için bir ad giriniz"
+msgstr "Lütfen klasör için bir isim girin"
 
 msgid "Please enter the correct pin code"
-msgstr "Lütfen doğru şifreyi giriniz"
+msgstr "Lütfen doğru şifreyi girin"
 
 msgid "Please enter the old pin code"
-msgstr "Lütfen eski şifreyi giriniz"
+msgstr "Lütfen eski şifreyi girin"
 
 msgid "Please follow the instructions on the TV"
 msgstr "Lütfen Televizyonunuzdaki yönlendirmeleri takip edin."
@@ -2119,15 +2104,13 @@ msgstr "Lütfen Televizyonunuzdaki yönlendirmeleri takip edin."
 msgid ""
 "Please note that the previously selected media could not be accessed and "
 "therefore the default directory is being used instead."
-msgstr ""
-"Seçtiğiniz medyaya erişilemedi, bu yüzden yerine varsayılan klasör "
-"kullanılıyor."
+msgstr "Seçtiğiniz medyaya erişilemedi, yerine varsayılan klasör kullanılıyor."
 
 msgid "Please press OK to continue."
 msgstr "Devam etmek için lütfen OK'a basın"
 
 msgid "Please press OK!"
-msgstr "Lütfen OK! e basın"
+msgstr "Lütfen OK'a basın!"
 
 msgid "Please select .NFI flash image file from medium"
 msgstr "Lütfen DVD/CD medyasından, istediğiniz .NFI imajını seçin"
@@ -2139,13 +2122,13 @@ msgid "Please select a playlist..."
 msgstr "Lütfen bir oynatma listesi seçin..."
 
 msgid "Please select a subservice to record..."
-msgstr "Lütfen kaydedilmesini istediğiniz alt servisi seçin..."
+msgstr "Lütfen kaydetmek istediğiniz alt servisi seçin..."
 
 msgid "Please select a subservice..."
 msgstr "Lütfen bir alt servis seçin..."
 
-msgid "Please select keyword to filter..."
-msgstr "Lütfen filtre için anahtar kelime girin..."
+msgid "Please select tag to filter..."
+msgstr "Lütfen filtreleme için etiket seçin ..."
 
 msgid "Please select target directory or medium"
 msgstr "Lütfen hedef klasörü veya medyayı seçin"
@@ -2169,7 +2152,7 @@ msgid ""
 msgstr ""
 "Lütfen yönlendirme tuşlarını kullanarak PiP ekranını taşıyın.\n"
 "PiP penceresini boyutlandırmak için Buket +/- tuşlarını kullanın.\n"
-"TV moduna dönmek için OK'a veya taşımayı iptal etmek için EXIT tuşuna basın."
+"TV kipine dönmek için OK'a veya taşımayı iptal etmek için EXIT tuşuna basın."
 
 msgid ""
 "Please use the UP and DOWN keys to select your language. Afterwards press "
@@ -2179,13 +2162,13 @@ msgstr ""
 "tuşunu kullanın."
 
 msgid "Please wait for activation of your network configuration..."
-msgstr "Ağ yapılandırmanızın aktifleştirmesi için lütfen bekleyin..."
+msgstr "Ağ yapılandırmanızın etkinleştirilmesi için lütfen bekleyin..."
 
-msgid "Please wait for md5 signature verification..."
-msgstr "md5 imza doğrulamasının yapılabilmesi için lütfen bekleyin..."
+msgid "Please wait while scanning is in progress..."
+msgstr "Lütfen arama yapılırken bekleyin..."
 
 msgid "Please wait while we configure your network..."
-msgstr "Lütfen ağ yapılandırılırken bekleyin..."
+msgstr "Lütfen ağınız yapılandırılırken bekleyin..."
 
 msgid "Please wait while your network is restarting..."
 msgstr "Lütfen ağ yeniden başlatılırken bekleyin..."
@@ -2194,7 +2177,7 @@ msgid "Please wait..."
 msgstr "Lütfen bekleyin..."
 
 msgid "Please wait... Loading list..."
-msgstr "Lütfen bekleyiniz... Liste yükleniyor..."
+msgstr "Lütfen bekleyin... Liste yükleniyor..."
 
 msgid "Plugin browser"
 msgstr "Eklenti listesi"
@@ -2209,7 +2192,7 @@ msgid "Polarization"
 msgstr "Polarizasyon"
 
 msgid "Polish"
-msgstr "Polish"
+msgstr "Lehçe"
 
 msgid "Port A"
 msgstr "Port A"
@@ -2259,11 +2242,15 @@ msgstr "Ayarlarınızı etkinleştirmek için OK'a basın."
 msgid "Press OK to edit the settings."
 msgstr "Yapılandırma ayarlarınızı düzenlemek için OK tuşuna basın."
 
+#, python-format
+msgid "Press OK to get further details for %s"
+msgstr "%s detayları için OK tuşuna basın"
+
 msgid "Press OK to scan"
-msgstr "Tarama için OK'a basın"
+msgstr "Arama için OK'a basın"
 
 msgid "Press OK to start the scan"
-msgstr "Taramayı başlatmak için OK'a basın"
+msgstr "Aramayı başlatmak için OK'a basın"
 
 msgid "Prev"
 msgstr "Önceki"
@@ -2274,6 +2261,9 @@ msgstr "Önizleme menüsü"
 msgid "Primary DNS"
 msgstr "Birincil DNS"
 
+msgid "Priority"
+msgstr "Öncelik"
+
 msgid "Properties of current title"
 msgstr "Geçerli başlığın özellikleri"
 
@@ -2290,7 +2280,10 @@ msgid "Provider to scan"
 msgstr "Yayıncıya göre ara"
 
 msgid "Providers"
-msgstr "Sağlayıcılar"
+msgstr "Yayıncılar"
+
+msgid "Quick"
+msgstr "Hızlı"
 
 msgid "Quickzap"
 msgstr "Hızlızap"
@@ -2305,38 +2298,37 @@ msgid "RGB"
 msgstr "RGB"
 
 msgid "RSS Feed URI"
-msgstr "RSS Beslemesi Adresi"
+msgstr "RSS Besleme Adresi"
 
 msgid "Radio"
-msgstr "raydo"
+msgstr "Raydo"
 
 msgid "Ram Disk"
 msgstr "Ram Disk"
 
+msgid "Random"
+msgstr "Rastgele"
+
 msgid "Really close without saving settings?"
-msgstr "Ayarları kaydetmeden çıkmak istediğinizden emin misiniz?"
+msgstr "Ayarları kaydetmeden çıkmak istiyor musunuz?"
 
 msgid "Really delete done timers?"
-msgstr ""
-"Tamamlanan zamanlayıcıları silmek istediğinizden gerçekten emin misiniz?"
-
-msgid "Really delete this timer?"
-msgstr "Bu zamanlayıcıyı silmek istediğinizden gerçekten emin misiniz?"
+msgstr "Tamamlanan zamanlayıcıları silmek istiyor musunuz?"
 
 msgid "Really exit the subservices quickzap?"
 msgstr "Alt servis hızlı geçişinden çıkmak istiyor musunuz?"
 
 msgid "Really reboot now?"
-msgstr "Yeniden başlatılmasını istiyor musunuz?"
+msgstr "Yeniden başlatmak istiyor musunuz?"
 
 msgid "Really restart now?"
 msgstr "Yeniden başlatmak istiyor musunuz?"
 
 msgid "Really shutdown now?"
-msgstr "Şimdi yeniden açmak istediğinize emin misiniz?"
+msgstr "Dreambox'ı şimdi kapatmak istiyor musunuz?"
 
 msgid "Reboot"
-msgstr "Yeniden "
+msgstr "Yeniden başlat"
 
 msgid "Reception Settings"
 msgstr "Ekipman Ayarları"
@@ -2360,16 +2352,13 @@ msgid "Reenter new pin"
 msgstr "Yeni şifreyi tekrar girin"
 
 msgid "Refresh Rate"
-msgstr "Yenileme Hızı"
+msgstr "Tazeleme Hızı"
 
 msgid "Refresh rate selection."
 msgstr "Tazeleme hızı seçimi."
 
-msgid "Remounting stick partition..."
-msgstr "USB bellek bölümlendirmesi (partition) yeniden yapılandırılıyor..."
-
 msgid "Remove Bookmark"
-msgstr "Yer imini Sil"
+msgstr "Yer imini sil"
 
 msgid "Remove Plugins"
 msgstr "Eklenti Kaldır"
@@ -2389,6 +2378,9 @@ msgstr "Bozuk .NFI dosyası silinsin mi?"
 msgid "Remove the incomplete .NFI file?"
 msgstr "Eksik .NFI dosyası silinsin mi?"
 
+msgid "Remove timer"
+msgstr "Zamanl. kaldır"
+
 msgid "Remove title"
 msgstr "Başlığı sil"
 
@@ -2446,8 +2438,8 @@ msgid ""
 "Restoring the settings is done. Please press OK to activate the restored "
 "settings now."
 msgstr ""
-"Ayarların geri yüklemesi tamamlandı. Geri yüklenen ayarları aktif hale "
-"getirmek için OK tuşuna basınız."
+"Ayarların geri yüklemesi tamamlandı. Geri yüklenen ayarların "
+"etkinleştirilmesi için OK tuşuna basın."
 
 msgid "Resume from last position"
 msgstr "Kaldığı yerden devam et"
@@ -2514,7 +2506,7 @@ msgid "Satellites"
 msgstr "Uydular"
 
 msgid "Satfinder"
-msgstr "Uydu bulucu"
+msgstr "Uydu arayıcı"
 
 msgid "Sats"
 msgstr "Uydular"
@@ -2526,13 +2518,13 @@ msgid "Save"
 msgstr "Kaydet"
 
 msgid "Save Playlist"
-msgstr "Oynatma listesini Kaydet"
+msgstr "Oynatma listesini kaydet"
 
 msgid "Scaling Mode"
-msgstr "Ölçeklendirme Modu"
+msgstr "Ölçeklendirme Kipi"
 
 msgid "Scan "
-msgstr "Ara"
+msgstr "Ara : "
 
 msgid "Scan QAM128"
 msgstr "QAM128'i ara"
@@ -2652,7 +2644,7 @@ msgid "Select video input"
 msgstr "Görüntü girişini seç"
 
 msgid "Select video mode"
-msgstr "Görüntü modunu seç"
+msgstr "Görüntü kipini seç"
 
 msgid "Selected source image"
 msgstr "Seçilen kaynak imaj"
@@ -2679,7 +2671,7 @@ msgid "Service Searching"
 msgstr "Uydu Yapılandırma"
 
 msgid "Service has been added to the favourites."
-msgstr "Kanal favorilerinize eklendi."
+msgstr "Kanal favorilere eklendi."
 
 msgid "Service has been added to the selected bouquet."
 msgstr "Kanal seçilen bukete eklendi."
@@ -2689,7 +2681,7 @@ msgid ""
 "(Timeout reading PMT)"
 msgstr ""
 "Kanal geçersiz!\n"
-"(PMT okumasında zaman aşımı oldu)"
+"(PMT okumasında zaman aşımı oluştu)"
 
 msgid ""
 "Service not found!\n"
@@ -2718,7 +2710,7 @@ msgid "Set Voltage and 22KHz"
 msgstr "Voltaj ve 22KHz ayarla"
 
 msgid "Set as default Interface"
-msgstr "Varsayılan arayüz olarak ayarla"
+msgstr "Varsayılan arayüz olarak ata"
 
 msgid "Set interface as default Interface"
 msgstr "Arayüzü varsayılan arayüz olarak ata"
@@ -2727,13 +2719,13 @@ msgid "Set limits"
 msgstr "Limitleri belirle"
 
 msgid "Settings"
-msgstr "Ayarları"
+msgstr "Ayarlar"
 
 msgid "Setup"
 msgstr "Kurulum"
 
 msgid "Setup Mode"
-msgstr "Kurulum Modu"
+msgstr "Kurulum Kipi"
 
 msgid "Show Info"
 msgstr "Bilgiyi Göster"
@@ -2742,7 +2734,7 @@ msgid "Show WLAN Status"
 msgstr "WLAN Durumunu Göster"
 
 msgid "Show blinking clock in display during recording"
-msgstr "Ekran üzerindeki saat, kayıt esnasında yanıp sönsün"
+msgstr "OLED üzerindeki saat, kayıt esnasında yanıp sönsün"
 
 msgid "Show infobar on channel change"
 msgstr "Kanal değiştirildiğinde bilgi çubuğunu göster"
@@ -2757,19 +2749,19 @@ msgid "Show positioner movement"
 msgstr "Pozisyoner haraketini göster"
 
 msgid "Show services beginning with"
-msgstr "Cihaz açılırken bu kanalla başla"
+msgstr "Kanalları harf sırasına göre göster"
 
 msgid "Show the radio player..."
-msgstr "Radyo oynatıcıyı göster..."
+msgstr "Radyo kanal listesini göster..."
 
 msgid "Show the tv player..."
-msgstr "TV oynatıcıyı göster..."
+msgstr "TV kanal listesini göster..."
 
 msgid "Shows the state of your wireless LAN connection.\n"
 msgstr "Kablosuz ağ bağlantısı durumunu gösterir.\n"
 
 msgid "Shutdown Dreambox after"
-msgstr "sonrasında Dreambox'ı kapat."
+msgstr "Zamanlayıcı süresi: "
 
 msgid "Similar"
 msgstr "Benzer"
@@ -2818,10 +2810,10 @@ msgid "Slow"
 msgstr "Yavaş"
 
 msgid "Slow Motion speeds"
-msgstr "AÄ\9fır Ã\87ekim hızları"
+msgstr "AÄ\9fır Ã§ekim hızları"
 
 msgid "Some plugins are not available:\n"
-msgstr "Eklentilerin bazıları kullanılamaz:\n"
+msgstr "Bazı eklentiler kullanılamaz:\n"
 
 msgid "Somewhere else"
 msgstr "Başka bir yere"
@@ -2837,11 +2829,11 @@ msgstr ""
 
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort A-Z"
-msgstr "A-Z ye Sırala"
+msgstr "A-Z ye"
 
 #. TRANSLATORS: This must fit into the header button in the EPG-List
 msgid "Sort Time"
-msgstr "Zamana göre sırala"
+msgstr "Zamana göre"
 
 msgid "Sound"
 msgstr "Ses"
@@ -2856,14 +2848,11 @@ msgid "Spanish"
 msgstr "İspanyolca"
 
 msgid "Standby"
-msgstr "Uyku modu"
+msgstr "Uyku kipi"
 
 msgid "Standby / Restart"
 msgstr "Kapatma Menüsü"
 
-msgid "Start"
-msgstr "Başlama zamanı"
-
 msgid "Start from the beginning"
 msgstr "En baştan başla"
 
@@ -2871,10 +2860,10 @@ msgid "Start recording?"
 msgstr "Kayıt başlatılsın mı?"
 
 msgid "Start test"
-msgstr "Testi başlat"
+msgstr "Test'i başlat"
 
 msgid "StartTime"
-msgstr "Başlama Saati"
+msgstr "Başlama saati"
 
 msgid "Starting on"
 msgstr "Başlangıç"
@@ -2886,19 +2875,19 @@ msgid "Step west"
 msgstr "Batı adımı"
 
 msgid "Stereo"
-msgstr "Stereo"
+msgstr "Steryo"
 
 msgid "Stop"
 msgstr "Durdur"
 
 msgid "Stop Timeshift?"
-msgstr "Zaman bükmeyi (timeshift) durdur?"
+msgstr "Zaman bükücü durdurulsun mu?"
 
 msgid "Stop current event and disable coming events"
-msgstr "Geçerli ve gelecek zamanlanmış eylemleri devre dışı bırak"
+msgstr "Geçerli eylemi durdur ve gelecek eylemleri devre dışı bırak"
 
 msgid "Stop current event but not coming events"
-msgstr "Geçerli zamanlanmış eylemi devre dışı bırak, sonrakilere dokunma"
+msgstr "Geçerli eylemi durdur ama gelecek eylemlere dokunma"
 
 msgid "Stop playing this movie?"
 msgstr "Filmi durdurmak istiyor musunuz?"
@@ -2906,6 +2895,12 @@ msgstr "Filmi durdurmak istiyor musunuz?"
 msgid "Stop test"
 msgstr "Testi durdur"
 
+msgid "Stop testing plane after # failed transponders"
+msgstr "Hatalı transponder sayısına ulaşıldığında bitir"
+
+msgid "Stop testing plane after # successful transponders"
+msgstr "Başarılı transponder sayısına ulaşıldığında bitir"
+
 msgid "Store position"
 msgstr "Pozisyonu kaydet"
 
@@ -2962,16 +2957,31 @@ msgid "TV System"
 msgstr "TV Sistemi"
 
 msgid "Table of content for collection"
-msgstr "Kolleksiyonun içerik listesi (TOC)"
+msgstr "Kolleksiyonun içerik listesi tablosu (TOC)"
+
+msgid "Tag 1"
+msgstr "Etiket 1"
+
+msgid "Tag 2"
+msgstr "Etiket 2"
+
+msgid "Tags"
+msgstr "Etiketler"
 
 msgid "Terrestrial"
 msgstr "Karasal"
 
 msgid "Terrestrial provider"
-msgstr "Karasal servis sağlayıcı"
+msgstr "Karasal servis yayınlayıcı"
+
+msgid "Test DiSEqC settings"
+msgstr "DiSEqC ayarlarınızı test edin"
+
+msgid "Test Type"
+msgstr "Test tipi"
 
 msgid "Test mode"
-msgstr "Test modu"
+msgstr "Test kipi"
 
 msgid "Test the network configuration of your Dreambox.\n"
 msgstr "Dreambox'ınızın ağ yapılandırmasını test edin.\n"
@@ -2987,17 +2997,6 @@ msgstr ""
 "hazır.\n"
 "Dreambox'ınızı kullanmaya başlamak için OK tuşuna basın."
 
-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 ""
-".NFI İmaj flaşlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj dosyasını "
-"sunucudan çekin ve belleğe kaydedin. Ardından önyüklemenin USB bellekten "
-"yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan 'Down' tuşuna "
-"basılı tutun!"
-
 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 "
@@ -3007,6 +3006,13 @@ msgstr ""
 "Dreambox'ın DVD biçiminde (standart DVD oynatıcılarda oynatamazsınız) "
 "oluşturmak ister misiniz?"
 
+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 ""
+"USB bellek artık önyükleme yapabilir. Yayınlanan son imajı sunucudan "
+"indirmek ve usb belleğe kaydetmek istiyor musunuz?"
+
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Yedek alınamadı. Lütfen başka bir yedekleme konumu seçin."
 
@@ -3055,8 +3061,7 @@ msgid ""
 "The md5sum validation failed, the file may be downloaded incompletely or be "
 "corrupted!"
 msgstr ""
-"md5sum imza doğrulama başarısız, dosya tam indirilmemiş olabilir veya bozuk "
-"olabilir!"
+"md5sum imza doğrulama başarısız, dosya tam indirilememiş veya bozuk olabilir!"
 
 msgid "The package doesn't contain anything."
 msgstr "Bu paket herhangi birşey içermiyor."
@@ -3074,8 +3079,12 @@ msgstr "Girdiğiniz şifre yanlış."
 msgid "The pin codes you entered are different."
 msgstr "Girdiğiniz şifreler birbiriyle uyuşmuyor."
 
+#, python-format
+msgid "The results have been written to %s."
+msgstr "Test sonuçları %s dosyasına yazıldı."
+
 msgid "The sleep timer has been activated."
-msgstr "Uyku zamanlayıcı aktif edildi."
+msgstr "Uyku zamanlayıcı etkinleştirildi."
 
 msgid "The sleep timer has been disabled."
 msgstr "Uyku zamanlayıcı kapatıldı."
@@ -3093,7 +3102,7 @@ msgstr ""
 msgid ""
 "The wizard can backup your current settings. Do you want to do a backup now?"
 msgstr ""
-"Bu sihirbaz geçerli ayarlarınızın yedeğini alacaktır. Şimdi yedek almak "
+"Bu sihirbaz geçerli ayarlarınızın yedeğini alacaktır. Yedeği şimdi almak "
 "istiyor musunuz?"
 
 msgid "The wizard is finished now."
@@ -3110,11 +3119,11 @@ msgid ""
 "Do you really want to continue?"
 msgstr ""
 "Seçtiğiniz disk bölümü (partition) yeterli boş alana sahip olmayabilir.\n"
-"Devam etmek istediğinizden emin misiniz?"
+"Devam etmek istiyor musunuz?"
 
 #, python-format
 msgid "This .NFI file does not contain a valid %s image!"
-msgstr ".NFI dosyası geçeli bir %s imaj içermiyor!"
+msgstr ".NFI dosyası geçeli bir %s imajı içermiyor!"
 
 msgid ""
 "This .NFI file does not have a md5sum signature and is not guaranteed to "
@@ -3134,8 +3143,8 @@ msgid ""
 "This DVD RW medium is already formatted - reformatting will erase all "
 "content on the disc."
 msgstr ""
-"DVD-RW medyası biçimlendirildi - yeniden biçimlendirme tüm disk içeriğini "
-"silecektir."
+"DVD-RW medyası zaten biçimlendirilmiş - yeniden biçimlendirme tüm disk "
+"içeriğini silecektir."
 
 #, python-format
 msgid "This Dreambox can't decode %s video streams!"
@@ -3215,6 +3224,9 @@ msgstr "Eşik"
 msgid "Thu"
 msgstr "Perş"
 
+msgid "Thumbnails"
+msgstr "Küçük resimler"
+
 msgid "Thursday"
 msgstr "Perşembe"
 
@@ -3259,13 +3271,16 @@ msgid "Timer status:"
 msgstr "Zamanlayıcı durumu:"
 
 msgid "Timeshift"
-msgstr "Zamanı bük (Timeshift)"
+msgstr "Zamanı bük"
 
 msgid "Timeshift not possible!"
-msgstr "Zaman bükme kullanılamaz!"
+msgstr "Zaman bükücü kullanılamaz!"
+
+msgid "Timeshift path..."
+msgstr "Zaman bükücü yol adı..."
 
 msgid "Timezone"
-msgstr "Zaman dilimi"
+msgstr "Zaman bölgesi"
 
 msgid "Title"
 msgstr "Başlık"
@@ -3273,19 +3288,25 @@ msgstr "Başlık"
 msgid "Title properties"
 msgstr "Başlık özellikleri"
 
-msgid "Title:"
-msgstr "Başlık:"
-
 msgid "Titleset mode"
 msgstr "Başlıkseti kipi"
 
 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 ""
-"Bunu yapmak istediğinizden eminseniz, lütfen hedef USB çubuğu yerinden "
-"çıkarın ve istenildiğinde tekrar takın. USB çubuğu çıkardıysanız lütfen OK "
-"tuşuna basın."
+"Lütfen Dreambox sistem yazılımını güncellemek için, aşağıdaki adımları takip "
+"edin:\n"
+"1) Dreambox'ınızı, arkasındaki kapama anahtarından kapayın ve önyükleme "
+"yapabilir USB belleği takın.\n"
+"2) Ön panelde yer alan AŞAĞI tuşuna basın ve cihazı tekrar açın. 10 saniye "
+"boyunca AŞAĞI tuşunu bırakmayın.\n"
+"3) Önyüklemenin yapılmasını bekleyin ve sihirbazın yapacağı yönlendirmeleri "
+"takip edin."
 
 msgid "Today"
 msgstr "Bugün"
@@ -3341,7 +3362,7 @@ msgid "Tune"
 msgstr "Ayar"
 
 msgid "Tune failed!"
-msgstr "Kanal geçişi başarısız! (Tune failed!)"
+msgstr "Kanal geçişi başarısız!"
 
 msgid "Tuner"
 msgstr "Tuner"
@@ -3376,13 +3397,16 @@ msgstr "USB"
 msgid "USB Stick"
 msgstr "USB Bellek"
 
+msgid "USB stick wizard"
+msgstr "USB bellek sihirbazı"
+
 msgid "Ukrainian"
-msgstr ""
+msgstr "Ukraynaca"
 
 msgid ""
 "Unable to complete filesystem check.\n"
 "Error: "
-msgstr "Dosya sistemi kontrolü bitirilemedi"
+msgstr "Dosya sistemi kontrolü tamamlanamadı"
 
 msgid ""
 "Unable to initialize harddisk.\n"
@@ -3424,7 +3448,7 @@ msgid "Upgrading Dreambox... Please wait"
 msgstr "Dreambox güncelleniyor... Lütfen bekleyin"
 
 msgid "Use"
-msgstr ""
+msgstr "Kullan"
 
 msgid "Use DHCP"
 msgstr "DHCP Kullan"
@@ -3472,7 +3496,7 @@ msgid ""
 "Use the up/down keys on your remote control to select an option. After that, "
 "press OK."
 msgstr ""
-"Seçiminizi yapmak için kumandanızın yukarı/aşağı tuşlarını, onaylamak için "
+"Seçiminizi yapmak için kumandanızın yukarı/aşağı tuşlarını, onaylamak için "
 "OK tuşunu kullanın."
 
 msgid "Use usals for this sat"
@@ -3524,19 +3548,19 @@ msgstr ""
 "Sonraki giriş otomatik olarak 10 saniye sonra test edilecektir."
 
 msgid "Video mode selection."
-msgstr "Görüntü modu seçimi."
+msgstr "Görüntü kipi seçimi."
 
 msgid "View Rass interactive..."
 msgstr "Etkileşimli Rass'ı (Radio acoustic sounding system) göster"
 
 msgid "View teletext..."
-msgstr "Teletekse bak..."
+msgstr "Teleteksi aç..."
 
 msgid "Virtual KeyBoard"
 msgstr "Sanal Klavye"
 
 msgid "Voltage mode"
-msgstr "Voltaj modu"
+msgstr "Voltaj kipi"
 
 msgid "Volume"
 msgstr "Ses"
@@ -3562,9 +3586,6 @@ msgstr "WSS 4:3"
 msgid "Waiting"
 msgstr "Bekleniyor"
 
-msgid "Waiting for USB stick to settle..."
-msgstr "USB çubuğun takılması bekleniyor..."
-
 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"
@@ -3633,6 +3654,9 @@ msgstr "Neleri aramak istiyorsunuz?"
 msgid "Where do you want to backup your settings?"
 msgstr "Ayarlarınızın yedeğini nereye almak istiyorsunuz?"
 
+msgid "Where to save temporary timeshift recordings?"
+msgstr "Geçici zaman bükücü kayıtları nereye yapılsın?"
+
 msgid "Wireless"
 msgstr "Kablosuz"
 
@@ -3648,14 +3672,11 @@ msgstr "Yazma başarısız!"
 msgid "Writing NFI image file to flash completed"
 msgstr "NFI imajının flaşa yazımı tamamlandı"
 
-msgid "Writing image file to NAND Flash"
-msgstr "İmaj, NAND Flaşa yazılıyor"
-
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Yıl:"
+msgid "Year"
+msgstr "Yıl"
 
 msgid "Yes"
 msgstr "Evet"
@@ -3685,7 +3706,7 @@ msgid "Yes, returning to movie list"
 msgstr "Evet, film listesine dön"
 
 msgid "Yes, view the tutorial"
-msgstr "Evet, eğiticiyi göster"
+msgstr "Evet, öğreticiyi göster"
 
 msgid ""
 "You can choose some default settings now. Please select the settings you "
@@ -3770,19 +3791,10 @@ msgid ""
 msgstr ""
 "Dreambox'ınızın PC bağlantısına ihtiyacı var. Eğer daha fazla açıklamaya "
 "ihtiyacınız varsa, lütfen http://www.dm7025.de adresini ziyaret edin.\n"
-"Şimdi Dreambox'ınız kapatlıyor. Web sitesinde belirtilen güncelleme "
+"Şimdi Dreambox'ınız kapatılıyor. Web sitesinde belirtilen güncelleme "
 "talimatlarını yerine getirdikten sonra, yeni cihaz yazılımı ayarlarınızı "
 "geri yüklemek isteyip istemediğiniz sorusunu soracaktır."
 
-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 ""
-"Öncelikle bazı anahtar kelimeler girmeniz gerekiyor!\n"
-"Menü tuşuna basın ve anahtar kelimeyi tanımlayın.\n"
-"Anahtar kelimeyi şimdi tanımlamak ister misiniz??"
-
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
 "\n"
@@ -3832,7 +3844,7 @@ msgstr ""
 "Ağ yapılandırmanız etkinleştirildi.\n"
 "Yapılandırılmış ikinci bir arayüz bulundu.\n"
 "\n"
-"İkinci ağ arayüzünü devre dışı bırakmak istiyor musunuz?"
+"İkinci ağ arayüzünü devre dışı bırakmak istiyor musunuz?"
 
 msgid "Zap back to service before positioner setup?"
 msgstr ""
@@ -3853,7 +3865,7 @@ msgid "[favourite edit]"
 msgstr "[favori düzenle]"
 
 msgid "[move mode]"
-msgstr "[taşıma modu]"
+msgstr "[taşıma kipi]"
 
 msgid "abort alternatives edit"
 msgstr "alternatif düzenlemekten vazgeç"
@@ -3868,7 +3880,7 @@ msgid "about to start"
 msgstr "başlamak üzere"
 
 msgid "activate current configuration"
-msgstr "geçerli yapılandırmayı aktif et"
+msgstr "geçerli yapılandırmayı etkinleştir"
 
 msgid "add a nameserver entry"
 msgstr "isim sunucu kaydı ekle"
@@ -3939,25 +3951,34 @@ msgstr "(%s) ses izi dili"
 msgid "audio tracks"
 msgstr "ses izleri"
 
+msgid "auto"
+msgstr "otomatik"
+
 msgid "back"
 msgstr "geri"
 
 msgid "background image"
-msgstr "arkaplan tesmi"
+msgstr "arkaplan resmi"
+
+msgid "backgroundcolor"
+msgstr "zemin rengi"
 
 msgid "better"
 msgstr "daha iyi"
 
+msgid "black"
+msgstr "siyah"
+
 msgid "blacklist"
 msgstr "kara liste"
 
+msgid "blue"
+msgstr "mavi"
+
 #, python-format
 msgid "burn audio track (%s)"
 msgstr "(%s) ses izini yaz"
 
-msgid "by Exif"
-msgstr "Exif'ten al"
-
 msgid "change recording (duration)"
 msgstr "kaydı değiştir (süre)"
 
@@ -3979,9 +4000,6 @@ msgstr "dairesel sağa"
 msgid "clear playlist"
 msgstr "oynatma listesini temizle"
 
-msgid "color"
-msgstr "renk"
-
 msgid "complex"
 msgstr "karmaşık (kompleks)"
 
@@ -3998,7 +4016,7 @@ msgid "continue"
 msgstr "devam et"
 
 msgid "copy to bouquets"
-msgstr "buketleri kopyala"
+msgstr "buketlere kopyala"
 
 msgid "create directory"
 msgstr "klasör oluştur"
@@ -4013,7 +4031,7 @@ msgid "delete cut"
 msgstr "kesimi sil"
 
 msgid "delete file"
-msgstr ""
+msgstr "dosya sil"
 
 msgid "delete playlist entry"
 msgstr "seçilen oynatma listesini sil"
@@ -4028,7 +4046,7 @@ msgid "disable"
 msgstr "devre dışı"
 
 msgid "disable move mode"
-msgstr "taşıma modunu kapat"
+msgstr "taşıma kipini kapat"
 
 msgid "disabled"
 msgstr "devre dışı"
@@ -4055,7 +4073,7 @@ msgid "empty"
 msgstr "boş"
 
 msgid "enable"
-msgstr "etkin"
+msgstr "etkinleştir"
 
 msgid "enable bouquet edit"
 msgstr "buket düzenlemeyi aç"
@@ -4064,10 +4082,10 @@ msgid "enable favourite edit"
 msgstr "favori düzenlemeyi aç"
 
 msgid "enable move mode"
-msgstr "taşıma modunu aç"
+msgstr "taşıma kipini aç"
 
 msgid "enabled"
-msgstr "açık"
+msgstr "etkin"
 
 msgid "end alternatives edit"
 msgstr "alternatif düzenlemeyi bitir"
@@ -4117,15 +4135,15 @@ msgstr "ağ donanımı kurulum menüsünden çık"
 msgid "failed"
 msgstr "başarısız"
 
+msgid "fileformats (BMP, PNG, JPG, GIF)"
+msgstr "dosya biçimi (BMP, PNG, JPG, GIF)"
+
 msgid "filename"
 msgstr "dosyaadı"
 
 msgid "fine-tune your display"
 msgstr "ekran ince ayarı"
 
-msgid "font face"
-msgstr "font tipi"
-
 msgid "forward to the next chapter"
 msgstr "sonraki bölüme ilerle"
 
@@ -4136,16 +4154,16 @@ msgid "free diskspace"
 msgstr "boş disk alanı"
 
 msgid "go to deep standby"
-msgstr "derin uyku moduna git"
+msgstr "derin uyku kipine geç"
 
 msgid "go to standby"
-msgstr "uyku moduna git"
+msgstr "uyku kipine geç"
 
-msgid "headline"
-msgstr "başlık"
+msgid "green"
+msgstr "yeşil"
 
 msgid "hear radio..."
-msgstr "radyo dinle..."
+msgstr "Radyo dinle..."
 
 msgid "help..."
 msgstr "yardım..."
@@ -4159,9 +4177,6 @@ msgstr "genişletilmiş açıklamayı gizle"
 msgid "hide player"
 msgstr "oynatıcıyı gizle"
 
-msgid "highlighted button"
-msgstr "belirtilmiş tuş"
-
 msgid "horizontal"
 msgstr "yatay (h)"
 
@@ -4246,7 +4261,7 @@ msgid "menulist"
 msgstr "menü listesi"
 
 msgid "mins"
-msgstr "dk"
+msgstr "dk."
 
 msgid "minute"
 msgstr "dakika"
@@ -4282,10 +4297,10 @@ msgid "never"
 msgstr "hiç"
 
 msgid "next channel"
-msgstr "sonraki kanal"
+msgstr "Sonraki kanal"
 
 msgid "next channel in history"
-msgstr "hafızadaki sonraki kanal"
+msgstr "Hafızadaki sonraki kanal"
 
 msgid "no"
 msgstr "hayır"
@@ -4293,14 +4308,11 @@ msgstr "hayır"
 msgid "no HDD found"
 msgstr "HDD bulunamadı"
 
-msgid "no Picture found"
-msgstr "Resim/fotoğraf bulunamadı"
-
 msgid "no module found"
 msgstr "modül bulunamadı"
 
 msgid "no standby"
-msgstr "uyku moduna geçilmesin"
+msgstr "uyku kipine geçilmesin"
 
 msgid "no timeout"
 msgstr "zaman aşımı kullanılmasın"
@@ -4318,7 +4330,7 @@ msgid "of a DUAL layer medium used."
 msgstr "ÇİFT katmanlı medya kullanıldığında."
 
 msgid "of a SINGLE layer medium used."
-msgstr "TEK katmanlı medya kullanıldığında"
+msgstr "TEK katmanlı medya kullanıldığında."
 
 msgid "off"
 msgstr "kapalı"
@@ -4336,16 +4348,16 @@ msgid "open nameserver configuration"
 msgstr "isim sunucu yapılandırmasını aç"
 
 msgid "open servicelist"
-msgstr "kanal listesini aç"
+msgstr "Kanal listesini aç"
 
 msgid "open servicelist(down)"
-msgstr "kanal listesini aç (aşağı)"
+msgstr "Kanal listesini aç (aşağı)"
 
 msgid "open servicelist(up)"
-msgstr "kanal listesini aç (yukarı)"
+msgstr "Kanal listesini aç (yukarı)"
 
 msgid "open virtual keyboard input help"
-msgstr "sanal klayve girişi yardımını aç"
+msgstr "sanal klayve girişi yardımcısını aç"
 
 msgid "pass"
 msgstr "geç"
@@ -4357,25 +4369,22 @@ msgid "play entry"
 msgstr "seçimi oynat"
 
 msgid "play from next mark or playlist entry"
-msgstr "sonraki işaretten veya oynatma listesinden oynat"
+msgstr "sonraki işareti veya oynatma listesi seçimini oynat"
 
 msgid "play from previous mark or playlist entry"
-msgstr "önceki işaretten veya oynatma listesinden oynat"
+msgstr "önceki işareti veya oynatma listesi seçimini oynat"
 
 msgid "please press OK when ready"
-msgstr "Lütfen hazır olduğunuzda OK' a basın"
+msgstr "Lütfen hazır olduğunuzda OK'a basın"
 
 msgid "please wait, loading picture..."
 msgstr "resim/fotoğraf yükleniyor, lütfen bekleyiniz..."
 
 msgid "previous channel"
-msgstr "Ãnceki kanal"
+msgstr "Ã\96nceki kanal"
 
 msgid "previous channel in history"
-msgstr "hafızadaki önceki kanal"
-
-msgid "rebooting..."
-msgstr "yeniden başlatılıyor..."
+msgstr "Hafızadaki önceki kanal"
 
 msgid "record"
 msgstr "kayıt"
@@ -4383,14 +4392,17 @@ msgstr "kayıt"
 msgid "recording..."
 msgstr "kaydediliyor..."
 
+msgid "red"
+msgstr "kırmızı"
+
 msgid "remove a nameserver entry"
-msgstr "isim sunucusu kaydı silin"
+msgstr "isim sunucu kaydını silin"
 
 msgid "remove after this position"
 msgstr "bu noktadan sonrasını kaldır"
 
 msgid "remove all alternatives"
-msgstr "tüm alternatifleri kaldır"
+msgstr "alternatiflerin tümünü kaldır"
 
 msgid "remove all new found flags"
 msgstr "yeni bulundu bayraklarının tümünü kaldır"
@@ -4432,13 +4444,13 @@ msgid "right"
 msgstr "sağ"
 
 msgid "save last directory on exit"
-msgstr ""
+msgstr "çıkarken, son klasörü kaydet"
 
 msgid "save playlist"
 msgstr "oynatma listesini kaydet"
 
 msgid "save playlist on exit"
-msgstr ""
+msgstr "çıkarken, oynatma listesini kaydet"
 
 msgid "scan done!"
 msgstr "arama tamamlandı!"
@@ -4490,7 +4502,10 @@ msgid "show DVD main menu"
 msgstr "DVD ana menüsünü göster"
 
 msgid "show EPG..."
-msgstr "EPG yi göster..."
+msgstr "EPG program detayını göster..."
+
+msgid "show Infoline"
+msgstr "Bilgi satırını göster"
 
 msgid "show all"
 msgstr "tümünü göster"
@@ -4504,17 +4519,17 @@ msgstr "EPG detaylarını göster"
 msgid "show extended description"
 msgstr "genişletilmiş açıklamayı göster"
 
-msgid "show first tag"
-msgstr "ilk etiketi göster"
+msgid "show first selected tag"
+msgstr "seçili ilk etiketi göster"
 
-msgid "show second tag"
-msgstr "saniye etiketini göster"
+msgid "show second selected tag"
+msgstr "seçili ikinci etiketi göster"
 
 msgid "show shutdown menu"
 msgstr "kapatma menüsünü göster"
 
 msgid "show single service EPG..."
-msgstr "tek kanal EPG bilgisini göster..."
+msgstr "Kanal EPG'sini göster..."
 
 msgid "show tag menu"
 msgstr "etiket menüsünü göster"
@@ -4523,7 +4538,7 @@ msgid "show transponder info"
 msgstr "transponder bilgisini göster"
 
 msgid "shuffle playlist"
-msgstr "Rastgele oynat"
+msgstr "oynatma listesini karıştır"
 
 msgid "shutdown"
 msgstr "kapat"
@@ -4532,40 +4547,40 @@ msgid "simple"
 msgstr "basit"
 
 msgid "skip backward"
-msgstr "Ãnceki kanala atla"
+msgstr "Ã\96nceki kanala atla"
 
 msgid "skip backward (enter time)"
-msgstr "önceki kanala atla (zaman girin)"
+msgstr "Ã\96nceki kanala atla (kaç kez?)"
 
 msgid "skip forward"
-msgstr "sonraki kanala atla"
+msgstr "Sonraki kanala atla"
 
 msgid "skip forward (enter time)"
-msgstr "sonraki kanala atla (zaman girin)"
+msgstr "Sonraki kanala atla (kaç kez?)"
+
+msgid "slide picture in loop"
+msgstr "slayt görüntüsünü döndür"
 
 msgid "sort by date"
 msgstr "tarihe göre sırala"
 
-msgid "spaces (top, between rows, left)"
-msgstr "boşluklar (üst, satır arası, sol)"
-
 msgid "standard"
 msgstr "standart"
 
 msgid "standby"
-msgstr "uyku modu"
+msgstr "uyku kipi"
 
 msgid "start cut here"
 msgstr "buradan kes"
 
 msgid "start directory"
-msgstr ""
+msgstr "başlangıç klasörü"
 
 msgid "start timeshift"
-msgstr "zaman bükmeyi başlat"
+msgstr "Zaman bükücüyü başlat"
 
 msgid "stereo"
-msgstr "stereo"
+msgstr "steryo"
 
 msgid "stop PiP"
 msgstr "PiP'i durdur"
@@ -4574,10 +4589,10 @@ msgid "stop entry"
 msgstr "seçileni durdur"
 
 msgid "stop recording"
-msgstr "kaydır durdur"
+msgstr "kaydı durdur"
 
 msgid "stop timeshift"
-msgstr "zaman bükmeyi durdur"
+msgstr "Zaman bükücüyü durdur"
 
 msgid "swap PiP and main picture"
 msgstr "PiP ile ana ekranın yerlerini değiştir"
@@ -4591,14 +4606,20 @@ msgstr "dosya listesine geç"
 msgid "switch to playlist"
 msgstr "oynatma listesine geç"
 
+msgid "switch to the next angle"
+msgstr ""
+
 msgid "switch to the next audio track"
 msgstr "sonraki ses izini seç"
 
 msgid "switch to the next subtitle language"
 msgstr "sonraki alt yazı dilini seç"
 
-msgid "text"
-msgstr "metin"
+msgid "template file"
+msgstr "taslak dosya"
+
+msgid "textcolor"
+msgstr "metin rengi"
 
 msgid "this recording"
 msgstr "bu kaydın"
@@ -4607,7 +4628,7 @@ msgid "this service is protected by a parental control pin"
 msgstr "bu kanal ebeveyn kontrol şifresiyle korunuyor"
 
 msgid "toggle a cut mark at the current position"
-msgstr "geçerli pozisyondaki kesme işaretini ekle/kaldır"
+msgstr "geçerli pozisyona kesme işareti ekle/kaldır"
 
 msgid "toggle time, chapter, audio, subtitle info"
 msgstr "zaman, bölüm, ses, altyazı bilgisini aç/kapa"
@@ -4631,7 +4652,7 @@ msgid "view extensions..."
 msgstr "eklentileri gör..."
 
 msgid "view recordings..."
-msgstr "kaydedilen dosyaları göster..."
+msgstr "Kaydedilmiş dosyaları göster..."
 
 msgid "wait for ci..."
 msgstr "ci bekleniyor..."
@@ -4648,8 +4669,11 @@ msgstr "haftalık"
 msgid "whitelist"
 msgstr "beyaz liste"
 
-msgid "year"
-msgstr "yıl"
+msgid "working"
+msgstr "çalışıyor"
+
+msgid "yellow"
+msgstr "sarı"
 
 msgid "yes"
 msgstr "evet"
@@ -4665,7 +4689,7 @@ msgstr ""
 "açmadan önce kullanım kılavuzundan yardım alın."
 
 msgid "zap"
-msgstr "kanal değiştir"
+msgstr "değiştir"
 
 msgid "zapped"
 msgstr "kanal değiştirildi"
@@ -4680,6 +4704,25 @@ msgstr "kanal değiştirildi"
 #~ msgid "\"?"
 #~ msgstr "\"?"
 
+#~ msgid ".NFI Flasher bootable USB stick successfully created."
+#~ msgstr ""
+#~ "USB bellek için önyükleme yapabilir .NFI Flaşlayıcı başarıyla oluşturuldu."
+
+#~ msgid "AGC"
+#~ msgstr "AGC"
+
+#~ msgid "AGC:"
+#~ msgstr "AGC:"
+
+#~ msgid "Album:"
+#~ msgstr "Albüm:"
+
+#~ msgid "All keys"
+#~ msgstr "Tüm anahtarlar"
+
+#~ msgid "All..."
+#~ msgstr "Tümü..."
+
 #~ msgid ""
 #~ "Are you sure you want to enable WLAN support?\n"
 #~ "Connect your Wlan USB Stick to your Dreambox and press OK.\n"
@@ -4696,6 +4739,9 @@ msgstr "kanal değiştirildi"
 #~ "Yerel ağı aktif etmek istediğinizden emin msiiniz?\n"
 #~ "\n"
 
+#~ msgid "Artist:"
+#~ msgstr "Sanatçı:"
+
 #~ msgid "Automatic SSID lookup"
 #~ msgstr "Otomatik SSID arama"
 
@@ -4720,6 +4766,9 @@ msgstr "kanal değiştirildi"
 #~ msgid "Connect to the Internet with your local LAN"
 #~ msgstr "Internete yerel ağ donanımı ile bağlanın"
 
+#~ msgid "Copying USB flasher boot image to stick..."
+#~ msgstr "Önyükleme yapabilir USB flaşlayıcı imajı belleğe kopyalanıyor..."
+
 #~ msgid "DVD ENTER key"
 #~ msgstr "DVD ENTER tuşu"
 
@@ -4735,6 +4784,10 @@ msgstr "kanal değiştirildi"
 #~ msgid "DVD up key"
 #~ msgstr "DVD yukarı"
 
+#~ msgid "Decompressing USB stick flasher boot image..."
+#~ msgstr ""
+#~ "Sıkıştırılmış önyükleme yapabilir USB bellek flaşlayıcı çıkartılıyor..."
+
 #~ msgid "DiSEqC Mode"
 #~ msgstr "DiSEqC Modu"
 
@@ -4755,6 +4808,9 @@ msgstr "kanal değiştirildi"
 #~ msgid "Do you really want to exit?"
 #~ msgstr "Çıkmak istediğinizden emin misiniz?"
 
+#~ msgid "Downloading image description..."
+#~ msgstr "İmaj açıklaması indiriliyor..."
+
 #~ msgid "Enable LAN"
 #~ msgstr "LAN'ı Aç"
 
@@ -4768,12 +4824,27 @@ msgstr "kanal değiştirildi"
 #~ "Dreambox'un yerel ağ bağlantısını aç.\n"
 #~ "\n"
 
+#~ msgid "End"
+#~ msgstr "Bitiş zamanı"
+
 #~ msgid "Enter WLAN networkname/SSID:"
 #~ msgstr "Kablosuz (WLAN) ağ adı/SSID girin:"
 
 #~ msgid "Exit wizard and configure later manually"
 #~ msgstr "Sihirbazdan çık ve ayarları daha sonra elle yap"
 
+#~ msgid "Filename and path"
+#~ msgstr "Dosya ve yol adı"
+
+#~ msgid "Fix USB stick"
+#~ msgstr "USB belleği onar"
+
+#~ msgid "Font size"
+#~ msgstr "Yazıtipi boyutu"
+
+#~ msgid "Genre:"
+#~ msgstr "Tür:"
+
 #~ msgid ""
 #~ "No working local networkadapter found.\n"
 #~ "Please verify that you have attached a network cable and your Network is "
@@ -4822,6 +4893,21 @@ msgstr "kanal değiştirildi"
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Hayır, öntanımlı listeleri seçmeme izin ver"
 
+#~ 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 ""
+#~ "Lütfen şimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB "
+#~ "bellek takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuşuna "
+#~ "basın."
+
+#~ msgid "Other..."
+#~ msgstr "Diğer..."
+
+#~ msgid "Partitioning USB stick..."
+#~ msgstr "USB bellek bölümlendiriliyor..."
+
 #~ 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 "
@@ -4850,6 +4936,12 @@ msgstr "kanal değiştirildi"
 #~ msgid "Please select below the wireless network you want to connect to."
 #~ msgstr "Lütfen bağlanmak istediğiniz kablosuz ağı seçin."
 
+#~ msgid "Please select keyword to filter..."
+#~ msgstr "Lütfen filtre için anahtar kelime girin..."
+
+#~ msgid "Please wait for md5 signature verification..."
+#~ msgstr "md5 imza doğrulamasının yapılabilmesi için lütfen bekleyin..."
+
 #~ 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 "
@@ -4863,6 +4955,9 @@ msgstr "kanal değiştirildi"
 #~ "desteklenmektedir.\n"
 #~ "OK'a basmadan önce WLAN USB donanımınızı Dreambox'ınıza takın.\n"
 
+#~ msgid "Really delete this timer?"
+#~ msgstr "Bu zamanlayıcıyı silmek istediğinizden emin misiniz?"
+
 #~ msgid ""
 #~ "Recording(s) are in progress or coming up in few seconds... really reboot "
 #~ "now?"
@@ -4883,9 +4978,21 @@ msgstr "kanal değiştirildi"
 #~ msgstr ""
 #~ "KAYIT işlemi devam ediyor. Cihazı kapatmak istediğinizden emin misiniz?"
 
+#~ msgid "Remounting stick partition..."
+#~ msgstr "USB bellek bölümlendirmesi (partition) yeniden yapılandırılıyor..."
+
 #~ msgid "Restart your wireless interface"
 #~ msgstr "Kablosuz arabirimini yeniden başlat"
 
+#~ msgid "Search"
+#~ msgstr "Ara"
+
+#~ msgid "Search for"
+#~ msgstr "için Ara"
+
+#~ msgid "Start"
+#~ msgstr "Başlama zamanı"
+
 #~ msgid "Step "
 #~ msgstr "Adım"
 
@@ -4933,6 +5040,32 @@ msgstr "kanal değiştirildi"
 #~ "hazır.\n"
 #~ "Dreambox'ınızı kullanmak için OK tuşuna basın."
 
+#~ 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 ""
+#~ ".NFI İmaj flaşlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj "
+#~ "dosyasını sunucudan çekin ve belleğe kaydedin. Ardından önyüklemenin USB "
+#~ "bellekten yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan "
+#~ "'Down' tuşuna basılı tutun!"
+
+#~ msgid "Title:"
+#~ msgstr "Başlık:"
+
+#~ 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."
+#~ msgstr ""
+#~ "Bunu yapmak istediğinizden eminseniz, lütfen hedef USB çubuğu yerinden "
+#~ "çıkarın ve istenildiğinde tekrar takın. USB çubuğu çıkardıysanız lütfen "
+#~ "OK tuşuna basın."
+
+#~ msgid "Waiting for USB stick to settle..."
+#~ msgstr "USB çubuğun takılması bekleniyor..."
+
 #~ msgid ""
 #~ "Welcome.\n"
 #~ "\n"
@@ -4948,6 +5081,21 @@ msgstr "kanal değiştirildi"
 #~ "\n"
 #~ "Kumandanızın OK tuşuna basarak sonraki adıma geçebilirsiniz."
 
+#~ msgid "Writing image file to NAND Flash"
+#~ msgstr "İmaj, NAND Flaşa yazılıyor"
+
+#~ msgid "Year:"
+#~ msgstr "Yıl:"
+
+#~ 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 ""
+#~ "Öncelikle bazı anahtar kelimeler girmeniz gerekiyor!\n"
+#~ "Menü tuşuna basın ve anahtar kelimeyi tanımlayın.\n"
+#~ "Anahtar kelimeyi şimdi tanımlamak ister misiniz??"
+
 #~ msgid ""
 #~ "Your local LAN internet connection is not working!\n"
 #~ "Please choose what you want to do next."
@@ -4985,21 +5133,45 @@ msgstr "kanal değiştirildi"
 #~ "Kablosuz internet bağlantınız çalışmıyor!\n"
 #~ "Lütfen sonraki adımda ne yapmak istediğinizi seçiniz."
 
+#~ msgid "by Exif"
+#~ msgstr "Exif'ten al"
+
+#~ msgid "color"
+#~ msgstr "renk"
+
 #~ msgid "delete"
 #~ msgstr "sil"
 
 #~ msgid "equal to Socket A"
 #~ msgstr "Soket A'ya eşit"
 
+#~ msgid "font face"
+#~ msgstr "font tipi"
+
 #~ msgid "full /etc directory"
 #~ msgstr "/etc klasörünün tamamı"
 
+#~ msgid "headline"
+#~ msgstr "başlık"
+
+#~ msgid "highlighted button"
+#~ msgstr "belirtilmiş tuş"
+
+#~ msgid "in..."
+#~ msgstr "içinde..."
+
 #~ msgid "minutes and"
 #~ msgstr "dakika ve"
 
+#~ msgid "no Picture found"
+#~ msgstr "Resim/fotoğraf bulunamadı"
+
 #~ msgid "only /etc/enigma2 directory"
 #~ msgstr "yalnızca /etc/enigma2 klasörü"
 
+#~ msgid "rebooting..."
+#~ msgstr "yeniden başlatılıyor..."
+
 #~ msgid "scan done! %d services found!"
 #~ msgstr "kanal araması tamamlandı! %d kanal bulundu!"
 
@@ -5014,3 +5186,18 @@ msgstr "kanal değiştirildi"
 
 #~ msgid "seconds."
 #~ msgstr "saniye."
+
+#~ msgid "show first tag"
+#~ msgstr "ilk etiketi göster"
+
+#~ msgid "show second tag"
+#~ msgstr "saniye etiketini göster"
+
+#~ msgid "spaces (top, between rows, left)"
+#~ msgstr "boşluklar (üst, satır arası, sol)"
+
+#~ msgid "text"
+#~ msgstr "metin"
+
+#~ msgid "year"
+#~ msgstr "yıl"
index 34a2998b7fd65091b802fae08f83a67d087a9c0e..91b29842e8c8c9cefe464d8fb12387d0bf1a9bb2 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -377,8 +377,8 @@ msgstr ""
 "Після завершення роботи помічника Ви можете встановити обмеження на деякі "
 "сервіси. Як це зробити, Ви можете прочитати в інструкції. "
 
-msgid "Album:"
-msgstr "Альбом:"
+msgid "Album"
+msgstr "Альбом"
 
 msgid "All"
 msgstr "Всі канали"
@@ -419,8 +419,8 @@ msgstr ""
 "Ви впевнені, що хочете перезавантажити мережеві інтерфейси?\n"
 "\n"
 
-msgid "Artist:"
-msgstr "Артист:"
+msgid "Artist"
+msgstr "Артист"
 
 msgid "Ask before shutdown:"
 msgstr "Запитувати перед вимкненням:"
@@ -1327,8 +1327,8 @@ msgstr ""
 msgid "Gateway"
 msgstr "Шлюз"
 
-msgid "Genre:"
-msgstr "Жанр:"
+msgid "Genre"
+msgstr "Жанр"
 
 msgid "German"
 msgstr "Німецька"
@@ -3230,9 +3230,6 @@ msgstr "Епізод"
 msgid "Title properties"
 msgstr ""
 
-msgid "Title:"
-msgstr "Заголовок:"
-
 msgid "Titleset mode"
 msgstr ""
 
@@ -3602,8 +3599,8 @@ msgstr ""
 msgid "YPbPr"
 msgstr "YPbPr"
 
-msgid "Year:"
-msgstr "Рік:"
+msgid "Year"
+msgstr "Рік"
 
 msgid "Yes"
 msgstr "Так"
@@ -4588,9 +4585,6 @@ msgstr "щотижня"
 msgid "whitelist"
 msgstr "білий список"
 
-msgid "year"
-msgstr "рік"
-
 msgid "yes"
 msgstr "Так"
 
diff --git a/skin.py b/skin.py
index 97954715c4d94f6a1f765cfb4ec708f8aa88f8d0..011110a293300b6f2c20d20d43b392fedb19c651 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -31,7 +31,7 @@ class SkinError(Exception):
                self.message = message
 
        def __str__(self):
-               return self.message
+               return "{%s}: %s" % (config.skin.primary_skin, self.message)
 
 dom_skins = [ ]
 
@@ -145,9 +145,13 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1)
                                }[value])
                elif attrib == "orientation": # used by eSlider
                        try:
-                               guiObject.setOrientation(
-                                       { "orVertical": guiObject.orVertical,
-                                               "orHorizontal": guiObject.orHorizontal
+                               guiObject.setOrientation(*
+                                       { "orVertical": (guiObject.orVertical, False),
+                                               "orTopToBottom": (guiObject.orVertical, False),
+                                               "orBottomToTop": (guiObject.orVertical, True),
+                                               "orHorizontal": (guiObject.orHorizontal, False),
+                                               "orLeftToRight": (guiObject.orHorizontal, False),
+                                               "orRightToLeft": (guiObject.orHorizontal, True),
                                        }[value])
                        except KeyError:
                                print "oprientation must be either orVertical or orHorizontal!"
@@ -270,7 +274,7 @@ def loadSingleSkinData(desktop, skin, path_prefix):
                                colorNames[name] = parseColor(color)
                                #print "Color:", name, color
                        else:
-                               raise ("need color and name, got %s %s" % (name, color))
+                               raise SkinError("need color and name, got %s %s" % (name, color))
 
        for c in skin.findall("fonts"):
                for font in c.findall("font"):
@@ -331,7 +335,7 @@ def loadSingleSkinData(desktop, skin, path_prefix):
                        try:
                                style.setColor(eWindowStyleSkinned.__dict__["col" + type], color)
                        except:
-                               raise ("Unknown color %s" % (type))
+                               raise SkinError("Unknown color %s" % (type))
                                #pass
 
                        #print "  color:", type, color
index 565a838bdbb68b17d38ea19396dd3b4605c7f608..ea8b0bdbfeef40282f707a2d3784020e3ed9cda7 100644 (file)
@@ -24,10 +24,10 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length =
 
 
        # generate a timer to test
-       import xml.dom.minidom
+       import xml.etree.cElementTree
        import RecordTimer
 
-       timer = RecordTimer.createTimer(xml.dom.minidom.parseString(
+       timer = RecordTimer.createTimer(xml.etree.cElementTree.fromstring(
        """
                <timer 
                        begin="%d" 
@@ -41,7 +41,7 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length =
                        disabled="0" 
                        justplay="0">
        </timer>""" % (at + timer_start, at + timer_start + timer_length, repeat)
-       ).childNodes[0])
+       ))
 
        t.record(timer)