aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdata/setup.xml1
-rwxr-xr-xdata/skin_default.xml35
-rw-r--r--lib/base/thread.cpp9
-rw-r--r--lib/dvb/dvb.cpp11
-rw-r--r--lib/dvb/frontend.cpp107
-rw-r--r--lib/dvb/frontend.h3
-rw-r--r--lib/dvb/sec.cpp415
-rw-r--r--lib/gdi/picexif.cpp35
-rw-r--r--lib/python/Components/Converter/Makefile.am2
-rw-r--r--lib/python/Components/Converter/ValueToPixmap.py40
-rwxr-xr-xlib/python/Components/DreamInfoHandler.py4
-rwxr-xr-xlib/python/Components/Network.py374
-rw-r--r--lib/python/Components/NimManager.py41
-rw-r--r--lib/python/Components/Renderer/Pixmap.py13
-rw-r--r--lib/python/Components/Scanner.py2
-rw-r--r--lib/python/Components/UsageConfig.py2
-rw-r--r--lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py40
-rw-r--r--lib/python/Plugins/SystemPlugins/Hotplug/plugin.py10
-rwxr-xr-xlib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py226
-rwxr-xr-xlib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml25
-rw-r--r--lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py4
-rwxr-xr-xlib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py5
-rwxr-xr-xlib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py3
-rwxr-xr-xlib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py19
-rw-r--r--lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py28
-rwxr-xr-xlib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py445
-rw-r--r--lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py244
-rw-r--r--lib/python/Screens/ChannelSelection.py18
-rw-r--r--lib/python/Screens/InfoBarGenerics.py23
-rwxr-xr-xlib/python/Screens/NetworkSetup.py321
-rw-r--r--lib/python/Screens/TaskView.py6
-rwxr-xr-xlib/python/Screens/VirtualKeyBoard.py200
-rw-r--r--lib/python/Tools/NumericalTextInput.py16
-rwxr-xr-xpo/et.po10
-rwxr-xr-xpo/fi.po155
-rwxr-xr-xpo/is.po558
-rwxr-xr-xpo/it.po39
-rwxr-xr-xpo/lt.po40
-rwxr-xr-xpo/nl.po75
-rwxr-xr-xpo/sk.po27
-rwxr-xr-xpo/sv.po142
41 files changed, 2015 insertions, 1758 deletions
diff --git a/data/setup.xml b/data/setup.xml
index 5f7cbf60..86207094 100755
--- a/data/setup.xml
+++ b/data/setup.xml
@@ -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>
diff --git a/data/skin_default.xml b/data/skin_default.xml
index 48267066..2dee1dbc 100755
--- a/data/skin_default.xml
+++ b/data/skin_default.xml
@@ -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" >
diff --git a/lib/base/thread.cpp b/lib/base/thread.cpp
index fa923deb..1fda6a47 100644
--- a/lib/base/thread.cpp
+++ b/lib/base/thread.cpp
@@ -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)
{
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 6f9a67fb..0b1bdc2c 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -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;
}
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index b5de46c9..57188963 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -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;
}
diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
index bef4a18f..5887f404 100644
--- a/lib/dvb/frontend.h
+++ b/lib/dvb/frontend.h
@@ -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();
diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp
index a2bc8869..e4f00add 100644
--- a/lib/dvb/sec.cpp
+++ b/lib/dvb/sec.cpp
@@ -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) );
diff --git a/lib/gdi/picexif.cpp b/lib/gdi/picexif.cpp
index 2daeeffd..1eacc29c 100644
--- a/lib/gdi/picexif.cpp
+++ b/lib/gdi/picexif.cpp
@@ -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)
diff --git a/lib/python/Components/Converter/Makefile.am b/lib/python/Components/Converter/Makefile.am
index 3b6fd3e8..b73f6d5a 100644
--- a/lib/python/Components/Converter/Makefile.am
+++ b/lib/python/Components/Converter/Makefile.am
@@ -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
index 00000000..0acd2639
--- /dev/null
+++ b/lib/python/Components/Converter/ValueToPixmap.py
@@ -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)
+
diff --git a/lib/python/Components/DreamInfoHandler.py b/lib/python/Components/DreamInfoHandler.py
index 8e9c29d1..8097365c 100755
--- a/lib/python/Components/DreamInfoHandler.py
+++ b/lib/python/Components/DreamInfoHandler.py
@@ -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":
diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py
index 04511d25..32b8bdbe 100755
--- a/lib/python/Components/Network.py
+++ b/lib/python/Components/Network.py
@@ -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
diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py
index 7f7dd5c4..bd1a3638 100644
--- a/lib/python/Components/NimManager.py
+++ b/lib/python/Components/NimManager.py
@@ -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
diff --git a/lib/python/Components/Renderer/Pixmap.py b/lib/python/Components/Renderer/Pixmap.py
index d67cd559..7c6b5795 100644
--- a/lib/python/Components/Renderer/Pixmap.py
+++ b/lib/python/Components/Renderer/Pixmap.py
@@ -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)
+
diff --git a/lib/python/Components/Scanner.py b/lib/python/Components/Scanner.py
index 813c09f8..e01c61fd 100644
--- a/lib/python/Components/Scanner.py
+++ b/lib/python/Components/Scanner.py
@@ -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)
diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py
index acbc3425..ce56f0f6 100644
--- a/lib/python/Components/UsageConfig.py
+++ b/lib/python/Components/UsageConfig.py
@@ -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 = [
diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py
index bcc7b9b2..af14578a 100644
--- a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py
+++ b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py
@@ -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")
diff --git a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
index 84cbbcb6..e26a93c6 100644
--- a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
@@ -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)
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
index d7e83072..cb954bb2 100755
--- a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
+++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
@@ -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
-
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml b/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
index c4300436..0b3a2988 100755
--- a/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
+++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
@@ -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>
-
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py
index 56cebdbf..30a24230 100644
--- a/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/plugin.py
@@ -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)
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
index 01649bb3..c7c143f2 100755
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py
@@ -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):
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
index 32d7140a..3ea787c1 100755
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py
@@ -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"
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
index 87f0a4d6..ec2f82cc 100755
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
@@ -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)
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
index b3a0a17a..12fd6094 100644
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
@@ -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,
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py b/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
index 480f201f..a1851579 100755
--- a/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
+++ b/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
@@ -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
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
index efec340a..10213eb0 100644
--- a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
@@ -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
diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py
index c07e3495..912d6784 100644
--- a/lib/python/Screens/ChannelSelection.py
+++ b/lib/python/Screens/ChannelSelection.py
@@ -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
diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py
index 2e97b59d..93a47886 100644
--- a/lib/python/Screens/InfoBarGenerics.py
+++ b/lib/python/Screens/InfoBarGenerics.py
@@ -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:
diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py
index de2fa993..4b15ee00 100755
--- a/lib/python/Screens/NetworkSetup.py
+++ b/lib/python/Screens/NetworkSetup.py
@@ -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)
diff --git a/lib/python/Screens/TaskView.py b/lib/python/Screens/TaskView.py
index 660fb276..6e1b752d 100644
--- a/lib/python/Screens/TaskView.py
+++ b/lib/python/Screens/TaskView.py
@@ -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()
diff --git a/lib/python/Screens/VirtualKeyBoard.py b/lib/python/Screens/VirtualKeyBoard.py
index 7846e4b8..a8695439 100755
--- a/lib/python/Screens/VirtualKeyBoard.py
+++ b/lib/python/Screens/VirtualKeyBoard.py
@@ -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
diff --git a/lib/python/Tools/NumericalTextInput.py b/lib/python/Tools/NumericalTextInput.py
index 63a58ea4..252e174e 100644
--- a/lib/python/Tools/NumericalTextInput.py
+++ b/lib/python/Tools/NumericalTextInput.py
@@ -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
diff --git a/po/et.po b/po/et.po
index 3680e780..39f3ba7d 100755
--- 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"
diff --git a/po/fi.po b/po/fi.po
index 38a44b39..8a5abf7c 100755
--- 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"
diff --git a/po/is.po b/po/is.po
index 609713cf..8ca1f193 100755
--- 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 "
diff --git a/po/it.po b/po/it.po
index 7f1b6eeb..054272ed 100755
--- 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"
diff --git a/po/lt.po b/po/lt.po
index 20330d6b..7c97f79f 100755
--- 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"
diff --git a/po/nl.po b/po/nl.po
index c7c13aea..fec9e858 100755
--- 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"
diff --git a/po/sk.po b/po/sk.po
index 3de74702..2844a42e 100755
--- 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"
diff --git a/po/sv.po b/po/sv.po
index 358f5073..e2811eea 100755
--- 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"