Merge branch 'master' into experimental
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 16 Nov 2009 10:06:21 +0000 (11:06 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Mon, 16 Nov 2009 10:06:21 +0000 (11:06 +0100)
49 files changed:
RecordTimer.py
data/menu.xml
data/skin_default.xml
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/dvb.cpp
lib/dvb/pvrparse.cpp
lib/dvb/tstools.cpp
lib/python/Components/ChoiceList.py [changed mode: 0644->0755]
lib/python/Components/ConfigList.py [changed mode: 0644->0755]
lib/python/Components/EpgList.py [changed mode: 0644->0755]
lib/python/Components/FileList.py
lib/python/Components/Harddisk.py
lib/python/Components/MediaPlayer.py [changed mode: 0644->0755]
lib/python/Components/NimManager.py
lib/python/Components/ParentalControl.py [changed mode: 0644->0755]
lib/python/Components/SelectionList.py [changed mode: 0644->0755]
lib/python/Components/ServiceList.py [changed mode: 0644->0755]
lib/python/Components/TimerList.py [changed mode: 0644->0755]
lib/python/Components/UsageConfig.py
lib/python/Components/config.py
lib/python/Plugins/Extensions/CutListEditor/plugin.py
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py [changed mode: 0644->0755]
lib/python/Plugins/Extensions/MediaPlayer/plugin.py [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
lib/python/Screens/EpgSelection.py
lib/python/Screens/EventView.py
lib/python/Screens/InfoBar.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/LanguageSelection.py [changed mode: 0644->0755]
lib/python/Screens/LocationBox.py
lib/python/Screens/Makefile.am
lib/python/Screens/MovieSelection.py
lib/python/Screens/NetworkSetup.py
lib/python/Screens/RdsDisplay.py [changed mode: 0644->0755]
lib/python/Screens/RecordPaths.py [new file with mode: 0644]
lib/python/Screens/TimerEdit.py
lib/python/Screens/TimerEntry.py
lib/python/Screens/VirtualKeyBoard.py
lib/python/Screens/Wizard.py
lib/python/Tools/Directories.py
lib/service/servicemp3.cpp
lib/service/servicemp3.h
mytest.py
po/Makefile.am
po/de.po [changed mode: 0755->0644]
po/sr.po
skin.py [changed mode: 0644->0755]

index 4907f64e75a80d05635a91b5b71c28c9ede2ac56..f670417a5eddca05f8322c01b3b60c88bb372141 100644 (file)
@@ -2,6 +2,7 @@ from enigma import eEPGCache, getBestPlayableServiceReference, \
        eServiceReference, iRecordableService, quitMainloop
 
 from Components.config import config
+from Components.UsageConfig import defaultMoviePath
 from Components.TimerSanityCheck import TimerSanityCheck
 
 from Screens.MessageBox import MessageBox
@@ -141,11 +142,13 @@ class RecordTimerEntry(timer.TimerEntry, object):
                if config.recording.ascii_filenames.value:
                        filename = ASCIItranslit.legacyEncode(filename)
 
-               if self.dirname and not Directories.fileExists(self.dirname, 'w'):
-                       self.dirnameHadToFallback = True
-                       self.Filename = Directories.getRecordingFilename(filename, None)
+               if not self.dirname or not Directories.fileExists(self.dirname, 'w'):
+                       if self.dirname:
+                               self.dirnameHadToFallback = True
+                       dirname = defaultMoviePath()
                else:
-                       self.Filename = Directories.getRecordingFilename(filename, self.dirname)
+                       dirname = self.dirname
+               self.Filename = Directories.getRecordingFilename(filename, dirname)
                self.log(0, "Filename calculated as: '%s'" % self.Filename)
                #begin_date + " - " + service_name + description)
 
index c7fb8897eb03d0a55fde27560fbad6a383b31e7a..403e0b81bab8d5909a9b256eea7850b5a52335d3 100644 (file)
@@ -70,7 +70,7 @@
                                        <item level="1" text="Device Setup..." entryID="device_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection"/></item>
                                        <item level="1" text="Nameserver Setup..." entryID="dns_setup"><screen module="NetworkSetup" screen="NameserverSetup"/></item>
                                </menu>-->
-                               <item level="2" text="Timeshift path..." entryId="timeshift_path"><screen module="LocationBox" screen="TimeshiftLocationBox" /></item>
+                               <item level="2" text="Recording paths..." entryId="RecordPaths"><screen module="RecordPaths" screen="RecordPathsSettings" /></item>
                        </menu>
                        <item weight="10" level="1" text="Common Interface" entryID="ci_setup" requires="CommonInterface"><screen module="Ci" screen="CiSelection" /></item>
                        <item weight="15" level="0" text="Parental control" entryID="parental_setup"><screen module="ParentalControlSetup" screen="ParentalControlSetup" /></item>
index 16504abf6d4e4a81fe455f7f4df4d258fab505c7..649cedaf0ad52f14ce288f89bc20f694ede2b278 100755 (executable)
@@ -43,7 +43,9 @@
                <widget source="Adaptertext" render="Label" position="10,355" size="120,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
                <widget source="Adapter" render="Label" position="120,355" size="400,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
                <widget source="introduction2" render="Label" position="10,380" size="540,21" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
-               <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="10,380" zPosition="10" size="35,25" transparent="1" alphatest="on" />
+               <widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="10,380" zPosition="10" size="35,25" transparent="1" alphatest="on" >
+                       <convert type="ConditionalShowHide" />
+               </widget>
                <widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,315" zPosition="1" size="1,1" transparent="1" alphatest="on" />
        </screen>
 
index 710cc421ec59a6a476249c8bd6917df35639e7fc..ef8dadc387bdcb59b306ab573d83ebe69e836b31 100644 (file)
@@ -1045,9 +1045,9 @@ int eTSMPEGDecoder::setState()
 int eTSMPEGDecoder::m_pcm_delay=-1,
        eTSMPEGDecoder::m_ac3_delay=-1;
 
-RESULT eTSMPEGDecoder::setPCMDelay(int delay)
+RESULT eTSMPEGDecoder::setHwPCMDelay(int delay)
 {
-       if (m_decoder == 0 && delay != m_pcm_delay )
+       if (delay != m_pcm_delay )
        {
                FILE *fp = fopen("/proc/stb/audio/audio_delay_pcm", "w");
                if (fp)
@@ -1061,9 +1061,9 @@ RESULT eTSMPEGDecoder::setPCMDelay(int delay)
        return -1;
 }
 
-RESULT eTSMPEGDecoder::setAC3Delay(int delay)
+RESULT eTSMPEGDecoder::setHwAC3Delay(int delay)
 {
-       if ( m_decoder == 0 && delay != m_ac3_delay )
+       if ( delay != m_ac3_delay )
        {
                FILE *fp = fopen("/proc/stb/audio/audio_delay_bitstream", "w");
                if (fp)
@@ -1077,6 +1077,17 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay)
        return -1;
 }
 
+
+RESULT eTSMPEGDecoder::setPCMDelay(int delay)
+{
+       return m_decoder == 0 ? setHwPCMDelay(delay) : -1;
+}
+
+RESULT eTSMPEGDecoder::setAC3Delay(int delay)
+{
+       return m_decoder == 0 ? setHwAC3Delay(delay) : -1;
+}
+
 eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder)
        : m_demux(demux), 
                m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1),
index b53638b59ab0ffb757063f3f7533cdf621c5d974..3a0fbac1e58f27c303a7d28202884a6c9de7bc53 100644 (file)
@@ -193,6 +193,8 @@ public:
        int getVideoProgressive();
        int getVideoFrameRate();
        int getVideoAspect();
+       static RESULT setHwPCMDelay(int delay);
+       static RESULT setHwAC3Delay(int delay);
 };
 
 #endif
index 894287e84f18845b6e06d39a467033a1d62688fa..a8dfb193e9f30a9a2a989e62f0efe5ab274a3cad 100644 (file)
@@ -1462,12 +1462,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
                        continue;
                }
                
-               size_t iframe_len;
-                       /* try to align to iframe */
-               int direction = pts < 0 ? -1 : 1;
-               m_tstools.findFrame(offset, iframe_len, direction);
-
-               eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx (skipped additional %d frames due to iframe re-align)", relative, pts, offset, direction);
+               eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset);
                current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */
        }
 
index 1393bf77847a6ec384bba54b0bf31cd4fc8cd25a..5cdecbd610095ec2172b811454f0b71ec1013ed6 100644 (file)
@@ -244,6 +244,7 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts, int marg)
        off_t last = 0;
        off_t last2 = 0;
        pts_t lastc = 0;
+       ts += 1; // Add rounding error margin
        for (std::map<off_t, pts_t>::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i)
        {
                pts_t delta = getDelta(i->first);
index a9eef4067e703bdd3db650f6e16fd8fb078226c5..2e5c5665d9e7a01bb15508078dbc2c5264e55ca6 100644 (file)
@@ -652,18 +652,23 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram
 
 int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int frame_types)
 {
-       int nr_frames = 0;
+       int nr_frames, direction;
 //     eDebug("trying to move %d frames at %llx", distance, offset);
        
        frame_types = frametypeI; /* TODO: intelligent "allow IP frames when not crossing an I-Frame */
 
-       int direction = distance > 0 ? 0 : -1;
-       distance = abs(distance);
-       
        off_t new_offset = offset;
        size_t new_len = len;
        int first = 1;
 
+       if (distance > 0) {
+               direction = 0;
+                nr_frames = 0;
+        } else {
+               direction = -1;
+                nr_frames = -1;
+               distance = -distance+1;
+        }      
        while (distance > 0)
        {
                int dir = direction;
@@ -677,12 +682,18 @@ int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int
                
 //             eDebug("we moved %d, %d to go frames (now at %llx)", dir, distance, new_offset);
 
-               if (distance >= 0 || first)
+               if (distance >= 0 || direction == 0)
                {
                        first = 0;
                        offset = new_offset;
                        len = new_len;
                        nr_frames += abs(dir);
+               } 
+               else if (first) {
+                       first = 0;
+                       offset = new_offset;
+                       len = new_len;
+                       nr_frames += abs(dir) + distance; // never jump forward during rewind
                }
        }
 
old mode 100644 (file)
new mode 100755 (executable)
index fe505c2..4700e9e
@@ -1,5 +1,5 @@
 from MenuList import MenuList
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename
 from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
 from Tools.LoadPixmap import LoadPixmap
 
@@ -10,7 +10,7 @@ def ChoiceEntryComponent(key, text):
        else:
                res.append((eListboxPythonMultiContent.TYPE_TEXT, 45, 00, 800, 25, 0, RT_HALIGN_LEFT, text[0]))
        
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/key_" + key + ".png"))
+               png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/key_" + key + ".png"))
                if png is not None:
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 0, 35, 25, png))
        
old mode 100644 (file)
new mode 100755 (executable)
index 00949e2..418a1b6
@@ -1,7 +1,7 @@
 from HTMLComponent import HTMLComponent
 from GUIComponent import GUIComponent
-from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement
-from Components.ActionMap import NumberActionMap
+from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement, ConfigText, ConfigPassword
+from Components.ActionMap import NumberActionMap, ActionMap
 from enigma import eListbox, eListboxPythonConfigContent, eRCInput, eTimer
 from Screens.MessageBox import MessageBox
 
@@ -66,6 +66,7 @@ class ConfigList(HTMLComponent, GUIComponent, object):
                self.current = self.getCurrent()
                if self.current:
                        self.current[1].onSelect(self.session)
+
                for x in self.onSelectionChanged:
                        x()
 
@@ -127,13 +128,52 @@ class ConfigListScreen:
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1) # to prevent left/right overriding the listbox
+
+               self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
+               {
+                       "showVirtualKeyboard": self.KeyText,
+               }, -2)
+               self["VirtualKB"].setEnabled(False)
                
                self["config"] = ConfigList(list, session = session)
+               
                if on_change is not None:
                        self.__changed = on_change
                else:
                        self.__changed = lambda: None
-
+               
+               if not self.handleInputHelpers in self["config"].onSelectionChanged:
+                       self["config"].onSelectionChanged.append(self.handleInputHelpers)
+
+       def handleInputHelpers(self):
+               if self["config"].getCurrent() is not None:
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(True)
+                                       self["VKeyIcon"].boolean = True
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       else:
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(False)
+                                       self["VKeyIcon"].boolean = False
+               else:
+                       if self.has_key("VKeyIcon"):
+                               self["VirtualKB"].setEnabled(False)
+                               self["VKeyIcon"].boolean = False
+
+       def KeyText(self):
+               from Screens.VirtualKeyBoard import VirtualKeyBoard
+               self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue())
+
+       def VirtualKeyBoardCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       self["config"].getCurrent()[1].setValue(callback)
+                       self["config"].invalidate(self["config"].getCurrent())
+                       
        def keyOK(self):
                self["config"].handleKey(KEY_OK)
 
old mode 100644 (file)
new mode 100755 (executable)
index 59f9262..41cd1b2
@@ -8,7 +8,7 @@ from Tools.LoadPixmap import LoadPixmap
 
 from time import localtime, time
 from ServiceReference import ServiceReference
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 EPG_TYPE_SINGLE = 0
 EPG_TYPE_MULTI = 1
@@ -53,11 +53,11 @@ class EPGList(HTMLComponent, GUIComponent):
                        assert(type == EPG_TYPE_SIMILAR)
                        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'))
+               self.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png'))
 
        def getEventFromId(self, service, eventid):
                event = None
index 38b08547c0a97d1e7c9238c361cf21361fc34be5..222512eab861180ef3d26810040442ac4af63b7c 100755 (executable)
@@ -3,7 +3,7 @@ from os import path as os_path, listdir
 from MenuList import MenuList
 from Components.Harddisk import harddiskmanager
 
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename, fileExists
 
 from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, \
        eServiceReference, eServiceCenter, gFont
@@ -23,7 +23,6 @@ EXTENSIONS = {
                "ts": "movie",
                "avi": "movie",
                "divx": "movie",
-               "m4v": "movie",
                "mpg": "movie",
                "mpeg": "movie",
                "mkv": "movie",
@@ -35,12 +34,12 @@ def FileEntryComponent(name, absolute = None, isDir = False):
        res = [ (absolute, isDir) ]
        res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
        if isDir:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png"))
        else:
                extension = name.split('.')
                extension = extension[-1].lower()
                if EXTENSIONS.has_key(extension):
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png"))
                else:
                        png = None
        if png is not None:
@@ -160,8 +159,11 @@ class FileList(MenuList):
                        directories.sort()
                        files.sort()
                else:
-                       if os_path.exists(directory):
-                               files = listdir(directory)
+                       if fileExists(directory):
+                               try:
+                                       files = listdir(directory)
+                               except:
+                                       files = []
                                files.sort()
                                tmpfiles = files[:]
                                for x in tmpfiles:
@@ -256,12 +258,12 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected
        res = [ (absolute, isDir, selected, name) ]
        res.append((eListboxPythonMultiContent.TYPE_TEXT, 55, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
        if isDir:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
+               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png"))
        else:
                extension = name.split('.')
                extension = extension[-1].lower()
                if EXTENSIONS.has_key(extension):
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png"))
                else:
                        png = None
        if png is not None:
@@ -269,10 +271,10 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected
 
        if not name.startswith('<'):
                if selected is False:
-                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_off.png"))
+                       icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_off.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
                else:
-                       icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+                       icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon))
        
        return res
@@ -374,8 +376,11 @@ class MultiFileSelectList(FileList):
                        directories.sort()
                        files.sort()
                else:
-                       if os_path.exists(directory):
-                               files = listdir(directory)
+                       if fileExists(directory):
+                               try:
+                                       files = listdir(directory)
+                               except:
+                                       files = []
                                files.sort()
                                tmpfiles = files[:]
                                for x in tmpfiles:
index 2efdb68f6a1c759180870b460783e2edde5e35e9..03f574f3dbb207e60e6f1c6a7e5ad6796461c0bc 100755 (executable)
@@ -290,7 +290,10 @@ class Harddisk:
        # 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 = readFile("/sys/block/%s/stat" % self.device)
+               try:
+                       l = open("/sys/block/%s/stat" % self.device).read()
+               except IOError:
+                       return -1,-1
                (nr_read, _, _, _, nr_write) = l.split()[:5]
                return int(nr_read), int(nr_write)
 
@@ -319,7 +322,7 @@ class Harddisk:
                l = sum(stats)
                print "sum", l, "prev_sum", self.last_stat
 
-               if l != self.last_stat: # access
+               if l != self.last_stat and l >= 0: # access
                        print "hdd was accessed since previous check!"
                        self.last_stat = l
                        self.last_access = t
old mode 100644 (file)
new mode 100755 (executable)
index 12f2727..5583b22
@@ -1,6 +1,6 @@
 from MenuList import MenuList
 
-from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
+from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename
 from os import path
 
 from enigma import eListboxPythonMultiContent, RT_VALIGN_CENTER, gFont, eServiceCenter
@@ -14,11 +14,11 @@ STATE_REWIND = 3
 STATE_FORWARD = 4
 STATE_NONE = 5
 
-PlayIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_play.png"))
-PauseIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_pause.png"))
-StopIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_stop.png"))
-RewindIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_rewind.png"))
-ForwardIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_forward.png"))
+PlayIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_play.png"))
+PauseIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_pause.png"))
+StopIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_stop.png"))
+RewindIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_rewind.png"))
+ForwardIcon = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_forward.png"))
 
 def PlaylistEntryComponent(serviceref, state):
        res = [ serviceref ]
index 05204a74c3b51795db5e125cba992375e891c126..78e17bb7233505e5e5c77f1674cdbbe56b25ae05 100644 (file)
@@ -947,7 +947,7 @@ def InitNimManager(nimmgr):
 
        lnb_choices = {
                "universal_lnb": _("Universal LNB"),
-#              "unicable": _("Unicable"),
+               "unicable": _("Unicable"),
                "c_band": _("C-Band"),
                "user_defined": _("User defined")}
 
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 08af7d0..1c5423f
@@ -1,9 +1,9 @@
 from MenuList import MenuList
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT
 from Tools.LoadPixmap import LoadPixmap
 
-selectionpng = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/selectioncross.png"))
+selectionpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/selectioncross.png"))
 
 def SelectionEntryComponent(description, value, index, selected):
        res = [
old mode 100644 (file)
new mode 100755 (executable)
index b0283c1..6095812
@@ -5,7 +5,7 @@ from skin import parseColor, parseFont
 from enigma import eListboxServiceContent, eListbox, eServiceCenter, eServiceReference, gFont, eRect
 from Tools.LoadPixmap import LoadPixmap
 
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 class ServiceList(HTMLComponent, GUIComponent):
        MODE_NORMAL = 0
@@ -15,27 +15,27 @@ class ServiceList(HTMLComponent, GUIComponent):
                GUIComponent.__init__(self)
                self.l = eListboxServiceContent()
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/folder.png"))
+               pic = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/folder.png"))
                if pic:
                        self.l.setPixmap(self.l.picFolder, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/marker.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/marker.png"))
                if pic:
                        self.l.setPixmap(self.l.picMarker, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_s-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_s-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_S, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_c-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_c-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_C, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_t-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_t-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picDVB_T, pic)
 
-               pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_service_group-fs8.png"))
+               pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_service_group-fs8.png"))
                if pic:
                        self.l.setPixmap(self.l.picServiceGroup, pic)
 
old mode 100644 (file)
new mode 100755 (executable)
index 44a7eb4..2a7405d
@@ -7,7 +7,7 @@ from enigma import eListboxPythonMultiContent, eListbox, gFont, \
        RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER
 from Tools.LoadPixmap import LoadPixmap
 from timer import TimerEntry
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 class TimerList(HTMLComponent, GUIComponent, object):
 #
@@ -65,7 +65,7 @@ class TimerList(HTMLComponent, GUIComponent, object):
                res.append((eListboxPythonMultiContent.TYPE_TEXT, width-150, 50, 150, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
 
                if timer.disabled:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/redx.png"))
+                       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/redx.png"))
                        res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png))
                return res
 
index 6fcab8bccd615373a99a94fd4a603897678fc0fb..680b5944cdef63700b8214bfaa7dc7e1a07d0394 100644 (file)
@@ -1,5 +1,6 @@
 from Components.Harddisk import harddiskmanager
 from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations
+from Tools.Directories import resolveFilename, SCOPE_HDD
 from enigma import Misc_Options, setTunerTypePriorityOrder;
 from SystemInfo import SystemInfo
 import os
@@ -30,8 +31,11 @@ def InitUsageConfig():
                ("standard", _("standard")), ("swap", _("swap PiP and main picture")),
                ("swapstop", _("move PiP to main picture")), ("stop", _("stop PiP")) ])
 
+       config.usage.default_path = ConfigText(default = resolveFilename(SCOPE_HDD))
+       config.usage.timer_path = ConfigText(default = "<default>")
+       config.usage.instantrec_path = ConfigText(default = "<default>")
+       config.usage.timeshift_path = ConfigText(default = "/media/hdd/")
        config.usage.allowed_timeshift_paths = ConfigLocations(default = ["/media/hdd/"])
-       config.usage.timeshift_path = ConfigText(default = "/media/hdd")
 
        config.usage.on_movie_start = ConfigSelection(default = "ask", choices = [
                ("ask", _("Ask user")), ("resume", _("Resume from last position")), ("beginning", _("Start from the beginning")) ])
@@ -65,19 +69,19 @@ def InitUsageConfig():
        
        def TunerTypePriorityOrderChanged(configElement):
                setTunerTypePriorityOrder(int(configElement.value))
-       config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged)
+       config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged, immediate_feedback=False)
 
        def setHDDStandby(configElement):
                for hdd in harddiskmanager.HDDList():
                        hdd[1].setIdleTime(int(configElement.value))
-       config.usage.hdd_standby.addNotifier(setHDDStandby)
+       config.usage.hdd_standby.addNotifier(setHDDStandby, immediate_feedback=False)
 
        def set12VOutput(configElement):
                if configElement.value == "on":
                        Misc_Options.getInstance().set_12V_output(1)
                elif configElement.value == "off":
                        Misc_Options.getInstance().set_12V_output(0)
-       config.usage.output_12V.addNotifier(set12VOutput)
+       config.usage.output_12V.addNotifier(set12VOutput, immediate_feedback=False)
 
        SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
 
@@ -128,3 +132,23 @@ def updateChoices(sel, choices):
                                        defval = str(x)
                                        break
                sel.setChoices(map(str, choices), defval)
+
+def preferredPath(path):
+       if config.usage.setup_level.index < 2 or path == "<default>":
+               return None  # config.usage.default_path.value, but delay lookup until usage
+       elif path == "<current>":
+               return config.movielist.last_videodir.value
+       elif path == "<timer>":
+               return config.movielist.last_timer_videodir.value
+       else:
+               return path
+
+def preferredTimerPath():
+       return preferredPath(config.usage.timer_path.value)
+
+def preferredInstantRecordPath():
+       return preferredPath(config.usage.instantrec_path.value)
+
+def defaultMoviePath():
+       return config.usage.default_path.value
+
index 789ec32fc85695396f84ceff645bf547d608692d..876e3a34a7b56683960a98981088ef409eb1bf35 100755 (executable)
@@ -1,6 +1,6 @@
 from enigma import getPrevAsciiCode
 from Tools.NumericalTextInput import NumericalTextInput
-from Tools.Directories import resolveFilename, SCOPE_CONFIG
+from Tools.Directories import resolveFilename, SCOPE_CONFIG, fileExists
 from Components.Harddisk import harddiskmanager
 from copy import copy as copy_copy
 from os import path as os_path
@@ -1285,7 +1285,6 @@ class ConfigLocations(ConfigElement):
                self.default = default
                self.locations = []
                self.mountpoints = []
-               harddiskmanager.on_partition_list_change.append(self.mountpointsChanged)
                self.value = default[:]
 
        def setValue(self, value):
@@ -1322,7 +1321,7 @@ class ConfigLocations(ConfigElement):
                locations = [[x, None, False, False] for x in tmp]
                self.refreshMountpoints()
                for x in locations:
-                       if os_path.exists(x[0]):
+                       if fileExists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
                self.locations = locations
@@ -1341,20 +1340,11 @@ class ConfigLocations(ConfigElement):
                        return False
                return self.tostring([x[0] for x in locations]) != sv
 
-       def mountpointsChanged(self, action, dev):
-               print "Mounts changed: ", action, dev
-               mp = dev.mountpoint+"/"
-               if action == "add":
-                       self.addedMount(mp)
-               elif action == "remove":
-                       self.removedMount(mp)
-               self.refreshMountpoints()
-
        def addedMount(self, mp):
                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 fileExists(x[0]):
                                x[1] = self.getMountpoint(x[0])
                                x[2] = True
 
@@ -1364,7 +1354,7 @@ class ConfigLocations(ConfigElement):
                                x[2] = False
 
        def refreshMountpoints(self):
-               self.mountpoints = [p.mountpoint + "/" for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"]
+               self.mountpoints = [p.mountpoint for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"]
                self.mountpoints.sort(key = lambda x: -len(x))
 
        def checkChangedMountpoints(self):
index 7566346216991c79134fb8fe1fb39a106bba8ccd..efe9f761e3d9e2a769e359161499f2d78608fcaa 100644 (file)
@@ -7,6 +7,7 @@ from Components.ActionMap import HelpableActionMap
 from Components.MultiContent import MultiContentEntryText
 from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 from Components.VideoWindow import VideoWindow
+from Components.Label import Label
 from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport
 from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
@@ -119,12 +120,13 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                <widget source="session.CurrentService" render="Label" position="135,405" size="450,50" font="Regular;22" halign="center" valign="center">
                        <convert type="ServiceName">Name</convert>
                </widget>
-               <widget source="session.CurrentService" render="Label" position="50,450" zPosition="1" size="620,25" font="Regular;20" halign="center" valign="center">
+               <widget source="session.CurrentService" render="Label" position="320,450" zPosition="1" size="420,25" font="Regular;20" halign="left" valign="center">
                        <convert type="ServicePosition">Position,Detailed</convert>
                </widget>
-               <eLabel position="62,98" size="179,274" backgroundColor="#505555" />
-               <eLabel position="64,100" size="175,270" backgroundColor="#000000" />
-               <widget source="cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
+               <widget name="SeekState" position="210,450" zPosition="1" size="100,25" halign="right" font="Regular;20" valign="center" />
+               <eLabel position="48,98" size="204,274" backgroundColor="#505555" />
+               <eLabel position="50,100" size="200,270" backgroundColor="#000000" />
+               <widget source="cutlist" position="50,100" zPosition="1" size="200,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
                        <convert type="TemplatedMultiContent">
                                {"template": [
                                                MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)),
@@ -161,6 +163,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self["Timeline"] = ServicePositionGauge(self.session.nav)
                self["cutlist"] = List(self.getCutlist())
                self["cutlist"].onSelectionChanged.append(self.selectionChanged)
+               self["SeekState"] = Label()
+               self.onPlayStateChanged.append(self.updateStateLabel)
+               self.updateStateLabel(self.seekstate)
 
                self["Video"] = VideoWindow(decoder = 0)
 
@@ -184,13 +189,17 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                        })
 
                # to track new entries we save the last version of the cutlist
-               self.last_cuts = [ ]
+               self.last_cuts = self.getCutlist()
                self.cut_start = None
+               self.inhibit_seek = False
                self.onClose.append(self.__onClose)
 
        def __onClose(self):
                self.session.nav.playService(self.old_service)
 
+       def updateStateLabel(self, state):
+               self["SeekState"].setText(state[3].strip())
+
        def showTutorial(self):
                if not self.tutorial_seen:
                        self.tutorial_seen = True
@@ -238,44 +247,46 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                return r
 
        def selectionChanged(self):
-               where = self["cutlist"].getCurrent()
-               if where is None:
-                       print "no selection"
-                       return
-               pts = where[0][0]
-               seek = self.getSeek()
-               if seek is None:
-                       print "no seek"
-                       return
-               seek.seekTo(pts)
+               if not self.inhibit_seek:
+                       where = self["cutlist"].getCurrent()
+                       if where is None:
+                               print "no selection"
+                               return
+                       pts = where[0][0]
+                       seek = self.getSeek()
+                       if seek is None:
+                               print "no seek"
+                               return
+                       seek.seekTo(pts)
 
        def refillList(self):
                print "cue sheet changed, refilling"
                self.downloadCuesheet()
 
-               # get the first changed entry, and select it
+               # get the first changed entry, counted from the end, and select it
                new_list = self.getCutlist()
                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"].setIndex(i)
+               l1 = len(new_list)
+               l2 = len(self.last_cuts)
+               for i in range(min(l1, l2)):
+                       if new_list[l1-i-1] != self.last_cuts[l2-i-1]:
+                               self["cutlist"].setIndex(l1-i-1)
                                break
                self.last_cuts = new_list
 
        def getStateForPosition(self, pos):
-               state = 0 # in
-
-               # when first point is "in", the beginning is "out"
-               if len(self.cut_list) and self.cut_list[0][1] == 0:
-                       state = 1
-
+               state = -1
                for (where, what) in self.cut_list:
-                       if where < pos:
-                               if what == 0: # in
-                                       state = 0
-                               elif what == 1: # out
+                       if what in [0, 1]:
+                               if where < pos:
+                                       state = what
+                               elif where == pos:
                                        state = 1
+                               elif state == -1:
+                                       state = 1 - what
+               if state == -1:
+                       state = 0
                return state
 
        def showMenu(self):
@@ -329,11 +340,11 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                        in_after = None
 
                        for (where, what) in self.cut_list:
-                               if what == 1 and where < self.context_position: # out
+                               if what == 1 and where <= self.context_position: # out
                                        out_before = (where, what)
                                elif what == 0 and where < self.context_position: # in, before out
                                        out_before = None
-                               elif what == 0 and where > self.context_position and in_after is None:
+                               elif what == 0 and where >= self.context_position and in_after is None:
                                        in_after = (where, what)
 
                        if out_before is not None:
@@ -341,12 +352,16 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
 
                        if in_after is not None:
                                self.cut_list.remove(in_after)
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_MARK:
                        self.__addMark()
                elif result == CutListContextMenu.RET_DELETEMARK:
                        self.cut_list.remove(self.context_nearest_mark)
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_REMOVEBEFORE:
                        # remove in/out marks before current position
                        for (where, what) in self.cut_list[:]:
@@ -354,7 +369,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                                        self.cut_list.remove((where, what))
                        # add 'in' point
                        bisect.insort(self.cut_list, (self.context_position, 0))
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_REMOVEAFTER:
                        # remove in/out marks after current position
                        for (where, what) in self.cut_list[:]:
@@ -362,7 +379,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                                        self.cut_list.remove((where, what))
                        # add 'out' point
                        bisect.insort(self.cut_list, (self.context_position, 1))
+                       self.inhibit_seek = True
                        self.uploadCuesheet()
+                       self.inhibit_seek = False
                elif result == CutListContextMenu.RET_GRABFRAME:
                        self.grabFrame()
 
old mode 100644 (file)
new mode 100755 (executable)
index b22c4b8..1d621f4
@@ -16,7 +16,7 @@ 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 Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from ServiceReference import ServiceReference
 from Tools.LoadPixmap import LoadPixmap
@@ -41,11 +41,11 @@ class EPGList(HTMLComponent, GUIComponent):
                if overjump_empty:
                        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.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png'))
+               self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png'))
+               self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png'))
+               self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png'))
+               self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png'))
                self.time_base = None
                self.time_epoch = time_epoch
                self.list = None
old mode 100644 (file)
new mode 100755 (executable)
index 98bc060..0fc78fb
@@ -19,7 +19,7 @@ from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS
 from Components.AVSwitch import AVSwitch
 from Components.Harddisk import harddiskmanager
 from Components.config import config
-from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_SKIN_IMAGE
+from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_CURRENT_SKIN
 from settings import MediaPlayerSettings
 import random
 
@@ -50,7 +50,7 @@ class MediaPixmap(Pixmap):
                                        noCoverFile = value
                                        break
                if noCoverFile is None:
-                       noCoverFile = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
+                       noCoverFile = resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/no_coverArt.png")
                self.noCoverPixmap = LoadPixmap(noCoverFile)
                return Pixmap.applySkin(self, desktop, screen)
 
@@ -110,7 +110,7 @@ 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|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+               self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
index 4d361157ed2bac125a858fb914bd38b347c0e1cd..b158cde1e4a51269fd1e84668ffcb8497e6fd03c 100755 (executable)
@@ -4,15 +4,11 @@ from Screens.Rc import Rc
 from Screens.MessageBox import MessageBox
 
 from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
+from Components.Sources.Boolean import Boolean
 from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword
 from Components.Network import iNetwork
 
-#from Components.Label import Label
-#from Components.MenuList import MenuList
-#from Components.PluginComponent import plugins
-#from Plugins.Plugin import PluginDescriptor
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
-#import time, os, re
 
 
 config.misc.firstrun = ConfigBoolean(default = True)
@@ -39,7 +35,7 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl
 class NetworkWizard(WizardLanguage, Rc):
        skin = """
                <screen position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
-                       <widget name="text" position="153,40" size="340,330" font="Regular;22" />
+                       <widget name="text" position="153,40" size="340,300" font="Regular;22" />
                        <widget source="list" render="Listbox" position="53,340" size="440,180" scrollbarMode="showOnDemand" >
                                <convert type="StringList" />
                        </widget>
@@ -52,6 +48,10 @@ class NetworkWizard(WizardLanguage, Rc):
                        <widget name="arrowdown2" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
                        <widget name="arrowup" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
                        <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
+                       <widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="40,260" zPosition="0" size="35,25" transparent="1" alphatest="on" >
+                               <convert type="ConditionalShowHide" />
+                       </widget>
+                       <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />      
                </screen>"""
        def __init__(self, session):
                self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
@@ -59,7 +59,10 @@ class NetworkWizard(WizardLanguage, Rc):
                Rc.__init__(self)
                self.session = session
                self["wizard"] = Pixmap()
-               
+               self["HelpWindow"] = Pixmap()
+               self["HelpWindow"].hide()
+               self["VKeyIcon"] = Boolean(False)
+
                self.InterfaceState = None
                self.isInterfaceUp = None
                self.WlanPluginInstalled = None
index 3a1f835fecae9a3c9cbf8885860fa82850eee59a..ee3bbe15c89d8f357c60f28cf1c3e1073e9de30b 100755 (executable)
@@ -23,7 +23,7 @@ from Components.About import about
 from Components.DreamInfoHandler import DreamInfoHandler
 from Components.Language import language
 from Components.AVSwitch import AVSwitch
-from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_METADIR
+from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN, SCOPE_METADIR
 from Tools.LoadPixmap import LoadPixmap
 from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad
 from cPickle import dump, load
@@ -478,13 +478,13 @@ class PacketManager(Screen):
        def setStatus(self,status = None):
                if status:
                        self.statuslist = []
-                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)   
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng ))
                                self['list'].setList(self.statuslist)                           
 
@@ -600,15 +600,15 @@ class PacketManager(Screen):
                self.buildPacketList()
 
        def buildEntryComponent(self, name, version, description, state):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if state == 'installed':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
                        return((name, version, description, state, installedpng, divpng))       
                elif state == 'upgradeable':
-                       upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgradeable.png"))
+                       upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgradeable.png"))
                        return((name, version, description, state, upgradeablepng, divpng))     
                else:
-                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
                        return((name, version, description, state, installablepng, divpng))
 
        def buildPacketList(self):
@@ -779,19 +779,19 @@ class PluginManager(Screen, DreamInfoHandler):
                        self["key_green"].setText("")
                        self["key_blue"].setText("")
                        self["key_yellow"].setText("")
-                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+                       divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                        if status == 'update':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'sync':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
                        elif status == 'error':
-                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                               statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
                                self["list"].style = "default"
                                self['list'].setList(self.statuslist)
@@ -978,18 +978,18 @@ class PluginManager(Screen, DreamInfoHandler):
                        self.Console.ePopen(cmd, self.InstallMetaPackage_Finished)
 
        def buildEntryComponent(self, name, details, description, packagename, state, selected = False):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if state == 'installed':
-                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
+                       installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
                        return((name, details, description, packagename, state, installedpng, divpng, selected))
                elif state == 'installable':
-                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
+                       installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
                        return((name, details, description, packagename, state, installablepng, divpng, selected))
                elif state == 'remove':
-                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+                       removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                        return((name, details, description, packagename, state, removepng, divpng, selected))
                elif state == 'install':
-                       installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+                       installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
                        return((name, details, description, packagename, state, installpng, divpng, selected))
 
        def buildPacketList(self, categorytag = None):
@@ -1051,7 +1051,7 @@ class PluginManager(Screen, DreamInfoHandler):
                self.selectionChanged()
 
        def buildCategoryComponent(self, tag = None):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
                if tag is not None:
                        if tag == 'System':
                                return(( _("System"), _("View list of available system extensions" ), tag, divpng ))
@@ -1210,10 +1210,10 @@ class PluginManagerInfo(Screen):
                        self['list'].updateList(self.list)
 
        def buildEntryComponent(self, action,info):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png"))
-               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
-               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                if action == 'install':
                        return(( _('Installing'), info, installpng, divpng))
                elif action == 'remove':
@@ -1282,11 +1282,11 @@ class PluginManagerHelp(Screen):
                self['list'].updateList(self.list)
 
        def buildEntryComponent(self, state):
-               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
-               installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png"))
-               installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png"))
-               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png"))
-               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png"))
+               divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png"))
+               installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png"))
+               installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png"))
+               removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
+               installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png"))
 
                if state == 'installed':
                        return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng))
@@ -1432,7 +1432,7 @@ class PluginDetails(Screen, DreamInfoHandler):
                if not noScreenshot:
                        filename = self.thumbnail
                else:
-                       filename = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/noprev.png")
+                       filename = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/noprev.png")
 
                sc = AVSwitch().getFramebufferScale()
                self.picload.setPara((self["screenshot"].instance.size().width(), self["screenshot"].instance.size().height(), sc[0], sc[1], False, 1, "#00000000"))
index 3dde7e2286f89427285b12aef6a414431b6c0e92..f8edba11fe06c9e6b737f5afcd08f5e0b1393095 100644 (file)
@@ -6,6 +6,7 @@ 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 Components.UsageConfig import preferredTimerPath
 from Components.Sources.ServiceEvent import ServiceEvent
 from Components.Sources.Event import Event
 from Screens.TimerEdit import TimerSanityConflict
@@ -235,7 +236,7 @@ class EPGSelection(Screen):
                                self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
                                break
                else:
-                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
+                       newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event))
                        self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
index c1ffb5851d3e3e34c064076aabdddc90b47480ef..cced3ceba1fa60f1535a289aabdb4c319f51372a 100644 (file)
@@ -6,6 +6,7 @@ from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
 from Components.TimerList import TimerList
+from Components.UsageConfig import preferredTimerPath
 from enigma import eEPGCache, eTimer, eServiceReference
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from TimerEntry import TimerEntry
@@ -85,7 +86,7 @@ class EventViewBase:
                                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))
+                       newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event))
                        self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
 
        def finishedAdd(self, answer):
index 59cc21d3e956834cdab50ae797e4afc0813b24de..a15c7ac1b89b5597b0b314d6cf6f5fc55935d5e7 100644 (file)
@@ -212,7 +212,6 @@ class MoviePlayer(InfoBarBase, InfoBarShowHide, \
                                        return
 
                if answer in ("quit", "quitanddeleteconfirmed"):
-                       config.movielist.last_videodir.cancel()
                        self.close()
                elif answer == "movielist":
                        ref = self.session.nav.getCurrentlyPlayingServiceReference()
index 2cbfeb733819faceecff80e23feecbe0982297a9..b98cd469b5ad5d1b8413db6302fdb6c584cc8576 100644 (file)
@@ -10,6 +10,7 @@ from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Sources.Boolean import Boolean
 from Components.config import config, ConfigBoolean, ConfigClock
 from Components.SystemInfo import SystemInfo
+from Components.UsageConfig import preferredInstantRecordPath, defaultMoviePath
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
 
@@ -28,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
-from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists
+from Tools.Directories import fileExists
 
 from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
        iPlayableService, eServiceReference, eEPGCache
@@ -691,8 +692,6 @@ class InfoBarSeek:
                                iPlayableService.evSOF: self.__evSOF,
                        })
 
-               self.minSpeedBackward = useSeekBackHack and 16 or 0
-
                class InfoBarSeekActionMap(HelpableActionMap):
                        def __init__(self, screen, *args, **kwargs):
                                HelpableActionMap.__init__(self, screen, *args, **kwargs)
@@ -739,24 +738,19 @@ class InfoBarSeek:
                self.__seekableStatusChanged()
 
        def makeStateForward(self, n):
-               minspeed = config.seek.stepwise_minspeed.value
-               repeat = int(config.seek.stepwise_repeat.value)
-               if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                       return (0, n * repeat, repeat, ">> %dx" % n)
-               else:
+#              minspeed = config.seek.stepwise_minspeed.value
+#              repeat = int(config.seek.stepwise_repeat.value)
+#              if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
+#                      return (0, n * repeat, repeat, ">> %dx" % n)
+#              else:
                        return (0, n, 0, ">> %dx" % n)
 
        def makeStateBackward(self, n):
-               minspeed = config.seek.stepwise_minspeed.value
-               repeat = int(config.seek.stepwise_repeat.value)
-               if self.minSpeedBackward and n < self.minSpeedBackward:
-                       r = (self.minSpeedBackward - 1)/ n + 1
-                       if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                               r = max(r, repeat)
-                       return (0, -n * r, r, "<< %dx" % n)
-               elif minspeed != "Never" and n >= int(minspeed) and repeat > 1:
-                       return (0, -n * repeat, repeat, "<< %dx" % n)
-               else:
+#              minspeed = config.seek.stepwise_minspeed.value
+#              repeat = int(config.seek.stepwise_repeat.value)
+#              if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
+#                      return (0, -n * repeat, repeat, "<< %dx" % n)
+#              else:
                        return (0, -n, 0, "<< %dx" % n)
 
        def makeStateSlowMotion(self, n):
@@ -876,7 +870,7 @@ class InfoBarSeek:
                        if config.seek.on_pause.value == "play":
                                self.unPauseService()
                        elif config.seek.on_pause.value == "step":
-                               self.doSeekRelative(0)
+                               self.doSeekRelative(1)
                        elif config.seek.on_pause.value == "last":
                                self.setSeekState(self.lastseekstate)
                                self.lastseekstate = self.SEEK_STATE_PLAY
@@ -949,7 +943,7 @@ class InfoBarSeek:
                        self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
                        self.doSeekRelative(-6)
                elif seekstate == self.SEEK_STATE_PAUSE:
-                       self.doSeekRelative(-3)
+                       self.doSeekRelative(-1)
                elif self.isStateForward(seekstate):
                        speed = seekstate[1]
                        if seekstate[2]:
@@ -1484,7 +1478,7 @@ class InfoBarInstantRecord:
                if isinstance(serviceref, eServiceReference):
                        serviceref = ServiceReference(serviceref)
 
-               recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
+               recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = preferredInstantRecordPath())
                recording.dontSave = True
                
                if event is None or limitEvent == False:
@@ -1585,9 +1579,9 @@ class InfoBarInstantRecord:
                        self.session.nav.RecordTimer.timeChanged(entry)
 
        def instantRecord(self):
-               dir = config.movielist.last_videodir.value
-               if not fileExists(dir, 'w'):
-                       dir = resolveFilename(SCOPE_HDD)
+               dir = preferredInstantRecordPath()
+               if not dir or not fileExists(dir, 'w'):
+                       dir = defaultMoviePath()
                try:
                        stat = os_stat(dir)
                except:
old mode 100644 (file)
new mode 100755 (executable)
index 082daa5..fce10ac
@@ -13,14 +13,14 @@ def _cached(x):
 
 from Screens.Rc import Rc
 
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 
 from Tools.LoadPixmap import LoadPixmap
 
 def LanguageEntryComponent(file, name, index):
-       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/" + file + ".png"))
+       png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + file + ".png"))
        if png == None:
-               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png"))
+               png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/missing.png"))
        res = (index, name, png)
        return res
 
index 61d7105dfbbbc787e86e319fb41ca1827f29b473..29d94f553fef38bd347ad1db29b57edc0ff14f36 100644 (file)
@@ -289,6 +289,11 @@ class LocationBox(Screen, NumericalTextInput, HelpableScreen):
                        else:
                                self["filelist"].refresh()
                                self.removeBookmark(name, True)
+                               val = self.realBookmarks and self.realBookmarks.value
+                               if val and name in val:
+                                       val.remove(name)
+                                       self.realBookmarks.value = val
+                                       self.realBookmarks.save()
 
        def up(self):
                self[self.currList].up()
index 44994b86d0a5aab8c8d50b7364254459e02fb1ec..585983c2752f0ffc694bf975ee54ab9a4f401211 100755 (executable)
@@ -14,5 +14,5 @@ install_PYTHON = \
        SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \
        SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \
        SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \
-       TextBox.py FactoryReset.py
+       TextBox.py FactoryReset.py RecordPaths.py
 
index 174a4f072050e6d5961d31ea785a856d9f7aa11d..15f6b465c62fa0a21a819db6c624a7785cf1532a 100644 (file)
@@ -7,8 +7,9 @@ from Components.DiskInfo import DiskInfo
 from Components.Pixmap import Pixmap
 from Components.Label import Label
 from Components.PluginComponent import plugins
-from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations
+from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations, ConfigSet
 from Components.Sources.ServiceEvent import ServiceEvent
+from Components.UsageConfig import defaultMoviePath
 
 from Plugins.Plugin import PluginDescriptor
 
@@ -31,6 +32,7 @@ config.movielist.last_timer_videodir = ConfigText(default=resolveFilename(SCOPE_
 config.movielist.videodirs = ConfigLocations(default=[resolveFilename(SCOPE_HDD)])
 config.movielist.first_tags = ConfigText(default="")
 config.movielist.second_tags = ConfigText(default="")
+config.movielist.last_selected_tags = ConfigSet([], default=[])
 
 
 def setPreferredTagEditor(te):
@@ -168,7 +170,10 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                HelpableScreen.__init__(self)
 
                self.tags = [ ]
-               self.selected_tags = None
+               if selectedmovie:
+                       self.selected_tags = config.movielist.last_selected_tags.value
+               else:
+                       self.selected_tags = None
                self.selected_tags_ele = None
 
                self.movemode = False
@@ -183,8 +188,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self["DescriptionBorder"] = Pixmap()
                self["DescriptionBorder"].hide()
 
-               if not pathExists(config.movielist.last_videodir.value):
-                       config.movielist.last_videodir.value = resolveFilename(SCOPE_HDD)
+               if not fileExists(config.movielist.last_videodir.value):
+                       config.movielist.last_videodir.value = defaultMoviePath()
                        config.movielist.last_videodir.save()
                self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + config.movielist.last_videodir.value)
 
@@ -292,6 +297,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self.close(None)
 
        def saveconfig(self):
+               config.movielist.last_selected_tags.value = self.selected_tags
                config.movielist.moviesort.save()
                config.movielist.listtype.save()
                config.movielist.description.save()
@@ -339,8 +345,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self["list"].setSortType(type)
 
        def reloadList(self, sel = None, home = False):
-               if not pathExists(config.movielist.last_videodir.value):
-                       path = resolveFilename(SCOPE_HDD)
+               if not fileExists(config.movielist.last_videodir.value):
+                       path = defaultMoviePath()
                        config.movielist.last_videodir.value = path
                        config.movielist.last_videodir.save()
                        self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + path)
@@ -370,7 +376,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
 
        def gotFilename(self, res):
                if res is not None and res is not config.movielist.last_videodir.value:
-                       if pathExists(res):
+                       if fileExists(res):
                                config.movielist.last_videodir.value = res
                                config.movielist.last_videodir.save()
                                self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + res)
@@ -392,7 +398,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
        def showTagsN(self, tagele):
                if not self.tags:
                        self.showTagWarning()
-               elif not tagele or self.selected_tags_ele == tagele or not tagele.value in self.tags:
+               elif not tagele or tagele.value in self.selected_tags or not tagele.value in self.tags:
                        self.showTagsMenu(tagele)
                else:
                        self.selected_tags_ele = tagele
index ec2bafe54de9dfc065db3bcac2594586ee0a2b40..92416a33a299fbc5cbdcb5f80b466929974b146b 100755 (executable)
@@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard
 from Screens.HelpMenu import HelpableScreen
 from Components.Network import iNetwork
 from Components.Sources.StaticText import StaticText
+from Components.Sources.Boolean import Boolean
 from Components.Label import Label,MultiColorLabel
 from Components.Pixmap import Pixmap,MultiPixmap
 from Components.MenuList import MenuList
@@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
-from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 from Plugins.Plugin import PluginDescriptor
 from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
@@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ):
        num_configured_if = len(iNetwork.getConfiguredAdapters())
        if num_configured_if >= 2:
                if default is True:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png"))
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png"))
                if default is False:
-                       png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png"))
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png"))
                res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png))
        if active is True:
-               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+               png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png"))
        if active is False:
-               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png"))
+               png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png"))
        res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2))
        return res
 
@@ -319,11 +320,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        "blue": (self.KeyBlue, _("open nameserver configuration")),
                        })
 
-               self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions",
-                       {
-                       "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ),
-                       })
-
                self["actions"] = NumberActionMap(["SetupActions"],
                {
                        "ok": self.ok,
@@ -355,9 +351,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                self["key_red"] = StaticText(_("Cancel"))
                self["key_blue"] = StaticText(_("Edit DNS"))
 
-               self["VKeyIcon"] = Pixmap()
+               self["VKeyIcon"] = Boolean(False)
                self["HelpWindow"] = Pixmap()
-
+               self["HelpWindow"].hide()
+               
        def layoutFinished(self):
                self["DNS1"].setText(self.primaryDNS.getText())
                self["DNS2"].setText(self.secondaryDNS.getText())
@@ -386,9 +383,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        self["Gateway"].setText("")
                        self["Gatewaytext"].setText("")
                self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
-               self["VKeyIcon"].hide()
-               self["VirtualKB"].setEnabled(False)
-               self["HelpWindow"].hide()
 
        def createConfig(self):
                self.InterfaceEntry = None
@@ -518,30 +512,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
-               if not self.selectionChanged in self["config"].onSelectionChanged:
-                       self["config"].onSelectionChanged.append(self.selectionChanged)
 
        def KeyBlue(self):
                self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup)
 
-       def KeyText(self):
-               if self.iface == "wlan0" or self.iface == "ath0" :
-                       if self["config"].getCurrent() == self.hiddenSSID:
-                               if config.plugins.wlan.essid.value == 'hidden...':
-                                       self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value)
-                       if self["config"].getCurrent() == self.encryptionKey:
-                               self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value)
-
-       def VirtualKeyBoardSSIDCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       config.plugins.wlan.hiddenessid.setValue(callback)
-                       self["config"].invalidate(self.hiddenSSID)
-
-       def VirtualKeyBoardKeyCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       config.plugins.wlan.encryption.psk.setValue(callback)
-                       self["config"].invalidate(self.encryptionKey)
-
        def newConfig(self):
                if self["config"].getCurrent() == self.InterfaceEntry:
                        self.createSetup()
@@ -565,24 +539,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                ConfigListScreen.keyRight(self)
                self.newConfig()
 
-       def selectionChanged(self):
-               current = self["config"].getCurrent()
-               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
-                       helpwindowpos = self["HelpWindow"].getPosition()
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
-                               self["VKeyIcon"].show()
-                               self["VirtualKB"].setEnabled(True)
-               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
-                       helpwindowpos = self["HelpWindow"].getPosition()
-                       if current[1].help_window.instance is not None:
-                               current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
-                               self["VKeyIcon"].show()
-                               self["VirtualKB"].setEnabled(True)
-               else:
-                       self["VKeyIcon"].hide()
-                       self["VirtualKB"].setEnabled(False)
-
        def ok(self):
                current = self["config"].getCurrent()
                if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
old mode 100644 (file)
new mode 100755 (executable)
index 36d4590..0b99584
@@ -4,7 +4,7 @@ from Components.ActionMap import NumberActionMap
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Pixmap import Pixmap
 from Components.Label import Label
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
 class RdsInfoDisplay(Screen):
@@ -122,10 +122,10 @@ class RassInteractive(Screen):
                        9 : self["subpages_9"] }
 
                self.subpage_png = {
-                       1 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page1.png")),
-                       2 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page2.png")),
-                       3 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page3.png")),
-                       4 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page4.png")) }
+                       1 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page1.png")),
+                       2 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page2.png")),
+                       3 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page3.png")),
+                       4 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page4.png")) }
 
                self.current_page=0;
                self.current_subpage=0;
diff --git a/lib/python/Screens/RecordPaths.py b/lib/python/Screens/RecordPaths.py
new file mode 100644 (file)
index 0000000..c833266
--- /dev/null
@@ -0,0 +1,194 @@
+from Screens.Screen import Screen
+from Screens.LocationBox import MovieLocationBox, TimeshiftLocationBox
+from Screens.MessageBox import MessageBox
+from Components.Label import Label
+from Components.config import config, ConfigSelection, getConfigListEntry, configfile
+from Components.ConfigList import ConfigListScreen
+from Components.ActionMap import ActionMap
+from Tools.Directories import fileExists
+
+
+class RecordPathsSettings(Screen,ConfigListScreen):
+       skin = """
+               <screen name="RecordPathsSettings" position="160,150" size="450,200" title="Recording paths">
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="300,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="300,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="config" position="10,44" size="430,146" />
+               </screen>"""
+
+       def __init__(self, session):
+               from Components.Sources.StaticText import StaticText
+               Screen.__init__(self, session)
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+
+               ConfigListScreen.__init__(self, [])
+               self.initConfigList()
+
+               self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
+               {
+                   "green": self.save,
+                   "red": self.cancel,
+                   "cancel": self.cancel,
+                   "ok": self.ok,
+               }, -2)
+
+       def checkReadWriteDir(self, configele):
+               print "checkReadWrite: ", configele.value
+               if configele.value in [x[0] for x in self.styles] or fileExists(configele.value, "w"):
+                       configele.last_value = configele.value
+                       return True
+               else:
+                       dir = configele.value
+                       configele.value = configele.last_value
+                       self.session.open(
+                               MessageBox,
+                               _("The directory %s is not writable.\nMake sure you select a writable directory instead.")%dir,
+                               type = MessageBox.TYPE_ERROR
+                               )
+                       return False
+
+       def initConfigList(self):
+               self.styles = [ ("<default>", _("<Default movie location>")), ("<current>", _("<Current movielist location>")), ("<timer>", _("<Last timer location>")) ]
+               styles_keys = [x[0] for x in self.styles]
+               tmp = config.movielist.videodirs.value
+               default = config.usage.default_path.value
+               if default not in tmp:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "DefaultPath: ", default, tmp
+               self.default_dirname = ConfigSelection(default = default, choices = tmp)
+               tmp = config.movielist.videodirs.value
+               default = config.usage.timer_path.value
+               if default not in tmp and default not in styles_keys:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "TimerPath: ", default, tmp
+               self.timer_dirname = ConfigSelection(default = default, choices = self.styles+tmp)
+               tmp = config.movielist.videodirs.value
+               default = config.usage.instantrec_path.value
+               if default not in tmp and default not in styles_keys:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "InstantrecPath: ", default, tmp
+               self.instantrec_dirname = ConfigSelection(default = default, choices = self.styles+tmp)
+               default = config.usage.timeshift_path.value
+               tmp = config.usage.allowed_timeshift_paths.value
+               if default not in tmp:
+                       tmp = tmp[:]
+                       tmp.append(default)
+               print "TimeshiftPath: ", default, tmp
+               self.timeshift_dirname = ConfigSelection(default = default, choices = tmp)
+               self.default_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.timer_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.instantrec_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+               self.timeshift_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False)
+
+               self.list = []
+               if config.usage.setup_level.index >= 2:
+                       self.default_entry = getConfigListEntry(_("Default movie location"), self.default_dirname)
+                       self.list.append(self.default_entry)
+                       self.timer_entry = getConfigListEntry(_("Timer record location"), self.timer_dirname)
+                       self.list.append(self.timer_entry)
+                       self.instantrec_entry = getConfigListEntry(_("Instant record location"), self.instantrec_dirname)
+                       self.list.append(self.instantrec_entry)
+               else:
+                       self.default_entry = getConfigListEntry(_("Movie location"), self.default_dirname)
+                       self.list.append(self.default_entry)
+               self.timeshift_entry = getConfigListEntry(_("Timeshift location"), self.timeshift_dirname)
+               self.list.append(self.timeshift_entry)
+               self["config"].setList(self.list)
+
+       def ok(self):
+               currentry = self["config"].getCurrent()
+               self.lastvideodirs = config.movielist.videodirs.value
+               self.lasttimeshiftdirs = config.usage.allowed_timeshift_paths.value
+               if config.usage.setup_level.index >= 2:
+                       txt = _("Default movie location")
+               else:
+                       txt = _("Movie location")
+               if currentry == self.default_entry:
+                       self.entrydirname = self.default_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               txt,
+                               self.default_dirname.value
+                       )
+               elif currentry == self.timer_entry:
+                       self.entrydirname = self.timer_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               _("Initial location in new timers"),
+                               self.timer_dirname.value
+                       )
+               elif currentry == self.instantrec_entry:
+                       self.entrydirname = self.instantrec_dirname
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               MovieLocationBox,
+                               _("Location for instant recordings"),
+                               self.instantrec_dirname.value
+                       )
+               elif currentry == self.timeshift_entry:
+                       self.entrydirname = self.timeshift_dirname
+                       config.usage.timeshift_path.value = self.timeshift_dirname.value
+                       self.session.openWithCallback(
+                               self.dirnameSelected,
+                               TimeshiftLocationBox
+                       )
+
+       def dirnameSelected(self, res):
+               if res is not None:
+                       self.entrydirname.value = res
+                       if config.movielist.videodirs.value != self.lastvideodirs:
+                               styles_keys = [x[0] for x in self.styles]
+                               tmp = config.movielist.videodirs.value
+                               default = self.default_dirname.value
+                               if default not in tmp:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.default_dirname.setChoices(tmp, default=default)
+                               tmp = config.movielist.videodirs.value
+                               default = self.timer_dirname.value
+                               if default not in tmp and default not in styles_keys:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.timer_dirname.setChoices(self.styles+tmp, default=default)
+                               tmp = config.movielist.videodirs.value
+                               default = self.instantrec_dirname.value
+                               if default not in tmp and default not in styles_keys:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.instantrec_dirname.setChoices(self.styles+tmp, default=default)
+                               self.entrydirname.value = res
+                       if config.usage.allowed_timeshift_paths.value != self.lasttimeshiftdirs:
+                               tmp = config.usage.allowed_timeshift_paths.value
+                               default = self.instantrec_dirname.value
+                               if default not in tmp:
+                                       tmp = tmp[:]
+                                       tmp.append(default)
+                               self.timeshift_dirname.setChoices(tmp, default=default)
+                               self.entrydirname.value = res
+                       if self.entrydirname.last_value != res:
+                               self.checkReadWriteDir(self.entrydirname)
+
+       def save(self):
+               currentry = self["config"].getCurrent()
+               if self.checkReadWriteDir(currentry[1]):
+                       config.usage.default_path.value = self.default_dirname.value
+                       config.usage.timer_path.value = self.timer_dirname.value
+                       config.usage.instantrec_path.value = self.instantrec_dirname.value 
+                       config.usage.timeshift_path.value = self.timeshift_dirname.value
+                       config.usage.default_path.save()
+                       config.usage.timer_path.save()
+                       config.usage.instantrec_path.save()
+                       config.usage.timeshift_path.save()
+                       self.close()
+
+       def cancel(self):
+               self.close()
+
index caaf8c95eb7279dd54a2aa4c4ff56fafecf76c72..54354987003c47fbc59626ba30c88467b2f5029d 100644 (file)
@@ -4,6 +4,7 @@ from Components.config import config
 from Components.MenuList import MenuList
 from Components.TimerList import TimerList
 from Components.TimerSanityCheck import TimerSanityCheck
+from Components.UsageConfig import preferredTimerPath
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from Screen import Screen
 from Screens.ChoiceBox import ChoiceBox
@@ -243,7 +244,7 @@ class TimerEditList(Screen):
                else:
                        data = parseEvent(event, description = False)
 
-               self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = config.movielist.last_timer_videodir.value, *data))
+               self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *data))
                
        def addTimer(self, timer):
                self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
index edd19685755acbefe5f53312b3e9af17f97956a9..5813bac53e522490446465abdd5c088c0a0e8524 100644 (file)
@@ -8,11 +8,11 @@ from Components.MenuList import MenuList
 from Components.Button import Button
 from Components.Label import Label
 from Components.Pixmap import Pixmap
+from Components.UsageConfig import defaultMoviePath
 from Screens.MovieSelection import getPreferredTagEditor
 from Screens.LocationBox import MovieLocationBox
 from Screens.ChoiceBox import ChoiceBox
 from RecordTimer import AFTEREVENT
-from Tools.Directories import resolveFilename, SCOPE_HDD
 from enigma import eEPGCache
 from time import localtime, mktime, time, strftime
 from datetime import datetime
@@ -106,7 +106,7 @@ class TimerEntry(Screen, ConfigListScreen):
                        self.timerentry_starttime = ConfigClock(default = self.timer.begin)
                        self.timerentry_endtime = ConfigClock(default = self.timer.end)
 
-                       default = self.timer.dirname or resolveFilename(SCOPE_HDD)
+                       default = self.timer.dirname or defaultMoviePath()
                        tmp = config.movielist.videodirs.value
                        if default not in tmp:
                                tmp.append(default)
@@ -273,9 +273,10 @@ class TimerEntry(Screen, ConfigListScreen):
                self.timer.service_ref = self.timerentry_service_ref
                self.timer.tags = self.timerentry_tags
 
-               self.timer.dirname = self.timerentry_dirname.value
-               config.movielist.last_timer_videodir.value = self.timer.dirname
-               config.movielist.last_timer_videodir.save()
+               if self.timer.dirname or self.timerentry_dirname.value != defaultMoviePath():
+                       self.timer.dirname = self.timerentry_dirname.value
+                       config.movielist.last_timer_videodir.value = self.timer.dirname
+                       config.movielist.last_timer_videodir.save()
 
                if self.timerentry_type.value == "once":
                        self.timer.begin, self.timer.end = self.getBeginEnd()
index 19500ed7ef79668d9a067ac919ffd929ca5ab49e..7846e4b85dc5aeb0165472e8005bdc9acb9dd85d 100755 (executable)
@@ -7,26 +7,25 @@ from Components.MenuList import MenuList
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER
 from Screen import Screen
-from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
 class VirtualKeyBoardList(MenuList):
        def __init__(self, list, enableWrapAround=False):
                MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
-               self.l.setFont(0, gFont("Regular", 22))
+               self.l.setFont(0, gFont("Regular", 28))
                self.l.setItemHeight(45)
 
 def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):
-       key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))
-       key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))
-       key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))
-       key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))
-       key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))
-       key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))
-       key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))
-       key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))
-       key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))
-       
+       key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png"))
+       key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png"))
+       key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png"))
+       key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png"))
+       key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png"))
+       key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png"))
+       key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png"))
+       key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png"))
+       key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png"))
        res = [ (keys) ]
        
        x = 0
@@ -36,33 +35,45 @@ def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):
        else:
                shiftkey_png = key_shift
        for key in keys:
+               width = None
                if key == "EXIT":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc))
+                       width = key_esc.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_esc))
                elif key == "BACKSPACE":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace))
+                       width = key_backspace.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_backspace))
                elif key == "CLEAR":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr))
+                       width = key_clr.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_clr))
                elif key == "SHIFT":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png))
+                       width = shiftkey_png.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=shiftkey_png))
                elif key == "SPACE":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space))
+                       width = key_space.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_space))
                elif key == "OK":
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok))
+                       width = key_ok.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_ok))
                #elif key == "<-":
                #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left))
                #elif key == "->":
                #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right))
                
                else:
+                       width = key_bg.size().width()
                        res.extend((
-                               MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg),
-                               MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)
+                               MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_bg),
+                               MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)
                        ))
                
                if selectedKey == count:
-                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel))
-               
-               x += 45
+                       width = key_sel.size().width()
+                       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_sel))
+
+               if width is not None:
+                       x += width
+               else:
+                       x += 45
                count += 1
        
        return res
index 74219eb1c2b8b187ded4fc0b02b22f8791783123..1bff0284d24647a19dc82c203c0af093e42580d5 100755 (executable)
@@ -1,16 +1,15 @@
 from Screen import Screen
-
 from Screens.HelpMenu import HelpableScreen
 from Screens.MessageBox import MessageBox
-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.config import config, ConfigText, ConfigPassword, 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.Sources.StaticText import StaticText
 from Components.Slider import Slider
 from Components.ActionMap import NumberActionMap
 from Components.MenuList import MenuList
 from Components.ConfigList import ConfigList
 from Components.Sources.List import List
-
 from enigma import eTimer
 
 from xml.sax import make_parser
@@ -19,8 +18,8 @@ from xml.sax.handler import ContentHandler
 class WizardSummary(Screen):
        skin = """
        <screen position="0,0" size="132,64">
-               <widget name="text" position="6,4" size="120,42" font="Regular;14" transparent="1" />
-               <widget source="parent.list" render="Label" position="6,25" size="120,21" font="Regular;16">
+               <widget source="text" render="Label" position="6,0" size="120,16" font="Regular;16" transparent="1" />
+               <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Regular;12">
                        <convert type="StringListSelection" />
                </widget>
        </screen>"""
@@ -36,7 +35,7 @@ class WizardSummary(Screen):
                #self.skinName.append("Wizard")
                #print "*************+++++++++++++++++****************++++++++++******************* WizardSummary", self.skinName
                        #
-               self["text"] = Label("")
+               self["text"] = StaticText("")
                self.onShow.append(self.setCallback)
                
        def setCallback(self):
@@ -214,12 +213,13 @@ class Wizard(Screen):
                self.onShown.append(self.updateValues)
 
                self.configInstance = None
+               self.currentConfigIndex = None
                
                self.lcdCallbacks = []
                
                self.disableKeys = False
                
-               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"],
+               self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions", "KeyboardInputActions"],
                {
                        "gotAsciiCode": self.keyGotAscii,
                        "ok": self.ok,
@@ -245,6 +245,13 @@ class Wizard(Screen):
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
+
+               self["VirtualKB"] = NumberActionMap(["VirtualKeyboardActions"],
+               {
+                       "showVirtualKeyboard": self.KeyText,
+               }, -2)
+               
+               self["VirtualKB"].setEnabled(False)
                
        def red(self):
                print "red"
@@ -405,6 +412,7 @@ class Wizard(Screen):
                self.resetCounter()
                if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None  or self.wizard[self.currStep]["config"]["type"] == "dynamic"):
                        self["config"].instance.moveSelection(self["config"].instance.moveUp)
+                       self.handleInputHelpers()
                elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0):
                        self["list"].selectPrevious()
                        if self.wizard[self.currStep].has_key("onselect"):
@@ -418,6 +426,7 @@ class Wizard(Screen):
                self.resetCounter()
                if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None  or self.wizard[self.currStep]["config"]["type"] == "dynamic"):
                        self["config"].instance.moveSelection(self["config"].instance.moveDown)
+                       self.handleInputHelpers()
                elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0):
                        #self["list"].instance.moveSelection(self["list"].instance.moveDown)
                        self["list"].selectNext()
@@ -598,6 +607,9 @@ class Wizard(Screen):
                                                print "clearConfigList", self.configInstance["config"], self["config"]
                                else:
                                        self["config"].l.setList([])
+                                       self.handleInputHelpers()
+                                       
+                                       
                        else:
                                if self.has_key("config"):
                                        self["config"].hide()
@@ -614,6 +626,45 @@ class Wizard(Screen):
                                        self.finished(gotoStep = self.wizard[self.currStep]["timeoutstep"])
                self.updateText()
 
+       def handleInputHelpers(self):
+               if self["config"].getCurrent() is not None:
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(True)
+                                       self["VKeyIcon"].boolean = True
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       else:
+                               if self.has_key("VKeyIcon"):
+                                       self["VirtualKB"].setEnabled(False)
+                                       self["VKeyIcon"].boolean = False
+               else:
+                       if self.has_key("VKeyIcon"):
+                               self["VirtualKB"].setEnabled(False)
+                               self["VKeyIcon"].boolean = False
+
+       def KeyText(self):
+               from Screens.VirtualKeyBoard import VirtualKeyBoard
+               self.currentConfigIndex = self["config"].getCurrentIndex()
+               self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue())
+
+       def VirtualKeyBoardCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                               if self.has_key("HelpWindow"):
+                                       if self["config"].getCurrent()[1].help_window.instance is not None:
+                                               helpwindowpos = self["HelpWindow"].getPosition()
+                                               from enigma import ePoint
+                                               self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
+                       self["config"].instance.moveSelectionTo(self.currentConfigIndex)
+                       self["config"].setCurrentIndex(self.currentConfigIndex)
+                       self["config"].getCurrent()[1].setValue(callback)
+                       self["config"].invalidate(self["config"].getCurrent())
+
+
 class WizardManager:
        def __init__(self):
                self.wizards = []
index 681bc049345678290c1fbd1f4efdb84bbacd21a2..8ed2c8a46017951c8702db09bd1047d3a6094c99 100755 (executable)
@@ -33,6 +33,7 @@ SCOPE_DEFAULTDIR = 13
 SCOPE_DEFAULTPARTITION = 14
 SCOPE_DEFAULTPARTITIONMOUNTDIR = 15
 SCOPE_METADIR = 16
+SCOPE_CURRENT_PLUGIN = 17
 
 PATH_CREATE = 0
 PATH_DONTCREATE = 1
@@ -85,7 +86,27 @@ def resolveFilename(scope, base = "", path_prefix = None):
                tmp = defaultPaths[SCOPE_SKIN]
                pos = config.skin.primary_skin.value.rfind('/')
                if pos != -1:
-                       path = tmp[0]+config.skin.primary_skin.value[:pos+1]
+                       #if basefile is not available use default skin path as fallback
+                       tmpfile = tmp[0]+config.skin.primary_skin.value[:pos+1] + base
+                       if fileExists(tmpfile):
+                               path = tmp[0]+config.skin.primary_skin.value[:pos+1]
+                       else:
+                               path = tmp[0]
+               else:
+                       path = tmp[0]
+
+       elif scope == SCOPE_CURRENT_PLUGIN:
+               tmp = defaultPaths[SCOPE_PLUGINS]
+               from Components.config import config
+               skintmp = defaultPaths[SCOPE_SKIN]
+               pos = config.skin.primary_skin.value.rfind('/')
+               if pos != -1:
+                       #if basefile is not available inside current skin path, use the original provided file as fallback
+                       skintmpfile = skintmp[0]+config.skin.primary_skin.value[:pos+1] + base
+                       if fileExists(skintmpfile):
+                               path = skintmp[0]+config.skin.primary_skin.value[:pos+1]
+                       else:
+                               path = tmp[0]
                else:
                        path = tmp[0]
        else:
index 34d09363b4be1d1be31b7568cec27a71b88467fb..c95609a31dde231c498ead998c34a804c9708182 100644 (file)
@@ -2,20 +2,23 @@
 
        /* note: this requires gstreamer 0.10.x and a big list of plugins. */
        /* it's currently hardcoded to use a big-endian alsasink as sink. */
+#include <lib/base/ebase.h>
 #include <lib/base/eerror.h>
+#include <lib/base/init_num.h>
+#include <lib/base/init.h>
+#include <lib/base/nconfig.h>
 #include <lib/base/object.h>
-#include <lib/base/ebase.h>
-#include <string>
+#include <lib/dvb/decoder.h>
+#include <lib/components/file_eraser.h>
+#include <lib/gui/esubtitle.h>
 #include <lib/service/servicemp3.h>
 #include <lib/service/service.h>
-#include <lib/components/file_eraser.h>
-#include <lib/base/init_num.h>
-#include <lib/base/init.h>
+
+#include <string>
+
 #include <gst/gst.h>
 #include <gst/pbutils/missing-plugins.h>
 #include <sys/stat.h>
-/* for subtitles */
-#include <lib/gui/esubtitle.h>
 
 // eServiceFactoryMP3
 
@@ -43,6 +46,7 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("mp4");
                extensions.push_back("mov");
                extensions.push_back("m4a");
+               extensions.push_back("m2ts");
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
@@ -187,6 +191,8 @@ int eStaticServiceMP3Info::getLength(const eServiceReference &ref)
 }
 
 // eServiceMP3
+int eServiceMP3::ac3_delay,
+    eServiceMP3::pcm_delay;
 
 eServiceMP3::eServiceMP3(eServiceReference ref)
        :m_ref(ref), m_pump(eApp, 1)
@@ -659,7 +665,6 @@ RESULT eServiceMP3::getName(std::string &name)
        return 0;
 }
 
-
 int eServiceMP3::getInfo(int w)
 {
        const gchar *tag = 0;
@@ -955,6 +960,12 @@ RESULT eServiceMP3::subtitle(ePtr<iSubtitleOutput> &ptr)
        return 0;
 }
 
+RESULT eServiceMP3::audioDelay(ePtr<iAudioDelay> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
 int eServiceMP3::getNumberOfTracks()
 {
        return m_audioStreams.size();
@@ -1093,6 +1104,8 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
                                                g_object_set (G_OBJECT (sink), "emit-signals", TRUE, NULL);
                                                gst_object_unref(sink);
                                        }
+                                       setAC3Delay(ac3_delay);
+                                       setPCMDelay(pcm_delay);
                                }       break;
                                case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
                                {
@@ -1579,6 +1592,75 @@ int eServiceMP3::setBufferSize(int size)
        return 0;
 }
 
+int eServiceMP3::getAC3Delay()
+{
+       return ac3_delay;
+}
+
+int eServiceMP3::getPCMDelay()
+{
+       return pcm_delay;
+}
+
+void eServiceMP3::setAC3Delay(int delay)
+{
+       if (!m_gst_playbin || m_state != stRunning)
+               return;
+       else
+       {
+               GstElement *sink;
+               std::string config_delay;
+               int config_delay_int = delay;
+               if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0)
+                       config_delay_int += atoi(config_delay.c_str());
+
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+
+               if (!sink)
+                       return;
+               else {
+                       gchar *name = gst_element_get_name(sink);
+
+                       if (strstr(name, "dvbaudiosink"))
+                               eTSMPEGDecoder::setHwAC3Delay(config_delay_int);
+                       g_free(name);
+                       gst_object_unref(sink);
+               }
+       }
+}
+
+void eServiceMP3::setPCMDelay(int delay)
+{
+       if (!m_gst_playbin || m_state != stRunning)
+               return;
+       else
+       {
+               GstElement *sink;
+               std::string config_delay;
+               int config_delay_int = delay;
+               if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0)
+                       config_delay_int += atoi(config_delay.c_str());
+
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+
+               if (!sink)
+                       return;
+               else {
+                       gchar *name = gst_element_get_name(sink);
+
+                       if (strstr(name, "dvbaudiosink"))
+                               eTSMPEGDecoder::setHwPCMDelay(config_delay_int);
+                       else {
+                               // this is realy untested..and not used yet
+                               gint64 offset = config_delay_int;
+                               offset *= 1000000; // milli to nano
+                               g_object_set (G_OBJECT (m_gst_playbin), "ts-offset", offset, NULL);
+                       }
+                       g_free(name);
+                       gst_object_unref(sink);
+               }
+       }
+}
 
 #else
 #warning gstreamer not available, not building media player
index 15ed0b077b0448e6ec41e5e574c6fa5ded862a13..985179f65642143902bb0a9a5ef7df6bef8fd762 100644 (file)
@@ -49,8 +49,9 @@ typedef enum { atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFL
 typedef enum { stPlainText, stSSA, stSRT } subtype_t;
 typedef enum { ctNone, ctMPEGTS, ctMPEGPS, ctMKV, ctAVI, ctMP4, ctVCD, ctCDA } containertype_t;
 
-class eServiceMP3: public iPlayableService, public iPauseableService, 
-       public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, public iSubtitleOutput, public iStreamedService, public Object
+class eServiceMP3: public iPlayableService, public iPauseableService,
+       public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, 
+       public iSubtitleOutput, public iStreamedService, public iAudioDelay, public Object
 {
        DECLARE_REF(eServiceMP3);
 public:
@@ -70,13 +71,14 @@ public:
        RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr);
        RESULT audioChannel(ePtr<iAudioChannelSelection> &ptr);
        RESULT subtitle(ePtr<iSubtitleOutput> &ptr);
+       RESULT audioDelay(ePtr<iAudioDelay> &ptr);
 
                // not implemented (yet)
        RESULT frontendInfo(ePtr<iFrontendInformation> &ptr) { ptr = 0; return -1; }
        RESULT subServices(ePtr<iSubserviceList> &ptr) { ptr = 0; return -1; }
        RESULT timeshift(ePtr<iTimeshiftService> &ptr) { ptr = 0; return -1; }
        RESULT cueSheet(ePtr<iCueSheet> &ptr) { ptr = 0; return -1; }
-       RESULT audioDelay(ePtr<iAudioDelay> &ptr) { ptr = 0; return -1; }
+
        RESULT rdsDecoder(ePtr<iRdsDecoder> &ptr) { ptr = 0; return -1; }
        RESULT keys(ePtr<iServiceKeys> &ptr) { ptr = 0; return -1; }
        RESULT stream(ePtr<iStreamableService> &ptr) { ptr = 0; return -1; }
@@ -122,6 +124,12 @@ public:
        PyObject *getBufferCharge();
        int setBufferSize(int size);
 
+               // iAudioDelay
+       int getAC3Delay();
+       int getPCMDelay();
+       void setAC3Delay(int);
+       void setPCMDelay(int);
+
        struct audioStream
        {
                GstPad* pad;
@@ -166,6 +174,8 @@ public:
                }
        };
 private:
+       static int pcm_delay;
+       static int ac3_delay;
        int m_currentAudioStream;
        int m_currentSubtitleStream;
        int selectAudioStream(int i);
index e42c10033a6937a52810195ca26cf53a8b8973e4..c748538acaa441727457e2c5643f78f21c607510 100755 (executable)
--- a/mytest.py
+++ b/mytest.py
@@ -41,14 +41,14 @@ profile("LOAD:skin")
 from skin import readSkin
 
 profile("LOAD:Tools")
-from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
 from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave
 InitFallbackFiles()
 
 profile("ReloadProfiles")
 eDVBDB.getInstance().reloadBouquets()
 
-config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi")
+config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_CURRENT_SKIN, "radio.mvi"))
 config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
 config.misc.useTransponderTime = ConfigYesNo(default=True)
 config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
index 46b67b2c8d664b2bdbbd9113b5cc82aa6fdf8060..2319b7fb356913b6244a7fce3af209e0bd30f329 100755 (executable)
@@ -32,6 +32,7 @@ enigma2.pot:
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/Videomode/ >> enigma2.pot
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/SoftwareManager/ >> enigma2.pot
        ./xml2po.py     ../lib/python/Plugins/SystemPlugins/CleanupWizard/ >> enigma2.pot
+       ./xml2po.py     ../lib/python/Plugins/SystemPlugins/NetworkWizard/ >> enigma2.pot
        cat enigma2_rel25.pot | tail -n +19 >> enigma2.pot
        msguniq --no-location -o enigma2uniq.pot enigma2.pot
        $(RM) enigma2.pot
old mode 100755 (executable)
new mode 100644 (file)
index 3f22e6e..782b1ab
--- a/po/de.po
+++ b/po/de.po
@@ -2,7 +2,7 @@
 # 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"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
 "X-Poedit-SourceCharset: iso-8859-15\n"
+"X-Poedit-Country: GERMANY\n"
 
 msgid ""
 "\n"
@@ -116,49 +116,49 @@ msgid " "
 msgstr ""
 
 msgid " extensions."
-msgstr ""
+msgstr "erweiterungen."
 
 msgid " packages selected."
-msgstr ""
+msgstr "Pakete ausgewählt."
 
 msgid " updates available."
-msgstr ""
+msgstr "Aktualisierung(en) verfügbar "
 
 msgid " wireless networks found!"
 msgstr " Funk Netzwerke gefunden!"
 
 msgid "#000000"
-msgstr ""
+msgstr "#000000"
 
 msgid "#0064c7"
-msgstr ""
+msgstr "#0064c7"
 
 msgid "#25062748"
-msgstr ""
+msgstr "#25062748"
 
 msgid "#389416"
-msgstr ""
+msgstr "#389416"
 
 msgid "#80000000"
-msgstr ""
+msgstr "#80000000"
 
 msgid "#80ffffff"
-msgstr ""
+msgstr "#80ffffff"
 
 msgid "#bab329"
-msgstr ""
+msgstr "#bab329"
 
 msgid "#f23d21"
-msgstr ""
+msgstr "#f23d21"
 
 msgid "#ffffff"
-msgstr ""
+msgstr "#ffffff"
 
 msgid "#ffffffff"
-msgstr ""
+msgstr "#ffffffff"
 
 msgid "%H:%M"
-msgstr ""
+msgstr "%H:%M"
 
 #, python-format
 msgid "%d jobs are running in the background!"
@@ -205,11 +205,8 @@ msgstr "* Verfügbar für die Eingabe der Netzwerk SSID oder Passwortes"
 msgid ".NFI Download failed:"
 msgstr ".NFI Download fehlgeschlagen:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-"Die Signatur-Überprüfung der .NFI-Datei war erfolgreich. Sie können diese "
-"Datei ohne Bedenken installieren!"
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr "Die Signatur-Überprüfung der .NFI-Datei war erfolgreich. Sie können diese Datei ohne Bedenken installieren!"
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 Verzeichnis"
@@ -218,10 +215,10 @@ msgid "/var directory"
 msgstr "/var Verzeichnis"
 
 msgid "0"
-msgstr ""
+msgstr "0"
 
 msgid "1"
-msgstr ""
+msgstr "1"
 
 msgid "1 wireless network found!"
 msgstr "1 Funk Netzwerk gefunden!"
@@ -242,19 +239,19 @@ msgid "13 V"
 msgstr "13 V"
 
 msgid "16:10"
-msgstr ""
+msgstr "16:10"
 
 msgid "16:10 Letterbox"
-msgstr ""
+msgstr "16:10 Letterbox"
 
 msgid "16:10 PanScan"
-msgstr ""
+msgstr "16:10 PanScan"
 
 msgid "16:9"
 msgstr "16:9"
 
 msgid "16:9 Letterbox"
-msgstr ""
+msgstr "16:9 Letterbox"
 
 msgid "16:9 always"
 msgstr "immer 16:9"
@@ -263,49 +260,49 @@ msgid "18 V"
 msgstr "18 V"
 
 msgid "2"
-msgstr ""
+msgstr "2"
 
 msgid "3"
-msgstr ""
+msgstr "3"
 
 msgid "30 minutes"
 msgstr "30 Minuten"
 
 msgid "4"
-msgstr ""
+msgstr "4"
 
 msgid "4:3"
-msgstr ""
+msgstr "4:3"
 
 msgid "4:3 Letterbox"
-msgstr ""
+msgstr "4:3 Letterbox"
 
 msgid "4:3 PanScan"
-msgstr ""
+msgstr "4:3 PanScan"
 
 msgid "5"
-msgstr ""
+msgstr "5"
 
 msgid "5 minutes"
 msgstr "5 Minuten"
 
 msgid "50 Hz"
-msgstr ""
+msgstr "50 Hz"
 
 msgid "6"
-msgstr ""
+msgstr "6"
 
 msgid "60 minutes"
 msgstr "60 Minuten"
 
 msgid "7"
-msgstr ""
+msgstr "7"
 
 msgid "8"
-msgstr ""
+msgstr "8"
 
 msgid "9"
-msgstr ""
+msgstr "9"
 
 msgid "<unknown>"
 msgstr "<unbekannt>"
@@ -356,19 +353,11 @@ msgstr ""
 "Zurzeit läuft eine Aufnahme.\n"
 "Was möchten Sie tun?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Zurzeit läuft eine Aufnahme. Bitte beenden Sie die Aufnahme, bevor Sie das "
-"Rotor-Setup ausführen."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Zurzeit läuft eine Aufnahme. Bitte beenden Sie die Aufnahme, bevor Sie das Rotor-Setup ausführen."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Zurzeit läuft eine Aufnahme. Bitte beenden Sie diese Aufnahme, bevor Sie den "
-"Sat-Finder starten."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Zurzeit läuft eine Aufnahme. Bitte beenden Sie diese Aufnahme, bevor Sie den Sat-Finder starten."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -411,10 +400,10 @@ msgid "AC3 default"
 msgstr "AC3 standardmäßig"
 
 msgid "AC3 downmix"
-msgstr ""
+msgstr "AC3 downmix"
 
 msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
 
 msgid "About"
 msgstr "Über"
@@ -470,9 +459,7 @@ msgstr "Zum Bouquet hinzufügen"
 msgid "Add to favourites"
 msgstr "Zu Favoriten hinfügen"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
 msgstr ""
 
 msgid "Adds network configuration if enabled."
@@ -481,17 +468,8 @@ msgstr ""
 msgid "Adds wlan configuration if enabled."
 msgstr ""
 
-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 ""
-"Verändern Sie die Farbeinstellungen, so dass Sie alle Farbabstufungen "
-"voneinander unterscheiden können, diese aber so gesättigt wie möglich "
-"dargestellt werden. Wenn Sie mit dem Ergebnis zufrieden sind, drücken Sie "
-"OK, um die Feineinstellungen zu beenden. Mit den Zahlentasten können Sie "
-"weitere Testbilder auswählen."
+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 "Verändern Sie die Farbeinstellungen, so dass Sie alle Farbabstufungen voneinander unterscheiden können, diese aber so gesättigt wie möglich dargestellt werden. Wenn Sie mit dem Ergebnis zufrieden sind, drücken Sie OK, um die Feineinstellungen zu beenden. Mit den Zahlentasten können Sie weitere Testbilder auswählen."
 
 msgid "Advanced"
 msgstr "Erweitert"
@@ -511,13 +489,8 @@ msgstr "Erweiterte Wiederherstellung"
 msgid "After event"
 msgstr "Nach dem Ereignis"
 
-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 ""
-"Nachdem der Startassistent beendet wurde, müssen Sie noch die einzelnen "
-"Sender schützen. Wie Sie dies tun können, entnehmen Sie bitte dem Handbuch "
-"Ihrer Dreambox."
+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 "Nachdem der Startassistent beendet wurde, müssen Sie noch die einzelnen Sender schützen. Wie Sie dies tun können, entnehmen Sie bitte dem Handbuch Ihrer Dreambox."
 
 msgid "Album"
 msgstr "Album"
@@ -583,6 +556,8 @@ msgid ""
 "Are you sure you want to restore your Enigma2 backup?\n"
 "Enigma2 will restart after the restore"
 msgstr ""
+"Wollen Sie wirklich ihr Enigma2 Backup wiederherstellen ?\n"
+"Enigma2 wird danach neu gestartet !"
 
 msgid "Artist"
 msgstr "Künstler"
@@ -639,7 +614,7 @@ msgid "BB"
 msgstr "BB"
 
 msgid "BER"
-msgstr ""
+msgstr "BER"
 
 msgid "BER:"
 msgstr "BER:"
@@ -648,7 +623,7 @@ msgid "Back"
 msgstr "Zurück"
 
 msgid "Background"
-msgstr ""
+msgstr "Hintergrund"
 
 msgid "Backup"
 msgstr "Sicherung"
@@ -666,8 +641,7 @@ msgid "Backup failed."
 msgstr "Sicherung fehlgeschlagen."
 
 msgid "Backup is done. Please press OK to see the result."
-msgstr ""
-"Sicherung wurde durchgeführt. Bitte drücken Sie OK, um das Ergebnis zu sehen."
+msgstr "Sicherung wurde durchgeführt. Bitte drücken Sie OK, um das Ergebnis zu sehen."
 
 msgid "Backup is running..."
 msgstr ""
@@ -706,10 +680,10 @@ msgid "Block noise reduction"
 msgstr ""
 
 msgid "Blue boost"
-msgstr ""
+msgstr "Blauanteil erhöhen"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Lesezeichen"
 
 msgid "Brightness"
 msgstr "Helligkeit"
@@ -726,13 +700,11 @@ msgstr "Auf DVD brennen..."
 msgid "Bus: "
 msgstr "Bus:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
 msgstr "Durch Drücken der OK-Taste wird die Infobar angezeigt."
 
 msgid "C"
-msgstr ""
+msgstr "C"
 
 msgid "C-Band"
 msgstr "C-Band"
@@ -915,10 +887,10 @@ msgid "Common Interface Assignment"
 msgstr ""
 
 msgid "CommonInterface"
-msgstr ""
+msgstr "Common Interface"
 
 msgid "Communication"
-msgstr ""
+msgstr "Kommunikation"
 
 msgid "Compact Flash"
 msgstr "Compact Flash"
@@ -994,7 +966,7 @@ msgid "Content does not fit on DVD!"
 msgstr "Inhalt passt nicht auf die DVD!"
 
 msgid "Continue"
-msgstr ""
+msgstr "Weiter"
 
 msgid "Continue in background"
 msgstr "Im Hintergrund fortsetzen"
@@ -1006,9 +978,7 @@ msgid "Contrast"
 msgstr "Kontrast"
 
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
-msgstr ""
-"Verbindung zum Dreambox .NFI Image Feed Server konnte nicht hergestellt "
-"werden:"
+msgstr "Verbindung zum Dreambox .NFI Image Feed Server konnte nicht hergestellt werden:"
 
 msgid "Could not load Medium! No disc inserted?"
 msgstr "Konnte das Medium nicht laden! Keine DVD eingelegt?"
@@ -1089,10 +1059,10 @@ msgid "Czech"
 msgstr "Tschechisch"
 
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 msgid "DVB-S"
 msgstr "DVB-S"
@@ -1104,7 +1074,7 @@ msgid "DVD File Browser"
 msgstr ""
 
 msgid "DVD Player"
-msgstr ""
+msgstr "DVD Player"
 
 msgid "DVD Titlelist"
 msgstr ""
@@ -1134,7 +1104,7 @@ msgid "Default"
 msgstr ""
 
 msgid "Default Settings"
-msgstr ""
+msgstr "Voreinstellungen"
 
 msgid "Default services lists"
 msgstr "Standard Kanallisten"
@@ -1199,7 +1169,7 @@ msgid "DiSEqC-Tester settings"
 msgstr ""
 
 msgid "Dialing:"
-msgstr ""
+msgstr "Wählen:"
 
 msgid "Digital contour removal"
 msgstr ""
@@ -1233,7 +1203,7 @@ msgid "Disabled"
 msgstr "Ausgeschaltet"
 
 msgid "Disconnect"
-msgstr ""
+msgstr "Trennen"
 
 #, python-format
 msgid ""
@@ -1344,9 +1314,7 @@ msgstr "Wollen Sie die Einstellungen wiederherstellen?"
 msgid "Do you want to resume this playback?"
 msgstr "Möchten Sie die Wiedergabe an der letzten Stelle fortsetzen?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
 msgstr ""
 
 msgid "Do you want to update your Dreambox?"
@@ -1381,8 +1349,7 @@ msgstr "Beendet - %d installierte oder aktualisierte Pakete mit %d Fehlern"
 
 #, python-format
 msgid "Done - Installed, upgraded or removed %d packages with %d errors"
-msgstr ""
-"Beendet - %d Pakete mit %d Fehlern installiert, aktualisiert oder entfernt"
+msgstr "Beendet - %d Pakete mit %d Fehlern installiert, aktualisiert oder entfernt"
 
 msgid "Download"
 msgstr "Herunterladen"
@@ -1418,7 +1385,7 @@ msgid "Dutch"
 msgstr "Holländisch"
 
 msgid "Dynamic contrast"
-msgstr ""
+msgstr "Dynamischer Kontrast"
 
 msgid "E"
 msgstr "O"
@@ -1590,7 +1557,7 @@ msgid "Execution finished!!"
 msgstr "Ausführung beendet!"
 
 msgid "Exif"
-msgstr ""
+msgstr "Exif"
 
 msgid "Exit"
 msgstr "Beenden"
@@ -1667,11 +1634,8 @@ msgstr "Netzwerkneustart abgeschlossen"
 msgid "Finnish"
 msgstr "Finnisch"
 
-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 "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 ""
@@ -1686,7 +1650,7 @@ msgid "Format"
 msgstr "Formatieren"
 
 msgid "Frame repeat count during non-smooth winding"
-msgstr ""
+msgstr "Einzelbild-Wiederholung beim nicht flüssigen Spulen"
 
 msgid "Frame size in full view"
 msgstr ""
@@ -1743,13 +1707,13 @@ msgid "General AC3 Delay"
 msgstr "Allgemeine AC3 Verzögerung"
 
 msgid "General AC3 delay"
-msgstr ""
+msgstr "Allgemeine AC3 Verzögerung"
 
 msgid "General PCM Delay"
 msgstr "Allgemeine PCM Verzögerung"
 
 msgid "General PCM delay"
-msgstr ""
+msgstr "Allgemeine PCM Verzögerung"
 
 msgid "Genre"
 msgstr "Kategorie"
@@ -1773,7 +1737,7 @@ msgid "Greek"
 msgstr "Griechisch"
 
 msgid "Green boost"
-msgstr ""
+msgstr "Grünanteil erhöhen"
 
 msgid "Guard Interval"
 msgstr ""
@@ -1806,7 +1770,7 @@ msgid "High bitrate support"
 msgstr "Kann hohe Datenraten verarbeiten"
 
 msgid "Horizontal"
-msgstr ""
+msgstr "Horizontal"
 
 msgid "How many minutes do you want to record?"
 msgstr "Wie viele Minuten möchten Sie aufnehmen?"
@@ -1844,24 +1808,13 @@ msgstr ""
 "drücken, um zurückzuspringen."
 
 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 ""
-"Falls Ihr Fernseher über Helligkeits- oder Kontraststeigerung verfügt, "
-"deaktivieren Sie diese. Falls es eine \"Dynamik\"-Einstellung gibt, sollte "
-"sie auf Standard gesetzt werden. Verändern Sie die Intensität der "
-"Hintergrundbeleuchtung nach Ihrem Geschmack. Verringern Sie den Kontrast "
-"Ihres Fernsehers soweit wie möglich.\n"
-"Verringern Sie anschließend die Helligkeit soweit wie möglich. Stellen Sie "
-"dabei sicher, dass die beiden untersten Grauschattierungen erkennbar "
-"bleiben. Die hellen Schattierungen werden im folgenden Schritt eingestellt.\n"
+"Falls Ihr Fernseher über Helligkeits- oder Kontraststeigerung verfügt, deaktivieren Sie diese. Falls es eine \"Dynamik\"-Einstellung gibt, sollte sie auf Standard gesetzt werden. Verändern Sie die Intensität der Hintergrundbeleuchtung nach Ihrem Geschmack. Verringern Sie den Kontrast Ihres Fernsehers soweit wie möglich.\n"
+"Verringern Sie anschließend die Helligkeit soweit wie möglich. Stellen Sie dabei sicher, dass die beiden untersten Grauschattierungen erkennbar bleiben. Die hellen Schattierungen werden im folgenden Schritt eingestellt.\n"
 "Drücken Sie OK, wenn Sie mit dem Ergebnis zufrieden sind."
 
 msgid "Image flash utility"
@@ -1873,11 +1826,8 @@ msgstr "Image-Aktualisierung"
 msgid "In Progress"
 msgstr "In Bearbeitung"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Um die Timeraufnahme durchführen zu können, wurde auf den aufzunehmenden "
-"Sender umgeschaltet!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Um die Timeraufnahme durchführen zu können, wurde auf den aufzunehmenden Sender umgeschaltet!\n"
 
 msgid "Include your email and name (optional) in the mail?"
 msgstr ""
@@ -1916,7 +1866,7 @@ msgid "Input"
 msgstr "Eingabe"
 
 msgid "Install"
-msgstr ""
+msgstr "Installiere"
 
 msgid "Install a new image with a USB stick"
 msgstr "Neues Image mittels USB Stick installieren"
@@ -1928,7 +1878,7 @@ msgid "Install extensions."
 msgstr ""
 
 msgid "Install local extension"
-msgstr ""
+msgstr "Erweiterungen installieren"
 
 msgid "Install or remove finished."
 msgstr ""
@@ -1987,7 +1937,7 @@ msgid "Invert display"
 msgstr "Display invertieren"
 
 msgid "Ipkg"
-msgstr ""
+msgstr "Ipkg"
 
 msgid "Is this videomode ok?"
 msgstr "Diesen Videomodus beibehalten?"
@@ -1998,7 +1948,8 @@ msgstr "Italienisch"
 msgid "Job View"
 msgstr "Jobansicht"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this
+#. breaks the aspect)
 msgid "Just Scale"
 msgstr ""
 
@@ -2045,7 +1996,7 @@ msgid "Latitude"
 msgstr "Breitengrad"
 
 msgid "Latvian"
-msgstr ""
+msgstr "Lettisch"
 
 msgid "Leave DVD Player?"
 msgstr "DVD Player beenden?"
@@ -2053,7 +2004,8 @@ msgstr "DVD Player beenden?"
 msgid "Left"
 msgstr "Links"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep
+#. english term.
 msgid "Letterbox"
 msgstr ""
 
@@ -2221,7 +2173,7 @@ msgid "Multi EPG"
 msgstr "Multi-EPG"
 
 msgid "Multimedia"
-msgstr ""
+msgstr "Multimedia"
 
 msgid "Multiple service support"
 msgstr "Kann mehrere Sender entschlüsseln"
@@ -2269,7 +2221,7 @@ msgid "Netmask"
 msgstr "Netzmaske"
 
 msgid "Network"
-msgstr ""
+msgstr "Netzwerk"
 
 msgid "Network Configuration..."
 msgstr "Netzwerk Konfiguration"
@@ -2350,7 +2302,7 @@ msgstr ""
 "(Zeit lief beim Lesen der PAT ab)"
 
 msgid "No description available."
-msgstr ""
+msgstr "Keine Beschreibung verfügbar."
 
 msgid "No details for this image file"
 msgstr "Keine Details zum Image verfügbar"
@@ -2367,11 +2319,8 @@ msgstr "Kein freier Tuner"
 msgid "No networks found"
 msgstr ""
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Es wurden noch keine Pakete aktualisiert. Bitte überprüfen Sie das Netzwerk "
-"und versuchen Sie es erneut."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Es wurden noch keine Pakete aktualisiert. Bitte überprüfen Sie das Netzwerk und versuchen Sie es erneut."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr ""
@@ -2388,8 +2337,7 @@ msgid "No tags are set on these movies."
 msgstr ""
 
 msgid "No tuner is configured for use with a diseqc positioner!"
-msgstr ""
-"Es wurde kein Tuner für die Benutzung eines DiSEqC-Rotors konfiguriert."
+msgstr "Es wurde kein Tuner für die Benutzung eines DiSEqC-Rotors konfiguriert."
 
 msgid ""
 "No tuner is enabled!\n"
@@ -2424,26 +2372,21 @@ msgstr ""
 
 msgid ""
 "No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
+"Please verify that you have attached a network cable and your network is configured correctly."
 msgstr ""
 "Kein funktionierender Netzwerkadapter gefunden.\n"
-"Stellen Sie sicher, dass Sie ein Netzwerkkabel angeschlossen haben und das "
-"Ihr Netzwerk richtig konfiguriert ist."
+"Stellen Sie sicher, dass Sie ein Netzwerkkabel angeschlossen haben und das Ihr Netzwerk richtig konfiguriert ist."
 
 msgid ""
 "No working wireless network adapter found.\n"
-"Please verify that you have attached a compatible WLAN device and your "
-"network is configured correctly."
+"Please verify that you have attached a compatible WLAN device and your network is configured correctly."
 msgstr ""
 "Kein funktionierende WLAN Netzwerkadapter gefunden.\n"
-"Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben oder "
-"aktivieren Sie den internen Netzwerkadapter."
+"Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben oder aktivieren Sie den internen Netzwerkadapter."
 
 msgid ""
 "No working wireless network interface found.\n"
-" Please verify that you have attached a compatible WLAN device or enable "
-"your local network interface."
+" Please verify that you have attached a compatible WLAN device or enable your local network interface."
 msgstr ""
 
 msgid "No, but restart from begin"
@@ -2467,7 +2410,8 @@ msgstr ""
 msgid "None"
 msgstr "Keins"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching
+#. the left/right)
 msgid "Nonlinear"
 msgstr "Nicht linear"
 
@@ -2478,12 +2422,8 @@ msgid "Norwegian"
 msgstr "Norwegisch"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Nicht genügend freier Speicherplatz. Bitte löschen Sie nicht mehr benötigte "
-"Dateien und versuchen es erneut. (%d MB benötigt, %d MB verfügbar)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Nicht genügend freier Speicherplatz. Bitte löschen Sie nicht mehr benötigte Dateien und versuchen es erneut. (%d MB benötigt, %d MB verfügbar)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2495,15 +2435,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Wiedergabe läuft"
 
-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 ""
-"Benutzen Sie jetzt die Kontrastregelung, um die Helligkeit des Hintergrunds "
-"so weit wie möglich zu erhöhen. Achten Sie darauf, dass der Unterschied "
-"zwischen den beiden hellsten Schattierungen erkennbar bleibt. Drücken Sie "
-"anschließend 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 "Benutzen Sie jetzt die Kontrastregelung, um die Helligkeit des Hintergrunds so weit wie möglich zu erhöhen. Achten Sie darauf, dass der Unterschied zwischen den beiden hellsten Schattierungen erkennbar bleibt. Drücken Sie anschließend OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2551,7 +2484,7 @@ msgid "PIDs"
 msgstr "PIDs"
 
 msgid "Package details for: "
-msgstr ""
+msgstr "Paketdetails für:"
 
 msgid "Package list update"
 msgstr "Paketlistenaktualisierung"
@@ -2571,7 +2504,8 @@ msgstr ""
 msgid "Page"
 msgstr "Seite"
 
-#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
+#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt,
+#. keep english term
 msgid "Pan&Scan"
 msgstr ""
 
@@ -2591,13 +2525,13 @@ msgid "Parental control type"
 msgstr "Jugendschutz-Typ"
 
 msgid "Password"
-msgstr ""
+msgstr "Passwort"
 
 msgid "Pause movie at end"
 msgstr "Am Filmende pausieren"
 
 msgid "Phone number"
-msgstr ""
+msgstr "Telefonnummer"
 
 msgid "PiPSetup"
 msgstr "PiP-Einstellung"
@@ -2605,7 +2539,8 @@ msgstr "PiP-Einstellung"
 msgid "PicturePlayer"
 msgstr "Bildbetrachter"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep
+#. english term.
 msgid "Pillarbox"
 msgstr ""
 
@@ -2622,10 +2557,10 @@ msgid "Play Audio-CD..."
 msgstr "Audio-CD abspielen"
 
 msgid "Play DVD"
-msgstr ""
+msgstr "DVD abspielen"
 
 msgid "Play Music..."
-msgstr ""
+msgstr "Musik abspielen..."
 
 msgid "Play recorded movies..."
 msgstr "Aufgenommene Filme abspielen..."
@@ -2643,8 +2578,7 @@ msgid "Please check your network settings!"
 msgstr "Bitte überprüfen Sie Ihre Netzwerkeinstellungen"
 
 msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
-"Bitte wählen Sie eine .NFI Image Datei zum Herunterladen vom Feed-Server"
+msgstr "Bitte wählen Sie eine .NFI Image Datei zum Herunterladen vom Feed-Server"
 
 msgid "Please choose an extension..."
 msgstr "Bitte eine Erweiterung auswählen..."
@@ -2653,31 +2587,24 @@ 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 configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Konfigurieren Sie Ihre DNS-Server durch Ausfüllen der entsprechenden Werte.\n"
 "Drücken Sie OK zum Fortfahren"
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
 "Konfigurieren Sie Ihr Netzwerk durch Ausfüllen der entsprechenden Werte.\n"
 "Drücken Sie OK zum Fortfahren"
 
-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 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!"
@@ -2712,9 +2639,7 @@ msgstr ""
 msgid "Please follow the instructions on the TV"
 msgstr "Bitte folgen Sie den Angaben auf Ihrem Fernseher."
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
 msgstr ""
 
 msgid "Please press OK to continue."
@@ -2757,13 +2682,11 @@ msgid "Please select the movie path..."
 msgstr "Bitte den Filmpfad angeben..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
-"Bitte wählen Sie die Netzwerkschnittstelle welche Sie für Ihren "
-"Internetzugang nutzen möchten.\n"
+"Bitte wählen Sie die Netzwerkschnittstelle welche Sie für Ihren Internetzugang nutzen möchten.\n"
 "\n"
 "Drücken Sie OK zum Fortfahren"
 
@@ -2794,12 +2717,8 @@ msgstr ""
 "Bouquet +/-, um die Größe zu ändern.\n"
 "OK zum Speichern, Exit zum Abbrechen."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. "
-"Danach drücken Sie bitte OK."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. Danach drücken Sie bitte OK."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Bitte warten während die Netzwerkkonfiguration aktiviert wird..."
@@ -2944,7 +2863,7 @@ msgid "Priority"
 msgstr "Priorität"
 
 msgid "Process"
-msgstr ""
+msgstr "Aktivitätsanzeige"
 
 msgid "Properties of current title"
 msgstr "Eigenschaften des ausgewählten Titels"
@@ -3035,7 +2954,7 @@ msgid "Recording(s) are in progress or coming up in few seconds!"
 msgstr "Zur Zeit sind Aufnahmen aktiv oder starten gleich!"
 
 msgid "Recordings"
-msgstr ""
+msgstr "Aufnahmen"
 
 msgid "Recordings always have priority"
 msgstr "Aufnahmen haben immer Vorrang"
@@ -3169,12 +3088,8 @@ msgstr "Sicherung läuft"
 msgid "Restore system settings"
 msgstr "Einstellungen wiederherstellen"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Die Einstellungen wurden wiederhergestellt. Drücken Sie OK, um die "
-"wiederhergestellten Einstellungen nun zu aktivieren."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Die Einstellungen wurden wiederhergestellt. Drücken Sie OK, um die wiederhergestellten Einstellungen nun zu aktivieren."
 
 msgid "Resume from last position"
 msgstr "An letzter Position fortsetzen"
@@ -3253,7 +3168,7 @@ msgid "Satteliteequipment"
 msgstr ""
 
 msgid "Saturation"
-msgstr ""
+msgstr "Sättigung"
 
 msgid "Saturday"
 msgstr "Samstag"
@@ -3339,20 +3254,13 @@ msgstr "Durchsuche US MID"
 msgid "Scan band US SUPER"
 msgstr "Durchsuche US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
 msgstr ""
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Durchsucht Ihr Netzwerk nach WLAN Zugangspunkten und stellt eine Verbindung "
-"mit Hilfe Ihres gewählten WLAN Gerätes her.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Durchsucht Ihr Netzwerk nach WLAN Zugangspunkten und stellt eine Verbindung mit Hilfe Ihres gewählten WLAN Gerätes her.\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 ""
 
 msgid "Search east"
@@ -3521,7 +3429,7 @@ msgid "Setup Mode"
 msgstr "Benutzermodus"
 
 msgid "Sharpness"
-msgstr ""
+msgstr "Schärfe"
 
 msgid "Show Info"
 msgstr "Zeige Infos"
@@ -3636,7 +3544,7 @@ msgid "Software manager"
 msgstr ""
 
 msgid "Software restore"
-msgstr ""
+msgstr "Software wiederherstellen"
 
 msgid "Software update"
 msgstr ""
@@ -3803,7 +3711,8 @@ msgstr "Symbolrate"
 msgid "System"
 msgstr "System"
 
-#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
+#. TRANSLATORS: Add here whatever should be shown in the "translator" about
+#. screen, up to 6 lines (use \n for newline)
 msgid "TRANSLATOR_INFO"
 msgstr ""
 
@@ -3860,26 +3769,14 @@ 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 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 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 ""
-"Die Sicherung ist fehlgeschlagen. Bitte einen anderen Sicherungs-Ort "
-"auswählen."
+msgstr "Die Sicherung ist fehlgeschlagen. Bitte einen anderen Sicherungs-Ort auswählen."
 
 #, python-format
 msgid ""
@@ -3896,37 +3793,25 @@ msgstr ""
 "Soll der USB-Flasher auf diesen Stick installiert werden?"
 
 msgid "The following files were found..."
-msgstr ""
+msgstr "Die folgenden Dateien wurden gefunden..."
 
 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 ""
 "Der Videoeingang sollte nun konfiguriert sein.\n"
-"Sie können nun für weitere Bildschirmeinstellungen einige Testbilder "
-"anzeigen lassen. Möchten Sie dies jetzt machen?"
+"Sie können nun für weitere Bildschirmeinstellungen einige Testbilder anzeigen lassen. Möchten Sie dies jetzt machen?"
 
 msgid "The installation of the default services lists is finished."
 msgstr "Die Installation der Standard-Kanallisten wurde abgeschlossen."
 
-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 ""
-"Die Installation der Standardeinstellungen wurde beendet. Sie können nun mit "
-"der Konfiguration Ihrer Dreambox fortfahren, indem Sie die OK-Taste auf "
-"Ihrer Fernbedienung drücken."
+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 "Die Installation der Standardeinstellungen wurde beendet. Sie können nun mit der Konfiguration Ihrer Dreambox fortfahren, indem Sie die OK-Taste auf Ihrer Fernbedienung drücken."
 
-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!"
+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 ""
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
 msgstr ""
 
 msgid "The package doesn't contain anything."
@@ -3959,8 +3844,7 @@ msgid "The sleep timer has been disabled."
 msgstr "Der Ausschalt-Timer wurde deaktiviert"
 
 msgid "The timer file (timers.xml) is corrupt and could not be loaded."
-msgstr ""
-"Die Timer-Datei (timers.xml) ist kaputt und konnte nicht geladen werden."
+msgstr "Die Timer-Datei (timers.xml) ist kaputt und konnte nicht geladen werden."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -3976,17 +3860,14 @@ msgstr ""
 "das Wireless LAN plugin ist nicht installiert!\n"
 "Bitte installieren Sie es."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Der Assistent kann jetzt Ihre Einstellungen sichern. Wollen Sie dies nun "
-"durchführen?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Der Assistent kann jetzt Ihre Einstellungen sichern. Wollen Sie dies nun durchführen?"
 
 msgid "The wizard is finished now."
 msgstr "Der Assistent ist nun beendet."
 
 msgid "There are at least "
-msgstr ""
+msgstr "Es gibt mindestens"
 
 msgid "There are no default services lists in your image."
 msgstr "Es befinden sich keine Standard-Kanallisten in Ihrer Firmware."
@@ -4009,7 +3890,7 @@ msgstr ""
 "Wollen Sie wirklich fortfahren?"
 
 msgid "There was an error downloading the packetlist. Please try again."
-msgstr ""
+msgstr "Beim Herunterladen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
 
 msgid "There was an error. The package:"
 msgstr ""
@@ -4018,27 +3899,14 @@ msgstr ""
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr ""
 
-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 ""
-"Diese .NFI Datei besitzt keine md5sum Signatur und es kann nicht "
-"sichergestellt werden, dass sie funktioniert.Wollen Sie die Datei trotzdem "
-"in den Flash-Speicher schreiben?"
+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 "Diese .NFI Datei besitzt keine md5sum Signatur und es kann nicht sichergestellt werden, dass sie funktioniert.Wollen Sie die Datei trotzdem in den Flash-Speicher schreiben?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Diese .NFI Datei besitzt eine gültige md5 Signatur. Wollen Sie mit dem "
-"Beschreiben des Flash-Speichers fortfahren?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Diese .NFI Datei besitzt eine gültige md5 Signatur. Wollen Sie mit dem Beschreiben des Flash-Speichers fortfahren?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Dieses wiederbeschreibbare Medium ist bereits formatiert - durch eine "
-"Neuformatierung wird der gesamte Inhalt gelöscht"
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Dieses wiederbeschreibbare Medium ist bereits formatiert - durch eine Neuformatierung wird der gesamte Inhalt gelöscht"
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4070,14 +3938,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 ""
 "Dieser Test sucht nach konfigurierten Nameservern\n"
 "Wenn Sie eine \"Unbestätigt\"-Meldung erhalten:\n"
 "- Überprüfen Sie Ihr DHCP, Ihre Verkabelung und Ihre Adapter-Konfiguration.\n"
-"- Haben Sie Ihre Namensserver manuell konfiguriert, überprüfen Sie bitte "
-"Ihre Konfiguration in den \"DNS\"-Einstellungen"
+"- Haben Sie Ihre Namensserver manuell konfiguriert, überprüfen Sie bitte Ihre Konfiguration in den \"DNS\"-Einstellungen"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4102,25 +3968,19 @@ msgstr ""
 "- Überprüfen Sie Ihr DHCP, Ihre Verkabelung und Ihre Adapter-Konfiguration."
 
 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 ""
-"Dieser Test überprüft, ob Ihr Netzwerkadapter für automatische IP-Adressen-"
-"Konfiguration über DHCP eingerichtet ist.\n"
+"Dieser Test überprüft, ob Ihr Netzwerkadapter für automatische IP-Adressen-Konfiguration über DHCP eingerichtet ist.\n"
 "Wenn Sie eine \"Deaktiviert\"-Meldung erhalten:\n"
-"- Dann ist Ihr Netzwerkadapter für manuelle IP-Adressen-Konfiguration "
-"eingerichtet.\n"
-"- Überprüfen Sie die Richtigkeit Ihrer Einstellungen im Netzwerkadapter-"
-"Einstellungen-Menü.\n"
+"- Dann ist Ihr Netzwerkadapter für manuelle IP-Adressen-Konfiguration eingerichtet.\n"
+"- Überprüfen Sie die Richtigkeit Ihrer Einstellungen im Netzwerkadapter-Einstellungen-Menü.\n"
 "Wenn Sie eine \"Aktiviert\"-Meldung erhalten:\n"
-"- Überprüfen Sie, dass sich ein funktionierender DHCP-Server in Ihrem "
-"Netzwerk befindet."
+"- Überprüfen Sie, dass sich ein funktionierender DHCP-Server in Ihrem Netzwerk befindet."
 
 msgid "This test detects your configured LAN-Adapter."
 msgstr "Dieser Test stellt Ihren konfigurierten Netzwerkadapter fest."
@@ -4135,7 +3995,7 @@ msgid "Thu"
 msgstr "Do"
 
 msgid "Thumbnails"
-msgstr ""
+msgstr "Vorschaubilder"
 
 msgid "Thursday"
 msgstr "Donnerstag"
@@ -4203,18 +4063,13 @@ msgstr "Titleset"
 
 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"
+"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"
+"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"
@@ -4314,7 +4169,7 @@ msgid "USB stick wizard"
 msgstr "USB Stick Assistent"
 
 msgid "Ukrainian"
-msgstr ""
+msgstr "Ukrainisch"
 
 msgid ""
 "Unable to complete filesystem check.\n"
@@ -4368,9 +4223,7 @@ msgid "Updating finished. Here is the result:"
 msgstr "Aktualisierung beendet. Hier das Ergebnis:"
 
 msgid "Updating... Please wait... This can take some minutes..."
-msgstr ""
-"Update wird durchgeführt... Bitte warten... Der Vorgang kann einige Minuten "
-"dauern."
+msgstr "Update wird durchgeführt... Bitte warten... Der Vorgang kann einige Minuten dauern."
 
 msgid "Upgrade finished."
 msgstr "Upgrade beendet."
@@ -4417,12 +4270,8 @@ msgstr ""
 "\n"
 "Einstellungen für Tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Mit den hoch/runter-Tasten können Sie eine Option auswählen. Danach bitte OK "
-"drücken."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Mit den hoch/runter-Tasten können Sie eine Option auswählen. Danach bitte OK drücken."
 
 msgid "Use this video enhancement settings?"
 msgstr ""
@@ -4443,7 +4292,7 @@ msgid "User defined"
 msgstr "Benutzerdefiniert"
 
 msgid "Username"
-msgstr ""
+msgstr "Benutzername"
 
 msgid "VCR scart"
 msgstr "Scart-Videorekorder"
@@ -4470,26 +4319,24 @@ msgid "Video Wizard"
 msgstr "Video-Assistent"
 
 msgid "Video enhancement preview"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen Vorschau"
 
 msgid "Video enhancement settings"
 msgstr ""
 
 msgid "Video enhancement setup"
-msgstr ""
+msgstr "Erweiterte A/V-Einstellungen"
 
 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 ""
 "Auswahl des Videoeingangs\n"
 "\n"
-"Bitte drücken Sie OK, wenn Sie diese Seite auf Ihrem Fernseher sehen können "
-"(oder wählen Sie einen anderen Eingang aus).\n"
+"Bitte drücken Sie OK, wenn Sie diese Seite auf Ihrem Fernseher sehen können (oder wählen Sie einen anderen Eingang aus).\n"
 "\n"
 "Der nächste Videoeingang wird automatisch nach 10 Sekunden getestet."
 
@@ -4590,13 +4437,10 @@ msgid "Warn if free space drops below (kB):"
 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"
+"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 ""
-"Wir testen nun, ob Ihr Fernseher diese Auflösung bei 50Hz darstellen kann. "
-"Sollte das Bild schwarz werden, so warten Sie bitte 20 Sekunden, um "
-"automatisch auf 60Hz zurückzuschalten.\n"
+"Wir testen nun, ob Ihr Fernseher diese Auflösung bei 50Hz darstellen kann. Sollte das Bild schwarz werden, so warten Sie bitte 20 Sekunden, um automatisch auf 60Hz zurückzuschalten.\n"
 "Bitte drücken Sie OK, um zu beginnen."
 
 msgid "Wed"
@@ -4611,43 +4455,32 @@ msgstr "Wochentag"
 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 ""
 
-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 ""
-"Willkommen im Image-Upgrade-Assistenten. Der Assistent wird Ihnen bei der "
-"Aktualisierung der Firmware helfen. Sie können mit diesem Assistenten die "
-"aktuellen Einstellungen sichern und bekommen eine kleine Einweisung, wie Sie "
-"die Firmware aktualisieren können."
+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 "Willkommen im Image-Upgrade-Assistenten. Der Assistent wird Ihnen bei der Aktualisierung der Firmware helfen. Sie können mit diesem Assistenten die aktuellen Einstellungen sichern und bekommen eine kleine Einweisung, wie Sie die Firmware aktualisieren können."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
 
 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"
+"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 OK to start configuring your network"
 msgstr ""
 "Willkommen.\n"
 "\n"
-"Wenn Sie Ihre Dreambox mit dem Internet verbinden möchten, wird Sie dieser "
-"Assistent durch die grundlegenden Netzwerkeinstellungen führen.\n"
+"Wenn Sie Ihre Dreambox mit dem Internet verbinden möchten, wird Sie dieser Assistent durch die grundlegenden Netzwerkeinstellungen führen.\n"
 "\n"
 "Drücken Sie OK um Ihr Netzwerk zu konfigurieren"
 
@@ -4659,8 +4492,7 @@ msgid ""
 msgstr ""
 "Willkommen.\n"
 "\n"
-"Der Startassistent wird Sie durch die Grundeinstellungen Ihrer Dreambox "
-"führen.\n"
+"Der Startassistent wird Sie durch die Grundeinstellungen Ihrer Dreambox führen.\n"
 "Drücken Sie OK auf Ihrer Fernbedienung, um zum nächsten Schritt zu gelangen."
 
 msgid "Welcome..."
@@ -4678,13 +4510,11 @@ msgstr ""
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
-"Wenn Sie die Werkseinstellungen wiederherstellen, verlieren Sie sämtliche "
-"Konfigurationsdateien\n"
+"Wenn Sie die Werkseinstellungen wiederherstellen, verlieren Sie sämtliche Konfigurationsdateien\n"
 "(einschließlich Kanalliste, Tuner-Konfiguration...)\n"
 "Nach der Wiederherstellung wird die Dreambox automatisch neu starten\n"
 "\n"
@@ -4760,14 +4590,10 @@ msgid "You can cancel the installation."
 msgstr ""
 
 msgid "You can cancel the removal."
-msgstr ""
+msgstr "Sie können das Entfernen abbrechen."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Sie können jetzt einige Standardeinstellungen auswählen. Bitte wählen Sie "
-"die Einstellungen aus, die installiert werden sollen."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Sie können jetzt einige Standardeinstellungen auswählen. Bitte wählen Sie die Einstellungen aus, die installiert werden sollen."
 
 msgid "You can choose, what you want to install..."
 msgstr "Sie können wählen was Sie installieren möchten..."
@@ -4784,34 +4610,20 @@ msgstr "Löschen nicht möglich!"
 msgid "You chose not to install any default services lists."
 msgstr "Sie haben keine Standard-Kanalliste zum installieren ausgewählt."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Sie haben keine Standardeinstellung für die Installation ausgewählt, können "
-"dies aber später im Einstellungsmenü nachholen."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Sie haben keine Standardeinstellung für die Installation ausgewählt, können dies aber später im Einstellungsmenü nachholen."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Sie wählten nichts zum Installieren aus. Bitte drücken Sie OK, um den "
-"Installations-Assistenten zu beenden."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Sie wählten nichts zum Installieren aus. Bitte drücken Sie OK, um den Installations-Assistenten zu beenden."
 
-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 ""
-"Sie scheinen keine Festplatte in der Dreambox zu haben. Daher ist das "
-"Sichern auf Festplatte nicht möglich."
+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 "Sie scheinen keine Festplatte in der Dreambox zu haben. Daher ist das Sichern auf Festplatte nicht möglich."
 
 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 ""
-"Sie wollen auf eine Compact Flash-Karte sichern. Die Karte muss sich bereits "
-"vor dem Einschalten Ihrer Dreambox im Schacht befinden.\n"
+"Sie wollen auf eine Compact Flash-Karte sichern. Die Karte muss sich bereits vor dem Einschalten Ihrer Dreambox im Schacht befinden.\n"
 "Die bevorzugte Methode ist die Sicherung auf Festplatte!\n"
 "Bitte OK drücken, um die Sicherung trotzdem zu starten."
 
@@ -4819,33 +4631,19 @@ 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 ""
-"Sie wollen eine Sicherung auf ein USB-Laufwerk durchführen. Die empfohlene "
-"Methode\n"
-"ist die Sicherung auf Festplatte! Bitte drücken Sie OK, um die Sicherung zu "
-"starten."
+"Sie wollen eine Sicherung auf ein USB-Laufwerk durchführen. Die empfohlene Methode\n"
+"ist die Sicherung auf Festplatte! Bitte drücken Sie OK, um die Sicherung zu starten."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Sie wollen Ihre Einstellungen auf die Festplatte sichern. Bitte drücken Sie "
-"OK, um die Sicherung zu starten."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Sie wollen Ihre Einstellungen auf die Festplatte sichern. Bitte drücken Sie OK, um die Sicherung zu starten."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Sie haben sich entschieden Ihre Einstellungen zu sichern. Drücken Sie OK, um "
-"den Vorgang zu starten."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Sie haben sich entschieden Ihre Einstellungen zu sichern. Drücken Sie OK, um den Vorgang zu starten."
 
-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."
+msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased."
 msgstr ""
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
 msgstr ""
 
 #, python-format
@@ -4853,18 +4651,11 @@ msgid "You have to wait %s!"
 msgstr "Sie müssen %s warten!"
 
 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 ""
-"Sie müssen einen PC mit Ihrer Dreambox verbunden haben. Wenn Sie "
-"weiterführende Informationen benötigen, besuchen Sie die Webseite http://www."
-"dm7025.de.\n"
-"Die Dreambox wird nun ausgeschaltet. Nachdem Sie das Update wie auf der "
-"Webseite beschrieben durchgeführt haben, wird Sie die neue Firmware fragen, "
-"ob Sie die Einstellungen wiederherstellen wollen."
+"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 ""
+"Sie müssen einen PC mit Ihrer Dreambox verbunden haben. Wenn Sie weiterführende Informationen benötigen, besuchen Sie die Webseite http://www.dm7025.de.\n"
+"Die Dreambox wird nun ausgeschaltet. Nachdem Sie das Update wie auf der Webseite beschrieben durchgeführt haben, wird Sie die neue Firmware fragen, ob Sie die Einstellungen wiederherstellen wollen."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4889,34 +4680,22 @@ msgstr ""
 "Drücken Sie OK zum Fortfahren."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Ihre Dreambox wird neu starten nachdem Sie OK auf Ihrer Fernbedienung "
-"gedrückt haben."
+msgstr "Ihre Dreambox wird neu starten nachdem Sie OK auf Ihrer Fernbedienung gedrückt haben."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Ihr Fernseher arbeitet mit 50 Hz. Prima!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"Ihre Sicherung ist geglückt. Die Dreambox wird nun den weiteren "
-"Aktualisierungs-Prozess erklären."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "Ihre Sicherung ist geglückt. Die Dreambox wird nun den weiteren Aktualisierungs-Prozess erklären."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
 msgstr ""
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Ihre Dreambox schaltet sich nun aus. Bitte warten Sie einen Moment..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Ihre Dreambox ist nicht korrekt mit dem Internet verbunden. Bitte beheben "
-"Sie dies und versuchen Sie es dann erneut."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Ihre Dreambox ist nicht korrekt mit dem Internet verbunden. Bitte beheben Sie dies und versuchen Sie es dann erneut."
 
 msgid "Your email address:"
 msgstr ""
@@ -5007,10 +4786,10 @@ msgid "activate current configuration"
 msgstr "Aktuelle Konfiguration aktivieren"
 
 msgid "add Provider"
-msgstr ""
+msgstr "Provider hinzufügen"
 
 msgid "add Service"
-msgstr ""
+msgstr "Service hinzufügen"
 
 msgid "add a nameserver entry"
 msgstr "DNS Servereintrag hinzufügen"
@@ -5454,7 +5233,7 @@ msgid "movie list"
 msgstr "Filmliste"
 
 msgid "multinorm"
-msgstr ""
+msgstr "Multinorm"
 
 msgid "never"
 msgstr "niemals"
@@ -5871,12 +5650,8 @@ msgstr "ja"
 msgid "yes (keep feeds)"
 msgstr "ja (Feeds behalten)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"Ihre Dreambox könnte jetzt unbenutzbar sein. Bitte konsultieren Sie das "
-"Handbuch bevor Sie Ihre Dreambox rebooten."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "Ihre Dreambox könnte jetzt unbenutzbar sein. Bitte konsultieren Sie das Handbuch bevor Sie Ihre Dreambox rebooten."
 
 msgid "zap"
 msgstr "Umschalten"
@@ -5906,8 +5681,7 @@ msgstr "umgeschaltet"
 #~ "\n"
 #~ msgstr ""
 #~ "Sind Sie sicher, dass Sie die WLAN Unterstützung aktivieren wollen?\n"
-#~ "Verbinden Sie Ihren WLAN USB Stick mit der Dreambox und drücken Sie die "
-#~ "OK-Taste.\n"
+#~ "Verbinden Sie Ihren WLAN USB Stick mit der Dreambox und drücken Sie die OK-Taste.\n"
 #~ "\n"
 
 #~ msgid ""
@@ -5980,12 +5754,10 @@ msgstr "umgeschaltet"
 
 #~ msgid ""
 #~ "No working wireless network interface found.\n"
-#~ "Please verify that you have attached a compatible WLAN device or enable "
-#~ "your local network interface."
+#~ "Please verify that you have attached a compatible WLAN device or enable your local network interface."
 #~ msgstr ""
 #~ "Kein funktionierender WLAN Netzwerkadapter gefunden.\n"
-#~ "Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben "
-#~ "und das Ihr Netzwerk richtig konfiguriert ist."
+#~ "Stellen Sie sicher, dass Sie ein kompatibles Gerät angeschlossen haben und das Ihr Netzwerk richtig konfiguriert ist."
 
 #~ msgid "No, let me choose default lists"
 #~ msgstr "Nein, Standard-Kanalliste verwenden."
@@ -5995,37 +5767,29 @@ msgstr "umgeschaltet"
 
 #~ 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"
+#~ "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"
 #~ msgstr ""
 #~ "OK aktiviert die eingebaute WLAN-Unterstützung Ihrer Dreambox.\n"
-#~ "WLAN-USB-Sticks mit Zydas-ZD1211B und RAlink-RT73-Chipsatz werden "
-#~ "unterstützt.\n"
+#~ "WLAN-USB-Sticks mit Zydas-ZD1211B und RAlink-RT73-Chipsatz werden unterstützt.\n"
 #~ "Schließen Sie Ihren USB-Stick an, bevor Sie OK drücken.\n"
 #~ "\n"
 
 #~ msgid "Really delete this timer?"
 #~ msgstr "Diesen Timer wirklich löschen?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem neu starten?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem neu starten?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
 #~ msgstr ""
 #~ "Zurzeit sind Aufnahmen aktiv oder starten gleich...\n"
 #~ "Wollen Sie trotzdem ausschalten?"
@@ -6036,9 +5800,7 @@ msgstr "umgeschaltet"
 #~ msgid ""
 #~ "Reset the network configuration of your Dreambox.\n"
 #~ "\n"
-#~ msgstr ""
-#~ "Setzen Sie die Netzwerk-Konfiguration Ihrer Dreambox auf Standardwerte "
-#~ "zurück\n"
+#~ msgstr "Setzen Sie die Netzwerk-Konfiguration Ihrer Dreambox auf Standardwerte zurück\n"
 
 #~ msgid "Restore backups..."
 #~ msgstr "Sicherungen wiederherstellen"
@@ -6058,10 +5820,7 @@ msgstr "umgeschaltet"
 #~ msgid "Step "
 #~ msgstr "Schritt "
 
-#~ msgid ""
-#~ "The installation of the default settings is finished. Your can now "
-#~ "continue configuring your Dreambox by pressing the OK button on the "
-#~ "remote control."
+#~ msgid "The installation of the default settings is finished. Your can now continue configuring your Dreambox by pressing the OK button on the remote control."
 #~ msgstr "Die Installation der Standardeinstellungen wurde beendet. "
 
 #~ msgid ""
index 6bfa39a4bf9468581887af27de197ef7dc92c2f7..6e46eb881842d3d3b51a2156b58dff7d83af0829 100755 (executable)
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,3 +1,4 @@
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: Enigma2\n"
@@ -10,8 +11,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Language: Serbian\n"
-"X-Poedit-Country: SERBIA\n"
 "X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-Country: SERBIA\n"
 
 msgid ""
 "\n"
@@ -119,7 +120,7 @@ msgid " updates available."
 msgstr "ažuriranja dostupna."
 
 msgid " wireless networks found!"
-msgstr ""
+msgstr "Bežične mreža pronađene!"
 
 msgid "#000000"
 msgstr "#000000"
@@ -199,10 +200,8 @@ msgstr "* Dostupan samo kod unošenja skrivenog SSID ili mrežnog ključa "
 msgid ".NFI Download failed:"
 msgstr ".NFI skidanje nije uspelo:"
 
-msgid ""
-".NFI file passed md5sum signature check. You can safely flash this image!"
-msgstr ""
-".NFI datoteka je prošla proveru potpisa.Možeš sigurno flešovati imidž! "
+msgid ".NFI file passed md5sum signature check. You can safely flash this image!"
+msgstr ".NFI datoteka je prošla proveru potpisa.Možeš sigurno flešovati imidž! "
 
 msgid "/usr/share/enigma2 directory"
 msgstr "/usr/share/enigma2 direktorijum"
@@ -217,7 +216,7 @@ msgid "1"
 msgstr "1"
 
 msgid "1 wireless network found!"
-msgstr ""
+msgstr "Jedna bežična mreža nađena!"
 
 msgid "1.0"
 msgstr "1.0"
@@ -349,19 +348,11 @@ msgstr ""
 "Snimanje je trenutno u toku.\n"
 "Šta želite da uradte?"
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"configure the positioner."
-msgstr ""
-"Snimanje je u toku. Molim zaustavite snimanje pre nego što pokušate "
-"konfigurisati pozicioner."
+msgid "A recording is currently running. Please stop the recording before trying to configure the positioner."
+msgstr "Snimanje je u toku. Molim zaustavite snimanje pre nego što pokušate konfigurisati pozicioner."
 
-msgid ""
-"A recording is currently running. Please stop the recording before trying to "
-"start the satfinder."
-msgstr ""
-"Snimanje je trenutno u toku. Molim zaustavite snimanje pre nego što "
-"pokrenete satelitski pretraživač."
+msgid "A recording is currently running. Please stop the recording before trying to start the satfinder."
+msgstr "Snimanje je trenutno u toku. Molim zaustavite snimanje pre nego što pokrenete satelitski pretraživač."
 
 #, python-format
 msgid "A required tool (%s) was not found."
@@ -416,7 +407,7 @@ msgid "About..."
 msgstr "O programu..."
 
 msgid "Accesspoint:"
-msgstr ""
+msgstr "Pristupna tačka:"
 
 msgid "Action on long powerbutton press"
 msgstr "Dejstvo za dugo pritisnutu tipku paljenja"
@@ -463,12 +454,8 @@ msgstr "Dodaj u buket"
 msgid "Add to favourites"
 msgstr "Dodaj u favorite"
 
-msgid ""
-"Adds enigma2 settings and dreambox model informations like SN, rev... if "
-"enabled."
-msgstr ""
-"Dodaje enigma2 postavke i informacije o modelu drimboksa kao SN,rev...ako je "
-"uključen."
+msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled."
+msgstr "Dodaje enigma2 postavke i informacije o modelu drimboksa kao SN,rev...ako je uključen."
 
 msgid "Adds network configuration if enabled."
 msgstr "Dodaje mrežnu konfiguraciju ako je aktivirana."
@@ -476,16 +463,8 @@ msgstr "Dodaje mrežnu konfiguraciju ako je aktivirana."
 msgid "Adds wlan configuration if enabled."
 msgstr "Dodaje wlan konfiguraciju ako je ukljucen."
 
-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 ""
-"Podesi postavke boje,tako da su sve senke boja raspoznatljive,ali izgledaju "
-"maksimalno zasićene.Ako ste zadovoljni rezultatom,pritisnite OK da zatvorite "
-"fino video-podešavanje,ili koristite numeričke tipke da izaberete druge test "
-"ekrane. "
+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 "Podesi postavke boje,tako da su sve senke boja raspoznatljive,ali izgledaju maksimalno zasićene.Ako ste zadovoljni rezultatom,pritisnite OK da zatvorite fino video-podešavanje,ili koristite numeričke tipke da izaberete druge test ekrane. "
 
 msgid "Advanced"
 msgstr "Napredno"
@@ -505,12 +484,8 @@ msgstr "Napredno vraćanje"
 msgid "After event"
 msgstr "Posle dešavanja"
 
-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 ""
-"Nakon što čarobnjak završi,treba da zaštitite pojedine kanale. Pogledajte u "
-"drimbox uputstva kako da to uradite."
+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 "Nakon što čarobnjak završi,treba da zaštitite pojedine kanale. Pogledajte u drimbox uputstva kako da to uradite."
 
 msgid "Album"
 msgstr "Album"
@@ -665,8 +640,7 @@ msgid "Backup failed."
 msgstr "Rezervna kopija nije uspela"
 
 msgid "Backup is done. Please press OK to see the result."
-msgstr ""
-"Sigurnosna kopija je napravljena. Molim pritisnite OK za pregled rezultata."
+msgstr "Sigurnosna kopija je napravljena. Molim pritisnite OK za pregled rezultata."
 
 msgid "Backup is running..."
 msgstr "Bekap u toku..."
@@ -699,7 +673,7 @@ msgid "Behavior when a movie reaches the end"
 msgstr "Način rada kad je film stigao do kraja"
 
 msgid "Bitrate:"
-msgstr ""
+msgstr "Bit rata:"
 
 msgid "Block noise reduction"
 msgstr "Blokiraj smanjenje šuma"
@@ -725,11 +699,8 @@ msgstr "Nareži na DVD"
 msgid "Bus: "
 msgstr "Bus:"
 
-msgid ""
-"By pressing the OK Button on your remote control, the info bar is being "
-"displayed."
-msgstr ""
-"Pritiskom na tipku OK daljinskog upravljača, info traka će biti prikazana."
+msgid "By pressing the OK Button on your remote control, the info bar is being displayed."
+msgstr "Pritiskom na tipku OK daljinskog upravljača, info traka će biti prikazana."
 
 msgid "C"
 msgstr "C"
@@ -825,7 +796,7 @@ msgid "Choose Tuner"
 msgstr "Odaberi tjuner"
 
 msgid "Choose a wireless network"
-msgstr ""
+msgstr "Izaberi bežičnu mrežu"
 
 msgid "Choose backup files"
 msgstr "Izaberite snimljene datoteke  "
@@ -939,19 +910,19 @@ msgid "Configuration Mode"
 msgstr "Mod konfiguracije"
 
 msgid "Configure interface"
-msgstr ""
+msgstr "Konfiguriši interfejs"
 
 msgid "Configure nameservers"
-msgstr ""
+msgstr "Konfiguriši nejmservere"
 
 msgid "Configure your internal LAN"
-msgstr ""
+msgstr "Konfiguriši svoj interni LAN"
 
 msgid "Configure your network again"
-msgstr ""
+msgstr "Konfiguriši svoju mrežu ponovo"
 
 msgid "Configure your wireless LAN again"
-msgstr ""
+msgstr "Konfiguriši svoj bežični LAN ponovo"
 
 msgid "Configuring"
 msgstr "Konfigurišem"
@@ -963,7 +934,7 @@ msgid "Connect"
 msgstr "Spojiti"
 
 msgid "Connect to a Wireless Network"
-msgstr ""
+msgstr "Spoji se na bežičnu mrežu"
 
 msgid "Connected to"
 msgstr "Povezan sa"
@@ -1198,7 +1169,7 @@ msgid "DiSEqC repeats"
 msgstr "DiSEqC ponavljanja"
 
 msgid "DiSEqC-Tester settings"
-msgstr ""
+msgstr "Postavke DISEqC testera"
 
 msgid "Dialing:"
 msgstr "Zovem:"
@@ -1214,7 +1185,7 @@ msgid "Directory %s nonexistent."
 msgstr "Direktorijum %s ne postoji"
 
 msgid "Directory browser"
-msgstr ""
+msgstr "Pretraživač direktorijuma"
 
 msgid "Disable"
 msgstr "Onemogući"
@@ -1350,12 +1321,8 @@ msgstr "Želite li vratiti vaše postavke iz sigurnosne kopije?"
 msgid "Do you want to resume this playback?"
 msgstr "Želite li nastaviti snimak?"
 
-msgid ""
-"Do you want to submit your email address and name so that we can contact you "
-"if needed?"
-msgstr ""
-"Da li želite dostaviti vaš imejl i ime da možemo da vas kontaktiramo u "
-"slučaju potrebe?"
+msgid "Do you want to submit your email address and name so that we can contact you if needed?"
+msgstr "Da li želite dostaviti vaš imejl i ime da možemo da vas kontaktiramo u slučaju potrebe?"
 
 msgid "Do you want to update your Dreambox?"
 msgstr "Da li želite da ažurirate vaš drimbox?"
@@ -1496,7 +1463,7 @@ msgstr "Omogućeno"
 
 #, python-format
 msgid "Encrypted: %s"
-msgstr ""
+msgstr "Kodirano: %s"
 
 msgid "Encryption"
 msgstr "Šifrovanje"
@@ -1511,7 +1478,7 @@ msgid "Encryption Type"
 msgstr "Tip šifrovanja"
 
 msgid "Encryption:"
-msgstr ""
+msgstr "Kodiranje:"
 
 msgid "End time"
 msgstr "Završno vreme"
@@ -1571,8 +1538,7 @@ msgid "Enter the service pin"
 msgstr "Unesite pin kanala"
 
 msgid "Enter your email address so that we can contact you if needed."
-msgstr ""
-"Unesite vašu imejl adresu tako da vas možemo kontaktirati ako je potrebno."
+msgstr "Unesite vašu imejl adresu tako da vas možemo kontaktirati ako je potrebno."
 
 msgid "Error"
 msgstr "Greška"
@@ -1613,7 +1579,7 @@ msgid "Exit editor"
 msgstr "Izađi iz editora"
 
 msgid "Exit network wizard"
-msgstr ""
+msgstr "Izađi iz mrež. čarob."
 
 msgid "Exit the cleanup wizard"
 msgstr "Izađite iz čarobnjaka za čišćenje"
@@ -1681,8 +1647,7 @@ msgstr "Završeno je restartovanje vaše mreže"
 msgid "Finnish"
 msgstr "Finski"
 
-msgid ""
-"First we need to download the latest boot environment for the USB flasher."
+msgid "First we need to download the latest boot environment for the USB flasher."
 msgstr "Treba prethodno skinuti poslednje but okruženje za USB flešer"
 
 msgid "Flash"
@@ -1805,7 +1770,7 @@ msgid "Hidden network SSID"
 msgstr "Skriveni mrežni SSID"
 
 msgid "Hidden networkname"
-msgstr ""
+msgstr "Skriveno mrežno ime"
 
 msgid "Hierarchy Information"
 msgstr "Informacije hijerarhije"
@@ -1854,22 +1819,13 @@ msgstr ""
 "vašim skart priključkom. Pritisnite OK za povratak."
 
 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 ""
-"Ako vaš TV ima poboljšavanje osvetljenja ili kontrasta,isključite ga.Ako "
-"imate nešto zvano  \"dynamic \",postavite na standarno.Podesite nivo "
-"pozadinskog osvetljenja na vrednosti po vašem ukusu.Smanjite kontrast na "
-"vašem TV koliko je moguće.\n"
-"Zatim smanjite do minimuma osvetljenje,ali budite sigurni da se najniže "
-"senke sive razaznaju.\n"
+"Ako vaš TV ima poboljšavanje osvetljenja ili kontrasta,isključite ga.Ako imate nešto zvano  \"dynamic \",postavite na standarno.Podesite nivo pozadinskog osvetljenja na vrednosti po vašem ukusu.Smanjite kontrast na vašem TV koliko je moguće.\n"
+"Zatim smanjite do minimuma osvetljenje,ali budite sigurni da se najniže senke sive razaznaju.\n"
 "Ne brinite sada za svetle senke.One će biti postavljene u sledećem koraku.\n"
 "Ako ste zadovoljni rezultatom,stisnite OK."
 
@@ -1882,10 +1838,8 @@ msgstr "Nadogradnja-imidža"
 msgid "In Progress"
 msgstr "U toku"
 
-msgid ""
-"In order to record a timer, the TV was switched to the recording service!\n"
-msgstr ""
-"Da bi počelo snimanje po tajmeru,TV je prebačen na kanal za snimanje!\n"
+msgid "In order to record a timer, the TV was switched to the recording service!\n"
+msgstr "Da bi počelo snimanje po tajmeru,TV je prebačen na kanal za snimanje!\n"
 
 msgid "Include your email and name (optional) in the mail?"
 msgstr "Uključite vaš imejl i ime (opciono) u poruku?"
@@ -1973,7 +1927,7 @@ msgstr "Integrisana bežična veza"
 
 #, python-format
 msgid "Interface: %s"
-msgstr ""
+msgstr "Interfejs: %s"
 
 msgid "Intermediate"
 msgstr "Srednje"
@@ -2006,7 +1960,8 @@ msgstr "Italijanski"
 msgid "Job View"
 msgstr "Pregled poslova"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this
+#. breaks the aspect)
 msgid "Just Scale"
 msgstr "Samo razmeri"
 
@@ -2061,7 +2016,8 @@ msgstr "Napustiti DVD plejer"
 msgid "Left"
 msgstr "Levo"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep
+#. english term.
 msgid "Letterbox"
 msgstr "Letterbox"
 
@@ -2081,7 +2037,7 @@ msgid "Limits on"
 msgstr "Limite na"
 
 msgid "Link Quality:"
-msgstr ""
+msgstr "Kvalitet linka:"
 
 msgid "Link:"
 msgstr "Link:"
@@ -2160,7 +2116,7 @@ msgstr "Margina pre snimanja (minuti)"
 
 #, python-format
 msgid "Max. Bitrate: %s"
-msgstr ""
+msgstr "Maks. Bit rata: %s"
 
 msgid "Media player"
 msgstr "Medija plejer"
@@ -2290,7 +2246,7 @@ msgid "Network Setup"
 msgstr "Postavke Mreže"
 
 msgid "Network Wizard"
-msgstr ""
+msgstr "Mrežni čarobnjak"
 
 msgid "Network scan"
 msgstr "Pretraga mreže"
@@ -2335,7 +2291,7 @@ msgid "No 50 Hz, sorry. :("
 msgstr "Nema 50 Hz,žao mi je, :("
 
 msgid "No Connection"
-msgstr ""
+msgstr "Nema konekcije"
 
 msgid "No HDD found or HDD not initialized!"
 msgstr "Disk nije pronađen ili nije inicijaliziran!"
@@ -2369,13 +2325,10 @@ msgid "No free tuner!"
 msgstr "Nema slobodnog tjunera!"
 
 msgid "No networks found"
-msgstr ""
+msgstr "Nijedna mreža nije pronađena"
 
-msgid ""
-"No packages were upgraded yet. So you can check your network and try again."
-msgstr ""
-"Još nijedan paket nije nadograđen.Proverite postavke mreže i pokušajte "
-"ponovo."
+msgid "No packages were upgraded yet. So you can check your network and try again."
+msgstr "Još nijedan paket nije nadograđen.Proverite postavke mreže i pokušajte ponovo."
 
 msgid "No picture on TV? Press EXIT and retry."
 msgstr "Nema slike na TV?Pritisnite IZLAZ i probajte ponovo."
@@ -2421,34 +2374,28 @@ msgstr ""
 "Ukoliko kažete 'Ne' ovde, postavke uređaja ostaju nezaštićene!"
 
 msgid "No wireless networks found! Please refresh."
-msgstr ""
+msgstr "Nijedna bežična mreža nije nađena! Molim osveži."
 
 msgid ""
 "No working local network adapter found.\n"
-"Please verify that you have attached a network cable and your network is "
-"configured correctly."
+"Please verify that you have attached a network cable and your network is configured correctly."
 msgstr ""
 "Nije pronađen lokalni mrežni adapter u radu.\n"
-"Molimo proverite da li ste uključili mrežni kabl i da li je mreža ispravno "
-"konfigurisana."
+"Molimo proverite da li ste uključili mrežni kabl i da li je mreža ispravno konfigurisana."
 
 msgid ""
 "No working wireless network adapter found.\n"
-"Please verify that you have attached a compatible WLAN device and your "
-"network is configured correctly."
+"Please verify that you have attached a compatible WLAN device and your network is configured correctly."
 msgstr ""
 "Nije pronađen adapter za bežičnu mrežu u radu.\n"
-"Molimo proverite da ste prikačili kompatibilan WLAN uređaj i da je mreža "
-"ispravno konfigurisana."
+"Molimo proverite da ste prikačili kompatibilan WLAN uređaj i da je mreža ispravno konfigurisana."
 
 msgid ""
 "No working wireless network interface found.\n"
-" Please verify that you have attached a compatible WLAN device or enable "
-"your local network interface."
+" Please verify that you have attached a compatible WLAN device or enable your local network interface."
 msgstr ""
 "Nije pronađen interfejs za bežičnu mrežu.\n"
-"Molimo proverite da li ste priključili kompatibilan WLAN uređaj ili "
-"omogućili vaš lokalni mrežni interfejs."
+"Molimo proverite da li ste priključili kompatibilan WLAN uređaj ili omogućili vaš lokalni mrežni interfejs."
 
 msgid "No, but restart from begin"
 msgstr "Ne, ali restartuj od početka"
@@ -2471,7 +2418,8 @@ msgstr "Ne, nikad ne šalji. "
 msgid "None"
 msgstr "Nijedan"
 
-#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right)
+#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching
+#. the left/right)
 msgid "Nonlinear"
 msgstr "Nelinearno"
 
@@ -2482,12 +2430,8 @@ msgid "Norwegian"
 msgstr "Norveški"
 
 #, python-format
-msgid ""
-"Not enough diskspace. Please free up some diskspace and try again. (%d MB "
-"required, %d MB available)"
-msgstr ""
-"Nedovoljno prostora na disku. Molimo oslobodite nešto prostora i probajte "
-"ponovo. (%d MB potrebno,%d MB omogućeno)"
+msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)"
+msgstr "Nedovoljno prostora na disku. Molimo oslobodite nešto prostora i probajte ponovo. (%d MB potrebno,%d MB omogućeno)"
 
 msgid ""
 "Nothing to scan!\n"
@@ -2499,14 +2443,8 @@ msgstr ""
 msgid "Now Playing"
 msgstr "Trenutno pokrenuto"
 
-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 ""
-"Sada koristite postavke kontrasta,da pojačate pozadinsko svetlo najviše "
-"moguće,ali budite sigurni da još uvek možete videti razliku između dva "
-"najsvetlija nivoa senki.Ako ste ovo učinili,pritisnite 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 "Sada koristite postavke kontrasta,da pojačate pozadinsko svetlo najviše moguće,ali budite sigurni da još uvek možete videti razliku između dva najsvetlija nivoa senki.Ako ste ovo učinili,pritisnite OK."
 
 msgid "OK"
 msgstr "OK"
@@ -2574,7 +2512,8 @@ msgstr "Menadžer paketa"
 msgid "Page"
 msgstr "Stranica"
 
-#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term
+#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt,
+#. keep english term
 msgid "Pan&Scan"
 msgstr "Pan&Scan"
 
@@ -2608,7 +2547,8 @@ msgstr "SuS postavke"
 msgid "PicturePlayer"
 msgstr "Pregledač slika"
 
-#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term.
+#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep
+#. english term.
 msgid "Pillarbox"
 msgstr "Pillarbox"
 
@@ -2646,8 +2586,7 @@ msgid "Please check your network settings!"
 msgstr "Molim proverite vaše mrežne postavke"
 
 msgid "Please choose .NFI image file from feed server to download"
-msgstr ""
-"Molim izaberite .NFI imidž datoteku sa snabdevačkog servera za skidanje"
+msgstr "Molim izaberite .NFI imidž datoteku sa snabdevačkog servera za skidanje"
 
 msgid "Please choose an extension..."
 msgstr "Molim odaberite proširenje..."
@@ -2659,23 +2598,21 @@ msgid "Please choose the default services lists you want to install."
 msgstr "Molim izaberite standardnu listu kanala za instalaciju."
 
 msgid ""
-"Please configure or verify your Nameservers by filling out the required "
-"values.\n"
+"Please configure or verify your Nameservers by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
+"Molim konfiguriši ili potvrdi svoje nejmservere popunjavajući tražene vrednosti.\n"
+"Kada si spreman pritisni OK da nastaviš. "
 
 msgid ""
-"Please configure your internet connection by filling out the required "
-"values.\n"
+"Please configure your internet connection by filling out the required values.\n"
 "When you are ready press OK to continue."
 msgstr ""
+"Molim konfiguriši svoju internet vezu popunjavajući tražene vrednosti.\n"
+"Kada si spreman pritisni OK da nastaviš. "
 
-msgid ""
-"Please disconnect all USB devices from your Dreambox and (re-)attach the "
-"target USB stick (minimum size is 64 MB) now!"
-msgstr ""
-"Molimo odspojite sve USB uređaje sa vašeg drimboxa i sada (opet)dodajte "
-"ciljni USB stik (minimalna veličina je 64MB)!"
+msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"
+msgstr "Molimo odspojite sve USB uređaje sa vašeg drimboxa i sada (opet)dodajte ciljni USB stik (minimalna veličina je 64MB)!"
 
 msgid "Please do not change any values unless you know what you are doing!"
 msgstr "Molim ne menjate vrednosti ukoliko ne znate šta radite!"
@@ -2710,12 +2647,8 @@ msgstr "Molim unesite vaše ime ovde (opciono):"
 msgid "Please follow the instructions on the TV"
 msgstr "Molim,pratite uputstva na TV-u"
 
-msgid ""
-"Please note that the previously selected media could not be accessed and "
-"therefore the default directory is being used instead."
-msgstr ""
-"Molim primetite da prethodno odabrani medij ne može biti dostupan i zbog "
-"toga se koristi standardni direktorijum."
+msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead."
+msgstr "Molim primetite da prethodno odabrani medij ne može biti dostupan i zbog toga se koristi standardni direktorijum."
 
 msgid "Please press OK to continue."
 msgstr "Molim pritisnite OK za nastavak"
@@ -2757,17 +2690,22 @@ msgid "Please select the movie path..."
 msgstr "Molim izaberite putanju filma..."
 
 msgid ""
-"Please select the network interface that you want to use for your internet "
-"connection.\n"
+"Please select the network interface that you want to use for your internet connection.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Molim izaberi mrežni interfejs koji želiš da koristiš za svoju internet vezu.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid ""
 "Please select the wireless network that you want to connect to.\n"
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Molim izaberi bežičnu mrežu na koju želiš da se spojiš.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid "Please set up tuner B"
 msgstr "Molim podesite tuner B"
@@ -2787,12 +2725,8 @@ msgstr ""
 "Pritisnite Bouquet +/- tipke za promenu veličine prozora.\n"
 "Pritisnite OK za povratak u TV mod ili EXIT za prekid premeštanja."
 
-msgid ""
-"Please use the UP and DOWN keys to select your language. Afterwards press "
-"the OK button."
-msgstr ""
-"Molim koristite UP i DOWN tipke da izaberete jezik.Posle toga pritisnite OK "
-"dugme."
+msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button."
+msgstr "Molim koristite UP i DOWN tipke da izaberete jezik.Posle toga pritisnite OK dugme."
 
 msgid "Please wait for activation of your network configuration..."
 msgstr "Molim sačekajte za aktiviranje vaše mrežne konfiguracije..."
@@ -2810,10 +2744,10 @@ msgid "Please wait while we configure your network..."
 msgstr "Molim sačekajte dok konfigurišemo vašu mrežu..."
 
 msgid "Please wait while we prepare your network interfaces..."
-msgstr ""
+msgstr "Molim sačekajte dok pripremim vaše mrežne interfejse..."
 
 msgid "Please wait while we test your network..."
-msgstr ""
+msgstr "Molim sačekajte doktestiram vašu mrežu..."
 
 msgid "Please wait while your network is restarting..."
 msgstr "Molim sačekajte dok se vaša mreža ponovo startuje"
@@ -3037,7 +2971,7 @@ msgid "Reenter new pin"
 msgstr "Ponovite novi pin"
 
 msgid "Refresh"
-msgstr ""
+msgstr "Osveži"
 
 msgid "Refresh Rate"
 msgstr "Brzina osvježavanja"
@@ -3160,12 +3094,8 @@ msgstr "Vraćanje u toku"
 msgid "Restore system settings"
 msgstr "Vratite sistemske postavke"
 
-msgid ""
-"Restoring the settings is done. Please press OK to activate the restored "
-"settings now."
-msgstr ""
-"Vraćanje postavki je završeno.Molim pritisnite OK za aktiviranje vraćenih "
-"postavki sada."
+msgid "Restoring the settings is done. Please press OK to activate the restored settings now."
+msgstr "Vraćanje postavki je završeno.Molim pritisnite OK za aktiviranje vraćenih postavki sada."
 
 msgid "Resume from last position"
 msgstr "Nastavite sa poslednje pozicije"
@@ -3217,7 +3147,7 @@ msgid "SNR:"
 msgstr "SNR:"
 
 msgid "SSID:"
-msgstr ""
+msgstr "SSID:"
 
 msgid "Sat"
 msgstr "Sat"
@@ -3330,25 +3260,14 @@ msgstr "Skeniraj band US MID"
 msgid "Scan band US SUPER"
 msgstr "Skeniraj band US SUPER"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"WLAN USB Stick\n"
-msgstr ""
-"Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš "
-"WLAN USB stik\n"
+msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n"
+msgstr "Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš WLAN USB stik\n"
 
-msgid ""
-"Scan your network for wireless Access Points and connect to them using your "
-"selected wireless device.\n"
-msgstr ""
-"Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš "
-"izabrani bežični uređaj.\n"
+msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n"
+msgstr "Pretražite vašu mrežu za bežične pristupne tačke i povežite se koristeći vaš izabrani bežični uređaj.\n"
 
-msgid ""
-"Scans default lamedbs sorted by satellite with a connected dish positioner"
-msgstr ""
-"Pretražuje osnovne lamedbs razvrstane po satelitima sa povezanim antenskim "
-"pozicionerom"
+msgid "Scans default lamedbs sorted by satellite with a connected dish positioner"
+msgstr "Pretražuje osnovne lamedbs razvrstane po satelitima sa povezanim antenskim pozicionerom"
 
 msgid "Search east"
 msgstr "Pretraži istok"
@@ -3399,7 +3318,7 @@ msgid "Select image"
 msgstr "Izaberi imidž"
 
 msgid "Select interface"
-msgstr ""
+msgstr "Izaberi interfejs"
 
 msgid "Select package"
 msgstr "Izaberi paket"
@@ -3426,7 +3345,7 @@ msgid "Select video mode"
 msgstr "Izaberi video mod"
 
 msgid "Select wireless network"
-msgstr ""
+msgstr "Izaberite bežičnu mrežu"
 
 msgid "Selected source image"
 msgstr "Izaberi izvorni imidž"
@@ -3558,10 +3477,10 @@ msgid "Shutdown Dreambox after"
 msgstr "Isključi drimbox posle"
 
 msgid "Signal Strength:"
-msgstr ""
+msgstr "Jačina signala:"
 
 msgid "Signal: "
-msgstr ""
+msgstr "Signal:"
 
 msgid "Similar"
 msgstr "Slično"
@@ -3798,7 +3717,8 @@ msgstr "Simbol rata"
 msgid "System"
 msgstr "Sistem "
 
-#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline)
+#. TRANSLATORS: Add here whatever should be shown in the "translator" about
+#. screen, up to 6 lines (use \n for newline)
 msgid "TRANSLATOR_INFO"
 msgstr "PREVODILAC_INFO"
 
@@ -3845,30 +3765,21 @@ msgid ""
 "Thank you for using the wizard.\n"
 "Please press OK to continue."
 msgstr ""
+"Hvala na korišćenju čarobnjaka.\n"
+"Molim pritisni OK da nastaviš."
 
 msgid ""
 "Thank you for using the wizard. Your box is now ready to use.\n"
 "Please press OK to start using your Dreambox."
 msgstr ""
-"Hvala vam na korišćenju čarobnjaka. Vaš prijemnik je sada spreman za "
-"korišćenje.\n"
+"Hvala vam na korišćenju čarobnjaka. Vaš prijemnik je sada spreman za korišćenje.\n"
 "Molim pritisnite tipku OK za početak korišćenja vašeg Drimboxa."
 
-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 standard ne podržava H.264 (HDTV) video strimove.Da li želite umesto "
-"toga da napravite drimbox format DVD (koji se neće moći reprodukovati u "
-"samostalnim DVD plejerima)?"
+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 standard ne podržava H.264 (HDTV) video strimove.Da li želite umesto toga da napravite drimbox format DVD (koji se neće moći reprodukovati u samostalnim DVD plejerima)?"
 
-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 stik je sada butabilan.Da li želite da skinete poslednji imidž sa "
-"snabdevačkog servera i sačuvate ga na stiku?"
+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 stik je sada butabilan.Da li želite da skinete poslednji imidž sa snabdevačkog servera i sačuvate ga na stiku?"
 
 msgid "The backup failed. Please choose a different backup location."
 msgstr "Neuspešna sigurnosna kopija. Molim odaberite drugu lokaciju."
@@ -3892,38 +3803,22 @@ msgstr "Sledeće datoteke su pronađene..."
 
 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 ""
 "Ulazni port bi sada trebalo konfigurisati.\n"
-"Možete sada konfigurisati ekran prikazujući neke test slike.Želite li to "
-"sada da učinite? "
+"Možete sada konfigurisati ekran prikazujući neke test slike.Želite li to sada da učinite? "
 
 msgid "The installation of the default services lists is finished."
 msgstr "Instalacija osnovne liste kanala je završena."
 
-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 ""
-"Instalacija osnovnih postavki je završena.Sada možete nastaviti "
-"konfiguraciju vašeg drimboxa pritiskajući OK tipku na daljinskom upravljaču."
+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 "Instalacija osnovnih postavki je završena.Sada možete nastaviti konfiguraciju vašeg drimboxa pritiskajući OK tipku na daljinskom upravljaču."
 
-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 ""
-"md5sum provera valjanosti nije uspela,datoteka može biti oštećena!Da li ste "
-"sigurni da želite da upišete ovaj imidž u fleš memoriju?Uradite to na svoj "
-"rizik! "
+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 "md5sum provera valjanosti nije uspela,datoteka može biti oštećena!Da li ste sigurni da želite da upišete ovaj imidž u fleš memoriju?Uradite to na svoj rizik! "
 
-msgid ""
-"The md5sum validation failed, the file may be downloaded incompletely or be "
-"corrupted!"
-msgstr ""
-"md5sum provera valjanosti nije uspela,datoteka može biti nekompletna ili "
-"oštećena!"
+msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!"
+msgstr "md5sum provera valjanosti nije uspela,datoteka može biti nekompletna ili oštećena!"
 
 msgid "The package doesn't contain anything."
 msgstr "Paket ne sadrži ništa."
@@ -3961,6 +3856,8 @@ msgid ""
 "The wireless LAN plugin is not installed!\n"
 "Please install it and choose what you want to do next."
 msgstr ""
+"Bežični LAN dodatak nije instaliran!\n"
+"Molim instaliraj ga i izaberi šta želiš sledeće učiniti."
 
 msgid ""
 "The wireless LAN plugin is not installed!\n"
@@ -3969,11 +3866,8 @@ msgstr ""
 "Bežični LAN dodatak nije instaliran!\n"
 "Molimo instalirajte ga."
 
-msgid ""
-"The wizard can backup your current settings. Do you want to do a backup now?"
-msgstr ""
-"Čarobnjak može napraviti sigurnosnu kopiju postavki. Želite li je napraviti "
-"sada?"
+msgid "The wizard can backup your current settings. Do you want to do a backup now?"
+msgstr "Čarobnjak može napraviti sigurnosnu kopiju postavki. Želite li je napraviti sada?"
 
 msgid "The wizard is finished now."
 msgstr "Čarobnjak je sada gotov."
@@ -4010,26 +3904,14 @@ msgstr "Desila se greška.Paket:"
 msgid "This .NFI file does not contain a valid %s image!"
 msgstr "Ova .NFI datoteka ne sadrži validan %s imidž!"
 
-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 ""
-"Ovaj .NFI imidž nema md5sum proveru i nema garancije da će raditi. Da li "
-"stvarno želite da upišete ovaj imidž u fleš memoriju?"
+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 "Ovaj .NFI imidž nema md5sum proveru i nema garancije da će raditi. Da li stvarno želite da upišete ovaj imidž u fleš memoriju?"
 
-msgid ""
-"This .NFI file has a valid md5 signature. Continue programming this image to "
-"flash memory?"
-msgstr ""
-"Ova .NFI datoteka ima validnu md5 proveru.Nastavite programiranje ovog "
-"imidža u fleš memoriju?"
+msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"
+msgstr "Ova .NFI datoteka ima validnu md5 proveru.Nastavite programiranje ovog imidža u fleš memoriju?"
 
-msgid ""
-"This DVD RW medium is already formatted - reformatting will erase all "
-"content on the disc."
-msgstr ""
-"Ovaj DVD RW medij je već formatiran-ponovno formatiranje će izbrisati ceo "
-"sadržaj diska."
+msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc."
+msgstr "Ovaj DVD RW medij je već formatiran-ponovno formatiranje će izbrisati ceo sadržaj diska."
 
 #, python-format
 msgid "This Dreambox can't decode %s streams!"
@@ -4061,14 +3943,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 ""
 "Ovaj test proverava konfigurisane nejmservere.\n"
 "Ako dobijete poruku \"nepotvrđen\":\n"
 "-proverite vaš DHCP.kablove i postavke adaptera\n"
-"-ako ste nejmserver ručno konfigurisali,molimo proverite vaše unose u  "
-"\"Nejmserver \" konfiguraciji"
+"-ako ste nejmserver ručno konfigurisali,molimo proverite vaše unose u  \"Nejmserver \" konfiguraciji"
 
 msgid ""
 "This test checks whether a network cable is connected to your LAN-Adapter.\n"
@@ -4093,21 +3973,17 @@ msgstr ""
 "-molimo proverite vaš DHCP,kablove i postavke adaptera "
 
 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 ""
-"Ovaj test proverava da li je vaš adapter postavljen za automatski izbor IP "
-"adrese sa DHCP.\n"
+"Ovaj test proverava da li je vaš adapter postavljen za automatski izbor IP adrese sa DHCP.\n"
 "Ako dobijete poruku \"onemogućen \":\n"
 "-onda je vaš adapter konfigurisan za manuelne IP postavke\n"
-"-proverite da li ste uneli ispravne IP podatke u dijalog postavkama "
-"adaptera.\n"
+"-proverite da li ste uneli ispravne IP podatke u dijalog postavkama adaptera.\n"
 "Ako ste dobili poruku  \"omogućen \":\n"
 "-proverite da li u vašoj mreži postoji konfigurisan i u funkciji DHCP server."
 
@@ -4192,16 +4068,13 @@ msgstr "Način postavki naziva"
 
 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"
+"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 ""
 "Da unapredite vaš drimbox firmver,molimo pratite sledeće korake:\n"
 "1) Ugasite vaš box na prekidaču pozad i uključite butabilan USB stik.\n"
-"2) Upalite glavni prekidač pozadi držeći dugme DOLE na prednjoj ploči 10 "
-"sekundi.\n"
+"2) Upalite glavni prekidač pozadi držeći dugme DOLE na prednjoj ploči 10 sekundi.\n"
 "3) Sačekajte na podizanje i pratite uputstva čarobnjaka."
 
 msgid "Today"
@@ -4241,14 +4114,10 @@ msgid "Tries left:"
 msgstr "Pokušaja ostalo:"
 
 msgid "Try to find used Transponders in cable network.. please wait..."
-msgstr ""
-"Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim "
-"pričekajte..."
+msgstr "Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim pričekajte..."
 
 msgid "Try to find used transponders in cable network.. please wait..."
-msgstr ""
-"Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim "
-"pričekajte..."
+msgstr "Pokušavam pronaći korišćene transpondere u kablovskoj mreži.. molim pričekajte..."
 
 msgid "Trying to download a new packetlist. Please wait..."
 msgstr "Pokušavam skinuti novu listu paketa.Molim sačekajte..."
@@ -4351,7 +4220,7 @@ msgid "Unmount failed"
 msgstr "Demauntiranje nije uspelo"
 
 msgid "Unsupported"
-msgstr ""
+msgstr "Nije podržano"
 
 msgid "Update"
 msgstr "Ažuriranje"
@@ -4410,18 +4279,14 @@ msgstr ""
 "\n"
 "Molim podesite tuner A"
 
-msgid ""
-"Use the up/down keys on your remote control to select an option. After that, "
-"press OK."
-msgstr ""
-"Koristite gore/dole tipke na vašem daljinskom upravljaču za izbor opcije. "
-"Posle toga, pritisnite OK."
+msgid "Use the up/down keys on your remote control to select an option. After that, press OK."
+msgstr "Koristite gore/dole tipke na vašem daljinskom upravljaču za izbor opcije. Posle toga, pritisnite OK."
 
 msgid "Use this video enhancement settings?"
 msgstr "Koristi postavke ovog video poboljšavanja?"
 
 msgid "Use time of currently running service"
-msgstr ""
+msgstr "Koristi vreme trenutnog kanala u radu"
 
 msgid "Use usals for this sat"
 msgstr "Koristi USALS za ovaj satelit"
@@ -4474,15 +4339,13 @@ msgstr "Podešavanje video poboljšavanja"
 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 ""
 "Izbor video ulaza\n"
 "\n"
-"Molim pritisnite OK ako možete da vidite ovu stranu na vašem TV (ili "
-"izaberite različit ulazni port).\n"
+"Molim pritisnite OK ako možete da vidite ovu stranu na vašem TV (ili izaberite različit ulazni port).\n"
 "\n"
 "Sledeći ulazni port će biti automatski proban za 10 sekundi"
 
@@ -4583,12 +4446,10 @@ msgid "Warn if free space drops below (kB):"
 msgstr "Upozorii ako slobodan prostor padne ispod (kB):"
 
 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 ""
-"Proverićemo da li vaš TV može prikazati ovu rezoluciju pri 50Hz.Ako vaš "
-"ekran pocrni,pričekajte 20 sekundi i vratiće se nazad na 60 Hz.\n"
+"Proverićemo da li vaš TV može prikazati ovu rezoluciju pri 50Hz.Ako vaš ekran pocrni,pričekajte 20 sekundi i vratiće se nazad na 60 Hz.\n"
 "Molim pritisnite OK za početak."
 
 msgid "Wed"
@@ -4603,45 +4464,39 @@ msgstr "Nedeljnii dan"
 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 ""
 "Dobrodošli na uređivač liste.\n"
 "\n"
-"Tražite početak onoga što želite da odbacite.Pritisnite OK,izaberite \"počni "
-"isecanje\".\n"
+"Tražite početak onoga što želite da odbacite.Pritisnite OK,izaberite \"počni isecanje\".\n"
 "\n"
 "Zatim tražite kraj,pritisnite OK,izaberite \"završi isecanje\".To je to."
 
-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 ""
-"Dobro došli u čarobnjaka za nadogradnju softvera. Čarobnjak će vam pomoći "
-"tokom nadogradnje firmvera na vašem drimboxu s pružanjem mogućnosti "
-"sigurnosne kopije vaših trenutnih postavki i kratkim objašnjenjem kako "
-"nadograditi vaš softver."
+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 "Dobro došli u čarobnjaka za nadogradnju softvera. Čarobnjak će vam pomoći tokom nadogradnje firmvera na vašem drimboxu s pružanjem mogućnosti sigurnosne kopije vaših trenutnih postavki i kratkim objašnjenjem kako nadograditi vaš softver."
 
 msgid ""
 "Welcome to the cleanup wizard.\n"
 "\n"
 "We have detected that your available internal memory has dropped below 2MB.\n"
-"To ensure stable operation of your Dreambox, the internal memory should be "
-"cleaned up.\n"
+"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n"
 "You can use this wizard to remove some extensions.\n"
 msgstr ""
 
 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"
+"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 OK to start configuring your network"
 msgstr ""
+"Dobro došli.\n"
+"\n"
+"Ako želite da spojite svoj drimboks na Internet,ovaj čarobnjak će vas voditi kroz osnovna mrežna podešavanja vašeg drimboksa.\n"
+"\n"
+"Pritisnite OK da počnete konfigurisanje vaše mreže"
 
 msgid ""
 "Welcome.\n"
@@ -4652,8 +4507,7 @@ msgstr ""
 "Dobro došli.\n"
 "\n"
 "Ovaj početni čarobnjak će vas voditi kroz osnovne postavke vašeg drimboxa.\n"
-"Pritisnite OK tipku na vašem daljinskom upravljaču za prelazak na sledeći "
-"korak."
+"Pritisnite OK tipku na vašem daljinskom upravljaču za prelazak na sledeći korak."
 
 msgid "Welcome..."
 msgstr "Dobrodošli..."
@@ -4670,13 +4524,11 @@ msgstr "Šta činiti sa poslatim krah zapisima?"
 msgid ""
 "When you do a factory reset, you will lose ALL your configuration data\n"
 "(including bouquets, services, satellite data ...)\n"
-"After completion of factory reset, your receiver will restart "
-"automatically!\n"
+"After completion of factory reset, your receiver will restart automatically!\n"
 "\n"
 "Really do a factory reset?"
 msgstr ""
-"Kad radite resetovanje na fabričke vrednosti,izgubićete sve konfiguracijske "
-"podatke\n"
+"Kad radite resetovanje na fabričke vrednosti,izgubićete sve konfiguracijske podatke\n"
 "(uključujući bukete,kanale,podatke o satelitima...)\n"
 "Posle kompletnog resetovanja,vaš risiver će automatski restartovati!\n"
 "\n"
@@ -4692,13 +4544,13 @@ msgid "Wireless"
 msgstr "Bežično"
 
 msgid "Wireless LAN"
-msgstr ""
+msgstr "Bežični LAN"
 
 msgid "Wireless Network"
 msgstr "Bežična mreža"
 
 msgid "Wireless Network State"
-msgstr ""
+msgstr "Stanje bežične mreže"
 
 msgid "Write error while recording. Disk full?\n"
 msgstr "Greška tokom snimanja. Disk Pun?\n"
@@ -4754,12 +4606,8 @@ msgstr "Možete otkazati instaliranje."
 msgid "You can cancel the removal."
 msgstr "Možete otkazati uklanjanje."
 
-msgid ""
-"You can choose some default settings now. Please select the settings you "
-"want to be installed."
-msgstr ""
-"Sada možete izabrati neke osnovne postavke.Molimo izaberite postavke koje "
-"želite instalirati."
+msgid "You can choose some default settings now. Please select the settings you want to be installed."
+msgstr "Sada možete izabrati neke osnovne postavke.Molimo izaberite postavke koje želite instalirati."
 
 msgid "You can choose, what you want to install..."
 msgstr "Možete izabrati šta želite da instalirate..."
@@ -4776,89 +4624,51 @@ msgstr "Ne možete ovo obrisati!"
 msgid "You chose not to install any default services lists."
 msgstr "Izabrali ste da ne instalirate osnovnu listu kanala."
 
-msgid ""
-"You chose not to install any default settings. You can however install the "
-"default settings later in the settings menu."
-msgstr ""
-"Izabrali ste da ne instalirate bilo koje osnovne postavke.Svakako možete "
-"instalirati osnovne postavke kasnije u meniu postavki."
+msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu."
+msgstr "Izabrali ste da ne instalirate bilo koje osnovne postavke.Svakako možete instalirati osnovne postavke kasnije u meniu postavki."
 
-msgid ""
-"You chose not to install anything. Please press OK finish the install wizard."
-msgstr ""
-"Izabrali ste da ništa ne instalirate.Molimo pritisnite OK da završite "
-"čarobnjaka za instalaciju."
+msgid "You chose not to install anything. Please press OK finish the install wizard."
+msgstr "Izabrali ste da ništa ne instalirate.Molimo pritisnite OK da završite čarobnjaka za instalaciju."
 
-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 ""
-"Izgleda da vi nemate instalirani hard disk u vašem drimboxu.Zbog toga izrada "
-"sigurnosne kopije nije opcija za vas."
+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 "Izgleda da vi nemate instalirani hard disk u vašem drimboxu.Zbog toga izrada sigurnosne kopije nije opcija za vas."
 
 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 ""
-"Vi ste izabrali lokaciju za sigurnosnu kopiju na kompakt fleš kartici. "
-"Kartica mora biti u otvoru.Ne proverava se da li se kartica trenutno "
-"koristi. Zato bolje da kopiju napravite na hard disku!\n"
+"Vi ste izabrali lokaciju za sigurnosnu kopiju na kompakt fleš kartici. Kartica mora biti u otvoru.Ne proverava se da li se kartica trenutno koristi. Zato bolje da kopiju napravite na hard disku!\n"
 "Molim pritisnite OK za početak izrade."
 
 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 ""
-"Odabrali ste lokaciju za sigurnosnu kopiju na USB disku. Bolje je stavite na "
-"hard disk!\n"
+"Odabrali ste lokaciju za sigurnosnu kopiju na USB disku. Bolje je stavite na hard disk!\n"
 "Molim pritisnite OK za početak."
 
-msgid ""
-"You have chosen to backup to your harddisk. Please press OK to start the "
-"backup now."
-msgstr ""
-"Vi ste odabrali lokaciju za sigurnosnu kopiju na hard disku. Molim "
-"pritisnite OK za početak izrade sada."
+msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now."
+msgstr "Vi ste odabrali lokaciju za sigurnosnu kopiju na hard disku. Molim pritisnite OK za početak izrade sada."
 
-msgid ""
-"You have chosen to backup your settings. Please press OK to start the backup "
-"now."
-msgstr ""
-"Izabrali ste da snimite svoje postavke.Molimo pritisnite OK da sada počnete "
-"snimanje."
+msgid "You have chosen to backup your settings. Please press OK to start the backup now."
+msgstr "Izabrali ste da snimite svoje postavke.Molimo pritisnite OK da sada počnete snimanje."
 
-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 ""
-"Izabrali ste da kreirate novi .NFI flešer butabilni USB stik.Ovo će ponovo "
-"particirati USB stik i svi podaci će biti izbrisani.i "
+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 "Izabrali ste da kreirate novi .NFI flešer butabilni USB stik.Ovo će ponovo particirati USB stik i svi podaci će biti izbrisani.i "
 
-msgid ""
-"You have chosen to restore your settings. Enigma2 will restart after "
-"restore. Please press OK to start the restore now."
-msgstr ""
-"Izabrali ste da povratite vaše postavke.Enigma2 će ponovo startovati posle "
-"vraćanja.Molim sada pritisnite OK da počnete vraćanje."
+msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now."
+msgstr "Izabrali ste da povratite vaše postavke.Enigma2 će ponovo startovati posle vraćanja.Molim sada pritisnite OK da počnete vraćanje."
 
 #, python-format
 msgid "You have to wait %s!"
 msgstr "Morate pričekati %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 ""
-"Potreban je PC spojen s vašim drimboxom. Ukoliko trebate dodatne "
-"instrukcije, molim posetite ovu stranicu http://www.dm7025.de.\n"
-"Vaš drimbox će sada stati.Pošto ste izvršili proceduru nadogradnje prema "
-"uputstvima s web-stranice, vaš novi softver će vas pitati želite li vratiti "
-"sigurnosnu kopiju vaših postavki."
+"Potreban je PC spojen s vašim drimboxom. Ukoliko trebate dodatne instrukcije, molim posetite ovu stranicu http://www.dm7025.de.\n"
+"Vaš drimbox će sada stati.Pošto ste izvršili proceduru nadogradnje prema uputstvima s web-stranice, vaš novi softver će vas pitati želite li vratiti sigurnosnu kopiju vaših postavki."
 
 msgid ""
 "You need to set a pin code and hide it from your children.\n"
@@ -4876,38 +4686,29 @@ msgid ""
 "\n"
 "Please press OK to continue."
 msgstr ""
+"Vaš drimboks je sad spreman za upotrebu.\n"
+"\n"
+"Vaša internet veza sada radi.\n"
+"\n"
+"Molim pritisni OK da nastaviš."
 
 msgid "Your Dreambox will restart after pressing OK on your remote control."
-msgstr ""
-"Vaš drimbox će ponovo startovati posle pritiskanja OK na vašem daljinskom "
-"upravljaču."
+msgstr "Vaš drimbox će ponovo startovati posle pritiskanja OK na vašem daljinskom upravljaču."
 
 msgid "Your TV works with 50 Hz. Good!"
 msgstr "Vaš TV radi na 50 Hz.Dobro!"
 
-msgid ""
-"Your backup succeeded. We will now continue to explain the further upgrade "
-"process."
-msgstr ""
-"Sigurnosna kopija je uspešno napravljena. Sada ćemo dalje objasniti za "
-"sljedeći proces nadogradnje."
+msgid "Your backup succeeded. We will now continue to explain the further upgrade process."
+msgstr "Sigurnosna kopija je uspešno napravljena. Sada ćemo dalje objasniti za sljedeći proces nadogradnje."
 
-msgid ""
-"Your collection exceeds the size of a single layer medium, you will need a "
-"blank dual layer DVD!"
-msgstr ""
-"Vaša kolekcija prelazi veličinu jednoslojnog medija,trebate prazan dvoslojni "
-"DVD!  "
+msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"
+msgstr "Vaša kolekcija prelazi veličinu jednoslojnog medija,trebate prazan dvoslojni DVD!  "
 
 msgid "Your dreambox is shutting down. Please stand by..."
 msgstr "Vaš drimbox se sada gasi .Molimo stand by..."
 
-msgid ""
-"Your dreambox isn't connected to the internet properly. Please check it and "
-"try again."
-msgstr ""
-"Vaš drimbox nije ispravno spojen na internet. Molim proverite i pokušajte "
-"ponovo."
+msgid "Your dreambox isn't connected to the internet properly. Please check it and try again."
+msgstr "Vaš drimbox nije ispravno spojen na internet. Molim proverite i pokušajte ponovo."
 
 msgid "Your email address:"
 msgstr "Vaša imejl adresa:"
@@ -4923,6 +4724,8 @@ msgid ""
 "Your internet connection is not working!\n"
 "Please choose what you want to do next."
 msgstr ""
+"Vaša internet veza ne radi!\n"
+"Molim izaberi šta želiš sledeće učiniti."
 
 msgid "Your name (optional):"
 msgstr "Vaše  ime (opciono):"
@@ -5235,7 +5038,7 @@ msgid "enigma2 and network"
 msgstr "Enigma2 i mreža"
 
 msgid "enter hidden network SSID"
-msgstr ""
+msgstr "Unesi skriveni mrežni SSID"
 
 msgid "equal to"
 msgstr "jednako"
@@ -5310,7 +5113,7 @@ msgid "hidden network"
 msgstr "skrivena mreža"
 
 msgid "hidden..."
-msgstr ""
+msgstr "skriven..."
 
 msgid "hide extended description"
 msgstr "sakrij prošireni opis"
@@ -5796,7 +5599,7 @@ msgid "toggle time, chapter, audio, subtitle info"
 msgstr "Prebacuj vreme,poglavlje,audio,subtitl informacije"
 
 msgid "unavailable"
-msgstr ""
+msgstr "nedostupno"
 
 msgid "unconfirmed"
 msgstr "Nepotvrđeno"
@@ -5852,12 +5655,8 @@ msgstr "Da "
 msgid "yes (keep feeds)"
 msgstr "Da ( zadrži fidove)"
 
-msgid ""
-"your dreambox might be unusable now. Please consult the manual for further "
-"assistance before rebooting your dreambox."
-msgstr ""
-"vaš drimbox sada može biti  beskoristan. Molim proverite uputstvo za dalju "
-"pomoć pre ponovnog podizanja vašeg drimboxa."
+msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox."
+msgstr "vaš drimbox sada može biti  beskoristan. Molim proverite uputstvo za dalju pomoć pre ponovnog podizanja vašeg drimboxa."
 
 msgid "zap"
 msgstr "zap"
@@ -6074,47 +5873,23 @@ msgstr "prebačen"
 #~ msgid "Record Splitsize"
 #~ msgstr "Vel.Dat. kod Snimanja"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really reboot "
-#~ "now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "reboot sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno reboot sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "restart sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno restart sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or coming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno "
-#~ "isključiti sada?"
+#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?"
+#~ msgstr "Snimanje je trenutno u toku ili će uskoro početi...želite li stvarno isključiti sada?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "reboot now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "reboot sada ?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really reboot now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite reboot sada ?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "restart now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "restartati?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really restart now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite restartati?"
 
-#~ msgid ""
-#~ "Recording(s) are in progress or comming up in few seconds... really "
-#~ "shutdown now?"
-#~ msgstr ""
-#~ "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite "
-#~ "isključiti sada?"
+#~ msgid "Recording(s) are in progress or comming up in few seconds... really shutdown now?"
+#~ msgstr "Snimanje je u tijeku ili će poćeti za nekoliko trenutaka...zaista želite isključiti sada?"
 
 #~ msgid "Remove service"
 #~ msgstr "Izbriši uslugu"
diff --git a/skin.py b/skin.py
old mode 100644 (file)
new mode 100755 (executable)
index 5b8ce65..064fd21
--- a/skin.py
+++ b/skin.py
@@ -148,6 +148,8 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1)
                        guiObject.setFont(parseFont(value, scale))
                elif attrib == 'zPosition':
                        guiObject.setZPosition(int(value))
+               elif attrib == 'itemHeight':
+                       guiObject.setItemHeight(int(value))
                elif attrib in ("pixmap", "backgroundPixmap", "selectionPixmap"):
                        ptr = loadPixmap(value, desktop) # this should already have been filename-resolved.
                        if attrib == "pixmap":