<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>
<!-- 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">
</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" >
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);
pthread_attr_destroy(&attr);
return 0;
-}
+}
int eThread::run(int prio, int policy)
{
#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;
}
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
#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)
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;
}
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;
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();
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);
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)
(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
#endif
if (doSetVoltageToneFrontend)
{
- int RotorCmd=-1;
- bool useGotoXX = false;
+
if ( diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2
&& !sat.no_rotor_command_on_tune )
{
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
}
}
- 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
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
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
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) );
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));
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(;;)
{
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++)
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;
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;
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)
{
}
}
+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)
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
--- /dev/null
+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)
+
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"])
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":
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()
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):
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):
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():
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
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):
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
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
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*")
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*")
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:
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
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
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)
+
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)
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 = [
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
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
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")
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
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:
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)
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 = """
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:
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()
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"))
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':
#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
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)
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"
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()
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)
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"))
self.selectedInterface = "eth0"
self.NextStep = 'nwconfig'
else:
- self.NextStep = 'scanwlan'
+ self.NextStep = 'asknetworktype'
def ChoicesSelectionMoved(self):
pass
-
<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")
<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")
</step>
</wizard>
-
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)
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
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):
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"
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):
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()
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
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)
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")),
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)
self.list = []
backupfiles = config.plugins.configurationbackup.backupdirs.value
for entry in backupfiles:
- print entry
self.list.append((entry,))
self['list'].setList(self.list)
self.currentSelectedIndex = None
self.currentSelectedPackage = None
self.saved_currentSelectedPackage = None
+ self.restartRequired = False
self.onShown.append(self.setWindowTitle)
self.onLayoutFinish.append(self.getUpdateInfos)
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':
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):
quitMainloop(3)
else:
self.selectedFiles = []
+ self.restartRequired = False
self.detailsClosed(True)
def reloadPluginlist(self):
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()
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:
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)
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,
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)
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:
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:
'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
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')]
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')]
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
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):
<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" />
}, -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)
iStatus.stopWlanConsole()
def layoutFinished(self):
- self.setTitle(_("Wireless Network State"))
+ self.setTitle(_("Wireless network state"))
def resetList(self):
iStatus.getDataForInterface(self.iface,self.getInfoCB)
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)
"red": self.cancel,
"green": self.select,
})
+ iWlan.setInterface(self.iface)
+ self.w = iWlan.getInterface()
self.onLayoutFinish.append(self.layoutFinished)
self.getAccessPoints(refresh = False)
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()
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 = []
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()
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 = []
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] ))
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
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()
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
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
-from ChannelSelection import ChannelSelection, BouquetSelector
+from ChannelSelection import ChannelSelection, BouquetSelector, SilentBouquetSelector
from Components.ActionMap import ActionMap, HelpableActionMap
from Components.ActionMap import NumberActionMap
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)
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:
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
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")),
"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()
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:
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"))
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()
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
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))
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:
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)
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):
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)
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)
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)
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()
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",
{
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':
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':
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:
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:
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()
def cleanup(self):
iNetwork.stopLinkStateConsole()
iNetwork.stopDeactivateInterfaceConsole()
+ iNetwork.stopActivateInterfaceConsole()
iNetwork.stopPingConsole()
try:
from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
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()
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):
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)
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()
-# -*- 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
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"],
[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):
selectedKey -= 12
self["list"].setList(list)
-
def backClicked(self):
self.text = self["text"].getText()[:-1]
if text is None:
return
- text = text.encode("utf-8")
+ text = text.encode("UTF-8")
if text == "EXIT":
self.close(None)
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
-# -*- coding: utf-8 -*-
+# -*- coding: UTF-8 -*-
from enigma import eTimer
from Components.Language import language
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
self.mapping.append (u"wxyz9WXYZ") # 9
def setUseableChars(self, useable):
- self.useableChars = useable
+ self.useableChars = unicode(useable)
+
def getKey(self, num):
cnt=0
"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"
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."
msgstr "Eesti"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Etherneti võrguseade"
#
msgid "Eventview"
msgstr "Abi"
msgid "Hidden network"
-msgstr ""
+msgstr "Peidetud võrk"
#
msgid "Hidden network SSID"
"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"
"%d conflict(s) encountered when trying to add new timers:\n"
"%s"
msgstr ""
+"%d ristiriita(a) uusien ajastuksien lisäyksessä:\n"
+"%s"
#
#, python-format
#, python-format
msgid "%s: %s at %s"
-msgstr ""
+msgstr "%s: %s at %s"
#
msgid "(ZAP)"
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"
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 ""
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"
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"
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"
msgstr "Äänivalinnat"
msgid "Audio PID"
-msgstr ""
+msgstr "Ääni-PID"
msgid "Audio Sync"
msgstr "Äänen synkronointi"
"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"
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"
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"
"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 ""
msgstr "Sulje otsikon valinta"
msgid "Code rate HP"
-msgstr ""
+msgstr "Koodinopeus HP"
msgid "Code rate LP"
-msgstr ""
+msgstr "Koodinopeus LP"
#
msgid "Collection name"
#, python-format
msgid "Couldn't record due to invalid service %s"
-msgstr ""
+msgstr "Ei voitu tallentaa virheellisen kanavan takia %s"
#
msgid "Crashlog settings"
msgstr "DVB-S2"
msgid "DVD Drive"
-msgstr ""
+msgstr "DVD-asema"
#
msgid "DVD File Browser"
"Do you really want to delete %s\n"
"%s?"
msgstr ""
+"Oletko varma, että haluat poistaa %s\n"
+"%s?"
#
#, python-format
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: "
msgstr "Viro"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Verkkokortti"
#
msgid "Eventview"
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."
"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 ""
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"
msgstr ""
msgid "Guard interval"
-msgstr ""
+msgstr "Guard interval"
msgid "Guess existing timer based on begin/end"
msgstr "Arvaa olemassa oleva ajastus alku/loppuajan perusteella"
msgstr "Ohje"
msgid "Hidden network"
-msgstr ""
+msgstr "Piilotettu verkko"
#
msgid "Hidden network SSID"
msgstr "Piilotettu verkkonimi"
msgid "Hierarchy info"
-msgstr ""
+msgstr "Hierarkia info"
#
msgid "High bitrate support"
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"
msgstr "Sisäinen verkkokortti."
msgid "Internal USB Slot"
-msgstr ""
+msgstr "Sisäinen USB-portti"
msgid "Internal firmware updater"
msgstr "Edustaprosessorin ohjelmiston päivitysohjelma"
"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"
msgstr "Linkitetyt tallenteet ja DVD-valikko"
msgid "List available networks"
-msgstr ""
+msgstr "Näytä verkot"
#
msgid "List of Storage Devices"
msgstr "Manuaalihaku"
msgid "Manual configuration"
-msgstr ""
+msgstr "Manuaalinen määritys"
#
msgid "Manual transponder"
msgstr "Kanavaopas"
msgid "Multi-EPG bouquet selection"
-msgstr ""
+msgstr "Multi-EPG suosikkilistan valinta"
msgid "Multimedia"
msgstr "Multimedia"
msgstr "Usean kanavan tuki"
msgid "Multiplex"
-msgstr ""
+msgstr "Multipleksi"
#
msgid "Multisat"
msgstr "NFS-jako"
msgid "NIM"
-msgstr ""
+msgstr "NIM"
#
msgid "NOW"
msgstr "Verkkoavustaja"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Verkkonimi (SSID)"
msgid "Never"
msgstr "Ei koskaan"
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 ""
msgstr "Norja"
msgid "Not after"
-msgstr ""
+msgstr "Ei jälkeen"
msgid "Not before"
-msgstr ""
+msgstr "Ei ennen"
#
#, python-format
msgstr "Feedejä ei noudeta"
msgid "Not-Associated"
-msgstr ""
+msgstr "Ei assosioitu"
#
msgid ""
msgstr "OK, poista joitain laajennuksia"
msgid "ONID"
-msgstr ""
+msgstr "ONID"
#
msgid "OSD Settings"
msgstr "Jos haluat, lisää nimesi."
msgid "Orbital position"
-msgstr ""
+msgstr "Sijainti"
msgid "Outer Bound (+/-)"
msgstr "Ääriraja (+/-)"
msgstr "PAL"
msgid "PCR PID"
-msgstr ""
+msgstr "PCR PID"
#
msgid "PIDs"
msgstr "PIDit"
msgid "PMT PID"
-msgstr ""
+msgstr "PMT PID"
#
msgid "Package list update"
msgstr "Portugali"
msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Tallennettujen ajastuksien paikka ajastusluettelossa"
#
msgid "Positioner"
msgstr "RSS-lukija"
msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "RT8070/RT3070/RT3370 USB WLAN-ajuri"
msgid "Radio"
msgstr "Radio"
msgstr "Oikea"
msgid "Roll-off"
-msgstr ""
+msgstr "Roll-off"
#
msgid "Rotor turning speed"
msgstr "SD 30/60Hz lomittamaton tila"
msgid "SID"
-msgstr ""
+msgstr "SID"
msgid "SINGLE LAYER DVD"
msgstr "SINGLE LAYER DVD"
msgstr "Näytä tietopalkki kelauksien/hyppyjen aikana"
msgid "Show notification on conflicts"
-msgstr ""
+msgstr "Näytä ilmoitus ristiriidoista"
#
msgid "Show positioner movement"
msgstr "Vaihdettavat viritintyypit:"
msgid "Symbol rate"
-msgstr ""
+msgstr "Symbol rate"
#
msgid "System"
msgstr "TS-tiedosto on liian suuri ISO9660 1-tasolle!"
msgid "TSID"
-msgstr ""
+msgstr "TSID"
msgid "TV Charts of all users"
msgstr ""
msgstr "TV-järjestelmä"
msgid "TXT PID"
-msgstr ""
+msgstr "TXT PID"
#
msgid "Table of content for collection"
msgstr "Kumoa as.poisto"
msgid "Unencrypted"
-msgstr ""
+msgstr "Salaamaton"
msgid "UnhandledKey"
msgstr "TuntematonNäppäin"
msgstr "Universaali LNB"
msgid "Unknown"
-msgstr ""
+msgstr "Tuntematon"
msgid "Unknown network adapter."
msgstr "Tuntematon verkkosovitin"
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"
msgstr "Video-ulostulo"
msgid "Video PID"
-msgstr ""
+msgstr "Video PID"
#
msgid "Video Setup"
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 "
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."
msgstr "Määritetyt kanavat/palveluntarjoajat:"
msgid "at beginning"
-msgstr ""
+msgstr "alussa"
msgid "at end"
-msgstr ""
+msgstr "lopussa"
#
#, python-format
msgstr "monipuolinen"
msgid "config changed."
-msgstr ""
+msgstr "asetuksia muutettu."
#
msgid "config menu"
msgstr "tallennettu"
msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "Ajuri Realtek USB WLAN-laitteille"
#
msgid "edit alternatives"
msgstr "minuuttia"
msgid "missing parameter \"id\""
-msgstr ""
+msgstr "parametri \"id\" puuttuu"
#
msgid "month"
#, python-format
msgid "unable to find timer with id %i"
-msgstr ""
+msgstr "ei löydy ajastusta id %i"
#
msgid "unavailable"
msgstr "hyväksytyt"
msgid "wireless network interface"
-msgstr ""
+msgstr "WLAN-yhteys"
#
msgid "working"
"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"
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"
msgstr "Ekki velja"
msgid "Details for plugin: "
-msgstr ""
+msgstr "Upplýsingar um íforrit:"
#
msgid "Detected HDD:"
msgstr "Mappa:"
msgid "Direct playback of Youtube videos"
-msgstr ""
+msgstr "Bein afspilun af Youtube myndböndum"
#
msgid "Direct playback of linked titles without menu"
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 ""
"Do you really want to delete %s\n"
"%s?"
msgstr ""
+"Viltu örugglega eyða %s\n"
+"%s?"
#
#, python-format
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"
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:"
"(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)!"
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"
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"
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?"
"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 ""
msgstr "Eistneska"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet netkort"
#
msgid "Eventview"
msgstr "Keyra \"eftir atriði\" innan tímamarka"
msgid "Execute TuxboxPlugins"
-msgstr ""
+msgstr "Keyra Tuxbox Íforrit"
#
msgid "Execution Progress:"
"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"
"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"
"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 ""
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
"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"
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"
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"
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"
"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"
msgstr "Hjálp"
msgid "Hidden network"
-msgstr ""
+msgstr "Falið netkerfi"
#
msgid "Hidden network SSID"
msgstr "Falið nafn á netkerfi"
msgid "Hierarchy info"
-msgstr ""
+msgstr "Hierarchy upplýsingar"
#
msgid "High bitrate support"
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?"
msgstr "Ungverska"
msgid "IMAP4 e-mail viewer for the Dreambox"
-msgstr ""
+msgstr "IMAP4 póstskoðari fyrir Dreambox"
#
msgid "IP Address"
msgstr "IP:"
msgid "IRC Client for Enigma2"
-msgstr ""
+msgstr "IRC notandi fyrir Enigma2"
#
msgid "ISO file is too large for this filesystem!"
"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 ""
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"
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"
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"
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"
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"
"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"
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"
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"
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..."
msgstr "Handvirk leitun"
msgid "Manual configuration"
-msgstr ""
+msgstr "Handvirk stilling"
#
msgid "Manual transponder"
"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!"
msgstr "Valmynd"
msgid "Merlin Music Player and iDream"
-msgstr ""
+msgstr "Merlin spilarin og iDream"
#
msgid "Message"
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"
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"
msgstr "Mörg EPG"
msgid "Multi-EPG bouquet selection"
-msgstr ""
+msgstr "Mörg-EPG rásavanda val"
#
msgid "Multimedia"
"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"
msgstr "NFS samnýting"
msgid "NIM"
-msgstr ""
+msgstr "NIM"
#
msgid "NOW"
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"
msgstr "Nettengi ráðgjafi"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Netkerfis nafn (SSID)"
msgid "Never"
msgstr "Aldrei"
msgstr "Nýtt"
msgid "New PIN"
-msgstr ""
+msgstr "Nýtt PIN númer"
msgid "New Zealand"
msgstr "Nýja Sjáland"
msgstr "Það fannst ekkert þráðlaust net! Reyndu aftur."
msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Ekkert þráðlaust net fannst! Leita..."
#
msgid ""
msgstr "Norska"
msgid "Not after"
-msgstr ""
+msgstr "Ekki eftir"
msgid "Not before"
-msgstr ""
+msgstr "Ekki fyrir"
#
#, python-format
msgstr "Sæki ekki fæði rásir"
msgid "Not-Associated"
-msgstr ""
+msgstr "Ekki tengt"
#
msgid ""
msgstr "OK, eyða íforritum"
msgid "ONID"
-msgstr ""
+msgstr "ONID"
#
msgid "OSD Settings"
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"
msgstr "PAL"
msgid "PCR PID"
-msgstr ""
+msgstr "PCR PID"
#
msgid "PIDs"
msgstr "PIDs"
msgid "PMT PID"
-msgstr ""
+msgstr "PMT PID"
#
msgid "Package list update"
"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"
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"
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"
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"
"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"
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:"
msgstr "Íforrit"
msgid "PodCast streams podcasts to your Dreambox."
-msgstr ""
+msgstr "PodCast strauma hlaðvarp í Dreamboxið þitt."
msgid "Poland"
msgstr "Pólland"
msgstr "Portúgalska"
msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Staður lokinna tímastilltra upptaka í listanum"
#
msgid "Positioner"
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 "
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"
msgstr "Python framendi fyrir /tmp/mmi.socket"
msgid "Python frontend for /tmp/mmi.socket."
-msgstr ""
+msgstr "Python hluti fyrir /tmp/mmi.socket."
#
msgid "Quick"
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"
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"
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"
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"
msgstr "Endurnefna hrunskýrslu"
msgid "Rename your movies"
-msgstr ""
+msgstr "Endurnefna bíómyndirnar þínar"
#
msgid "Repeat"
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"
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"
msgstr "Keyri"
msgid "Running in testmode"
-msgstr ""
+msgstr "Keyri í prufu ham"
msgid "Russia"
msgstr "Rûssland"
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"
"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"
msgid "SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings"
msgstr ""
+"SatelliteEquipmentControl gerir mögulegt að fínstilla DiSEqC stillingar"
#
msgid "Satellites"
msgstr "Gervihnattaleit"
msgid "Satfinder helps you to align your dish"
-msgstr ""
+msgstr "Satfinder hjálpar við að stilla diskinn þinn"
msgid "Sats"
msgstr "Gervihn."
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ð"
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 ""
msgstr "Leitar nákvæmni"
msgid "Search through the EPG"
-msgstr ""
+msgstr "Leita í EPG"
msgid "Search type"
msgstr "Gerð leitar"
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"
"(SID fannst ekki í PAT)"
msgid "Service reference"
-msgstr ""
+msgstr "Rása upplýsingar"
#
msgid "Service scan"
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"
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"
msgstr "Sýna við viðbótar valmynd"
msgid "Show info screen"
-msgstr ""
+msgstr "Sýna upplýsingar"
#
msgid "Show infobar on channel change"
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"
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"
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"
msgstr "Skinn"
msgid "SkinSelector shows a menu with selectable skins"
-msgstr ""
+msgstr "Skinn val sýnir valmynd með veljanlegum skinnum"
#
msgid "Skins"
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"
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"
msgstr "Std. fæðirásir"
msgid "Step by step network configuration"
-msgstr ""
+msgstr "Netkerfis stillingar stig af stigi"
#
msgid "Step east"
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..."
msgstr "Sunnudagur"
msgid "Support \"Fast Scan\"?"
-msgstr ""
+msgstr "Styður \"Hrað skönnun\"?"
#
msgid "Swap Services"
msgstr "Gerðir umskiptanlegra móttakara:"
msgid "Symbol rate"
-msgstr ""
+msgstr "Bitahraði"
#
msgid "System"
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"
msgstr "Hiti og viftu stillingar"
msgid "Temperature-dependent fan control."
-msgstr ""
+msgstr "Hitastýrð hraðastýring fyrir viftu."
#
msgid "Terrestrial"
msgstr "Prófa stillingar netkorts í Dreamboxinu.\n"
msgid "Test your DiSEqC equipment"
-msgstr ""
+msgstr "Prófa DiSEqC búnaðinn þinn"
#
msgid "Test-Messagebox?"
"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 "
"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"
"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"
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."
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."
"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 ""
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"
msgstr "Spor"
msgid "TrafficInfo shows german traffic information."
-msgstr ""
+msgstr "TrafficInfo sýnir upplýsingar um umferð í Þýskalandi."
#
msgid "Translation"
msgstr "Hætta við að hætta við"
msgid "Unencrypted"
-msgstr ""
+msgstr "Opin rás"
msgid "UnhandledKey"
msgstr "Ónotaður"
msgstr "Venjulegt LNB"
msgid "Unknown"
-msgstr ""
+msgstr "Óþekkt"
msgid "Unknown network adapter."
msgstr "Óþekkt netkort."
msgstr "Ekki stutt"
msgid "UnwetterInfo shows german storm information."
-msgstr ""
+msgstr "Unwetterinfo sýnir þýskar stormviðvaranir"
#
msgid "Update"
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"
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!"
"íforrit!"
msgid "Verifying your internet connection..."
-msgstr ""
+msgstr "Athuga með internet tenginguna..."
#
msgid "Vertical"
msgstr "Mynd útgangur"
msgid "Video PID"
-msgstr ""
+msgstr "Video PID"
#
msgid "Video Setup"
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:"
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"
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..."
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"
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"
"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 "
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 "
"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 "
"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 "
"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!"
"\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 "
"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"
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: "
msgstr "Estone"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Interfaccia di rete Ethernet"
#
msgid "Eventview"
msgstr "Aiuto"
msgid "Hidden network"
-msgstr ""
+msgstr "Rete nascosta"
#
msgid "Hidden network SSID"
"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"
msgstr "Titoli collegati ad un Menu DVD"
msgid "List available networks"
-msgstr ""
+msgstr "Elencare le reti disponibili"
#
msgid "List of Storage Devices"
msgstr "Ricerca manuale"
msgid "Manual configuration"
-msgstr ""
+msgstr "Configurazione manuale"
#
msgid "Manual transponder"
msgstr "Conf. guidata rete"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Nome rete (SSID)"
#
msgid "Never"
msgstr "Nessuna rete wireless rilevata! Aggiornare."
msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Nessuna rete wireless trovata! Ricerca in corso..."
#
msgid ""
msgstr "Voci feed non recuperate"
msgid "Not-Associated"
-msgstr ""
+msgstr "Non associato"
#
msgid ""
msgstr "Plugin per visualizzare RSS"
msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "Driver wireless-n USB RT8070/RT3070/RT3370"
#
msgid "Radio"
msgstr "Annull. rimoz."
msgid "Unencrypted"
-msgstr ""
+msgstr "In chiaro"
msgid "UnhandledKey"
msgstr "Tasto non gestito"
msgstr "LNB Universale"
msgid "Unknown"
-msgstr ""
+msgstr "Sconosciuto"
msgid "Unknown network adapter."
msgstr "Interfaccia di rete sconosciuta."
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 "
msgstr "Fatto!"
msgid "driver for Realtek USB wireless devices"
-msgstr ""
+msgstr "Driver per penne USB basate su chipset Realtek"
#
msgid "edit alternatives"
msgstr "Lista bianca"
msgid "wireless network interface"
-msgstr ""
+msgstr "Interfaccia di rete wireless"
#
msgid "working"
"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"
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: "
msgstr "Estų"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet tinklo sąsaja"
msgid "Eventview"
msgstr "Įvykių peržiūra"
msgstr "Pagalba"
msgid "Hidden network"
-msgstr ""
+msgstr "Paslėptas tinklas"
msgid "Hidden network SSID"
msgstr "Paslėptas tinklo SSID"
"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"
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"
msgstr "Rankinė paieška"
msgid "Manual configuration"
-msgstr ""
+msgstr "Rankinė konfigūracija"
msgid "Manual transponder"
msgstr "Rankinis transponderis"
msgstr "Tinklo vedlys"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Tinklo pavadinimas (SSID)"
msgid "Never"
msgstr "Niekada"
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"
msgstr "Ne perdavimo įėjimų nustatymas"
msgid "Not-Associated"
-msgstr ""
+msgstr "Ne-Asocijuotas"
msgid ""
"Nothing to scan!\n"
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"
msgstr "Atšaukti šalinimą"
msgid "Unencrypted"
-msgstr ""
+msgstr "Nešifruota"
msgid "UnhandledKey"
msgstr "Nežinomas mygtukas"
msgstr "Universali LNB"
msgid "Unknown"
-msgstr ""
+msgstr "Nežinoma"
msgid "Unknown network adapter."
msgstr "Nežinomas tinklo adapteris"
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 "
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"
msgstr "baltas sąrašas"
msgid "wireless network interface"
-msgstr ""
+msgstr "bevielio tinklo sąsaja"
msgid "working"
msgstr "dirba"
"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"
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"
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"
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"
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."
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"
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: "
msgstr "Estlands"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet netwerk interface"
#
msgid "Eventview"
"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
"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"
msgstr "Help"
msgid "Hidden network"
-msgstr ""
+msgstr "Verborgen netwerk"
#
msgid "Hidden network SSID"
msgstr "Verbind titels met een DVD menu"
msgid "List available networks"
-msgstr ""
+msgstr "Lijst van beschikbare netwerken"
#
msgid "List of Storage Devices"
msgstr "Handmatig zoeken"
msgid "Manual configuration"
-msgstr ""
+msgstr "Handmatige configuratie"
#
msgid "Manual transponder"
"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"
msgstr "Netwerk wizard"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Netwerknaam (SSID)"
#
msgid "Never"
msgstr "Geen draadloze netwerken gevonden! Vernieuw."
msgid "No wireless networks found! Searching..."
-msgstr ""
+msgstr "Geen draadloze netwerken gevonden! Zoeken ..."
#
msgid ""
msgstr "Niet ophalen Feed items"
msgid "Not-Associated"
-msgstr ""
+msgstr "Niet geassocieerd"
#
msgid ""
msgstr "Portugees"
msgid "Position of finished Timers in Timerlist"
-msgstr ""
+msgstr "Positie van voltooide timers in timerlijst"
#
msgid "Positioner"
msgstr "RSS-viewer"
msgid "RT8070/RT3070/RT3370 USB wireless-n driver"
-msgstr ""
+msgstr "RT8070/RT3070/RT3370 USB wireless-n driver"
#
msgid "Radio"
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"
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"
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."
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 ""
msgstr "Ongedaan"
msgid "Unencrypted"
-msgstr ""
+msgstr "Ongecodeerd"
#
msgid "UnhandledKey"
msgstr "Universeel LNB"
msgid "Unknown"
-msgstr ""
+msgstr "Onbekend"
msgid "Unknown network adapter."
msgstr "Onbekende netwerkadapter."
msgid "Use and control multiple Dreamboxes with different RCs."
msgstr ""
+"Gebruik en de beheer meerdere Dreamboxen met verschillende "
+"afstandsbedieningen."
#
msgid "Use power measurement"
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 "
msgstr "Doorgaan"
msgid "control multiple Dreamboxes with different RCs"
-msgstr ""
+msgstr "bedien meerdere Dreamboxen met verschillende afstandsbedieningen"
#
msgid "copy to bouquets"
msgstr "witte lijst"
msgid "wireless network interface"
-msgstr ""
+msgstr "draadloze netwerk interface"
#
msgid "working"
"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 "
msgstr "Estónčina"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Rozhranie siete Eternet"
msgid "Eventview"
msgstr "Prehľad programov"
"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"
msgstr "Ručné vyhľadávanie"
msgid "Manual configuration"
-msgstr ""
+msgstr "Ručná konfigurácia"
msgid "Manual transponder"
msgstr "Transpondér ručne"
msgstr "Sprievodca nast. siete"
msgid "Networkname (SSID)"
-msgstr ""
+msgstr "Názov siete (SSID)"
msgid "Never"
msgstr "Nikdy"
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"
msgstr "Späť odinštalácia"
msgid "Unencrypted"
-msgstr ""
+msgstr "Nešifrované"
msgid "UnhandledKey"
msgstr ""
msgstr "Univerzálny LNB"
msgid "Unknown"
-msgstr ""
+msgstr "Neznáme"
msgid "Unknown network adapter."
msgstr "Neznámy sieťový adaptér."
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 "
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"
msgstr "biela listina"
msgid "wireless network interface"
-msgstr ""
+msgstr "rozhranie bezdrôtovej siete"
msgid "working"
msgstr "pracujem"
"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"
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."
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 ""
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"
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"
"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"
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"
"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 ""
"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"
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!"
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:"
#, 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"
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."
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
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"
msgstr "DVB-S2"
msgid "DVD Drive"
-msgstr ""
+msgstr "DVD Läsare"
#
msgid "DVD File Browser"
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"
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"
msgstr "Dir:"
msgid "Direct playback of Youtube videos"
-msgstr ""
+msgstr "Direkt playback av Youtube videos"
#
msgid "Direct playback of linked titles without menu"
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 ""
"Do you really want to delete %s\n"
"%s?"
msgstr ""
+"Vill du verkligen ta bort %s\n"
+"%s?"
#
#, python-format
msgstr "Ladda ner Video"
msgid "Download files from Rapidshare"
-msgstr ""
+msgstr "Ladda ner från Rapidshare"
#
msgid "Download location"
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: "
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"
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"
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"
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?"
msgstr "Estniska"
msgid "Ethernet network interface"
-msgstr ""
+msgstr "Ethernet nätverkskort"
#
msgid "Eventview"
"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"
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
"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"