Merge remote-tracking branch 'origin/bug_752_audio_selection_fix'
authorghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 08:55:37 +0000 (10:55 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 08:55:37 +0000 (10:55 +0200)
41 files changed:
data/setup.xml
data/skin_default.xml
lib/base/thread.cpp
lib/dvb/dvb.cpp
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/sec.cpp
lib/gdi/picexif.cpp
lib/python/Components/Converter/Makefile.am
lib/python/Components/Converter/ValueToPixmap.py [new file with mode: 0644]
lib/python/Components/DreamInfoHandler.py
lib/python/Components/Network.py
lib/python/Components/NimManager.py
lib/python/Components/Renderer/Pixmap.py
lib/python/Components/Scanner.py
lib/python/Components/UsageConfig.py
lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py
lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py
lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/NetworkSetup.py
lib/python/Screens/TaskView.py
lib/python/Screens/VirtualKeyBoard.py
lib/python/Tools/NumericalTextInput.py
po/et.po
po/fi.po
po/is.po
po/it.po
po/lt.po
po/nl.po
po/sk.po
po/sv.po

index 5f7cbf600cbaf51650575b41280cc76e3f83b7f3..862070940e2db329a4ee0a1659b8e91fb0d9cea1 100755 (executable)
@@ -28,6 +28,7 @@
                        <item level="2" text="Load Length of Movies in Movielist">config.usage.load_length_of_movies_in_moviellist</item>
                        <item level="1" text="Show positioner movement">config.usage.showdish</item>
                        <item level="1" text="Enable multiple bouquets">config.usage.multibouquet</item>
+                       <item level="1" text="Multi-EPG bouquet selection">config.usage.multiepg_ask_bouquet</item>
                        <item level="1" text="Change bouquets in quickzap">config.usage.quickzap_bouquet_change</item>
                        <item level="1" text="Alternative radio mode">config.usage.e1like_radio_mode</item>
                        <item level="1" text="Action on long powerbutton press">config.usage.on_long_powerpress</item>
index 4826706690a31b7803865fa807ada2b67b060f45..2dee1dbc9a9bab103dca7d7206ab8bbeaa9d8005 100755 (executable)
@@ -728,18 +728,18 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        <!-- Numerical help dialog -->
        <screen name="NumericalTextInputHelpDialog" position="190,400" zPosition="2" size="394,124" backgroundColor="#202020" flags="wfNoBorder">
                <eLabel position="0,0" size="392,122" backgroundColor="#c0c0c0" zPosition="-1" />
-               <widget name="key1" position="2,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key2" position="132,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key3" position="262,2" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key4" position="2,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key5" position="132,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key6" position="262,32" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key7" position="2,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key8" position="132,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key9" position="262,62" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="help1" position="2,92" size="130,30" font="Console;16" halign="center" valign="center" />
-               <widget name="key0" position="132,92" size="130,30" font="Console;12" halign="center" valign="center" />
-               <widget name="help2" position="262,92" size="130,30" font="Console;16" halign="center" valign="center" />
+               <widget name="key1" position="2,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key2" position="132,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key3" position="262,2" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key4" position="2,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key5" position="132,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key6" position="262,32" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key7" position="2,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key8" position="132,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key9" position="262,62" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="help1" position="2,92" size="130,30" font="Regular;18" halign="center" valign="center" />
+               <widget name="key0" position="132,92" size="130,30" font="Regular;14" halign="center" valign="center" />
+               <widget name="help2" position="262,92" size="130,30" font="Regular;18" halign="center" valign="center" />
        </screen>
        <!-- Parental control - editor -->
        <screen name="ParentalControlEditor" position="center,center" size="520,400" title="Parental control services Editor">
@@ -1151,10 +1151,13 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
        </screen>
        <!-- VirtualKeyBoard -->
        <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
-               <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
-               <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
-               <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
-               <widget name="list" position="10,100" size="540,225" selectionDisabled="1" transparent="1" />
+               <ePixmap pixmap="skin_default/vkey_text.png" position="9,45" zPosition="-4" size="542,52" alphatest="on" />
+               <widget source="country" render="Pixmap" position="490,0" size="60,40" alphatest="on" borderWidth="2" borderColor="yellow" >
+                       <convert type="ValueToPixmap">LanguageCode</convert>
+               </widget>
+               <widget name="header" position="10,20" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
+               <widget name="text" position="12,45" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
+               <widget name="list" position="10,110" size="540,225" selectionDisabled="1" transparent="1" />
        </screen>
        <!-- FileBrowser -->
        <screen name="FileBrowser" position="center,center" size="520,430" title="DVD File Browser" >
index fa923debe3ddf08aed24ec059b663a1b7486e071..1fda6a47a944efb23dd7e76a72cd7ba444991c0c 100644 (file)
@@ -58,7 +58,12 @@ int eThread::runAsync(int prio, int policy)
                pthread_attr_setschedpolicy(&attr, policy);
                pthread_attr_setschedparam(&attr, &p);
        }
-       
+
+       if (the_thread) {
+               eDebug("old thread joined %d", pthread_join(the_thread, 0));
+               the_thread = 0;
+       }
+
        if (pthread_create(&the_thread, &attr, wrapper, this))
        {
                pthread_attr_destroy(&attr);
@@ -69,7 +74,7 @@ int eThread::runAsync(int prio, int policy)
        
        pthread_attr_destroy(&attr);
        return 0;
-}                     
+}
 
 int eThread::run(int prio, int policy)
 {
index 6f9a67fbd092002b4b6818805a6a75eb6c29b2b5..0b1bdc2c2a5b2d3c21be82fc4a56c2345b568731 100644 (file)
@@ -145,19 +145,20 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
 #endif
                if (stat(filename, &s))
                        break;
-               ePtr<eDVBFrontend> fe;
+               eDVBFrontend *fe;
 
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
                        if (ok)
-                               m_frontend.push_back(fe);
+                               m_simulate_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
+
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, false, fe);
                        if (ok)
-                               m_simulate_frontend.push_back(fe);
+                               m_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
                ++num_fe;
        }
index b5de46c9d30d6a5f1df939d612a5a1bc7dac50c2..57188963cebd10f175d8425517f0b663b2ad26b9 100644 (file)
@@ -453,8 +453,8 @@ DEFINE_REF(eDVBFrontend);
 
 int eDVBFrontend::PriorityOrder=0;
 
-eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
-       :m_simulate(simulate), m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
+eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFrontend *simulate_fe)
+       :m_simulate(simulate), m_enabled(false), m_type(-1), m_simulate_fe(simulate_fe), m_dvbid(fe), m_slotid(fe)
        ,m_fd(-1), m_rotor_mode(false), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
        ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
@@ -503,10 +503,10 @@ int eDVBFrontend::openFrontend()
 #else
        dvb_frontend_info fe_info;
 #endif
-       eDebugNoSimulate("opening frontend %d", m_dvbid);
-       if (m_fd < 0)
+       if (!m_simulate)
        {
-               if (!m_simulate || m_type == -1)
+               eDebug("opening frontend %d", m_dvbid);
+               if (m_fd < 0)
                {
                        m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
                        if (m_fd < 0)
@@ -515,70 +515,69 @@ int eDVBFrontend::openFrontend()
                                return -1;
                        }
                }
-       }
-       else
-               eWarning("frontend %d already opened", m_dvbid);
-       if (m_type == -1)
-       {
-               if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+               else
+                       eWarning("frontend %d already opened", m_dvbid);
+               if (m_type == -1)
                {
-                       eWarning("ioctl FE_GET_INFO failed");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
-               }
+                       if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+                       {
+                               eWarning("ioctl FE_GET_INFO failed");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
 
-               switch (fe_info.type)
-               {
-               case FE_QPSK:
-                       m_type = iDVBFrontend::feSatellite;
-                       break;
-               case FE_QAM:
-                       m_type = iDVBFrontend::feCable;
-                       break;
-               case FE_OFDM:
-                       m_type = iDVBFrontend::feTerrestrial;
-                       break;
-               default:
-                       eWarning("unknown frontend type.");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
+                       switch (fe_info.type)
+                       {
+                       case FE_QPSK:
+                               m_type = iDVBFrontend::feSatellite;
+                               break;
+                       case FE_QAM:
+                               m_type = iDVBFrontend::feCable;
+                               break;
+                       case FE_OFDM:
+                               m_type = iDVBFrontend::feTerrestrial;
+                               break;
+                       default:
+                               eWarning("unknown frontend type.");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
+                       if (m_simulate_fe)
+                               m_simulate_fe->m_type = m_type;
+                       eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
                }
-               eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
-       }
 
 #if HAVE_DVB_API_VERSION < 3
-       if (m_type == iDVBFrontend::feSatellite)
-       {
-                       if (m_secfd < 0)
-                       {
-                               if (!m_simulate)
+               if (m_type == iDVBFrontend::feSatellite)
+               {
+                               if (m_secfd < 0)
                                {
-                                       m_secfd = ::open(m_sec_filename, O_RDWR);
-                                       if (m_secfd < 0)
+                                       if (!m_simulate)
                                        {
-                                               eWarning("failed! (%s) %m", m_sec_filename);
-                                               ::close(m_fd);
-                                               m_fd=-1;
-                                               return -1;
+                                               m_secfd = ::open(m_sec_filename, O_RDWR);
+                                               if (m_secfd < 0)
+                                               {
+                                                       eWarning("failed! (%s) %m", m_sec_filename);
+                                                       ::close(m_fd);
+                                                       m_fd=-1;
+                                                       return -1;
+                                               }
                                        }
                                }
-                       }
-                       else
-                               eWarning("sec %d already opened", m_dvbid);
-       }
+                               else
+                                       eWarning("sec %d already opened", m_dvbid);
+               }
 #endif
 
-       setTone(iDVBFrontend::toneOff);
-       setVoltage(iDVBFrontend::voltageOff);
-
-       if (!m_simulate)
-       {
                m_sn = eSocketNotifier::create(eApp, m_fd, eSocketNotifier::Read, false);
                CONNECT(m_sn->activated, eDVBFrontend::feEvent);
        }
 
+       setTone(iDVBFrontend::toneOff);
+       setVoltage(iDVBFrontend::voltageOff);
+
        return 0;
 }
 
index bef4a18f1de923ec37fe872c4a4456936377ab47..5887f4049431c257f9160d425f6e166dc0b77c31 100644 (file)
@@ -72,6 +72,7 @@ private:
        bool m_simulate;
        bool m_enabled;
        int m_type;
+       eDVBFrontend *m_simulate_fe; // only used to set frontend type in dvb.cpp
        int m_dvbid;
        int m_slotid;
        int m_fd;
@@ -115,7 +116,7 @@ private:
        bool setSecSequencePos(int steps);
        static int PriorityOrder;
 public:
-       eDVBFrontend(int adap, int fe, int &ok, bool simulate=false);
+       eDVBFrontend(int adap, int fe, int &ok, bool simulate=false, eDVBFrontend *simulate_fe=NULL);
        virtual ~eDVBFrontend();
 
        int readInputpower();
index a2bc88693d10185845b99800ff7d040ce0a333fa..e4f00add729eb17c86f92658ef5c8ccfa058070a 100644 (file)
@@ -324,6 +324,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13;
                        bool is_unicable = lnb_param.SatCR_idx != -1;
 
+                       bool useGotoXX = false;
+                       int RotorCmd=-1;
+                       int send_mask = 0;
+
                        lnb_param.guard_offset = 0; //HACK
 
                        frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
@@ -411,6 +415,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
                                                eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
                                frontend.setData(eDVBFrontend::FREQ_OFFSET, (lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 + lof - (2 * (lnb_param.SatCRvco - (tmp1-tmp2))) );
+                               voltage = VOLTAGE(13);
                        }
 
                        if (diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
@@ -433,7 +438,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                        (di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO);
                                bool changed_burst = send_burst && (forceChanged || toneburst != lastToneburst);
 
-                               int send_mask = 0; /*
+                               /* send_mask
                                        1 must send csw
                                        2 must send ucsw
                                        4 send toneburst first
@@ -487,8 +492,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 #endif
                                if (doSetVoltageToneFrontend)
                                {
-                                       int RotorCmd=-1;
-                                       bool useGotoXX = false;
+
                                        if ( diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2
                                                && !sat.no_rotor_command_on_tune )
                                        {
@@ -561,7 +565,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        vlt = iDVBFrontend::voltage13;
                                                else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                                {
-                                                       if (rotor_param.m_inputpower_parameters.m_use)
+                                                       if (rotor_param.m_inputpower_parameters.m_use && !is_unicable)
                                                                vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
                                                        else
                                                                vlt = VOLTAGE(13);  // in normal mode start turning with 13V
@@ -687,187 +691,6 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                }
                                        }
 
-                                       eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd);
-                                       if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
-                                       {
-                                               eSecCommand::pair compare;
-                                               if (!send_mask && !is_unicable)
-                                               {
-                                                       compare.steps = +3;
-                                                       compare.tone = iDVBFrontend::toneOff;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
-
-                                                       compare.voltage = iDVBFrontend::voltageOff;
-                                                       compare.steps = +4;
-                                                       // the next is a check if voltage is switched off.. then we first set a voltage :)
-                                                       // else we set voltage after all diseqc stuff..
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
-
-                                                       if (rotor_param.m_inputpower_parameters.m_use)
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // set 18V for measure input power
-                                                       else
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
-
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD]) ); // wait 750ms when voltage was disabled
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +9) );  // no need to send stop rotor cmd and recheck voltage
-                                               }
-                                               else
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BETWEEN_SWITCH_AND_MOTOR_CMD]) ); // wait 700ms when diseqc changed
-
-                                               eDVBDiseqcCommand diseqc;
-                                               memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
-                                               diseqc.len = 3;
-                                               diseqc.data[0] = 0xE0;
-                                               diseqc.data[1] = 0x31;  // positioner
-                                               diseqc.data[2] = 0x60;  // stop
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_ROTORPOS_VALID_GOTO, +5) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                               // wait 150msec after send rotor stop cmd
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_MOTOR_STOP_CMD]) );
-
-                                               diseqc.data[0] = 0xE0;
-                                               diseqc.data[1] = 0x31;          // positioner
-                                               if ( useGotoXX )
-                                               {
-                                                       diseqc.len = 5;
-                                                       diseqc.data[2] = 0x6E;  // drive to angular position
-                                                       diseqc.data[3] = ((RotorCmd & 0xFF00) / 0x100);
-                                                       diseqc.data[4] = RotorCmd & 0xFF;
-                                               }
-                                               else
-                                               {
-                                                       diseqc.len = 4;
-                                                       diseqc.data[2] = 0x6B;  // goto stored sat position
-                                                       diseqc.data[3] = RotorCmd;
-                                                       diseqc.data[4] = 0x00;
-                                               }
-//                                             if(!is_unicable)
-                                               {
-                                                       int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds!
-                                                       if ( rotor_param.m_inputpower_parameters.m_use && !is_unicable)
-                                                       { // use measure rotor input power to detect rotor state
-                                                               bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
-                                                               eSecCommand::rotor cmd;
-                                                               eSecCommand::pair compare;
-                                                               if (turn_fast)
-                                                                       compare.voltage = VOLTAGE(18);
-                                                               else
-                                                                       compare.voltage = VOLTAGE(13);
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-       // measure idle power values
-                                                               compare.steps = -2;
-                                                               if (turn_fast) {
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
-                                                                       compare.val = 1;
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
-                                                               }
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
-                                                               compare.val = 0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-       ////////////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
-       // rotor start loop
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                               cmd.direction=1;  // check for running rotor
-                                                               cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
-                                                               cmd.steps=+5;
-                                                               cmd.okcount=0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
-       ////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                               if (turn_fast)
-                                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*20) );  // mrt is in seconds... our SLEEP time is 50ms.. so * 20
-       // rotor running loop
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
-                                                               cmd.direction=0;  // check for stopped rotor
-                                                               cmd.steps=+3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
-       /////////////////////
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
-                                                       }
-                                                       else
-                                                       {  // use normal turning mode
-                                                               if (curRotorPos != -1)
-                                                               {               
-                                                                       mrt = abs(curRotorPos - sat.orbital_position);
-                                                                       if (mrt > 1800)
-                                                                               mrt = 3600 - mrt;
-                                                                       if (mrt % 10)
-                                                                               mrt += 10; // round a little bit
-                                                                       mrt *= 2000;  // (we assume a very slow rotor with just 0.5 degree per second here)
-                                                                       mrt /= 10000;
-                                                                       mrt += 3; // a little bit overhead
-                                                               }
-                                                               doSetVoltageToneFrontend=false;
-                                                               doSetFrontend=false;
-                                                               eSecCommand::rotor cmd;
-                                                               eSecCommand::pair compare;
-                                                               compare.voltage = VOLTAGE(13);
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
-       
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 1000) ); // sleep one second before change voltage or tone
-
-                                                               compare.voltage = voltage;
-                                                               compare.steps = +3;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
-
-                                                               compare.tone = tone;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 0) );
-       
-                                                               cmd.direction=1;  // check for running rotor
-                                                               cmd.deltaA=0;
-                                                               cmd.steps = +3;
-                                                               cmd.okcount=0;
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*4) );  // mrt is in seconds... our SLEEP time is 250ms.. so * 4
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +5 ) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +4) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 1) );
-                                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -5) );
-                                                       }
-                                                       eDebug("set rotor timeout to %d seconds", mrt);
-                                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd);
-                                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position);
-                                               }
-                                       }
                                }
                        }
                        else
@@ -880,22 +703,6 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw);
                        sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param);
 
-                       if (doSetVoltageToneFrontend && !is_unicable)
-                       {
-                               eSecCommand::pair compare;
-                               compare.voltage = voltage;
-                               compare.steps = +3;
-                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // voltage already correct ?
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_VOLTAGE_CHANGE]) );
-                               compare.tone = tone;
-                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
-                       }
-
-                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
-
                        if(is_unicable)
                        {
                                // check if voltage is disabled
@@ -903,10 +710,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                compare.steps = +3;
                                compare.voltage = iDVBFrontend::voltageOff;
                                sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS] ) );
 
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );  // wait 20 ms after voltage change
        
@@ -921,9 +728,209 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                               if ( RotorCmd != -1 && RotorCmd != lastRotorCmd && !rotor_param.m_inputpower_parameters.m_use)
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
                        }
 
+                       eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd);
+                       if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
+                       {
+                               eSecCommand::pair compare;
+                               if (!send_mask && !is_unicable)
+                               {
+                                       compare.steps = +3;
+                                       compare.tone = iDVBFrontend::toneOff;
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE_DISABLE_BEFORE_DISEQC]) );
+
+                                       compare.voltage = iDVBFrontend::voltageOff;
+                                       compare.steps = +4;
+                                       // the next is a check if voltage is switched off.. then we first set a voltage :)
+                                       // else we set voltage after all diseqc stuff..
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
+
+                                       if (rotor_param.m_inputpower_parameters.m_use)
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // set 18V for measure input power
+                                       else
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
+
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD]) ); // wait 750ms when voltage was disabled
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +9) );  // no need to send stop rotor cmd and recheck voltage
+                               }
+                               else
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BETWEEN_SWITCH_AND_MOTOR_CMD]) ); // wait 700ms when diseqc changed
+
+                               eDVBDiseqcCommand diseqc;
+                               memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
+                               diseqc.len = 3;
+                               diseqc.data[0] = 0xE0;
+                               diseqc.data[1] = 0x31;  // positioner
+                               diseqc.data[2] = 0x60;  // stop
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_ROTORPOS_VALID_GOTO, +5) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                               // wait 150msec after send rotor stop cmd
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_MOTOR_STOP_CMD]) );
+
+                               diseqc.data[0] = 0xE0;
+                               diseqc.data[1] = 0x31;          // positioner
+                               if ( useGotoXX )
+                               {
+                                       diseqc.len = 5;
+                                       diseqc.data[2] = 0x6E;  // drive to angular position
+                                       diseqc.data[3] = ((RotorCmd & 0xFF00) / 0x100);
+                                       diseqc.data[4] = RotorCmd & 0xFF;
+                               }
+                               else
+                               {
+                                       diseqc.len = 4;
+                                       diseqc.data[2] = 0x6B;  // goto stored sat position
+                                       diseqc.data[3] = RotorCmd;
+                                       diseqc.data[4] = 0x00;
+                               }
+
+                               {
+                                       int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds!
+                                       if ( rotor_param.m_inputpower_parameters.m_use)
+                                       { // use measure rotor input power to detect rotor state
+                                               bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed) && !is_unicable;
+                                               eSecCommand::rotor cmd;
+                                               eSecCommand::pair compare;
+                                               if (turn_fast)
+                                                       compare.voltage = VOLTAGE(18);
+                                               else
+                                                       compare.voltage = VOLTAGE(13);
+                                               compare.steps = +3;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+       // measure idle power values
+                                               compare.steps = -2;
+                                               if (turn_fast) {
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
+                                                       compare.val = 1;
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                               }
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
+                                               compare.val = 0;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+       ////////////////////////////
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) );  // 2 retries
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) );  // 2 seconds rotor start timout
+       // rotor start loop
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // 50msec delay
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                               cmd.direction=1;  // check for running rotor
+                                               cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta;
+                                               cmd.steps=+5;
+                                               cmd.okcount=0;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) );  // timeout .. we assume now the rotor is already at the correct position 
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
+       ////////////////////
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                               if (turn_fast)
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*20) );  // mrt is in seconds... our SLEEP time is 50ms.. so * 20
+       // rotor running loop
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) );
+                                               cmd.direction=0;  // check for stopped rotor
+                                               cmd.steps=+3;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout ? this should never happen
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
+       /////////////////////
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                       }
+                                       else
+                                       { // use normal turning mode
+                                               if (curRotorPos != -1)
+                                               {
+                                                       mrt = abs(curRotorPos - sat.orbital_position);
+                                                       if (mrt > 1800)
+                                                               mrt = 3600 - mrt;
+                                                       if (mrt % 10)
+                                                               mrt += 10; // round a little bit
+                                                       mrt *= 2000;  // (we assume a very slow rotor with just 0.5 degree per second here)
+                                                       mrt /= 10000;
+                                                       mrt += 3; // a little bit overhead
+                                               }
+                                               doSetVoltageToneFrontend=false;
+                                               doSetFrontend=false;
+                                               eSecCommand::rotor cmd;
+                                               eSecCommand::pair compare;
+                                               compare.voltage = VOLTAGE(13);
+                                               compare.steps = +3;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) );  // wait 150msec after voltage change
+
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 1000) ); // sleep one second before change voltage or tone
+
+                                               compare.voltage = voltage;
+                                               compare.steps = +3;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage?
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) );  // wait 2 second before set high voltage
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
+
+                                               compare.tone = tone;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 0) );
+
+                                               cmd.direction=1;  // check for running rotor
+                                               cmd.deltaA=0;
+                                               cmd.steps = +3;
+                                               cmd.okcount=0;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, mrt*4) );  // mrt is in seconds... our SLEEP time is 250ms.. so * 4
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );  // 250msec delay
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +5 ) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) );  // goto loop start
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +4) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND, 1) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -5) );
+                                       }
+                                       eDebug("set rotor timeout to %d seconds", mrt);
+                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd);
+                                       sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position);
+                               }
+                       }
+
+                       if (doSetVoltageToneFrontend && !is_unicable)
+                       {
+                               eSecCommand::pair compare;
+                               compare.voltage = voltage;
+                               compare.steps = +3;
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // voltage already correct ?
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_VOLTAGE_CHANGE]) );
+                               compare.tone = tone;
+                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
+                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_FINAL_CONT_TONE_CHANGE]) );
+                       }
+
+                       sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
+
                        if (doSetFrontend)
                        {
                                sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
index 2daeeffd862d8b7994715c7e572463a727b470d8..1eacc29c4dc979c2f423bd54e912c0ade7a9bb61 100644 (file)
@@ -90,9 +90,9 @@ void Cexif::ClearExif()
 
 bool Cexif::DecodeExif(const char *filename, int Thumb)
 {
+       bool ret = false;
        FILE * hFile = fopen(filename, "r");
-       if(!hFile) return false;
-
+       if(!hFile) return ret;
 
        m_exifinfo = new EXIFINFO;
        memset(m_exifinfo,0,sizeof(EXIFINFO));
@@ -107,7 +107,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
        int a = fgetc(hFile);
        strcpy(m_szLastError,"EXIF-Data not found");
 
-       if (a != 0xff || fgetc(hFile) != M_SOI) return false;
+       if (a != 0xff || fgetc(hFile) != M_SOI)
+               goto decode_exif_out_false;
 
        for(;;)
        {
@@ -117,7 +118,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                if (SectionsRead >= MAX_SECTIONS)
                {
-                       strcpy(m_szLastError,"Too many sections in jpg file"); return false;
+                       strcpy(m_szLastError,"Too many sections in jpg file");
+                       goto decode_exif_out_false;
                }
 
                for (a=0;a<7;a++)
@@ -127,13 +129,15 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                        if (a >= 6)
                        {
-                               strcpy(m_szLastError,"too many padding unsigned chars\n"); return false;
+                               strcpy(m_szLastError,"too many padding unsigned chars\n");
+                               goto decode_exif_out_false;
                        }
                }
 
                if (marker == 0xff)
                {
-                       strcpy(m_szLastError,"too many padding unsigned chars!"); return false;
+                       strcpy(m_szLastError,"too many padding unsigned chars!");
+                       goto decode_exif_out_false;
                }
 
                Sections[SectionsRead].Type = marker;
@@ -145,14 +149,16 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
 
                if (itemlen < 2)
                {
-                       strcpy(m_szLastError,"invalid marker"); return false;
+                       strcpy(m_szLastError,"invalid marker");
+                       goto decode_exif_out_false;
                }
                Sections[SectionsRead].Size = itemlen;
 
                Data = (unsigned char *)malloc(itemlen);
                if (Data == NULL)
                {
-                       strcpy(m_szLastError,"Could not allocate memory"); return false;
+                       strcpy(m_szLastError,"Could not allocate memory");
+                       goto decode_exif_out_false;
                }
                Sections[SectionsRead].Data = Data;
 
@@ -163,17 +169,18 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
                got = fread(Data+2, 1, itemlen-2,hFile);
                if (got != itemlen-2)
                {
-                       strcpy(m_szLastError,"Premature end of file?"); return false;
+                       strcpy(m_szLastError,"Premature end of file?");
+                       goto decode_exif_out_false;
                }
                SectionsRead += 1;
 
                switch(marker)
                {
                case M_SOS:
-                       return true;
+                       goto decode_exif_out_true;
                case M_EOI:
                        printf("No image in jpeg!\n");
-                       return false;
+                       goto decode_exif_out_false;
                case M_COM:
                        if (HaveCom)
                        {
@@ -221,8 +228,12 @@ bool Cexif::DecodeExif(const char *filename, int Thumb)
                }
        }
 
+decode_exif_out_true:
+       ret = true;
+
+decode_exif_out_false:
        fclose(hFile);
-       return true;
+       return ret;
 }
 
 bool Cexif::process_EXIF(unsigned char * CharBuf, unsigned int length)
index 3b6fd3e807c74704be117a3cdc01de3ab194ea0b..b73f6d5a6307d88f12e4ac9f9458565d4306bc9b 100644 (file)
@@ -6,4 +6,4 @@ install_PYTHON = \
        ConditionalShowHide.py ServicePosition.py ValueRange.py RdsInfo.py Streaming.py \
        StaticMultiList.py ServiceTime.py MovieInfo.py MenuEntryCompare.py StringListSelection.py \
        ValueBitTest.py TunerInfo.py ConfigEntryTest.py TemplatedMultiContent.py ProgressToText.py \
-       Combine.py SensorToText.py
+       Combine.py SensorToText.py ValueToPixmap.py
diff --git a/lib/python/Components/Converter/ValueToPixmap.py b/lib/python/Components/Converter/ValueToPixmap.py
new file mode 100644 (file)
index 0000000..0acd263
--- /dev/null
@@ -0,0 +1,40 @@
+from Components.Converter.Converter import Converter
+from Components.Element import cached, ElementError
+from Tools.Directories import fileExists, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, resolveFilename
+from Tools.LoadPixmap import LoadPixmap
+
+
+class ValueToPixmap(Converter, object):
+       LANGUAGE_CODE = 0
+       PATH = 1
+       
+       def __init__(self, type):
+               Converter.__init__(self, type)
+               if type == "LanguageCode":
+                       self.type = self.LANGUAGE_CODE
+               elif type == "Path":
+                       self.type = self.PATH
+               else:
+                       raise ElementError("'%s' is not <LanguageCode|Path> for ValueToPixmap converter" % type)
+
+       @cached
+       def getPixmap(self):
+               if self.source:
+                       val = self.source.text
+                       if val in (None, ""):
+                               return None
+               if self.type == self.PATH:
+                       return LoadPixmap(val)
+               if self.type == self.LANGUAGE_CODE:
+                       png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + val[3:].lower() + ".png"))
+                       if png == None:
+                               png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png"))
+                       return png
+               return None                     
+       
+       pixmap = property(getPixmap)
+
+       def changed(self, what):
+               if what[0] != self.CHANGED_SPECIFIC or what[1] == self.type:
+                       Converter.changed(self, what)
+
index 8e9c29d11c100ce300eb0dfb0b61ee303e8b1a45..8097365c5527608c160d6014ed63be4860815762 100755 (executable)
@@ -84,6 +84,8 @@ class InfoHandler(xml.sax.ContentHandler):
                                self.attributes["packagename"] = str(attrs["packagename"])
                        if attrs.has_key("packagetype"):
                                self.attributes["packagetype"] = str(attrs["packagetype"])
+                       if attrs.has_key("needsRestart"):
+                               self.attributes["needsRestart"] = str(attrs["needsRestart"])
                        if attrs.has_key("shortdescription"):
                                self.attributes["shortdescription"] = str(attrs["shortdescription"])
 
@@ -120,6 +122,8 @@ class InfoHandler(xml.sax.ContentHandler):
                        self.attributes["name"] = str(data)
                if self.elements[-1] == "packagename":
                        self.attributes["packagename"] = str(data)
+               if self.elements[-1] == "needsRestart":
+                       self.attributes["needsRestart"] = str(data)
                if self.elements[-1] == "shortdescription":
                        self.attributes["shortdescription"] = str(data)
                if self.elements[-1] == "description":
index 04511d253a30fe7fb2d86d7eb38d3526d1970992..32b8bdbe76dcb89f68d9c1eb152e2aadbbb7a64c 100755 (executable)
@@ -20,9 +20,8 @@ class Network:
                self.Console = Console()
                self.LinkConsole = Console()
                self.restartConsole = Console()
-               self.deactivateConsole = Console()
                self.deactivateInterfaceConsole = Console()
-               self.activateConsole = Console()
+               self.activateInterfaceConsole = Console()
                self.resetNetworkConsole = Console()
                self.DnsConsole = Console()
                self.PingConsole = Console()
@@ -30,37 +29,29 @@ class Network:
                self.friendlyNames = {}
                self.lan_interfaces = []
                self.wlan_interfaces = []
+               self.remoteRootFS = None
                self.getInterfaces()
 
        def onRemoteRootFS(self):
-               fp = file('/proc/mounts', 'r')
-               mounts = fp.readlines()
-               fp.close()
-               for line in mounts:
-                       parts = line.strip().split(' ')
-                       if parts[1] == '/' and (parts[2] == 'nfs' or parts[2] == 'smbfs'):
-                               return True
-               return False
+               if self.remoteRootFS == None:
+                       fp = file('/proc/mounts', 'r')
+                       mounts = fp.readlines()
+                       fp.close()
+                       self.remoteRootFS = False
+                       for line in mounts:
+                               parts = line.strip().split()
+                               if parts[1] == '/' and parts[2] == 'nfs':
+                                       self.remoteRootFS = True
+                                       break
+               return self.remoteRootFS
+
+       def isBlacklisted(self, iface):
+               return iface in ('lo', 'wifi0', 'wmaster0')
 
        def getInterfaces(self, callback = None):
-               devicesPattern = re_compile('[a-z]+[0-9]+')
                self.configuredInterfaces = []
-               fp = file('/proc/net/dev', 'r')
-               result = fp.readlines()
-               fp.close()
-               for line in result:
-                       try:
-                               device = devicesPattern.search(line).group()
-                               if device in ('wifi0', 'wmaster0'):
-                                       continue
-                               self.getDataForInterface(device, callback)
-                       except AttributeError:
-                               pass
-               #print "self.ifaces:", self.ifaces
-               #self.writeNetworkConfig()
-               #print ord(' ')
-               #for line in result:
-               #       print ord(line[0])
+               for device in self.getInstalledAdapters():
+                       self.getAddrInet(device, callback)
 
        # helper function
        def regExpMatch(self, pattern, string):
@@ -69,21 +60,16 @@ class Network:
                try:
                        return pattern.search(string).group()
                except AttributeError:
-                       None
+                       return None
 
        # helper function to convert ips from a sring to a list of ints
        def convertIP(self, ip):
-               strIP = ip.split('.')
-               ip = []
-               for x in strIP:
-                       ip.append(int(x))
-               return ip
-
-       def getDataForInterface(self, iface,callback):
-               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
+               return [ int(n) for n in ip.split('.') ]
+
+       def getAddrInet(self, iface, callback):
                if not self.Console:
                        self.Console = Console()
-               cmd = "ip -o addr"
+               cmd = "ip -o addr show dev " + iface
                self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback])
 
        def IPaddrFinished(self, result, retval, extra_args):
@@ -92,14 +78,14 @@ class Network:
                globalIPpattern = re_compile("scope global")
                ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
                netRegexp = '[0-9]{1,2}'
-               macRegexp = '[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}'
+               macRegexp = '[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}\:[0-9a-fA-F]{2}'
                ipLinePattern = re_compile('inet ' + ipRegexp + '/')
                ipPattern = re_compile(ipRegexp)
                netmaskLinePattern = re_compile('/' + netRegexp)
                netmaskPattern = re_compile(netRegexp)
                bcastLinePattern = re_compile(' brd ' + ipRegexp)
                upPattern = re_compile('UP')
-               macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}\:[a-z0-9]{2}')
+               macPattern = re_compile(macRegexp)
                macLinePattern = re_compile('link/ether ' + macRegexp)
                
                for line in result.splitlines():
@@ -144,7 +130,7 @@ class Network:
                        print line[0:7]
                        if line[0:7] == "0.0.0.0":
                                gateway = self.regExpMatch(ipPattern, line[16:31])
-                               if gateway is not None:
+                               if gateway:
                                        data['gateway'] = self.convertIP(gateway)
                                        
                self.ifaces[iface] = data
@@ -176,8 +162,9 @@ class Network:
                                fp.write(iface["preup"])
                        if iface["predown"] is not False and not iface.has_key("configStrings"):
                                fp.write(iface["predown"])
-                       fp.write("\n")
+                       fp.write("\n")                          
                fp.close()
+               self.configuredNetworkAdapters = self.configuredInterfaces
                self.writeNameserverConfig()
 
        def writeNameserverConfig(self):
@@ -263,49 +250,13 @@ class Network:
                for line in resolv:
                        if self.regExpMatch(nameserverPattern, line) is not None:
                                ip = self.regExpMatch(ipPattern, line)
-                               if ip is not None:
+                               if ip:
                                        self.nameservers.append(self.convertIP(ip))
 
                print "nameservers:", self.nameservers
 
-       def deactivateNetworkConfig(self, callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
-               self.deactivateConsole = Console()
-               self.commands = []
-               self.commands.append("/etc/init.d/avahi-daemon stop")
-               for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
-               self.commands.append("/etc/init.d/networking stop")
-               self.commands.append("killall -9 udhcpc")
-               self.commands.append("rm /var/run/udhcpc*")
-               self.deactivateConsole.eBatch(self.commands, self.deactivateNetworkFinished, callback, debug=True)
-               
-       def deactivateNetworkFinished(self,extra_args):
-               callback = extra_args
-               if len(self.deactivateConsole.appContainers) == 0:
-                       if callback is not None:
-                               callback(True)
-
-       def activateNetworkConfig(self, callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
-               self.activateConsole = Console()
-               self.commands = []
-               self.commands.append("/etc/init.d/networking start")
-               self.commands.append("/etc/init.d/avahi-daemon start")
-               self.activateConsole.eBatch(self.commands, self.activateNetworkFinished, callback, debug=True)
-               
-       def activateNetworkFinished(self,extra_args):
-               callback = extra_args
-               if len(self.activateConsole.appContainers) == 0:
-                       if callback is not None:
-                               callback(True)
+       def getInstalledAdapters(self):
+               return [x for x in listdir('/sys/class/net') if not self.isBlacklisted(x)]
 
        def getConfiguredAdapters(self):
                return self.configuredNetworkAdapters
@@ -316,47 +267,44 @@ class Network:
        def getFriendlyAdapterName(self, x):
                if x in self.friendlyNames.keys():
                        return self.friendlyNames.get(x, x)
-               else:
-                       self.friendlyNames[x] = self.getFriendlyAdapterNaming(x)
-                       return self.friendlyNames.get(x, x) # when we have no friendly name, use adapter name
+               self.friendlyNames[x] = self.getFriendlyAdapterNaming(x)
+               return self.friendlyNames.get(x, x) # when we have no friendly name, use adapter name
 
        def getFriendlyAdapterNaming(self, iface):
-               if iface.startswith('eth'):
-                       if iface not in self.lan_interfaces and len(self.lan_interfaces) == 0:
-                               self.lan_interfaces.append(iface)
-                               return _("LAN connection")
-                       elif iface not in self.lan_interfaces and len(self.lan_interfaces) >= 1:
-                               self.lan_interfaces.append(iface)
-                               return _("LAN connection") + " " + str(len(self.lan_interfaces))
+               name = None
+               if self.isWirelessInterface(iface):
+                       if iface not in self.wlan_interfaces:
+                               name = _("WLAN connection")
+                               if len(self.wlan_interfaces):
+                                       name += " " + str(len(self.wlan_interfaces)+1)
+                               self.wlan_interfaces.append(iface)                                                              
                else:
-                       if iface not in self.wlan_interfaces and len(self.wlan_interfaces) == 0:
-                               self.wlan_interfaces.append(iface)
-                               return _("WLAN connection")
-                       elif iface not in self.wlan_interfaces and len(self.wlan_interfaces) >= 1:
-                               self.wlan_interfaces.append(iface)
-                               return _("WLAN connection") + " " + str(len(self.wlan_interfaces))
-
+                       if iface not in self.lan_interfaces:
+                               name = _("LAN connection")
+                               if len(self.lan_interfaces):
+                                       name += " " + str(len(self.lan_interfaces)+1)
+                               self.lan_interfaces.append(iface)
+               return name
+       
        def getFriendlyAdapterDescription(self, iface):
-               if iface == 'eth0':
-                       return _("Internal LAN adapter.")
+               if not self.isWirelessInterface(iface):
+                       return _('Ethernet network interface')
+
+               moduledir = self.getWlanModuleDir(iface)
+               if moduledir:
+                       name = os_path.basename(os_path.realpath(moduledir))
+                       if name in ('ath_pci','ath5k'):
+                               name = 'Atheros'
+                       elif name in ('rt73','rt73usb','rt3070sta'):
+                               name = 'Ralink'
+                       elif name == 'zd1211b':
+                               name = 'Zydas'
+                       elif name == 'r871x_usb_drv':
+                               name = 'Realtek'
                else:
-                       classdir = "/sys/class/net/" + iface + "/device/"
-                       driverdir = "/sys/class/net/" + iface + "/device/driver/"
-                       if os_path.exists(classdir):
-                               files = listdir(classdir)
-                               if 'driver' in files:
-                                       if os_path.realpath(driverdir).endswith('ath_pci'):
-                                               return _("Atheros")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('zd1211b'):
-                                               return _("Zydas")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('rt73'):
-                                               return _("Ralink")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       elif os_path.realpath(driverdir).endswith('rt73usb'):
-                                               return _("Ralink")+ " " + str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                                       else:
-                                               return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter.") 
-                               else:
-                                       return _("Unknown network adapter.")
+                       name = _('Unknown')
+
+               return name + ' ' + _('wireless network interface')
 
        def getAdapterName(self, iface):
                return iface
@@ -404,16 +352,12 @@ class Network:
                                        self.nameservers[i] = newnameserver
 
        def resetNetworkConfig(self, mode='lan', callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
                self.resetNetworkConsole = Console()
                self.commands = []
                self.commands.append("/etc/init.d/avahi-daemon stop")
                for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
+                       if iface != 'eth0' or not self.onRemoteRootFS():
+                               self.commands.append("ip addr flush dev " + iface)      
                self.commands.append("/etc/init.d/networking stop")
                self.commands.append("killall -9 udhcpc")
                self.commands.append("rm /var/run/udhcpc*")
@@ -487,18 +431,15 @@ class Network:
                                        statecallback(self.NetworkState)
                
        def restartNetwork(self,callback = None):
-               if self.onRemoteRootFS():
-                       if callback is not None:
-                               callback(True)
-                       return
                self.restartConsole = Console()
                self.config_ready = False
                self.msgPlugins()
                self.commands = []
                self.commands.append("/etc/init.d/avahi-daemon stop")
                for iface in self.ifaces.keys():
-                       cmd = "ip addr flush " + iface
-                       self.commands.append(cmd)               
+                       if iface != 'eth0' or not self.onRemoteRootFS():
+                               self.commands.append("ifdown " + iface)
+                               self.commands.append("ip addr flush dev " + iface)
                self.commands.append("/etc/init.d/networking stop")
                self.commands.append("killall -9 udhcpc")
                self.commands.append("rm /var/run/udhcpc*")
@@ -555,9 +496,13 @@ class Network:
                                        
        def stopDeactivateInterfaceConsole(self):
                if self.deactivateInterfaceConsole is not None:
-                       if len(self.deactivateInterfaceConsole.appContainers):
-                               for name in self.deactivateInterfaceConsole.appContainers.keys():
-                                       self.deactivateInterfaceConsole.kill(name)
+                       self.deactivateInterfaceConsole.killAll()
+                       self.deactivateInterfaceConsole = None
+
+       def stopActivateInterfaceConsole(self):
+               if self.activateInterfaceConsole is not None:
+                       self.activateInterfaceConsole.killAll()
+                       self.activateInterfaceConsole = None
                                        
        def checkforInterface(self,iface):
                if self.getAdapterAttribute(iface, 'up') is True:
@@ -590,59 +535,138 @@ class Network:
                                if len(self.DnsConsole.appContainers) == 0:
                                        statecallback(self.DnsState)
 
-       def deactivateInterface(self,iface,callback = None):
-               if self.onRemoteRootFS():
+       def deactivateInterface(self,ifaces,callback = None):
+               self.config_ready = False
+               self.msgPlugins()
+               commands = []
+               def buildCommands(iface):
+                       commands.append("ifdown " + iface)
+                       commands.append("ip addr flush dev " + iface)
+                       #wpa_supplicant sometimes doesn't quit properly on SIGTERM
+                       if os_path.exists('/var/run/wpa_supplicant/'+ iface):
+                               commands.append("wpa_cli -i" + iface + " terminate")
+                       
+               if not self.deactivateInterfaceConsole:
+                       self.deactivateInterfaceConsole = Console()
+
+               if isinstance(ifaces, (list, tuple)):
+                       for iface in ifaces:
+                               if iface != 'eth0' or not self.onRemoteRootFS():
+                                       buildCommands(iface)
+               else:
+                       if ifaces == 'eth0' and self.onRemoteRootFS():
+                               if callback is not None:
+                                       callback(True)
+                               return
+                       buildCommands(ifaces)
+               self.deactivateInterfaceConsole.eBatch(commands, self.deactivateInterfaceFinished, [ifaces,callback], debug=True)
+
+       def deactivateInterfaceFinished(self,extra_args):
+               (ifaces, callback) = extra_args
+               def checkCommandResult(iface):
+                       if self.deactivateInterfaceConsole and self.deactivateInterfaceConsole.appResults.has_key("ifdown " + iface):
+                               result = str(self.deactivateInterfaceConsole.appResults.get("ifdown " + iface)).strip("\n")
+                               if result == "ifdown: interface " + iface + " not configured":
+                                       return False
+                               else:
+                                       return True
+               #ifdown sometimes can't get the interface down.
+               if isinstance(ifaces, (list, tuple)):
+                       for iface in ifaces:
+                               if checkCommandResult(iface) is False:
+                                       Console().ePopen(("ifconfig " + iface + " down" ))
+               else:
+                       if checkCommandResult(ifaces) is False:
+                               Console().ePopen(("ifconfig " + ifaces + " down" ))
+
+               if self.deactivateInterfaceConsole:
+                       if len(self.deactivateInterfaceConsole.appContainers) == 0:
+                               if callback is not None:
+                                       callback(True)
+
+       def activateInterface(self,iface,callback = None):
+               if self.config_ready:
+                       self.config_ready = False
+                       self.msgPlugins()
+               if iface == 'eth0' and self.onRemoteRootFS():
                        if callback is not None:
                                callback(True)
                        return
-               self.deactivateInterfaceConsole = Console()
-               self.commands = []
-               cmd1 = "ip addr flush " + iface
-               cmd2 = "ifconfig " + iface + " down"
-               self.commands.append(cmd1)
-               self.commands.append(cmd2)
-               self.deactivateInterfaceConsole.eBatch(self.commands, self.deactivateInterfaceFinished, callback, debug=True)
+               if not self.activateInterfaceConsole:
+                       self.activateInterfaceConsole = Console()
+               commands = []
+               commands.append("ifup " + iface)
+               self.activateInterfaceConsole.eBatch(commands, self.activateInterfaceFinished, callback, debug=True)
 
-       def deactivateInterfaceFinished(self,extra_args):
+       def activateInterfaceFinished(self,extra_args):
                callback = extra_args
-               if self.deactivateInterfaceConsole:
-                       if len(self.deactivateInterfaceConsole.appContainers) == 0:
+               if self.activateInterfaceConsole:
+                       if len(self.activateInterfaceConsole.appContainers) == 0:
                                if callback is not None:
                                        callback(True)
 
+       def sysfsPath(self, iface):
+               return '/sys/class/net/' + iface
+
+       def isWirelessInterface(self, iface):
+               if iface in self.wlan_interfaces:
+                       return True
+
+               if os_path.isdir(self.sysfsPath(iface) + '/wireless'):
+                       return True
+
+               # r871x_usb_drv on kernel 2.6.12 is not identifiable over /sys/class/net/'ifacename'/wireless so look also inside /proc/net/wireless
+               device = re_compile('[a-z]{2,}[0-9]*:')
+               ifnames = []
+               fp = open('/proc/net/wireless', 'r')
+               for line in fp:
+                       try:
+                               ifnames.append(device.search(line).group()[:-1])
+                       except AttributeError:
+                               pass
+               if iface in ifnames:
+                       return True
+
+               return False
+
+       def getWlanModuleDir(self, iface = None):
+               devicedir = self.sysfsPath(iface) + '/device'
+               moduledir = devicedir + '/driver/module'
+               if os_path.isdir(moduledir):
+                       return moduledir
+
+               # identification is not possible over default moduledir
+               for x in listdir(devicedir):
+                       # rt3070 on kernel 2.6.18 registers wireless devices as usb_device (e.g. 1-1.3:1.0) and identification is only possible over /sys/class/net/'ifacename'/device/1-xxx
+                       if x.startswith("1-"):
+                               moduledir = devicedir + '/' + x + '/driver/module'
+                               if os_path.isdir(moduledir):
+                                       return moduledir
+               # rt73, zd1211b, r871x_usb_drv on kernel 2.6.12 can be identified over /sys/class/net/'ifacename'/device/driver, so look also here
+               moduledir = devicedir + '/driver'
+               if os_path.isdir(moduledir):
+                       return moduledir
+
+               return None
+
        def detectWlanModule(self, iface = None):
-               self.wlanmodule = None
-               classdir = "/sys/class/net/" + iface + "/device/"
-               driverdir = "/sys/class/net/" + iface + "/device/driver/"
-               if os_path.exists(classdir):
-                       classfiles = listdir(classdir)
-                       driver_found = False
-                       nl80211_found = False
-                       for x in classfiles:
-                               if x == 'driver':
-                                       driver_found = True
-                               if x.startswith('ieee80211:'):
-                                       nl80211_found = True
-
-                       if driver_found and nl80211_found:
-                               #print about.getKernelVersionString()
-                               self.wlanmodule = "nl80211"
-                       else:
-                               if driver_found and not nl80211_found:
-                                       driverfiles = listdir(driverdir)
-                                       if os_path.realpath(driverdir).endswith('ath_pci'):
-                                               if len(driverfiles) >= 1:
-                                                       self.wlanmodule = 'madwifi'
-                                       if os_path.realpath(driverdir).endswith('rt73'):
-                                               if len(driverfiles) == 2 or len(driverfiles) == 5:
-                                                       self.wlanmodule = 'ralink'                                      
-                                       if os_path.realpath(driverdir).endswith('zd1211b'):
-                                               if len(driverfiles) == 1 or len(driverfiles) == 5:
-                                                       self.wlanmodule = 'zydas'
-                       if self.wlanmodule is None:
-                               self.wlanmodule = "wext"
-                       print 'Using "%s" as wpa-supplicant driver' % (self.wlanmodule)
-                       return self.wlanmodule
+               if not self.isWirelessInterface(iface):
+                       return None
+
+               devicedir = self.sysfsPath(iface) + '/device'
+               if os_path.isdir(devicedir + '/ieee80211'):
+                       return 'nl80211'
+
+               moduledir = self.getWlanModuleDir(iface)
+               if moduledir:
+                       module = os_path.basename(os_path.realpath(moduledir))
+                       if module in ('ath_pci','ath5k'):
+                               return 'madwifi'
+                       if module in ('rt73','rt73'):
+                               return 'ralink'
+                       if module == 'zd1211b':
+                               return 'zydas'
+               return 'wext'
        
        def calc_netmask(self,nmask):
                from struct import pack, unpack
index 7f7dd5c4d91b40f81fc5647ccb82cbe9a9e2f967..bd1a3638c47ba484f6c9d511f48710ac8616f7b7 100644 (file)
@@ -1361,25 +1361,32 @@ def InitNimManager(nimmgr):
                slot_id = configElement.slot_id
                if nimmgr.nim_slots[slot_id].description == 'Alps BSBE2':
                        open("/proc/stb/frontend/%d/tone_amplitude" %(fe_id), "w").write(configElement.value)
-                       
+
        def tunerTypeChanged(nimmgr, configElement):
                fe_id = configElement.fe_id
-               print "tunerTypeChanged feid %d to mode %s" % (fe_id, configElement.value)
-               try:
-                       oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline()
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0")
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
-               frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend()
-               frontend.closeFrontend()
-               open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value)
-               frontend.reopenFrontend()
-               try:
-                       open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue)
-               except:
-                       print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
-               nimmgr.enumerateNIMs()
-       
+
+               cur_type = int(open("/proc/stb/frontend/%d/mode" % (fe_id), "r").read())
+               if cur_type != int(configElement.value):
+                       print "tunerTypeChanged feid %d from %d to mode %d" % (fe_id, cur_type, int(configElement.value))
+
+                       try:
+                               oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline()
+                               open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0")
+                       except:
+                               print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
+
+                       frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend()
+                       frontend.closeFrontend()
+                       open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value)
+                       frontend.reopenFrontend()
+                       try:
+                               open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue)
+                       except:
+                               print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available"
+                       nimmgr.enumerateNIMs()
+               else:
+                       print "tuner type is already already %d" %cur_type
+
        empty_slots = 0
        for slot in nimmgr.nim_slots:
                x = slot.slot
index d67cd559712235e82373ceac1d6630385c619c66..7c6b57959b043b906bd964921889542e6c71a678 100644 (file)
@@ -3,4 +3,17 @@ from Renderer import Renderer
 from enigma import ePixmap
 
 class Pixmap(Renderer):
+       def __init__(self):
+               Renderer.__init__(self)
+
        GUI_WIDGET = ePixmap
+
+       def postWidgetCreate(self, instance):
+               self.changed((self.CHANGED_DEFAULT,))
+
+       def changed(self, what):
+               if what[0] != self.CHANGED_CLEAR:
+                       if self.source and hasattr(self.source, "pixmap"):
+                               if self.instance:
+                                       self.instance.setPixmap(self.source.pixmap)
+
index 813c09f896884301254512a67ee334d126746e60..e01c61fd02c8647e6947d0ba675485d0dc28a10a 100644 (file)
@@ -11,6 +11,8 @@ add_type("application/x-dream-package", ".dmpkg")
 add_type("application/x-dream-image", ".nfi")
 add_type("video/MP2T", ".ts")
 add_type("video/x-dvd-iso", ".iso")
+add_type("video/x-matroska", ".mkv")
+add_type("audio/x-matroska", ".mka")
 
 def getType(file):
        (type, _) = guess_type(file)
index acbc342502d5907709f4857707022f8c23f408c6..ce56f0f6a2d69a83562523a94131b2d79847ff77 100644 (file)
@@ -9,6 +9,8 @@ def InitUsageConfig():
        config.usage = ConfigSubsection();
        config.usage.showdish = ConfigYesNo(default = True)
        config.usage.multibouquet = ConfigYesNo(default = False)
+       config.usage.multiepg_ask_bouquet = ConfigYesNo(default = False)
+
        config.usage.quickzap_bouquet_change = ConfigYesNo(default = False)
        config.usage.e1like_radio_mode = ConfigYesNo(default = False)
        config.usage.infobar_timeout = ConfigSelection(default = "5", choices = [
index bcc7b9b261f245b24e6b356dba814e2d2220a58c..af14578a1b056fcaaa9240d1e8917c21bd63b8cf 100644 (file)
@@ -1,8 +1,9 @@
 from Plugins.Plugin import PluginDescriptor
 from GraphMultiEpg import GraphMultiEPG
-from Screens.ChannelSelection import BouquetSelector
+from Screens.ChannelSelection import BouquetSelector, SilentBouquetSelector
 from enigma import eServiceCenter, eServiceReference
 from ServiceReference import ServiceReference
+from Components.config import config
 
 Session = None
 Servicelist = None
@@ -73,6 +74,32 @@ def changeBouquetCB(direction, epg):
                        epg_bouquet = bouquet
                        epg.setServices(services)
 
+def openAskBouquet(Session, bouquets, cnt):
+       if cnt > 1: # show bouquet list
+               global bouquetSel
+               bouquetSel = Session.openWithCallback(closed, BouquetSelector, bouquets, openBouquetEPG, enableWrapAround=True)
+               dlg_stack.append(bouquetSel)
+       elif cnt == 1:
+               if not openBouquetEPG(bouquets[0][1]):
+                       cleanup()
+
+def openSilent(Servicelist, bouquets, cnt):
+       root = Servicelist.getRoot()
+       if cnt > 1: # create bouquet list
+               global bouquetSel
+               current = 0
+               rootstr = root.toCompareString()
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
+               bouquetSel = SilentBouquetSelector(bouquets, True, current)
+       if cnt >= 1: # open current bouquet
+               if not openBouquetEPG(root):
+                       cleanup()
+
 def main(session, servicelist, **kwargs):
        global Session
        Session = session
@@ -83,13 +110,10 @@ def main(session, servicelist, **kwargs):
                cnt = 0
        else:
                cnt = len(bouquets)
-       if cnt > 1: # show bouquet list
-               global bouquetSel
-               bouquetSel = Session.openWithCallback(closed, BouquetSelector, bouquets, openBouquetEPG, enableWrapAround=True)
-               dlg_stack.append(bouquetSel)
-       elif cnt == 1:
-               if not openBouquetEPG(bouquets[0][1]):
-                       cleanup()
+       if config.usage.multiepg_ask_bouquet.value:
+               openAskBouquet(session, bouquets, cnt)
+       else:
+               openSilent(servicelist, bouquets, cnt)
 
 def Plugins(**kwargs):
        name = _("Graphical Multi EPG")
index 84cbbcb62d605790db46280ec427e6f9c41abe1c..e26a93c60bf44f1bff63a3310c4503a968263eae 100644 (file)
@@ -50,12 +50,12 @@ IOC_TYPESHIFT = (IOC_NRSHIFT+IOC_NRBITS)
 BLKRRPART = ((0x12<<IOC_TYPESHIFT) | (95<<IOC_NRSHIFT))
 
 def autostart(reason, **kwargs):
+       global bdpoll
        if reason == 0:
                print "starting hotplug handler"
 
                if fileExists('/dev/.udev'):
                        global netlink
-                       global bdpoll
                        from enigma import eSocketNotifier, eTimer, ePythonMessagePump
                        import socket
                        from select import POLLIN, POLLPRI
@@ -256,6 +256,8 @@ def autostart(reason, **kwargs):
                                        self.__lock.release()
 
                        netlink = Netlink()
+                       if bdpoll is not None:
+                               bdpoll.running = False
                        bdpoll = BDPoll()
                        for blockdev, removable, is_cdrom, medium_found in harddiskmanager.devices_scanned_on_init:
                                if removable or is_cdrom:
@@ -295,6 +297,12 @@ def autostart(reason, **kwargs):
                        factory = Factory()
                        factory.protocol = Hotplug
                        reactor.listenUNIX("/tmp/hotplug.socket", factory)
+       else:
+               if bdpoll:
+                       bdpoll.running = False
+                       bdpoll.timeout() # XXX: I assume the timer is shut down before it executes again, so release the semaphore manually
+                       bdpoll.join()
+               bdpoll = None
 
 def Plugins(**kwargs):
        return PluginDescriptor(name = "Hotplug", description = "listens to hotplug events", where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = True, fnc = autostart)
index d7e83072d8d2ca7b2300ea29f7fa68b639fbeb7e..cb954bb23b7bfdd00e8fec6efce8cb91260ee572 100755 (executable)
@@ -4,31 +4,10 @@ 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 Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from enigma import eTimer
-
-config.misc.firstrun = ConfigBoolean(default = True)
-list = []
-list.append("WEP")
-list.append("WPA")
-list.append("WPA2")
-list.append("WPA/WPA2")
-
-weplist = []
-weplist.append("ASCII")
-weplist.append("HEX")
-
-config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
-
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+from os import system
 
 class NetworkWizard(WizardLanguage, Rc):
        skin = """
@@ -65,8 +44,9 @@ class NetworkWizard(WizardLanguage, Rc):
                self.Adapterlist = None
                self.InterfaceState = None
                self.isInterfaceUp = None
-               self.WlanPluginInstalled = None
+               self.WlanPluginInstalled = False
                self.ap = None
+               self.w = None
                if interface is not None:
                        self.selectedInterface = interface
                else:
@@ -77,11 +57,9 @@ class NetworkWizard(WizardLanguage, Rc):
                self.AdapterRef = None
                self.APList = None
                self.newAPlist = None
-               self.WlanList = None
                self.oldlist = None
-               self.originalAth0State = None
-               self.originalEth0State = None
-               self.originalWlan0State = None
+               
+               self.originalInterfaceState = {}
                self.originalInterfaceStateChanged = False
                self.Text = None
                self.rescanTimer = eTimer()
@@ -95,65 +73,64 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.close()
                
        def markDone(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                del self.rescanTimer
                self.checkOldInterfaceState()
                pass
 
-       def getInstalledInterfaceCount(self):
+       def back(self):
+               self.stopScan()
+               self.ap = None
+               WizardLanguage.back(self)
+               
+       def stopScan(self):
                self.rescanTimer.stop()
+               if self.w is not None:
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
+                       iWlan.stopGetNetworkList()
+                       self.w = None
+
+       def getInstalledInterfaceCount(self):
+               self.originalInterfaceState = {}
                self.Adapterlist = iNetwork.getAdapterList()
                self.InstalledInterfaceCount = len(self.Adapterlist)
                if self.Adapterlist is not None:
                        if self.InstalledInterfaceCount == 1 and self.selectedInterface is None:
                                        self.selectedInterface = self.Adapterlist[0]
-               self.originalAth0State = iNetwork.getAdapterAttribute('ath0', 'up')
-               self.originalEth0State = iNetwork.getAdapterAttribute('eth0', 'up')
-               self.originalWlan0State = iNetwork.getAdapterAttribute('wlan0', 'up')
+               for interface in iNetwork.getAdapterList():
+                       self.originalInterfaceState[interface] = {}
+                       self.originalInterfaceState[interface]["up"] = iNetwork.getAdapterAttribute(interface, 'up')
 
        def selectInterface(self):
                self.InterfaceState = None
-               if self.selectedInterface is None and self.InstalledInterfaceCount <= 1:
-                       if self.selectedInterface == 'eth0':
-                               self.NextStep = 'nwconfig'
-                       else:
-                               self.NextStep = 'scanwlan'
-                       self.checkInterface(self.selectedInterface)
-               elif self.selectedInterface is not None and self.InstalledInterfaceCount <= 1:
-                       if self.selectedInterface == 'eth0':
-                               self.NextStep = 'nwconfig'
+               if self.selectedInterface is None:
+                       if self.InstalledInterfaceCount <= 1:
+                               if not iNetwork.isWirelessInterface(self.selectedInterface):
+                                       self.NextStep = 'nwconfig'
+                               else:
+                                       self.NextStep = 'asknetworktype'
+                               self.checkInterface(self.selectedInterface)
                        else:
-                               self.NextStep = 'scanwlan'
-                       self.checkInterface(self.selectedInterface)
-               elif self.selectedInterface is None and self.InstalledInterfaceCount > 1:
-                       self.NextStep = 'selectinterface'
-                       self.currStep = self.getStepWithID(self.NextStep)
-                       self.afterAsyncCode()
-               elif self.selectedInterface is not None and self.InstalledInterfaceCount > 1:
-                       if self.selectedInterface == 'eth0':
+                               self.NextStep = 'selectinterface'
+                               self.currStep = self.getStepWithID(self.NextStep)
+                               self.afterAsyncCode()
+               else:
+                       if not iNetwork.isWirelessInterface(self.selectedInterface):
                                self.NextStep = 'nwconfig'
                        else:
-                               self.NextStep = 'scanwlan'
+                               self.NextStep = 'asknetworktype'
                        self.checkInterface(self.selectedInterface)
-               else:
-                       self.NextStep = 'selectinterface'
-                       self.currStep = self.getStepWithID(self.NextStep)
-                       self.afterAsyncCode()                   
 
        def checkOldInterfaceState(self):
                # disable up interface if it was originally down and config is unchanged.
-               if self.originalAth0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('ath0') is True:
-                               iNetwork.deactivateInterface('ath0')            
-               if self.originalEth0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('eth0') is True:
-                               iNetwork.deactivateInterface('eth0')
-               if self.originalWlan0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('wlan0') is True:
-                               iNetwork.deactivateInterface('wlan0')
+               if self.originalInterfaceStateChanged is False:
+                       for interface in self.originalInterfaceState.keys():
+                               if interface == self.selectedInterface:
+                                       if self.originalInterfaceState[interface]["up"] is False:
+                                               if iNetwork.checkforInterface(interface) is True:
+                                                       system("ifconfig " + interface + " down")
 
        def listInterfaces(self):
-               self.rescanTimer.stop()
                self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
@@ -169,13 +146,13 @@ class NetworkWizard(WizardLanguage, Rc):
                elif index == 'eth0':
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def InterfaceSelectionMoved(self):
                self.InterfaceSelect(self.selection)
                
        def checkInterface(self,iface):
-               self.rescanTimer.stop()
+               self.stopScan()
                if self.Adapterlist is None:
                        self.Adapterlist = iNetwork.getAdapterList()
                if self.NextStep is not 'end':
@@ -183,7 +160,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                #Reset Network to defaults if network broken
                                iNetwork.resetNetworkConfig('lan', self.resetNetworkConfigCB)
                                self.resetRef = self.session.openWithCallback(self.resetNetworkConfigFinished, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
-                       if iface in ('eth0', 'wlan0', 'ath0'):
+                       if iface in iNetwork.getInstalledAdapters():
                                if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
                                        if iNetwork.getAdapterAttribute(iface, 'up') is True:
                                                self.isInterfaceUp = True
@@ -232,7 +209,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def AdapterSetupEndCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -255,7 +232,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        if data is True:
                                if status is not None:
                                        text1 = _("Your Dreambox is now ready to use.\n\nYour internet connection is working now.\n\n")
-                                       text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["acesspoint"]) + "\n"
+                                       text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["accesspoint"]) + "\n"
                                        text3 = _('SSID:') + "\t" + str(status[self.selectedInterface]["essid"]) + "\n"
                                        text4 = _('Link Quality:') + "\t" + str(status[self.selectedInterface]["quality"])+ "\n"
                                        text5 = _('Signal Strength:') + "\t" + str(status[self.selectedInterface]["signal"]) + "\n"
@@ -265,7 +242,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                        infotext = text1 + text2 + text3 + text4 + text5 + text7 +"\n" + text8
                                        self.currStep = self.getStepWithID("checkWlanstatusend")
                                        self.Text = infotext
-                                       if str(status[self.selectedInterface]["acesspoint"]) == "Not-Associated":
+                                       if str(status[self.selectedInterface]["accesspoint"]) == "Not-Associated":
                                                self.InterfaceState = False
                                        self.afterAsyncCode()
 
@@ -275,7 +252,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def checkNetworkCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -310,96 +287,74 @@ class NetworkWizard(WizardLanguage, Rc):
                                newList.append(oldentry)
                                
                for newentry in newList:
-                       if newentry[1] == "hidden...":
-                               continue
                        self.newAPlist.append(newentry)
-               
-               if len(self.newAPlist):
-                       if "hidden..." not in self.newAPlist:
-                               self.newAPlist.append(( _("enter hidden network SSID"), "hidden..." ))
 
+               if len(self.newAPlist):
                        if (self.wizard[self.currStep].has_key("dynamiclist")):
                                currentListEntry = self["list"].getCurrent()
-                               idx = 0
-                               for entry in self.newAPlist:
-                                       if entry == currentListEntry:
-                                               newListIndex = idx
-                                       idx +=1
+                               if currentListEntry is not None:
+                                       idx = 0
+                                       for entry in self.newAPlist:
+                                               if entry == currentListEntry:
+                                                       newListIndex = idx
+                                               idx +=1
                                self.wizard[self.currStep]["evaluatedlist"] = self.newAPlist
                                self['list'].setList(self.newAPlist)
-                               self["list"].setIndex(newListIndex)
+                               if newListIndex is not None:
+                                       self["list"].setIndex(newListIndex)
                                self["list"].updateList(self.newAPlist)
 
        def listAccessPoints(self):
                self.APList = []
-               try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
-               except ImportError:
-                       self.APList.append( ( _("No networks found"),_("unavailable") ) )
-                       return self.APList
+               if self.WlanPluginInstalled is False:
+                       self.APList.append( ( _("No networks found"), None ) )
                else:
-                       try:
-                               self.w = Wlan(self.selectedInterface)
-                               aps = self.w.getNetworkList()
-                       except ValueError:
-                               self.APList = []
-                               self.APList.append( ( _("No networks found"),_("unavailable") ) )
-                               return self.APList
-                       else:
-                               if aps is not None:
-                                       print "[NetworkWizard.py] got Accespoints!"
-                                       tmplist = []
-                                       complist = []
-                                       for ap in aps:
-                                               a = aps[ap]
-                                               if a['active']:
-                                                       tmplist.append( (a['bssid'], a['essid']) )
-                                                       complist.append( (a['bssid'], a['essid']) )
-                                       
-                                       for entry in tmplist:
-                                               if entry[1] == "":
-                                                       for compentry in complist:
-                                                               if compentry[0] == entry[0]:
-                                                                       complist.remove(compentry)
-                                       for entry in complist:
-                                               self.APList.append( (entry[1], entry[1]) )
-       
-                               if "hidden..." not in self.APList:
-                                       self.APList.append(( _("enter hidden network SSID"), "hidden..." ))
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
+                       iWlan.setInterface(self.selectedInterface)
+                       self.w = iWlan.getInterface()
+                       aps = iWlan.getNetworkList()
+                       if aps is not None:
+                               print "[NetworkWizard.py] got Accespoints!"
+                               tmplist = []
+                               complist = []
+                               for ap in aps:
+                                       a = aps[ap]
+                                       if a['active']:
+                                               tmplist.append( (a['bssid'], a['essid']) )
+                                               complist.append( (a['bssid'], a['essid']) )
+                               
+                               for entry in tmplist:
+                                       if entry[1] == "":
+                                               for compentry in complist:
+                                                       if compentry[0] == entry[0]:
+                                                               complist.remove(compentry)
+                               for entry in complist:
+                                       self.APList.append( (entry[1], entry[1]) )
+                       if not len(aps):
+                               self.APList.append( ( _("No networks found"), None ) )
                        
-                               self.rescanTimer.start(3000)
-                               return self.APList
+               self.rescanTimer.start(4000)
+               return self.APList
 
-       def AccessPointsSelectionMade(self, index):
-               self.ap = index
-               self.WlanList = []
-               currList = []
-               if (self.wizard[self.currStep].has_key("dynamiclist")):
-                       currList = self['list'].list
-                       for entry in currList:
-                               self.WlanList.append( (entry[1], entry[0]) )
-               self.AccessPointsSelect(index)
-
-       def AccessPointsSelect(self, index):
-               self.NextStep = 'wlanconfig'
 
        def AccessPointsSelectionMoved(self):
-               self.AccessPointsSelect(self.selection)
+               self.ap = self.selection
+               self.NextStep = 'wlanconfig'
 
        def checkWlanSelection(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                self.currStep = self.getStepWithID(self.NextStep)
 
        def isWlanPluginInstalled(self):
                try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
                except ImportError:
                        self.WlanPluginInstalled = False
                else:
                        self.WlanPluginInstalled = True
 
        def listChoices(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                list = []
                if self.WlanPluginInstalled == True:
                        list.append((_("Configure your wireless LAN again"), "scanwlan"))
@@ -417,8 +372,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.selectedInterface = "eth0"
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def ChoicesSelectionMoved(self):
                pass
-
index c4300436e4b71bef08170c306d05405aa4b38150..0b3a2988e1d78f0426e79aa0427432d5ffaf7775 100755 (executable)
@@ -87,13 +87,33 @@ self.selectKey("DOWN")
                         <listentry caption="Exit network wizard" step="end" />
                 </list>
         </step>
+
+        <step id="asknetworktype">
+               <condition>
+self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
+               </condition>
+                <text value="Wireless network connection setup." />
+                <displaytext value="Wireless network connection setup" />
+                <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                </code>
+                <list>
+                        <listentry caption="List available networks" step="scanwlan" />
+                        <listentry caption="Manual configuration" step="wlanconfig" />
+                        <listentry caption="Exit network wizard" step="end" />
+                </list>
+        </step>
+
         <step id="scanwlan">
                <condition>
 self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
                 </condition>
                 <text value="Please select the wireless network that you want to connect to.\n\nPlease press OK to continue." />
                 <displaytext value="Select wireless network" />
-                <list type="dynamic" source="listAccessPoints" evaluation="AccessPointsSelectionMade" onselect="AccessPointsSelectionMoved" />
+                <list type="dynamic" source="listAccessPoints" onselect="AccessPointsSelectionMoved" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -138,7 +158,7 @@ self.selectKey("DOWN")
         <step id="wlanconfig">
                 <text value="Please configure your internet connection by filling out the required values.\nWhen you are ready press OK to continue." />
                 <displaytext value="Configure interface" />
-                <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap,self.WlanList)" type="ConfigList" />
+                <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap)" type="ConfigList" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -196,4 +216,3 @@ self.selectKey("OK")
         </step>
 </wizard>
 
-
index 56cebdbf1764e5c9f4422626e3ca97657fb41865..30a242309e480164ba11a401977cd392113a2391 100644 (file)
@@ -1,6 +1,8 @@
 from Screens.Screen import Screen
 from Plugins.Plugin import PluginDescriptor
-from Components.config import getConfigListEntry, config
+from Components.config import getConfigListEntry, config, ConfigBoolean
+
+config.misc.firstrun = ConfigBoolean(default = True)
 
 def NetworkWizardMain(session, **kwargs):
        session.open(NetworkWizard)
index 01649bb379ba52dc58fab500fc7a172a3409f8dd..c7c143f2b937df38d98a839d93177f47baf1a590 100755 (executable)
@@ -17,10 +17,9 @@ from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_O
 from time import gmtime, strftime, localtime
 from datetime import date
 
-
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
 def getBackupPath():
        backuppath = config.plugins.configurationbackup.backuplocation.value
@@ -268,7 +267,7 @@ class RestoreMenu(Screen):
                        self.sel = self["filelist"].getCurrent()
                        if self.sel:
                                self.val = self.path + "/" + self.sel
-                               self.session.openWithCallback(self.startDelete, MessageBox, _("Are you sure you want to delete\nfollowing backup:\n" + self.sel ))
+                               self.session.openWithCallback(self.startDelete, MessageBox, _("Are you sure you want to delete\nfollowing backup:\n") + self.sel)
 
        def startDelete(self, ret = False):
                if (ret == True):
index 32d7140a0fa5bc0b1cc40c7b2fc07a5b59e25b4b..3ea787c1287043d1328041abc5b66b67d6e2efed 100755 (executable)
@@ -13,10 +13,11 @@ from enigma import eEnv
 
 from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations, ConfigBoolean
 from Components.Harddisk import harddiskmanager
+
 config.misc.firstrun = ConfigBoolean(default = True)
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
 
 backupfile = "enigma2settingsbackup.tar.gz"
index 87f0a4d6e11b5d7ac7f6a6d7ea7ae105dedc0303..ec2f82cc229c98e7829672a028d65b9794c841ae 100755 (executable)
@@ -9,9 +9,10 @@ from Components.Ipkg import IpkgComponent
 from Components.Network import iNetwork
 from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_METADIR
 from Tools.HardwareInfo import HardwareInfo
-import sha
-
+import hashlib
 from time import time
+from os import urandom
+
 rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
 
 def bin2long(s):
@@ -30,7 +31,7 @@ def decrypt_block(src, mod):
        if len(src) != 128 and len(src) != 202:
                return None
        dest = rsa_pub1024(src[:128], mod)
-       hash = sha.new(dest[1:107])
+       hash = hashlib.sha1(dest[1:107])
        if len(src) == 202:
                hash.update(src[131:192])       
        result = hash.digest()
@@ -46,10 +47,12 @@ def validate_cert(cert, key):
 
 def read_random():
        try:
-               fd = open("/dev/urandom", "r")
-               buf = fd.read(8)
-               fd.close()
-               return buf
+               xor = lambda a,b: ''.join(chr(ord(c)^ord(d)) for c,d in zip(a,b*100))
+               random = urandom(8)
+               x = str(time())[-8:]
+               result = xor(random, x)
+                               
+               return result
        except:
                return None
 
@@ -241,7 +244,7 @@ class SoftwareTools(DreamInfoHandler):
                        if self.NetworkConnectionAvailable == True:
                                if not self.UpdateConsole:
                                        self.UpdateConsole = Console()
-                               cmd = "opkg install enigma2-meta enigma2-plugins-meta enigma2-skins-meta"
+                               cmd = "opkg install enigma2-meta enigma2-plugins-meta enigma2-skins-meta enigma2-drivers-meta"
                                self.UpdateConsole.ePopen(cmd, self.InstallMetaPackageCB, callback)
                        else:
                                self.InstallMetaPackageCB(True)
index b3a0a17a1d8b56ea69a3136d3444de1c2af34143..12fd609474a6229ef173e4b9f70be83813bd69f9 100644 (file)
@@ -43,10 +43,10 @@ from SoftwareTools import iSoftwareTools
 
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/wpa_supplicant.ath0.conf', '/etc/wpa_supplicant.wlan0.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
-config.plugins.SoftwareManager = ConfigSubsection()
-config.plugins.SoftwareManager.overwriteConfigFiles = ConfigSelection(
+config.plugins.softwaremanager = ConfigSubsection()
+config.plugins.softwaremanager.overwriteConfigFiles = ConfigSelection(
                                [
                                 ("Y", _("Yes, always")),
                                 ("N", _("No, never")),                          
@@ -365,7 +365,7 @@ class SoftwareManagerSetup(Screen, ConfigListScreen):
 
        def createSetup(self):
                self.list = [ ]
-               self.overwriteConfigfilesEntry = getConfigListEntry(_("Overwrite configuration files ?"), config.plugins.SoftwareManager.overwriteConfigFiles)
+               self.overwriteConfigfilesEntry = getConfigListEntry(_("Overwrite configuration files ?"), config.plugins.softwaremanager.overwriteConfigFiles)
                self.list.append(self.overwriteConfigfilesEntry)        
                self["config"].list = self.list
                self["config"].l.setSeperation(400)
@@ -489,7 +489,6 @@ class SoftwareManagerInfo(Screen):
                        self.list = []
                        backupfiles = config.plugins.configurationbackup.backupdirs.value
                        for entry in backupfiles:
-                               print entry
                                self.list.append((entry,))
                        self['list'].setList(self.list)
                        
@@ -569,6 +568,7 @@ class PluginManager(Screen, DreamInfoHandler):
                self.currentSelectedIndex = None
                self.currentSelectedPackage = None
                self.saved_currentSelectedPackage = None
+               self.restartRequired = False
                
                self.onShown.append(self.setWindowTitle)
                self.onLayoutFinish.append(self.getUpdateInfos)
@@ -892,6 +892,8 @@ class PluginManager(Screen, DreamInfoHandler):
                                        self.package = iSoftwareTools.packageDetails[0]
                                        if self.package[0].has_key("attributes"):
                                                self.attributes = self.package[0]["attributes"]
+                                               if self.attributes.has_key("needsRestart"):
+                                                       self.restartRequired = True
                                        if self.attributes.has_key("package"):
                                                self.packagefiles = self.attributes["package"]
                                        if plugin[1] == 'installed':
@@ -924,11 +926,11 @@ class PluginManager(Screen, DreamInfoHandler):
 
        def runExecuteFinished(self):
                self.reloadPluginlist()
-               restartRequired = plugins.restartRequired
-               if restartRequired:
+               if plugins.restartRequired or self.restartRequired:
                        self.session.openWithCallback(self.ExecuteReboot, MessageBox, _("Install or remove finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
                else:
                        self.selectedFiles = []
+                       self.restartRequired = False
                        self.detailsClosed(True)
 
        def ExecuteReboot(self, result):
@@ -936,6 +938,7 @@ class PluginManager(Screen, DreamInfoHandler):
                        quitMainloop(3)
                else:
                        self.selectedFiles = []
+                       self.restartRequired = False
                        self.detailsClosed(True)
 
        def reloadPluginlist(self):
@@ -1174,7 +1177,7 @@ class PluginDetails(Screen, DreamInfoHandler):
                self.package = self.packageDetails[0]
                if self.package[0].has_key("attributes"):
                        self.attributes = self.package[0]["attributes"]
-
+               self.restartRequired = False
                self.cmdList = []
                self.oktext = _("\nAfter pressing OK, please wait!")
                self.picload = ePicLoad()
@@ -1272,6 +1275,8 @@ class PluginDetails(Screen, DreamInfoHandler):
        def go(self):
                if self.attributes.has_key("package"):
                        self.packagefiles = self.attributes["package"]
+               if self.attributes.has_key("needsRestart"):
+                       self.restartRequired = True
                self.cmdList = []
                if self.pluginstate in ('installed', 'remove'):
                        if self.packagefiles:
@@ -1293,8 +1298,7 @@ class PluginDetails(Screen, DreamInfoHandler):
 
        def runUpgradeFinished(self):
                self.reloadPluginlist()
-               restartRequired = plugins.restartRequired
-               if restartRequired:
+               if plugins.restartRequired or self.restartRequired:
                        self.session.openWithCallback(self.UpgradeReboot, MessageBox, _("Installation finished.") +" "+_("Do you want to reboot your Dreambox?"), MessageBox.TYPE_YESNO)
                else:
                        self.close(True)
@@ -1414,8 +1418,8 @@ class UpdatePlugin(Screen):
                        self.status.setText(_("Configuring"))
                        
                elif event == IpkgComponent.EVENT_MODIFIED:
-                       if config.plugins.SoftwareManager.overwriteConfigFiles.value in ("N", "Y"):
-                               self.ipkg.write(True and config.plugins.SoftwareManager.overwriteConfigFiles.value)
+                       if config.plugins.softwaremanager.overwriteConfigFiles.value in ("N", "Y"):
+                               self.ipkg.write(True and config.plugins.softwaremanager.overwriteConfigFiles.value)
                        else:
                                self.session.openWithCallback(
                                        self.modificationCallback,
index 480f201f53a50765ee478ba5385f857f22fb2a43..a1851579de30c38e7b393edd64a752124d05db77 100755 (executable)
@@ -1,36 +1,42 @@
 from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.Console import Console
+from Components.Network import iNetwork
 
-from os import system
+from os import system, path as os_path
 from string import maketrans, strip
 import sys
 import types
-from re import compile as re_compile, search as re_search
+from re import compile as re_compile, search as re_search, escape as re_escape
 from pythonwifi.iwlibs import getNICnames, Wireless, Iwfreq, getWNICnames
 from pythonwifi import flags as wififlags
 
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
+
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = True))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2"))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+def getWlanConfigName(iface):
+       return '/etc/wpa_supplicant.' + iface + '.conf'
 
 class Wlan:
-       def __init__(self, iface):
+       def __init__(self, iface = None):
+               self.iface = iface
+               self.oldInterfaceState = None
+               
                a = ''; b = ''
                for i in range(0, 255):
                        a = a + chr(i)
@@ -39,135 +45,37 @@ class Wlan:
                        else:
                                b = b + chr(i)
                
-               self.iface = iface
-               self.wlaniface = {}
-               self.WlanConsole = Console()
                self.asciitrans = maketrans(a, b)
 
-       def stopWlanConsole(self):
-               if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
-                       self.WlanConsole = None
-                       del self.WlanConsole
-                       
-       def getDataForInterface(self, callback = None):
-               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
-               print "self.iface im getDataForInterface",self.iface
-               if len(self.WlanConsole.appContainers) == 0:
-                       self.WlanConsole = Console()
-                       cmd = "iwconfig " + self.iface
-                       self.WlanConsole.ePopen(cmd, self.iwconfigFinished, callback)
-
-       def iwconfigFinished(self, result, retval, extra_args):
-               print "self.iface im iwconfigFinished",self.iface
-               callback = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
-               
-               for line in result.splitlines():
-                       line = line.strip()
-                       if "ESSID" in line:
-                               if "off/any" in line:
-                                       ssid = _("No Connection")
-                               else:
-                                       if "Nickname" in line:
-                                               tmpssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid
-                                       else:
-                                               tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid                                          
-
-                               if ssid is not None:
-                                       data['essid'] = ssid
-                       if 'Frequency' in line:
-                               frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
-                               if frequency is not None:
-                                       data['frequency'] = frequency
-                       if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)-1]
-                               if ap is not None:
-                                       data['acesspoint'] = ap
-                       if "Bit Rate" in line:
-                               br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
-                               if br is not None:
-                                       data['bitrate'] = br
-                       if 'Encryption key' in line:
-                               if ":off" in line:
-                                   enc = _("Disabled")
-                               else:
-                                   enc = line[line.index('Encryption key')+15 :line.index('   Security')]
-                               if enc is not None:
-                                       data['encryption'] = _("Enabled")
-                       if 'Quality' in line:
-                               if "/100" in line:
-                                       qual = line[line.index('Quality')+8:line.index('/100')]
-                               else:
-                                       qual = line[line.index('Quality')+8:line.index('Sig')]
-                               if qual is not None:
-                                       data['quality'] = qual
-                       if 'Signal level' in line:
-                               signal = line[line.index('Signal level')+13 :line.index(' dBm')]
-                               if signal is not None:
-                                       data['signal'] = signal
-
-               self.wlaniface[self.iface] = data
-               
-               if len(self.WlanConsole.appContainers) == 0:
-                       print "self.wlaniface after loading:", self.wlaniface
-                       self.WlanConsole = None
-                       if callback is not None:
-                               callback(True,self.wlaniface)
-
-       def getAdapterAttribute(self, attribute):
-               if self.wlaniface.has_key(self.iface):
-                       print "self.wlaniface.has_key",self.iface
-                       if self.wlaniface[self.iface].has_key(attribute):
-                               return self.wlaniface[self.iface][attribute]
-               return None
-               
        def asciify(self, str):
                return str.translate(self.asciitrans)
-
        
        def getWirelessInterfaces(self):
-               device = re_compile('[a-z]{2,}[0-9]*:')
-               ifnames = []
+               return getWNICnames()
 
-               fp = open('/proc/net/wireless', 'r')
-               for line in fp:
-                       try:
-                               # append matching pattern, without the trailing colon
-                               ifnames.append(device.search(line).group()[:-1])
-                       except AttributeError:
-                               pass
-               return ifnames
+       def setInterface(self, iface = None):
+               self.iface = iface
+
+       def getInterface(self):
+               return self.iface
 
-       
        def getNetworkList(self):
-               system("ifconfig "+self.iface+" up")
+               if self.oldInterfaceState is None:
+                       self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
+               if self.oldInterfaceState is False:
+                       if iNetwork.getAdapterAttribute(self.iface, "up") is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", True)
+                               system("ifconfig "+self.iface+" up")
+
                ifobj = Wireless(self.iface) # a Wireless NIC Object
-               
-               #Association mappings
-               #stats, quality, discard, missed_beacon = ifobj.getStatistics()
-               #snr = quality.signallevel - quality.noiselevel
 
                try:
                        scanresults = ifobj.scan()
                except:
                        scanresults = None
-                       print "[Wlan.py] No Wireless Networks could be found"
-               
+                       print "[Wlan.py] No wireless networks could be found"
+               aps = {}
                if scanresults is not None:
-                       aps = {}
                        (num_channels, frequencies) = ifobj.getChannelInfo()
                        index = 1
                        for result in scanresults:
@@ -188,7 +96,6 @@ class Wlan:
                                        element = element.encode()
                                        extra.append( strip(self.asciify(element)) )
                                for element in extra:
-                                       print element
                                        if 'SignalStrength' in element:
                                                signal = element[element.index('SignalStrength')+15:element.index(',L')]                                        
                                        if 'LinkQuality' in element:
@@ -207,183 +114,151 @@ class Wlan:
                                        'signal' : str(signal),
                                        'custom' : extra,
                                }
-                               #print "GOT APS ENTRY:",aps[bssid]
-                               index = index + 1
-                       return aps
 
+                               index = index + 1
+               return aps
                
-       def getStatus(self):
-               ifobj = Wireless(self.iface)
-               fq = Iwfreq()
-               try:
-                       self.channel = str(fq.getChannel(str(ifobj.getFrequency()[0:-3])))
-               except:
-                       self.channel = 0
-               status = {
-                                 'BSSID': str(ifobj.getAPaddr()), #ifobj.getStatistics()
-                                 'ESSID': str(ifobj.getEssid()),
-                                 'quality': "%s/%s" % (ifobj.getStatistics()[1].quality,ifobj.getQualityMax().quality),
-                                 'signal': str(ifobj.getStatistics()[1].siglevel-0x100) + " dBm",
-                                 'bitrate': str(ifobj.getBitrate()),
-                                 'channel': str(self.channel),
-                                 #'channel': str(fq.getChannel(str(ifobj.getFrequency()[0:-3]))),
-               }
-               
-               for (key, item) in status.items():
-                       if item is "None" or item is "":
-                                       status[key] = _("N/A")
-                               
-               return status
+       def stopGetNetworkList(self):
+               if self.oldInterfaceState is not None:
+                       if self.oldInterfaceState is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", False)
+                               system("ifconfig "+self.iface+" down")
+                               self.oldInterfaceState = None
+                               self.iface = None
 
+iWlan = Wlan()
 
 class wpaSupplicant:
        def __init__(self):
                pass
-       
                
-       def writeConfig(self):  
-                       
-                       essid = config.plugins.wlan.essid.value
-                       hiddenessid = config.plugins.wlan.hiddenessid.value
-                       encrypted = config.plugins.wlan.encryption.enabled.value
-                       encryption = config.plugins.wlan.encryption.type.value
-                       wepkeytype = config.plugins.wlan.encryption.wepkeytype.value
-                       psk = config.plugins.wlan.encryption.psk.value
-                       fp = file('/etc/wpa_supplicant.conf', 'w')
-                       fp.write('#WPA Supplicant Configuration by enigma2\n')
-                       fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
-                       fp.write('eapol_version=1\n')
-                       fp.write('fast_reauth=1\n')     
-                       if essid == 'hidden...':
-                               fp.write('ap_scan=2\n')
-                       else:
-                               fp.write('ap_scan=1\n')
-                       fp.write('network={\n')
-                       if essid == 'hidden...':
-                               fp.write('\tssid="'+hiddenessid+'"\n')
+       def writeConfig(self, iface):
+               essid = config.plugins.wlan.essid.value
+               hiddenessid = config.plugins.wlan.hiddenessid.value
+               encryption = config.plugins.wlan.encryption.value
+               wepkeytype = config.plugins.wlan.wepkeytype.value
+               psk = config.plugins.wlan.psk.value
+               fp = file(getWlanConfigName(iface), 'w')
+               fp.write('#WPA Supplicant Configuration by enigma2\n')
+               fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
+               fp.write('eapol_version=1\n')
+               fp.write('fast_reauth=1\n')     
+
+               if hiddenessid:
+                       fp.write('ap_scan=2\n')
+               else:
+                       fp.write('ap_scan=1\n')
+               fp.write('network={\n')
+               fp.write('\tssid="'+essid+'"\n')
+               fp.write('\tscan_ssid=0\n')                     
+               if encryption in ('WPA', 'WPA2', 'WPA/WPA2'):
+                       fp.write('\tkey_mgmt=WPA-PSK\n')
+                       if encryption == 'WPA':
+                               fp.write('\tproto=WPA\n')
+                               fp.write('\tpairwise=TKIP\n')
+                               fp.write('\tgroup=TKIP\n')
+                       elif encryption == 'WPA2':
+                               fp.write('\tproto=RSN\n')
+                               fp.write('\tpairwise=CCMP\n')
+                               fp.write('\tgroup=CCMP\n')
                        else:
-                               fp.write('\tssid="'+essid+'"\n')
-                       fp.write('\tscan_ssid=0\n')                     
-                       if encrypted:
-                               if encryption in ('WPA', 'WPA2', 'WPA/WPA2'):
-                                       fp.write('\tkey_mgmt=WPA-PSK\n')
-               
-                                       if encryption == 'WPA':
-                                               fp.write('\tproto=WPA\n')
-                                               fp.write('\tpairwise=TKIP\n')
-                                               fp.write('\tgroup=TKIP\n')
-                                       elif encryption == 'WPA2':
-                                               fp.write('\tproto=RSN\n')
-                                               fp.write('\tpairwise=CCMP\n')
-                                               fp.write('\tgroup=CCMP\n')
-                                       else:
-                                               fp.write('\tproto=WPA RSN\n')
-                                               fp.write('\tpairwise=CCMP TKIP\n')
-                                               fp.write('\tgroup=CCMP TKIP\n')
-                                       fp.write('\tpsk="'+psk+'"\n')
-                               elif encryption == 'WEP':
-                                       fp.write('\tkey_mgmt=NONE\n')
-                                       if wepkeytype == 'ASCII':
-                                               fp.write('\twep_key0="'+psk+'"\n')
-                                       else:
-                                               fp.write('\twep_key0='+psk+'\n')
+                               fp.write('\tproto=WPA RSN\n')
+                               fp.write('\tpairwise=CCMP TKIP\n')
+                               fp.write('\tgroup=CCMP TKIP\n')
+                       fp.write('\tpsk="'+psk+'"\n')
+               elif encryption == 'WEP':
+                       fp.write('\tkey_mgmt=NONE\n')
+                       if wepkeytype == 'ASCII':
+                               fp.write('\twep_key0="'+psk+'"\n')
                        else:
-                               fp.write('\tkey_mgmt=NONE\n')                   
-                       fp.write('}')
-                       fp.write('\n')
-                       fp.close()
-                       system("cat /etc/wpa_supplicant.conf")
+                               fp.write('\twep_key0='+psk+'\n')
+               else:
+                       fp.write('\tkey_mgmt=NONE\n')
+               fp.write('}')
+               fp.write('\n')
+               fp.close()
+               #system('cat ' + getWlanConfigName(iface))
                
-       def loadConfig(self):
+       def loadConfig(self,iface):
+               configfile = getWlanConfigName(iface)
+               if not os_path.exists(configfile):
+                       configfile = '/etc/wpa_supplicant.conf'
                try:
                        #parse the wpasupplicant configfile
-                       fp = file('/etc/wpa_supplicant.conf', 'r')
+                       print "[Wlan.py] parsing configfile: ",configfile
+                       fp = file(configfile, 'r')
                        supplicant = fp.readlines()
                        fp.close()
-                       ap_scan = False
                        essid = None
+                       encryption = "Unencrypted"
 
                        for s in supplicant:
                                split = s.strip().split('=',1)
                                if split[0] == 'ap_scan':
-                                       print "[Wlan.py] Got Hidden SSID Scan  Value "+split[1]
                                        if split[1] == '2':
-                                               ap_scan = True
+                                               config.plugins.wlan.hiddenessid.value = True
                                        else:
-                                               ap_scan = False
-                                               
+                                               config.plugins.wlan.hiddenessid.value = False
+
                                elif split[0] == 'ssid':
-                                       print "[Wlan.py] Got SSID "+split[1][1:-1]
                                        essid = split[1][1:-1]
-                                       
+                                       config.plugins.wlan.essid.value = essid
+
                                elif split[0] == 'proto':
-                                       config.plugins.wlan.encryption.enabled.value = True
                                        if split[1] == 'WPA' :
                                                mode = 'WPA'
                                        if split[1] == 'RSN':
                                                mode = 'WPA2'
                                        if split[1] in ('WPA RSN', 'WPA WPA2'):
                                                mode = 'WPA/WPA2'
-
-                                       config.plugins.wlan.encryption.type.value = mode
-                                       print "[Wlan.py] Got Encryption: "+mode
+                                       encryption = mode
                                        
                                elif split[0] == 'wep_key0':
-                                       config.plugins.wlan.encryption.enabled.value = True
-                                       config.plugins.wlan.encryption.type.value = 'WEP'
+                                       encryption = 'WEP'
                                        if split[1].startswith('"') and split[1].endswith('"'):
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'ASCII'
-                                               config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                               config.plugins.wlan.wepkeytype.value = 'ASCII'
+                                               config.plugins.wlan.psk.value = split[1][1:-1]
                                        else:
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'HEX'
-                                               config.plugins.wlan.encryption.psk.value = split[1]                                             
+                                               config.plugins.wlan.wepkeytype.value = 'HEX'
+                                               config.plugins.wlan.psk.value = split[1]                                                
                                        
                                elif split[0] == 'psk':
-                                       config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                       config.plugins.wlan.psk.value = split[1][1:-1]
                                else:
                                        pass
+
+                       config.plugins.wlan.encryption.value = encryption
                                
-                       if ap_scan is True:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = 'hidden...'
-                       else:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = essid
                        wsconfig = {
                                        'hiddenessid': config.plugins.wlan.hiddenessid.value,
                                        'ssid': config.plugins.wlan.essid.value,
-                                       'encryption': config.plugins.wlan.encryption.enabled.value,
-                                       'encryption_type': config.plugins.wlan.encryption.type.value,
-                                       'encryption_wepkeytype': config.plugins.wlan.encryption.wepkeytype.value,
-                                       'key': config.plugins.wlan.encryption.psk.value,
+                                       'encryption': config.plugins.wlan.encryption.value,
+                                       'wepkeytype': config.plugins.wlan.wepkeytype.value,
+                                       'key': config.plugins.wlan.psk.value,
                                }
                
                        for (key, item) in wsconfig.items():
                                if item is "None" or item is "":
                                        if key == 'hiddenessid':
-                                               wsconfig['hiddenessid'] = "home"
+                                               wsconfig['hiddenessid'] = False
                                        if key == 'ssid':
-                                               wsconfig['ssid'] = "home"
-                                       if key == 'encryption':
-                                               wsconfig['encryption'] = True                           
-                                       if key == 'encryption':
-                                               wsconfig['encryption_type'] = "WPA/WPA2"
+                                               wsconfig['ssid'] = ""
                                        if key == 'encryption':
-                                               wsconfig['encryption_wepkeytype'] = "ASCII"
-                                       if key == 'encryption':
-                                               wsconfig['key'] = "mysecurewlan"
-
+                                               wsconfig['encryption'] = "WPA2"                 
+                                       if key == 'wepkeytype':
+                                               wsconfig['wepkeytype'] = "ASCII"
+                                       if key == 'key':
+                                               wsconfig['key'] = ""
                except:
-                       print "[Wlan.py] Error parsing /etc/wpa_supplicant.conf"
+                       print "[Wlan.py] Error parsing ",configfile
                        wsconfig = {
-                                       'hiddenessid': "home",
-                                       'ssid': "home",
-                                       'encryption': True,
-                                       'encryption_type': "WPA/WPA2",
-                                       'encryption_wepkeytype': "ASCII",
-                                       'key': "mysecurewlan",
+                                       'hiddenessid': False,
+                                       'ssid': "",
+                                       'encryption': "WPA2",
+                                       'wepkeytype': "ASCII",
+                                       'key': "",
                                }
-               print "[Wlan.py] WS-CONFIG-->",wsconfig
+               #print "[Wlan.py] WS-CONFIG-->",wsconfig
                return wsconfig
 
 
@@ -391,82 +266,70 @@ class Status:
        def __init__(self):
                self.wlaniface = {}
                self.backupwlaniface = {}
+               self.statusCallback = None
                self.WlanConsole = Console()
 
        def stopWlanConsole(self):
                if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
+                       print "[iStatus] killing self.WlanConsole"
                        self.WlanConsole.killAll()
                        self.WlanConsole = None
                        
        def getDataForInterface(self, iface, callback = None):
                self.WlanConsole = Console()
                cmd = "iwconfig " + iface
-               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, [iface, callback])
+               if callback is not None:
+                       self.statusCallback = callback
+               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, iface)
 
        def iwconfigFinished(self, result, retval, extra_args):
-               (iface, callback) = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
+               iface = extra_args
+               data = { 'essid': False, 'frequency': False, 'accesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
                for line in result.splitlines():
                        line = line.strip()
                        if "ESSID" in line:
                                if "off/any" in line:
-                                       ssid = _("No Connection")
+                                       ssid = "off"
                                else:
                                        if "Nickname" in line:
-                                               tmpssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid
+                                               ssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
                                        else:
-                                               tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                               if tmpssid == '':
-                                                       ssid = _("Hidden networkname")
-                                               elif tmpssid ==' ':
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid                                          
+                                               ssid=(line[line.index('ESSID')+7:len(line)-1])
                                if ssid is not None:
                                        data['essid'] = ssid
-                       if 'Frequency' in line:
+                       if "Frequency" in line:
                                frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
                                if frequency is not None:
                                        data['frequency'] = frequency
                        if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)]
+                               if "Sensitivity" in line:
+                                       ap=line[line.index('Access Point')+14:line.index('   Sensitivity')]
+                               else:
+                                       ap=line[line.index('Access Point')+14:len(line)]
                                if ap is not None:
-                                       data['acesspoint'] = ap
-                                       if ap == "Not-Associated":
-                                               data['essid'] = _("No Connection")
+                                       data['accesspoint'] = ap
                        if "Bit Rate" in line:
                                if "kb" in line:
                                        br = line[line.index('Bit Rate')+9 :line.index(' kb/s')]
-                                       if br == '0':
-                                               br = _("Unsupported")
-                                       else:
-                                               br += " Mb/s"
                                else:
-                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')] + " Mb/s"
+                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
                                if br is not None:
                                        data['bitrate'] = br
-                       if 'Encryption key' in line:
+                       if "Encryption key" in line:
                                if ":off" in line:
-                                       if data['acesspoint'] is not "Not-Associated":
-                                               enc = _("Unsupported")
-                                       else:
-                                               enc = _("Disabled")
-                               else:
+                                       enc = "off"
+                               elif "Security" in line:
                                        enc = line[line.index('Encryption key')+15 :line.index('   Security')]
                                        if enc is not None:
-                                               enc = _("Enabled")
+                                               enc = "on"
+                               else:
+                                       enc = line[line.index('Encryption key')+15 :len(line)]
+                                       if enc is not None:
+                                               enc = "on"
                                if enc is not None:
                                        data['encryption'] = enc
                        if 'Quality' in line:
                                if "/100" in line:
-                                       #qual = line[line.index('Quality')+8:line.index('/100')]
                                        qual = line[line.index('Quality')+8:line.index('  Signal')]
                                else:
                                        qual = line[line.index('Quality')+8:line.index('Sig')]
@@ -474,8 +337,7 @@ class Status:
                                        data['quality'] = qual
                        if 'Signal level' in line:
                                if "dBm" in line:
-                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')]
-                                       signal += " dBm"
+                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')] + " dBm"
                                elif "/100" in line:
                                        if "Noise" in line:
                                                signal = line[line.index('Signal level')+13:line.index('  Noise')]
@@ -494,9 +356,10 @@ class Status:
                
                if self.WlanConsole is not None:
                        if len(self.WlanConsole.appContainers) == 0:
-                               print "self.wlaniface after loading:", self.wlaniface
-                               if callback is not None:
-                                       callback(True,self.wlaniface)
+                               print "[Wlan.py] self.wlaniface after loading:", self.wlaniface
+                               if self.statusCallback is not None:
+                                               self.statusCallback(True,self.wlaniface)
+                                               self.statusCallback = None
 
        def getAdapterAttribute(self, iface, attribute):
                self.iface = iface
index efec340a22ee7a70011a699a21eec73d61b0a541..10213eb0c49c49b49fb913c1a0fda45c41abb41e 100644 (file)
@@ -8,37 +8,40 @@ from Components.Sources.List import List
 from Components.MenuList import MenuList
 from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.ConfigList import ConfigListScreen
-from Components.Network import Network, iNetwork
+from Components.Network import iNetwork
 from Components.Console import Console
 from Plugins.Plugin import PluginDescriptor
 from os import system, path as os_path, listdir
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from Tools.LoadPixmap import LoadPixmap
 from Tools.HardwareInfo import HardwareInfo
-from Wlan import Wlan, wpaSupplicant, iStatus
-import sha
+from Wlan import iWlan, wpaSupplicant, iStatus, getWlanConfigName
+import hashlib
+from time import time
+from os import urandom, system
+from re import escape as re_escape
 
 plugin_path = eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/WirelessLan")
 
+
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
+config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
 
 
 class WlanStatus(Screen):
@@ -46,20 +49,19 @@ class WlanStatus(Screen):
                <screen name="WlanStatus" position="center,center" size="560,400" title="Wireless Network State" >
                        <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
                        <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-       
-                       <widget source="LabelBSSID" render="Label" position="10,60" size="250,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="LabelESSID" render="Label" position="10,100" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="LabelQuality" render="Label" position="10,140" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="LabelSignal" render="Label" position="10,180" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="LabelBitrate" render="Label" position="10,220" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="LabelEnc" render="Label" position="10,260" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       
-                       <widget source="BSSID" render="Label" position="320,60" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="ESSID" render="Label" position="320,100" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="quality" render="Label" position="320,140" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="signal" render="Label" position="320,180" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="bitrate" render="Label" position="320,220" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-                       <widget source="enc" render="Label" position="320,260" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+
+                       <widget source="LabelBSSID" render="Label" position="10,60" size="200,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="LabelESSID" render="Label" position="10,100" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="LabelQuality" render="Label" position="10,140" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="LabelSignal" render="Label" position="10,180" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="LabelBitrate" render="Label" position="10,220" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="LabelEnc" render="Label" position="10,260" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="BSSID" render="Label" position="220,60" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="ESSID" render="Label" position="220,100" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="quality" render="Label" position="220,140" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="signal" render="Label" position="220,180" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="bitrate" render="Label" position="220,220" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+                       <widget source="enc" render="Label" position="220,260" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
        
                        <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />         
                        <widget source="IFtext" render="Label" position="10,355" size="120,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
@@ -105,7 +107,7 @@ class WlanStatus(Screen):
                }, -1)
                self.timer = eTimer()
                self.timer.timeout.get().append(self.resetList) 
-               self.onShown.append(lambda: self.timer.start(5000))
+               self.onShown.append(lambda: self.timer.start(8000))
                self.onLayoutFinish.append(self.layoutFinished)
                self.onClose.append(self.cleanup)
 
@@ -113,7 +115,7 @@ class WlanStatus(Screen):
                iStatus.stopWlanConsole()
                
        def layoutFinished(self):
-               self.setTitle(_("Wireless Network State"))
+               self.setTitle(_("Wireless network state"))
                
        def resetList(self):
                iStatus.getDataForInterface(self.iface,self.getInfoCB)
@@ -122,32 +124,65 @@ class WlanStatus(Screen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       self["BSSID"].setText(status[self.iface]["acesspoint"])
-                                       self["ESSID"].setText(status[self.iface]["essid"])
-                                       self["quality"].setText(status[self.iface]["quality"])
-                                       self["signal"].setText(status[self.iface]["signal"])
-                                       self["bitrate"].setText(status[self.iface]["bitrate"])
-                                       self["enc"].setText(status[self.iface]["encryption"])
+                                       if status[self.iface]["essid"] == "off":
+                                               essid = _("No Connection")
+                                       else:
+                                               essid = status[self.iface]["essid"]
+                                       if status[self.iface]["accesspoint"] == "Not-Associated":
+                                               accesspoint = _("Not-Associated")
+                                               essid = _("No Connection")
+                                       else:
+                                               accesspoint = status[self.iface]["accesspoint"]
+                                       if self.has_key("BSSID"):
+                                               self["BSSID"].setText(accesspoint)
+                                       if self.has_key("ESSID"):
+                                               self["ESSID"].setText(essid)
+
+                                       quality = status[self.iface]["quality"]
+                                       if self.has_key("quality"):
+                                               self["quality"].setText(quality)
+                                               
+                                       if status[self.iface]["bitrate"] == '0':
+                                               bitrate = _("Unsupported")
+                                       else:
+                                               bitrate = str(status[self.iface]["bitrate"]) + " Mb/s"
+                                       if self.has_key("bitrate"):
+                                               self["bitrate"].setText(bitrate)                                        
+                                       
+                                       signal = status[self.iface]["signal"]
+                                       if self.has_key("signal"):
+                                               self["signal"].setText(signal)
+
+                                       if status[self.iface]["encryption"] == "off":
+                                               if accesspoint == "Not-Associated":
+                                                       encryption = _("Disabled")
+                                               else:
+                                                       encryption = _("Unsupported")
+                                       else:
+                                               encryption = _("Enabled")
+                                       if self.has_key("enc"):
+                                               self["enc"].setText(encryption)
                                        self.updateStatusLink(status)
 
        def exit(self):
                self.timer.stop()
-               self.close(True)        
+               self.close(True)
 
        def updateStatusbar(self):
-               self["BSSID"].setText(_("Please wait..."))
-               self["ESSID"].setText(_("Please wait..."))
-               self["quality"].setText(_("Please wait..."))
-               self["signal"].setText(_("Please wait..."))
-               self["bitrate"].setText(_("Please wait..."))
-               self["enc"].setText(_("Please wait..."))
+               wait_txt = _("Please wait...")
+               self["BSSID"].setText(wait_txt)
+               self["ESSID"].setText(wait_txt)
+               self["quality"].setText(wait_txt)
+               self["signal"].setText(wait_txt)
+               self["bitrate"].setText(wait_txt)
+               self["enc"].setText(wait_txt)
                self["IFtext"].setText(_("Network:"))
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
 
        def updateStatusLink(self,status):
                if status is not None:
-                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                self["statuspic"].setPixmapNum(1)
                        else:
                                self["statuspic"].setPixmapNum(0)
@@ -217,6 +252,8 @@ class WlanScan(Screen):
                        "red": self.cancel,
                        "green": self.select,
                })
+               iWlan.setInterface(self.iface)
+               self.w = iWlan.getInterface()
                self.onLayoutFinish.append(self.layoutFinished)
                self.getAccessPoints(refresh = False)
                
@@ -226,42 +263,24 @@ class WlanScan(Screen):
        def select(self):
                cur = self["list"].getCurrent()
                if cur is not None:
+                       iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
-                       if cur[1] is not None:
-                               if cur[1] == 'hidden...':
-                                       essid = cur[1]
-                               else:
-                                       essid = cur[0]
-                               self.close(essid,self.getWlanList())
+                       if cur[0] is not None:
+                               self.close(cur[0])
                        else:
-                               self.close(None,None)
+                               self.close(None)
                else:
-                       self.rescanTimer.stop()
-                       del self.rescanTimer
-                       self.close(None,None)
-       
-       def WlanSetupClosed(self, *ret):
-               if ret[0] == 2:
+                       iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
                        self.close(None)
        
        def cancel(self):
-               if self.oldInterfaceState is False:
-                       iNetwork.setAdapterAttribute(self.iface, "up", False)
-                       iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
-               else:
-                       self.rescanTimer.stop()
-                       del self.rescanTimer
-                       self.close(None)
-
-       def deactivateInterfaceCB(self,data):
-               if data is not None:
-                       if data is True:
-                               self.rescanTimer.stop()
-                               del self.rescanTimer
-                               self.close(None)
+               iWlan.stopGetNetworkList()
+               self.rescanTimer.stop()
+               del self.rescanTimer
+               self.close(None)
 
        def rescanTimerFired(self):
                self.rescanTimer.stop()
@@ -270,10 +289,7 @@ class WlanScan(Screen):
        def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal):
                divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                encryption = encrypted and _("Yes") or _("No")
-               if bssid == 'hidden...':
-                       return((essid, bssid, None, None, None, None, divpng))
-               else:                                   
-                       return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
+               return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
 
        def updateAPList(self):
                newList = []
@@ -290,20 +306,19 @@ class WlanScan(Screen):
                                tmpList.append(data)
 
                if len(tmpList):
-                       if "hidden..." not in tmpList:
-                               tmpList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
-       
                        for entry in tmpList:
                                self.newAPList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
        
                        currentListEntry = self["list"].getCurrent()
-                       idx = 0
-                       for entry in self.newAPList:
-                               if entry[0] == currentListEntry[0]:
-                                       newListIndex = idx
-                               idx +=1
+                       if currentListEntry is not None:
+                               idx = 0
+                               for entry in self.newAPList:
+                                       if entry[0] == currentListEntry[0]:
+                                               newListIndex = idx
+                                       idx +=1
                        self['list'].setList(self.newAPList)
-                       self["list"].setIndex(newListIndex)
+                       if newListIndex is not None:
+                               self["list"].setIndex(newListIndex)
                        self["list"].updateList(self.newAPList)
                        self.listLength = len(self.newAPList)
                        self.buildWlanList()
@@ -312,8 +327,7 @@ class WlanScan(Screen):
        def getAccessPoints(self, refresh = False):
                self.APList = []
                self.cleanList = []
-               self.w = Wlan(self.iface)
-               aps = self.w.getNetworkList()
+               aps = iWlan.getNetworkList()
                if aps is not None:
                        print "[WirelessLan.py] got Accespoints!"
                        tmpList = []
@@ -336,9 +350,6 @@ class WlanScan(Screen):
                                else:
                                        self.oldlist[entry[0]]['data'] = entry
                
-               if "hidden..." not in self.cleanList:
-                       self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
-
                for entry in self.cleanList:
                        self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
                
@@ -351,20 +362,17 @@ class WlanScan(Screen):
 
        def setInfo(self):
                length = self.getLength()
-               if length <= 1:
-                       self["info"].setText(_("No wireless networks found! Please refresh."))
-               elif length == 2:
+               if length == 0:
+                       self["info"].setText(_("No wireless networks found! Searching..."))
+               elif length == 1:
                        self["info"].setText(_("1 wireless network found!"))
                else:
-                       self["info"].setText(str(length-1)+_(" wireless networks found!"))
+                       self["info"].setText(str(length)+_(" wireless networks found!"))
 
        def buildWlanList(self):
                self.WlanList = []
                for entry in self['list'].list:
-                       if entry[1] == "hidden...":
-                               self.WlanList.append(( "hidden...",_("enter hidden network SSID") ))#continue
-                       else:
-                               self.WlanList.append( (entry[0], entry[0]) )
+                       self.WlanList.append( (entry[0], entry[0]) )
 
        def getLength(self):
                return self.listLength          
@@ -391,7 +399,7 @@ def decrypt_block(src, mod):
        if len(src) != 128 and len(src) != 202:
                return None
        dest = rsa_pub1024(src[:128], mod)
-       hash = sha.new(dest[1:107])
+       hash = hashlib.sha1(dest[1:107])
        if len(src) == 202:
                hash.update(src[131:192])       
        result = hash.digest()
@@ -399,65 +407,69 @@ def decrypt_block(src, mod):
                return dest
        return None
 
-def validate_cert(cert, key):
+def validate_certificate(cert, key):
        buf = decrypt_block(cert[8:], key) 
        if buf is None:
                return None
        return buf[36:107] + cert[139:196]
 
-def read_random():
+def get_random():
        try:
-               fd = open("/dev/urandom", "r")
-               buf = fd.read(8)
-               fd.close()
-               return buf
+               xor = lambda a,b: ''.join(chr(ord(c)^ord(d)) for c,d in zip(a,b*100))
+               random = urandom(8)
+               x = str(time())[-8:]
+               result = xor(random, x)
+                               
+               return result
        except:
                return None
 
 def WlanStatusScreenMain(session, iface):
        session.open(WlanStatus, iface)
 
-
 def callFunction(iface):
-       w = Wlan(iface)
-       i = w.getWirelessInterfaces()
+       iWlan.setInterface(iface)
+       i = iWlan.getWirelessInterfaces()
        if i:
-               if iface in i:
+               if iface in i or iNetwork.isWirelessInterface(iface):
                        return WlanStatusScreenMain
+               return None
        return None
 
-
 def configStrings(iface):
-       hardware_info = HardwareInfo()
-       if  hardware_info.device_name != "dm7025":
+       try:
+               device = open("/proc/stb/info/model", "r").readline().strip()
+       except:
+               device = ""     
+       if device != "dm7025":
                rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
                etpm = eTPM()
                l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
                if l2cert is None:
                        return
-               l2key = validate_cert(l2cert, rootkey)
+               l2key = validate_certificate(l2cert, rootkey)
                if l2key is None:
                        return
                l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
                if l3cert is None:
-                       print "better run the genuine dreambox plugin"
                        return
-               l3key = validate_cert(l3cert, l2key)
+               l3key = validate_certificate(l3cert, l2key)
                if l3key is None:
                        return
-               rnd = read_random()
+               rnd = get_random()
                if rnd is None:
                        return
                val = etpm.challenge(rnd)
                result = decrypt_block(val, l3key)
-       if hardware_info.device_name == "dm7025" or result[80:88] == rnd:
+       if device == "dm7025" or result[80:88] == rnd:
                driver = iNetwork.detectWlanModule(iface)
        else:
                driver = 'dreambox'
+       print 'Using "%s" as wpa-supplicant driver' % (driver)
        ret = ""
-       if driver == 'madwifi' and config.plugins.wlan.essid.value == "hidden...":
-               ret += "\tpre-up iwconfig " + iface + " essid \"" + config.plugins.wlan.hiddenessid.value + "\" || true\n"
-       ret += "\tpre-up wpa_supplicant -i" + iface + " -c/etc/wpa_supplicant.conf -B -dd -D" + driver + " || true\n"
+       if driver == 'madwifi' and config.plugins.wlan.hiddenessid.value:
+               ret += "\tpre-up iwconfig " + iface + " essid \"" + re_escape(config.plugins.wlan.essid.value) + "\" || true\n"
+       ret += "\tpre-up wpa_supplicant -i" + iface + " -c" + getWlanConfigName(iface) + " -B -dd -D" + driver + " || true\n"
        ret += "\tpre-down wpa_cli -i" + iface + " terminate || true\n"
        return ret
 
index c07e34954e4955bc1922e11d764475e460ce5286..912d67843dadfd08e2142dd237594ba5b7797175 100644 (file)
@@ -65,6 +65,24 @@ class BouquetSelector(Screen):
        def cancelClick(self):
                self.close(False)
 
+class SilentBouquetSelector:
+       def __init__(self, bouquets, enableWrapAround=False, current=0):
+               self.bouquets = [b[1] for b in bouquets]
+               self.pos = current
+               self.count = len(bouquets)
+               self.enableWrapAround = enableWrapAround
+
+       def up(self):
+               if self.pos > 0 or self.enableWrapAround:
+                       self.pos = (self.pos - 1) % self.count
+
+       def down(self):
+               if self.pos < (self.count - 1) or self.enableWrapAround:
+                       self.pos = (self.pos + 1) % self.count
+
+       def getCurrent(self):
+               return self.bouquets[self.pos]
+
 # csel.bouquet_mark_edit values
 OFF = 0
 EDIT_BOUQUET = 1
index 2e97b59d67b3e905526b68f173c282c37862359d..93a47886db3c846993c6469693f922de75ed82c5 100644 (file)
@@ -1,4 +1,4 @@
-from ChannelSelection import ChannelSelection, BouquetSelector
+from ChannelSelection import ChannelSelection, BouquetSelector, SilentBouquetSelector
 
 from Components.ActionMap import ActionMap, HelpableActionMap
 from Components.ActionMap import NumberActionMap
@@ -559,6 +559,12 @@ class InfoBarEPG:
                        cnt = 0
                else:
                        cnt = len(bouquets)
+               if config.usage.multiepg_ask_bouquet.value:
+                       self.openMultiServiceEPGAskBouquet(bouquets, cnt, withCallback)
+               else:
+                       self.openMultiServiceEPGSilent(bouquets, cnt, withCallback)
+
+       def openMultiServiceEPGAskBouquet(self, bouquets, cnt, withCallback):
                if cnt > 1: # show bouquet list
                        if withCallback:
                                self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
@@ -568,6 +574,21 @@ class InfoBarEPG:
                elif cnt == 1:
                        self.openBouquetEPG(bouquets[0][1], withCallback)
 
+       def openMultiServiceEPGSilent(self, bouquets, cnt, withCallback):
+               root = self.servicelist.getRoot()
+               rootstr = root.toCompareString()
+               current = 0
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
+               if cnt > 1: # create bouquet list for bouq+/-
+                       self.bouquetSel = SilentBouquetSelector(bouquets, True, self.servicelist.getBouquetNumOffset(root))
+               if cnt >= 1:
+                       self.openBouquetEPG(root, withCallback)
+
        def changeServiceCB(self, direction, epg):
                if self.serviceSel:
                        if direction > 0:
index de2fa99342377647d04d6dc60a7698800a36ccdc..4b15ee0073433eefa3ca01b3d76087d1f9c14d42 100755 (executable)
@@ -11,7 +11,7 @@ from Components.Sources.List import List
 from Components.Label import Label,MultiColorLabel
 from Components.Pixmap import Pixmap,MultiPixmap
 from Components.MenuList import MenuList
-from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing, ConfigBoolean
 from Components.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
@@ -42,11 +42,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                self["key_blue"] = StaticText("")
                self["introduction"] = StaticText(self.edittext)
                
-               self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
-               
-               if not self.adapters:
-                       self.onFirstExecBegin.append(self.NetworkFallback)
-                       
                self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
                        {
                        "cancel": (self.close, _("exit network interface list")),
@@ -65,6 +60,14 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        "yellow": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ),
                        })
 
+               self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
+
+               if not self.adapters:
+                       self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getConfiguredAdapters()]
+
+               if len(self.adapters) == 0:
+                       self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getInstalledAdapters()]
+
                self.list = []
                self["list"] = List(self.list)
                self.updateList()
@@ -80,14 +83,14 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                description = None
                interfacepng = None
 
-               if iface in iNetwork.lan_interfaces:
+               if not iNetwork.isWirelessInterface(iface):
                        if active is True:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-active.png"))
                        elif active is False:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-inactive.png"))
                        else:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired.png"))
-               elif iface in iNetwork.wlan_interfaces:
+               elif iNetwork.isWirelessInterface(iface):
                        if active is True:
                                interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wireless-active.png"))
                        elif active is False:
@@ -132,19 +135,16 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                        fp.close()
                        default_gw = result
                                        
-               if len(self.adapters) == 0: # no interface available => display only eth0
-                       self.list.append(self.buildInterfaceList("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True ))
-               else:
-                       for x in self.adapters:
-                               if x[1] == default_gw:
-                                       default_int = True
-                               else:
-                                       default_int = False
-                               if iNetwork.getAdapterAttribute(x[1], 'up') is True:
-                                       active_int = True
-                               else:
-                                       active_int = False
-                               self.list.append(self.buildInterfaceList(x[1],_(x[0]),default_int,active_int ))
+               for x in self.adapters:
+                       if x[1] == default_gw:
+                               default_int = True
+                       else:
+                               default_int = False
+                       if iNetwork.getAdapterAttribute(x[1], 'up') is True:
+                               active_int = True
+                       else:
+                               active_int = False
+                       self.list.append(self.buildInterfaceList(x[1],_(x[0]),default_int,active_int ))
                
                if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
                        self["key_blue"].setText(_("NetworkWizard"))
@@ -179,22 +179,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen):
                else:
                        self.updateList()
 
-       def NetworkFallback(self):
-               if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-               if iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-               else:
-                       self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
-
-       def ErrorMessageClosed(self, *ret):
-               if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0')
-               elif iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'ath0')
-               else:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0')
-
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
                iNetwork.stopRestartConsole()
@@ -312,18 +296,17 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
 
 
 class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
-       def __init__(self, session, networkinfo, essid=None, aplist=None):
+       def __init__(self, session, networkinfo, essid=None):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
                self.session = session
                if isinstance(networkinfo, (list, tuple)):
                        self.iface = networkinfo[0]
                        self.essid = networkinfo[1]
-                       self.aplist = networkinfo[2]
                else:
                        self.iface = networkinfo
                        self.essid = essid
-                       self.aplist = aplist
+                       
                self.extended = None
                self.applyConfigRef = None
                self.finished_cb = None
@@ -414,62 +397,36 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                self.gatewayEntry = None
                self.hiddenSSID = None
                self.wlanSSID = None
-               self.encryptionEnabled = None
-               self.encryptionKey = None
+               self.encryption = None
                self.encryptionType = None
-               self.nwlist = None
+               self.encryptionKey = None
                self.encryptionlist = None
                self.weplist = None
                self.wsconfig = None
                self.default = None
 
-               if self.iface in iNetwork.wlan_interfaces:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
-                       self.w = Wlan(self.iface)
+               if iNetwork.isWirelessInterface(self.iface):
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant
                        self.ws = wpaSupplicant()
                        self.encryptionlist = []
+                       self.encryptionlist.append(("Unencrypted", _("Unencrypted")))
                        self.encryptionlist.append(("WEP", _("WEP")))
                        self.encryptionlist.append(("WPA", _("WPA")))
-                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2")))
+                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.weplist = []
                        self.weplist.append("ASCII")
                        self.weplist.append("HEX")
-                       if self.aplist is not None:
-                               self.nwlist = self.aplist
-                               self.nwlist.sort(key = lambda x: x[0])
-                       else:
-                               self.nwlist = []
-                               self.aps = None
-                               try:
-                                       self.aps = self.w.getNetworkList()
-                                       if self.aps is not None:
-                                               for ap in self.aps:
-                                                       a = self.aps[ap]
-                                                       if a['active']:
-                                                               if a['essid'] != '':
-                                                                       self.nwlist.append((a['essid'],a['essid']))
-                                       self.nwlist.sort(key = lambda x: x[0])
-                               except:
-                                       self.nwlist.append(("No Networks found",_("No Networks found")))
-
-                       self.wsconfig = self.ws.loadConfig()
-                       if self.essid is not None: # ssid from wlan scan
-                               self.default = self.essid
-                       else:
-                               self.default = self.wsconfig['ssid']
 
-                       if "hidden..." not in self.nwlist:
-                               self.nwlist.append(("hidden...",_("enter hidden network SSID")))
-                       if self.default not in self.nwlist:
-                               self.nwlist.append((self.default,self.default))
-                       config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
-                       config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False))
+                       self.wsconfig = self.ws.loadConfig(self.iface)
+                       if self.essid is None:
+                               self.essid = self.wsconfig['ssid']
 
-                       config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] ))
-                       config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] ))
-                       config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] ))
-                       config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = self.wsconfig['hiddenessid']))
+                       config.plugins.wlan.essid = NoSave(ConfigText(default = self.essid, visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.encryption = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption'] ))
+                       config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['wepkeytype'] ))
+                       config.plugins.wlan.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
 
                self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
                self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
@@ -502,6 +459,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                        self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
 
                        self.extended = None
+                       self.configStrings = None
                        for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
                                callFnc = p.__call__["ifaceSupported"](self.iface)
                                if callFnc is not None:
@@ -509,30 +467,21 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                                self.extended = callFnc
                                                if p.__call__.has_key("configStrings"):
                                                        self.configStrings = p.__call__["configStrings"]
-                                               else:
-                                                       self.configStrings = None
-                                               if config.plugins.wlan.essid.value == 'hidden...':
-                                                       self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
-                                                       self.list.append(self.wlanSSID)
-                                                       self.hiddenSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.hiddenessid)
-                                                       self.list.append(self.hiddenSSID)
-                                               else:
-                                                       self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
-                                                       self.list.append(self.wlanSSID)
-                                               self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
-                                               self.list.append(self.encryptionEnabled)
-                                               
-                                               if config.plugins.wlan.encryption.enabled.value:
-                                                       self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)
-                                                       self.list.append(self.encryptionType)
-                                                       if config.plugins.wlan.encryption.type.value == 'WEP':
-                                                               self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype))
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
-                                                       else:
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
 
+                                               self.hiddenSSID = getConfigListEntry(_("Hidden network"), config.plugins.wlan.hiddenessid)
+                                               self.list.append(self.hiddenSSID)
+                                               self.wlanSSID = getConfigListEntry(_("Networkname (SSID)"), config.plugins.wlan.essid)
+                                               self.list.append(self.wlanSSID)
+                                               self.encryption = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption)
+                                               self.list.append(self.encryption)                                               
+
+                                               self.encryptionType = getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.wepkeytype)
+                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.psk)
+                                               
+                                               if config.plugins.wlan.encryption.value != "Unencrypted":
+                                                       if config.plugins.wlan.encryption.value == 'WEP':
+                                                               self.list.append(self.encryptionType)
+                                                       self.list.append(self.encryptionKey)
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
@@ -546,12 +495,8 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                        self.createSetup()
                if self["config"].getCurrent() == self.gatewayEntry:
                        self.createSetup()
-               if self.iface in iNetwork.wlan_interfaces:
-                       if self["config"].getCurrent() == self.wlanSSID:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionEnabled:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionType:
+               if iNetwork.isWirelessInterface(self.iface):
+                       if self["config"].getCurrent() == self.encryption:
                                self.createSetup()
 
        def keyLeft(self):
@@ -576,7 +521,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                if (ret == True):               
                        num_configured_if = len(iNetwork.getConfiguredAdapters())
                        if num_configured_if >= 1:
-                               if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
+                               if self.iface in iNetwork.getConfiguredAdapters():      
                                        self.applyConfig(True)
                                else:
                                        self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
@@ -594,11 +539,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                if interface == self.iface:
                                        continue
                                iNetwork.setAdapterAttribute(interface, "up", False)
-                               iNetwork.deactivateInterface(interface)
-                               self.applyConfig(True)
+                       iNetwork.deactivateInterface(configuredInterfaces,self.deactivateSecondInterfaceCB)
+
+       def deactivateSecondInterfaceCB(self, data):
+               if data is True:
+                       self.applyConfig(True)
 
        def applyConfig(self, ret = False):
                if (ret == True):
+                       self.applyConfigRef = None
                        iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value)
                        iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
                        iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
@@ -607,17 +556,33 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
                        else:
                                iNetwork.removeAdapterAttribute(self.iface, "gateway")
-                       if self.extended is not None and self.configStrings is not None:
+
+                       if (self.extended is not None and self.configStrings is not None):
                                iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
-                               self.ws.writeConfig()
+                               self.ws.writeConfig(self.iface)
+                               
                        if self.activateInterfaceEntry.value is False:
-                               iNetwork.deactivateInterface(self.iface)
-                       iNetwork.writeNetworkConfig()
-                       iNetwork.restartNetwork(self.applyConfigDataAvail)
-                       self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                               iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
+                               iNetwork.writeNetworkConfig()
+                               self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       else:
+                               if self.oldInterfaceState is False:
+                                       iNetwork.activateInterface(self.iface,self.deactivateInterfaceCB)
+                               else:
+                                       iNetwork.deactivateInterface(self.iface,self.activateInterfaceCB)
+                               iNetwork.writeNetworkConfig()
+                               self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
                else:
                        self.keyCancel()
 
+       def deactivateInterfaceCB(self, data):
+               if data is True:
+                       self.applyConfigDataAvail(True)
+
+       def activateInterfaceCB(self, data):
+               if data is True:
+                       iNetwork.activateInterface(self.iface,self.applyConfigDataAvail)
+
        def applyConfigDataAvail(self, data):
                if data is True:
                        iNetwork.getInterfaces(self.getInterfacesDataAvail)
@@ -675,10 +640,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                
        def hideInputHelp(self):
                current = self["config"].getCurrent()
-               if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
+               if current == self.wlanSSID:
                        if current[1].help_window.instance is not None:
                                current[1].help_window.instance.hide()
-               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
+               elif current == self.encryptionKey and config.plugins.wlan.encryption.value is not "Unencrypted":
                        if current[1].help_window.instance is not None:
                                current[1].help_window.instance.hide()
 
@@ -703,7 +668,8 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                
                self.oktext = _("Press OK on your remote control to continue.")
                self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
-               self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.")      
+               self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.")
+               self.missingwlanplugintxt = _("The wireless LAN plugin is not installed!\nPlease install it.")
                
                self["WizardActions"] = HelpableActionMap(self, "WizardActions",
                        {
@@ -739,30 +705,39 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self.onLayoutFinish.append(self.layoutFinished)
                self.onClose.append(self.cleanup)
 
+
+       def queryWirelessDevice(self,iface):
+               try:
+                       from pythonwifi.iwlibs import Wireless
+                       import errno
+               except ImportError:
+                       return False
+               else:
+                       try:
+                               ifobj = Wireless(iface) # a Wireless NIC Object
+                               wlanresponse = ifobj.getAPaddr()
+                       except IOError, (error_no, error_str):
+                               if error_no in (errno.EOPNOTSUPP, errno.ENODEV, errno.EPERM):
+                                       return False
+                               else:
+                                       print "error: ",error_no,error_str
+                                       return True
+                       else:
+                               return True
+
        def ok(self):
                self.cleanup()
                if self["menulist"].getCurrent()[1] == 'edit':
-                       if self.iface in iNetwork.wlan_interfaces:
+                       if iNetwork.isWirelessInterface(self.iface):
                                try:
                                        from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
-                                       from pythonwifi.iwlibs import Wireless
                                except ImportError:
-                                       self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                                       self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                                else:
-                                       ifobj = Wireless(self.iface) # a Wireless NIC Object
-                                       try:
-                                               self.wlanresponse = ifobj.getAPaddr()
-                                       except IOError:
-                                               self.wlanresponse = ifobj.getStatistics()
-                                       if self.wlanresponse:
-                                               if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
-                                               else:
-                                                       # Display Wlan not available Message
-                                                       self.showErrorMessage()
+                                       if self.queryWirelessDevice(self.iface):
+                                               self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
                                        else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                                               self.showErrorMessage() # Display Wlan not available Message
                        else:
                                self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
                if self["menulist"].getCurrent()[1] == 'test':
@@ -772,45 +747,23 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                if self["menulist"].getCurrent()[1] == 'scanwlan':
                        try:
                                from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
-                               from pythonwifi.iwlibs import Wireless
                        except ImportError:
-                               self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                               self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                        else:
-                               ifobj = Wireless(self.iface) # a Wireless NIC Object
-                               try:
-                                       self.wlanresponse = ifobj.getAPaddr()
-                               except IOError:
-                                       self.wlanresponse = ifobj.getStatistics()
-                               if self.wlanresponse:
-                                       if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                               self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface)
-                                       else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                               if self.queryWirelessDevice(self.iface):
+                                       self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface)
                                else:
-                                       # Display Wlan not available Message
-                                       self.showErrorMessage()
+                                       self.showErrorMessage() # Display Wlan not available Message
                if self["menulist"].getCurrent()[1] == 'wlanstatus':
                        try:
                                from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
-                               from pythonwifi.iwlibs import Wireless
                        except ImportError:
-                               self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
-                       else:   
-                               ifobj = Wireless(self.iface) # a Wireless NIC Object
-                               try:
-                                       self.wlanresponse = ifobj.getAPaddr()
-                               except IOError:
-                                       self.wlanresponse = ifobj.getStatistics()
-                               if self.wlanresponse:
-                                       if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                               self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
-                                       else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                               self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
+                       else:
+                               if self.queryWirelessDevice(self.iface):
+                                       self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
                                else:
-                                       # Display Wlan not available Message
-                                       self.showErrorMessage()
+                                       self.showErrorMessage() # Display Wlan not available Message
                if self["menulist"].getCurrent()[1] == 'lanrestart':
                        self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
                if self["menulist"].getCurrent()[1] == 'openwizard':
@@ -866,7 +819,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
                
-               if self.iface in iNetwork.wlan_interfaces:
+               if iNetwork.isWirelessInterface(self.iface):
                        try:
                                from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        except:
@@ -916,27 +869,16 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
 
        def AdapterSetupClosed(self, *ret):
                if ret is not None and len(ret):
-                       if ret[0] == 'ok' and (self.iface in iNetwork.wlan_interfaces) and iNetwork.getAdapterAttribute(self.iface, "up") is True:
+                       if ret[0] == 'ok' and (iNetwork.isWirelessInterface(self.iface) and iNetwork.getAdapterAttribute(self.iface, "up") is True):
                                try:
                                        from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
-                                       from pythonwifi.iwlibs import Wireless
                                except ImportError:
-                                       self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
+                                       self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 )
                                else:   
-                                       ifobj = Wireless(self.iface) # a Wireless NIC Object
-                                       try:
-                                               self.wlanresponse = ifobj.getAPaddr()
-                                       except IOError:
-                                               self.wlanresponse = ifobj.getStatistics()
-                                       if self.wlanresponse:
-                                               if self.wlanresponse[0] not in (19,95): # 19 = 'No such device', 95 = 'Operation not supported'
-                                                       self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
-                                               else:
-                                                       # Display Wlan not available Message
-                                                       self.showErrorMessage()
+                                       if self.queryWirelessDevice(self.iface):
+                                               self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
                                        else:
-                                               # Display Wlan not available Message
-                                               self.showErrorMessage()
+                                               self.showErrorMessage() # Display Wlan not available Message
                        else:
                                self.updateStatusbar()
                else:
@@ -950,7 +892,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
 
        def WlanScanClosed(self,*ret):
                if ret[0] is not None:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1])
+                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0])
                else:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        iStatus.stopWlanConsole()
@@ -995,6 +937,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
        def cleanup(self):
                iNetwork.stopLinkStateConsole()
                iNetwork.stopDeactivateInterfaceConsole()
+               iNetwork.stopActivateInterfaceConsole()
                iNetwork.stopPingConsole()
                try:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
@@ -1008,7 +951,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self.LinkState = False
                                                self["statuspic"].setPixmapNum(1)
                                                self["statuspic"].show()
@@ -1376,7 +1319,7 @@ class NetworkAdapterTest(Screen):
 
        def LinkStatedataAvail(self,data):
                self.output = data.strip()
-               result = self.output.split('\n')
+               result = self.output.splitlines()
                pattern = re_compile("Link detected: yes")
                for item in result:
                        if re_search(pattern, item):
@@ -1430,7 +1373,7 @@ class NetworkAdapterTest(Screen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self["Network"].setForegroundColorNum(1)
                                                self["Network"].setText(_("disconnected"))
                                                self["NetworkInfo_Check"].setPixmapNum(1)
index 660fb2769a16b610e005c73b4916af537d534d2a..6e1b752dc57a2b9a6aabac18c524fce764d6c144 100644 (file)
@@ -108,10 +108,10 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen):
                        self.close(False)
 
        def abort(self):
-               if self.job.status in (self.job.FINISHED, self.job.FAILED):
-                       self.close(False)
-               if self["cancelable"].boolean == True:
+               if self.job.status == self.job.IN_PROGRESS and self["cancelable"].boolean == True:
                        self.job.cancel()
+               else:
+                       self.close(False)
 
        def performAfterEvent(self):
                self["config"].hide()
index 7846e4b85dc5aeb0165472e8005bdc9acb9dd85d..a8695439b6735b4cda3e698c7a7b0437ae357d75 100755 (executable)
@@ -1,12 +1,13 @@
-# -*- coding: iso-8859-1 -*-
+# -*- coding: UTF-8 -*-
+from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode
+from Screen import Screen
 from Components.Language import language
 from Components.ActionMap import ActionMap
+from Components.Sources.StaticText import StaticText
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 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_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
 
@@ -86,52 +87,127 @@ class VirtualKeyBoard(Screen):
                self.keys_list = []
                self.shiftkeys_list = []
                self.lang = language.getLanguage()
+               self.nextLang = None
+               self.shiftMode = False
+               self.text = text
+               self.selectedKey = 0
+               
+               self["country"] = StaticText("")
+               self["header"] = Label(title)
+               self["text"] = Label(self.text)
+               self["list"] = VirtualKeyBoardList([])
+               
+               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"],
+                       {
+                               "gotAsciiCode": self.keyGotAscii,
+                               "ok": self.okClicked,
+                               "cancel": self.exit,
+                               "left": self.left,
+                               "right": self.right,
+                               "up": self.up,
+                               "down": self.down,
+                               "red": self.backClicked,
+                               "green": self.ok,
+                               "yellow": self.switchLang,
+                               "deleteBackward": self.backClicked,
+                               "back": self.exit                               
+                       }, -2)
+               self.setLang()
+               self.onExecBegin.append(self.setKeyboardModeAscii)
+               self.onLayoutFinish.append(self.buildVirtualKeyBoard)
+       
+       def switchLang(self):
+               self.lang = self.nextLang
+               self.setLang()
+               self.buildVirtualKeyBoard()
+
+       def setLang(self):
                if self.lang == 'de_DE':
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]
-                       
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"?", u"\\", u"OK"]]
-                       
+                       self.nextLang = 'es_ES'
                elif self.lang == 'es_ES':
-                       #still missing keys (u"ùÙ")
+                       #still missing keys (u"ùÙ")
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"£", u"à", u"é", u"è", u"í", u"ì", u"ñ", u"ò", u"OK"]]
-                       
+                               [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"?", u"\\", u"À", u"É", u"È",  u"Í", u"Ì", u"Ñ", u"Ò", u"OK"]]
-                               
-               elif self.lang in ('sv_SE', 'fi_FI'):
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]]
+                       self.nextLang = 'fi_FI'
+               elif self.lang == 'fi_FI':
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
-                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
-                               [u"SHIFT", u"SPACE", u"@", u"ß", u"å", u"OK"]]
-                               
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK"]]
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
-
-                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]]
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ĺ", u"OK"]]
+                       self.nextLang = 'sv_SE'
+               elif self.lang == 'sv_SE':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Ĺ", u"OK"]]
+                       self.nextLang = 'sk_SK'
+               elif self.lang =='sk_SK':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ľ", u"@", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"ť", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"],
+                               [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", u"Č", u"Ť", u"Ň"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]]
+                       self.nextLang = 'cs_CZ'
+               elif self.lang == 'cs_CZ':
+                       self.keys_list = [
+                               [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
+                               [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ů", u"@", u"#"],
+                               [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", u"OK"]]
+                       self.shiftkeys_list = [
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"ť", u"*"],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"],
+                               [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
+                               [u"SHIFT", u"SPACE", u"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]]
+                       self.nextLang = 'en_EN'
                else:
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
@@ -139,36 +215,15 @@ class VirtualKeyBoard(Screen):
                                [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
-                       
                        self.shiftkeys_list = [
-                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
+                               [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
                                [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"],
                                [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
-               
-               self.shiftMode = False
-               self.text = text
-               self.selectedKey = 0
-               
-               self["header"] = Label(title)
-               self["text"] = Label(self.text)
-               self["list"] = VirtualKeyBoardList([])
-               
-               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"],
-                       {
-                               "ok": self.okClicked,
-                               "cancel": self.exit,
-                               "left": self.left,
-                               "right": self.right,
-                               "up": self.up,
-                               "down": self.down,
-                               "red": self.backClicked,
-                               "green": self.ok
-                       }, -2)
-               
-               self.onLayoutFinish.append(self.buildVirtualKeyBoard)
-       
+                       self.lang = 'en_EN'
+                       self.nextLang = 'de_DE'         
+               self["country"].setText(self.lang)
                self.max_key=47+len(self.keys_list[4])
 
        def buildVirtualKeyBoard(self, selectedKey=0):
@@ -192,7 +247,6 @@ class VirtualKeyBoard(Screen):
                                selectedKey -= 12
                
                self["list"].setList(list)
-
        
        def backClicked(self):
                self.text = self["text"].getText()[:-1]
@@ -219,7 +273,7 @@ class VirtualKeyBoard(Screen):
                if text is None:
                        return
 
-               text = text.encode("utf-8")
+               text = text.encode("UTF-8")
 
                if text == "EXIT":
                        self.close(None)
@@ -312,3 +366,33 @@ class VirtualKeyBoard(Screen):
 
        def showActiveKey(self):
                self.buildVirtualKeyBoard(self.selectedKey)
+
+       def inShiftKeyList(self,key):
+               for KeyList in self.shiftkeys_list:
+                       for char in KeyList:
+                               if char == key:
+                                       return True
+               return False
+
+       def keyGotAscii(self):
+               char = str(unichr(getPrevAsciiCode()).encode('utf-8'))
+               if self.inShiftKeyList(char):
+                       self.shiftMode = True
+                       list = self.shiftkeys_list
+               else:
+                       self.shiftMode = False
+                       list = self.keys_list   
+
+               if char == " ":
+                       char = "SPACE"
+
+               selkey = 0
+               for keylist in list:
+                       for key in keylist:
+                               if key == char:
+                                       self.selectedKey = selkey
+                                       self.okClicked()
+                                       self.showActiveKey()
+                                       return
+                               else:
+                                       selkey += 1
index 63a58ea43cb482a5d321c8f3e8bcd3c1d4146da6..252e174e91c5757cdc851e18be5d9800c86dddb2 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: UTF-8 -*-
 from enigma import eTimer
 from Components.Language import language
 
@@ -63,6 +63,17 @@ class NumericalTextInput:
                        self.mapping.append (u"pqrs7PQRS") # 7
                        self.mapping.append (u"tuv8TUV") # 8
                        self.mapping.append (u"wxyz9WXYZ") # 9
+               elif self.lang in ('cs_CZ', 'sk_SK'):
+                       self.mapping.append (u"0,?'+\"()@$!=&*") # 0
+                       self.mapping.append (u" 1.:/-_") # 1
+                       self.mapping.append (u"abc2áäčABCÁÄČ") # 2
+                       self.mapping.append (u"def3ďéěDEFĎÉĚ") # 3
+                       self.mapping.append (u"ghi4íGHIÍ") # 4
+                       self.mapping.append (u"jkl5ľĺJKLĽĹ") # 5
+                       self.mapping.append (u"mno6ňóöôMNOŇÓÖÔ") # 6
+                       self.mapping.append (u"pqrs7řŕšPQRSŘŔŠ") # 7
+                       self.mapping.append (u"tuv8ťúůüTUVŤÚŮÜ") # 8
+                       self.mapping.append (u"wxyz9ýžWXYZÝŽ") # 9
                else:
                        self.mapping.append (u"0,?!&@=*'+\"()$~") # 0
                        self.mapping.append (u" 1.:/-_") # 1
@@ -76,7 +87,8 @@ class NumericalTextInput:
                        self.mapping.append (u"wxyz9WXYZ") # 9
 
        def setUseableChars(self, useable):
-               self.useableChars = useable
+               self.useableChars = unicode(useable)
+               
 
        def getKey(self, num):
                cnt=0
index 3680e78003eb5ec6f176e0b5503a3597c5567c83..39f3ba7d469fa58dfc65c6d2d326e21a23485917 100755 (executable)
--- a/po/et.po
+++ b/po/et.po
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-11 13:10+0200\n"
+"PO-Revision-Date: 2011-04-26 15:47+0200\n"
 "Last-Translator: Arvo <arvo@softshark.ee>\n"
 "Language-Team: none\n"
+"Language: et\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: et\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.3\n"
 
@@ -371,7 +371,7 @@ msgid "A"
 msgstr "A"
 
 msgid "A BackToTheRoots-Skin .. but with Warp-8 speed."
-msgstr ""
+msgstr "BackToTheRoots välimus.. aga Warp-8 kiirusega."
 
 msgid "A BackToTheRoots-Skin .. or good old times."
 msgstr "BackToTheRoots välimus.. või vanad head ajad."
@@ -2592,7 +2592,7 @@ msgid "Estonian"
 msgstr "Eesti"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Etherneti võrguseade"
 
 #
 msgid "Eventview"
@@ -3040,7 +3040,7 @@ msgid "Help"
 msgstr "Abi"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Peidetud võrk"
 
 #
 msgid "Hidden network SSID"
index 38a44b3958526539d7d0701f7f9867036c9d8b82..8a5abf7c1ec80c7d3b29626b3ab6553c0fab1336 100755 (executable)
--- a/po/fi.po
+++ b/po/fi.po
@@ -4,13 +4,13 @@ msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-03-07 14:39+0200\n"
+"PO-Revision-Date: 2011-04-24 16:43+0200\n"
 "Last-Translator: Timo <timojarvenpaa@hotmail.com>\n"
 "Language-Team: none\n"
+"Language: fi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.3\n"
 "X-Poedit-Language: Finnish\n"
@@ -193,6 +193,8 @@ msgid ""
 "%d conflict(s) encountered when trying to add new timers:\n"
 "%s"
 msgstr ""
+"%d ristiriita(a) uusien ajastuksien lisäyksessä:\n"
+"%s"
 
 #
 #, python-format
@@ -232,7 +234,7 @@ msgstr "%s (%s)\n"
 
 #, python-format
 msgid "%s: %s at %s"
-msgstr ""
+msgstr "%s: %s at %s"
 
 #
 msgid "(ZAP)"
@@ -376,10 +378,10 @@ msgid "A"
 msgstr "A"
 
 msgid "A BackToTheRoots-Skin .. but with Warp-8 speed."
-msgstr ""
+msgstr "BackToTheRoots-teema .. mutta Warp-8 nopeudella."
 
 msgid "A BackToTheRoots-Skin .. or good old times."
-msgstr ""
+msgstr "BackToTheRoots-teema .. vanhat hyvät ajat."
 
 msgid "A basic ftp client"
 msgstr "FTP-asiakasohjelma"
@@ -400,7 +402,7 @@ msgid "A demo plugin for TPM usage."
 msgstr "Demo-lisäosa TPM:n käyttöön"
 
 msgid "A dreambox simulation from SG-Atlantis displays."
-msgstr ""
+msgstr "SG-Atlantis näyttöjen simulaatio Dreamboxille."
 
 #
 msgid ""
@@ -426,7 +428,7 @@ msgid "A graphical EPG interface"
 msgstr "Graafinen EPG"
 
 msgid "A graphical EPG interface and EPG tools manager"
-msgstr ""
+msgstr "Graafinen EPG ja EPG-työkalujen hallinta"
 
 msgid "A graphical EPG interface."
 msgstr "Graafinen EPG"
@@ -647,7 +649,7 @@ msgid "Add timer"
 msgstr "Lisää ajastus"
 
 msgid "Add timer as disabled on conflict"
-msgstr "Ajastusristiriidassa lisää ei käytössä oleva ajastus"
+msgstr "Ristiriitatapauksessa lisää ei käytössä oleva ajastus"
 
 #
 msgid "Add title"
@@ -885,7 +887,7 @@ msgid "Aspect Ratio"
 msgstr "Kuvasuhde"
 
 msgid "Aspect ratio"
-msgstr ""
+msgstr "Kuvasuhde"
 
 msgid "Assigning providers/services/caids to a CI module"
 msgstr "Määritä palvelutarjoajat/kanavat/CAId:t haluamaasi CI-moduuliin"
@@ -902,7 +904,7 @@ msgid "Audio Options..."
 msgstr "Äänivalinnat"
 
 msgid "Audio PID"
-msgstr ""
+msgstr "Ääni-PID"
 
 msgid "Audio Sync"
 msgstr "Äänen synkronointi"
@@ -967,13 +969,13 @@ msgstr ""
 "määrittämien ehtojen mukaisesti."
 
 msgid "AutoTimer was added successfully"
-msgstr ""
+msgstr "Automaattiajastuksen lisäys onnistui"
 
 msgid "AutoTimer was changed successfully"
-msgstr ""
+msgstr "Automaattiajastuksen muutos onnistui"
 
 msgid "AutoTimer was removed"
-msgstr ""
+msgstr "Automaattiajastus poistettu"
 
 #
 msgid "Automatic"
@@ -1072,10 +1074,10 @@ msgid "Back"
 msgstr "Takaisin"
 
 msgid "Back, lower USB Slot"
-msgstr ""
+msgstr "Takana, alempi USB-portti"
 
 msgid "Back, upper USB Slot"
-msgstr ""
+msgstr "Takana, ylempi USB-portti"
 
 #
 msgid "Background"
@@ -1170,7 +1172,7 @@ msgstr "Kirkkaus"
 msgid ""
 "Browse ORF and SAT1 Teletext independent from channel. This need I-net "
 "conection."
-msgstr ""
+msgstr "Selaa ORF ja SAT1 kanavien teksti-tv:tä internetin kautta."
 
 msgid "Browse for and connect to network shares"
 msgstr "Selaa ja yhdistä verkkojakoja"
@@ -1202,12 +1204,16 @@ msgid ""
 "By enabling this events will not be matched if they don't occur on certain "
 "dates."
 msgstr ""
+"Tällä valinnalla voit estää hakutulokset joita ei esitetä tiettyinä päivinä."
 
 msgid ""
 "By enabling this you will be notified about timer conflicts found during "
 "automated polling. There is no intelligence involved, so it might bother you "
 "about the same conflict over and over."
 msgstr ""
+"Valitsemalla tämän saat automaattihaun aikana ilmoituksen päällekkäisistä "
+"ajastuksista. Toiminnossa ei ole älyä, joten se saattaa ilmoittaa "
+"toistuvasti samoista päällekkäisyyksistä."
 
 #
 msgid ""
@@ -1464,10 +1470,10 @@ msgid "Close title selection"
 msgstr "Sulje otsikon valinta"
 
 msgid "Code rate HP"
-msgstr ""
+msgstr "Koodinopeus HP"
 
 msgid "Code rate LP"
-msgstr ""
+msgstr "Koodinopeus LP"
 
 #
 msgid "Collection name"
@@ -1646,7 +1652,7 @@ msgstr "Ajastusristiriidan takia ei voitu tallentaa %s"
 
 #, python-format
 msgid "Couldn't record due to invalid service %s"
-msgstr ""
+msgstr "Ei voitu tallentaa virheellisen kanavan takia %s"
 
 #
 msgid "Crashlog settings"
@@ -1823,7 +1829,7 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD Drive"
-msgstr ""
+msgstr "DVD-asema"
 
 #
 msgid "DVD File Browser"
@@ -2105,6 +2111,8 @@ msgid ""
 "Do you really want to delete %s\n"
 "%s?"
 msgstr ""
+"Oletko varma, että haluat poistaa %s\n"
+"%s?"
 
 #
 #, python-format
@@ -2310,10 +2318,10 @@ msgid "Dreambox software because updates are available."
 msgstr "Dreamboxin ohjelmistoa koska päivityksiä on saatavilla."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
-msgstr ""
+msgstr "Ajuri Ralink RT8070/RT3070/RT3370-pohjaisille WLAN USB-laitteille."
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Ajuri Realtek r8712u-pohjaisille WLAN USB-laitteille."
 
 msgid "Duration: "
 msgstr "Kesto: "
@@ -2655,7 +2663,7 @@ msgid "Estonian"
 msgstr "Viro"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Verkkokortti"
 
 #
 msgid "Eventview"
@@ -2850,7 +2858,7 @@ msgstr "Suomi"
 msgid ""
 "First day to match events. No event that begins before this date will be "
 "matched."
-msgstr ""
+msgstr "Ensimmäinen automaattihaun päivä. Tätä aikaisempia ohjelmia ei haeta."
 
 msgid "First generate your skin-style with the Ai.HD-Control plugin."
 msgstr "Luo ensin oma teema Ai.HD-control lisäosalla."
@@ -2874,6 +2882,8 @@ msgid ""
 "Found a total of %d matching Events.\n"
 "%d Timer were added and %d modified, %d conflicts encountered."
 msgstr ""
+"Löytyi %d hakuehtojen mukaista ohjelmaa.\n"
+"%d ajastusta lisättiin ja %d muutettiin, %d ajastusristiriitaa ilmeni."
 
 #, python-format
 msgid ""
@@ -2926,7 +2936,7 @@ msgid "FritzCall shows incoming calls to your Fritz!Box on your Dreambox."
 msgstr "FritzCall näyttää Fritz!Boxiin saapuvat puhelut Dreamboxissa."
 
 msgid "Front USB Slot"
-msgstr ""
+msgstr "Etupaneelin USB-portti"
 
 msgid "Frontend for /tmp/mmi.socket"
 msgstr "Käyttöliittymä /tmp/mmi.socketille"
@@ -3065,7 +3075,7 @@ msgid ""
 msgstr ""
 
 msgid "Guard interval"
-msgstr ""
+msgstr "Guard interval"
 
 msgid "Guess existing timer based on begin/end"
 msgstr "Arvaa olemassa oleva ajastus alku/loppuajan perusteella"
@@ -3100,7 +3110,7 @@ msgid "Help"
 msgstr "Ohje"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Piilotettu verkko"
 
 #
 msgid "Hidden network SSID"
@@ -3111,7 +3121,7 @@ msgid "Hidden networkname"
 msgstr "Piilotettu verkkonimi"
 
 msgid "Hierarchy info"
-msgstr ""
+msgstr "Hierarkia info"
 
 #
 msgid "High bitrate support"
@@ -3280,10 +3290,10 @@ msgid "Init"
 msgstr "Palauta CA-moduulin alkuasetukset"
 
 msgid "Initial Fast Forward speed"
-msgstr ""
+msgstr "Eteenpäinkelauksen aloitusnopeus"
 
 msgid "Initial Rewind speed"
-msgstr ""
+msgstr "Taaksepäinkelauksen aloitusnopeus"
 
 msgid "Initial location in new timers"
 msgstr "Uusien ajastuksien oletustallennushakemisto"
@@ -3382,7 +3392,7 @@ msgid "Internal LAN adapter."
 msgstr "Sisäinen verkkokortti."
 
 msgid "Internal USB Slot"
-msgstr ""
+msgstr "Sisäinen USB-portti"
 
 msgid "Internal firmware updater"
 msgstr "Edustaprosessorin ohjelmiston päivitysohjelma"
@@ -3579,6 +3589,7 @@ msgid ""
 "Last day to match events. Events have to begin before this date to be "
 "matched."
 msgstr ""
+"Viimeinen automaattiajastuksen päivä. Tämän jälkeisiä ohjelmia ei haeta."
 
 #
 msgid "Last speed"
@@ -3637,7 +3648,7 @@ msgid "Linked titles with a DVD menu"
 msgstr "Linkitetyt tallenteet ja DVD-valikko"
 
 msgid "List available networks"
-msgstr ""
+msgstr "Näytä verkot"
 
 #
 msgid "List of Storage Devices"
@@ -3771,7 +3782,7 @@ msgid "Manual Scan"
 msgstr "Manuaalihaku"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Manuaalinen määritys"
 
 #
 msgid "Manual transponder"
@@ -4035,7 +4046,7 @@ msgid "Multi EPG"
 msgstr "Kanavaopas"
 
 msgid "Multi-EPG bouquet selection"
-msgstr ""
+msgstr "Multi-EPG suosikkilistan valinta"
 
 msgid "Multimedia"
 msgstr "Multimedia"
@@ -4045,7 +4056,7 @@ msgid "Multiple service support"
 msgstr "Usean kanavan tuki"
 
 msgid "Multiplex"
-msgstr ""
+msgstr "Multipleksi"
 
 #
 msgid "Multisat"
@@ -4108,7 +4119,7 @@ msgid "NFS share"
 msgstr "NFS-jako"
 
 msgid "NIM"
-msgstr ""
+msgstr "NIM"
 
 #
 msgid "NOW"
@@ -4297,7 +4308,7 @@ msgid "NetworkWizard"
 msgstr "Verkkoavustaja"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Verkkonimi (SSID)"
 
 msgid "Never"
 msgstr "Ei koskaan"
@@ -4469,7 +4480,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "WLAN-verkkoja ei löytynyt! Päivitä uudestaan."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "WLAN-verkkoja ei löytynyt! Etsitään..."
 
 #
 msgid ""
@@ -4562,10 +4573,10 @@ msgid "Norwegian"
 msgstr "Norja"
 
 msgid "Not after"
-msgstr ""
+msgstr "Ei jälkeen"
 
 msgid "Not before"
-msgstr ""
+msgstr "Ei ennen"
 
 #
 #, python-format
@@ -4580,7 +4591,7 @@ msgid "Not fetching feed entries"
 msgstr "Feedejä ei noudeta"
 
 msgid "Not-Associated"
-msgstr ""
+msgstr "Ei assosioitu"
 
 #
 msgid ""
@@ -4626,7 +4637,7 @@ msgid "OK, remove some extensions"
 msgstr "OK, poista joitain laajennuksia"
 
 msgid "ONID"
-msgstr ""
+msgstr "ONID"
 
 #
 msgid "OSD Settings"
@@ -4688,7 +4699,7 @@ msgid "Optionally enter your name if you want to."
 msgstr "Jos haluat, lisää nimesi."
 
 msgid "Orbital position"
-msgstr ""
+msgstr "Sijainti"
 
 msgid "Outer Bound (+/-)"
 msgstr "Ääriraja (+/-)"
@@ -4710,14 +4721,14 @@ msgid "PAL"
 msgstr "PAL"
 
 msgid "PCR PID"
-msgstr ""
+msgstr "PCR PID"
 
 #
 msgid "PIDs"
 msgstr "PIDit"
 
 msgid "PMT PID"
-msgstr ""
+msgstr "PMT PID"
 
 #
 msgid "Package list update"
@@ -5184,7 +5195,7 @@ msgid "Portuguese"
 msgstr "Portugali"
 
 msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Tallennettujen ajastuksien paikka ajastusluettelossa"
 
 #
 msgid "Positioner"
@@ -5392,7 +5403,7 @@ msgid "RSS viewer"
 msgstr "RSS-lukija"
 
 msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "RT8070/RT3070/RT3370 USB WLAN-ajuri"
 
 msgid "Radio"
 msgstr "Radio"
@@ -5756,7 +5767,7 @@ msgid "Right"
 msgstr "Oikea"
 
 msgid "Roll-off"
-msgstr ""
+msgstr "Roll-off"
 
 #
 msgid "Rotor turning speed"
@@ -5793,7 +5804,7 @@ msgid "SD 30/60HZ Progressive Mode"
 msgstr "SD 30/60Hz lomittamaton tila"
 
 msgid "SID"
-msgstr ""
+msgstr "SID"
 
 msgid "SINGLE LAYER DVD"
 msgstr "SINGLE LAYER DVD"
@@ -6419,7 +6430,7 @@ msgid "Show infobar on skip forward/backward"
 msgstr "Näytä tietopalkki kelauksien/hyppyjen aikana"
 
 msgid "Show notification on conflicts"
-msgstr ""
+msgstr "Näytä ilmoitus ristiriidoista"
 
 #
 msgid "Show positioner movement"
@@ -6834,7 +6845,7 @@ msgid "Switchable tuner types:"
 msgstr "Vaihdettavat viritintyypit:"
 
 msgid "Symbol rate"
-msgstr ""
+msgstr "Symbol rate"
 
 #
 msgid "System"
@@ -6852,7 +6863,7 @@ msgid "TS file is too large for ISO9660 level 1!"
 msgstr "TS-tiedosto on liian suuri ISO9660 1-tasolle!"
 
 msgid "TSID"
-msgstr ""
+msgstr "TSID"
 
 msgid "TV Charts of all users"
 msgstr ""
@@ -6862,7 +6873,7 @@ msgid "TV System"
 msgstr "TV-järjestelmä"
 
 msgid "TXT PID"
-msgstr ""
+msgstr "TXT PID"
 
 #
 msgid "Table of content for collection"
@@ -7736,7 +7747,7 @@ msgid "Undo uninstall"
 msgstr "Kumoa as.poisto"
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "Salaamaton"
 
 msgid "UnhandledKey"
 msgstr "TuntematonNäppäin"
@@ -7762,7 +7773,7 @@ msgid "Universal LNB"
 msgstr "Universaali LNB"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Tuntematon"
 
 msgid "Unknown network adapter."
 msgstr "Tuntematon verkkosovitin"
@@ -7967,23 +7978,23 @@ msgid "VMGM (intro trailer)"
 msgstr "VMGM (intro trailer)"
 
 msgid "Vali-XD skin"
-msgstr ""
+msgstr "Vali-XD teema"
 
 msgid "Vali.HD.atlantis skin"
-msgstr ""
+msgstr "Vali.HD.atlantis teema"
 
 msgid "Vali.HD.nano skin"
-msgstr ""
+msgstr "Vali.HD.nano teema"
 
 msgid "Vali.HD.warp skin"
-msgstr ""
+msgstr "Vali.HD.warp teema"
 
 msgid ""
 "Verify your Dreambox authenticity by running the genuine dreambox plugin!"
 msgstr "Tarkista Dreamboxin aitous suorittamalla Aito Dreambox -lisäosa!"
 
 msgid "Verifying your internet connection..."
-msgstr ""
+msgstr "Tarkistetaan internet-yhteyttä"
 
 #
 msgid "Vertical"
@@ -8001,7 +8012,7 @@ msgid "Video Output"
 msgstr "Video-ulostulo"
 
 msgid "Video PID"
-msgstr ""
+msgstr "Video PID"
 
 #
 msgid "Video Setup"
@@ -8471,13 +8482,13 @@ msgid "Wireless Network State"
 msgstr "WLAN-verkon tila"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "WLAN-verkon asetukset"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "WLAN-verkon asetukset."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "WLAN-verkon tila"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
@@ -8901,7 +8912,7 @@ msgid "Your network configuration has been activated."
 msgstr "Verkkoasetukset on aktivoitu."
 
 msgid "Your network is not working. Please try again."
-msgstr ""
+msgstr "Verkkoyhteys ei toimi. Yritä uudestaan."
 
 msgid "Your network mount has been activated."
 msgstr "Verkkojako on aktivoitu."
@@ -9124,10 +9135,10 @@ msgid "assigned Services/Provider:"
 msgstr "Määritetyt kanavat/palveluntarjoajat:"
 
 msgid "at beginning"
-msgstr ""
+msgstr "alussa"
 
 msgid "at end"
-msgstr ""
+msgstr "lopussa"
 
 #
 #, python-format
@@ -9228,7 +9239,7 @@ msgid "complex"
 msgstr "monipuolinen"
 
 msgid "config changed."
-msgstr ""
+msgstr "asetuksia muutettu."
 
 #
 msgid "config menu"
@@ -9346,7 +9357,7 @@ msgid "done!"
 msgstr "tallennettu"
 
 msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "Ajuri Realtek USB WLAN-laitteille"
 
 #
 msgid "edit alternatives"
@@ -9628,7 +9639,7 @@ msgid "minutes"
 msgstr "minuuttia"
 
 msgid "missing parameter \"id\""
-msgstr ""
+msgstr "parametri \"id\" puuttuu"
 
 #
 msgid "month"
@@ -10166,7 +10177,7 @@ msgstr "viritin ei ole tuettu"
 
 #, python-format
 msgid "unable to find timer with id %i"
-msgstr ""
+msgstr "ei löydy ajastusta id %i"
 
 #
 msgid "unavailable"
@@ -10239,7 +10250,7 @@ msgid "whitelist"
 msgstr "hyväksytyt"
 
 msgid "wireless network interface"
-msgstr ""
+msgstr "WLAN-yhteys"
 
 #
 msgid "working"
index 609713cfeab87d3834a71317b1a7f637539aba01..8ca1f193316b788838e48f9c3b43c1aaf6f14151 100755 (executable)
--- a/po/is.po
+++ b/po/is.po
@@ -6,7 +6,7 @@ msgstr ""
 "Project-Id-Version: Icelandic translation v.1.44\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-20 20:09+0200\n"
+"PO-Revision-Date: 2011-05-04 19:44+0200\n"
 "Last-Translator: Baldur <bsveinsson@gmail.com>\n"
 "Language-Team: Polar Team/LT Team <baddi@oreind.is>\n"
 "Language: is\n"
@@ -1760,17 +1760,17 @@ msgid "Define a startup service for your Dreambox."
 msgstr "Velja þjónustu sem starta á við ræsingu."
 
 msgid "Deinterlacer mode for interlaced content"
-msgstr ""
+msgstr "Heilskönnunar hamur fyrir fléttuskannað efni"
 
 msgid "Deinterlacer mode for progressive content"
-msgstr ""
+msgstr "Fléttuskönnunar hamur fyrir heilskannað efni"
 
 #
 msgid "Delay"
 msgstr "Seinkun"
 
 msgid "Delay x seconds after service started"
-msgstr ""
+msgstr "Seinkun x sekúndur eftir að sýning byrjar"
 
 #
 msgid "Delete"
@@ -1812,7 +1812,7 @@ msgid "Deselect"
 msgstr "Ekki velja"
 
 msgid "Details for plugin: "
-msgstr ""
+msgstr "Upplýsingar um íforrit:"
 
 #
 msgid "Detected HDD:"
@@ -1858,7 +1858,7 @@ msgid "Dir:"
 msgstr "Mappa:"
 
 msgid "Direct playback of Youtube videos"
-msgstr ""
+msgstr "Bein afspilun af Youtube myndböndum"
 
 #
 msgid "Direct playback of linked titles without menu"
@@ -1931,10 +1931,10 @@ msgid "Display search results by:"
 msgstr "Sýna útkomu leitar sem:"
 
 msgid "Display your photos on the TV"
-msgstr ""
+msgstr "Sýna myndirnar þínar á skjánum"
 
 msgid "Displays movie information from the InternetMovieDatabase"
-msgstr ""
+msgstr "Sýna upplýsingar um bíómyndina frá gagnagrunni af internetinu"
 
 #, python-format
 msgid ""
@@ -1957,6 +1957,8 @@ msgid ""
 "Do you really want to delete %s\n"
 "%s?"
 msgstr ""
+"Viltu örugglega eyða %s\n"
+"%s?"
 
 #
 #, python-format
@@ -2114,7 +2116,7 @@ msgid "Download Video"
 msgstr "Haða niður bíómyndum"
 
 msgid "Download files from Rapidshare"
-msgstr ""
+msgstr "Hlaða niður skrám frá Rapidshare"
 
 msgid "Download location"
 msgstr "Niðurhals staður"
@@ -2144,9 +2146,10 @@ msgstr "Hugbúnaður uppfærslur eru tiltækar fyrir Dreamboxið."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
 msgstr ""
+"Rekill fyrir þráðlaust USB netkort byggt á Ralink RT8070/RT3070/RT3370."
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Rekill fyrir þráðlaust USB netkort byggt á  Realtek r8712u."
 
 msgid "Duration: "
 msgstr "Lengd:"
@@ -2175,6 +2178,10 @@ msgid ""
 "(in standby mode without any running recordings) to perform updates of the "
 "epg information on these channels."
 msgstr ""
+"EPGHressing mun skipta yfir á rás sem að notandi stillir ef að móttakarinn "
+"er ónotaður\n"
+"(í biðstöðu ef upptaka er ekki í gangi) til að uppfæra EPG upplýsingar á "
+"þessum rásum."
 
 #, python-format
 msgid "ERROR - failed to scan (%s)!"
@@ -2229,10 +2236,10 @@ msgid "Edit settings"
 msgstr "Breyta stillingum"
 
 msgid "Edit tags of recorded movies"
-msgstr ""
+msgstr "Breyta merki á uppteknum bíómyndum"
 
 msgid "Edit tags of recorded movies."
-msgstr ""
+msgstr "Breyta merki á uppteknum bíómyndum."
 
 #
 msgid "Edit the Nameserver configuration of your Dreambox.\n"
@@ -2263,7 +2270,7 @@ msgid "Electronic Program Guide"
 msgstr "Rafrænn dagskrárstjóri (EPG)"
 
 msgid "Emailclient is an IMAP4 e-mail viewer for the Dreambox."
-msgstr ""
+msgstr "Emailclient er IMAP4 póst skoðari fyrir Dreambox."
 
 #
 msgid "Enable"
@@ -2273,23 +2280,23 @@ msgid "Enable /media"
 msgstr "Virkja /media"
 
 msgid "Enable 1080p24 Mode"
-msgstr ""
+msgstr "Virkja 1080p24 ham"
 
 msgid "Enable 1080p25 Mode"
-msgstr ""
+msgstr "Virkja 1080p25 ham"
 
 msgid "Enable 1080p30 Mode"
-msgstr ""
+msgstr "Virkja 1080p30 ham"
 
 #
 msgid "Enable 5V for active antenna"
 msgstr "Kveikja á 5V fyrir loftnet með magnara"
 
 msgid "Enable 720p24 Mode"
-msgstr ""
+msgstr "Virkja 720p24 ham"
 
 msgid "Enable Autoresolution"
-msgstr ""
+msgstr "Virkja sjálfvirka upplausn"
 
 msgid "Enable Cleanup Wizard?"
 msgstr "Virkja hreinsi ráðgjafa?"
@@ -2388,6 +2395,9 @@ msgid ""
 "Enigma2 Plugin to play AVI/DIVX/WMV/etc. videos from PC on your Dreambox. "
 "Needs a running VLC from www.videolan.org on your pc."
 msgstr ""
+"Enigma2 íforrit til að spila AVI/DIVX/WMV og fleiri myndir frá PC tölvu á "
+"Dreamboxinu. Þarf að hafa VLC spilara keyrandi frá www.videolan.org á "
+"tölvunni þinni."
 
 #
 msgid ""
@@ -2470,7 +2480,7 @@ msgid "Estonian"
 msgstr "Eistneska"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet netkort"
 
 #
 msgid "Eventview"
@@ -2493,7 +2503,7 @@ msgid "Execute \"after event\" during timespan"
 msgstr "Keyra \"eftir atriði\" innan tímamarka"
 
 msgid "Execute TuxboxPlugins"
-msgstr ""
+msgstr "Keyra Tuxbox Íforrit"
 
 #
 msgid "Execution Progress:"
@@ -2560,6 +2570,8 @@ msgid ""
 "FTPBrowser allows uploading and downloading files between your Dreambox and "
 "a server using the file transfer protocol."
 msgstr ""
+"FTPBrowser gerir mögulegt að hlaða upp og niður skrám frá Dreamboxinu þínu "
+"til vefþjóns með því að nota FTP staðal."
 
 #
 msgid "Factory reset"
@@ -2655,9 +2667,11 @@ msgid ""
 "First day to match events. No event that begins before this date will be "
 "matched."
 msgstr ""
+"Fyrsti dagur til að skoða atriði. Engin atriði sem að passa fyrir þessa "
+"dagsetningu verða skoðuð."
 
 msgid "First generate your skin-style with the Ai.HD-Control plugin."
-msgstr ""
+msgstr "Fyrst þarf að búa til skinn stíl þinn með Ai.HD-Control íforritinu."
 
 #
 msgid "Flash"
@@ -2679,6 +2693,8 @@ msgid ""
 "Found a total of %d matching Events.\n"
 "%d Timer were added and %d modified, %d conflicts encountered."
 msgstr ""
+"Fann samtals %d passandi atriði.\n"
+"%d atriðum var bætt við tímastillingar og %d var breytt. %d skaranir fundust."
 
 #, python-format
 msgid ""
@@ -2730,10 +2746,10 @@ msgid "FritzCall shows incoming calls to your Fritz!Box on your Dreambox."
 msgstr ""
 
 msgid "Front USB Slot"
-msgstr ""
+msgstr "USB tengi að framan"
 
 msgid "Frontend for /tmp/mmi.socket"
-msgstr ""
+msgstr "Framhluti fyrir /tmp/mmi.socket"
 
 #
 #, python-format
@@ -2753,14 +2769,16 @@ msgstr ""
 "Viltu endurræsa gluggakerfi núna?"
 
 msgid "GUI that allows user to change the ftp- / telnet password."
-msgstr ""
+msgstr "Forrit til að breyta ftp og telnet aðgangsorði."
 
 msgid ""
 "GUI that allows user to change the ftp-/telnet-password of the Dreambox."
 msgstr ""
+"Forrit sem að gerir mögulegt að breyta ftp og telnet aðgangsorði á "
+"Dreamboxinu."
 
 msgid "GUI to change the ftp and telnet-password"
-msgstr ""
+msgstr "Forrit til að breyta ftp og telnet aðgangsorði"
 
 msgid "Gaming"
 msgstr "Leikir"
@@ -2784,7 +2802,7 @@ msgid "General PCM delay (ms)"
 msgstr "Heildar PCM seinkun (ms)"
 
 msgid "Generates and Shows TV Charts of all users having this plugin installed"
-msgstr ""
+msgstr "Býr til og sýnir mynd af öllum notendum sem hafa þetta íforrit uppsett"
 
 #
 msgid "Genre"
@@ -2797,23 +2815,23 @@ msgid "Genuine Dreambox validation failed!"
 msgstr "Staðfesting á að Dreamboxið er ósvikið tókst ekki!"
 
 msgid "Genuine Dreambox verification"
-msgstr ""
+msgstr "Staðfesting á því að þetta sé orginal Dreambox"
 
 #
 msgid "German"
 msgstr "Þýska"
 
 msgid "German storm information"
-msgstr ""
+msgstr "Þýsk stormviðvörun"
 
 msgid "German traffic information"
-msgstr ""
+msgstr "Umferðar upplýsingar fyrir Þýskaland"
 
 msgid "Germany"
 msgstr "Þýskaland"
 
 msgid "Get AudioCD info from CDDB and CD-Text"
-msgstr ""
+msgstr "Ná í AudioCD upplýsingum af CDDB og CD-Texta"
 
 msgid "Get latest experimental image"
 msgstr "Ná í nýjustu prufuútgáfu stýrikerfis"
@@ -2835,12 +2853,14 @@ msgid "Goto position"
 msgstr "Fara á staðsetningu"
 
 msgid "GraphMultiEPG shows a graphical timeline EPG"
-msgstr ""
+msgstr "GraphMultiEPG sýnir myndræna framsetningu á EPG"
 
 msgid ""
 "GraphMultiEPG shows a graphical timeline EPG.\n"
 "Shows a nice overview of all running und upcoming tv shows."
 msgstr ""
+"GraphMultiEPG sýnir myndræna framsetningu á EPG.\n"
+"Sýnir á skemmtilegan hátt atriði í gangi og komandi atriði."
 
 #
 msgid "Graphical Multi EPG"
@@ -2862,18 +2882,21 @@ msgid ""
 "to a PC running a growl, snarl or syslog compatible client or directly to an "
 "iPhone using prowl."
 msgstr ""
+"Growlee gerir mögulegt að Dreamboxið sendi upplýsingar eins og 'Upptaka "
+"hófst' til tölvu sem keyrir growl, snarl eða syslog samhæft tæki eða beint í "
+"iPhone sem notar prowl."
 
 msgid "Guard interval"
-msgstr ""
+msgstr "Guard interval"
 
 msgid "Guess existing timer based on begin/end"
 msgstr "Giska á núverandi tímastillingu grundvallað á byrjun og enda"
 
 msgid "HD Interlace Mode"
-msgstr ""
+msgstr "HD fléttuskönnun"
 
 msgid "HD Progressive Mode"
-msgstr ""
+msgstr "HD heildarskönnun"
 
 msgid "HD videos"
 msgstr "HD myndir"
@@ -2900,7 +2923,7 @@ msgid "Help"
 msgstr "Hjálp"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Falið netkerfi"
 
 #
 msgid "Hidden network SSID"
@@ -2910,7 +2933,7 @@ msgid "Hidden networkname"
 msgstr "Falið nafn á netkerfi"
 
 msgid "Hierarchy info"
-msgstr ""
+msgstr "Hierarchy upplýsingar"
 
 #
 msgid "High bitrate support"
@@ -2930,7 +2953,7 @@ msgid "Horizontal"
 msgstr "Lárétt"
 
 msgid "Hotplugging for removeable devices"
-msgstr ""
+msgstr "Tenging með tæki í gangi fyrir aftengjanleg tæki"
 
 #
 msgid "How many minutes do you want to record?"
@@ -2952,7 +2975,7 @@ msgid "Hungarian"
 msgstr "Ungverska"
 
 msgid "IMAP4 e-mail viewer for the Dreambox"
-msgstr ""
+msgstr "IMAP4 póstskoðari fyrir Dreambox"
 
 #
 msgid "IP Address"
@@ -2962,7 +2985,7 @@ msgid "IP:"
 msgstr "IP:"
 
 msgid "IRC Client for Enigma2"
-msgstr ""
+msgstr "IRC notandi fyrir Enigma2"
 
 #
 msgid "ISO file is too large for this filesystem!"
@@ -2981,6 +3004,8 @@ msgid ""
 "If this is enabled an existing timer will also be considered recording an "
 "event if it records at least 80%% of the it."
 msgstr ""
+"Ef þetta er virkt þá munu tímastilltar upptökur líka verða skoðaðar sem "
+"upptaka í gangi ef það tekur upp allavega 80%% af efninu."
 
 #
 msgid ""
@@ -3075,10 +3100,10 @@ msgid "Init"
 msgstr "Stilli"
 
 msgid "Initial Fast Forward speed"
-msgstr ""
+msgstr "Byrjunar hraði hraðspólunar áfram"
 
 msgid "Initial Rewind speed"
-msgstr ""
+msgstr "Byrjunar hraði hraðspólunar afturábak"
 
 msgid "Initial location in new timers"
 msgstr "Sjálfgefin staður í nýjum tímastillingum"
@@ -3173,10 +3198,10 @@ msgid "Internal LAN adapter."
 msgstr "Innbyggt netkort."
 
 msgid "Internal USB Slot"
-msgstr ""
+msgstr "Innra USB tengi"
 
 msgid "Internal firmware updater"
-msgstr ""
+msgstr "Innri hugbúnaðar uppfærsla"
 
 #
 msgid "Invalid Location"
@@ -3240,10 +3265,10 @@ msgid "Italian"
 msgstr "Ítalska"
 
 msgid "Italian Weather forecast on Dreambox"
-msgstr ""
+msgstr "Ítölsk veðurspá á Dreamboxið"
 
 msgid "Italian Weather forecast on Dreambox from www.google.it."
-msgstr ""
+msgstr "Ítölsk veðurspá á Dreamboxið frá www.google.it"
 
 msgid "Italy"
 msgstr "Ítalía"
@@ -3261,49 +3286,49 @@ msgid "Just Scale"
 msgstr "Bara full mynd"
 
 msgid "Kerni's BrushedAlu-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni BrushedAlu-HD"
 
 msgid "Kerni's DreamMM-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, DreamMM-HD"
 
 msgid "Kerni's Elgato-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, Elgato-HD"
 
 msgid "Kerni's SWAIN skin"
-msgstr ""
+msgstr "Skinn frá Kerni, SWAIN"
 
 msgid "Kerni's SWAIN-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, SWAIN-HD"
 
 msgid "Kerni's UltraViolet skin"
-msgstr ""
+msgstr "Skinn frá Kerni, UltraViolet"
 
 msgid "Kerni's YADS-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, YADS-HD"
 
 msgid "Kerni's dTV-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, dTV-HD"
 
 msgid "Kerni's dTV-HD-Reloaded skin"
-msgstr ""
+msgstr "Skinn frá Kerni, dTV-HD-Reloaded"
 
 msgid "Kerni's dmm-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, dmm-HD"
 
 msgid "Kerni's dreamTV-HD skin"
-msgstr ""
+msgstr "Skinn frá Kerni, dreamTV-HD"
 
 msgid "Kerni's simple skin"
-msgstr ""
+msgstr "Skinn frá Kerni, simple"
 
 msgid "Kerni-HD1 skin"
-msgstr ""
+msgstr "Kerni-HD1 skinn"
 
 msgid "Kerni-HD1R2 skin"
-msgstr ""
+msgstr "Kerni-HD1R2 skinn"
 
 msgid "Kernis HD1 skin"
-msgstr ""
+msgstr "Kerni HD1 skinn"
 
 #, python-format
 msgid "Key %(Key)s successfully set to %(delay)i ms"
@@ -3330,7 +3355,7 @@ msgid "Keymap"
 msgstr "Lyklaborðsstilling"
 
 msgid "KiddyTimer allows to control your kids's daily tv usage."
-msgstr ""
+msgstr "KiddyTimer stjórnar því hve mikið barnið horfir á sjónvaroið á dag."
 
 #
 msgid "LAN Adapter"
@@ -3371,6 +3396,8 @@ msgid ""
 "Last day to match events. Events have to begin before this date to be "
 "matched."
 msgstr ""
+"Síðasti dagur til að athuga með atriði. Atriði sem passa fyrir þessa "
+"dagsetningu verða notuð."
 
 #
 msgid "Last speed"
@@ -3429,16 +3456,16 @@ msgid "Linked titles with a DVD menu"
 msgstr "Tengdir titlar við DVD valmynd"
 
 msgid "List available networks"
-msgstr ""
+msgstr "Sýna netkerfi í boði"
 
 msgid "List of Storage Devices"
 msgstr "Listi geymslu tækja"
 
 msgid "Listen and record internet radio"
-msgstr ""
+msgstr "Hlusta á og taka upp netútvarp"
 
 msgid "Listen and record shoutcast internet radio on your Dreambox."
-msgstr ""
+msgstr "Hlusta á og taka upp shoutcast netútvarp á Dreamboxið."
 
 #
 msgid "Lithuanian"
@@ -3532,13 +3559,13 @@ msgid "Manage extensions"
 msgstr "Sýsla með íforrit"
 
 msgid "Manage local files"
-msgstr ""
+msgstr "Halda utanum skrár á móttakara"
 
 msgid "Manage logos to display at boot time or while in radio mode."
-msgstr ""
+msgstr "Sýsla með myndir við ræsingu og í útvarps ham."
 
 msgid "Manage logos to display at boottime"
-msgstr ""
+msgstr "Sýsla með myndir við ræsingu"
 
 msgid "Manage network shares"
 msgstr "Sýsla með net tengingar"
@@ -3546,6 +3573,7 @@ msgstr "Sýsla með net tengingar"
 msgid ""
 "Manage your music files in a database, play it with Merlin Music Player."
 msgstr ""
+"Sýsla með tónlist í gagnagrunni og spila hana með Merlin tónlistar spilara."
 
 msgid "Manage your network shares..."
 msgstr "Sýsla með net tengingar..."
@@ -3559,7 +3587,7 @@ msgid "Manual Scan"
 msgstr "Handvirk leitun"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Handvirk stilling"
 
 #
 msgid "Manual transponder"
@@ -3613,12 +3641,17 @@ msgid ""
 "MediaScanner scans devices for playable media files and displays a menu with "
 "possible actions like viewing pictures or playing movies."
 msgstr ""
+"MediaLeit leitar að öllum spilanlegum skrám, sýnir valmynd með mögulegur "
+"aðgerðum svo sem að sýna myndir eða spila bíómyndir."
 
 msgid ""
 "Mediaplayer plays your favorite music and videos.\n"
 "Play all your favorite music and video files, organize them in playlists, "
 "view cover and album information."
 msgstr ""
+"Spilari spilar uppáhaldstónlistina og bíómyndirnar þínar.\n"
+"Spilar alla uppáhalds tónlist og bíóyndir, búa til spilunarlista, skoða "
+"albúmin og upplýsingar um plöturnar."
 
 #
 msgid "Medium is not a writeable DVD!"
@@ -3633,7 +3666,7 @@ msgid "Menu"
 msgstr "Valmynd"
 
 msgid "Merlin Music Player and iDream"
-msgstr ""
+msgstr "Merlin spilarin og iDream"
 
 #
 msgid "Message"
@@ -3790,10 +3823,10 @@ msgid "Move west"
 msgstr "Færa vestur"
 
 msgid "Movie information from the Online Film Datenbank (German)."
-msgstr ""
+msgstr "Bíómynda upplýsingar frá gagnabanka af netinu (Þýskur)."
 
 msgid "Movie informations from the Online Film Datenbank"
-msgstr ""
+msgstr "Bíómynda upplýsingar frá gagnabanka af netinu"
 
 msgid "Movie location"
 msgstr "Staðsetning bíómynda"
@@ -3801,11 +3834,14 @@ msgstr "Staðsetning bíómynda"
 msgid ""
 "MovieTagger adds tags to recorded movies to sort a large list of movies."
 msgstr ""
+"MovieTagger bætir við merki við uppteknar bíómyndir til að flokka myndirnar."
 
 msgid ""
 "Movielist Preview creates screenshots of recordings and shows them inside "
 "the movielist."
 msgstr ""
+"Forskoðum bíómynda býr til kyrrmynd af uppteknum bíómyndum og sýnir þær í "
+"bíómynda listanum."
 
 #
 msgid "Movielist menu"
@@ -3816,7 +3852,7 @@ msgid "Multi EPG"
 msgstr "Mörg EPG"
 
 msgid "Multi-EPG bouquet selection"
-msgstr ""
+msgstr "Mörg-EPG rásavanda val"
 
 #
 msgid "Multimedia"
@@ -3872,6 +3908,8 @@ msgid ""
 "NCID Client shows incoming voice calls promoted by any NCID server (e.g. "
 "Vodafone Easybox) on your Dreambox."
 msgstr ""
+"NCID þjónn sýnir ef að síminn hringir frá einhverjum NCID vefþjón (s.s. "
+"Vodafone Easybox) á Dreamboxinu."
 
 #
 msgid "NEXT"
@@ -3888,7 +3926,7 @@ msgid "NFS share"
 msgstr "NFS samnýting"
 
 msgid "NIM"
-msgstr ""
+msgstr "NIM"
 
 #
 msgid "NOW"
@@ -3920,103 +3958,103 @@ msgid "Nameserver settings"
 msgstr "Uppsetning nafnaþjóns"
 
 msgid "Namespace"
-msgstr ""
+msgstr "Nafnabox"
 
 msgid "Nemesis BlackBox Skin"
-msgstr ""
+msgstr "Nemesis BlackBox Skinn"
 
 msgid "Nemesis BlackBox Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis BlackBox Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Blueline Single Skin"
-msgstr ""
+msgstr "Nemesis Blueline Single Skinn"
 
 msgid "Nemesis Blueline Single Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Blueline Single Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Blueline Skin"
-msgstr ""
+msgstr "Nemesis Blueline Skinn"
 
 msgid "Nemesis Blueline Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Blueline Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Blueline.Extended Skin"
-msgstr ""
+msgstr "Nemesis Blueline.Extended Skinn"
 
 msgid "Nemesis Blueline.Extended Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Blueline.Extended Skinn fyrir Dreamboxið"
 
 msgid "Nemesis ChromeLine Cobolt Skin"
-msgstr ""
+msgstr "Nemesis ChromeLine Cobolt Skinn"
 
 msgid "Nemesis ChromeLine Cobolt Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis ChromeLine Cobolt Skinn fyrir Dreamboxið"
 
 msgid "Nemesis ChromeLine Skin"
-msgstr ""
+msgstr "Nemesis ChromeLine Skinn"
 
 msgid "Nemesis ChromeLine Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis ChromeLine Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Flatline Blue Skin"
-msgstr ""
+msgstr "Nemesis Flatline Blue Skinn"
 
 msgid "Nemesis Flatline Blue Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Flatline Blue Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Flatline Skin"
-msgstr ""
+msgstr "Nemesis Flatline Skinn"
 
 msgid "Nemesis Flatline Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Flatline Skinn fyrir Dreamboxið"
 
 msgid "Nemesis GlassLine Skin"
-msgstr ""
+msgstr "Nemesis GlassLine Skinn"
 
 msgid "Nemesis GlassLine Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis GlassLine Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greenline Extended Skin"
-msgstr ""
+msgstr "Nemesis Greenline Extended Skinn"
 
 msgid "Nemesis Greenline Extended Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greenline Extended Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greenline Single Skin"
-msgstr ""
+msgstr "Nemesis Greenline Single Skinn"
 
 msgid "Nemesis Greenline Single Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greenline Single Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greenline Skin"
-msgstr ""
+msgstr "Nemesis Greenline Skinn"
 
 msgid "Nemesis Greenline Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greenline Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greyline Extended Skin"
-msgstr ""
+msgstr "Nemesis Greyline Extended Skinn"
 
 msgid "Nemesis Greyline Extended Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greyline Extended Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greyline Single Skin"
-msgstr ""
+msgstr "Nemesis Greyline Single Skinn"
 
 msgid "Nemesis Greyline Single Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greyline Single Skinn fyrir Dreamboxið"
 
 msgid "Nemesis Greyline Skin"
-msgstr ""
+msgstr "Nemesis Greyline Skinn"
 
 msgid "Nemesis Greyline Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis Greyline Skinn fyrir Dreamboxið"
 
 msgid "Nemesis ShadowLine Skin"
-msgstr ""
+msgstr "Nemesis ShadowLine Skinn"
 
 msgid "Nemesis ShadowLine Skin for the Dreambox"
-msgstr ""
+msgstr "Nemesis ShadowLine Skinn fyrir Dreamboxið"
 
 #
 msgid "Netmask"
@@ -4075,7 +4113,7 @@ msgid "NetworkWizard"
 msgstr "Nettengi ráðgjafi"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Netkerfis nafn (SSID)"
 
 msgid "Never"
 msgstr "Aldrei"
@@ -4085,7 +4123,7 @@ msgid "New"
 msgstr "Nýtt"
 
 msgid "New PIN"
-msgstr ""
+msgstr "Nýtt PIN númer"
 
 msgid "New Zealand"
 msgstr "Nýja Sjáland"
@@ -4236,7 +4274,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "Það fannst ekkert þráðlaust net! Reyndu aftur."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Ekkert þráðlaust net fannst! Leita..."
 
 #
 msgid ""
@@ -4327,10 +4365,10 @@ msgid "Norwegian"
 msgstr "Norska"
 
 msgid "Not after"
-msgstr ""
+msgstr "Ekki eftir"
 
 msgid "Not before"
-msgstr ""
+msgstr "Ekki fyrir"
 
 #
 #, python-format
@@ -4345,7 +4383,7 @@ msgid "Not fetching feed entries"
 msgstr "Sæki ekki fæði rásir"
 
 msgid "Not-Associated"
-msgstr ""
+msgstr "Ekki tengt"
 
 #
 msgid ""
@@ -4387,7 +4425,7 @@ msgid "OK, remove some extensions"
 msgstr "OK, eyða íforritum"
 
 msgid "ONID"
-msgstr ""
+msgstr "ONID"
 
 #
 msgid "OSD Settings"
@@ -4449,13 +4487,13 @@ msgid "Optionally enter your name if you want to."
 msgstr "Settu inn nafn þitt ef að þú vilt."
 
 msgid "Orbital position"
-msgstr ""
+msgstr "Staðsetning hnattar"
 
 msgid "Outer Bound (+/-)"
 msgstr "Ytri mörk (+/-)"
 
 msgid "Overlay for scrolling bars"
-msgstr ""
+msgstr "Yfirlag fyrir rúllandi borða"
 
 msgid "Override found with alternative service"
 msgstr "Önnur rás fannst í stað hunsaðar rásar"
@@ -4471,14 +4509,14 @@ msgid "PAL"
 msgstr "PAL"
 
 msgid "PCR PID"
-msgstr ""
+msgstr "PCR PID"
 
 #
 msgid "PIDs"
 msgstr "PIDs"
 
 msgid "PMT PID"
-msgstr ""
+msgstr "PMT PID"
 
 #
 msgid "Package list update"
@@ -4528,6 +4566,8 @@ msgid ""
 "Partnerbox allows editing a remote Dreambox's record timers and stream its "
 "TV  program."
 msgstr ""
+"Partnerbox gerir mögulegt að breyta tímastilltum upptökum á öðru Dreamboxi "
+"og streyma myndum þaðan."
 
 #
 msgid "Password"
@@ -4541,10 +4581,10 @@ msgid "People & Blogs"
 msgstr "Fólk & blogg"
 
 msgid "PermanentClock shows the clock permanently on the screen."
-msgstr ""
+msgstr "PermanentClock sýnir klukkuna alltaf á skjánum."
 
 msgid "Persian"
-msgstr ""
+msgstr "Persneska"
 
 msgid "Pets & Animals"
 msgstr "Dýralíf"
@@ -4594,10 +4634,10 @@ msgid "Play YouTube movies"
 msgstr "Spila YouTube myndbönd"
 
 msgid "Play music from Last.fm"
-msgstr ""
+msgstr "Spila tónlist frá Last.FM"
 
 msgid "Play music from Last.fm."
-msgstr ""
+msgstr "Spila tónlist frá Last.FM."
 
 msgid "Play next video"
 msgstr "Spila næstu bíómynd"
@@ -4609,19 +4649,19 @@ msgid "Play video again"
 msgstr "Spila bíómynd aftur"
 
 msgid "Play videos from PC on your Dreambox"
-msgstr ""
+msgstr "Spila bíómyndir frá tölvu á Dreamboxinu"
 
 msgid "Playback of Youtube through a PC"
-msgstr ""
+msgstr "Spila Youtube myndbönd í gegnum tölvuna þína"
 
 msgid "Player for Network and Internet Streams"
-msgstr ""
+msgstr "Spilari fyrir Netkerfi og Internet strauma"
 
 msgid "Player for Network and Internet Streams."
-msgstr ""
+msgstr "Spilari fyrir Netkerfi og Internet strauma."
 
 msgid "Plays your favorite music and videos"
-msgstr ""
+msgstr "Spilar uppáhalds tónlistina og bíómyndirnar þínar"
 
 #
 msgid "Please Reboot"
@@ -4637,6 +4677,8 @@ msgid ""
 "Please be aware, that anyone can disable the parental control, if you have "
 "not set a PIN."
 msgstr ""
+"Hafðu í huga að ef ekkert PIN númer er sett þá er hægt að slökkva á "
+"foreldralæsingunni."
 
 msgid "Please change recording endtime"
 msgstr "Vinsamlega breytið lokatíma upptöku"
@@ -4703,7 +4745,7 @@ msgid "Please enter the correct pin code"
 msgstr "Sláðu inn réttan kóða"
 
 msgid "Please enter the old PIN code"
-msgstr ""
+msgstr "Sláðu inn gamla PIN kóðann þinn"
 
 #
 msgid "Please enter your email address here:"
@@ -4900,7 +4942,7 @@ msgid "Plugins"
 msgstr "Íforrit"
 
 msgid "PodCast streams podcasts to your Dreambox."
-msgstr ""
+msgstr "PodCast strauma hlaðvarp í Dreamboxið þitt."
 
 msgid "Poland"
 msgstr "Pólland"
@@ -4940,7 +4982,7 @@ msgid "Portuguese"
 msgstr "Portúgalska"
 
 msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Staður lokinna tímastilltra upptaka í listanum"
 
 #
 msgid "Positioner"
@@ -4963,7 +5005,7 @@ msgid "Positioner storage"
 msgstr "Vistun í staðsetjjara"
 
 msgid "PositionerSetup helps you installing a motorized dish"
-msgstr ""
+msgstr "Staðsetjara uppsetning hjálpar við að setja upp mótordrifinn disk"
 
 msgid ""
 "Power state to change to after recordings. Select \"standard\" to not change "
@@ -5074,10 +5116,10 @@ msgid "Preview menu"
 msgstr "Forskoða valmynd"
 
 msgid "Preview screenshots of running tv shows"
-msgstr ""
+msgstr "Forsýning frá sjónvarpsrásum í gangi"
 
 msgid "Preview screenshots of running tv shows."
-msgstr ""
+msgstr "Forsýning frá sjónvarpsrásum í gangi."
 
 #
 msgid "Primary DNS"
@@ -5123,7 +5165,7 @@ msgid "Python frontend for /tmp/mmi.socket"
 msgstr "Python framendi fyrir /tmp/mmi.socket"
 
 msgid "Python frontend for /tmp/mmi.socket."
-msgstr ""
+msgstr "Python hluti fyrir /tmp/mmi.socket."
 
 #
 msgid "Quick"
@@ -5146,10 +5188,10 @@ msgid "RGB"
 msgstr "RGB"
 
 msgid "RSS viewer"
-msgstr ""
+msgstr "RSS skoðari"
 
 msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "Þráðlaust USB netkort byggt á RT8070/RT3070/RT3370"
 
 #
 msgid "Radio"
@@ -5211,10 +5253,10 @@ msgid "Reception Settings"
 msgstr "Stilling móttöku"
 
 msgid "Reconstruct .ap and .sc files"
-msgstr ""
+msgstr "Byggja upp .ap og .sc skrár"
 
 msgid "Reconstruct missing or corrupt .ap and .sc files of recorded movies."
-msgstr ""
+msgstr "Lagfæra eða búa til .ap og .sc skrár af uppteknum bíómyndum."
 
 #
 msgid "Record"
@@ -5255,10 +5297,10 @@ msgid "Recordings always have priority"
 msgstr "Upptaka hefur alltaf forgang"
 
 msgid "Redirect notifications to Growl, Snarl, Prowl or Syslog"
-msgstr ""
+msgstr "Áframsenda tilkynningar til Growl, Snarl, Prowl eða Syslog"
 
 msgid "Reenter new PIN"
-msgstr ""
+msgstr "Sláðu aftur inn nýtt PIN"
 
 #
 msgid "Refresh Rate"
@@ -5282,13 +5324,13 @@ msgid "Reload Black-/Whitelists"
 msgstr "Endurhlaða svart-/hvítlista"
 
 msgid "Remember service PIN"
-msgstr ""
+msgstr "Muna eftir PIN númeri rásar"
 
 msgid "Remember service PIN cancel"
-msgstr ""
+msgstr "Hætta að muna eftir PIN númeri rásar"
 
 msgid "Remote timer and remote TV player"
-msgstr ""
+msgstr "Fjarstýrð tímastillt upptaka og afspilun"
 
 #
 msgid "Remove"
@@ -5353,7 +5395,7 @@ msgid "Rename crashlogs"
 msgstr "Endurnefna hrunskýrslu"
 
 msgid "Rename your movies"
-msgstr ""
+msgstr "Endurnefna bíómyndirnar þínar"
 
 #
 msgid "Repeat"
@@ -5372,10 +5414,10 @@ msgid "Repeats"
 msgstr "Endurtekningar"
 
 msgid "Replace the minute input for the seek functions with a seekbar."
-msgstr ""
+msgstr "Breyta mínútu fjölda sem stökkva á við afspilun bíómynda."
 
 msgid "Replace the rewind  input with a seekbar"
-msgstr ""
+msgstr "Breyta mínútufjölda sem stökkva á til baka við afspilun"
 
 msgid "Require description to be unique"
 msgstr "Þarf lýsingu til að vera einstakt"
@@ -5460,13 +5502,13 @@ msgid "Restore system settings"
 msgstr "Setja inn kerfis stillingar"
 
 msgid "Restore your Dreambox with a USB stick"
-msgstr ""
+msgstr "Endurforrita Dreamboxið með USB staut"
 
 msgid "Restrict \"after event\" to a certain timespan?"
 msgstr "Binda \"eftir atriði\" að ákveðnu tímabili?"
 
 msgid "Restrict to events on certain dates"
-msgstr ""
+msgstr "Takmarka atriði við ákveðnar dagsetningar"
 
 #
 msgid "Resume from last position"
@@ -5519,7 +5561,7 @@ msgid "Running"
 msgstr "Keyri"
 
 msgid "Running in testmode"
-msgstr ""
+msgstr "Keyri í prufu ham"
 
 msgid "Russia"
 msgstr "Rûssland"
@@ -5533,19 +5575,19 @@ msgid "S-Video"
 msgstr "S-Video"
 
 msgid "SD 25/50HZ Interlace Mode"
-msgstr ""
+msgstr "SD 25/50HZ Fléttunar hamur"
 
 msgid "SD 25/50HZ Progressive Mode"
-msgstr ""
+msgstr "SD 25/50HZ Heilskönnunarhamur"
 
 msgid "SD 30/60HZ Interlace Mode"
-msgstr ""
+msgstr "SD 30/60HZ Fléttunar hamur"
 
 msgid "SD 30/60HZ Progressive Mode"
-msgstr ""
+msgstr "SD 30/60HZ Heilskönnunar hamur"
 
 msgid "SID"
-msgstr ""
+msgstr "SID"
 
 msgid "SINGLE LAYER DVD"
 msgstr "SINGLE LAYER DVD"
@@ -5571,9 +5613,16 @@ msgid ""
 "You probably don't need this plugin and should use the regular Web Interface "
 "for Enigma2 instead."
 msgstr ""
+"SVDPR er staðall hannaður fyrir VDR hugbúnað tl að stjórna móttökurum úr "
+"fjarlægð.\n"
+"Þetta ífforit styður hluta af SVDPR og ræsir sjálfvirkt með sjálfgefnum "
+"gildum.\n"
+"\n"
+"Þú þarft þetta sennilega ekki en ættir að nota venjulega Vef viðmótið til að "
+"stjórna Enigma2."
 
 msgid "SVDRP server for Enigma2"
-msgstr ""
+msgstr "SVDRP þjónn fyrir Enigma2"
 
 #
 msgid "Sat"
@@ -5596,6 +5645,7 @@ msgstr "Gervihnatta búnaður"
 
 msgid "SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings"
 msgstr ""
+"SatelliteEquipmentControl gerir mögulegt að fínstilla DiSEqC stillingar"
 
 #
 msgid "Satellites"
@@ -5606,7 +5656,7 @@ msgid "Satfinder"
 msgstr "Gervihnattaleit"
 
 msgid "Satfinder helps you to align your dish"
-msgstr ""
+msgstr "Satfinder hjálpar við að stilla diskinn þinn"
 
 msgid "Sats"
 msgstr "Gervihn."
@@ -5743,7 +5793,7 @@ msgid "Scan band US SUPER"
 msgstr "Leita á bandi US SUPER"
 
 msgid "Scan devices for playable media files"
-msgstr ""
+msgstr "Leita að spilanlegum skrám"
 
 msgid "Scan range"
 msgstr "Leitar svið"
@@ -5754,7 +5804,7 @@ msgid ""
 msgstr "Leita að þráðlausu neti og tengjast þeim með völdu netkorti.\n"
 
 msgid "Scans default lamedbs sorted by satellite"
-msgstr ""
+msgstr "Leita að rásum á hverjum gervihnetti fyrir sig"
 
 #
 msgid ""
@@ -5790,7 +5840,7 @@ msgid "Search strictness"
 msgstr "Leitar nákvæmni"
 
 msgid "Search through the EPG"
-msgstr ""
+msgstr "Leita í EPG"
 
 msgid "Search type"
 msgstr "Gerð leitar"
@@ -5816,7 +5866,7 @@ msgid "Security service not running."
 msgstr "Öryggis rás ekki í keyrslu."
 
 msgid "See service-epg (and PiP) from other channels in an infobar."
-msgstr ""
+msgstr "Sjá rása-EPG (og PIP) af öðrum rásum í upplýsingaborða"
 
 #
 msgid "Seek"
@@ -6002,7 +6052,7 @@ msgstr ""
 "(SID fannst ekki í PAT)"
 
 msgid "Service reference"
-msgstr ""
+msgstr "Rása upplýsingar"
 
 #
 msgid "Service scan"
@@ -6025,7 +6075,7 @@ msgid "Services"
 msgstr "Rásir"
 
 msgid "Set Bitstream/PCM audio delays"
-msgstr ""
+msgstr "Stilla Bitastraum/PCM hljóð seinkun"
 
 msgid "Set End Time"
 msgstr "Stilla loka tíma"
@@ -6057,7 +6107,7 @@ msgid "Set this NO to disable this AutoTimer."
 msgstr "Stilla á NEI til að hætta með sjálfvirka tímastillingu"
 
 msgid "Sets your Dreambox into Deep-Standby"
-msgstr ""
+msgstr "Setja Dreamboxið þitt í djúpan svefn"
 
 msgid "Setting key canceled"
 msgstr "Hætt við að stilla takka"
@@ -6131,7 +6181,7 @@ msgid "Show in extension menu"
 msgstr "Sýna við viðbótar valmynd"
 
 msgid "Show info screen"
-msgstr ""
+msgstr "Sýna upplýsingar"
 
 #
 msgid "Show infobar on channel change"
@@ -6146,7 +6196,7 @@ msgid "Show infobar on skip forward/backward"
 msgstr "Sýna upplýsingaborða við stökk fram eða aftur"
 
 msgid "Show notification on conflicts"
-msgstr ""
+msgstr "Sýna viðvaranir um árekstra"
 
 #
 msgid "Show positioner movement"
@@ -6164,24 +6214,26 @@ msgid "Show the tv player..."
 msgstr "Sýna sjónvarpsspilara..."
 
 msgid "Show webcam pictures on your TV Screen"
-msgstr ""
+msgstr "Sýna frá vefmyndavélum á sjómvarpsskjánum"
 
 msgid ""
 "Shows a list containing the zapping-history and allows user to zap to the "
 "entries or to modify them."
 msgstr ""
+"Sýnir lista sem inniheldur stökk sögu og gerir mögulegt að stökkva beint í "
+"listanum eða breyta honum."
 
 msgid "Shows a list of recent zap entries"
-msgstr ""
+msgstr "Sýnir lista af rásum sem síðast hefur verið horft á"
 
 msgid "Shows average bitrate of video and audio"
-msgstr ""
+msgstr "Sýnir meðaltals bitahraða á mynd og hljóði"
 
 msgid "Shows statistics of watched services"
-msgstr ""
+msgstr "Sýnir tölfræði rása sem horft er á"
 
 msgid "Shows the clock permanently on the screen"
-msgstr ""
+msgstr "Sýnir klukku alltaf á skjánum"
 
 #
 msgid "Shows the state of your wireless LAN connection.\n"
@@ -6215,14 +6267,14 @@ msgid "Simple"
 msgstr "Einfalt"
 
 msgid "Simple IRC GroupChat client for e2 #dm8000-vip channel"
-msgstr ""
+msgstr "Einfalt IRC hópspjalls forrit fyrir e2 #dm8000-vip rásina"
 
 #
 msgid "Simple titleset (compatibility for legacy players)"
 msgstr "Einföld valmynd (virkar fyrir flesta spilara)"
 
 msgid "SimpleRSS allows reading RSS newsfeeds on your Dreambox."
-msgstr ""
+msgstr "EinfaltRSS gerir mögulegt að lesa RSS fréttastrauma á Dreamboxinu."
 
 #
 msgid "Single"
@@ -6249,7 +6301,7 @@ msgid "Skin"
 msgstr "Skinn"
 
 msgid "SkinSelector shows a menu with selectable skins"
-msgstr ""
+msgstr "Skinn val sýnir valmynd með veljanlegum skinnum"
 
 #
 msgid "Skins"
@@ -6307,7 +6359,7 @@ msgid "Software update"
 msgstr "Hugbúnaðar uppfærsla"
 
 msgid "SoftwareManager manages your Dreambox software"
-msgstr ""
+msgstr "Hugbúnaðarumsýsla stjórnar hugbúnaði á Dreamboxinu"
 
 msgid "Softwaremanager information"
 msgstr "Upplýsingar hugbúnaðar umsýslu"
@@ -6410,7 +6462,7 @@ msgid "Start Webinterface"
 msgstr "Ræsa vefviðmót"
 
 msgid "Start easy your multimedia plugins with the PVR-button."
-msgstr ""
+msgstr "Ræsir auðveldlega margmiðlunar íforrit með PVR takka."
 
 #
 msgid "Start from the beginning"
@@ -6439,7 +6491,7 @@ msgid "Std. Feeds"
 msgstr "Std. fæðirásir"
 
 msgid "Step by step network configuration"
-msgstr ""
+msgstr "Netkerfis stillingar stig af stigi"
 
 #
 msgid "Step east"
@@ -6501,10 +6553,10 @@ msgid "Stored position"
 msgstr "Vistuð staða"
 
 msgid "Stream podcasts"
-msgstr ""
+msgstr "Hlaðvarps straumar"
 
 msgid "Streaming modules for the orf.at iptv web page."
-msgstr ""
+msgstr "Strauma spilun fyrir orf.at iptv vefsíður."
 
 #
 msgid "Subservice list..."
@@ -6531,7 +6583,7 @@ msgid "Sunday"
 msgstr "Sunnudagur"
 
 msgid "Support \"Fast Scan\"?"
-msgstr ""
+msgstr "Styður \"Hrað skönnun\"?"
 
 #
 msgid "Swap Services"
@@ -6556,7 +6608,7 @@ msgid "Switchable tuner types:"
 msgstr "Gerðir umskiptanlegra móttakara:"
 
 msgid "Symbol rate"
-msgstr ""
+msgstr "Bitahraði"
 
 #
 msgid "System"
@@ -6578,17 +6630,17 @@ msgid "TS file is too large for ISO9660 level 1!"
 msgstr "TS skrá er of stór fyrir ISO9660 level 1!"
 
 msgid "TSID"
-msgstr ""
+msgstr "TSID"
 
 msgid "TV Charts of all users"
-msgstr ""
+msgstr "Mynd af öllum notendum"
 
 #
 msgid "TV System"
 msgstr "Sjónvarps kerfi"
 
 msgid "TXT PID"
-msgstr ""
+msgstr "TXT PID"
 
 #
 msgid "Table of content for collection"
@@ -6619,7 +6671,7 @@ msgid "Temperature and Fan control"
 msgstr "Hiti og viftu stillingar"
 
 msgid "Temperature-dependent fan control."
-msgstr ""
+msgstr "Hitastýrð hraðastýring fyrir viftu."
 
 #
 msgid "Terrestrial"
@@ -6650,7 +6702,7 @@ msgid "Test the network configuration of your Dreambox.\n"
 msgstr "Prófa stillingar netkorts í Dreamboxinu.\n"
 
 msgid "Test your DiSEqC equipment"
-msgstr ""
+msgstr "Prófa DiSEqC búnaðinn þinn"
 
 #
 msgid "Test-Messagebox?"
@@ -6685,6 +6737,8 @@ msgid ""
 "has dropped below a definable threshold.You can use this wizard to remove "
 "some plugins."
 msgstr ""
+"Hreinsiálfurinn lætur vita þegar innraminni móttakarans er komið niður fyrir "
+"stillanleg mörk. Þú getur notað álfinn til að taka út íforrit."
 
 msgid ""
 "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to "
@@ -6702,10 +6756,17 @@ msgid ""
 "The box automatically wakes up for recordings or at the end of the sleep "
 "time. You therefore don't have to wait until it is on again."
 msgstr ""
+"Elektro Save íforritið setur móttakarann í djúp svefn (Deep Standby) á "
+"ákveðnum tímum.\n"
+"Það gerist bara ef að móttakarinn er í biðstöðu og það er engin upptaka á "
+"dagskrá næstu 20 mínúturnar.\n"
+"Móttakarinn vaknar sjálfvirkt fyrir forritaðar upptökur og við enda svefn "
+"tímans."
 
 msgid ""
 "The Hotplug plugin notifies your system of newly added or removed devices."
 msgstr ""
+"Hotplug íforritið lætur vita ef að búið sé að tengja eða aftengja tæki."
 
 msgid ""
 "The NetworkWizard extension is not installed!\n"
@@ -6715,31 +6776,40 @@ msgstr ""
 "Vinsamlega settu hann inn."
 
 msgid "The PIN code has been changed successfully."
-msgstr ""
+msgstr "Það tókst að breyta PIN kóðanum."
 
 msgid "The PIN codes you entered are different."
-msgstr ""
+msgstr "PIN númerin sem að þú slóst inn eru ekki eins."
 
 msgid ""
 "The PicturePlayer displays your photos on the TV.\n"
 "You can view them as thumbnails or slideshow."
 msgstr ""
+"Myndaskoðarinn sýnir myndirnar þínar á sjónvarpsskjánum.\n"
+"Þú getur skoðað þær sem smámyndir eða sem myndasýningu."
 
 msgid ""
 "The Satfinder plugin helps you to align your dish.\n"
 "It shows you informations about signal rate and errors."
 msgstr ""
+"Satfinder íforritið hjálpar við að stilla diskinn þinn.\n"
+"Það sýnir upplýsingar um styrk merkis og villur."
 
 msgid ""
 "The SkinSelector shows a menu with selectable skins.\n"
 "It's now easy to change the look and feel of your Dreambox."
 msgstr ""
+"Skinnval sýnir valmynd með veljanlegur skinnum.\n"
+"Núna er einfalt að breyta úliti valmynda í Dreamboxinu."
 
 msgid ""
 "The SoftwareManager manages your Dreambox software.\n"
 "It's easy to update your receiver's software, install or remove plugins or "
 "even backup and restore your system settings."
 msgstr ""
+"Hugbúnaðarstjórinn stjórnar hugbúnaði Dreamboxins þíns.\n"
+"Það er einfalt að uppfæra hugbúnað móttakarans, setja inn eða taka út "
+"íforrit eða jafnvel taka afrit eða setja inn stillingar þínar."
 
 msgid ""
 "The Softwaremanagement extension is not installed!\n"
@@ -6773,18 +6843,22 @@ msgstr ""
 msgid ""
 "The VideoEnhancement plugin provides advanced video enhancement settings."
 msgstr ""
+"VideoEnhancement íforritið gerir mögulegt að gera viðbótar stillingar á "
+"myndinni."
 
 msgid ""
 "The VideoTune helps fine-tuning your tv display.\n"
 "You can control brightness and contrast of your tv."
 msgstr ""
+"VideoTune hjálpar við að fínstilla sjónvarpsmyndina.\n"
+"Þú getur stillt birtu og skerpu á sjónvarpinu þínu."
 
 msgid "The Videomode plugin provides advanced video mode settings."
-msgstr ""
+msgstr "Videomode íforritið gerir mögulegar ítarlegri stillingar á myndinni."
 
 msgid ""
 "The WirelessLan plugin helps you configuring your WLAN network interface."
-msgstr ""
+msgstr "Þráðlaust net íforritið hjálpar við að stilla WLAN netkortið þitt."
 
 #
 msgid "The backup failed. Please choose a different backup location."
@@ -6878,7 +6952,7 @@ msgid "The results have been written to %s."
 msgstr "Útkoman hefur verið skrifuð á %s."
 
 msgid "The skin is in KingSize-definition 1024x576"
-msgstr ""
+msgstr "Skinnið er í stærðinni 1024x576"
 
 #
 msgid "The sleep timer has been activated."
@@ -7057,6 +7131,8 @@ msgid ""
 "This system tool is internally used to program the hardware with firmware "
 "updates."
 msgstr ""
+"Þetta kerfis tól er ætlað til að forrita vélbúnaðinn með hugbúnaðar "
+"uppfærslum."
 
 #
 msgid ""
@@ -7241,7 +7317,7 @@ msgid "Titleset mode"
 msgstr "Titla stillingar"
 
 msgid "To be used as simple downloading application by other Plugins."
-msgstr ""
+msgstr "MediaDownloader er einfalt niðurhleðslu forrit sem önnur íforrit nota."
 
 msgid ""
 "To update your Dreambox firmware, please follow these steps:\n"
@@ -7289,7 +7365,7 @@ msgid "Track"
 msgstr "Spor"
 
 msgid "TrafficInfo shows german traffic information."
-msgstr ""
+msgstr "TrafficInfo sýnir upplýsingar um umferð í Þýskalandi."
 
 #
 msgid "Translation"
@@ -7430,7 +7506,7 @@ msgid "Undo uninstall"
 msgstr "Hætta við að hætta við"
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "Opin rás"
 
 msgid "UnhandledKey"
 msgstr "Ónotaður"
@@ -7458,7 +7534,7 @@ msgid "Universal LNB"
 msgstr "Venjulegt LNB"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Óþekkt"
 
 msgid "Unknown network adapter."
 msgstr "Óþekkt netkort."
@@ -7481,7 +7557,7 @@ msgid "Unsupported"
 msgstr "Ekki stutt"
 
 msgid "UnwetterInfo shows german storm information."
-msgstr ""
+msgstr "Unwetterinfo sýnir þýskar stormviðvaranir"
 
 #
 msgid "Update"
@@ -7566,7 +7642,7 @@ msgid "Use a gateway"
 msgstr "Nota beini"
 
 msgid "Use and control multiple Dreamboxes with different RCs."
-msgstr ""
+msgstr "Stjórna mörgum Dreamboxum með mismunandi fjarstýringum."
 
 #
 msgid "Use power measurement"
@@ -7644,16 +7720,16 @@ msgid "VMGM (intro trailer)"
 msgstr "VMGM (mynd sýnishorn)"
 
 msgid "Vali-XD skin"
-msgstr ""
+msgstr "Vali-XD skinn"
 
 msgid "Vali.HD.atlantis skin"
-msgstr ""
+msgstr "Vali.HD.atlantis skinn"
 
 msgid "Vali.HD.nano skin"
-msgstr ""
+msgstr "Vali.HD.nano skinn"
 
 msgid "Vali.HD.warp skin"
-msgstr ""
+msgstr "Vali.HD.warp skinn"
 
 msgid ""
 "Verify your Dreambox authenticity by running the genuine dreambox plugin!"
@@ -7662,7 +7738,7 @@ msgstr ""
 "íforrit!"
 
 msgid "Verifying your internet connection..."
-msgstr ""
+msgstr "Athuga með internet tenginguna..."
 
 #
 msgid "Vertical"
@@ -7680,7 +7756,7 @@ msgid "Video Output"
 msgstr "Mynd útgangur"
 
 msgid "Video PID"
-msgstr ""
+msgstr "Video PID"
 
 #
 msgid "Video Setup"
@@ -7721,13 +7797,13 @@ msgid "Video mode selection."
 msgstr "Mynd hams stilling."
 
 msgid "Video streaming from the orf.at web page"
-msgstr ""
+msgstr "Mynd straumur frá orf.at vefsíðunni"
 
 msgid "VideoEnhancement provides advanced video enhancement settings"
-msgstr ""
+msgstr "VideoEnhancement gerir mögulegar ítarlegri stillingar á myndinni"
 
 msgid "VideoTune helps fine-tuning your tv display"
-msgstr ""
+msgstr "VideoTune hjálpar við að fínstilla sjónvarps myndina"
 
 msgid "Videobrowser exit behavior:"
 msgstr "Myndvafra hegðun þegar hætt er:"
@@ -7737,7 +7813,7 @@ msgid "Videoenhancement Setup"
 msgstr "Mynd endurbóta uppsetning"
 
 msgid "Videomode provides advanced video mode settings"
-msgstr ""
+msgstr "Videomode gerir mögulega ítarlegri mynd stillingar"
 
 msgid "Videoplayer stop/exit behavior:"
 msgstr "Myndspilara hegðun við að stoppa/hætta"
@@ -7746,10 +7822,10 @@ msgid "View Count"
 msgstr "Skoða fjölda"
 
 msgid "View Google maps"
-msgstr ""
+msgstr "Skoða Google maps"
 
 msgid "View Google maps with your Dreambox."
-msgstr ""
+msgstr "Skoða Google maps með dreamboxinu þinu."
 
 #
 msgid "View Movies..."
@@ -7849,12 +7925,14 @@ msgid "Virtual KeyBoard"
 msgstr "Sýndar lyklaborð"
 
 msgid "Visualization for the European Installation Bus"
-msgstr ""
+msgstr "Myndræn framsetning fyrir Instabus (EIB)"
 
 msgid ""
 "Visualize and control your lights, dimmers, blinds, thermostats etc. through "
 "EIB/KNX. (linknx server required)"
 msgstr ""
+"Sýnir og stjórnar ljósum, dimmerum, gardíum, hitastillum og fleiru með EIB/"
+"KNX. (linknx þjónn þarf)"
 
 #
 msgid "Voltage mode"
@@ -7906,16 +7984,16 @@ msgid "Warn if free space drops below (kB):"
 msgstr "Vara við ef að laust minni fer niður fyrir (kB):"
 
 msgid "Watch streams from ZDF Mediathek"
-msgstr ""
+msgstr "Horfa á myndstrauma frá ZDF Mediathek"
 
 msgid "WeatherPlugin shows weatherforecasts on your Dreambox."
-msgstr ""
+msgstr "Veður íforritið sýnir veðurspá á Dreamboxinu þínu."
 
 msgid "Weatherforecast on your Dreambox"
-msgstr ""
+msgstr "Veðurspá á Dreamboxið"
 
 msgid "Web-Bouquet-Editor for PC"
-msgstr ""
+msgstr "Rása ritill fyrir vefinn"
 
 msgid "Webinterface"
 msgstr "Vefviðmót"
@@ -8090,6 +8168,8 @@ msgid ""
 "When supporting \"Fast Scan\" the service type is ignored. You don't need to "
 "enable this unless your Image supports \"Fast Scan\" and you are using it."
 msgstr ""
+"Þegar \"Hrað leit\" er studd þá er gerð rásar ekki skoðuð. Þú þarft ekki að "
+"virkja þetta nema stýrikerfið styðji \"Hrað leit\" og þú ert að nota hana."
 
 msgid ""
 "When this option is enabled the AutoTimer won't match events where another "
@@ -8134,18 +8214,20 @@ msgid "Wireless Network State"
 msgstr "Staða þráðlausa nets"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "Uppsetning á þráðlausu neti"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "Uppsetning á þráðlausu neti."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "Staða þráðlausa nets"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
 "channels)."
 msgstr ""
+"Með AntiScrollbar þá getur þú lokað fyrir fréttta borða sem sendir eru út "
+"svo sem á fréttarásum."
 
 msgid ""
 "With DVDBurn you can make compilations of records from your Dreambox hard "
@@ -8154,38 +8236,58 @@ msgid ""
 "a standard-compliant DVD that can be played on conventinal DVD players.\n"
 "HDTV recordings can only be burned in proprietary dreambox format."
 msgstr ""
+"Með DVD brennara getur þú búið til ISO skrár úr upptökum af harða diskinum "
+"þínum.\n"
+"Þú getur líka búið til valmyndir og svo brennt skrána á DVD diska sem hægt "
+"er svo að spila á venjulegur DVD spilurum.\n"
+"HDTV staðal er bara hægt að brenna á diska í Dreambox formi."
 
 msgid "With EPGSearch you can search through the EPG and create timers."
 msgstr ""
+"Með EPG leit getur þú leitað í EPG dagskránni og búið til tímastilltar "
+"upptökur."
 
 msgid "With Genuine Dreambox you can verify the authenticity of your Dreambox."
 msgstr ""
+"Með Genuine Dreambox getur þú athugað hvort að þú sért með ekta Dreambox."
 
 msgid ""
 "With IMDb you can download and displays movie information (rating, poster, "
 "cast, synopsis etc.) about the selected event."
 msgstr ""
+"Með IMDB getur þú hlaðið niður og skoðað upplýsingar af netinu um valið "
+"atriði."
 
 msgid "With MovieRetitle you can rename your movies."
-msgstr ""
+msgstr "Með MovieRetitle getur þú endurnefnt bíómyndirnar þínar."
 
 msgid ""
 "With MyTube you can play YouTube videos directly on your TV without a PC."
 msgstr ""
+"Með MyTube getur þú spilað YouTube myndbönd beint á sjónvarpinu þínu án "
+"tölvu."
 
 msgid "With WebcamViewer you can watch webcams on your TV Screen."
 msgstr ""
+"Með Vefmyndavéla skoðara getur þú horft á vefmyndavélar á sjónvarpsskjánum "
+"þínum."
 
 msgid ""
 "With Werbezapper you can bridge commercials by creating short timers\n"
 "(between 1 and 9 minutes long) which will automatically zap back to the "
 "original channel after execution."
 msgstr ""
+"Með Werbezapper getur þú sleppt auglýsingum auðveldlega með því að búa til "
+"stuttar tímastillingar\n"
+"(á milli 1 og 9 mínútur) sem stekkur sjálfvirkt aftur á sömu rás eftir "
+"keyrslu."
 
 msgid ""
 "With YouTubePlayer you can watch YouTube-Videos on the Dreambox.\n"
 "This plugin requires a PC with the VLC program running."
 msgstr ""
+"Með YouTubeSpilara getur þú spilað YouTube myndbönd á Dreamboxinu.\n"
+"Þetta íforrit þarf PC með keyrandi VLC spilara."
 
 msgid ""
 "With the CommonInterfaceAssignment plugin it is possible to use differentCI "
@@ -8193,41 +8295,59 @@ msgid ""
 "each of them.\n"
 "This allows watching a scrambled service while recording another one."
 msgstr ""
+"Með CommonInterfaceAssignment íforritinu þá er mögulegt að nota mismunandi "
+"CI einingar í Dreamboxinu og tengja ákveðin sendanda eða rása caid við hvert "
+"CI.\n"
+"Þetta gerir mögulegt að horfa á ruglaða rás og taka upp aðra ruglaða um leið."
 
 msgid ""
 "With the CrashlogAutoSubmit plugin it is possible to automaticallymail "
 "crashlogs found on your hard drive to Dream Multimedia."
 msgstr ""
+"Með CrashlogAutoSubmit íforritinu er hægt að senda sjálfvirkt villuskýrslur "
+"sem finnast á harða diskinum til Dream Multimedia."
 
 msgid ""
 "With the DefaultServicesScanner plugin you can scan default lamedbs sorted "
 "by satellite with a connected dish positioner."
 msgstr ""
+"Með DefaultServicesScanner íforritinu getur þú leitað eftir gervihnöttum ef "
+"þú ert með mótordrifinn disk."
 
 msgid ""
 "With the DiseqcTester plugin you can test your satellite equipment for "
 "DiSEqC compatibility and errors."
 msgstr ""
+"Með DiseqcTester iforritinu getur þú prufað DiSEqC virkni gervihnatta "
+"búnaðar þíns."
 
 msgid ""
 "With the NFIFlash plugin it is possible to prepare a USB stick with an "
 "Dreambox image.\n"
 "It is then possible to flash your Dreambox with the image on that stick."
 msgstr ""
+"Með NFIFlash í forritinu er hægt að útbúa USB staut með Dreambox "
+"stýrikerfi.\n"
+"Það er svo hægt að forrita Dreamboxið þitt með því stýrikerfi."
 
 msgid ""
 "With the NetworkWizard you can easily configure your network step by step."
 msgstr ""
+"Með Netkerfis álfinum þá getur þú stillt nettenginu þína skref fyrir skref."
 
 msgid ""
 "With the PositionerSetup plugin it is easy to install and configure a "
 "motorized dish."
 msgstr ""
+"Með PositionerSetup íforritinu er auðvelt að setja upp og stilla "
+"mótordrifinn disk."
 
 msgid ""
 "With the SatelliteEquipmentControl plugin it is possible to fine-tune DiSEqC-"
 "settings."
 msgstr ""
+"Með SatelliteEquipmentControl íforritinu er mögulegt að fínstilla DiSEqC "
+"stillingar."
 
 msgid ""
 "With this option enabled the channel to record on can be changed to a "
@@ -8364,6 +8484,9 @@ msgid ""
 "have also a new now-next event viewer. Easy-PG, the own graphical EPG bowser "
 "is also included."
 msgstr ""
+"Þú getur notað EasyInfo til að stjórna EPG íforritum frá Info takkanum. Þú "
+"færð líka nýja nú og næst sýn. Myndræna EPG Easy-PG íforritið er líka "
+"innifalið."
 
 #
 msgid "You cannot delete this!"
@@ -8454,6 +8577,9 @@ msgid ""
 "\n"
 "Do you want to set the pin now?"
 msgstr ""
+"Þú þarft að búa til PIN kóða og fela hann fyrir börnunum.\n"
+"\n"
+"Viltu búa til kóða núna?"
 
 msgid ""
 "You successfully configured a new AutoTimer. Do you want to add it to the "
index 7f1b6eeb967901077a46c9cd62395098475cbb6d..054272edd5296956da0a5d42c28d087ff7e1c0f7 100755 (executable)
--- a/po/it.po
+++ b/po/it.po
@@ -5,13 +5,13 @@ msgstr ""
 "Project-Id-Version: enigma2 v2.6 Italian Locale\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-07 22:45+0200\n"
+"PO-Revision-Date: 2011-04-24 02:17+0200\n"
 "Last-Translator: spaeleus <spaeleus@croci.org>\n"
 "Language-Team: WWW.LINSAT.NET <spaeleus@croci.org>\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.3\n"
 "X-Poedit-Language: Italian\n"
@@ -2395,9 +2395,10 @@ msgstr "il software del Dreambox perchè sono disponibili aggiornamenti."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
 msgstr ""
+"Driver per penne USB wireless-n basate su chipset Ralink RT8070/RT3070/RT3370"
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Driver per penne USB wireless-n basate su chipset Realtek r8712u"
 
 #
 msgid "Duration: "
@@ -2765,7 +2766,7 @@ msgid "Estonian"
 msgstr "Estone"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Interfaccia di rete Ethernet"
 
 #
 msgid "Eventview"
@@ -3244,7 +3245,7 @@ msgid "Help"
 msgstr "Aiuto"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Rete nascosta"
 
 #
 msgid "Hidden network SSID"
@@ -3332,6 +3333,8 @@ msgid ""
 "If this is enabled an existing timer will also be considered recording an "
 "event if it records at least 80%% of the it."
 msgstr ""
+"Abilitando l'opzione, un timer esistente verrà considerato in registrazione "
+"se la percentuale registrata sarà almeno l'80%% del totale previsto."
 
 msgid ""
 "If you see this, something is wrong with\n"
@@ -3807,7 +3810,7 @@ msgid "Linked titles with a DVD menu"
 msgstr "Titoli collegati ad un Menu DVD"
 
 msgid "List available networks"
-msgstr ""
+msgstr "Elencare le reti disponibili"
 
 #
 msgid "List of Storage Devices"
@@ -3951,7 +3954,7 @@ msgid "Manual Scan"
 msgstr "Ricerca manuale"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Configurazione manuale"
 
 #
 msgid "Manual transponder"
@@ -4530,7 +4533,7 @@ msgid "NetworkWizard"
 msgstr "Conf. guidata rete"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Nome rete (SSID)"
 
 #
 msgid "Never"
@@ -4699,7 +4702,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "Nessuna rete wireless rilevata! Aggiornare."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Nessuna rete wireless trovata! Ricerca in corso..."
 
 #
 msgid ""
@@ -4813,7 +4816,7 @@ msgid "Not fetching feed entries"
 msgstr "Voci feed non recuperate"
 
 msgid "Not-Associated"
-msgstr ""
+msgstr "Non associato"
 
 #
 msgid ""
@@ -5668,7 +5671,7 @@ msgid "RSS viewer"
 msgstr "Plugin per visualizzare RSS"
 
 msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "Driver wireless-n USB RT8070/RT3070/RT3370"
 
 #
 msgid "Radio"
@@ -8103,7 +8106,7 @@ msgid "Undo uninstall"
 msgstr "Annull. rimoz."
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "In chiaro"
 
 msgid "UnhandledKey"
 msgstr "Tasto non gestito"
@@ -8133,7 +8136,7 @@ msgid "Universal LNB"
 msgstr "LNB Universale"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Sconosciuto"
 
 msgid "Unknown network adapter."
 msgstr "Interfaccia di rete sconosciuta."
@@ -8840,13 +8843,13 @@ msgid "Wireless Network State"
 msgstr "Stato rete wireless"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "Configurazione connessione rete wireless"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "Configurazione connessione rete wireless."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "Stato rete wireless"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
@@ -9781,7 +9784,7 @@ msgid "done!"
 msgstr "Fatto!"
 
 msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "Driver per penne USB basate su chipset Realtek"
 
 #
 msgid "edit alternatives"
@@ -10658,7 +10661,7 @@ msgid "whitelist"
 msgstr "Lista bianca"
 
 msgid "wireless network interface"
-msgstr ""
+msgstr "Interfaccia di rete wireless"
 
 #
 msgid "working"
index 20330d6bcb15d709d450682cb4b534facb50a84f..7c97f79f2d3e652e11067d90c101e057f14e188e 100755 (executable)
--- a/po/lt.po
+++ b/po/lt.po
@@ -4,13 +4,13 @@ msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-06 10:15+0200\n"
+"PO-Revision-Date: 2011-04-21 13:55+0200\n"
 "Last-Translator: Audronis <audrgrin@takas.lt>\n"
 "Language-Team: Adga / enigma2 (c) <audrgrin@takas.lt>\n"
+"Language: lt\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: lt\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
 "100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Pootle 2.0.3\n"
@@ -2314,10 +2314,10 @@ msgid "Dreambox software because updates are available."
 msgstr "Dreambox programinės įrangos atnaujinimas, nes yra pasiekiamas."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
-msgstr ""
+msgstr "Draiveris dėl Ralink RT8070/RT3070/RT3370 belaidžių USB įrenginių."
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Draiveris dėl r8712u belaidžių USB įrenginių.."
 
 #
 msgid "Duration: "
@@ -2655,7 +2655,7 @@ msgid "Estonian"
 msgstr "Estų"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet tinklo sąsaja"
 
 msgid "Eventview"
 msgstr "Įvykių peržiūra"
@@ -3051,7 +3051,7 @@ msgid "Help"
 msgstr "Pagalba"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Paslėptas tinklas"
 
 msgid "Hidden network SSID"
 msgstr "Paslėptas tinklo SSID"
@@ -3121,6 +3121,8 @@ msgid ""
 "If this is enabled an existing timer will also be considered recording an "
 "event if it records at least 80%% of the it."
 msgstr ""
+"Jei tai įjungta jau esančiam laikmačiui, tai bus apsvarstytas įrašymo "
+"atvejis, jei įrašyta ne mažiau kaip 80%% nuo jo."
 
 msgid ""
 "If you see this, something is wrong with\n"
@@ -3515,7 +3517,7 @@ msgid "Linked titles with a DVD menu"
 msgstr "Sujungti pavadinimai su DVD meniu"
 
 msgid "List available networks"
-msgstr ""
+msgstr "Galimų tinklų sąrašas"
 
 msgid "List of Storage Devices"
 msgstr "Išsaugotų įrenginių sąrašas"
@@ -3630,7 +3632,7 @@ msgid "Manual Scan"
 msgstr "Rankinė paieška"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Rankinė konfigūracija"
 
 msgid "Manual transponder"
 msgstr "Rankinis transponderis"
@@ -4109,7 +4111,7 @@ msgid "NetworkWizard"
 msgstr "Tinklo vedlys"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Tinklo pavadinimas (SSID)"
 
 msgid "Never"
 msgstr "Niekada"
@@ -4250,7 +4252,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "Jokie belaidžiai tinklai nesurasti! Prašome pakartoti."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Belaidžių tinklų nerasta! Vyksta paieška ..."
 
 msgid ""
 "No working local network adapter found.\n"
@@ -4346,7 +4348,7 @@ msgid "Not fetching feed entries"
 msgstr "Ne perdavimo įėjimų nustatymas"
 
 msgid "Not-Associated"
-msgstr ""
+msgstr "Ne-Asocijuotas"
 
 msgid ""
 "Nothing to scan!\n"
@@ -5038,7 +5040,7 @@ msgid "RSS viewer"
 msgstr "RSS žiūrėjimas"
 
 msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "RT8070/RT3070/RT3370 USB belaidžių draiveris"
 
 msgid "Radio"
 msgstr "Radijas"
@@ -7035,7 +7037,7 @@ msgid "Undo uninstall"
 msgstr "Atšaukti šalinimą"
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "Nešifruota"
 
 msgid "UnhandledKey"
 msgstr "Nežinomas mygtukas"
@@ -7059,7 +7061,7 @@ msgid "Universal LNB"
 msgstr "Universali LNB"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Nežinoma"
 
 msgid "Unknown network adapter."
 msgstr "Nežinomas tinklo adapteris"
@@ -7671,13 +7673,13 @@ msgid "Wireless Network State"
 msgstr "Belaidis tinklas"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "Belaidžio tinklo prisijungimo nustatymas"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "Belaidžio tinklo prisijungimo nustatymas."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "Belaidžio tinklo būklė"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
@@ -8464,7 +8466,7 @@ msgid "done!"
 msgstr "baigta!"
 
 msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "Draiveriai dėl Realtek USB belaidžių įrenginių"
 
 msgid "edit alternatives"
 msgstr "redaguoti kitus"
@@ -9144,7 +9146,7 @@ msgid "whitelist"
 msgstr "baltas sąrašas"
 
 msgid "wireless network interface"
-msgstr ""
+msgstr "bevielio tinklo sąsaja"
 
 msgid "working"
 msgstr "dirba"
index c7c13aeabd2b0b02af347397907ad09ebfc9fc65..fec9e85889012ebd086b243b72a2187544e15ca4 100755 (executable)
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: enigma2\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-12 15:45+0200\n"
+"PO-Revision-Date: 2011-04-23 00:17+0200\n"
 "Last-Translator: Benny <Benny.DeTandt@gmail.com>\n"
 "Language-Team: <Benny.DeTandt@gmail.com>\n"
+"Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.3\n"
 "X-Poedit-Language: Nederlands\n"
@@ -413,10 +413,10 @@ msgid "A"
 msgstr "A"
 
 msgid "A BackToTheRoots-Skin .. but with Warp-8 speed."
-msgstr ""
+msgstr "A BackToTheRoots-Skin .. but with Warp-8 speed."
 
 msgid "A BackToTheRoots-Skin .. or good old times."
-msgstr ""
+msgstr "A BackToTheRoots-Skin .. or good old times."
 
 msgid "A basic ftp client"
 msgstr "Een basis ftp-client"
@@ -1076,13 +1076,13 @@ msgid "Autoresolution Switch"
 msgstr ""
 
 msgid "Autoresolution is not working in Scart/DVI-PC Mode"
-msgstr ""
+msgstr "Autoresolutie werkt niet in Scart/DVI-PC-modus"
 
 msgid "Autoresolution settings"
 msgstr "Autoresolutie instellingen"
 
 msgid "Autoresolution videomode setup"
-msgstr ""
+msgstr "Autoresolution videomode instellen"
 
 #
 msgid "Autos & Vehicles"
@@ -1629,7 +1629,7 @@ msgid "Configure nameservers"
 msgstr "Configureer nameservers"
 
 msgid "Configure your WLAN network interface"
-msgstr "Configureer uw WLAN netwerkinterface"
+msgstr "Configureer uw WLAN netwerk interface"
 
 #
 msgid "Configure your internal LAN"
@@ -1791,7 +1791,7 @@ msgid "Create preview pictures of your Movies"
 msgstr "Maakt voorbeeld miniaturen aan van uw films"
 
 msgid "Create remote timers"
-msgstr ""
+msgstr "Creëer op afstand timers"
 
 msgid "Create timers on remote Dreamboxes."
 msgstr "Maakt timers op andere Dreamboxes."
@@ -2014,10 +2014,10 @@ msgid "Define a startup service for your Dreambox."
 msgstr "Bepaal de status na het opstarten van uw Dreambox."
 
 msgid "Deinterlacer mode for interlaced content"
-msgstr ""
+msgstr "Deinterlacer modus voor interlaced content"
 
 msgid "Deinterlacer mode for progressive content"
-msgstr ""
+msgstr "Deinterlacer modus voor progressieve content"
 
 #
 msgid "Delay"
@@ -2415,9 +2415,11 @@ msgstr "Dreambox software want er zijn updates beschikbaar."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
 msgstr ""
+"Driver voor op Ralink RT8070/RT3070/RT3370 gebaseerde Wireless-N USB-"
+"apparaten."
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Driver voor op Realtek r8712u gebaseerde Wireless-N USB-apparaten."
 
 msgid "Duration: "
 msgstr "Duur: "
@@ -2783,7 +2785,7 @@ msgid "Estonian"
 msgstr "Estlands"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet netwerk interface"
 
 #
 msgid "Eventview"
@@ -3015,6 +3017,8 @@ msgid ""
 "Found a total of %d matching Events.\n"
 "%d Timer were added and %d modified, %d conflicts encountered."
 msgstr ""
+"Een totaal van %d overeenkomende gebeurtenissen gevonden.\n"
+"%d timers werden toegevoegd en %d gewijzigd, %d conflicten ondervonden."
 
 #
 #, python-format
@@ -3213,6 +3217,9 @@ msgid ""
 "to a PC running a growl, snarl or syslog compatible client or directly to an "
 "iPhone using prowl."
 msgstr ""
+"Growlee laat uw Dreambox meldingen als 'Opname gestart' doorsturen naar een "
+"PC waar een growl-, snarl- of syslog-compatibele client draait, of naar een "
+"iPhone waar prowl draait."
 
 msgid "Guard interval"
 msgstr "Wacht interval"
@@ -3256,7 +3263,7 @@ msgid "Help"
 msgstr "Help"
 
 msgid "Hidden network"
-msgstr ""
+msgstr "Verborgen netwerk"
 
 #
 msgid "Hidden network SSID"
@@ -3817,7 +3824,7 @@ msgid "Linked titles with a DVD menu"
 msgstr "Verbind titels met een DVD menu"
 
 msgid "List available networks"
-msgstr ""
+msgstr "Lijst van beschikbare netwerken"
 
 #
 msgid "List of Storage Devices"
@@ -3958,7 +3965,7 @@ msgid "Manual Scan"
 msgstr "Handmatig zoeken"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Handmatige configuratie"
 
 #
 msgid "Manual transponder"
@@ -4323,6 +4330,8 @@ msgid ""
 "NCID Client shows incoming voice calls promoted by any NCID server (e.g. "
 "Vodafone Easybox) on your Dreambox."
 msgstr ""
+"NCID client die inkomende gesprekken van een NCID-server (b.v. Vodafone "
+"Easybox) via uw Dreambox laat zien."
 
 #
 msgid "NEXT"
@@ -4529,7 +4538,7 @@ msgid "NetworkWizard"
 msgstr "Netwerk wizard"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Netwerknaam (SSID)"
 
 #
 msgid "Never"
@@ -4700,7 +4709,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "Geen draadloze netwerken gevonden! Vernieuw."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Geen draadloze netwerken gevonden! Zoeken ..."
 
 #
 msgid ""
@@ -4812,7 +4821,7 @@ msgid "Not fetching feed entries"
 msgstr "Niet ophalen Feed items"
 
 msgid "Not-Associated"
-msgstr ""
+msgstr "Niet geassocieerd"
 
 #
 msgid ""
@@ -5455,7 +5464,7 @@ msgid "Portuguese"
 msgstr "Portugees"
 
 msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Positie van voltooide timers in timerlijst"
 
 #
 msgid "Positioner"
@@ -5673,7 +5682,7 @@ msgid "RSS viewer"
 msgstr "RSS-viewer"
 
 msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "RT8070/RT3070/RT3370 USB wireless-n driver"
 
 #
 msgid "Radio"
@@ -5786,7 +5795,7 @@ msgid "Recordings always have priority"
 msgstr "Een opname heeft altijd voorrang"
 
 msgid "Redirect notifications to Growl, Snarl, Prowl or Syslog"
-msgstr ""
+msgstr "Verstuur meldingen door naar Growl, Snarl, Prowl of Syslog"
 
 msgid "Reenter new PIN"
 msgstr "Voer nieuwe pincode nogmaals in"
@@ -6012,7 +6021,7 @@ msgid "Restrict \"after event\" to a certain timespan?"
 msgstr "Beperk \"after event\" tot een bepaalde tijdspanne?"
 
 msgid "Restrict to events on certain dates"
-msgstr ""
+msgstr "Beperk tot gebeurtenissen op bepaalde dagen"
 
 #
 msgid "Resume from last position"
@@ -7591,9 +7600,8 @@ msgstr ""
 msgid "The wizard is finished now."
 msgstr "De wizard is nu gereed."
 
-#
 msgid "There are at least "
-msgstr "Er zijn ten minste"
+msgstr "Er zijn ten minste "
 
 #
 msgid "There are currently no outstanding actions."
@@ -7611,9 +7619,8 @@ msgstr "Er zijn geen standaard instellingen in uw firmware gevonden."
 msgid "There are no updates available."
 msgstr "Er zijn geen updates beschikbaar."
 
-#
 msgid "There are now "
-msgstr "Er zijn nu"
+msgstr "Er zijn nu "
 
 #
 msgid ""
@@ -8135,7 +8142,7 @@ msgid "Undo uninstall"
 msgstr "Ongedaan"
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "Ongecodeerd"
 
 #
 msgid "UnhandledKey"
@@ -8166,7 +8173,7 @@ msgid "Universal LNB"
 msgstr "Universeel LNB"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Onbekend"
 
 msgid "Unknown network adapter."
 msgstr "Onbekende netwerkadapter."
@@ -8288,6 +8295,8 @@ msgstr "Gateway gebruiken"
 
 msgid "Use and control multiple Dreamboxes with different RCs."
 msgstr ""
+"Gebruik en de beheer meerdere Dreamboxen met verschillende "
+"afstandsbedieningen."
 
 #
 msgid "Use power measurement"
@@ -8889,13 +8898,13 @@ msgid "Wireless Network State"
 msgstr "Status draadloos netwerk"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "Draadloze netwerkverbinding instellen"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "Draadloze netwerkverbinding instellen."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "Draadloos netwerk status"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
@@ -9724,7 +9733,7 @@ msgid "continue"
 msgstr "Doorgaan"
 
 msgid "control multiple Dreamboxes with different RCs"
-msgstr ""
+msgstr "bedien meerdere Dreamboxen met verschillende afstandsbedieningen"
 
 #
 msgid "copy to bouquets"
@@ -10712,7 +10721,7 @@ msgid "whitelist"
 msgstr "witte lijst"
 
 msgid "wireless network interface"
-msgstr ""
+msgstr "draadloze netwerk interface"
 
 #
 msgid "working"
index 3de74702b68678abdb260577847f087c6743b65b..2844a42e205aa479588adf0332bd12ca28ef616d 100755 (executable)
--- a/po/sk.po
+++ b/po/sk.po
@@ -1065,6 +1065,9 @@ msgid ""
 "automated polling. There is no intelligence involved, so it might bother you "
 "about the same conflict over and over."
 msgstr ""
+"Po zapnutí tejto funkcie budete pri automatickom dopytovaní dostávať "
+"informácie o konfliktoch časovača. Nevyužíva sa tu žiadna logika, takže cás "
+"môže ten istý konflikt vyrušovať stále znova."
 
 msgid ""
 "By pressing the OK Button on your remote control, the info bar is being "
@@ -2288,7 +2291,7 @@ msgid "Estonian"
 msgstr "Estónčina"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Rozhranie siete Eternet"
 
 msgid "Eventview"
 msgstr "Prehľad programov"
@@ -2749,6 +2752,8 @@ msgid ""
 "If this is enabled an existing timer will also be considered recording an "
 "event if it records at least 80%% of the it."
 msgstr ""
+"Ak je zapnutá táto funkcia, existujúci časovač sa bude považovať za "
+"nahrávajúci, ak zaznamená aspoň 80% % programu."
 
 msgid ""
 "If you see this, something is wrong with\n"
@@ -3252,7 +3257,7 @@ msgid "Manual Scan"
 msgstr "Ručné vyhľadávanie"
 
 msgid "Manual configuration"
-msgstr ""
+msgstr "Ručná konfigurácia"
 
 msgid "Manual transponder"
 msgstr "Transpondér ručne"
@@ -3728,7 +3733,7 @@ msgid "NetworkWizard"
 msgstr "Sprievodca nast. siete"
 
 msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Názov siete (SSID)"
 
 msgid "Never"
 msgstr "Nikdy"
@@ -3865,7 +3870,7 @@ msgid "No wireless networks found! Please refresh."
 msgstr "Nenájdená bezdrôtová sieť. Obnovte."
 
 msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Nenájdená bezdrôtová sieť. Hľadám ..."
 
 msgid ""
 "No working local network adapter found.\n"
@@ -6624,7 +6629,7 @@ msgid "Undo uninstall"
 msgstr "Späť odinštalácia"
 
 msgid "Unencrypted"
-msgstr ""
+msgstr "Nešifrované"
 
 msgid "UnhandledKey"
 msgstr ""
@@ -6648,7 +6653,7 @@ msgid "Universal LNB"
 msgstr "Univerzálny LNB"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Neznáme"
 
 msgid "Unknown network adapter."
 msgstr "Neznámy sieťový adaptér."
@@ -7250,13 +7255,13 @@ msgid "Wireless Network State"
 msgstr "Stav bezdrôtovej siete"
 
 msgid "Wireless network connection setup"
-msgstr ""
+msgstr "Nastavenie bezdrôtovej siete"
 
 msgid "Wireless network connection setup."
-msgstr ""
+msgstr "Nastavenie bezdrôtovej siete."
 
 msgid "Wireless network state"
-msgstr ""
+msgstr "Stav bezdrôtovej siete"
 
 msgid ""
 "With AntiScrollbar you can cover up annoying ticker lines (e.g. in news "
@@ -8049,7 +8054,7 @@ msgid "done!"
 msgstr "Hotovo!"
 
 msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "ovládač pre bezdrôtové USB zariadenia Realtek"
 
 msgid "edit alternatives"
 msgstr "Upraviť alternatívy"
@@ -8729,7 +8734,7 @@ msgid "whitelist"
 msgstr "biela listina"
 
 msgid "wireless network interface"
-msgstr ""
+msgstr "rozhranie bezdrôtovej siete"
 
 msgid "working"
 msgstr "pracujem"
index 358f5073ecc7148c274c07ec760081bec914b1ca..e2811eeadeb47cc9f7119a637ee0f8f4fa18986f 100755 (executable)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,13 +8,13 @@ msgstr ""
 "Project-Id-Version: tuxbox-enigma 0.0.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-04-20 10:39+0000\n"
-"PO-Revision-Date: 2011-04-09 16:35+0100\n"
-"Last-Translator: \n"
+"PO-Revision-Date: 2011-05-03 13:22+0200\n"
+"Last-Translator: sig <sigstop@hotmail.com>\n"
 "Language-Team: \n"
+"Language: sv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: sv\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.3\n"
 "X-Poedit-Language: Swedish\n"
@@ -397,7 +397,7 @@ msgid "A"
 msgstr "A"
 
 msgid "A BackToTheRoots-Skin .. but with Warp-8 speed."
-msgstr ""
+msgstr "Ett TillbakaTillGrunden-Skin .. men med Warp-8 fart."
 
 msgid "A BackToTheRoots-Skin .. or good old times."
 msgstr "Ett TillbakaTillRötterna-Skin .. eller gamla goda tider."
@@ -421,7 +421,7 @@ msgid "A demo plugin for TPM usage."
 msgstr "Ett demoplugin för TPM användning."
 
 msgid "A dreambox simulation from SG-Atlantis displays."
-msgstr ""
+msgstr "En dreambox simulering av SG-Atlantis skärmar."
 
 #
 msgid ""
@@ -1008,13 +1008,13 @@ msgid ""
 msgstr ""
 
 msgid "AutoTimer was added successfully"
-msgstr ""
+msgstr "AutoTimer lades till utan problem"
 
 msgid "AutoTimer was changed successfully"
-msgstr ""
+msgstr "AutoTimer ändrades utan problem"
 
 msgid "AutoTimer was removed"
-msgstr ""
+msgstr "AutoTimer togs bort"
 
 #
 msgid "Automatic"
@@ -1025,48 +1025,50 @@ msgid "Automatic Scan"
 msgstr "Automatisk sökning"
 
 msgid "Automatic volume adjustment"
-msgstr ""
+msgstr "Automatisk volymjustering"
 
 msgid "Automatic volume adjustment for ac3/dts services."
-msgstr ""
+msgstr "Automatisk volymjustering för ac3/dts kanaler."
 
 msgid "Automatically change video resolution"
-msgstr ""
+msgstr "Automatiskt byte av videoupplösning"
 
 msgid ""
 "Automatically changes the output resolution depending on the video "
 "resolution you are watching."
-msgstr ""
+msgstr "Automatisk byte av upplösning beroende av källans upplösning."
 
 msgid "Automatically create timer events based on keywords"
-msgstr ""
+msgstr "Automatiskt skapa timerhändelser baserat på nyckelord"
 
 msgid "Automatically informs you on low internal memory"
-msgstr ""
+msgstr "Automatiskt informera dig om lite ledigt internt minne"
 
 msgid "Automatically refresh EPG"
-msgstr ""
+msgstr "Automatiskt uppdatera EPG"
 
 msgid "Automatically send crashlogs to Dream Multimedia"
-msgstr ""
+msgstr "Automatiskt skicka crashlog till Dream Multimedia"
 
 #, python-format
 msgid ""
 "Autoresolution Plugin Testmode:\n"
 "Is %s ok?"
 msgstr ""
+"Autoupplösning Plugin Testläge:\n"
+"Är %s ok?"
 
 msgid "Autoresolution Switch"
-msgstr ""
+msgstr "Autoupplösning Byte"
 
 msgid "Autoresolution is not working in Scart/DVI-PC Mode"
-msgstr ""
+msgstr "Autoupplösning fungerar inte i Scart/DVI-PV Läge"
 
 msgid "Autoresolution settings"
-msgstr ""
+msgstr "Autoupplösning inställningar"
 
 msgid "Autoresolution videomode setup"
-msgstr ""
+msgstr "Autoupplösning videoläge installation"
 
 #
 msgid "Autos & Vehicles"
@@ -1212,6 +1214,8 @@ msgid ""
 "Browse ORF and SAT1 Teletext independent from channel. This need I-net "
 "conection."
 msgstr ""
+"Bläddra på ORF och SAT1 Teletext oberoende av kanal. Detta kräver I-net "
+"anslutning."
 
 msgid "Browse for and connect to network shares"
 msgstr "Bläddra efter och anslut till nätverksutdelningar"
@@ -1223,9 +1227,8 @@ msgstr "Bläddra efter nfs/cifs utdelningar och anslut till dem."
 msgid "Browse network neighbourhood"
 msgstr "Bläddra i nätverket"
 
-#
 msgid "Burn DVD"
-msgstr "Skapa DVD"
+msgstr "Bränn DVD"
 
 #
 msgid "Burn existing image to DVD"
@@ -1245,12 +1248,16 @@ msgid ""
 "By enabling this events will not be matched if they don't occur on certain "
 "dates."
 msgstr ""
+"Vid aktivering kommer händelser inte bli matchade om de inte inträffar på "
+"vissa datum."
 
 msgid ""
 "By enabling this you will be notified about timer conflicts found during "
 "automated polling. There is no intelligence involved, so it might bother you "
 "about the same conflict over and over."
 msgstr ""
+"Vid aktiveringkommer du upplysas om timerkonflikter vid automatisk pollning. "
+"Det finns ingen intelligens inblandad, du bör undersöka om du får konflikter."
 
 #
 msgid ""
@@ -1273,6 +1280,8 @@ msgid ""
 "CDInfo enables gathering album and track details from CDDB and CD-Text when "
 "playing Audio CDs in Mediaplayer."
 msgstr ""
+"CDInfo aktiverar  insamling av album moch spår information från CDDB och CD-"
+"Text vid uppspelning av Audop CDs i Mediaspelaren."
 
 #
 msgid "CI assignment"
@@ -1295,10 +1304,10 @@ msgid "Cache Thumbnails"
 msgstr "Buffra miniatyrer"
 
 msgid "Callmonitor for NCID-based call notification"
-msgstr ""
+msgstr "Callmonitor för NCID-baserad call notifiering"
 
 msgid "Callmonitor for the Fritz!Box routers"
-msgstr ""
+msgstr "Callmonitor för Fritz!Box routers"
 
 msgid "Can't connect to server. Please check your network!"
 msgstr "Kan inte ansluta till servern. Vänligen kontrollera ditt nätverk!"
@@ -1662,28 +1671,28 @@ msgid "Contrast"
 msgstr "Kontrast"
 
 msgid "Control your Dreambox with your Web browser."
-msgstr ""
+msgstr "Kontrollera din Dreambox med din Webläsare."
 
 msgid "Control your Dreambox with your browser"
-msgstr ""
+msgstr "Kontrollera din Dreambox med din webläsare"
 
 msgid "Control your dreambox with only the MUTE button"
-msgstr ""
+msgstr "Kontrollera din dreambox enbart med MUTE knappen"
 
 msgid "Control your dreambox with only the MUTE button."
-msgstr ""
+msgstr "Kontrollera din dreambox enbart med MUTE knappen."
 
 msgid "Control your internal system fan."
-msgstr ""
+msgstr "Kontrollera inbyggd systemfläkt."
 
 msgid "Control your kids's tv usage"
-msgstr ""
+msgstr "Kontrollera dina barns tv användade"
 
 msgid "Control your system fan"
-msgstr ""
+msgstr "Kontrollera din systemfläkt"
 
 msgid "Copy, rename, delete, move local files on your Dreambox."
-msgstr ""
+msgstr "Kopiera, döp om, ta bort, flytta lokala filer på din Dreambox."
 
 #
 msgid "Could not connect to Dreambox .NFI Image Feed Server:"
@@ -1704,7 +1713,7 @@ msgstr "Kunde inte spela in på grund av timerkonflikt med %s"
 
 #, python-format
 msgid "Couldn't record due to invalid service %s"
-msgstr ""
+msgstr "Kunde inte spela in på grund av ogiltig kanal %s"
 
 #
 msgid "Crashlog settings"
@@ -1735,10 +1744,10 @@ msgid "Create DVD-ISO"
 msgstr "Skapa DVD-ISO"
 
 msgid "Create a backup of your Video DVD on your DreamBox hard drive."
-msgstr ""
+msgstr "Skapa en backup av din Video DVD på din Dreamboxs hårddisk."
 
 msgid "Create a backup of your Video-DVD"
-msgstr ""
+msgstr "Skapa en backup av din Video-DVD"
 
 msgid "Create a new AutoTimer."
 msgstr "Skapa en ny AutoTimer."
@@ -1755,13 +1764,13 @@ msgid "Create movie folder failed"
 msgstr "Det gick inte att skapa en filmkatalog"
 
 msgid "Create preview pictures of your Movies"
-msgstr ""
+msgstr "Skapa förhandsbilder av dina Filmer"
 
 msgid "Create remote timers"
-msgstr ""
+msgstr "Skapa fjärrtimers"
 
 msgid "Create timers on remote Dreamboxes."
-msgstr ""
+msgstr "Skapa timers på andra Dreamboxar."
 
 #
 #, python-format
@@ -1844,7 +1853,7 @@ msgid "Cut your movies."
 msgstr "Klipp dina filmer."
 
 msgid "CutListEditor allows you to edit your movies"
-msgstr ""
+msgstr "CutListEditor tillåter dig editera dina filmer"
 
 msgid ""
 "CutListEditor allows you to edit your movies.\n"
@@ -1886,7 +1895,7 @@ msgid "DVB-S2"
 msgstr "DVB-S2"
 
 msgid "DVD Drive"
-msgstr ""
+msgstr "DVD Läsare"
 
 #
 msgid "DVD File Browser"
@@ -1904,7 +1913,7 @@ msgid "DVD media toolbox"
 msgstr "DVD media verktyg"
 
 msgid "DVDPlayer plays your DVDs on your Dreambox"
-msgstr ""
+msgstr "DVDPlayer spelar upp dina DVDs på din Dreambox"
 
 msgid ""
 "DVDPlayer plays your DVDs on your Dreambox.\n"
@@ -1965,23 +1974,23 @@ msgid "Defaults"
 msgstr "Grund"
 
 msgid "Define a startup service"
-msgstr ""
+msgstr "Definera en startkanal"
 
 msgid "Define a startup service for your Dreambox."
-msgstr ""
+msgstr "Definera en startkanal för din Dreambox."
 
 msgid "Deinterlacer mode for interlaced content"
-msgstr ""
+msgstr "Deinterlaced lägen för interlaced innehåll"
 
 msgid "Deinterlacer mode for progressive content"
-msgstr ""
+msgstr "Deinterlaced läge för progressivt innehåll"
 
 #
 msgid "Delay"
 msgstr "Fördröjning"
 
 msgid "Delay x seconds after service started"
-msgstr ""
+msgstr "Fördröj x sekunder efter kanalstart"
 
 #
 msgid "Delete"
@@ -2071,7 +2080,7 @@ msgid "Dir:"
 msgstr "Dir:"
 
 msgid "Direct playback of Youtube videos"
-msgstr ""
+msgstr "Direkt playback av Youtube videos"
 
 #
 msgid "Direct playback of linked titles without menu"
@@ -2147,10 +2156,10 @@ msgid "Display search results by:"
 msgstr "Visa sökresultat sortterat på:"
 
 msgid "Display your photos on the TV"
-msgstr ""
+msgstr "Visa dina foton på TVn"
 
 msgid "Displays movie information from the InternetMovieDatabase"
-msgstr ""
+msgstr "Visa filminformation från InternetMovieDatabase"
 
 #, python-format
 msgid ""
@@ -2173,6 +2182,8 @@ msgid ""
 "Do you really want to delete %s\n"
 "%s?"
 msgstr ""
+"Vill du verkligen ta bort %s\n"
+"%s?"
 
 #
 #, python-format
@@ -2336,7 +2347,7 @@ msgid "Download Video"
 msgstr "Ladda ner Video"
 
 msgid "Download files from Rapidshare"
-msgstr ""
+msgstr "Ladda ner från Rapidshare"
 
 #
 msgid "Download location"
@@ -2371,10 +2382,10 @@ msgid "Dreambox software because updates are available."
 msgstr "Dreambox mjukvara på grund av uppdateringar är tillgängliga."
 
 msgid "Driver for Ralink RT8070/RT3070/RT3370 based wireless-n USB devices."
-msgstr ""
+msgstr "Drivrutin för Ralink RT8070/RT3070/RT3370 baserad trådlösa-n USB kort."
 
 msgid "Driver for Realtek r8712u based wireless-n USB devices."
-msgstr ""
+msgstr "Drivrutin för Realtek r8712u baserad trådlösa-n USB kort."
 
 #
 msgid "Duration: "
@@ -2467,10 +2478,10 @@ msgid "Edit settings"
 msgstr "Ändra inställningar"
 
 msgid "Edit tags of recorded movies"
-msgstr ""
+msgstr "Ändra märkning i inspelade filmer"
 
 msgid "Edit tags of recorded movies."
-msgstr ""
+msgstr "Ändra märkning i inspelade filmer."
 
 #
 msgid "Edit the Nameserver configuration of your Dreambox.\n"
@@ -2504,7 +2515,7 @@ msgid "Electronic Program Guide"
 msgstr "Elektronisk Program Guide"
 
 msgid "Emailclient is an IMAP4 e-mail viewer for the Dreambox."
-msgstr ""
+msgstr "Epostklient är en IMAP4 e-postvisare för Dreambox."
 
 #
 msgid "Enable"
@@ -2518,7 +2529,7 @@ msgid "Enable 1080p24 Mode"
 msgstr "Aktivera 1080p24 läge"
 
 msgid "Enable 1080p25 Mode"
-msgstr "Aktiver 1080p25 läge"
+msgstr "Aktivera 1080p25 läge"
 
 msgid "Enable 1080p30 Mode"
 msgstr "Aktivera 1080p30 läge"
@@ -2528,10 +2539,10 @@ msgid "Enable 5V for active antenna"
 msgstr "Aktivera 5V för aktiv antenn"
 
 msgid "Enable 720p24 Mode"
-msgstr "Aktiver 720p24 läge"
+msgstr "Aktivera 720p24 läge"
 
 msgid "Enable Autoresolution"
-msgstr "Aktiver Autoupplösning"
+msgstr "Aktivera Autoupplösning"
 
 #
 msgid "Enable Cleanup Wizard?"
@@ -2736,7 +2747,7 @@ msgid "Estonian"
 msgstr "Estniska"
 
 msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet nätverkskort"
 
 #
 msgid "Eventview"
@@ -2938,9 +2949,11 @@ msgid ""
 "First day to match events. No event that begins before this date will be "
 "matched."
 msgstr ""
+"Först dag att matcha händelser. Ingen händelse innan denna dag kommer "
+"matchas."
 
 msgid "First generate your skin-style with the Ai.HD-Control plugin."
-msgstr ""
+msgstr "Generera först din skinstil med Ai.HD-Control plugin."
 
 #
 msgid "Flash"
@@ -3014,13 +3027,13 @@ msgid "Frisian"
 msgstr "Frisiska"
 
 msgid "FritzCall shows incoming calls to your Fritz!Box on your Dreambox."
-msgstr ""
+msgstr "Fritz!Call visar inkommande samtal till din Fritz!Box på din Dreambox"
 
 msgid "Front USB Slot"
 msgstr "Fram USB kontakt"
 
 msgid "Frontend for /tmp/mmi.socket"
-msgstr ""
+msgstr "Frontend för /tmp/mmi.socket"
 
 #
 #, python-format
@@ -3040,14 +3053,15 @@ msgstr ""
 "Vill du starta om GUI nu?"
 
 msgid "GUI that allows user to change the ftp- / telnet password."
-msgstr ""
+msgstr "GUI som tillåter användare att ändra ftp- / telnet lösenord."
 
 msgid ""
 "GUI that allows user to change the ftp-/telnet-password of the Dreambox."
 msgstr ""
+"GUI som tillåter användare att ändra ftp- / telnet-lösenord på Dreambox."
 
 msgid "GUI to change the ftp and telnet-password"
-msgstr ""
+msgstr "GUI för att ändra ftp- / telnet-lösenord"
 
 #
 msgid "Gaming"