From: thedoc Date: Fri, 11 Dec 2009 12:01:26 +0000 (+0100) Subject: Merge branch 'fantempplugin' into experimental X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=28dcf6be0ee22fedd728fef11ccff484f8a851e8;hp=74378b3ebe7dc0548cb4e4b6a0d54b0e871c0264 Merge branch 'fantempplugin' into experimental --- diff --git a/RecordTimer.py b/RecordTimer.py index 4907f64..f670417 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -2,6 +2,7 @@ from enigma import eEPGCache, getBestPlayableServiceReference, \ eServiceReference, iRecordableService, quitMainloop from Components.config import config +from Components.UsageConfig import defaultMoviePath from Components.TimerSanityCheck import TimerSanityCheck from Screens.MessageBox import MessageBox @@ -141,11 +142,13 @@ class RecordTimerEntry(timer.TimerEntry, object): if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) - if self.dirname and not Directories.fileExists(self.dirname, 'w'): - self.dirnameHadToFallback = True - self.Filename = Directories.getRecordingFilename(filename, None) + if not self.dirname or not Directories.fileExists(self.dirname, 'w'): + if self.dirname: + self.dirnameHadToFallback = True + dirname = defaultMoviePath() else: - self.Filename = Directories.getRecordingFilename(filename, self.dirname) + dirname = self.dirname + self.Filename = Directories.getRecordingFilename(filename, dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename) #begin_date + " - " + service_name + description) diff --git a/configure.ac b/configure.ac index 1880100..aa2fa3e 100755 --- a/configure.ac +++ b/configure.ac @@ -177,6 +177,7 @@ lib/python/Plugins/SystemPlugins/VideoTune/meta/Makefile lib/python/Plugins/SystemPlugins/Videomode/Makefile lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile lib/python/Plugins/SystemPlugins/WirelessLan/Makefile +lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile lib/python/Tools/Makefile lib/service/Makefile lib/components/Makefile diff --git a/data/menu.xml b/data/menu.xml index c7fb889..59195f1 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -70,7 +70,7 @@ --> - + @@ -104,6 +104,7 @@ self.session.openWithCallback(msgClosed, FactoryReset) 2 3 - 1 + 1 + 1 diff --git a/data/skin_default.xml b/data/skin_default.xml index 16504ab..71f579c 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -43,7 +43,9 @@ - + + + @@ -248,7 +250,7 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count > 7 and 2 or 3) - + diff --git a/data/skin_default/icons/dish.png b/data/skin_default/icons/dish.png index f3c6548..6148e07 100644 Binary files a/data/skin_default/icons/dish.png and b/data/skin_default/icons/dish.png differ diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 3412c84..91f24ba 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -37,7 +37,6 @@ void eFilePushThread::thread() size_t written_since_last_sync = 0; - int already_empty = 0; eDebug("FILEPUSH THREAD START"); /* we set the signal to not restart syscalls, so we can detect our signal. */ @@ -186,21 +185,23 @@ void eFilePushThread::thread() if (m_buf_end == 0) { /* on EOF, try COMMITting once. */ - if (m_send_pvr_commit && !already_empty) + if (m_send_pvr_commit) { - eDebug("sending PVR commit"); - struct pollfd pfd; pfd.fd = m_fd_dest; pfd.events = POLLIN; - poll(&pfd, 1, 10000); - sleep(5); /* HACK to allow ES buffer to drain */ - already_empty = 1; -// if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR) -// continue; - eDebug("commit done"); - /* well check again */ - continue; + switch (poll(&pfd, 1, 250)) // wait for 250ms + { + case 0: + eDebug("wait for driver eof timeout"); + continue; + case 1: + eDebug("wait for driver eof ok"); + break; + default: + eDebug("wait for driver eof aborted by signal"); + continue; + } } /* in stream_mode, we are sending EOF events @@ -230,7 +231,6 @@ void eFilePushThread::thread() bytes_read += m_buf_end; if (m_sg) current_span_remaining -= m_buf_end; - already_empty = 0; } // printf("FILEPUSH: read %d bytes\n", m_buf_end); } diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 710cc42..ef8dadc 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1045,9 +1045,9 @@ int eTSMPEGDecoder::setState() int eTSMPEGDecoder::m_pcm_delay=-1, eTSMPEGDecoder::m_ac3_delay=-1; -RESULT eTSMPEGDecoder::setPCMDelay(int delay) +RESULT eTSMPEGDecoder::setHwPCMDelay(int delay) { - if (m_decoder == 0 && delay != m_pcm_delay ) + if (delay != m_pcm_delay ) { FILE *fp = fopen("/proc/stb/audio/audio_delay_pcm", "w"); if (fp) @@ -1061,9 +1061,9 @@ RESULT eTSMPEGDecoder::setPCMDelay(int delay) return -1; } -RESULT eTSMPEGDecoder::setAC3Delay(int delay) +RESULT eTSMPEGDecoder::setHwAC3Delay(int delay) { - if ( m_decoder == 0 && delay != m_ac3_delay ) + if ( delay != m_ac3_delay ) { FILE *fp = fopen("/proc/stb/audio/audio_delay_bitstream", "w"); if (fp) @@ -1077,6 +1077,17 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay) return -1; } + +RESULT eTSMPEGDecoder::setPCMDelay(int delay) +{ + return m_decoder == 0 ? setHwPCMDelay(delay) : -1; +} + +RESULT eTSMPEGDecoder::setAC3Delay(int delay) +{ + return m_decoder == 0 ? setHwAC3Delay(delay) : -1; +} + eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder) : m_demux(demux), m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1), diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h index b53638b..3a0fbac 100644 --- a/lib/dvb/decoder.h +++ b/lib/dvb/decoder.h @@ -193,6 +193,8 @@ public: int getVideoProgressive(); int getVideoFrameRate(); int getVideoAspect(); + static RESULT setHwPCMDelay(int delay); + static RESULT setHwAC3Delay(int delay); }; #endif diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 894287e..656b6da 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1324,16 +1324,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off return; } - m_cue->m_lock.RdLock(); - if (!m_cue->m_decoding_demux) - { - start = current_offset; - size = max; - eDebug("getNextSourceSpan, no decoding demux. forcing normal play"); - m_cue->m_lock.Unlock(); - return; - } - if (m_skipmode_n) { eDebug("skipmode %d:%d (x%d)", m_skipmode_m, m_skipmode_n, m_skipmode_frames); @@ -1341,7 +1331,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off } eDebug("getNextSourceSpan, current offset is %08llx, m_skipmode_m = %d!", current_offset, m_skipmode_m); - int frame_skip_success = 0; if (m_skipmode_m) @@ -1386,6 +1375,8 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off } } + m_cue->m_lock.RdLock(); + while (!m_cue->m_seek_requests.empty()) { std::pair seek = m_cue->m_seek_requests.front(); @@ -1410,6 +1401,13 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("decoder getPTS failed, can't seek relative"); continue; } + if (!m_cue->m_decoding_demux) + { + eDebug("getNextSourceSpan, no decoding demux. couldn't seek to %llx... ignore request!", pts); + start = current_offset; + size = max; + continue; + } if (getCurrentPosition(m_cue->m_decoding_demux, now, 1)) { eDebug("seekTo: getCurrentPosition failed!"); @@ -1462,12 +1460,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off continue; } - size_t iframe_len; - /* try to align to iframe */ - int direction = pts < 0 ? -1 : 1; - m_tstools.findFrame(offset, iframe_len, direction); - - eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx (skipped additional %d frames due to iframe re-align)", relative, pts, offset, direction); + eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset); current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */ } diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 2dc3641..48cbfbf 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -255,6 +255,11 @@ void eEPGCache::DVBChannelAdded(eDVBChannel *chan) #ifdef ENABLE_PRIVATE_EPG data->m_PrivatePid = -1; #endif +#ifdef ENABLE_MHW_EPG + data->m_mhw2_channel_pid = 0x231; // defaults for astra 19.2 D+ + data->m_mhw2_title_pid = 0x234; // defaults for astra 19.2 D+ + data->m_mhw2_summary_pid = 0x236; // defaults for astra 19.2 D+ +#endif singleLock s(channel_map_lock); m_knownChannels.insert( std::pair(chan, data) ); chan->connectStateChange(slot(*this, &eEPGCache::DVBChannelStateChanged), data->m_stateChangedConn); @@ -880,6 +885,62 @@ void eEPGCache::gotMessage( const Message &msg ) break; } #endif +#ifdef ENABLE_MHW_EPG + case Message::got_mhw2_channel_pid: + { + singleLock s(channel_map_lock); + for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it) + { + eDVBChannel *channel = (eDVBChannel*) it->first; + channel_data *data = it->second; + eDVBChannelID chid = channel->getChannelID(); + if ( chid.transport_stream_id.get() == msg.service.tsid && + chid.original_network_id.get() == msg.service.onid ) + { + data->m_mhw2_channel_pid = msg.pid; + eDebug("[EPGC] got mhw2 channel pid %04x", msg.pid); + break; + } + } + break; + } + case Message::got_mhw2_title_pid: + { + singleLock s(channel_map_lock); + for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it) + { + eDVBChannel *channel = (eDVBChannel*) it->first; + channel_data *data = it->second; + eDVBChannelID chid = channel->getChannelID(); + if ( chid.transport_stream_id.get() == msg.service.tsid && + chid.original_network_id.get() == msg.service.onid ) + { + data->m_mhw2_title_pid = msg.pid; + eDebug("[EPGC] got mhw2 title pid %04x", msg.pid); + break; + } + } + break; + } + case Message::got_mhw2_summary_pid: + { + singleLock s(channel_map_lock); + for (channelMapIterator it(m_knownChannels.begin()); it != m_knownChannels.end(); ++it) + { + eDVBChannel *channel = (eDVBChannel*) it->first; + channel_data *data = it->second; + eDVBChannelID chid = channel->getChannelID(); + if ( chid.transport_stream_id.get() == msg.service.tsid && + chid.original_network_id.get() == msg.service.onid ) + { + data->m_mhw2_summary_pid = msg.pid; + eDebug("[EPGC] got mhw2 summary pid %04x", msg.pid); + break; + } + } + break; + } +#endif case Message::timeChanged: cleanLoop(); break; @@ -1175,7 +1236,7 @@ void eEPGCache::channel_data::startEPG() isRunning |= MHW; memcpy(&m_MHWFilterMask, &mask, sizeof(eDVBSectionFilterMask)); - mask.pid = 0x231; + mask.pid = m_mhw2_channel_pid; mask.data[0] = 0xC8; mask.mask[0] = 0xFF; mask.data[1] = 0; @@ -1186,6 +1247,7 @@ void eEPGCache::channel_data::startEPG() memcpy(&m_MHWFilterMask2, &mask, sizeof(eDVBSectionFilterMask)); mask.data[1] = 0; mask.mask[1] = 0; + m_MHWTimeoutet=false; #endif mask.pid = 0x12; @@ -2489,6 +2551,50 @@ void eEPGCache::PMTready(eDVBServicePMTHandler *pmthandler) int tmp=0; switch ((*es)->getType()) { + case 0xC1: // user private + for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin(); + desc != (*es)->getDescriptors()->end(); ++desc) + { + switch ((*desc)->getTag()) + { + case 0xC2: // user defined + if ((*desc)->getLength() == 8) + { + __u8 buffer[10]; + (*desc)->writeToBuffer(buffer); + if (!strncmp((unsigned char*)buffer+2, "EPGDATA", 7)) + { + eServiceReferenceDVB ref; + if (!pmthandler->getServiceReference(ref)) + { + int pid = (*es)->getPid(); + messages.send(Message(Message::got_mhw2_channel_pid, ref, pid)); + } + } + else if(!strncmp((unsigned char*)buffer+2, "FICHAS", 6)) + { + eServiceReferenceDVB ref; + if (!pmthandler->getServiceReference(ref)) + { + int pid = (*es)->getPid(); + messages.send(Message(Message::got_mhw2_summary_pid, ref, pid)); + } + } + else if(!strncmp((unsigned char*)buffer+2, "GENEROS", 7)) + { + eServiceReferenceDVB ref; + if (!pmthandler->getServiceReference(ref)) + { + int pid = (*es)->getPid(); + messages.send(Message(Message::got_mhw2_title_pid, ref, pid)); + } + } + } + break; + default: + break; + } + } case 0x05: // private for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin(); desc != (*es)->getDescriptors()->end(); ++desc) @@ -2893,7 +2999,7 @@ void eEPGCache::channel_data::storeTitle(std::map<__u32, mhw_title_t>::iterator packet->segment_last_table_id = 0x50; __u8 *title = isMHW2 ? ((__u8*)(itTitle->second.title))-4 : (__u8*)itTitle->second.title; - std::string prog_title = (char *) delimitName( title, name, isMHW2 ? 33 : 23 ); + std::string prog_title = (char *) delimitName( title, name, isMHW2 ? 35 : 23 ); int prog_title_length = prog_title.length(); int packet_length = EIT_SIZE + EIT_LOOP_SIZE + EIT_SHORT_EVENT_DESCRIPTOR_SIZE + @@ -3222,14 +3328,14 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data) { eDebug("[EPGC] mhw2 aborted %d", state); } - else if (m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0) + else if (m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0) // Channels table { - int num_channels = data[119]; + int num_channels = data[120]; m_channels.resize(num_channels); - if(dataLen > 119) + if(dataLen > 120) { - int ptr = 120 + 8 * num_channels; + int ptr = 121 + 8 * num_channels; if( dataLen > ptr ) { for( int chid = 0; chid < num_channels; ++chid ) @@ -3245,7 +3351,7 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data) else goto abort; // data seems consistent... - const __u8 *tmp = data+120; + const __u8 *tmp = data+121; for (int i=0; i < num_channels; ++i) { mhw_channel_name_t channel; @@ -3256,6 +3362,7 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data) channel.channel_id_hi = *(tmp++); channel.channel_id_lo = *(tmp++); m_channels[i]=channel; +// eDebug("%d(%02x) %04x: %02x %02x", i, i, (channel.channel_id_hi << 8) | channel.channel_id_lo, *tmp, *(tmp+1)); tmp+=2; } for (int i=0; i < num_channels; ++i) @@ -3266,83 +3373,86 @@ void eEPGCache::channel_data::readMHWData2(const __u8 *data) for (; x < channel_name_len; ++x) channel.name[x]=*(tmp++); channel.name[x+1]=0; +// eDebug("%d(%02x) %s", i, i, channel.name); } haveData |= MHW; eDebug("[EPGC] mhw2 %d channels found", m_channels.size()); } - else if (m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1) + else if (m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1) { // Themes table eDebug("[EPGC] mhw2 themes nyi"); } - else if (m_MHWFilterMask2.pid == 0x234 && m_MHWFilterMask2.data[0] == 0xe6) + else if (m_MHWFilterMask2.pid == m_mhw2_title_pid && m_MHWFilterMask2.data[0] == 0xe6) // Titles table { int pos=18; - bool valid=true; - int len = ((data[1]&0xf)<<8) + data[2] - 16; + bool valid=false; bool finish=false; - if(data[dataLen-1] != 0xff) - return; - while( pos < dataLen ) + +// eDebug("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", +// data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], +// data[11], data[12], data[13], data[14], data[15], data[16], data[17] ); + + while( pos < dataLen && !valid) { - valid = false; - pos += 7; - if( pos < dataLen ) - { - pos += 3; - if( pos < dataLen ) - { - if( data[pos] > 0xc0 ) - { - pos += ( data[pos] - 0xc0 ); - pos += 4; - if( pos < dataLen ) - { - if( data[pos] == 0xff ) - { - ++pos; - valid = true; - } - } - } - } - } - if( !valid ) - { - if (checkTimeout()) - goto start_summary; - return; - } + pos += 18; + pos += (data[pos] & 0x3F) + 4; + if( pos == dataLen ) + valid = true; } + + if (!valid) + { + if (dataLen > 18) + eDebug("mhw2 title table invalid!!"); + if (checkTimeout()) + goto abort; + if (!m_MHWTimeoutTimer->isActive()) + startTimeout(5000); + return; // continue reading + } + // data seems consistent... mhw_title_t title; pos = 18; - while (pos < len) + while (pos < dataLen) { +// eDebugNoNewLine(" [%02x] %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x [%02x %02x %02x %02x %02x %02x %02x] LL - DESCR - ", +// data[pos], data[pos+1], data[pos+2], data[pos+3], data[pos+4], data[pos+5], data[pos+6], data[pos+7], +// data[pos+8], data[pos+9], data[pos+10], data[pos+11], data[pos+12], data[pos+13], data[pos+14], data[pos+15], data[pos+16], data[pos+17]); title.channel_id = data[pos]+1; - title.program_id_ml = data[pos+1]; - title.program_id_lo = data[pos+2]; - title.mhw2_mjd_hi = data[pos+3]; - title.mhw2_mjd_lo = data[pos+4]; - title.mhw2_hours = data[pos+5]; - title.mhw2_minutes = data[pos+6]; - title.mhw2_seconds = data[pos+7]; - int duration = ((data[pos+8] << 8)|data[pos+9]) >> 4; + title.mhw2_mjd_hi = data[pos+11]; + title.mhw2_mjd_lo = data[pos+12]; + title.mhw2_hours = data[pos+13]; + title.mhw2_minutes = data[pos+14]; + title.mhw2_seconds = data[pos+15]; + int duration = ((data[pos+16] << 8)|data[pos+17]) >> 4; title.mhw2_duration_hi = (duration&0xFF00) >> 8; title.mhw2_duration_lo = duration&0xFF; - __u8 slen = data[pos+10] & 0x3f; + + // Create unique key per title + __u32 title_id = (data[pos+7] << 24) | (data[pos+8] << 16) | (data[pos+9] << 8) | data[pos+10]; + + __u8 slen = data[pos+18] & 0x3f; __u8 *dest = ((__u8*)title.title)-4; - memcpy(dest, &data[pos+11], slen>33 ? 33 : slen); - memset(dest+slen, 0, 33-slen); - pos += 11 + slen; + memcpy(dest, &data[pos+19], slen>35 ? 35 : slen); + memset(dest+slen, 0, 35-slen); + pos += 19 + slen; +// eDebug("%02x [%02x %02x]: %s", data[pos], data[pos+1], data[pos+2], dest); + // not used theme id (data[7] & 0x3f) + (data[pos] & 0x3f); __u32 summary_id = (data[pos+1] << 8) | data[pos+2]; - // Create unique key per title - __u32 title_id = (title.channel_id<<16) | (title.program_id_ml<<8) | title.program_id_lo; +// if (title.channel_id > m_channels.size()) +// eDebug("channel_id(%d %02x) to big!!", title.channel_id); + +// eDebug("pos %d prog_id %02x %02x chid %02x summary_id %04x dest %p len %d\n", +// pos, title.program_id_ml, title.program_id_lo, title.channel_id, summary_id, dest, slen); - pos += 4; +// eDebug("title_id %08x -> summary_id %04x\n", title_id, summary_id); + + pos += 3; std::map<__u32, mhw_title_t>::iterator it = m_titles.find( title_id ); if ( it == m_titles.end() ) @@ -3381,7 +3491,7 @@ start_summary: { // Titles table has been read, there are summaries to read. // Start reading summaries, store corresponding titles on the fly. - startMHWReader2(0x236, 0x96); + startMHWReader2(m_mhw2_summary_pid, 0x96); startTimeout(15000); return; } @@ -3389,7 +3499,7 @@ start_summary: else return; } - else if (m_MHWFilterMask2.pid == 0x236 && m_MHWFilterMask2.data[0] == 0x96) + else if (m_MHWFilterMask2.pid == m_mhw2_summary_pid && m_MHWFilterMask2.data[0] == 0x96) // Summaries table { if (!checkTimeout()) @@ -3423,10 +3533,13 @@ start_summary: } else return; // continue reading + if (valid) { // data seems consistent... __u32 summary_id = (data[3]<<8)|data[4]; +// eDebug ("summary id %04x\n", summary_id); +// eDebug("[%02x %02x] %02x %02x %02x %02x %02x %02x %02x %02x XX\n", data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12], data[13] ); // ugly workaround to convert const __u8* to char* char *tmp=0; @@ -3444,7 +3557,7 @@ start_summary: len += lenline + 1; } if( len > 0 ) - tmp[pos+len] = 0; + tmp[pos+len] = 0; else tmp[pos+1] = 0; @@ -3460,8 +3573,11 @@ start_summary: startTimeout(15000); std::string the_text = (char *) (data + pos + 1); +// eDebug ("summary id %04x : %s\n", summary_id, data+pos+1); + while( itProgId != m_program_ids.end() && itProgId->first == summary_id ) { +// eDebug("."); // Find corresponding title, store title and summary in epgcache. std::map<__u32, mhw_title_t>::iterator itTitle( m_titles.find( itProgId->second ) ); if ( itTitle != m_titles.end() ) @@ -3481,16 +3597,16 @@ start_summary: } if (isRunning & eEPGCache::MHW) { - if ( m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0) + if ( m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 0) { // Channels table has been read, start reading the themes table. - startMHWReader2(0x231, 0xC8, 1); + startMHWReader2(m_mhw2_channel_pid, 0xC8, 1); return; } - else if ( m_MHWFilterMask2.pid == 0x231 && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1) + else if ( m_MHWFilterMask2.pid == m_mhw2_channel_pid && m_MHWFilterMask2.data[0] == 0xC8 && m_MHWFilterMask2.data[1] == 1) { // Themes table has been read, start reading the titles table. - startMHWReader2(0x234, 0xe6); + startMHWReader2(m_mhw2_title_pid, 0xe6); return; } else diff --git a/lib/dvb/epgcache.h b/lib/dvb/epgcache.h index 7d1b163..4d45d87 100644 --- a/lib/dvb/epgcache.h +++ b/lib/dvb/epgcache.h @@ -202,6 +202,7 @@ class eEPGCache: public eMainloop, private eThread, public Object ePtr m_MHWReader, m_MHWReader2; eDVBSectionFilterMask m_MHWFilterMask, m_MHWFilterMask2; ePtr m_MHWTimeoutTimer; + __u16 m_mhw2_channel_pid, m_mhw2_title_pid, m_mhw2_summary_pid; bool m_MHWTimeoutet; void MHWTimeout() { m_MHWTimeoutet=true; } void readMHWData(const __u8 *data); @@ -242,6 +243,9 @@ public: leaveChannel, quit, got_private_pid, + got_mhw2_channel_pid, + got_mhw2_title_pid, + got_mhw2_summary_pid, timeChanged }; int type; diff --git a/lib/dvb/lowlevel/mhw.h b/lib/dvb/lowlevel/mhw.h index 0b4904f..f06c86e 100644 --- a/lib/dvb/lowlevel/mhw.h +++ b/lib/dvb/lowlevel/mhw.h @@ -78,9 +78,9 @@ typedef struct { u_char ppv_id_ml :8; u_char ppv_id_lo :8; u_char program_id_hi :8; - u_char program_id_mh :8; // mhw2_title end (33chars max) + u_char program_id_mh :8; u_char program_id_ml :8; - u_char program_id_lo :8; + u_char program_id_lo :8; // mhw2_title end (35chars max) u_char mhw2_mjd_hi :8; u_char mhw2_mjd_lo :8; u_char mhw2_duration_hi :8; diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 1393bf7..5cdecbd 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -244,6 +244,7 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts, int marg) off_t last = 0; off_t last2 = 0; pts_t lastc = 0; + ts += 1; // Add rounding error margin for (std::map::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i) { pts_t delta = getDelta(i->first); diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index a9eef40..2e5c566 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -652,18 +652,23 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int frame_types) { - int nr_frames = 0; + int nr_frames, direction; // eDebug("trying to move %d frames at %llx", distance, offset); frame_types = frametypeI; /* TODO: intelligent "allow IP frames when not crossing an I-Frame */ - int direction = distance > 0 ? 0 : -1; - distance = abs(distance); - off_t new_offset = offset; size_t new_len = len; int first = 1; + if (distance > 0) { + direction = 0; + nr_frames = 0; + } else { + direction = -1; + nr_frames = -1; + distance = -distance+1; + } while (distance > 0) { int dir = direction; @@ -677,12 +682,18 @@ int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int // eDebug("we moved %d, %d to go frames (now at %llx)", dir, distance, new_offset); - if (distance >= 0 || first) + if (distance >= 0 || direction == 0) { first = 0; offset = new_offset; len = new_len; nr_frames += abs(dir); + } + else if (first) { + first = 0; + offset = new_offset; + len = new_len; + nr_frames += abs(dir) + distance; // never jump forward during rewind } } diff --git a/lib/python/Components/ChoiceList.py b/lib/python/Components/ChoiceList.py old mode 100644 new mode 100755 index fe505c2..4700e9e --- a/lib/python/Components/ChoiceList.py +++ b/lib/python/Components/ChoiceList.py @@ -1,5 +1,5 @@ from MenuList import MenuList -from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename +from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont from Tools.LoadPixmap import LoadPixmap @@ -10,7 +10,7 @@ def ChoiceEntryComponent(key, text): else: res.append((eListboxPythonMultiContent.TYPE_TEXT, 45, 00, 800, 25, 0, RT_HALIGN_LEFT, text[0])) - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/key_" + key + ".png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/key_" + key + ".png")) if png is not None: res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 0, 35, 25, png)) diff --git a/lib/python/Components/ConfigList.py b/lib/python/Components/ConfigList.py old mode 100644 new mode 100755 index 00949e2..418a1b6 --- a/lib/python/Components/ConfigList.py +++ b/lib/python/Components/ConfigList.py @@ -1,7 +1,7 @@ from HTMLComponent import HTMLComponent from GUIComponent import GUIComponent -from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement -from Components.ActionMap import NumberActionMap +from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement, ConfigText, ConfigPassword +from Components.ActionMap import NumberActionMap, ActionMap from enigma import eListbox, eListboxPythonConfigContent, eRCInput, eTimer from Screens.MessageBox import MessageBox @@ -66,6 +66,7 @@ class ConfigList(HTMLComponent, GUIComponent, object): self.current = self.getCurrent() if self.current: self.current[1].onSelect(self.session) + for x in self.onSelectionChanged: x() @@ -127,13 +128,52 @@ class ConfigListScreen: "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) # to prevent left/right overriding the listbox + + self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"], + { + "showVirtualKeyboard": self.KeyText, + }, -2) + self["VirtualKB"].setEnabled(False) self["config"] = ConfigList(list, session = session) + if on_change is not None: self.__changed = on_change else: self.__changed = lambda: None - + + if not self.handleInputHelpers in self["config"].onSelectionChanged: + self["config"].onSelectionChanged.append(self.handleInputHelpers) + + def handleInputHelpers(self): + if self["config"].getCurrent() is not None: + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(True) + self["VKeyIcon"].boolean = True + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + + def KeyText(self): + from Screens.VirtualKeyBoard import VirtualKeyBoard + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue()) + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + self["config"].getCurrent()[1].setValue(callback) + self["config"].invalidate(self["config"].getCurrent()) + def keyOK(self): self["config"].handleKey(KEY_OK) diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py old mode 100644 new mode 100755 index 59f9262..41cd1b2 --- a/lib/python/Components/EpgList.py +++ b/lib/python/Components/EpgList.py @@ -8,7 +8,7 @@ from Tools.LoadPixmap import LoadPixmap from time import localtime, time from ServiceReference import ServiceReference -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN EPG_TYPE_SINGLE = 0 EPG_TYPE_MULTI = 1 @@ -53,11 +53,11 @@ class EPGList(HTMLComponent, GUIComponent): assert(type == EPG_TYPE_SIMILAR) self.l.setBuildFunc(self.buildSimilarEntry) self.epgcache = eEPGCache.getInstance() - self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png')) - self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png')) - self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png')) - self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png')) - self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png')) + self.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png')) + self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png')) + self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png')) + self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png')) + self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png')) def getEventFromId(self, service, eventid): event = None diff --git a/lib/python/Components/FileList.py b/lib/python/Components/FileList.py index 38b0854..222512e 100755 --- a/lib/python/Components/FileList.py +++ b/lib/python/Components/FileList.py @@ -3,7 +3,7 @@ from os import path as os_path, listdir from MenuList import MenuList from Components.Harddisk import harddiskmanager -from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename +from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename, fileExists from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, \ eServiceReference, eServiceCenter, gFont @@ -23,7 +23,6 @@ EXTENSIONS = { "ts": "movie", "avi": "movie", "divx": "movie", - "m4v": "movie", "mpg": "movie", "mpeg": "movie", "mkv": "movie", @@ -35,12 +34,12 @@ def FileEntryComponent(name, absolute = None, isDir = False): res = [ (absolute, isDir) ] res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name)) if isDir: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png")) else: extension = name.split('.') extension = extension[-1].lower() if EXTENSIONS.has_key(extension): - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png")) else: png = None if png is not None: @@ -160,8 +159,11 @@ class FileList(MenuList): directories.sort() files.sort() else: - if os_path.exists(directory): - files = listdir(directory) + if fileExists(directory): + try: + files = listdir(directory) + except: + files = [] files.sort() tmpfiles = files[:] for x in tmpfiles: @@ -256,12 +258,12 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected res = [ (absolute, isDir, selected, name) ] res.append((eListboxPythonMultiContent.TYPE_TEXT, 55, 1, 470, 20, 0, RT_HALIGN_LEFT, name)) if isDir: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "extensions/directory.png")) else: extension = name.split('.') extension = extension[-1].lower() if EXTENSIONS.has_key(extension): - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "extensions/" + EXTENSIONS[extension] + ".png")) else: png = None if png is not None: @@ -269,10 +271,10 @@ def MultiFileSelectEntryComponent(name, absolute = None, isDir = False, selected if not name.startswith('<'): if selected is False: - icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_off.png")) + icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_off.png")) res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon)) else: - icon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) + icon = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 2, 0, 25, 25, icon)) return res @@ -374,8 +376,11 @@ class MultiFileSelectList(FileList): directories.sort() files.sort() else: - if os_path.exists(directory): - files = listdir(directory) + if fileExists(directory): + try: + files = listdir(directory) + except: + files = [] files.sort() tmpfiles = files[:] for x in tmpfiles: diff --git a/lib/python/Components/Harddisk.py b/lib/python/Components/Harddisk.py index 2efdb68..03f574f 100755 --- a/lib/python/Components/Harddisk.py +++ b/lib/python/Components/Harddisk.py @@ -290,7 +290,10 @@ class Harddisk: # any access has been made to the disc. If there has been no access over a specifed time, # we set the hdd into standby. def readStats(self): - l = readFile("/sys/block/%s/stat" % self.device) + try: + l = open("/sys/block/%s/stat" % self.device).read() + except IOError: + return -1,-1 (nr_read, _, _, _, nr_write) = l.split()[:5] return int(nr_read), int(nr_write) @@ -319,7 +322,7 @@ class Harddisk: l = sum(stats) print "sum", l, "prev_sum", self.last_stat - if l != self.last_stat: # access + if l != self.last_stat and l >= 0: # access print "hdd was accessed since previous check!" self.last_stat = l self.last_access = t diff --git a/lib/python/Components/Lcd.py b/lib/python/Components/Lcd.py index 0e50123..7d27c09 100644 --- a/lib/python/Components/Lcd.py +++ b/lib/python/Components/Lcd.py @@ -42,9 +42,18 @@ def InitLcd(): def setLCDinverted(configElement): ilcd.setInverted(configElement.value); + standby_default = 0 + ilcd = LCD() - config.lcd.standby = ConfigSlider(default=0, limits=(0, 10)) + if not ilcd.isOled(): + config.lcd.contrast = ConfigSlider(default=5, limits=(0, 20)) + config.lcd.contrast.addNotifier(setLCDcontrast); + else: + config.lcd.contrast = ConfigNothing() + standby_default = 1 + + config.lcd.standby = ConfigSlider(default=standby_default, limits=(0, 10)) config.lcd.standby.addNotifier(setLCDbright); config.lcd.standby.apply = lambda : setLCDbright(config.lcd.standby) @@ -53,12 +62,6 @@ def InitLcd(): config.lcd.bright.apply = lambda : setLCDbright(config.lcd.bright) config.lcd.bright.callNotifiersOnSaveAndCancel = True - if not ilcd.isOled(): - config.lcd.contrast = ConfigSlider(default=5, limits=(0, 20)) - config.lcd.contrast.addNotifier(setLCDcontrast); - else: - config.lcd.contrast = ConfigNothing() - config.lcd.invert = ConfigYesNo(default=False) config.lcd.invert.addNotifier(setLCDinverted); else: diff --git a/lib/python/Components/MediaPlayer.py b/lib/python/Components/MediaPlayer.py old mode 100644 new mode 100755 index 12f2727..5583b22 --- a/lib/python/Components/MediaPlayer.py +++ b/lib/python/Components/MediaPlayer.py @@ -1,6 +1,6 @@ from MenuList import MenuList -from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename +from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename from os import path from enigma import eListboxPythonMultiContent, RT_VALIGN_CENTER, gFont, eServiceCenter @@ -14,11 +14,11 @@ STATE_REWIND = 3 STATE_FORWARD = 4 STATE_NONE = 5 -PlayIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_play.png")) -PauseIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_pause.png")) -StopIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_stop.png")) -RewindIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_rewind.png")) -ForwardIcon = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/ico_mp_forward.png")) +PlayIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_play.png")) +PauseIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_pause.png")) +StopIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_stop.png")) +RewindIcon = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_rewind.png")) +ForwardIcon = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/ico_mp_forward.png")) def PlaylistEntryComponent(serviceref, state): res = [ serviceref ] diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 05204a7..78e17bb 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -947,7 +947,7 @@ def InitNimManager(nimmgr): lnb_choices = { "universal_lnb": _("Universal LNB"), -# "unicable": _("Unicable"), + "unicable": _("Unicable"), "c_band": _("C-Band"), "user_defined": _("User defined")} diff --git a/lib/python/Components/ParentalControl.py b/lib/python/Components/ParentalControl.py old mode 100644 new mode 100755 diff --git a/lib/python/Components/SelectionList.py b/lib/python/Components/SelectionList.py old mode 100644 new mode 100755 index 08af7d0..1c5423f --- a/lib/python/Components/SelectionList.py +++ b/lib/python/Components/SelectionList.py @@ -1,9 +1,9 @@ from MenuList import MenuList -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT from Tools.LoadPixmap import LoadPixmap -selectionpng = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/selectioncross.png")) +selectionpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/selectioncross.png")) def SelectionEntryComponent(description, value, index, selected): res = [ diff --git a/lib/python/Components/ServiceList.py b/lib/python/Components/ServiceList.py old mode 100644 new mode 100755 index b0283c1..6095812 --- a/lib/python/Components/ServiceList.py +++ b/lib/python/Components/ServiceList.py @@ -5,7 +5,7 @@ from skin import parseColor, parseFont from enigma import eListboxServiceContent, eListbox, eServiceCenter, eServiceReference, gFont, eRect from Tools.LoadPixmap import LoadPixmap -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN class ServiceList(HTMLComponent, GUIComponent): MODE_NORMAL = 0 @@ -15,27 +15,27 @@ class ServiceList(HTMLComponent, GUIComponent): GUIComponent.__init__(self) self.l = eListboxServiceContent() - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/folder.png")) + pic = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/folder.png")) if pic: self.l.setPixmap(self.l.picFolder, pic) - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/marker.png")) + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/marker.png")) if pic: self.l.setPixmap(self.l.picMarker, pic) - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_s-fs8.png")) + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_s-fs8.png")) if pic: self.l.setPixmap(self.l.picDVB_S, pic) - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_c-fs8.png")) + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_c-fs8.png")) if pic: self.l.setPixmap(self.l.picDVB_C, pic) - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_dvb_t-fs8.png")) + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_dvb_t-fs8.png")) if pic: self.l.setPixmap(self.l.picDVB_T, pic) - pic = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "ico_service_group-fs8.png")) + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "ico_service_group-fs8.png")) if pic: self.l.setPixmap(self.l.picServiceGroup, pic) diff --git a/lib/python/Components/SystemInfo.py b/lib/python/Components/SystemInfo.py index d2b405a..f9c4065 100644 --- a/lib/python/Components/SystemInfo.py +++ b/lib/python/Components/SystemInfo.py @@ -1,5 +1,6 @@ from enigma import eDVBResourceManager from Tools.Directories import fileExists +from Tools.HardwareInfo import HardwareInfo SystemInfo = { } @@ -27,3 +28,4 @@ def countFrontpanelLEDs(): SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs() SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists("/dev/dbox/lcd0") SystemInfo["FrontpanelDisplayGrayscale"] = fileExists("/dev/dbox/oled0") +SystemInfo["DeepstandbySupport"] = HardwareInfo().get_device_name() != "dm800" diff --git a/lib/python/Components/TimerList.py b/lib/python/Components/TimerList.py old mode 100644 new mode 100755 index 44a7eb4..2a7405d --- a/lib/python/Components/TimerList.py +++ b/lib/python/Components/TimerList.py @@ -7,7 +7,7 @@ from enigma import eListboxPythonMultiContent, eListbox, gFont, \ RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER from Tools.LoadPixmap import LoadPixmap from timer import TimerEntry -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN class TimerList(HTMLComponent, GUIComponent, object): # @@ -65,7 +65,7 @@ class TimerList(HTMLComponent, GUIComponent, object): res.append((eListboxPythonMultiContent.TYPE_TEXT, width-150, 50, 150, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state)) if timer.disabled: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/redx.png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/redx.png")) res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png)) return res diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index 6fcab8b..680b594 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -1,5 +1,6 @@ from Components.Harddisk import harddiskmanager from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations +from Tools.Directories import resolveFilename, SCOPE_HDD from enigma import Misc_Options, setTunerTypePriorityOrder; from SystemInfo import SystemInfo import os @@ -30,8 +31,11 @@ def InitUsageConfig(): ("standard", _("standard")), ("swap", _("swap PiP and main picture")), ("swapstop", _("move PiP to main picture")), ("stop", _("stop PiP")) ]) + config.usage.default_path = ConfigText(default = resolveFilename(SCOPE_HDD)) + config.usage.timer_path = ConfigText(default = "") + config.usage.instantrec_path = ConfigText(default = "") + config.usage.timeshift_path = ConfigText(default = "/media/hdd/") config.usage.allowed_timeshift_paths = ConfigLocations(default = ["/media/hdd/"]) - config.usage.timeshift_path = ConfigText(default = "/media/hdd") config.usage.on_movie_start = ConfigSelection(default = "ask", choices = [ ("ask", _("Ask user")), ("resume", _("Resume from last position")), ("beginning", _("Start from the beginning")) ]) @@ -65,19 +69,19 @@ def InitUsageConfig(): def TunerTypePriorityOrderChanged(configElement): setTunerTypePriorityOrder(int(configElement.value)) - config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged) + config.usage.alternatives_priority.addNotifier(TunerTypePriorityOrderChanged, immediate_feedback=False) def setHDDStandby(configElement): for hdd in harddiskmanager.HDDList(): hdd[1].setIdleTime(int(configElement.value)) - config.usage.hdd_standby.addNotifier(setHDDStandby) + config.usage.hdd_standby.addNotifier(setHDDStandby, immediate_feedback=False) def set12VOutput(configElement): if configElement.value == "on": Misc_Options.getInstance().set_12V_output(1) elif configElement.value == "off": Misc_Options.getInstance().set_12V_output(0) - config.usage.output_12V.addNotifier(set12VOutput) + config.usage.output_12V.addNotifier(set12VOutput, immediate_feedback=False) SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output() @@ -128,3 +132,23 @@ def updateChoices(sel, choices): defval = str(x) break sel.setChoices(map(str, choices), defval) + +def preferredPath(path): + if config.usage.setup_level.index < 2 or path == "": + return None # config.usage.default_path.value, but delay lookup until usage + elif path == "": + return config.movielist.last_videodir.value + elif path == "": + return config.movielist.last_timer_videodir.value + else: + return path + +def preferredTimerPath(): + return preferredPath(config.usage.timer_path.value) + +def preferredInstantRecordPath(): + return preferredPath(config.usage.instantrec_path.value) + +def defaultMoviePath(): + return config.usage.default_path.value + diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index 1f8709b..a6007b1 100755 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -1,6 +1,6 @@ from enigma import getPrevAsciiCode from Tools.NumericalTextInput import NumericalTextInput -from Tools.Directories import resolveFilename, SCOPE_CONFIG +from Tools.Directories import resolveFilename, SCOPE_CONFIG, fileExists from Components.Harddisk import harddiskmanager from copy import copy as copy_copy from os import path as os_path @@ -1283,7 +1283,6 @@ class ConfigLocations(ConfigElement): self.default = default self.locations = [] self.mountpoints = [] - harddiskmanager.on_partition_list_change.append(self.mountpointsChanged) self.value = default[:] def setValue(self, value): @@ -1320,7 +1319,7 @@ class ConfigLocations(ConfigElement): locations = [[x, None, False, False] for x in tmp] self.refreshMountpoints() for x in locations: - if os_path.exists(x[0]): + if fileExists(x[0]): x[1] = self.getMountpoint(x[0]) x[2] = True self.locations = locations @@ -1339,20 +1338,11 @@ class ConfigLocations(ConfigElement): return False return self.tostring([x[0] for x in locations]) != sv - def mountpointsChanged(self, action, dev): - print "Mounts changed: ", action, dev - mp = dev.mountpoint+"/" - if action == "add": - self.addedMount(mp) - elif action == "remove": - self.removedMount(mp) - self.refreshMountpoints() - def addedMount(self, mp): for x in self.locations: if x[1] == mp: x[2] = True - elif x[1] == None and os_path.exists(x[0]): + elif x[1] == None and fileExists(x[0]): x[1] = self.getMountpoint(x[0]) x[2] = True @@ -1362,7 +1352,7 @@ class ConfigLocations(ConfigElement): x[2] = False def refreshMountpoints(self): - self.mountpoints = [p.mountpoint + "/" for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"] + self.mountpoints = [p.mountpoint for p in harddiskmanager.getMountedPartitions() if p.mountpoint != "/"] self.mountpoints.sort(key = lambda x: -len(x)) def checkChangedMountpoints(self): diff --git a/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml b/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml old mode 100644 new mode 100755 index 23edc8e..1431caf --- a/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml +++ b/lib/python/Plugins/Extensions/CutListEditor/meta/plugin_cutlisteditor.xml @@ -8,7 +8,7 @@ enigma2-plugin-extensions-cutlisteditor CutListEditor allows you to edit your movies. CutListEditor allows you to edit your movies.\nSeek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\nThen seek to the end, press OK, select 'end cut'. That's it. - + Dream Multimedia @@ -17,7 +17,7 @@ Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden. Mit dem Schnitteditor können Sie Ihre Aufnahmen schneiden.\nSpulen Sie zum Anfang des zu schneidenden Teils der Aufnahme. Drücken Sie dann OK und wählen Sie: 'start cut'.\nDann spulen Sie zum Ende, drücken OK und wählen 'end cut'. Das ist alles. - + diff --git a/lib/python/Plugins/Extensions/CutListEditor/plugin.py b/lib/python/Plugins/Extensions/CutListEditor/plugin.py index 7566346..efe9f76 100644 --- a/lib/python/Plugins/Extensions/CutListEditor/plugin.py +++ b/lib/python/Plugins/Extensions/CutListEditor/plugin.py @@ -7,6 +7,7 @@ from Components.ActionMap import HelpableActionMap from Components.MultiContent import MultiContentEntryText from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase from Components.VideoWindow import VideoWindow +from Components.Label import Label from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport from Components.GUIComponent import GUIComponent from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT @@ -119,12 +120,13 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He Name - + Position,Detailed - - - + + + + {"template": [ MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)), @@ -161,6 +163,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He self["Timeline"] = ServicePositionGauge(self.session.nav) self["cutlist"] = List(self.getCutlist()) self["cutlist"].onSelectionChanged.append(self.selectionChanged) + self["SeekState"] = Label() + self.onPlayStateChanged.append(self.updateStateLabel) + self.updateStateLabel(self.seekstate) self["Video"] = VideoWindow(decoder = 0) @@ -184,13 +189,17 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He }) # to track new entries we save the last version of the cutlist - self.last_cuts = [ ] + self.last_cuts = self.getCutlist() self.cut_start = None + self.inhibit_seek = False self.onClose.append(self.__onClose) def __onClose(self): self.session.nav.playService(self.old_service) + def updateStateLabel(self, state): + self["SeekState"].setText(state[3].strip()) + def showTutorial(self): if not self.tutorial_seen: self.tutorial_seen = True @@ -238,44 +247,46 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He return r def selectionChanged(self): - where = self["cutlist"].getCurrent() - if where is None: - print "no selection" - return - pts = where[0][0] - seek = self.getSeek() - if seek is None: - print "no seek" - return - seek.seekTo(pts) + if not self.inhibit_seek: + where = self["cutlist"].getCurrent() + if where is None: + print "no selection" + return + pts = where[0][0] + seek = self.getSeek() + if seek is None: + print "no seek" + return + seek.seekTo(pts) def refillList(self): print "cue sheet changed, refilling" self.downloadCuesheet() - # get the first changed entry, and select it + # get the first changed entry, counted from the end, and select it new_list = self.getCutlist() self["cutlist"].list = new_list - for i in range(min(len(new_list), len(self.last_cuts))): - if new_list[i] != self.last_cuts[i]: - self["cutlist"].setIndex(i) + l1 = len(new_list) + l2 = len(self.last_cuts) + for i in range(min(l1, l2)): + if new_list[l1-i-1] != self.last_cuts[l2-i-1]: + self["cutlist"].setIndex(l1-i-1) break self.last_cuts = new_list def getStateForPosition(self, pos): - state = 0 # in - - # when first point is "in", the beginning is "out" - if len(self.cut_list) and self.cut_list[0][1] == 0: - state = 1 - + state = -1 for (where, what) in self.cut_list: - if where < pos: - if what == 0: # in - state = 0 - elif what == 1: # out + if what in [0, 1]: + if where < pos: + state = what + elif where == pos: state = 1 + elif state == -1: + state = 1 - what + if state == -1: + state = 0 return state def showMenu(self): @@ -329,11 +340,11 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He in_after = None for (where, what) in self.cut_list: - if what == 1 and where < self.context_position: # out + if what == 1 and where <= self.context_position: # out out_before = (where, what) elif what == 0 and where < self.context_position: # in, before out out_before = None - elif what == 0 and where > self.context_position and in_after is None: + elif what == 0 and where >= self.context_position and in_after is None: in_after = (where, what) if out_before is not None: @@ -341,12 +352,16 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He if in_after is not None: self.cut_list.remove(in_after) + self.inhibit_seek = True self.uploadCuesheet() + self.inhibit_seek = False elif result == CutListContextMenu.RET_MARK: self.__addMark() elif result == CutListContextMenu.RET_DELETEMARK: self.cut_list.remove(self.context_nearest_mark) + self.inhibit_seek = True self.uploadCuesheet() + self.inhibit_seek = False elif result == CutListContextMenu.RET_REMOVEBEFORE: # remove in/out marks before current position for (where, what) in self.cut_list[:]: @@ -354,7 +369,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He self.cut_list.remove((where, what)) # add 'in' point bisect.insort(self.cut_list, (self.context_position, 0)) + self.inhibit_seek = True self.uploadCuesheet() + self.inhibit_seek = False elif result == CutListContextMenu.RET_REMOVEAFTER: # remove in/out marks after current position for (where, what) in self.cut_list[:]: @@ -362,7 +379,9 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He self.cut_list.remove((where, what)) # add 'out' point bisect.insort(self.cut_list, (self.context_position, 1)) + self.inhibit_seek = True self.uploadCuesheet() + self.inhibit_seek = False elif result == CutListContextMenu.RET_GRABFRAME: self.grabFrame() diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am b/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am index 1899cb7..0b3be7d 100755 --- a/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am +++ b/lib/python/Plugins/Extensions/DVDBurn/meta/Makefile.am @@ -1,3 +1,5 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_dvdburn.xml + +EXTRA_DIST = dvdburn_de.jpg dvdburn_en.jpg diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg new file mode 100755 index 0000000..4472971 Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_de.jpg differ diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg new file mode 100755 index 0000000..509816d Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/meta/dvdburn_en.jpg differ diff --git a/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml b/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml old mode 100644 new mode 100755 index 7971539..647d1cf --- a/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml +++ b/lib/python/Plugins/Extensions/DVDBurn/meta/plugin_dvdburn.xml @@ -9,6 +9,7 @@ enigma2-plugin-extensions-dvdburn With DVDBurn you can burn your recordings to a dvd. With DVDBurn you can burn your recordings to a dvd.\nArchive all your favorite movies to recordable dvds with menus if wanted. + Dream Multimedia @@ -16,6 +17,7 @@ enigma2-plugin-extensions-dvdburn Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD. Mit DVDBurn brennen Sie ihre Aufnahmen auf DVD.\nArchivieren Sie Ihre Liblingsfilme auf DVD mit Menus wenn Sie es wünschen. + diff --git a/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml b/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml old mode 100644 new mode 100755 index 2658138..1353f7d --- a/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml +++ b/lib/python/Plugins/Extensions/DVDPlayer/meta/plugin_dvdplayer.xml @@ -8,7 +8,7 @@ enigma2-plugin-extensions-dvdplayer DVDPlayer plays your DVDs on your Dreambox. DVDPlayer plays your DVDs on your Dreambox.\nWith the DVDPlayer you can play your DVDs on your Dreambox from a DVD or even from an iso file or video_ts folder on your harddisc or network. - + Dream Multimedia @@ -17,7 +17,7 @@ Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab. Spielen Sie Ihre DVDs mit dem DVDPlayer auf Ihrer Dreambox ab.\nMit dem DVDPlayer können Sie Ihre DVDs auf Ihrer Dreambox abspielen. Dabei ist es egal ob Sie von DVD, iso-Datei oder sogar direkt von einer video_ts Ordnerstruktur von Ihrer Festplatte oder dem Netzwerk abspielen. - + diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 94f2ee3..0372c49 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -696,7 +696,7 @@ RESULT eServiceDVD::setTrickmode(int /*trick*/) RESULT eServiceDVD::isCurrentlySeekable() { - return m_state == stRunning; + return m_state == stRunning ? 3 : 0; } RESULT eServiceDVD::keyPressed(int key) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py old mode 100644 new mode 100755 index b22c4b8..1d621f4 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -16,7 +16,7 @@ from Screens.TimerEntry import TimerEntry from Screens.EpgSelection import EPGSelection from Screens.TimerEdit import TimerSanityConflict from Screens.MessageBox import MessageBox -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from ServiceReference import ServiceReference from Tools.LoadPixmap import LoadPixmap @@ -41,11 +41,11 @@ class EPGList(HTMLComponent, GUIComponent): if overjump_empty: self.l.setSelectableFunc(self.isSelectable) self.epgcache = eEPGCache.getInstance() - self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png')) - self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png')) - self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png')) - self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png')) - self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png')) + self.clock_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png')) + self.clock_add_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png')) + self.clock_pre_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png')) + self.clock_post_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png')) + self.clock_prepost_pixmap = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png')) self.time_base = None self.time_epoch = time_epoch self.list = None diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg old mode 100644 new mode 100755 index 8dfdbbf..b68d095 Binary files a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_de.jpg differ diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg old mode 100644 new mode 100755 index 95b6665..6953f27 Binary files a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg and b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/graphmultiepg_en.jpg differ diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml old mode 100644 new mode 100755 index 7b0b134..a10840d --- a/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/meta/plugin_graphmultiepg.xml @@ -9,7 +9,7 @@ eenigma2-plugin-extensions-graphmultiepg GraphMultiEPG shows a graphical timeline EPG. GraphMultiEPG shows a graphical timeline EPG.\nShows a nice overview of all running und upcoming tv shows. - + Dream Multimedia @@ -18,7 +18,7 @@ Zeigt ein grafisches Zeitlinien-EPG. Zeigt ein grafisches Zeitlinien-EPG.\nZeigt eine grafische Übersicht aller laufenden und kommenden Sendungen. - + diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg old mode 100644 new mode 100755 index 4396161..41a67c2 Binary files a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_de.jpg differ diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg old mode 100644 new mode 100755 index e1d3575..6bfbbc5 Binary files a/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg and b/lib/python/Plugins/Extensions/MediaPlayer/meta/mediaplayer_en.jpg differ diff --git a/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml b/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml old mode 100644 new mode 100755 index 825793f..2f9f22b --- a/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml +++ b/lib/python/Plugins/Extensions/MediaPlayer/meta/plugin_mediaplayer.xml @@ -8,7 +8,7 @@ enigma2-plugin-extensions-mediaplayer Mediaplayer plays your favorite music and videos. Mediaplayer plays your favorite music and videos.\nPlay all your favorite music and video files, organize them in playlists, view cover and album information. - + Dream Multimedia @@ -17,7 +17,7 @@ Mediaplayer spielt Ihre Musik und Videos. Mediaplayer spielt Ihre Musik und Videos.\nSie können all Ihre Musik- und Videodateien abspielen, in Playlisten organisieren, Cover und Albuminformationen abrufen. - + diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py old mode 100644 new mode 100755 index 98bc060..0fc78fb --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -19,7 +19,7 @@ from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS from Components.AVSwitch import AVSwitch from Components.Harddisk import harddiskmanager from Components.config import config -from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_SKIN_IMAGE +from Tools.Directories import fileExists, pathExists, resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_CURRENT_SKIN from settings import MediaPlayerSettings import random @@ -50,7 +50,7 @@ class MediaPixmap(Pixmap): noCoverFile = value break if noCoverFile is None: - noCoverFile = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png") + noCoverFile = resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/no_coverArt.png") self.noCoverPixmap = LoadPixmap(noCoverFile) return Pixmap.applySkin(self, desktop, screen) @@ -110,7 +110,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB # 'None' is magic to start at the list of mountpoints defaultDir = config.mediaplayer.defaultDir.getValue() - self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") + self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") self["filelist"] = self.filelist self.playlist = MyPlayList() diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am b/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am index e2aa0e3..d80b8c2 100755 --- a/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am +++ b/lib/python/Plugins/Extensions/MediaScanner/meta/Makefile.am @@ -1,3 +1,5 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_mediascanner.xml + +EXTRA_DIST = mediascanner_de.jpg mediascanner_en.jpg diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg new file mode 100755 index 0000000..e6a191c Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_de.jpg differ diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg new file mode 100755 index 0000000..b9561c2 Binary files /dev/null and b/lib/python/Plugins/Extensions/MediaScanner/meta/mediascanner_en.jpg differ diff --git a/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml b/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml old mode 100644 new mode 100755 index d899fdb..eced924 --- a/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml +++ b/lib/python/Plugins/Extensions/MediaScanner/meta/plugin_mediascanner.xml @@ -9,6 +9,7 @@ enigma2-plugin-extensions-mediascanner MediaScanner scans devices for playable media files. MediaScanner scans devices for playable media files and displays a menu with possible actions like viewing pictures or playing movies. + Dream Multimedia @@ -17,6 +18,7 @@ MediaScanner durchsucht Geräte nach Mediendateien. MediaScanner durchsucht Geräte nach Mediendateien und bietet Ihnen die dazu passenden Aktionen an wie z.B. Bilder betrachten oder Videos abspielen. + diff --git a/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml b/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml old mode 100644 new mode 100755 index 40e59b6..faff978 --- a/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml +++ b/lib/python/Plugins/Extensions/PicturePlayer/meta/plugin_pictureplayer.xml @@ -8,7 +8,7 @@ enigma2-plugin-extensions-pictureplayer PicturePlayer displays your photos on the TV. The PicturePlayer displays your photos on the TV.\nYou can view them as thumbnails or slideshow. - + Dream Multimedia @@ -17,7 +17,7 @@ Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an. Der Bildbetrachter zeigt Ihre Bilder auf dem Fernseher an.\nSie können sich Ihre Bilder als Thumbnails, einzeln oder als Slideshow anzeigen lassen. - + diff --git a/lib/python/Plugins/Plugin.py b/lib/python/Plugins/Plugin.py index d7fc689..7cf0c18 100755 --- a/lib/python/Plugins/Plugin.py +++ b/lib/python/Plugins/Plugin.py @@ -52,6 +52,14 @@ class PluginDescriptor: # reason (True: Networkconfig read finished, False: Networkconfig reload initiated ) WHERE_NETWORKCONFIG_READ = 12 + WHERE_AUDIOMENU = 13 + + # fnc 'SoftwareSupported' or 'AdvancedSoftwareSupported' must take a parameter and return None + # if the plugin should not be displayed inside Softwaremanger or return a function which is called with session + # and 'None' as parameter to call the plugin from the Softwaremanager menus. "menuEntryName" and "menuEntryDescription" + # should be provided to name and describe the new menu entry. + WHERE_SOFTWAREMANAGER = 14 + def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False): self.name = name self.internal = internal diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile.am index 94be474..d9d96bc 100755 --- a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile.am @@ -1,3 +1,5 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_cleanupwizard.xml + +EXTRA_DIST = cleanupwizard_de.jpg cleanupwizard_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg new file mode 100755 index 0000000..2f086fb Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg new file mode 100755 index 0000000..d014cb5 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/cleanupwizard_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/plugin_cleanupwizard.xml b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/plugin_cleanupwizard.xml index 10ccc73..99add3d 100755 --- a/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/plugin_cleanupwizard.xml +++ b/lib/python/Plugins/SystemPlugins/CleanupWizard/meta/plugin_cleanupwizard.xml @@ -10,6 +10,7 @@ The CleanupWizard informs you when your internal free memory of your dreambox has droppen under 2MB. You can use this wizard to remove some extensions. + Dream Multimedia @@ -19,6 +20,7 @@ Der CleanupWizard informiert Sie, wenn der interne freie Speicher Ihrer Dreambox unter 2MB fällt. Sie können dann einige Erweiterungen deinstallieren um wieder Platz zu schaffen. + diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg old mode 100644 new mode 100755 index 120ac82..75771f9 Binary files a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg and b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/ciassignment.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml old mode 100644 new mode 100755 index bb2bf59..9abc598 --- a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml +++ b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/plugin_commoninterfaceassignment.xml @@ -13,7 +13,7 @@ in your Dreambox and assign to each of them dedicated providers/services or caids.\n So it is then possible to watch a scrambled service while recording another one. - + Dream Multimedia @@ -24,7 +24,7 @@ So ist es möglich mit einem CI einen Sender aufzunehmen\n und mit einem anderen einen Sender zu schauen. - + diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am index b619c8c..aed728d 100755 --- a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am @@ -1,3 +1,5 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_crashlogautosubmit.xml + +EXTRA_DIST = crashlogautosubmit_de.jpg crashlogautosubmit_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg new file mode 100755 index 0000000..0489416 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg new file mode 100755 index 0000000..5e5c728 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/crashlogautosubmit_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml old mode 100644 new mode 100755 index 261eb49..a118ed7 --- a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml @@ -10,6 +10,7 @@ With the CrashlogAutoSubmit extension it is possible to automatically send crashlogs found on your Harddrive to Dream Multimedia + Dream Multimedia @@ -17,8 +18,9 @@ enigma2-plugin-systemplugins-crashlogautosubmit Automatisches versenden von Crashlogs an Dream Multimedia Mit dem CrashlogAutoSubmit Plugin ist es möglich auf Ihrer Festplatte - gefundene Crashlogs automatisch an Dream Multimedia zu versenden. + gefundene Crashlogs automatisch an Dream Multimedia zu versenden. + diff --git a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg old mode 100644 new mode 100755 index a0fd3b1..f4d0a1e Binary files a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg and b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/defaultservicescanner.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml old mode 100644 new mode 100755 index bf0ce25..41d41ed --- a/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml +++ b/lib/python/Plugins/SystemPlugins/DefaultServicesScanner/meta/plugin_defaultservicesscanner.xml @@ -10,7 +10,7 @@ Scans default lamedbs sorted by satellite with a connected dish positioner. With the DefaultServicesScanner extension you can scan default lamedbs sorted by satellite with a connected dish positioner. - + Dream Multimedia @@ -19,7 +19,7 @@ Standard Sendersuche nach Satellit mit einem Rotor. Mit der DefaultServicesScanner Erweiterung können Sie eine standard Sendersuche nach Satellit mit einem angeschlossenen Rotor durchführen. - + diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am index 8405ed7..9b0a2ed 100755 --- a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_diseqctester.xml -EXTRA_DIST = diseqctester.jpg +EXTRA_DIST = diseqctester_de.jpg diseqctester_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg deleted file mode 100644 index c872334..0000000 Binary files a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg new file mode 100755 index 0000000..5a6e153 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg new file mode 100755 index 0000000..43dad76 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/diseqctester_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml old mode 100644 new mode 100755 index 5415db0..33808b3 --- a/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/meta/plugin_diseqctester.xml @@ -10,7 +10,7 @@ Test your Diseqc equipment. With the DiseqcTester extension you can test your satellite equipment for Diseqc compatibility and errors. - + Dream Multimedia @@ -19,7 +19,7 @@ Testet Ihr Diseqc Equipment. Mit der DiseqcTester Erweiterung können Sie Ihr Satelliten-Equipment nach Diseqc-Kompatibilität und Fehlern überprüfen. - + diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am index 686bded..0633e7c 100755 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_nfiflash.xml -EXTRA_DIST = nfiflash.jpg +EXTRA_DIST = nfiflash_de.jpg nfiflash_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg deleted file mode 100644 index 0a5fa46..0000000 Binary files a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg new file mode 100755 index 0000000..fec93f4 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg new file mode 100755 index 0000000..32a9967 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/nfiflash_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml old mode 100644 new mode 100755 index 2de88f0..c81f4ca --- a/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/meta/plugin_nfiflash.xml @@ -12,7 +12,7 @@ With the NFIFlash extension 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. - + Dream Multimedia @@ -22,7 +22,7 @@ Mit der NFIFlash Erweiterung können Sie ein Dreambox Image auf einen USB-Stick laden.\ Mit diesem USB-Stick ist es dann möglich Ihre Dreambox zu flashen. - + diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py b/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py old mode 100644 new mode 100755 index 40914e1..28b3330 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/plugin.py @@ -1,20 +1,28 @@ +from Plugins.Plugin import PluginDescriptor +from Tools.HardwareInfo import HardwareInfo +from Tools.Directories import fileExists +from downloader import NFIDownload, filescan + +def NFIFlasherMain(session, tmp = None, **kwargs): + session.open(NFIDownload, "/home/root" ) + +def NFICallFnc(tmp = None): + return NFIFlasherMain + def Plugins(**kwargs): - from Plugins.Plugin import PluginDescriptor - from Tools.HardwareInfo import HardwareInfo # currently only available for DM8000 if HardwareInfo().get_device_name() != "dm8000": return [PluginDescriptor()] - from Tools.Directories import fileExists if fileExists("/usr/share/bootlogo-flasher.mvi"): import flasher # started from usb stick # don't try to be intelligent and trick this - it's not possible to rewrite the flash memory with a system currently booted from it return [PluginDescriptor(where = PluginDescriptor.WHERE_WIZARD, fnc = (9,flasher.NFIFlash))] else: # started on real enigma2 - import downloader - return [PluginDescriptor(name="NFI Image Flashing", - description = _("Download .NFI-Files for USB-Flasher"), + return [PluginDescriptor(name=_("NFI Image Flashing"), + description=_("Download .NFI-Files for USB-Flasher"), icon = "flash.png", - where = [PluginDescriptor.WHERE_PLUGINMENU], - fnc = downloader.main), PluginDescriptor(name="nfi", where = PluginDescriptor.WHERE_FILESCAN, fnc = downloader.filescan) - ] + where = PluginDescriptor.WHERE_SOFTWAREMANAGER, + fnc={"SoftwareSupported": NFICallFnc, "menuEntryName": lambda x: _("NFI Image Flashing"), + "menuEntryDescription": lambda x: _("Download .NFI-Files for USB-Flasher")}), + PluginDescriptor(name="nfi", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)] diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py index 4d36115..13e7fdd 100755 --- a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py +++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py @@ -2,18 +2,12 @@ from Screens.Wizard import wizardManager, WizardSummary from Screens.WizardLanguage import WizardLanguage from Screens.Rc import Rc from Screens.MessageBox import MessageBox - from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap +from Components.Sources.Boolean import Boolean from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword from Components.Network import iNetwork - -#from Components.Label import Label -#from Components.MenuList import MenuList -#from Components.PluginComponent import plugins -#from Plugins.Plugin import PluginDescriptor from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE -#import time, os, re - +from enigma import eTimer config.misc.firstrun = ConfigBoolean(default = True) list = [] @@ -39,7 +33,7 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl class NetworkWizard(WizardLanguage, Rc): skin = """ - + @@ -52,6 +46,10 @@ class NetworkWizard(WizardLanguage, Rc): + + + + """ def __init__(self, session): self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml") @@ -59,20 +57,68 @@ class NetworkWizard(WizardLanguage, Rc): Rc.__init__(self) self.session = session self["wizard"] = Pixmap() - + self["HelpWindow"] = Pixmap() + self["HelpWindow"].hide() + self["VKeyIcon"] = Boolean(False) + + self.InstalledInterfaceCount = None + self.Adapterlist = None self.InterfaceState = None self.isInterfaceUp = None self.WlanPluginInstalled = None self.ap = None self.selectedInterface = None self.NextStep = None - self.myref = None + self.resetRef = None self.checkRef = None 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.originalInterfaceStateChanged = False + self.Text = None + self.rescanTimer = eTimer() + self.rescanTimer.callback.append(self.rescanTimerFired) + self.getInstalledInterfaceCount() self.isWlanPluginInstalled() + + def exitWizardQuestion(self, ret = False): + if (ret): + self.markDone() + self.close() + + def markDone(self): + self.rescanTimer.stop() + del self.rescanTimer + pass + + def getInstalledInterfaceCount(self): + self.rescanTimer.stop() + self.Adapterlist = iNetwork.getAdapterList() + self.InstalledInterfaceCount = len(self.Adapterlist) + self.originalAth0State = iNetwork.getAdapterAttribute('ath0', 'up') + self.originalEth0State = iNetwork.getAdapterAttribute('eth0', 'up') + self.originalWlan0State = iNetwork.getAdapterAttribute('wlan0', 'up') + + 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') def listInterfaces(self): + self.rescanTimer.stop() + self.checkOldInterfaceState() list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] list.append((_("Exit network wizard"), "end")) return list @@ -93,46 +139,30 @@ class NetworkWizard(WizardLanguage, Rc): self.InterfaceSelect(self.selection) def checkInterface(self,iface): - self.Adapterlist = iNetwork.getAdapterList() + self.rescanTimer.stop() + if self.Adapterlist is None: + self.Adapterlist = iNetwork.getAdapterList() if self.NextStep is not 'end': if len(self.Adapterlist) == 0: #Reset Network to defaults if network broken - iNetwork.resetNetworkConfig('lan', self.checkInterfaceCB) - self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False) - if iface == 'eth0': + 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.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1: if iNetwork.getAdapterAttribute(iface, 'up') is True: self.isInterfaceUp = True else: self.isInterfaceUp = False - self.resetfinishedCB(False) + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() else: - iNetwork.resetNetworkConfig('lan',self.checkInterfaceCB) - self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False) - elif iface == 'wlan0': - if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1: - if iNetwork.getAdapterAttribute(iface, 'up') is True: - self.isInterfaceUp = True - else: - self.isInterfaceUp = False - self.resetfinishedCB(False) - else: - iNetwork.resetNetworkConfig('wlan',self.checkInterfaceCB) - self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False) - elif iface == 'ath0': - if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1: - if iNetwork.getAdapterAttribute(iface, 'up') is True: - self.isInterfaceUp = True - else: - self.isInterfaceUp = False - self.resetfinishedCB(False) - else: - iNetwork.resetNetworkConfig('wlan-mpci',self.checkInterfaceCB) - self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False) + self.isInterfaceUp = iNetwork.checkforInterface(iface) + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() else: - self.resetfinishedCB(False) + self.resetNetworkConfigFinished(False) - def resetfinishedCB(self,data): + def resetNetworkConfigFinished(self,data): if data is True: self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() @@ -140,33 +170,42 @@ class NetworkWizard(WizardLanguage, Rc): self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() - def checkInterfaceCB(self,callback,iface): + def resetNetworkConfigCB(self,callback,iface): if callback is not None: if callback is True: - iNetwork.getInterfaces(self.getInterfacesDataAvail) + iNetwork.getInterfaces(self.getInterfacesFinished) - - def getInterfacesDataAvail(self, data): + def getInterfacesFinished(self, data): if data is True: if iNetwork.getAdapterAttribute(self.selectedInterface, 'up') is True: self.isInterfaceUp = True else: self.isInterfaceUp = False - self.myref.close(True) + self.resetRef.close(True) + else: + print "we should never come here!" def AdapterSetupEnd(self, iface): + self.originalInterfaceStateChanged = True if iNetwork.getAdapterAttribute(iface, "dhcp") is True: iNetwork.checkNetworkState(self.AdapterSetupEndFinished) self.AdapterRef = self.session.openWithCallback(self.AdapterSetupEndCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False) - else: self.currStep = self.getStepWithID("confdns") self.afterAsyncCode() def AdapterSetupEndCB(self,data): if data is True: - self.currStep = self.getStepWithID("checklanstatusend") - self.afterAsyncCode() + if self.selectedInterface in ('wlan0', 'ath0'): + if self.WlanPluginInstalled == True: + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus + iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB) + else: + self.currStep = self.getStepWithID("checklanstatusend") + self.afterAsyncCode() + else: + self.currStep = self.getStepWithID("checklanstatusend") + self.afterAsyncCode() def AdapterSetupEndFinished(self,data): if data <= 2: @@ -175,66 +214,139 @@ class NetworkWizard(WizardLanguage, Rc): self.InterfaceState = False self.AdapterRef.close(True) + def checkWlanStateCB(self,data,status): + if data is not None: + 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" + status[self.selectedInterface]["acesspoint"] + "\n" + text3 = _('SSID:') + "\t" + status[self.selectedInterface]["essid"] + "\n" + text4 = _('Link Quality:') + "\t" + status[self.selectedInterface]["quality"]+"%" + "\n" + text5 = _('Signal Strength:') + "\t" + status[self.selectedInterface]["signal"] + "\n" + text6 = _('Bitrate:') + "\t" + status[self.selectedInterface]["bitrate"] + "\n" + text7 = _('Encryption:') + " " + status[self.selectedInterface]["encryption"] + "\n" + text8 = _("Please press OK to continue.") + infotext = text1 + text2 + text3 + text4 + text5 + text7 +"\n" + text8 + self.currStep = self.getStepWithID("checkWlanstatusend") + self.Text = infotext + self.afterAsyncCode() + def checkNetwork(self): - iNetwork.checkNetworkState(self.checkNetworkStateFinished) + iNetwork.checkNetworkState(self.checkNetworkStateCB) self.checkRef = self.session.openWithCallback(self.checkNetworkCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False) def checkNetworkCB(self,data): if data is True: - self.currStep = self.getStepWithID("checklanstatusend") - self.afterAsyncCode() + if self.selectedInterface in ('wlan0', 'ath0'): + if self.WlanPluginInstalled == True: + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus + iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB) + else: + self.currStep = self.getStepWithID("checklanstatusend") + self.afterAsyncCode() + else: + self.currStep = self.getStepWithID("checklanstatusend") + self.afterAsyncCode() - def checkNetworkStateFinished(self,data): + def checkNetworkStateCB(self,data): if data <= 2: self.InterfaceState = True else: self.InterfaceState = False self.checkRef.close(True) - def markDone(self): - pass + def rescanTimerFired(self): + self.rescanTimer.stop() + self.updateAPList() - def listModes(self): - list = [] - self.WlanList = [] + def updateAPList(self): + self.oldlist = self.APList + self.newAPlist = [] + newList = [] + newListIndex = None + currentListEntry = None + newList = self.listAccessPoints() + + for oldentry in self.oldlist: + if oldentry not in newList: + 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 (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 + self.wizard[self.currStep]["evaluatedlist"] = self.newAPlist + self['list'].setList(self.newAPlist) + self["list"].setIndex(newListIndex) + self["list"].updateList(self.newAPlist) + + def listAccessPoints(self): + self.APList = [] try: from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan except ImportError: - list.append( ( _("No networks found"),_("unavailable") ) ) - self.WlanList.append(_("No networks found")) - return list + self.APList.append( ( _("No networks found"),_("unavailable") ) ) + return self.APList else: self.w = Wlan(self.selectedInterface) aps = self.w.getNetworkList() if aps is not None: print "[NetworkWizard.py] got Accespoints!" + tmplist = [] + complist = [] for ap in aps: a = aps[ap] if a['active']: - if a['essid'] != "": - #a['essid'] = a['bssid'] - list.append( (a['essid'], a['essid']) ) - self.WlanList.append(a['essid']) - if "hidden..." not in list: - list.append( ( _("enter hidden network SSID"),_("hidden...") ) ) - self.WlanList.append(_("hidden...")) - return list - - def modeSelectionMade(self, index): - self.modeSelect(index) - - def modeSelectionMoved(self): - self.modeSelect(self.selection) + 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..." )) - def modeSelect(self, mode): - self.ap = mode - print "ModeSelected:", mode + self.rescanTimer.start(3000) + return self.APList - def restartNetwork(self): - iNetwork.restartNetwork() - self.checkNetwork() - - def isWlanPluginInstalled(self): + 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) + + def checkWlanSelection(self): + self.rescanTimer.stop() + self.currStep = self.getStepWithID(self.NextStep) + + def isWlanPluginInstalled(self): try: from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan except ImportError: diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am index 98dbe80..e8f738c 100755 --- a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile.am @@ -1,3 +1,5 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_networkwizard.xml + +EXTRA_DIST = networkwizard_en.jpg networkwizard_de.jpg diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg new file mode 100755 index 0000000..3999a41 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg new file mode 100755 index 0000000..0a0434a Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/networkwizard_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml index 660bbcd..4d3adcb 100755 --- a/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml +++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/meta/plugin_networkwizard.xml @@ -9,6 +9,7 @@ Step by step network configuration With the NetworkWizard you can easy configure your network step by step. + Dream Multimedia @@ -18,6 +19,7 @@ Mit dem NetzwerkWizard können Sie Ihr Netzwerk konfigurieren. Sie werden Schritt für Schritt durch die Konfiguration geleitet. + diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml b/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml index 134797a..dcd9d93 100755 --- a/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml +++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml @@ -1,172 +1,202 @@ - - - - + + + + self.clearSelectedKeys() self.selectKey("OK") - - + + - - - - - + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") - - + + self.checkInterface(self.selectedInterface) - - - - - - - - + + + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") self.selectKey("LEFT") self.selectKey("RIGHT") - - + + self.AdapterSetupEnd(self.selectedInterface) - - - - - - - - + + + + + + + self.clearSelectedKeys() self.selectKey("OK") - - + + self.checkNetwork() - - - - + + + self.condition = (self.InterfaceState == True ) - - - + + + self.clearSelectedKeys() self.selectKey("OK") - - -currStep = self.numSteps + + +currStep = self.numSteps self.wizard[currStep]["nextstep"] = None self.markDone() self.close() - - - - + + + self.condition = (self.InterfaceState == False ) - - - + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") - - - - - - - - + + + + + + + self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True) - - - - - + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") self.selectKey("LEFT") self.selectKey("RIGHT") - - - - - + + +self.checkWlanSelection() + + + + self.condition = (self.isInterfaceUp == False and self.WlanPluginInstalled == True) - - - - - - - - - + + + + + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") - - - - - + + + + self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == False) - - - - - - - - + + + + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") - - - - - - - - + + + + + + + self.clearSelectedKeys() self.selectKey("OK") self.selectKey("UP") self.selectKey("DOWN") self.selectKey("LEFT") self.selectKey("RIGHT") - - + + self.AdapterSetupEnd(self.selectedInterface) - - + + + + +self.condition = (self.InterfaceState == True ) + + + + +self.clearSelectedKeys() +self.selectKey("OK") +self["text"].setText(self.Text) + + +currStep = self.numSteps +self.wizard[currStep]["nextstep"] = None +self.markDone() +self.close() + + + + +self.condition = (self.InterfaceState == False ) + + + + +self.clearSelectedKeys() +self.selectKey("OK") +self.selectKey("UP") +self.selectKey("DOWN") + + + + + + - - - + + + self.clearSelectedKeys() self.selectKey("OK") - - + + diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml old mode 100644 new mode 100755 index d20b2e6..2cb47c0 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/plugin_positionersetup.xml @@ -10,7 +10,7 @@ PositionerSetup helps you installing a motorized dish. With the PositionerSetup extension it is easy to install and configure a motorized dish. - + Dream Multimedia @@ -20,7 +20,7 @@ Die PositionerSetup Erweiterung unterstützt Sie beim einrichten und konfigurieren einer motorgesteuerten Satellitenantenne. - + diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg old mode 100644 new mode 100755 index 6307213..7f8d8d2 Binary files a/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg and b/lib/python/Plugins/SystemPlugins/PositionerSetup/meta/positionersetup.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml old mode 100644 new mode 100755 index 8fa36e5..4c0c7af --- a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml +++ b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/plugin_satelliteequipmentcontrol.xml @@ -11,7 +11,7 @@ SatelliteEquipmentControl allows you to fine-tune DiSEqC-settings. With the SatelliteEquipmentControl extension it is possible to fine-tune DiSEqC-settings. - + Dream Multimedia @@ -20,7 +20,7 @@ Fein-Einstellungen für DiSEqC Die SatelliteEquipmentControl-Erweiterung unterstützt Sie beim Feintuning der DiSEqC Einstellungen. - + diff --git a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg old mode 100644 new mode 100755 index b9596a6..703650e Binary files a/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg and b/lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/meta/satcontrol.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml b/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml old mode 100644 new mode 100755 index aaab7e4..e9453de --- a/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml +++ b/lib/python/Plugins/SystemPlugins/Satfinder/meta/plugin_satfinder.xml @@ -8,10 +8,10 @@ Satfinder enigma2-plugin-systemplugins-satfinder Satfinder helps you to align your dish. - The Satfinder extension helps you to align your dish.\ + The Satfinder extension helps you to align your dish.\n It shows you informations about signal rate and errors. - + Dream Multimedia @@ -21,7 +21,7 @@ Die Satfinder-Erweiterung unterstützt Sie beim Ausrichten ihrer Satellitenanlage.\n Es zeigt Ihnen Daten wie Signalstärke und Fehlerrate an. - + diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg b/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg old mode 100644 new mode 100755 index c0bba0c..44f0981 Binary files a/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg and b/lib/python/Plugins/SystemPlugins/Satfinder/meta/satfinder.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am index 689d97e..d29fb00 100755 --- a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_skinselector.xml -EXTRA_DIST = skinselector.jpg +EXTRA_DIST = skinselector_de.jpg skinselector_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml old mode 100644 new mode 100755 index 4ce7f1b..717f732 --- a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml +++ b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/plugin_skinselector.xml @@ -11,7 +11,7 @@ The SkinSelector shows a menu with selectable skins.\n It's now easy to change the look and feel of your Dreambox. - + Dream Multimedia @@ -21,7 +21,7 @@ Die SkinSelector Erweiterung zeigt Ihnen ein Menu mit auswählbaren Skins.\n Sie können nun einfach das Aussehen der grafischen Oberfläche Ihrer Dreambox verändern. - + diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg deleted file mode 100644 index 74395ea..0000000 Binary files a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg new file mode 100755 index 0000000..3b40708 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg new file mode 100755 index 0000000..b9f0bd3 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SkinSelector/meta/skinselector_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py index 871f0a3..d9ccab5 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py @@ -66,6 +66,7 @@ class BackupScreen(Screen, ConfigListScreen): self.setTitle(_("Backup is running...")) def doBackup(self): + configfile.save() try: if (path.exists(self.backuppath) == False): makedirs(self.backuppath) diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am index 341938c..05a87d5 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_softwaremanager.xml -EXTRA_DIST = softmanager.jpg +EXTRA_DIST = softwaremanager_en.jpg softwaremanager_de.jpg diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml old mode 100644 new mode 100755 index fa84670..cd425c3 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/plugin_softwaremanager.xml @@ -11,7 +11,7 @@ The SoftwareManager manages your Dreambox software.\n It's easy to update your receiver's software, install or remove extensions or even backup and restore your system settings. - + Dream Multimedia @@ -22,7 +22,7 @@ Sie können nun einfach Ihre Dreambox-Software aktualisieren, neue Erweiterungen installieren oder entfernen, oder ihre Einstellungen sichern und wiederherstellen. - + diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg deleted file mode 100644 index a9d5a62..0000000 Binary files a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softmanager.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg new file mode 100755 index 0000000..54e6419 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg new file mode 100755 index 0000000..0832f0a Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/SoftwareManager/meta/softwaremanager_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py index 3a1f835..c70201b 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py @@ -23,7 +23,7 @@ from Components.About import about from Components.DreamInfoHandler import DreamInfoHandler from Components.Language import language from Components.AVSwitch import AVSwitch -from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_METADIR +from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN, SCOPE_METADIR from Tools.LoadPixmap import LoadPixmap from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad from cPickle import dump, load @@ -108,21 +108,47 @@ class UpdatePluginMenu(Screen): self.oktext = _("\nPress OK on your remote control to continue.") self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value ) if self.menu == 0: - self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + self.oktext) ) - #self.list.append(("install-plugins", _("Install extensions"), _("\nInstall new Extensions or Plugins to your dreambox" ) + self.oktext) ) - self.list.append(("software-restore", _("Software restore"), _("\nRestore your Dreambox with a new firmware." ) + self.oktext)) - self.list.append(("system-backup", _("Backup system settings"), _("\nBackup your Dreambox settings." ) + self.oktext)) - self.list.append(("system-restore",_("Restore system settings"), _("\nRestore your Dreambox settings." ) + self.oktext)) - self.list.append(("ipkg-install", _("Install local extension"), _("\nScan for local packages and install them." ) + self.oktext)) + self.list.append(("software-update", _("Software update"), _("\nOnline update of your Dreambox software." ) + self.oktext, None)) + #self.list.append(("install-plugins", _("Install extensions"), _("\nInstall new Extensions or Plugins to your dreambox" ) + self.oktext, None)) + self.list.append(("software-restore", _("Software restore"), _("\nRestore your Dreambox with a new firmware." ) + self.oktext, None)) + self.list.append(("system-backup", _("Backup system settings"), _("\nBackup your Dreambox settings." ) + self.oktext, None)) + self.list.append(("system-restore",_("Restore system settings"), _("\nRestore your Dreambox settings." ) + self.oktext, None)) + self.list.append(("ipkg-install", _("Install local extension"), _("\nScan for local packages and install them." ) + self.oktext, None)) + for p in plugins.getPlugins(PluginDescriptor.WHERE_SOFTWAREMANAGER): + if p.__call__.has_key("SoftwareSupported"): + callFnc = p.__call__["SoftwareSupported"](None) + if callFnc is not None: + if p.__call__.has_key("menuEntryName"): + menuEntryName = p.__call__["menuEntryName"](None) + else: + menuEntryName = _('Extended Software') + if p.__call__.has_key("menuEntryDescription"): + menuEntryDescription = p.__call__["menuEntryDescription"](None) + else: + menuEntryDescription = _('Extended Software Plugin') + self.list.append(('default-plugin', menuEntryName, menuEntryDescription + self.oktext, callFnc)) if config.usage.setup_level.index >= 2: # expert+ - self.list.append(("advanced", _("Advanced Options"), _("\nAdvanced options and settings." ) + self.oktext)) + self.list.append(("advanced", _("Advanced Options"), _("\nAdvanced options and settings." ) + self.oktext, None)) elif self.menu == 1: - self.list.append(("advancedrestore", _("Advanced restore"), _("\nRestore your backups by date." ) + self.oktext)) - self.list.append(("backuplocation", _("Choose backup location"), _("\nSelect your backup device.\nCurrent device: " ) + config.plugins.configurationbackup.backuplocation.value + self.oktext )) - self.list.append(("backupfiles", _("Choose backup files"), _("Select files for backup. Currently selected:\n" ) + self.backupdirs + self.oktext)) + self.list.append(("advancedrestore", _("Advanced restore"), _("\nRestore your backups by date." ) + self.oktext, None)) + self.list.append(("backuplocation", _("Choose backup location"), _("\nSelect your backup device.\nCurrent device: " ) + config.plugins.configurationbackup.backuplocation.value + self.oktext, None)) + self.list.append(("backupfiles", _("Choose backup files"), _("Select files for backup. Currently selected:\n" ) + self.backupdirs + self.oktext, None)) if config.usage.setup_level.index >= 2: # expert+ - self.list.append(("ipkg-manager", _("Packet management"), _("\nView, install and remove available or installed packages." ) + self.oktext)) - self.list.append(("ipkg-source",_("Choose upgrade source"), _("\nEdit the upgrade source address." ) + self.oktext)) + self.list.append(("ipkg-manager", _("Packet management"), _("\nView, install and remove available or installed packages." ) + self.oktext, None)) + self.list.append(("ipkg-source",_("Choose upgrade source"), _("\nEdit the upgrade source address." ) + self.oktext, None)) + for p in plugins.getPlugins(PluginDescriptor.WHERE_SOFTWAREMANAGER): + if p.__call__.has_key("AdvancedSoftwareSupported"): + callFnc = p.__call__["AdvancedSoftwareSupported"](None) + if callFnc is not None: + if p.__call__.has_key("menuEntryName"): + menuEntryName = p.__call__["menuEntryName"](None) + else: + menuEntryName = _('Advanced Software') + if p.__call__.has_key("menuEntryDescription"): + menuEntryDescription = p.__call__["menuEntryDescription"](None) + else: + menuEntryDescription = _('Advanced Software Plugin') + self.list.append(('advanced-plugin', menuEntryName, menuEntryDescription + self.oktext, callFnc)) self["menu"] = List(self.list) self["key_red"] = StaticText(_("Close")) @@ -150,33 +176,36 @@ class UpdatePluginMenu(Screen): def go(self): current = self["menu"].getCurrent() if current: - current = current[0] + currentEntry = current[0] if self.menu == 0: - if (current == "software-update"): + if (currentEntry == "software-update"): self.session.openWithCallback(self.runUpgrade, MessageBox, _("Do you want to update your Dreambox?")+"\n"+_("\nAfter pressing OK, please wait!")) - elif (current == "software-restore"): + elif (currentEntry == "software-restore"): self.session.open(ImageWizard) - elif (current == "install-plugins"): + elif (currentEntry == "install-plugins"): self.session.open(PluginManager, self.skin_path) - elif (current == "system-backup"): + elif (currentEntry == "system-backup"): self.session.openWithCallback(self.backupDone,BackupScreen, runBackup = True) - elif (current == "system-restore"): + elif (currentEntry == "system-restore"): if os_path.exists(self.fullbackupfilename): self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore your Enigma2 backup?\nEnigma2 will restart after the restore")) else: self.session.open(MessageBox, _("Sorry no backups found!"), MessageBox.TYPE_INFO, timeout = 10) - elif (current == "ipkg-install"): + elif (currentEntry == "ipkg-install"): try: from Plugins.Extensions.MediaScanner.plugin import main main(self.session) except: self.session.open(MessageBox, _("Sorry MediaScanner is not installed!"), MessageBox.TYPE_INFO, timeout = 10) - elif (current == "advanced"): + elif (currentEntry == "default-plugin"): + self.extended = current[3] + self.extended(self.session, None) + elif (currentEntry == "advanced"): self.session.open(UpdatePluginMenu, 1) elif self.menu == 1: - if (current == "ipkg-manager"): + if (currentEntry == "ipkg-manager"): self.session.open(PacketManager, self.skin_path) - elif (current == "backuplocation"): + elif (currentEntry == "backuplocation"): parts = [ (r.description, r.mountpoint, self.session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)] for x in parts: if not access(x[1], F_OK|R_OK|W_OK) or x[1] == '/': @@ -186,12 +215,15 @@ class UpdatePluginMenu(Screen): parts.remove(x) if len(parts): self.session.openWithCallback(self.backuplocation_choosen, ChoiceBox, title = _("Please select medium to use as backup location"), list = parts) - elif (current == "backupfiles"): + elif (currentEntry == "backupfiles"): self.session.openWithCallback(self.backupfiles_choosen,BackupSelection) - elif (current == "advancedrestore"): + elif (currentEntry == "advancedrestore"): self.session.open(RestoreMenu, self.skin_path) - elif (current == "ipkg-source"): + elif (currentEntry == "ipkg-source"): self.session.open(IPKGMenu, self.skin_path) + elif (currentEntry == "advanced-plugin"): + self.extended = current[3] + self.extended(self.session, None) def backupfiles_choosen(self, ret): self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value ) @@ -478,13 +510,13 @@ class PacketManager(Screen): def setStatus(self,status = None): if status: self.statuslist = [] - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) if status == 'update': - statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png")) + statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png")) self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'',statuspng, divpng )) self['list'].setList(self.statuslist) elif status == 'error': - statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png")) + statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png")) self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'',statuspng, divpng )) self['list'].setList(self.statuslist) @@ -600,15 +632,15 @@ class PacketManager(Screen): self.buildPacketList() def buildEntryComponent(self, name, version, description, state): - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) if state == 'installed': - installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png")) + installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png")) return((name, version, description, state, installedpng, divpng)) elif state == 'upgradeable': - upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgradeable.png")) + upgradeablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgradeable.png")) return((name, version, description, state, upgradeablepng, divpng)) else: - installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png")) + installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png")) return((name, version, description, state, installablepng, divpng)) def buildPacketList(self): @@ -779,19 +811,19 @@ class PluginManager(Screen, DreamInfoHandler): self["key_green"].setText("") self["key_blue"].setText("") self["key_yellow"].setText("") - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) if status == 'update': - statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png")) + statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png")) self.statuslist.append(( _("Package list update"), '', _("Trying to download a new packetlist. Please wait..." ),'', '', statuspng, divpng, None, '' )) self["list"].style = "default" self['list'].setList(self.statuslist) elif status == 'sync': - statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png")) + statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png")) self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' )) self["list"].style = "default" self['list'].setList(self.statuslist) elif status == 'error': - statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png")) + statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png")) self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' )) self["list"].style = "default" self['list'].setList(self.statuslist) @@ -978,18 +1010,18 @@ class PluginManager(Screen, DreamInfoHandler): self.Console.ePopen(cmd, self.InstallMetaPackage_Finished) def buildEntryComponent(self, name, details, description, packagename, state, selected = False): - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) if state == 'installed': - installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png")) + installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png")) return((name, details, description, packagename, state, installedpng, divpng, selected)) elif state == 'installable': - installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png")) + installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png")) return((name, details, description, packagename, state, installablepng, divpng, selected)) elif state == 'remove': - removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png")) + removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png")) return((name, details, description, packagename, state, removepng, divpng, selected)) elif state == 'install': - installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png")) + installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png")) return((name, details, description, packagename, state, installpng, divpng, selected)) def buildPacketList(self, categorytag = None): @@ -1051,7 +1083,7 @@ class PluginManager(Screen, DreamInfoHandler): self.selectionChanged() def buildCategoryComponent(self, tag = None): - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) if tag is not None: if tag == 'System': return(( _("System"), _("View list of available system extensions" ), tag, divpng )) @@ -1210,10 +1242,10 @@ class PluginManagerInfo(Screen): self['list'].updateList(self.list) def buildEntryComponent(self, action,info): - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) - upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/upgrade.png")) - installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png")) - removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) + upgradepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png")) + installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png")) + removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png")) if action == 'install': return(( _('Installing'), info, installpng, divpng)) elif action == 'remove': @@ -1282,11 +1314,11 @@ class PluginManagerHelp(Screen): self['list'].updateList(self.list) def buildEntryComponent(self, state): - divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) - installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installed.png")) - installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/installable.png")) - removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/remove.png")) - installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/install.png")) + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) + installedpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installed.png")) + installablepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/installable.png")) + removepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png")) + installpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/install.png")) if state == 'installed': return(( _('This plugin is installed.'), _('You can remove this plugin.'), installedpng, divpng)) @@ -1432,7 +1464,7 @@ class PluginDetails(Screen, DreamInfoHandler): if not noScreenshot: filename = self.thumbnail else: - filename = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/SoftwareManager/noprev.png") + filename = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/noprev.png") sc = AVSwitch().getFramebufferScale() self.picload.setPara((self["screenshot"].instance.size().width(), self["screenshot"].instance.size().height(), sc[0], sc[1], False, 1, "#00000000")) diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/Makefile.am index 9e24808..2e80f30 100755 --- a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_videoenhancement.xml -EXTRA_DIST = videoenhancement.jpg +EXTRA_DIST = videoenhancement_en.jpg videoenhancement_de.jpg diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml index 33b222e..208c7e0 100755 --- a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml +++ b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/plugin_videoenhancement.xml @@ -1,5 +1,8 @@ + + + @@ -9,15 +12,15 @@ enigma2-plugin-systemplugins-videoenhancement VideoEnhancement provides advanced video enhancement settings. The VideoEnhancement extension provides advanced video enhancement settings. - + Dream Multimedia - VideoEnhancement + Erweiterte A/V Einstellungen enigma2-plugin-systemplugins-videoenhancement - Videomode bietet erweiterte Video Konfigurationsoptionen. - Die Videomode-Erweiterung bietet erweiterte Video Konfigurationsoptionen. - + Erweiterte A/V Einstellungen für Ihre Dreambox. + Erweiterte A/V Einstellungen für Ihre Dreambox. + diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg deleted file mode 100755 index 0e0ef6f..0000000 Binary files a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg new file mode 100755 index 0000000..ecf0161 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg new file mode 100755 index 0000000..a97a7a3 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/VideoEnhancement/meta/videoenhancement_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/VideoTune/meta/plugin_videotune.xml b/lib/python/Plugins/SystemPlugins/VideoTune/meta/plugin_videotune.xml old mode 100644 new mode 100755 index 75abb90..c460943 --- a/lib/python/Plugins/SystemPlugins/VideoTune/meta/plugin_videotune.xml +++ b/lib/python/Plugins/SystemPlugins/VideoTune/meta/plugin_videotune.xml @@ -9,7 +9,7 @@ enigma2-plugin-systemplugins-videotune VideoTune helps fine-tuning your tv display. The VideoTune helps fine-tuning your tv display.\nYou can control brightness and contrast of your tv. - + Dream Multimedia - DE @@ -18,7 +18,7 @@ VideoTune hilft beim fein-einstellen des Fernsehers. VideoTune hilf beim fein-einstellen des Fernsehers.\nSie können Kontrast und Helligkeit fein-einstellen. - + diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am index 6c012e8..ef47443 100755 --- a/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile.am @@ -2,4 +2,4 @@ installdir = $(datadir)/meta/ dist_install_DATA = plugin_videomode.xml -EXTRA_DIST = videomode.jpg +EXTRA_DIST = videomode_en.jpg videomode_de.jpg diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml b/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml old mode 100644 new mode 100755 index 3891e0b..fbb6e3f --- a/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml +++ b/lib/python/Plugins/SystemPlugins/Videomode/meta/plugin_videomode.xml @@ -9,7 +9,7 @@ enigma2-plugin-systemplugins-videomode Videomode provides advanced video modes. The Videomode extension provides advanced video modes. - + Dream Multimedia @@ -17,7 +17,7 @@ enigma2-plugin-systemplugins-videomode Videomode bietet erweiterte Video Einstellungen. Die Videomode-Erweiterung bietet erweiterte Video-Einstellungen. - + diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg deleted file mode 100644 index adb5646..0000000 Binary files a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode.jpg and /dev/null differ diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg new file mode 100755 index 0000000..00b7ac7 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg new file mode 100755 index 0000000..1f4288b Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/Videomode/meta/videomode_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am b/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am index 365372c..2f36237 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/Makefile.am @@ -1,6 +1,6 @@ installdir = $(pkglibdir)/python/Plugins/SystemPlugins/WirelessLan -#SUBDIRS = meta +SUBDIRS = meta install_PYTHON = \ __init__.py \ diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py b/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py index ba1e13d..1c1471c 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py @@ -1,7 +1,7 @@ -from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER -from Components.MultiContent import MultiContentEntryText -from Components.GUIComponent import GUIComponent -from Components.HTMLComponent import HTMLComponent +#from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER +#from Components.MultiContent import MultiContentEntryText +#from Components.GUIComponent import GUIComponent +#from Components.HTMLComponent import HTMLComponent from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword from Components.Console import Console @@ -35,13 +35,12 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl class Wlan: def __init__(self, iface): a = ''; b = '' - for i in range(0, 255): - a = a + chr(i) - if i < 32 or i > 127: - b = b + ' ' - else: - b = b + chr(i) + a = a + chr(i) + if i < 32 or i > 127: + b = b + ' ' + else: + b = b + chr(i) self.iface = iface self.wlaniface = {} @@ -245,91 +244,6 @@ class Wlan: return status - -class WlanList(HTMLComponent, GUIComponent): - def __init__(self, session, iface): - - GUIComponent.__init__(self) - self.w = Wlan(iface) - self.iface = iface - - self.length = 0 - self.aplist = None - self.list = None - self.oldlist = None - self.l = None - self.l = eListboxPythonMultiContent() - - self.l.setFont(0, gFont("Regular", 32)) - self.l.setFont(1, gFont("Regular", 18)) - self.l.setFont(2, gFont("Regular", 16)) - self.l.setBuildFunc(self.buildWlanListEntry) - - self.reload() - - def buildWlanListEntry(self, essid, bssid, encrypted, iface, maxrate, signal): - - res = [ (essid, encrypted, iface) ] - - if essid == "": - essid = bssid - - e = encrypted and _("Yes") or _("No") - res.append( MultiContentEntryText(pos=(0, 0), size=(470, 35), font=0, flags=RT_HALIGN_LEFT, text=essid) ) - res.append( MultiContentEntryText(pos=(425, 0), size=(60, 20), font=1, flags=RT_HALIGN_LEFT, text=_("Signal: "))) - res.append( MultiContentEntryText(pos=(480, 0), size=(70, 35), font=0, flags=RT_HALIGN_RIGHT, text="%s" %signal)) - res.append( MultiContentEntryText(pos=(0, 40), size=(180, 20), font=1, flags=RT_HALIGN_LEFT, text=_("Max. Bitrate: %s") %maxrate )) - res.append( MultiContentEntryText(pos=(190, 40), size=(180, 20), font=1, flags=RT_HALIGN_CENTER, text=_("Encrypted: %s") %e )) - res.append( MultiContentEntryText(pos=(345, 40), size=(190, 20), font=1, flags=RT_HALIGN_RIGHT, text=_("Interface: %s") %iface )) - return res - - - def reload(self): - aps = self.w.getNetworkList() - - self.list = [] - self.aplist = [] - if aps is not None: - print "[Wlan.py] got Accespoints!" - for ap in aps: - a = aps[ap] - if a['active']: - if a['essid'] != '': - # a['essid'] = a['bssid'] - self.list.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) ) - #self.aplist.append( a['essid']) - if self.oldlist is not None: - for entry in self.oldlist: - if entry not in self.list: - self.list.append(entry) - - if len(self.list): - for entry in self.list: - self.aplist.append( entry[0]) - self.length = len(self.list) - self.oldlist = self.list - self.l.setList([]) - self.l.setList(self.list) - - GUI_WIDGET = eListbox - - - def getCurrent(self): - return self.l.getCurrentSelection() - - - def postWidgetCreate(self, instance): - instance.setContent(self.l) - instance.setItemHeight(60) - - - def getLength(self): - return self.length - - def getList(self): - return self.aplist - - class wpaSupplicant: def __init__(self): pass diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am new file mode 100755 index 0000000..6bc4aab --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile.am @@ -0,0 +1,5 @@ +installdir = $(datadir)/meta/ + +dist_install_DATA = plugin_wirelesslan.xml + +EXTRA_DIST = wirelesslan_de.jpg wirelesslan_en.jpg diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml new file mode 100755 index 0000000..1f882b3 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/plugin_wirelesslan.xml @@ -0,0 +1,27 @@ + + + + + + + Dream Multimedia + WirelessLan + enigma2-plugin-systemplugins-wirelesslan + Configure your WLAN network interface + The WirelessLan extensions helps you configuring your WLAN network interface. + + + + Dream Multimedia + WirelessLan + enigma2-plugin-systemplugins-wirelesslan + Konfigurieren Sie Ihr WLAN Netzwerk. + Die WirelessLan Erweiterung hilft Ihnen beim konfigurieren Ihres WLAN Netzwerkes.. + + + + + + + + diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg new file mode 100755 index 0000000..3869541 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_de.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg new file mode 100755 index 0000000..fe4fa97 Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/WirelessLan/meta/wirelesslan_en.jpg differ diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py index b7a64b9..a78857a 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py @@ -4,6 +4,7 @@ from Components.ActionMap import ActionMap, NumberActionMap from Components.Pixmap import Pixmap,MultiPixmap from Components.Label import Label from Components.Sources.StaticText import StaticText +from Components.Sources.List import List from Components.MenuList import MenuList from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword from Components.ConfigList import ConfigListScreen @@ -11,8 +12,9 @@ from Components.Network import Network, iNetwork from Components.Console import Console from Plugins.Plugin import PluginDescriptor from os import system, path as os_path, listdir -from Wlan import Wlan, WlanList, wpaSupplicant -from Wlan import Status, iStatus +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.LoadPixmap import LoadPixmap +from Wlan import Wlan, wpaSupplicant, iStatus plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan" @@ -39,37 +41,35 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl class WlanStatus(Screen): skin = """ - - - - - - - - - - - - - - - - - - - - - - - - - """ + + + + + + + + + + + + + + + + + + + + + + + + """ def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface - self.skin = WlanStatus.skin self["LabelBSSID"] = StaticText(_('Accesspoint:')) self["LabelESSID"] = StaticText(_('SSID:')) @@ -114,7 +114,6 @@ class WlanStatus(Screen): self.setTitle(_("Wireless Network State")) def resetList(self): - print "self.iface im resetlist",self.iface iStatus.getDataForInterface(self.iface,self.getInfoCB) def getInfoCB(self,data,status): @@ -134,7 +133,6 @@ class WlanStatus(Screen): self.close() def updateStatusbar(self): - print "self.iface im updateStatusbar",self.iface self["BSSID"].setText(_("Please wait...")) self["ESSID"].setText(_("Please wait...")) self["quality"].setText(_("Please wait...")) @@ -155,37 +153,55 @@ class WlanStatus(Screen): class WlanScan(Screen): skin = """ - - - - - - - - - - - - """ + + + + + + + + + + {"template": [ + MultiContentEntryText(pos = (0, 0), size = (550, 30), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the essid + MultiContentEntryText(pos = (0, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 5), # index 5 is the interface + MultiContentEntryText(pos = (175, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 4), # index 0 is the encryption + MultiContentEntryText(pos = (350, 0), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 0 is the signal + MultiContentEntryText(pos = (350, 30), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 3), # index 0 is the maxrate + MultiContentEntryPixmapAlphaTest(pos = (0, 52), size = (550, 2), png = 6), # index 6 is the div pixmap + ], + "fonts": [gFont("Regular", 28),gFont("Regular", 18)], + "itemHeight": 54 + } + + + + + """ def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface - self.skin = WlanScan.skin self.skin_path = plugin_path self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") + self.APList = None + self.newAPList = None + self.WlanList = None + self.cleanList = None + self.oldlist = None + self.listLenght = None + self.rescanTimer = eTimer() + self.rescanTimer.callback.append(self.rescanTimerFired) self["info"] = StaticText() - self.list = [] - self["list"] = WlanList(self.session, self.iface) + self.list = [] + self["list"] = List(self.list) - self.setInfo() - self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Connect")) - self["key_yellow"] = StaticText(_("Refresh")) + self["key_yellow"] = StaticText() self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"], { @@ -195,63 +211,163 @@ class WlanScan(Screen): self["shortcuts"] = ActionMap(["ShortcutActions"], { - "red": self.cancel, + "red": self.cancel, "green": self.select, - "yellow": self.rescan, }) self.onLayoutFinish.append(self.layoutFinished) + self.getAccessPoints(refresh = False) def layoutFinished(self): self.setTitle(_("Choose a wireless network")) def select(self): cur = self["list"].getCurrent() - #print "CURRENT",cur if cur is not None: + self.rescanTimer.stop() + del self.rescanTimer if cur[1] is not None: - essid = cur[0] - if essid == '': - essid = cur[1] - encrypted = cur[2] - self.close(essid,self["list"].getList()) + essid = cur[1] + self.close(essid,self.getWlanList()) else: self.close(None,None) else: + self.rescanTimer.stop() + del self.rescanTimer self.close(None,None) def WlanSetupClosed(self, *ret): if ret[0] == 2: + self.rescanTimer.stop() + del self.rescanTimer self.close(None) - def rescan(self): - self["list"].reload() - self.setInfo() - 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: - iNetwork.getInterfaces(self.cancelCB) - - def cancelCB(self,data): - if data is not None: - if data is True: + self.rescanTimer.stop() + del self.rescanTimer self.close(None) - def setInfo(self): - length = self["list"].getLength() + def rescanTimerFired(self): + self.rescanTimer.stop() + self.updateAPList() + + def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal): + print "buildEntryComponent",essid + print "buildEntryComponent",bssid + 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)) + + def updateAPList(self): + self.oldlist = [] + self.oldlist = self.cleanList + self.newAPList = [] + newList = [] + tmpList = [] + newListIndex = None + currentListEntry = None + currentListIndex = None + newList = self.getAccessPoints(refresh = True) + for oldentry in self.oldlist: + if oldentry not in newList: + newList.append(oldentry) + + for newentry in newList: + if newentry[1] == "hidden...": + continue + tmpList.append(newentry) + + 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 == currentListEntry: + newListIndex = idx + idx +=1 + self['list'].setList(self.newAPList) + self["list"].setIndex(newListIndex) + self["list"].updateList(self.newAPList) + self.listLenght = len(self.newAPList) + self.buildWlanList() + self.setInfo() + + def getAccessPoints(self, refresh = False): + self.APList = [] + self.cleanList = [] + self.w = Wlan(self.iface) + aps = self.w.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['essid'], a['bssid']) ) + compList.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) ) + + for entry in tmpList: + if entry[0] == "": + for compentry in compList: + if compentry[1] == entry[1]: + compList.remove(compentry) + for entry in compList: + self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) ) + + 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] )) + + if refresh is False: + self['list'].setList(self.APList) + self.listLenght = len(self.APList) + self.setInfo() + self.rescanTimer.start(5000) + return self.cleanList + + def setInfo(self): + length = self.getLength() if length == 0: self["info"].setText(_("No wireless networks found! Please refresh.")) elif length == 1: self["info"].setText(_("1 wireless network found!")) else: - self["info"].setText(str(length)+_(" wireless networks found!")) + self["info"].setText(str(length)+_(" wireless networks found!")) + + def buildWlanList(self): + self.WlanList = [] + currList = [] + currList = self['list'].list + for entry in currList: + self.WlanList.append( (entry[1], entry[0]) ) + + def getLength(self): + return self.listLenght + + def getWlanList(self): + return self.WlanList def WlanStatusScreenMain(session, iface): @@ -259,13 +375,11 @@ def WlanStatusScreenMain(session, iface): def callFunction(iface): - w = Wlan(iface) i = w.getWirelessInterfaces() if i: if iface in i: return WlanStatusScreenMain - return None diff --git a/lib/python/Plugins/newplugin.py b/lib/python/Plugins/newplugin.py index 48bb28e..c1c6f94 100644 --- a/lib/python/Plugins/newplugin.py +++ b/lib/python/Plugins/newplugin.py @@ -101,8 +101,8 @@ for where in targetlist: importlist.append(where[0]) file.write("""from Screens.Screen import Screen -from Plugins.Plugin import PluginDescriptor, %s -""" % ', '.join(importlist)) +from Plugins.Plugin import PluginDescriptor +""") mainlist = [] for count in range(len(targetlist)): diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index 3dde7e2..f8edba1 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -6,6 +6,7 @@ from Components.Label import Label from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI from Components.ActionMap import ActionMap from Components.TimerSanityCheck import TimerSanityCheck +from Components.UsageConfig import preferredTimerPath from Components.Sources.ServiceEvent import ServiceEvent from Components.Sources.Event import Event from Screens.TimerEdit import TimerSanityConflict @@ -235,7 +236,7 @@ class EPGSelection(Screen): self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: - newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) + newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py index c1ffb58..cced3ce 100644 --- a/lib/python/Screens/EventView.py +++ b/lib/python/Screens/EventView.py @@ -6,6 +6,7 @@ from Components.Button import Button from Components.Label import Label from Components.ScrollLabel import ScrollLabel from Components.TimerList import TimerList +from Components.UsageConfig import preferredTimerPath from enigma import eEPGCache, eTimer, eServiceReference from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from TimerEntry import TimerEntry @@ -85,7 +86,7 @@ class EventViewBase: self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: - newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event)) + newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py index 59cc21d..a15c7ac 100644 --- a/lib/python/Screens/InfoBar.py +++ b/lib/python/Screens/InfoBar.py @@ -212,7 +212,6 @@ class MoviePlayer(InfoBarBase, InfoBarShowHide, \ return if answer in ("quit", "quitanddeleteconfirmed"): - config.movielist.last_videodir.cancel() self.close() elif answer == "movielist": ref = self.session.nav.getCurrentlyPlayingServiceReference() diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 2cbfeb7..58cee9f 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -10,6 +10,7 @@ from Components.ServiceEventTracker import ServiceEventTracker from Components.Sources.Boolean import Boolean from Components.config import config, ConfigBoolean, ConfigClock from Components.SystemInfo import SystemInfo +from Components.UsageConfig import preferredInstantRecordPath, defaultMoviePath from EpgSelection import EPGSelection from Plugins.Plugin import PluginDescriptor @@ -28,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput from ServiceReference import ServiceReference from Tools import Notifications -from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists +from Tools.Directories import fileExists from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \ iPlayableService, eServiceReference, eEPGCache @@ -690,8 +691,7 @@ class InfoBarSeek: iPlayableService.evEOF: self.__evEOF, iPlayableService.evSOF: self.__evSOF, }) - - self.minSpeedBackward = useSeekBackHack and 16 or 0 + self.fast_winding_hint_message_showed = False class InfoBarSeekActionMap(HelpableActionMap): def __init__(self, screen, *args, **kwargs): @@ -739,24 +739,19 @@ class InfoBarSeek: self.__seekableStatusChanged() def makeStateForward(self, n): - minspeed = config.seek.stepwise_minspeed.value - repeat = int(config.seek.stepwise_repeat.value) - if minspeed != "Never" and n >= int(minspeed) and repeat > 1: - return (0, n * repeat, repeat, ">> %dx" % n) - else: +# minspeed = config.seek.stepwise_minspeed.value +# repeat = int(config.seek.stepwise_repeat.value) +# if minspeed != "Never" and n >= int(minspeed) and repeat > 1: +# return (0, n * repeat, repeat, ">> %dx" % n) +# else: return (0, n, 0, ">> %dx" % n) def makeStateBackward(self, n): - minspeed = config.seek.stepwise_minspeed.value - repeat = int(config.seek.stepwise_repeat.value) - if self.minSpeedBackward and n < self.minSpeedBackward: - r = (self.minSpeedBackward - 1)/ n + 1 - if minspeed != "Never" and n >= int(minspeed) and repeat > 1: - r = max(r, repeat) - return (0, -n * r, r, "<< %dx" % n) - elif minspeed != "Never" and n >= int(minspeed) and repeat > 1: - return (0, -n * repeat, repeat, "<< %dx" % n) - else: +# minspeed = config.seek.stepwise_minspeed.value +# repeat = int(config.seek.stepwise_repeat.value) +# if minspeed != "Never" and n >= int(minspeed) and repeat > 1: +# return (0, -n * repeat, repeat, "<< %dx" % n) +# else: return (0, -n, 0, "<< %dx" % n) def makeStateSlowMotion(self, n): @@ -823,6 +818,7 @@ class InfoBarSeek: # print "seekable" def __serviceStarted(self): + self.fast_winding_hint_message_showed = False self.seekstate = self.SEEK_STATE_PLAY self.__seekableStatusChanged() @@ -876,7 +872,7 @@ class InfoBarSeek: if config.seek.on_pause.value == "play": self.unPauseService() elif config.seek.on_pause.value == "step": - self.doSeekRelative(0) + self.doSeekRelative(1) elif config.seek.on_pause.value == "last": self.setSeekState(self.lastseekstate) self.lastseekstate = self.SEEK_STATE_PLAY @@ -913,6 +909,12 @@ class InfoBarSeek: self.showAfterSeek() def seekFwd(self): + seek = self.getSeek() + if seek and not (seek.isCurrentlySeekable() & 2): + if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1): + self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10) + self.fast_winding_hint_message_showed = True + return if self.seekstate == self.SEEK_STATE_PLAY: self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value))) elif self.seekstate == self.SEEK_STATE_PAUSE: @@ -942,6 +944,12 @@ class InfoBarSeek: self.setSeekState(self.makeStateSlowMotion(speed)) def seekBack(self): + seek = self.getSeek() + if seek and not (seek.isCurrentlySeekable() & 2): + if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1): + self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10) + self.fast_winding_hint_message_showed = True + return seekstate = self.seekstate if seekstate == self.SEEK_STATE_PLAY: self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value))) @@ -949,7 +957,7 @@ class InfoBarSeek: self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value))) self.doSeekRelative(-6) elif seekstate == self.SEEK_STATE_PAUSE: - self.doSeekRelative(-3) + self.doSeekRelative(-1) elif self.isStateForward(seekstate): speed = seekstate[1] if seekstate[2]: @@ -1212,10 +1220,7 @@ class InfoBarTimeshift: self.setSeekState(self.SEEK_STATE_PAUSE) if back: - self.doSeek(-5) # seek some gops before end self.ts_rewind_timer.start(200, 1) - else: - self.doSeek(-1) # seek 1 gop before end def rewindService(self): self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value))) @@ -1484,7 +1489,7 @@ class InfoBarInstantRecord: if isinstance(serviceref, eServiceReference): serviceref = ServiceReference(serviceref) - recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value) + recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = preferredInstantRecordPath()) recording.dontSave = True if event is None or limitEvent == False: @@ -1585,9 +1590,9 @@ class InfoBarInstantRecord: self.session.nav.RecordTimer.timeChanged(entry) def instantRecord(self): - dir = config.movielist.last_videodir.value - if not fileExists(dir, 'w'): - dir = resolveFilename(SCOPE_HDD) + dir = preferredInstantRecordPath() + if not dir or not fileExists(dir, 'w'): + dir = defaultMoviePath() try: stat = os_stat(dir) except: @@ -1669,17 +1674,46 @@ class InfoBarAudioSelection: else: break + availableKeys = [] + usedKeys = [] + if SystemInfo["CanDownmixAC3"]: - tlist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix), - ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"), - ("--", "")] + tlist - keys = [ "red", "green", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n - selection += 3 - else: - tlist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist - keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n + flist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix), + ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")] + usedKeys.extend(["red", "green"]) + availableKeys.extend(["yellow", "blue"]) selection += 2 - self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection") + else: + flist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")] + usedKeys.extend(["red"]) + availableKeys.extend(["green", "yellow", "blue"]) + selection += 1 + + if hasattr(self, "runPlugin"): + class PluginCaller: + def __init__(self, fnc, *args): + self.fnc = fnc + self.args = args + def __call__(self, *args, **kwargs): + self.fnc(*self.args) + + Plugins = [ (p.name, PluginCaller(self.runPlugin, p)) for p in plugins.getPlugins(where = PluginDescriptor.WHERE_AUDIOMENU) ] + + for p in Plugins: + selection += 1 + flist.append((p[0], "CALLFUNC", p[1])) + if availableKeys: + usedKeys.append(availableKeys[0]) + del availableKeys[0] + else: + usedKeys.append("") + + flist.append(("--", "")) + usedKeys.append("") + selection += 1 + + keys = usedKeys + [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] + [""] * n + self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = flist + tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection") else: del self.audioTracks diff --git a/lib/python/Screens/LanguageSelection.py b/lib/python/Screens/LanguageSelection.py old mode 100644 new mode 100755 index 082daa5..fce10ac --- a/lib/python/Screens/LanguageSelection.py +++ b/lib/python/Screens/LanguageSelection.py @@ -13,14 +13,14 @@ def _cached(x): from Screens.Rc import Rc -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap def LanguageEntryComponent(file, name, index): - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/" + file + ".png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + file + ".png")) if png == None: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/missing.png")) res = (index, name, png) return res diff --git a/lib/python/Screens/LocationBox.py b/lib/python/Screens/LocationBox.py index 61d7105..29d94f5 100644 --- a/lib/python/Screens/LocationBox.py +++ b/lib/python/Screens/LocationBox.py @@ -289,6 +289,11 @@ class LocationBox(Screen, NumericalTextInput, HelpableScreen): else: self["filelist"].refresh() self.removeBookmark(name, True) + val = self.realBookmarks and self.realBookmarks.value + if val and name in val: + val.remove(name) + self.realBookmarks.value = val + self.realBookmarks.save() def up(self): self[self.currList].up() diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am index 44994b8..585983c 100755 --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -14,5 +14,5 @@ install_PYTHON = \ SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \ SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \ SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \ - TextBox.py FactoryReset.py + TextBox.py FactoryReset.py RecordPaths.py diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index 5f2032f..bb0709e 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -97,8 +97,12 @@ class Menu(Screen): def addMenu(self, destList, node): requires = node.get("requires") - if requires and not SystemInfo.get(requires, False): - return + if requires: + if requires[0] == '!': + if SystemInfo.get(requires[1:], False): + return + elif not SystemInfo.get(requires, False): + return MenuTitle = _(node.get("text", "??").encode("UTF-8")) entryID = node.get("entryID", "undefined") weight = node.get("weight", 50) @@ -120,8 +124,12 @@ class Menu(Screen): def addItem(self, destList, node): requires = node.get("requires") - if requires and not SystemInfo.get(requires, False): - return + if requires: + if requires[0] == '!': + if SystemInfo.get(requires[1:], False): + return + elif not SystemInfo.get(requires, False): + return item_text = node.get("text", "").encode("UTF-8") entryID = node.get("entryID", "undefined") weight = node.get("weight", 50) diff --git a/lib/python/Screens/MessageBox.py b/lib/python/Screens/MessageBox.py index 86bf07d..f3538b7 100644 --- a/lib/python/Screens/MessageBox.py +++ b/lib/python/Screens/MessageBox.py @@ -12,9 +12,11 @@ class MessageBox(Screen): TYPE_WARNING = 2 TYPE_ERROR = 3 - def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True): + def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None): self.type = type Screen.__init__(self, session) + + self.msgBoxID = msgBoxID self["text"] = Label(text) self["Text"] = StaticText(text) diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index 174a4f0..15f6b46 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -7,8 +7,9 @@ from Components.DiskInfo import DiskInfo from Components.Pixmap import Pixmap from Components.Label import Label from Components.PluginComponent import plugins -from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations +from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations, ConfigSet from Components.Sources.ServiceEvent import ServiceEvent +from Components.UsageConfig import defaultMoviePath from Plugins.Plugin import PluginDescriptor @@ -31,6 +32,7 @@ config.movielist.last_timer_videodir = ConfigText(default=resolveFilename(SCOPE_ config.movielist.videodirs = ConfigLocations(default=[resolveFilename(SCOPE_HDD)]) config.movielist.first_tags = ConfigText(default="") config.movielist.second_tags = ConfigText(default="") +config.movielist.last_selected_tags = ConfigSet([], default=[]) def setPreferredTagEditor(te): @@ -168,7 +170,10 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): HelpableScreen.__init__(self) self.tags = [ ] - self.selected_tags = None + if selectedmovie: + self.selected_tags = config.movielist.last_selected_tags.value + else: + self.selected_tags = None self.selected_tags_ele = None self.movemode = False @@ -183,8 +188,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self["DescriptionBorder"] = Pixmap() self["DescriptionBorder"].hide() - if not pathExists(config.movielist.last_videodir.value): - config.movielist.last_videodir.value = resolveFilename(SCOPE_HDD) + if not fileExists(config.movielist.last_videodir.value): + config.movielist.last_videodir.value = defaultMoviePath() config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + config.movielist.last_videodir.value) @@ -292,6 +297,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self.close(None) def saveconfig(self): + config.movielist.last_selected_tags.value = self.selected_tags config.movielist.moviesort.save() config.movielist.listtype.save() config.movielist.description.save() @@ -339,8 +345,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self["list"].setSortType(type) def reloadList(self, sel = None, home = False): - if not pathExists(config.movielist.last_videodir.value): - path = resolveFilename(SCOPE_HDD) + if not fileExists(config.movielist.last_videodir.value): + path = defaultMoviePath() config.movielist.last_videodir.value = path config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + path) @@ -370,7 +376,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def gotFilename(self, res): if res is not None and res is not config.movielist.last_videodir.value: - if pathExists(res): + if fileExists(res): config.movielist.last_videodir.value = res config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + res) @@ -392,7 +398,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def showTagsN(self, tagele): if not self.tags: self.showTagWarning() - elif not tagele or self.selected_tags_ele == tagele or not tagele.value in self.tags: + elif not tagele or tagele.value in self.selected_tags or not tagele.value in self.tags: self.showTagsMenu(tagele) else: self.selected_tags_ele = tagele diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index ec2bafe..c24fdde 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList @@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont @@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png")) if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) if active is True: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) if active is False: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2)) return res @@ -278,7 +279,6 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def remove(self): print "currentIndex:", self["config"].getCurrentIndex() - index = self["config"].getCurrentIndex() if index < len(self.nameservers): iNetwork.removeNameserver(self.nameservers[index]) @@ -309,24 +309,19 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.cancel, _("exit network adapter setup menu")), - "ok": (self.ok, _("select menu entry")), + "cancel": (self.keyCancel, _("exit network adapter configuration")), + "ok": (self.keySave, _("activate network adapter configuration")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.cancel, _("exit network adapter configuration")), + "red": (self.keyCancel, _("exit network adapter configuration")), "blue": (self.KeyBlue, _("open nameserver configuration")), }) - self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions", - { - "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), - }) - self["actions"] = NumberActionMap(["SetupActions"], { - "ok": self.ok, + "ok": self.keySave, }, -2) self.list = [] @@ -355,9 +350,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["key_red"] = StaticText(_("Cancel")) self["key_blue"] = StaticText(_("Edit DNS")) - self["VKeyIcon"] = Pixmap() + self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() - + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -386,9 +382,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Gateway"].setText("") self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None @@ -426,7 +419,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): try: self.aps = self.w.getNetworkList() if self.aps is not None: - print "[NetworkSetup.py] got Accespoints!" for ap in self.aps: a = self.aps[ap] if a['active']: @@ -443,7 +435,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.default = self.wsconfig['ssid'] if "hidden..." not in self.nwlist: - self.nwlist.append(("hidden...",_("hidden network"))) + 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 )) @@ -518,30 +510,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def KeyText(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid.setValue(callback) - self["config"].invalidate(self.hiddenSSID) - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk.setValue(callback) - self["config"].invalidate(self.encryptionKey) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -564,34 +536,38 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def keyRight(self): ConfigListScreen.keyRight(self) self.newConfig() + + def keySave(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + else: + if self.finished_cb: + self.finished_cb() + else: + self.close('cancel') - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) + def keySaveConfirm(self, ret = False): + if (ret == True): + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 1: + 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) + else: + self.applyConfig(True) else: - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) + self.keyCancel() - def ok(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - 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: - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + def secondIfaceFoundCB(self,data): + if data is False: + self.applyConfig(True) + else: + configuredInterfaces = iNetwork.getConfiguredAdapters() + for interface in configuredInterfaces: + if interface == self.iface: + continue + iNetwork.setAdapterAttribute(interface, "up", False) + iNetwork.deactivateInterface(interface) + self.applyConfig(True) def applyConfig(self, ret = False): if (ret == True): @@ -612,7 +588,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): 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) else: - self.cancel() + self.keyCancel() def applyConfigDataAvail(self, data): if data is True: @@ -624,46 +600,39 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def applyConfigfinishedCB(self,data): if data is True: - num_configured_if = len(iNetwork.getConfiguredAdapters()) - if num_configured_if >= 2: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + if self.finished_cb: + self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) else: - if self.finished_cb: - self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - else: - self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - - def secondIfaceFoundCB(self,data): - if data is False: - self.close('ok') - else: - configuredInterfaces = iNetwork.getConfiguredAdapters() - for interface in configuredInterfaces: - if interface == self.iface: - continue - iNetwork.setAdapterAttribute(interface, "up", False) - iNetwork.deactivateInterface(interface) - self.applyConfig(True) + self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) def ConfigfinishedCB(self,data): if data is not None: if data is True: self.close('ok') - def cancel(self): + def keyCancelConfirm(self, result): + if not result: + return if self.oldInterfaceState is False: - iNetwork.deactivateInterface(self.iface,self.cancelCB) + iNetwork.deactivateInterface(self.iface,self.keyCancelCB) + else: + self.close('cancel') + + def keyCancel(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?")) else: self.close('cancel') - def cancelCB(self,data): + def keyCancelCB(self,data): if data is not None: if data is True: self.close('cancel') def runAsync(self, finished_cb): self.finished_cb = finished_cb - self.ok() + self.keySave() def NameserverSetupClosed(self, *ret): iNetwork.loadNameserverConfig() @@ -675,6 +644,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() + + def hideInputHelp(self): + current = self["config"].getCurrent() + if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': + 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: + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() class AdapterSetupConfiguration(Screen, HelpableScreen): @@ -813,7 +791,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.loadDescription() def loadDescription(self): - print self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'test': @@ -838,10 +815,10 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if self.iface == 'wlan0' or self.iface == 'ath0': try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: iStatus.getDataForInterface(self.iface,self.getInfoCB) else: @@ -863,7 +840,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: self.extended = callFnc - print p.__call__ if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin menu.append((_("Scan Wireless Networks"), "scanwlan")) if iNetwork.getAdapterAttribute(self.iface, "up"): @@ -964,7 +940,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iNetwork.stopLinkStateConsole() iNetwork.stopDeactivateInterfaceConsole() try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: pass else: diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py index 3a7df9f..61bb7d0 100755 --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,5 +1,5 @@ from Screen import Screen - +from Components.Language import language from enigma import eConsoleAppContainer from Components.ActionMap import ActionMap @@ -14,6 +14,10 @@ from Tools.LoadPixmap import LoadPixmap from time import time +def languageChanged(): + plugins.clearPluginList() + plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) + class PluginBrowser(Screen): def __init__(self, session): Screen.__init__(self, session) @@ -226,3 +230,4 @@ class PluginDownloadBrowser(Screen): self.list = list self["list"].l.setList(list) +language.addCallback(languageChanged) \ No newline at end of file diff --git a/lib/python/Screens/RdsDisplay.py b/lib/python/Screens/RdsDisplay.py old mode 100644 new mode 100755 index 36d4590..0b99584 --- a/lib/python/Screens/RdsDisplay.py +++ b/lib/python/Screens/RdsDisplay.py @@ -4,7 +4,7 @@ from Components.ActionMap import NumberActionMap from Components.ServiceEventTracker import ServiceEventTracker from Components.Pixmap import Pixmap from Components.Label import Label -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap class RdsInfoDisplay(Screen): @@ -122,10 +122,10 @@ class RassInteractive(Screen): 9 : self["subpages_9"] } self.subpage_png = { - 1 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page1.png")), - 2 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page2.png")), - 3 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page3.png")), - 4 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page4.png")) } + 1 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page1.png")), + 2 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page2.png")), + 3 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page3.png")), + 4 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page4.png")) } self.current_page=0; self.current_subpage=0; diff --git a/lib/python/Screens/RecordPaths.py b/lib/python/Screens/RecordPaths.py new file mode 100644 index 0000000..c833266 --- /dev/null +++ b/lib/python/Screens/RecordPaths.py @@ -0,0 +1,194 @@ +from Screens.Screen import Screen +from Screens.LocationBox import MovieLocationBox, TimeshiftLocationBox +from Screens.MessageBox import MessageBox +from Components.Label import Label +from Components.config import config, ConfigSelection, getConfigListEntry, configfile +from Components.ConfigList import ConfigListScreen +from Components.ActionMap import ActionMap +from Tools.Directories import fileExists + + +class RecordPathsSettings(Screen,ConfigListScreen): + skin = """ + + + + + + + """ + + def __init__(self, session): + from Components.Sources.StaticText import StaticText + Screen.__init__(self, session) + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + + ConfigListScreen.__init__(self, []) + self.initConfigList() + + self["setupActions"] = ActionMap(["SetupActions", "ColorActions"], + { + "green": self.save, + "red": self.cancel, + "cancel": self.cancel, + "ok": self.ok, + }, -2) + + def checkReadWriteDir(self, configele): + print "checkReadWrite: ", configele.value + if configele.value in [x[0] for x in self.styles] or fileExists(configele.value, "w"): + configele.last_value = configele.value + return True + else: + dir = configele.value + configele.value = configele.last_value + self.session.open( + MessageBox, + _("The directory %s is not writable.\nMake sure you select a writable directory instead.")%dir, + type = MessageBox.TYPE_ERROR + ) + return False + + def initConfigList(self): + self.styles = [ ("", _("")), ("", _("")), ("", _("")) ] + styles_keys = [x[0] for x in self.styles] + tmp = config.movielist.videodirs.value + default = config.usage.default_path.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + print "DefaultPath: ", default, tmp + self.default_dirname = ConfigSelection(default = default, choices = tmp) + tmp = config.movielist.videodirs.value + default = config.usage.timer_path.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + print "TimerPath: ", default, tmp + self.timer_dirname = ConfigSelection(default = default, choices = self.styles+tmp) + tmp = config.movielist.videodirs.value + default = config.usage.instantrec_path.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + print "InstantrecPath: ", default, tmp + self.instantrec_dirname = ConfigSelection(default = default, choices = self.styles+tmp) + default = config.usage.timeshift_path.value + tmp = config.usage.allowed_timeshift_paths.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + print "TimeshiftPath: ", default, tmp + self.timeshift_dirname = ConfigSelection(default = default, choices = tmp) + self.default_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.timer_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.instantrec_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.timeshift_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + + self.list = [] + if config.usage.setup_level.index >= 2: + self.default_entry = getConfigListEntry(_("Default movie location"), self.default_dirname) + self.list.append(self.default_entry) + self.timer_entry = getConfigListEntry(_("Timer record location"), self.timer_dirname) + self.list.append(self.timer_entry) + self.instantrec_entry = getConfigListEntry(_("Instant record location"), self.instantrec_dirname) + self.list.append(self.instantrec_entry) + else: + self.default_entry = getConfigListEntry(_("Movie location"), self.default_dirname) + self.list.append(self.default_entry) + self.timeshift_entry = getConfigListEntry(_("Timeshift location"), self.timeshift_dirname) + self.list.append(self.timeshift_entry) + self["config"].setList(self.list) + + def ok(self): + currentry = self["config"].getCurrent() + self.lastvideodirs = config.movielist.videodirs.value + self.lasttimeshiftdirs = config.usage.allowed_timeshift_paths.value + if config.usage.setup_level.index >= 2: + txt = _("Default movie location") + else: + txt = _("Movie location") + if currentry == self.default_entry: + self.entrydirname = self.default_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + txt, + self.default_dirname.value + ) + elif currentry == self.timer_entry: + self.entrydirname = self.timer_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + _("Initial location in new timers"), + self.timer_dirname.value + ) + elif currentry == self.instantrec_entry: + self.entrydirname = self.instantrec_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + _("Location for instant recordings"), + self.instantrec_dirname.value + ) + elif currentry == self.timeshift_entry: + self.entrydirname = self.timeshift_dirname + config.usage.timeshift_path.value = self.timeshift_dirname.value + self.session.openWithCallback( + self.dirnameSelected, + TimeshiftLocationBox + ) + + def dirnameSelected(self, res): + if res is not None: + self.entrydirname.value = res + if config.movielist.videodirs.value != self.lastvideodirs: + styles_keys = [x[0] for x in self.styles] + tmp = config.movielist.videodirs.value + default = self.default_dirname.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + self.default_dirname.setChoices(tmp, default=default) + tmp = config.movielist.videodirs.value + default = self.timer_dirname.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + self.timer_dirname.setChoices(self.styles+tmp, default=default) + tmp = config.movielist.videodirs.value + default = self.instantrec_dirname.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + self.instantrec_dirname.setChoices(self.styles+tmp, default=default) + self.entrydirname.value = res + if config.usage.allowed_timeshift_paths.value != self.lasttimeshiftdirs: + tmp = config.usage.allowed_timeshift_paths.value + default = self.instantrec_dirname.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + self.timeshift_dirname.setChoices(tmp, default=default) + self.entrydirname.value = res + if self.entrydirname.last_value != res: + self.checkReadWriteDir(self.entrydirname) + + def save(self): + currentry = self["config"].getCurrent() + if self.checkReadWriteDir(currentry[1]): + config.usage.default_path.value = self.default_dirname.value + config.usage.timer_path.value = self.timer_dirname.value + config.usage.instantrec_path.value = self.instantrec_dirname.value + config.usage.timeshift_path.value = self.timeshift_dirname.value + config.usage.default_path.save() + config.usage.timer_path.save() + config.usage.instantrec_path.save() + config.usage.timeshift_path.save() + self.close() + + def cancel(self): + self.close() + diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 8b5089a..e24e463 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -8,6 +8,7 @@ from Components.NimManager import nimmanager from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement from Components.Sources.List import List from Screens.MessageBox import MessageBox +from Screens.ChoiceBox import ChoiceBox from time import mktime, localtime from datetime import datetime @@ -342,10 +343,10 @@ class NimSetup(Screen, ConfigListScreen): new_configured_sats = nimmanager.getConfiguredSats() self.unconfed_sats = old_configured_sats - new_configured_sats self.satpos_to_remove = None - self.deleteConfirmed(False) + self.deleteConfirmed((None, "no")) def deleteConfirmed(self, confirmed): - if confirmed: + if confirmed[1] == "yes" or confirmed[1] == "yestoall": eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove) if self.satpos_to_remove is not None: @@ -365,11 +366,15 @@ class NimSetup(Screen, ConfigListScreen): else: h = _("E") sat_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10) - self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Delete no more configured satellite\n%s?") %(sat_name)) + + if confirmed[1] == "yes" or confirmed[1] == "no": + self.session.openWithCallback(self.deleteConfirmed, ChoiceBox, _("Delete no more configured satellite\n%s?") %(sat_name), [(_("Yes"), "yes"), (_("No"), "no"), (_("Yes to all"), "yestoall"), (_("No to all"), "notoall")]) + if confirmed[1] == "yestoall" or confirmed[1] == "notoall": + self.deleteConfirmed(confirmed) break if not self.satpos_to_remove: self.close() - + def __init__(self, session, slotid): Screen.__init__(self, session) self.list = [ ] diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index bea0872..fa787a7 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -524,6 +524,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): for n in nimmanager.nim_slots: if n.config_mode == "nothing": continue + if n.config_mode == "advanced" and len(nimmanager.getSatListForNim(n.slot)) < 1: + continue if n.config_mode in ("loopthrough", "satposdepends"): root_id = nimmanager.sec.getRoot(n.slot_id, int(n.config.connectedTo.value)) if n.type == nimmanager.nim_slots[root_id].type: # check if connected from a DVB-S to DVB-S2 Nim or vice versa diff --git a/lib/python/Screens/Scart.py b/lib/python/Screens/Scart.py index dc51144..00e7859 100644 --- a/lib/python/Screens/Scart.py +++ b/lib/python/Screens/Scart.py @@ -1,10 +1,13 @@ from Screen import Screen from MessageBox import MessageBox from Components.AVSwitch import AVSwitch +from Tools import Notifications class Scart(Screen): def __init__(self, session, start_visible=True): Screen.__init__(self, session) + self.msgBox = None + self.notificationVisible = None self.avswitch = AVSwitch() @@ -22,7 +25,11 @@ class Scart(Screen): if not self.msgVisible: self.msgVisible = True self.avswitch.setInput("SCART") - self.msgBox = self.session.openWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR) + if not self.session.in_exec: + self.notificationVisible = True + Notifications.AddNotificationWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR, msgBoxID = "scart_msgbox") + else: + self.msgBox = self.session.openWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR) def MsgBoxClosed(self, *val): self.msgBox = None @@ -35,3 +42,13 @@ class Scart(Screen): return self.avswitch.setInput("ENCODER") self.msgVisible = False + if self.notificationVisible: + self.avswitch.setInput("ENCODER") + self.notificationVisible = False + for notification in Notifications.current_notifications: + try: + if notification[1].msgBoxID == "scart_msgbox": + notification[1].close() + except: + print "other notification is open. try another one." + \ No newline at end of file diff --git a/lib/python/Screens/SleepTimerEdit.py b/lib/python/Screens/SleepTimerEdit.py index ff061d8..e5e7af4 100644 --- a/lib/python/Screens/SleepTimerEdit.py +++ b/lib/python/Screens/SleepTimerEdit.py @@ -5,6 +5,7 @@ from Components.Input import Input from Components.Label import Label from Components.Pixmap import Pixmap from Components.config import config, ConfigInteger +from Components.SystemInfo import SystemInfo from enigma import eEPGCache from SleepTimer import SleepTimer from time import time @@ -77,7 +78,11 @@ class SleepTimerEdit(Screen): self["red_text"].setText(_("Action:") + " " + _("Disable timer")) if config.SleepTimer.action.value == "shutdown": - self["green_text"].setText(_("Sleep timer action:") + " " + _("Deep Standby")) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("Deep Standby") + else: + shutdownString = _("Shutdown") + self["green_text"].setText(_("Sleep timer action:") + " " + shutdownString) elif config.SleepTimer.action.value == "standby": self["green_text"].setText(_("Sleep timer action:") + " " + _("Standby")) diff --git a/lib/python/Screens/TaskView.py b/lib/python/Screens/TaskView.py index 1453c05..eb926ca 100644 --- a/lib/python/Screens/TaskView.py +++ b/lib/python/Screens/TaskView.py @@ -1,6 +1,7 @@ from Screen import Screen from Components.ConfigList import ConfigListScreen from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry +from Components.SystemInfo import SystemInfo from InfoBarGenerics import InfoBarNotifications import Screens.Standby from Tools import Notifications @@ -44,7 +45,11 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen): self.afterevents = [ "nothing", "standby", "deepstandby", "close" ] self.settings = ConfigSubsection() - self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = self.afterevents[afterEvent]) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", shutdownString)], default = self.afterevents[afterEvent]) self.setupList() self.state_changed() diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index caaf8c9..5435498 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -4,6 +4,7 @@ from Components.config import config from Components.MenuList import MenuList from Components.TimerList import TimerList from Components.TimerSanityCheck import TimerSanityCheck +from Components.UsageConfig import preferredTimerPath from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from Screen import Screen from Screens.ChoiceBox import ChoiceBox @@ -243,7 +244,7 @@ class TimerEditList(Screen): else: data = parseEvent(event, description = False) - self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = config.movielist.last_timer_videodir.value, *data)) + self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *data)) def addTimer(self, timer): self.session.openWithCallback(self.finishedAdd, TimerEntry, timer) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index edd1968..42a3195 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -8,11 +8,12 @@ from Components.MenuList import MenuList from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Components.UsageConfig import defaultMoviePath +from Components.SystemInfo import SystemInfo from Screens.MovieSelection import getPreferredTagEditor from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox from RecordTimer import AFTEREVENT -from Tools.Directories import resolveFilename, SCOPE_HDD from enigma import eEPGCache from time import localtime, mktime, time, strftime from datetime import datetime @@ -93,7 +94,11 @@ class TimerEntry(Screen, ConfigListScreen): day[weekday] = 1 self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay]) - self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", shutdownString), ("auto", _("auto"))], default = afterevent) self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) @@ -106,7 +111,7 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_starttime = ConfigClock(default = self.timer.begin) self.timerentry_endtime = ConfigClock(default = self.timer.end) - default = self.timer.dirname or resolveFilename(SCOPE_HDD) + default = self.timer.dirname or defaultMoviePath() tmp = config.movielist.videodirs.value if default not in tmp: tmp.append(default) @@ -273,9 +278,10 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.service_ref = self.timerentry_service_ref self.timer.tags = self.timerentry_tags - self.timer.dirname = self.timerentry_dirname.value - config.movielist.last_timer_videodir.value = self.timer.dirname - config.movielist.last_timer_videodir.save() + if self.timer.dirname or self.timerentry_dirname.value != defaultMoviePath(): + self.timer.dirname = self.timerentry_dirname.value + config.movielist.last_timer_videodir.value = self.timer.dirname + config.movielist.last_timer_videodir.save() if self.timerentry_type.value == "once": self.timer.begin, self.timer.end = self.getBeginEnd() diff --git a/lib/python/Screens/VirtualKeyBoard.py b/lib/python/Screens/VirtualKeyBoard.py index 19500ed..7846e4b 100755 --- a/lib/python/Screens/VirtualKeyBoard.py +++ b/lib/python/Screens/VirtualKeyBoard.py @@ -7,26 +7,25 @@ from Components.MenuList import MenuList from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER from Screen import Screen -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap class VirtualKeyBoardList(MenuList): def __init__(self, list, enableWrapAround=False): MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent) - self.l.setFont(0, gFont("Regular", 22)) + self.l.setFont(0, gFont("Regular", 28)) self.l.setItemHeight(45) def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False): - key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png")) - key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png")) - key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png")) - key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png")) - key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png")) - key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png")) - key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png")) - key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png")) - key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png")) - + key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png")) + key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png")) + key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png")) + key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png")) + key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png")) + key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png")) + key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png")) + key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png")) + key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png")) res = [ (keys) ] x = 0 @@ -36,33 +35,45 @@ def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False): else: shiftkey_png = key_shift for key in keys: + width = None if key == "EXIT": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc)) + width = key_esc.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_esc)) elif key == "BACKSPACE": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace)) + width = key_backspace.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_backspace)) elif key == "CLEAR": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr)) + width = key_clr.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_clr)) elif key == "SHIFT": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png)) + width = shiftkey_png.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=shiftkey_png)) elif key == "SPACE": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space)) + width = key_space.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_space)) elif key == "OK": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok)) + width = key_ok.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_ok)) #elif key == "<-": # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left)) #elif key == "->": # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right)) else: + width = key_bg.size().width() res.extend(( - MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg), - MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER) + MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_bg), + MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER) )) if selectedKey == count: - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel)) - - x += 45 + width = key_sel.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_sel)) + + if width is not None: + x += width + else: + x += 45 count += 1 return res diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index 74219eb..1bff028 100755 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -1,16 +1,15 @@ from Screen import Screen - from Screens.HelpMenu import HelpableScreen from Screens.MessageBox import MessageBox -from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS +from Components.config import config, ConfigText, ConfigPassword, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS from Components.Label import Label +from Components.Sources.StaticText import StaticText from Components.Slider import Slider from Components.ActionMap import NumberActionMap from Components.MenuList import MenuList from Components.ConfigList import ConfigList from Components.Sources.List import List - from enigma import eTimer from xml.sax import make_parser @@ -19,8 +18,8 @@ from xml.sax.handler import ContentHandler class WizardSummary(Screen): skin = """ - - + + """ @@ -36,7 +35,7 @@ class WizardSummary(Screen): #self.skinName.append("Wizard") #print "*************+++++++++++++++++****************++++++++++******************* WizardSummary", self.skinName # - self["text"] = Label("") + self["text"] = StaticText("") self.onShow.append(self.setCallback) def setCallback(self): @@ -214,12 +213,13 @@ class Wizard(Screen): self.onShown.append(self.updateValues) self.configInstance = None + self.currentConfigIndex = None self.lcdCallbacks = [] self.disableKeys = False - self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"], + self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions", "KeyboardInputActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.ok, @@ -245,6 +245,13 @@ class Wizard(Screen): "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) + + self["VirtualKB"] = NumberActionMap(["VirtualKeyboardActions"], + { + "showVirtualKeyboard": self.KeyText, + }, -2) + + self["VirtualKB"].setEnabled(False) def red(self): print "red" @@ -405,6 +412,7 @@ class Wizard(Screen): self.resetCounter() if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None or self.wizard[self.currStep]["config"]["type"] == "dynamic"): self["config"].instance.moveSelection(self["config"].instance.moveUp) + self.handleInputHelpers() elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0): self["list"].selectPrevious() if self.wizard[self.currStep].has_key("onselect"): @@ -418,6 +426,7 @@ class Wizard(Screen): self.resetCounter() if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None or self.wizard[self.currStep]["config"]["type"] == "dynamic"): self["config"].instance.moveSelection(self["config"].instance.moveDown) + self.handleInputHelpers() elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0): #self["list"].instance.moveSelection(self["list"].instance.moveDown) self["list"].selectNext() @@ -598,6 +607,9 @@ class Wizard(Screen): print "clearConfigList", self.configInstance["config"], self["config"] else: self["config"].l.setList([]) + self.handleInputHelpers() + + else: if self.has_key("config"): self["config"].hide() @@ -614,6 +626,45 @@ class Wizard(Screen): self.finished(gotoStep = self.wizard[self.currStep]["timeoutstep"]) self.updateText() + def handleInputHelpers(self): + if self["config"].getCurrent() is not None: + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(True) + self["VKeyIcon"].boolean = True + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + + def KeyText(self): + from Screens.VirtualKeyBoard import VirtualKeyBoard + self.currentConfigIndex = self["config"].getCurrentIndex() + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue()) + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + self["config"].instance.moveSelectionTo(self.currentConfigIndex) + self["config"].setCurrentIndex(self.currentConfigIndex) + self["config"].getCurrent()[1].setValue(callback) + self["config"].invalidate(self["config"].getCurrent()) + + class WizardManager: def __init__(self): self.wizards = [] diff --git a/lib/python/Tools/Directories.py b/lib/python/Tools/Directories.py index 681bc04..8ed2c8a 100755 --- a/lib/python/Tools/Directories.py +++ b/lib/python/Tools/Directories.py @@ -33,6 +33,7 @@ SCOPE_DEFAULTDIR = 13 SCOPE_DEFAULTPARTITION = 14 SCOPE_DEFAULTPARTITIONMOUNTDIR = 15 SCOPE_METADIR = 16 +SCOPE_CURRENT_PLUGIN = 17 PATH_CREATE = 0 PATH_DONTCREATE = 1 @@ -85,7 +86,27 @@ def resolveFilename(scope, base = "", path_prefix = None): tmp = defaultPaths[SCOPE_SKIN] pos = config.skin.primary_skin.value.rfind('/') if pos != -1: - path = tmp[0]+config.skin.primary_skin.value[:pos+1] + #if basefile is not available use default skin path as fallback + tmpfile = tmp[0]+config.skin.primary_skin.value[:pos+1] + base + if fileExists(tmpfile): + path = tmp[0]+config.skin.primary_skin.value[:pos+1] + else: + path = tmp[0] + else: + path = tmp[0] + + elif scope == SCOPE_CURRENT_PLUGIN: + tmp = defaultPaths[SCOPE_PLUGINS] + from Components.config import config + skintmp = defaultPaths[SCOPE_SKIN] + pos = config.skin.primary_skin.value.rfind('/') + if pos != -1: + #if basefile is not available inside current skin path, use the original provided file as fallback + skintmpfile = skintmp[0]+config.skin.primary_skin.value[:pos+1] + base + if fileExists(skintmpfile): + path = skintmp[0]+config.skin.primary_skin.value[:pos+1] + else: + path = tmp[0] else: path = tmp[0] else: diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 1a28fbd..c8e64b8 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -917,7 +917,7 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv m_is_pvr = !m_reference.path.empty(); m_timeshift_enabled = m_timeshift_active = 0, m_timeshift_changed = 0; - m_skipmode = 0; + m_skipmode = m_fastforward = m_slowmotion = 0; CONNECT(m_service_handler.serviceEvent, eDVBServicePlay::serviceEvent); CONNECT(m_service_handler_timeshift.serviceEvent, eDVBServicePlay::serviceEventTimeshift); @@ -1185,7 +1185,10 @@ RESULT eDVBServicePlay::setSlowMotion(int ratio) eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio); setFastForward_internal(0); if (m_decoder) + { + m_slowmotion = ratio; return m_decoder->setSlowMotion(ratio); + } else return -1; } @@ -1197,10 +1200,11 @@ RESULT eDVBServicePlay::setFastForward(int ratio) return setFastForward_internal(ratio); } -RESULT eDVBServicePlay::setFastForward_internal(int ratio) +RESULT eDVBServicePlay::setFastForward_internal(int ratio, bool final_seek) { - int skipmode, ffratio; - + int skipmode, ffratio, ret = 0; + pts_t pos=0; + if (ratio > 8) { skipmode = ratio; @@ -1225,19 +1229,28 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio) if (m_cue) m_cue->setSkipmode(skipmode * 90000); /* convert to 90000 per second */ } - + m_skipmode = skipmode; - + + if (final_seek) + eDebug("trickplay stopped .. ret %d, pos %lld", getPlayPosition(pos), pos); + + m_fastforward = ffratio; + if (!m_decoder) return -1; - + if (ffratio == 0) ; /* return m_decoder->play(); is done in caller*/ else if (ffratio != 1) - return m_decoder->setFastForward(ffratio); + ret = m_decoder->setFastForward(ffratio); else - return m_decoder->setTrickmode(); - return 0; + ret = m_decoder->setTrickmode(); + + if (pos) + eDebug("final seek after trickplay ret %d", seekTo(pos)); + + return ret; } RESULT eDVBServicePlay::seek(ePtr &ptr) @@ -1266,9 +1279,10 @@ RESULT eDVBServicePlay::getLength(pts_t &len) RESULT eDVBServicePlay::pause() { eDebug("eDVBServicePlay::pause"); - setFastForward_internal(0); + setFastForward_internal(0, m_slowmotion || m_fastforward > 1); if (m_decoder) { + m_slowmotion = 0; m_is_paused = 1; return m_decoder->pause(); } else @@ -1278,9 +1292,10 @@ RESULT eDVBServicePlay::pause() RESULT eDVBServicePlay::unpause() { eDebug("eDVBServicePlay::unpause"); - setFastForward_internal(0); + setFastForward_internal(0, m_slowmotion || m_fastforward > 1); if (m_decoder) { + m_slowmotion = 0; m_is_paused = 0; return m_decoder->play(); } else @@ -1370,7 +1385,7 @@ RESULT eDVBServicePlay::setTrickmode(int trick) RESULT eDVBServicePlay::isCurrentlySeekable() { - return m_is_pvr || m_timeshift_active; + return m_is_pvr || m_timeshift_active ? 3 : 0; // fast forward/backward possible and seeking possible } RESULT eDVBServicePlay::frontendInfo(ePtr &ptr) @@ -1728,6 +1743,7 @@ int eDVBServicePlay::selectAudioStream(int i) { eDVBServicePMTHandler::program program; eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler; + pts_t position = -1; if (h.getProgramInfo(program)) return -1; @@ -1750,6 +1766,9 @@ int eDVBServicePlay::selectAudioStream(int i) apidtype = program.audioStreams[stream].type; } + if (i != -1 && apid != m_current_audio_pid && (m_is_pvr || m_timeshift_active)) + eDebug("getPlayPosition ret %d, pos %lld in selectAudioStream", getPlayPosition(position), position); + m_current_audio_pid = apid; if (m_is_primary && m_decoder->setAudioPID(apid, apidtype)) @@ -1758,6 +1777,9 @@ int eDVBServicePlay::selectAudioStream(int i) return -4; } + if (position != -1) + eDebug("seekTo ret %d", seekTo(position)); + int rdsPid = apid; /* if we are not in PVR mode, timeshift is not active and we are not in pip mode, check if we need to enable the rds reader */ @@ -2229,7 +2251,7 @@ void eDVBServicePlay::switchToLive() m_new_subtitle_page_connection = 0; m_rds_decoder_event_connection = 0; m_video_event_connection = 0; - m_is_paused = m_skipmode = 0; /* not supported in live mode */ + m_is_paused = m_skipmode = m_fastforward = m_slowmotion = 0; /* not supported in live mode */ /* free the timeshift service handler, we need the resources */ m_service_handler_timeshift.free(); @@ -2263,12 +2285,13 @@ void eDVBServicePlay::switchToTimeshift() r.path = m_timeshift_file; m_cue = new eCueSheet(); + m_cue->seekTo(0, -1000); m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */ eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now."); pause(); updateDecoder(); /* mainly to switch off PCR, and to set pause */ - + m_event((iPlayableService*)this, evSeekableStatusChanged); } @@ -2398,17 +2421,8 @@ void eDVBServicePlay::updateDecoder() } } - std::string config_delay; - int config_delay_int = 0; - if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0) - config_delay_int = atoi(config_delay.c_str()); - m_decoder->setAC3Delay(ac3_delay == -1 ? config_delay_int : ac3_delay + config_delay_int); - - if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0) - config_delay_int = atoi(config_delay.c_str()); - else - config_delay_int = 0; - m_decoder->setPCMDelay(pcm_delay == -1 ? config_delay_int : pcm_delay + config_delay_int); + setAC3Delay(ac3_delay == -1 ? 0 : ac3_delay); + setPCMDelay(pcm_delay == -1 ? 0 : pcm_delay); m_decoder->setVideoPID(vpid, vpidtype); selectAudioStream(); @@ -2932,16 +2946,28 @@ void eDVBServicePlay::setAC3Delay(int delay) { if (m_dvb_service) m_dvb_service->setCacheEntry(eDVBService::cAC3DELAY, delay ? delay : -1); - if (m_decoder) - m_decoder->setAC3Delay(delay); + if (m_decoder) { + std::string config_delay; + int config_delay_int = 0; + if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0) + config_delay_int = atoi(config_delay.c_str()); + m_decoder->setAC3Delay(delay + config_delay_int); + } } void eDVBServicePlay::setPCMDelay(int delay) { if (m_dvb_service) m_dvb_service->setCacheEntry(eDVBService::cPCMDELAY, delay ? delay : -1); - if (m_decoder) - m_decoder->setPCMDelay(delay); + if (m_decoder) { + std::string config_delay; + int config_delay_int = 0; + if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0) + config_delay_int = atoi(config_delay.c_str()); + else + config_delay_int = 0; + m_decoder->setPCMDelay(delay + config_delay_int); + } } void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event) diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index b4d0f19..e3c7fd5 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -220,7 +220,7 @@ private: int m_current_audio_stream; int selectAudioStream(int n = -1); - RESULT setFastForward_internal(int ratio); + RESULT setFastForward_internal(int ratio, bool final_seek=false); /* timeshift */ ePtr m_record; @@ -233,6 +233,8 @@ private: void updateDecoder(); int m_skipmode; + int m_fastforward; + int m_slowmotion; /* cuesheet */ diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 34d0936..c0ae42f 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -2,20 +2,23 @@ /* note: this requires gstreamer 0.10.x and a big list of plugins. */ /* it's currently hardcoded to use a big-endian alsasink as sink. */ +#include #include +#include +#include +#include #include -#include -#include +#include +#include +#include #include #include -#include -#include -#include + +#include + #include #include #include -/* for subtitles */ -#include // eServiceFactoryMP3 @@ -43,6 +46,7 @@ eServiceFactoryMP3::eServiceFactoryMP3() extensions.push_back("mp4"); extensions.push_back("mov"); extensions.push_back("m4a"); + extensions.push_back("m2ts"); sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions); } @@ -187,6 +191,8 @@ int eStaticServiceMP3Info::getLength(const eServiceReference &ref) } // eServiceMP3 +int eServiceMP3::ac3_delay, + eServiceMP3::pcm_delay; eServiceMP3::eServiceMP3(eServiceReference ref) :m_ref(ref), m_pump(eApp, 1) @@ -635,7 +641,31 @@ RESULT eServiceMP3::setTrickmode(int trick) RESULT eServiceMP3::isCurrentlySeekable() { - return 1; + int ret = 3; // seeking and fast/slow winding possible + GstElement *sink; + + if (!m_gst_playbin) + return 0; + if (m_state != stRunning) + return 0; + + g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL); + + // disable fast winding yet when a dvbvideosink or dvbaudiosink is used + // for this we must do some changes on different places.. (gstreamer.. our sinks.. enigma2) + if (sink) { + ret &= ~2; // only seeking possible + gst_object_unref(sink); + } + else { + g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL); + if (sink) { + ret &= ~2; // only seeking possible + gst_object_unref(sink); + } + } + + return ret; } RESULT eServiceMP3::info(ePtr&i) @@ -659,7 +689,6 @@ RESULT eServiceMP3::getName(std::string &name) return 0; } - int eServiceMP3::getInfo(int w) { const gchar *tag = 0; @@ -955,6 +984,12 @@ RESULT eServiceMP3::subtitle(ePtr &ptr) return 0; } +RESULT eServiceMP3::audioDelay(ePtr &ptr) +{ + ptr = this; + return 0; +} + int eServiceMP3::getNumberOfTracks() { return m_audioStreams.size(); @@ -1093,6 +1128,8 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg) g_object_set (G_OBJECT (sink), "emit-signals", TRUE, NULL); gst_object_unref(sink); } + setAC3Delay(ac3_delay); + setPCMDelay(pcm_delay); } break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: { @@ -1579,6 +1616,96 @@ int eServiceMP3::setBufferSize(int size) return 0; } +int eServiceMP3::getAC3Delay() +{ + return ac3_delay; +} + +int eServiceMP3::getPCMDelay() +{ + return pcm_delay; +} + +void eServiceMP3::setAC3Delay(int delay) +{ + ac3_delay = delay; + if (!m_gst_playbin || m_state != stRunning) + return; + else + { + GstElement *sink; + int config_delay_int = delay; + g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL); + + if (sink) + { + std::string config_delay; + if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0) + config_delay_int += atoi(config_delay.c_str()); + gst_object_unref(sink); + } + else + { + eDebug("dont apply ac3 delay when no video is running!"); + config_delay_int = 0; + } + + g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL); + + if (sink) + { + gchar *name = gst_element_get_name(sink); + if (strstr(name, "dvbaudiosink")) + eTSMPEGDecoder::setHwAC3Delay(config_delay_int); + g_free(name); + gst_object_unref(sink); + } + } +} + +void eServiceMP3::setPCMDelay(int delay) +{ + pcm_delay = delay; + if (!m_gst_playbin || m_state != stRunning) + return; + else + { + GstElement *sink; + int config_delay_int = delay; + g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL); + + if (sink) + { + std::string config_delay; + if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0) + config_delay_int += atoi(config_delay.c_str()); + gst_object_unref(sink); + } + else + { + eDebug("dont apply pcm delay when no video is running!"); + config_delay_int = 0; + } + + g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL); + + if (sink) + { + gchar *name = gst_element_get_name(sink); + if (strstr(name, "dvbaudiosink")) + eTSMPEGDecoder::setHwPCMDelay(config_delay_int); + else + { + // this is realy untested..and not used yet + gint64 offset = config_delay_int; + offset *= 1000000; // milli to nano + g_object_set (G_OBJECT (m_gst_playbin), "ts-offset", offset, NULL); + } + g_free(name); + gst_object_unref(sink); + } + } +} #else #warning gstreamer not available, not building media player diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 15ed0b0..985179f 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -49,8 +49,9 @@ typedef enum { atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFL typedef enum { stPlainText, stSSA, stSRT } subtype_t; typedef enum { ctNone, ctMPEGTS, ctMPEGPS, ctMKV, ctAVI, ctMP4, ctVCD, ctCDA } containertype_t; -class eServiceMP3: public iPlayableService, public iPauseableService, - public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, public iSubtitleOutput, public iStreamedService, public Object +class eServiceMP3: public iPlayableService, public iPauseableService, + public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, + public iSubtitleOutput, public iStreamedService, public iAudioDelay, public Object { DECLARE_REF(eServiceMP3); public: @@ -70,13 +71,14 @@ public: RESULT audioTracks(ePtr &ptr); RESULT audioChannel(ePtr &ptr); RESULT subtitle(ePtr &ptr); + RESULT audioDelay(ePtr &ptr); // not implemented (yet) RESULT frontendInfo(ePtr &ptr) { ptr = 0; return -1; } RESULT subServices(ePtr &ptr) { ptr = 0; return -1; } RESULT timeshift(ePtr &ptr) { ptr = 0; return -1; } RESULT cueSheet(ePtr &ptr) { ptr = 0; return -1; } - RESULT audioDelay(ePtr &ptr) { ptr = 0; return -1; } + RESULT rdsDecoder(ePtr &ptr) { ptr = 0; return -1; } RESULT keys(ePtr &ptr) { ptr = 0; return -1; } RESULT stream(ePtr &ptr) { ptr = 0; return -1; } @@ -122,6 +124,12 @@ public: PyObject *getBufferCharge(); int setBufferSize(int size); + // iAudioDelay + int getAC3Delay(); + int getPCMDelay(); + void setAC3Delay(int); + void setPCMDelay(int); + struct audioStream { GstPad* pad; @@ -166,6 +174,8 @@ public: } }; private: + static int pcm_delay; + static int ac3_delay; int m_currentAudioStream; int m_currentSubtitleStream; int selectAudioStream(int i); diff --git a/lib/service/servicexine.cpp b/lib/service/servicexine.cpp index 44e6a6e..6b9adfb 100644 --- a/lib/service/servicexine.cpp +++ b/lib/service/servicexine.cpp @@ -315,7 +315,7 @@ RESULT eServiceXine::setTrickmode(int trick) RESULT eServiceXine::isCurrentlySeekable() { - return 1; + return 3; } RESULT eServiceXine::info(ePtr&i) diff --git a/mytest.py b/mytest.py index e42c100..c748538 100755 --- a/mytest.py +++ b/mytest.py @@ -41,14 +41,14 @@ profile("LOAD:skin") from skin import readSkin profile("LOAD:Tools") -from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave InitFallbackFiles() profile("ReloadProfiles") eDVBDB.getInstance().reloadBouquets() -config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi") +config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_CURRENT_SKIN, "radio.mvi")) config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False) config.misc.useTransponderTime = ConfigYesNo(default=True) config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts... diff --git a/po/fi.po b/po/fi.po index 806c044..80bd2b1 100644 --- a/po/fi.po +++ b/po/fi.po @@ -83,7 +83,7 @@ msgid "" "Scan for local packages and install them." msgstr "" "\n" -"Etsi ja asenna IPKG-paketteja." +"Etsi ja asenna paikallisia IPKG-paketteja." msgid "" "\n" @@ -119,7 +119,7 @@ msgid " updates available." msgstr "päivitystä tarjolla." msgid " wireless networks found!" -msgstr "" +msgstr "WLAN-verkkoja löytyi!" msgid "#000000" msgstr "" @@ -199,11 +199,8 @@ msgstr "* Käytettävissä vain kun syötetään piilotettu SSID tai verkkoavain msgid ".NFI Download failed:" msgstr ".NFI lataus epäonnistui:" -msgid "" -".NFI file passed md5sum signature check. You can safely flash this image!" -msgstr "" -".NFI-tiedoston md5sum-allekirjoitus on kunnossa. Voit asentaa tämän " -"päivityksen." +msgid ".NFI file passed md5sum signature check. You can safely flash this image!" +msgstr ".NFI-tiedoston md5sum-allekirjoitus on kunnossa. Voit asentaa tämän päivityksen." msgid "/usr/share/enigma2 directory" msgstr "/usr/share/enigma2-hakemisto" @@ -218,7 +215,7 @@ msgid "1" msgstr "" msgid "1 wireless network found!" -msgstr "" +msgstr "1 WLAN-verkko löytyi!" msgid "1.0" msgstr "1.0" @@ -350,16 +347,12 @@ msgstr "" "Tallennus on parhaillaan käynnissä.\n" "Mitä haluat tehdä?" -msgid "" -"A recording is currently running. Please stop the recording before trying to " -"configure the positioner." +msgid "A recording is currently running. Please stop the recording before trying to configure the positioner." msgstr "" "Tallennus on parhaillaan käynnissä. Pysäytä tallennus\n" "ennen kuin yrität muokata kääntömoottorin asetuksia." -msgid "" -"A recording is currently running. Please stop the recording before trying to " -"start the satfinder." +msgid "A recording is currently running. Please stop the recording before trying to start the satfinder." msgstr "" "Tallennus on parhaillaan käynnissä. Pysäytä tallennus\n" "ennen kuin käynnistät satelliittietsimen." @@ -442,7 +435,7 @@ msgid "Add Bookmark" msgstr "Kirjanmerkki" msgid "Add WLAN configuration?" -msgstr "" +msgstr "Lisää tiedot WLAN-verkosta?" msgid "Add a mark" msgstr "Lisää merkki" @@ -451,7 +444,7 @@ msgid "Add a new title" msgstr "Lisää uusi tallenne" msgid "Add network configuration?" -msgstr "" +msgstr "Lisää tiedot lähiverkosta?" msgid "Add timer" msgstr "Lisää ajastus" @@ -465,29 +458,21 @@ msgstr "Lisää suosikkilistalle" msgid "Add to favourites" msgstr "Lisää suosikkilistalle" -msgid "" -"Adds enigma2 settings and dreambox model informations like SN, rev... if " -"enabled." -msgstr "" +msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled." +msgstr "Jos valinta on ei, lisätään Enigma2:n asetukset, Dreamboxin malli, sarjanumero yms." msgid "Adds network configuration if enabled." -msgstr "" +msgstr "Jos valittu, lisätään tiedot lähiverkosta." msgid "Adds wlan configuration if enabled." -msgstr "" +msgstr "Jos valittu, lisätään tiedot WLAN-verkosta." -msgid "" -"Adjust the color settings so that all the color shades are distinguishable, " -"but appear as saturated as possible. If you are happy with the result, press " -"OK to close the video fine-tuning, or use the number keys to select other " -"test screens." +msgid "Adjust the color settings so that all the color shades are distinguishable, but appear as saturated as possible. If you are happy with the result, press OK to close the video fine-tuning, or use the number keys to select other test screens." msgstr "" -"Säädä värikylläisyys siten, että kaikki sävyt erottuvat ja ovat " -"mahdollisimman\n" +"Säädä värikylläisyys siten, että kaikki sävyt erottuvat ja ovat mahdollisimman\n" "kylläisiä.\n" "\n" -"Kun olet tyytyväinen tulokseen, sulje testikuva painamalla OK tai valitse " -"numeronäppäimillä 1-6 joku muu testikuva." +"Kun olet tyytyväinen tulokseen, sulje testikuva painamalla OK tai valitse numeronäppäimillä 1-6 joku muu testikuva." msgid "Advanced" msgstr "Laajennetut" @@ -496,7 +481,7 @@ msgid "Advanced Options" msgstr "Laajennetut valinnat" msgid "Advanced Video Enhancement Setup" -msgstr "" +msgstr "Laajemmat kuvanparannukset asetukset" msgid "Advanced Video Setup" msgstr "Laajennetut video-asetukset" @@ -507,12 +492,8 @@ msgstr "Laajennettu palautus" msgid "After event" msgstr "Ajastuksen jälkeen" -msgid "" -"After the start wizard is completed, you need to protect single services. " -"Refer to your dreambox's manual on how to do that." -msgstr "" -"Kun alkuasennus on päättynyt, pitää sinun valita lapsilukolla suojattavat " -"kanavat. Katso ohjekirjasta kuinka se tehdään." +msgid "After the start wizard is completed, you need to protect single services. Refer to your dreambox's manual on how to do that." +msgstr "Kun alkuasennus on päättynyt, pitää sinun valita lapsilukolla suojattavat kanavat. Katso ohjekirjasta kuinka se tehdään." msgid "Album" msgstr "Albumi" @@ -542,7 +523,7 @@ msgid "An unknown error occured!" msgstr "Tuntematon virhe!" msgid "Anonymize crashlog?" -msgstr "" +msgstr "Anonyymi kaatumisloki?" msgid "Arabic" msgstr "Arabia" @@ -616,7 +597,7 @@ msgid "Auto chapter split every ? minutes (0=never)" msgstr "Kappalejako joka ? min välein (0=ei koskaan)" msgid "Auto flesh" -msgstr "" +msgstr "Ihonvärin korostus" msgid "Auto scart switching" msgstr "Autom. SCARTin kytkentä" @@ -670,7 +651,7 @@ msgid "Backup is done. Please press OK to see the result." msgstr "Varmuuskopiointi suoritettu. Paina OK nähdäksesi tulokset." msgid "Backup is running..." -msgstr "" +msgstr "Varmuuskopiointi käynnissä" msgid "Backup system settings" msgstr "Varmuuskopioi asetukset" @@ -703,10 +684,10 @@ msgid "Bitrate:" msgstr "Nopeus:" msgid "Block noise reduction" -msgstr "" +msgstr "Pakkausneliöiden pehmennys" msgid "Blue boost" -msgstr "" +msgstr "Sinisen korostus" msgid "Bookmarks" msgstr "Kirjanmerkit" @@ -726,9 +707,7 @@ msgstr "Polta DVD:lle..." msgid "Bus: " msgstr "Väylä: " -msgid "" -"By pressing the OK Button on your remote control, the info bar is being " -"displayed." +msgid "By pressing the OK Button on your remote control, the info bar is being displayed." msgstr "Painamalla kaukosäätimen OK-näppäintä, näet tietopalkin." msgid "C" @@ -789,7 +768,7 @@ msgid "Change setup pin" msgstr "Vaihda asetusten tunnusluku" msgid "Change step size" -msgstr "" +msgstr "Muuta askelkokoa" msgid "Channel" msgstr "Kanava" @@ -858,13 +837,13 @@ msgid "Cleanup" msgstr "Poista vanhat" msgid "Cleanup Wizard" -msgstr "" +msgstr "Puhdistusavustaja" msgid "Cleanup Wizard settings" -msgstr "" +msgstr "Puhdistusavustajan asetukset" msgid "CleanupWizard" -msgstr "" +msgstr "Puhdistusavustaja" # Ohjatun asennuksen (Startup Wizard) kutosruudun valintateksti # Tekstin pitää ilmeisesti olla melko lyhyt, koska käyttäjän @@ -1017,16 +996,16 @@ msgid "Couldn't record due to conflicting timer %s" msgstr "Ajastusristiriidan takia ei voitu tallentaa %s" msgid "Crashlog settings" -msgstr "" +msgstr "Kaatumislokin asetukset" msgid "CrashlogAutoSubmit" -msgstr "" +msgstr "Kaatumislokien automaattilähetys" msgid "CrashlogAutoSubmit settings" -msgstr "" +msgstr "Kaatumislokien automaattilähetys" msgid "CrashlogAutoSubmit settings..." -msgstr "" +msgstr "Kaatumislokien automaattilähetys..." msgid "" "Crashlogs found!\n" @@ -1061,7 +1040,7 @@ msgid "Current settings:" msgstr "Nykyiset asetukset" msgid "Current value: " -msgstr "" +msgstr "Nykyinen arvo: " msgid "Current version:" msgstr "Nykyinen versio:" @@ -1101,13 +1080,13 @@ msgid "DVB-S2" msgstr "DVB-S2" msgid "DVD File Browser" -msgstr "" +msgstr "DVD-tiedostoselain" msgid "DVD Player" msgstr "DVD-soitin" msgid "DVD Titlelist" -msgstr "" +msgstr "DVD-otsikkoluettelo" msgid "DVD media toolbox" msgstr "DVD-levyn työkalut" @@ -1119,19 +1098,19 @@ msgid "Date" msgstr "Päiväys" msgid "Decide if you want to enable or disable the Cleanup Wizard." -msgstr "" +msgstr "Valitse haluatko ottaa puhdistusavustajan käyttöön." msgid "Decide what should be done when crashlogs are found." -msgstr "" +msgstr "Valitse mitä tehdään kun kaatumislokeja löytyy." msgid "Decide what should happen to the crashlogs after submission." -msgstr "" +msgstr "Valitse mitä kaatumislokeille tehdään lähettämisen jälkeen." msgid "Deep Standby" msgstr "Virransäästötila" msgid "Default" -msgstr "" +msgstr "Oletus" msgid "Default Settings" msgstr "Oletusasetukset" @@ -1149,7 +1128,7 @@ msgid "Delete" msgstr "Poista" msgid "Delete crashlogs" -msgstr "" +msgstr "Poista kaatumislokit" msgid "Delete entry" msgstr "Poista valinta" @@ -1169,7 +1148,7 @@ msgid "Description" msgstr "Kuvaus" msgid "Deselect" -msgstr "" +msgstr "Ei valittu" msgid "Destination directory" msgstr "Kohdehakemisto" @@ -1196,13 +1175,13 @@ msgid "DiSEqC repeats" msgstr "DiSEqC-toistoja" msgid "DiSEqC-Tester settings" -msgstr "" +msgstr "DiSEqC-testin asetukset" msgid "Dialing:" msgstr "" msgid "Digital contour removal" -msgstr "" +msgstr "Ääriviivakorostumien poisto" msgid "Direct playback of linked titles without menu" msgstr "Linkitettyjen tallenteiden toisto ilman valikkoa" @@ -1212,7 +1191,7 @@ msgid "Directory %s nonexistent." msgstr "Hakemistoa %s ei löydy." msgid "Directory browser" -msgstr "" +msgstr "Hakemistoselain" msgid "Disable" msgstr "Keskeytä" @@ -1224,7 +1203,7 @@ msgid "Disable Subtitles" msgstr "Poista tekstitys" msgid "Disable crashlog reporting" -msgstr "" +msgstr "Raportointi pois käytöstä" msgid "Disable timer" msgstr "Poista käytöstä" @@ -1233,7 +1212,7 @@ msgid "Disabled" msgstr "Ei käytössä" msgid "Disconnect" -msgstr "" +msgstr "Katkaise yhteys" #, python-format msgid "" @@ -1358,10 +1337,8 @@ msgstr "" "Jatketaanko kohdasta,\n" "johon katselu viimeksi jäi?" -msgid "" -"Do you want to submit your email address and name so that we can contact you " -"if needed?" -msgstr "" +msgid "Do you want to submit your email address and name so that we can contact you if needed?" +msgstr "Haluatko lähettää sähköpostiosoitteesi ja nimesi mahdollista yhteydenottoa varten?" msgid "Do you want to update your Dreambox?" msgstr "Haluatko päivittää Dreamboxisi?" @@ -1431,7 +1408,7 @@ msgid "Dutch" msgstr "Hollanti" msgid "Dynamic contrast" -msgstr "" +msgstr "Dynaaminen kontrasti" msgid "E" msgstr "E" @@ -1478,7 +1455,7 @@ msgid "Edit title" msgstr "Editoi" msgid "Edit upgrade source url." -msgstr "" +msgstr "Muokkaa päivitys-URL:ia." msgid "Electronic Program Guide" msgstr "Ohjelmaopas" @@ -1490,7 +1467,7 @@ msgid "Enable 5V for active antenna" msgstr "Syötä 5 voltin käyttöjännite aktiiviantennille" msgid "Enable Cleanup Wizard?" -msgstr "" +msgstr "Käytä puhdistusavustajaa?" msgid "Enable multiple bouquets" msgstr "Salli useiden suosikkilistojen luonti ja käyttö" @@ -1521,7 +1498,7 @@ msgid "Encryption Type" msgstr "Suojausjärjestelmä" msgid "Encryption:" -msgstr "" +msgstr "Salaus:" msgid "End time" msgstr "Lopetusaika" @@ -1569,7 +1546,7 @@ msgid "Enter the service pin" msgstr "Syötä kanavan tunnusluku" msgid "Enter your email address so that we can contact you if needed." -msgstr "" +msgstr "Syötä sähköpostiosoitteesi jotta voimme tarvittaessa ottaa yhteyttä." msgid "Error" msgstr "Virhe" @@ -1586,7 +1563,7 @@ msgstr "" "Yritä uudelleen?" msgid "Estonian" -msgstr "" +msgstr "Viro" msgid "Eventview" msgstr "Ohjelmatiedot" @@ -1613,7 +1590,7 @@ msgid "Exit network wizard" msgstr "Poistu verkkoasennuksesta" msgid "Exit the cleanup wizard" -msgstr "" +msgstr "Lopeta puhdistusavustaja" # Tämä on imagewizard.xml:stä löytyvä valintateksti msgid "Exit the wizard" @@ -1680,10 +1657,8 @@ msgstr "Verkko käynnistyi uudelleen" msgid "Finnish" msgstr "Suomi" -msgid "" -"First we need to download the latest boot environment for the USB flasher." -msgstr "" -"Aluksi lataamme viimeisimmän käynnistysympäristön USB-päivitysohjelmalle." +msgid "First we need to download the latest boot environment for the USB flasher." +msgstr "Aluksi lataamme viimeisimmän käynnistysympäristön USB-päivitysohjelmalle." msgid "Flash" msgstr "" @@ -1692,7 +1667,7 @@ msgid "Flashing failed" msgstr "Päivitys epäonnistui" msgid "Following tasks will be done after you press continue!" -msgstr "" +msgstr "Seuraavat tehtävät suoritetaan kun painat jatka!" msgid "Format" msgstr "Alusta" @@ -1786,7 +1761,7 @@ msgid "Greek" msgstr "Kreikka" msgid "Green boost" -msgstr "" +msgstr "Vihreän korostus" msgid "Guard Interval" msgstr "Suojaväli" @@ -1807,7 +1782,7 @@ msgid "Hidden network SSID" msgstr "Piilotettu verkko-SSID" msgid "Hidden networkname" -msgstr "" +msgstr "Piilotettu verkkonimi" msgid "Hierarchy Information" msgstr "Hierarkia-tietoja" @@ -1825,10 +1800,10 @@ msgid "How many minutes do you want to record?" msgstr "Kuinka monta minuuttia haluat tallentaa?" msgid "How to handle found crashlogs?" -msgstr "" +msgstr "Mitä löydetyille lokeille tehdään?" msgid "Hue" -msgstr "" +msgstr "Sävy" msgid "Hungarian" msgstr "Unkari" @@ -1840,7 +1815,7 @@ msgid "ISO file is too large for this filesystem!" msgstr "ISO-tiedosto on liian suuri tälle tiedostojärjestelmälle!" msgid "ISO path" -msgstr "ISO-polku" +msgstr "ISO-hakemisto" msgid "Icelandic" msgstr "Islanti" @@ -1856,23 +1831,14 @@ msgstr "" "Paina OK palataksesi takaisin." msgid "" -"If your TV has a brightness or contrast enhancement, disable it. If there is " -"something called \"dynamic\", set it to standard. Adjust the backlight level " -"to a value suiting your taste. Turn down contrast on your TV as much as " -"possible.\n" -"Then turn the brightness setting as low as possible, but make sure that the " -"two lowermost shades of gray stay distinguishable.\n" -"Do not care about the bright shades now. They will be set up in the next " -"step.\n" +"If your TV has a brightness or contrast enhancement, disable it. If there is something called \"dynamic\", set it to standard. Adjust the backlight level to a value suiting your taste. Turn down contrast on your TV as much as possible.\n" +"Then turn the brightness setting as low as possible, but make sure that the two lowermost shades of gray stay distinguishable.\n" +"Do not care about the bright shades now. They will be set up in the next step.\n" "If you are happy with the result, press OK." msgstr "" -"Jos televisiossasi on kirkkauden tai kontrastin automaattisäätö, kytke se " -"pois päältä. Jos kuva-asetuksissa on säätöjä nimeltä \"dynamic\" kytke ne " -"normaaliarvoon. Säädä huoneen valaistus sopivaksi. Säädä television " -"kontrasti alimpaan arvoon.\n" +"Jos televisiossasi on kirkkauden tai kontrastin automaattisäätö, kytke se pois päältä. Jos kuva-asetuksissa on säätöjä nimeltä \"dynamic\" kytke ne normaaliarvoon. Säädä huoneen valaistus sopivaksi. Säädä television kontrasti alimpaan arvoon.\n" "\n" -"Säädä television valoisuus niin alas kuin mahdollista ilman, että testikuvan " -"kaksi tumminta sävyä (1 ja 2) muuttuu yhtä tummiksi.\n" +"Säädä television valoisuus niin alas kuin mahdollista ilman, että testikuvan kaksi tumminta sävyä (1 ja 2) muuttuu yhtä tummiksi.\n" "\n" "Älä välitä kirkkaista sävyistä, ne säädetään seuraavassa vaiheessa.\n" "\n" @@ -1887,14 +1853,13 @@ msgstr "Päivitys" msgid "In Progress" msgstr "Käynnissä" -msgid "" -"In order to record a timer, the TV was switched to the recording service!\n" +msgid "In order to record a timer, the TV was switched to the recording service!\n" msgstr "" "Pakotettu kanavanvaihto. Ajastettu tallennus\n" "käynnistyi juuri ja tarvitsi tätä viritintä.\n" msgid "Include your email and name (optional) in the mail?" -msgstr "" +msgstr "Lisää lähetykseen sähköpostiosoite ja nimi?" msgid "Increased voltage" msgstr "Korotettu LNB-jännite" @@ -1940,10 +1905,10 @@ msgid "Install a new image with your web browser" msgstr "Päivitä uusi ohjelmisto WWW-selaimella" msgid "Install extensions." -msgstr "" +msgstr "Asenna laajennukset." msgid "Install local extension" -msgstr "" +msgstr "Asenna paikallinen laajennus" msgid "Install or remove finished." msgstr "Asenna tai poista valmiit." @@ -2013,12 +1978,13 @@ msgstr "Italia" msgid "Job View" msgstr "Työnäkymä" -#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect) +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this +#. breaks the aspect) msgid "Just Scale" msgstr "Aina kokoruutu" msgid "Keyboard" -msgstr "Näppäimistö" +msgstr "Näppäimistö..." msgid "Keyboard Map" msgstr "Näppäinasettelu" @@ -2051,7 +2017,7 @@ msgid "Language..." msgstr "Kielivalinta..." msgid "Last config" -msgstr "" +msgstr "Aikais.arvot" msgid "Last speed" msgstr "Aikaisempi nopeus" @@ -2068,7 +2034,8 @@ msgstr "Poistutaanko DVD-soittimesta?" msgid "Left" msgstr "Vasen" -#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term. +#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep +#. english term. msgid "Letterbox" msgstr "" @@ -2215,7 +2182,7 @@ msgid "Monday" msgstr "Maanantai" msgid "Mosquito noise reduction" -msgstr "" +msgstr "Mosquito-kohinan vaimennus" msgid "Mount failed" msgstr "Liittäminen epäonnistui" @@ -2254,9 +2221,7 @@ msgid "NEXT" msgstr "SEURAAVA" msgid "NFI image flashing completed. Press Yellow to Reboot!" -msgstr "" -"NFI-päivityksen asennus on suoritettu. Käynnistä uudelleen keltaisella " -"näppäimellä!" +msgstr "NFI-päivityksen asennus on suoritettu. Käynnistä uudelleen keltaisella näppäimellä!" msgid "NOW" msgstr "NYT" @@ -2320,7 +2285,7 @@ msgid "Network:" msgstr "Sovitin:" msgid "NetworkWizard" -msgstr "Verkkovelho" +msgstr "Verkkoavustaja" msgid "New" msgstr "Uusi" @@ -2371,7 +2336,7 @@ msgid "No details for this image file" msgstr "Ei tietoja tästä päivityksestä" msgid "No displayable files on this medium found!" -msgstr "Näytettäviä tiedostoja ei löytynyt!" +msgstr "Tiedostoja ei löytynyt!" msgid "No event info found, recording indefinitely." msgstr "" @@ -2384,8 +2349,7 @@ msgstr "Kaikki virittimet ovat jo käytössä!" msgid "No networks found" msgstr "Verkkoja ei löytynyt" -msgid "" -"No packages were upgraded yet. So you can check your network and try again." +msgid "No packages were upgraded yet. So you can check your network and try again." msgstr "" "Ohjelmistoja ei ole vielä päivitetty.\n" "Voit tarkistaa verkkoasetukset ja yrittää uudelleen." @@ -2442,30 +2406,24 @@ msgstr "" msgid "" "No working local network adapter found.\n" -"Please verify that you have attached a network cable and your network is " -"configured correctly." +"Please verify that you have attached a network cable and your network is configured correctly." msgstr "" "Toimivaa verkkokorttia ei löydy.\n" -"Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat " -"oikein." +"Tarkista, että olet kytkennyt verkkokaapelin ja lähiverkon asetukset ovat oikein." msgid "" "No working wireless network adapter found.\n" -"Please verify that you have attached a compatible WLAN device and your " -"network is configured correctly." +"Please verify that you have attached a compatible WLAN device and your network is configured correctly." msgstr "" "Toimivaa langatonta yhteyttä ei löydy.\n" -"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen ja verkko on " -"määritelty oikein." +"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen ja verkko on määritelty oikein." msgid "" "No working wireless network interface found.\n" -" Please verify that you have attached a compatible WLAN device or enable " -"your local network interface." +" Please verify that you have attached a compatible WLAN device or enable your local network interface." msgstr "" "Toimivaa langatonta yhteyttä ei löydy.\n" -"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke " -"lähiverkko päälle." +"Tarkista, että olet kytkenyt yhteensopivan WLAN-laitteen tai kytke lähiverkko päälle." msgid "No, but restart from begin" msgstr "Ei, aloita alusta" @@ -2477,19 +2435,20 @@ msgid "No, just start my dreambox" msgstr "Ei, käynnistä vain Dreambox" msgid "No, not now" -msgstr "" +msgstr "Ei, ei nyt" # Ohjatun asennuksen (Startup Wizard) kutosruudun valintateksti msgid "No, scan later manually" msgstr "Ei, kanavat haetaan myöhemmin manuaalisesti" msgid "No, send them never" -msgstr "" +msgstr "Ei, älä lähetä koskaan" msgid "None" msgstr "Ei mitään" -#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right) +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching +#. the left/right) msgid "Nonlinear" msgstr "Epälineaarinen" @@ -2500,12 +2459,8 @@ msgid "Norwegian" msgstr "Norja" #, python-format -msgid "" -"Not enough diskspace. Please free up some diskspace and try again. (%d MB " -"required, %d MB available)" -msgstr "" -"Liian vähän levytilaa. Vapauta levytilaa ja yritä uudelleen. (%d Mt " -"tarvitaan, %d Mt vapaana)" +msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)" +msgstr "Liian vähän levytilaa. Vapauta levytilaa ja yritä uudelleen. (%d Mt tarvitaan, %d Mt vapaana)" msgid "" "Nothing to scan!\n" @@ -2517,10 +2472,7 @@ msgstr "" msgid "Now Playing" msgstr "Toistetaan" -msgid "" -"Now, use the contrast setting to turn up the brightness of the background as " -"much as possible, but make sure that you can still see the difference " -"between the two brightest levels of shades.If you have done that, press OK." +msgid "Now, use the contrast setting to turn up the brightness of the background as much as possible, but make sure that you can still see the difference between the two brightest levels of shades.If you have done that, press OK." msgstr "" "Säädä kontrastisäädöllä tausta mahdollisimman valkoiseksi.\n" "\n" @@ -2535,10 +2487,10 @@ msgid "OK, guide me through the upgrade process" msgstr "OK, opasta minua päivityksessä" msgid "OK, remove another extensions" -msgstr "" +msgstr "OK, poista toinen laajennus" msgid "OK, remove some extensions" -msgstr "" +msgstr "OK, poista joitain laajennuksia" msgid "OSD Settings" msgstr "Kuvaruutunäytön asetukset" @@ -2562,7 +2514,7 @@ msgid "Only Free scan" msgstr "Hae vain salaamattomat" msgid "Optionally enter your name if you want to." -msgstr "" +msgstr "Jos haluat, lisää nimesi." msgid "Orbital Position" msgstr "Sijainti" @@ -2594,7 +2546,8 @@ msgstr "Ohjelmapakettien hallinta" msgid "Page" msgstr "Sivu" -#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term +#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, +#. keep english term msgid "Pan&Scan" msgstr "" @@ -2628,7 +2581,8 @@ msgstr "PiP-kuvan asetukset" msgid "PicturePlayer" msgstr "Kuvien katselu" -#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. +#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep +#. english term. msgid "Pillarbox" msgstr "" @@ -2678,24 +2632,20 @@ msgid "Please choose the default services lists you want to install." msgstr "Valitse oletuskanavalistat jotka haluat asentaa ja paina OK." msgid "" -"Please configure or verify your Nameservers by filling out the required " -"values.\n" +"Please configure or verify your Nameservers by filling out the required values.\n" "When you are ready press OK to continue." msgstr "" "Määritä ja tarkista nimipalvelimien tiedot.\n" "Paina OK-näppäintä kun olet valmis." msgid "" -"Please configure your internet connection by filling out the required " -"values.\n" +"Please configure your internet connection by filling out the required values.\n" "When you are ready press OK to continue." msgstr "" "Määritä lähiverkkoyhteys syöttämällä tarvittavat arvot.\n" "Paina OK-näppäintä kun olet valmis." -msgid "" -"Please disconnect all USB devices from your Dreambox and (re-)attach the " -"target USB stick (minimum size is 64 MB) now!" +msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!" msgstr "" msgid "Please do not change any values unless you know what you are doing!" @@ -2723,20 +2673,16 @@ msgid "Please enter the old pin code" msgstr "Syötä vanha tunnusluku" msgid "Please enter your email address here:" -msgstr "" +msgstr "Syötä sähköpostiosoitteesi:" msgid "Please enter your name here (optional):" -msgstr "" +msgstr "Syötä nimesi (ei pakollinen):" msgid "Please follow the instructions on the TV" msgstr "Seuraa ruudulla näkyviä ohjeita" -msgid "" -"Please note that the previously selected media could not be accessed and " -"therefore the default directory is being used instead." -msgstr "" -"Huomaa, että oletushakemisto on käytössä, koska aikaisemmin valittua levyä " -"ei voitu ladata." +msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead." +msgstr "Huomaa, että oletushakemisto on käytössä, koska aikaisemmin valittua levyä ei voitu ladata." msgid "Please press OK to continue." msgstr "Jatka painamalla OK." @@ -2760,10 +2706,10 @@ msgid "Please select a subservice..." msgstr "Valitse alipalvelu..." msgid "Please select an extension to remove." -msgstr "" +msgstr "Valitse poistettava lisäosa." msgid "Please select an option below." -msgstr "" +msgstr "Valitse jokin vaihtoehto." msgid "Please select medium to use as backup location" msgstr "Valitse tallennuspaikka varmuuskopiolle" @@ -2778,8 +2724,7 @@ msgid "Please select the movie path..." msgstr "Valitse tallennehakemisto..." msgid "" -"Please select the network interface that you want to use for your internet " -"connection.\n" +"Please select the network interface that you want to use for your internet connection.\n" "\n" "Please press OK to continue." msgstr "" @@ -2815,22 +2760,20 @@ msgstr "" "Muuta ikkunan kokoa Bouquet +/- napeilla.\n" "Palaa TV-tilaan OK-näppäimellä tai hylkää siirto EXIT-näppäimellä." -msgid "" -"Please use the UP and DOWN keys to select your language. Afterwards press " -"the OK button." +msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button." msgstr "Valitse kieli ylös/alas näppäimillä ja paina OK-näppäintä." msgid "Please wait for activation of your network configuration..." msgstr "Odota, verkon määritykset aktivoidaan..." msgid "Please wait while removing selected package..." -msgstr "" +msgstr "Odota, valittua pakettia poistetaan..." msgid "Please wait while scanning is in progress..." msgstr "Odota, haku on käynnissä..." msgid "Please wait while searching for removable packages..." -msgstr "" +msgstr "Odota, poistettavia paketteja haetaan..." msgid "Please wait while we configure your network..." msgstr "Odota, verkkoa määritetään..." @@ -2857,10 +2800,10 @@ msgid "Plugin manager" msgstr "Lisäosien hallinta" msgid "Plugin manager activity information" -msgstr "" +msgstr "Lisäosien hallinnan asennustiedot" msgid "Plugin manager help" -msgstr "" +msgstr "Lisäosien hallinan ohje" msgid "Plugins" msgstr "Plugin-lisäosat" @@ -2917,7 +2860,7 @@ msgid "Press OK on your remote control to continue." msgstr "Jatka painamalla OK-näppäintä." msgid "Press OK to activate the selected skin." -msgstr "" +msgstr "Ota valittu teema käyttöön painamalla OK." msgid "Press OK to activate the settings." msgstr "Ota käyttöön painamalla OK." @@ -2933,22 +2876,22 @@ msgid "Press OK to scan" msgstr "Aloita haku painamalla OK" msgid "Press OK to select a Provider." -msgstr "" +msgstr "Valitse palveluntarjoaja painamalla OK." msgid "Press OK to select/deselect a CAId." -msgstr "" +msgstr "Valitse/poista CAId:t OK-näppäimellä" msgid "Press OK to start the scan" msgstr "Aloita haku painamalla OK" msgid "Press OK to toggle the selection." -msgstr "" +msgstr "Muuta valintaa OK-näppäimellä." msgid "Press OK to view full changelog" -msgstr "" +msgstr "Katso koko muutosloki OK-näppäimellä" msgid "Press yellow to set this interface as default interface." -msgstr "" +msgstr "Määritä tämä oletukseksi keltaisella näppäimellä." msgid "Prev" msgstr "Edellinen" @@ -2963,7 +2906,7 @@ msgid "Priority" msgstr "Prioriteetti" msgid "Process" -msgstr "" +msgstr "Suorita" msgid "Properties of current title" msgstr "Omaisuudet" @@ -3090,7 +3033,7 @@ msgid "Remove currently selected title" msgstr "Poista valittu otsikko" msgid "Remove failed." -msgstr "" +msgstr "Poista epäonnistuneet." msgid "Remove finished." msgstr "Poista suoritetut." @@ -3111,7 +3054,7 @@ msgid "Remove title" msgstr "Poista" msgid "Removed successfully." -msgstr "" +msgstr "Poistettu onnistuneesti" msgid "Removing" msgstr "Poistetaan" @@ -3145,10 +3088,10 @@ msgid "Reset and renumerate title names" msgstr "Nollaa ja uudelleenjärjestä otsikot" msgid "Reset video enhancement settings to system defaults?" -msgstr "" +msgstr "Nollaa kuvanparannus oletusarvoihin?" msgid "Reset video enhancement settings to your last configuration?" -msgstr "" +msgstr "Nollaa kuvanparannus aikaisempiin arvoihin?" msgid "Resolution" msgstr "Tarkkuus" @@ -3177,23 +3120,19 @@ msgid "Restore" msgstr "Palauta" msgid "Restore backups" -msgstr "" +msgstr "Palauta varmistus" msgid "Restore is running..." -msgstr "" +msgstr "Palautus käynnissä..." msgid "Restore running" -msgstr "" +msgstr "Palautus käynnissä" msgid "Restore system settings" msgstr "Palauta asetukset" -msgid "" -"Restoring the settings is done. Please press OK to activate the restored " -"settings now." -msgstr "" -"Asetusten palautus on suoritettu. Paina OK ottaaksesi palautetut asetukset " -"käyttöön." +msgid "Restoring the settings is done. Please press OK to activate the restored settings now." +msgstr "Asetusten palautus on suoritettu. Paina OK ottaaksesi palautetut asetukset käyttöön." msgid "Resume from last position" msgstr "Jatka viimeksi katsotusta kohdasta" @@ -3272,7 +3211,7 @@ msgid "Satteliteequipment" msgstr "Satelliittilaite" msgid "Saturation" -msgstr "" +msgstr "Värikylläisyys" msgid "Saturday" msgstr "Lauantai" @@ -3284,7 +3223,7 @@ msgid "Save Playlist" msgstr "Tallenna soittolista" msgid "Scaler sharpness" -msgstr "" +msgstr "Skaalaimen terävyys" msgid "Scaling Mode" msgstr "Skaalaustila" @@ -3358,21 +3297,14 @@ msgstr "" msgid "Scan band US SUPER" msgstr "" -msgid "" -"Scan your network for wireless Access Points and connect to them using your " -"WLAN USB Stick\n" +msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n" msgstr "Hae WLAN-tukiasemia ja kytkeydy niihin USB WLAN-tikun avulla\n" -msgid "" -"Scan your network for wireless Access Points and connect to them using your " -"selected wireless device.\n" +msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n" msgstr "" -msgid "" -"Scans default lamedbs sorted by satellite with a connected dish positioner" -msgstr "" -"Hakee oletuskanavalistan satelliittijärjestyksessä käyttäen kytkettyä " -"antennimoottoria" +msgid "Scans default lamedbs sorted by satellite with a connected dish positioner" +msgstr "Hakee oletuskanavalistan satelliittijärjestyksessä käyttäen kytkettyä antennimoottoria" msgid "Search east" msgstr "Etsintä itään" @@ -3417,7 +3349,7 @@ msgid "Select files for backup. Currently selected:\n" msgstr "Valitse kopioitavat tiedostot. Nykyinen valinta:\n" msgid "Select files/folders to backup" -msgstr "" +msgstr "Valitse varmistettavat tiedostot/kansiot" msgid "Select image" msgstr "Valitse päivitys" @@ -3426,7 +3358,7 @@ msgid "Select interface" msgstr "Valitse verkkosovitin" msgid "Select package" -msgstr "" +msgstr "Valitse paketti" msgid "Select provider to add..." msgstr "Valitse lisättävä palveluntarjoaja..." @@ -3438,7 +3370,7 @@ msgid "Select service to add..." msgstr "Valitse lisättävä kanava..." msgid "Select upgrade source to edit." -msgstr "" +msgstr "Valitse muokattava päivityslähde." msgid "Select video input" msgstr "Valitse video-sisäänmeno" @@ -3468,7 +3400,7 @@ msgid "Sequence repeat" msgstr "Jakson toisto" msgid "Serbian" -msgstr "" +msgstr "Serbia" msgid "Service" msgstr "Kanava" @@ -3524,7 +3456,7 @@ msgid "Set as default Interface" msgstr "Aseta oletukseksi" msgid "Set available internal memory threshold for the warning." -msgstr "" +msgstr "Aseta vapaan muistin määrä varoitusta varten." msgid "Set interface as default Interface" msgstr "Määritä sovitin oletussovittimeksi" @@ -3542,7 +3474,7 @@ msgid "Setup Mode" msgstr "Mukautusvalintojen laajuus" msgid "Sharpness" -msgstr "" +msgstr "Terävyys" msgid "Show Info" msgstr "Näytä tiedot" @@ -3617,7 +3549,7 @@ msgid "Singlestep (GOP)" msgstr "Kuva-kuvalta (GOP)" msgid "Skin" -msgstr "" +msgstr "Teema..." msgid "Skin..." msgstr "Teema..." @@ -3639,10 +3571,10 @@ msgid "Slot %d" msgstr "Portti %d" msgid "Slovakian" -msgstr "" +msgstr "Slovakia" msgid "Slovenian" -msgstr "" +msgstr "Slovenia" msgid "Slow" msgstr "Hidas" @@ -3723,7 +3655,7 @@ msgid "Spanish" msgstr "Espanja" msgid "Split preview mode" -msgstr "" +msgstr "Jaettu esikatseluruutu" msgid "Standby" msgstr "Valmiustila" @@ -3825,7 +3757,8 @@ msgstr "Symbolinopeus" msgid "System" msgstr "Järjestelmä" -#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline) +#. TRANSLATORS: Add here whatever should be shown in the "translator" about +#. screen, up to 6 lines (use \n for newline) msgid "TRANSLATOR_INFO" msgstr "" @@ -3895,17 +3828,10 @@ msgstr "" "värinäppäimien takaa löytyviä\n" "toimintoja." -msgid "" -"The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to " -"create a Dreambox format data DVD (which will not play in stand-alone DVD " -"players) instead?" -msgstr "" -"DVD-standardi ei tue H.264 (HDTV) videota. Haluatko luoda Dreamboxin omassa " -"formaatissa olevan data-DVD:n? Levy ei toistu normaaleissa DVD-soittimissa." +msgid "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?" +msgstr "DVD-standardi ei tue H.264 (HDTV) videota. Haluatko luoda Dreamboxin omassa formaatissa olevan data-DVD:n? Levy ei toistu normaaleissa DVD-soittimissa." -msgid "" -"The USB stick is now bootable. Do you want to download the latest image from " -"the feed server and save it on the stick?" +msgid "The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?" msgstr "" msgid "The backup failed. Please choose a different backup location." @@ -3930,8 +3856,7 @@ msgstr "Seuraavat tiedostot löytyi..." msgid "" "The input port should be configured now.\n" -"You can now configure the screen by displaying some test pictures. Do you " -"want to do that now?" +"You can now configure the screen by displaying some test pictures. Do you want to do that now?" msgstr "" "Näytön liitäntä pitäisi nyt olla kunnossa.\n" "Voit nyt säätää näyttöä testikuvien avulla. Haluatko tehdä sen?" @@ -3939,38 +3864,24 @@ msgstr "" msgid "The installation of the default services lists is finished." msgstr "Oletuskanavalistojen asennus on suoritettu." -msgid "" -"The installation of the default settings is finished. You can now continue " -"configuring your Dreambox by pressing the OK button on the remote control." -msgstr "" -"Oletusarvojen asennus on suoritettu. Voit jatkaa Dreamboxin asetusten " -"muokkausta painamalla OK." +msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control." +msgstr "Oletusarvojen asennus on suoritettu. Voit jatkaa Dreamboxin asetusten muokkausta painamalla OK." -msgid "" -"The md5sum validation failed, the file may be corrupted! Are you sure that " -"you want to burn this image to flash memory? You are doing this at your own " -"risk!" -msgstr "" -"MD5SUM-tarkistusluku virheellinen, tiedosto voi olla vioittunut! Oletko " -"varma, että haluat asentaa tämän ohjelmistopäivityksen? Teet sen omalla " -"vastuulla!" +msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!" +msgstr "MD5SUM-tarkistusluku virheellinen, tiedosto voi olla vioittunut! Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen? Teet sen omalla vastuulla!" -msgid "" -"The md5sum validation failed, the file may be downloaded incompletely or be " -"corrupted!" -msgstr "" -"MD5SUM-tarkistusluku virheellinen, tiedosto voi olla keskeneräinen tai " -"vioittunut!" +msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!" +msgstr "MD5SUM-tarkistusluku virheellinen, tiedosto voi olla keskeneräinen tai vioittunut!" msgid "The package doesn't contain anything." msgstr "Paketti ei sisällä mitään." msgid "The package:" -msgstr "" +msgstr "Paketti:" #, python-format msgid "The path %s already exists." -msgstr "Polku %s on jo olemassa." +msgstr "Hakemisto %s on jo olemassa." msgid "The pin code has been changed successfully." msgstr "Tunnusluku on nyt vaihdettu." @@ -4008,13 +3919,11 @@ msgstr "" "WLAN-lisäosaa ei ole asennettu!\n" "Asenna se." -msgid "" -"The wizard can backup your current settings. Do you want to do a backup now?" -msgstr "" -"Velho voi kopioida nykyiset asetuksesi. Haluatko varmuuskopioida asetukset?" +msgid "The wizard can backup your current settings. Do you want to do a backup now?" +msgstr "Avustaja voi kopioida nykyiset asetuksesi. Haluatko varmuuskopioida asetukset?" msgid "The wizard is finished now." -msgstr "Velho on lopettanut. Paina OK." +msgstr "Avustaja on lopettanut. Paina OK." msgid "There are at least " msgstr "Saatavilla ainakin" @@ -4026,10 +3935,10 @@ msgid "There are no default settings in your image." msgstr "Oletusarvoja ei löydy. Paina OK." msgid "There are now " -msgstr "" +msgstr "Nyt on " msgid "There is nothing to be done." -msgstr "" +msgstr "Ei tehtäviä." msgid "" "There might not be enough Space on the selected Partition.\n" @@ -4042,32 +3951,20 @@ msgid "There was an error downloading the packetlist. Please try again." msgstr "Virhe ladattaessa IPKG-ohjelmapakettiluetteloa. Yritä uudestaan." msgid "There was an error. The package:" -msgstr "" +msgstr "Tapahtui virhe. Paketti:" #, python-format msgid "This .NFI file does not contain a valid %s image!" msgstr "Tämä .NFI-tiedosto ei sisällä toimivaa %s ohjelmistopäivitystä!" -msgid "" -"This .NFI file does not have a md5sum signature and is not guaranteed to " -"work. Do you really want to burn this image to flash memory?" -msgstr "" -"Tällä .NFI-tiedostolla ei ole MD5SUM-tarkistuslukua eikä sen toiminnasta ole " -"takeita. Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen?" +msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?" +msgstr "Tällä .NFI-tiedostolla ei ole MD5SUM-tarkistuslukua eikä sen toiminnasta ole takeita. Oletko varma, että haluat asentaa tämän ohjelmistopäivityksen?" -msgid "" -"This .NFI file has a valid md5 signature. Continue programming this image to " -"flash memory?" -msgstr "" -".NFI-tiedoston MD5-tarkistusluku on kunnossa. Jatketaanko " -"ohjelmistopäivityksen asentamista?" +msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?" +msgstr ".NFI-tiedoston MD5-tarkistusluku on kunnossa. Jatketaanko ohjelmistopäivityksen asentamista?" -msgid "" -"This DVD RW medium is already formatted - reformatting will erase all " -"content on the disc." -msgstr "" -"Tämä DVD-RW levy on jo alustettu - uudelleenalustus tuhoaa levyn kaiken " -"sisällön." +msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc." +msgstr "Tämä DVD-RW levy on jo alustettu - uudelleenalustus tuhoaa levyn kaiken sisällön." #, python-format msgid "This Dreambox can't decode %s streams!" @@ -4099,14 +3996,12 @@ msgid "" "This test checks for configured Nameservers.\n" "If you get a \"unconfirmed\" message:\n" "- please check your DHCP, cabling and Adapter setup\n" -"- if you configured your Nameservers manually please verify your entries in " -"the \"Nameserver\" Configuration" +"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration" msgstr "" "Tämä testi tarkistaa nimipalvelimet.\n" "Jos näet \"vahvistamaton\" ilmoituksen:\n" "- tarkista DHCP, kaapelointi ja Sovittimen asetukset\n" -"- jos määrittelit nimipalvelimet käsin, tarkista arvot \"Nimipalvelimen " -"asetukset\" kohdassa" +"- jos määrittelit nimipalvelimet käsin, tarkista arvot \"Nimipalvelimen asetukset\" kohdassa" msgid "" "This test checks whether a network cable is connected to your LAN-Adapter.\n" @@ -4131,24 +4026,19 @@ msgstr "" "- tarkista DHCP, kaapeli ja verkkosovittimen asetukset" msgid "" -"This test checks whether your LAN Adapter is set up for automatic IP Address " -"configuration with DHCP.\n" +"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n" "If you get a \"disabled\" message:\n" " - then your LAN Adapter is configured for manual IP Setup\n" -"- verify thay you have entered correct IP informations in the AdapterSetup " -"dialog.\n" +"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n" "If you get an \"enabeld\" message:\n" "-verify that you have a configured and working DHCP Server in your network." msgstr "" -"Tämä testi tarkistaa, onko verkkosovittimelle määritetty automaattinen IP-" -"osoite DHCP:n kautta.\n" +"Tämä testi tarkistaa, onko verkkosovittimelle määritetty automaattinen IP-osoite DHCP:n kautta.\n" "Jos näet \"ei käytössä\" ilmoituksen:\n" "- verkkosovitin on määritelty käyttämään kiinteää IP-osoitetta\n" -"- tarkista, että olet syöttänyt oikeat IP-tiedot Sovittimen asetukset -" -"kohdassa.\n" +"- tarkista, että olet syöttänyt oikeat IP-tiedot Sovittimen asetukset -kohdassa.\n" "Jos näet \"käytössä\" ilmoituksen:\n" -"- tarkista, että sinulla on lähiverkossasi toimiva ja oikein määritelty DCHP-" -"palvelin." +"- tarkista, että sinulla on lähiverkossasi toimiva ja oikein määritelty DCHP-palvelin." msgid "This test detects your configured LAN-Adapter." msgstr "Tämä testi tunnistaa määrittelemäsi verkkosovittimen." @@ -4233,10 +4123,8 @@ msgstr "Tila" msgid "" "To update your Dreambox firmware, please follow these steps:\n" -"1) Turn off your box with the rear power switch and plug in the bootable USB " -"stick.\n" -"2) Turn mains back on and hold the DOWN button on the front panel pressed " -"for 10 seconds.\n" +"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n" +"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n" "3) Wait for bootup and follow instructions of the wizard." msgstr "" @@ -4319,7 +4207,7 @@ msgid "Two" msgstr "Kaksi" msgid "Type" -msgstr "" +msgstr "Tyyppi" msgid "Type of scan" msgstr "Hakutapa" @@ -4334,7 +4222,7 @@ msgid "USB Stick" msgstr "USB-muisti" msgid "USB stick wizard" -msgstr "" +msgstr "USB-muistiavustaja" msgid "Ukrainian" msgstr "Ukraina" @@ -4383,7 +4271,7 @@ msgid "Unmount failed" msgstr "Irrottaminen epäonnistui" msgid "Unsupported" -msgstr "" +msgstr "Ei tuettu" msgid "Update" msgstr "Päivitä" @@ -4432,7 +4320,7 @@ msgstr "Käytä virran mittausta" msgid "Use the Networkwizard to configure your Network\n" msgstr "" -"Muokkaa lähiverkon asetukset Verkkovelhon avulla\n" +"Muokkaa lähiverkon asetukset verkkoavustajan opastamana\n" "\n" # Ohjatun asennuksen (Start Wizard) kolmas ruutu. Teksti on rivitetty @@ -4450,9 +4338,7 @@ msgstr "" # Ohjatun asennuksen (Start Wizard) toinen ruutu. Teksti on rivitetty # tilaansa käsin. Hyödyksi käytetään Unicode-nuolisymboleja. -msgid "" -"Use the up/down keys on your remote control to select an option. After that, " -"press OK." +msgid "Use the up/down keys on your remote control to select an option. After that, press OK." msgstr "" "Valitse haluamasi vaihtoehto\n" "kaukosäätimen nuolinäppäimillä\n" @@ -4462,10 +4348,10 @@ msgstr "" "OK-näppäimellä." msgid "Use this video enhancement settings?" -msgstr "" +msgstr "Käytä näitä kuvanparannuksen asetuksia?" msgid "Use time of currently running service" -msgstr "" +msgstr "käytä katseltavan kanavan aikaa" msgid "Use usals for this sat" msgstr "Käytä USALS:ia tälle satelliitille" @@ -4500,7 +4386,7 @@ msgid "Video Fine-Tuning" msgstr "TV-kuvan hienosäätö..." msgid "Video Fine-Tuning Wizard" -msgstr "TV-kuvan hienosäätövelho" +msgstr "TV-kuvan hienosäätöavustaja" msgid "Video Output" msgstr "Video-ulostulo" @@ -4509,29 +4395,27 @@ msgid "Video Setup" msgstr "Video-asetukset" msgid "Video Wizard" -msgstr "Video-velho" +msgstr "Video-avustaja" msgid "Video enhancement preview" -msgstr "" +msgstr "Kuvanparannuksen esikatselu" msgid "Video enhancement settings" -msgstr "" +msgstr "Kuvanparannuksen asetukset..." msgid "Video enhancement setup" -msgstr "" +msgstr "Kuvanparannuksen asetukset" msgid "" "Video input selection\n" "\n" -"Please press OK if you can see this page on your TV (or select a different " -"input port).\n" +"Please press OK if you can see this page on your TV (or select a different input port).\n" "\n" "The next input port will be automatically probed in 10 seconds." msgstr "" "Video-sisäänmenon valinta\n" "\n" -"Paina OK jos näet tämän ruudun TV:ssä (tai valitse TV:stä toinen " -"sisäänmeno)\n" +"Paina OK jos näet tämän ruudun TV:ssä (tai valitse TV:stä toinen sisäänmeno)\n" "\n" "Seuraavaa sisäänmenoa tunnistetaan automaattisesti 10 sekunnin kuluttua." @@ -4539,7 +4423,7 @@ msgid "Video mode selection." msgstr "Video-tilan valinta." msgid "Videoenhancement Setup" -msgstr "" +msgstr "Kuvanparannusasetukset" msgid "View Movies..." msgstr "Näytä tallenteita..." @@ -4557,7 +4441,7 @@ msgid "View details" msgstr "Yksityiskohdat" msgid "View list of available " -msgstr "" +msgstr "Näytä saatavilla olevat" msgid "View list of available CommonInterface extensions" msgstr "Näytä saatavilla olevat CI-laajennukset" @@ -4629,16 +4513,13 @@ msgid "Waiting" msgstr "Odottaa" msgid "Warn if free space drops below (kB):" -msgstr "" +msgstr "Varoita jos tyhjä tila putoaa alle (kB):" msgid "" -"We will now test if your TV can also display this resolution at 50hz. If " -"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" +"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" "Please press OK to begin." msgstr "" -"Testaamme nyt näyttääkö televisiosi tämän tarkkuuden 50hz:llä. Jos ruutu " -"menee mustaksi, odota 20 sekuntia jolloin 60hz tila kytkeytyy takaisin " -"päälle.\n" +"Testaamme nyt näyttääkö televisiosi tämän tarkkuuden 50hz:llä. Jos ruutu menee mustaksi, odota 20 sekuntia jolloin 60hz tila kytkeytyy takaisin päälle.\n" "Aloita painamalla OK." msgid "Wed" @@ -4653,49 +4534,42 @@ msgstr "Viikonpäivä" msgid "" "Welcome to the Cutlist editor.\n" "\n" -"Seek to the start of the stuff you want to cut away. Press OK, select 'start " -"cut'.\n" +"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n" "\n" "Then seek to the end, press OK, select 'end cut'. That's it." msgstr "" "Tervetuloa leikkauskohtien muokkaukseen.\n" "\n" -"Hae kohta, josta haluat aloittaa poisleikkauksen. Paina OK-näppäintä ja " -"valitse 'Aloita leikkaus'.\n" +"Hae kohta, josta haluat aloittaa poisleikkauksen. Paina OK-näppäintä ja valitse 'Aloita leikkaus'.\n" "\n" -"Hae seuraavaksi kohta, johon haluat lopettaa leikkauksen. Paina OK-näppäintä " -"ja valitse 'Lopeta leikkaus'." +"Hae seuraavaksi kohta, johon haluat lopettaa leikkauksen. Paina OK-näppäintä ja valitse 'Lopeta leikkaus'." -msgid "" -"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading " -"the firmware of your Dreambox by providing a backup facility for your " -"current settings and a short explanation of how to upgrade your firmware." -msgstr "" -"Tervetuloa ohjelmiston päivitys-Velhoon. Velho avustaa ohjelmiston " -"päivityksessä ja varmuuskopioinnissa sekä asetusten palauttamisessa " -"päivityksen jälkeen." +msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware." +msgstr "Tervetuloa ohjelmiston päivitysavustajaan. Avustaja opastaa ohjelmiston päivityksessä ja varmuuskopioinnissa sekä asetusten palauttamisessa päivityksen jälkeen." msgid "" "Welcome to the cleanup wizard.\n" "\n" "We have detected that your available internal memory has dropped below 2MB.\n" -"To ensure stable operation of your Dreambox, the internal memory should be " -"cleaned up.\n" +"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n" "You can use this wizard to remove some extensions.\n" msgstr "" +"Tervetuloa puhdistusavustajaan.\n" +"\n" +"Tunnistimme, että vapaa sisäinen muisti putosi alle 2MB:n.\n" +"Jotta Dreamboxin toiminta olisi vakaata, pitää sisäistä muistia vapauttaa.\n" +"Voit poistaa lisäosia tällä avustajalla.\n" msgid "" "Welcome.\n" "\n" -"If you want to connect your Dreambox to the Internet, this wizard will guide " -"you through the basic network setup of your Dreambox.\n" +"If you want to connect your Dreambox to the Internet, this wizard will guide you through the basic network setup of your Dreambox.\n" "\n" "Press OK to start configuring your network" msgstr "" "Tervetuloa.\n" "\n" -"Jos haluat yhdistää Dreamboxin verkkoon, auttaa tämä velho määrittämään " -"Dreamboxin lähiverhon perusasetukset.\n" +"Jos haluat yhdistää Dreamboxin verkkoon, auttaa tämä avustaja määrittämään Dreamboxin lähiverhon perusasetukset.\n" "\n" "Siirry seuraavaan vaiheeseen painamalla OK-nappia." @@ -4732,13 +4606,12 @@ msgid "What do you want to scan?" msgstr "Kanavahaun lisäasetukset:" msgid "What to do with submitted crashlogs?" -msgstr "" +msgstr "Mitä lähetetyille lokeille tehdään?" msgid "" "When you do a factory reset, you will lose ALL your configuration data\n" "(including bouquets, services, satellite data ...)\n" -"After completion of factory reset, your receiver will restart " -"automatically!\n" +"After completion of factory reset, your receiver will restart automatically!\n" "\n" "Really do a factory reset?" msgstr "" @@ -4783,7 +4656,7 @@ msgid "Yes, and delete this movie" msgstr "Kyllä ja poista tämä tallenne" msgid "Yes, and don't ask again" -msgstr "" +msgstr "Kyllä, älä kysy uudestaan" msgid "Yes, backup my settings!" msgstr "Kyllä, varmuuskopioi asetukset!" @@ -4815,9 +4688,7 @@ msgstr "Voi keskeyttää asennuksen." msgid "You can cancel the removal." msgstr "Voit keskeyttää poiston." -msgid "" -"You can choose some default settings now. Please select the settings you " -"want to be installed." +msgid "You can choose some default settings now. Please select the settings you want to be installed." msgstr "Valitse mitkä oletusarvot haluat asentaa." msgid "You can choose, what you want to install..." @@ -4835,84 +4706,51 @@ msgstr "Et voi poistaa tätä!" msgid "You chose not to install any default services lists." msgstr "Et valinnut yhtään oletuskanavalistaa. Paina OK." -msgid "" -"You chose not to install any default settings. You can however install the " -"default settings later in the settings menu." -msgstr "" -"Et valinnut mitään oletusasetuksia. Voit kuitenkin asentaa ne myöhemmin " -"asetusvalikon kautta." +msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu." +msgstr "Et valinnut mitään oletusasetuksia. Voit kuitenkin asentaa ne myöhemmin asetusvalikon kautta." -msgid "" -"You chose not to install anything. Please press OK finish the install wizard." +msgid "You chose not to install anything. Please press OK finish the install wizard." msgstr "Et valinnut mitään asennettavaksi. Poistu painamalla OK." -msgid "" -"You do not seem to have a harddisk in your Dreambox. So backing up to a " -"harddisk is not an option for you." -msgstr "" -"Laitteessasi ei näytä olevan kiintolevyä, joten et voi varmuuskopioida " -"kiintolevylle." +msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you." +msgstr "Laitteessasi ei näytä olevan kiintolevyä, joten et voi varmuuskopioida kiintolevylle." msgid "" -"You have chosen to backup to a compact flash card. The card must be in the " -"slot. We do not verify if it is really used at the moment. So better backup " -"to the harddisk!\n" +"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n" "Please press OK to start the backup now." msgstr "" -"Olet valinnut varmuuskopioinnin Compact Flash -kortille. Kortin on oltava " -"lukijassa. Sen toimintaa ei voi todeta. Suosittelemme varmuuskopiointia " -"kiintolevylle!\n" +"Olet valinnut varmuuskopioinnin Compact Flash -kortille. Kortin on oltava lukijassa. Sen toimintaa ei voi todeta. Suosittelemme varmuuskopiointia kiintolevylle!\n" "Paina OK aloittaakseni varmuuskopioinnin nyt." msgid "" "You have chosen to backup to an usb drive. Better backup to the harddisk!\n" "Please press OK to start the backup now." msgstr "" -"Olet valinnut varmuuskopioinnin USB:lle. Kiintolevy on luotettavampi " -"vaihtoehto!\n" +"Olet valinnut varmuuskopioinnin USB:lle. Kiintolevy on luotettavampi vaihtoehto!\n" "Paina OK aloittaaksesi varmuuskopioinnin." -msgid "" -"You have chosen to backup to your harddisk. Please press OK to start the " -"backup now." -msgstr "" -"Olet valinnut varmuuskopioinnin kiintolevylle. Paina OK aloittaaksesi " -"varmistuksen nyt." +msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now." +msgstr "Olet valinnut varmuuskopioinnin kiintolevylle. Paina OK aloittaaksesi varmistuksen nyt." -msgid "" -"You have chosen to backup your settings. Please press OK to start the backup " -"now." +msgid "You have chosen to backup your settings. Please press OK to start the backup now." msgstr "Valitsit asetusten varmuuskopioinnin. Aloita painamalla OK-näppäintä." -msgid "" -"You have chosen to create a new .NFI flasher bootable USB stick. This will " -"repartition the USB stick and therefore all data on it will be erased." -msgstr "" -"Olet valinnut .NFI-päivitysohjelman asennuksen USB-muistille. Tämä toiminto " -"osioi USB-muistin ja tuhoaa siltä kaikki tiedostot." +msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased." +msgstr "Olet valinnut .NFI-päivitysohjelman asennuksen USB-muistille. Tämä toiminto osioi USB-muistin ja tuhoaa siltä kaikki tiedostot." -msgid "" -"You have chosen to restore your settings. Enigma2 will restart after " -"restore. Please press OK to start the restore now." -msgstr "" -"Valitsit asetusten palautuksen. Enigma2 käynnistyy uudelleen palautuksen " -"jälkeen. Aloita painamalla OK-näppäintä." +msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now." +msgstr "Valitsit asetusten palautuksen. Enigma2 käynnistyy uudelleen palautuksen jälkeen. Aloita painamalla OK-näppäintä." #, python-format msgid "You have to wait %s!" msgstr "Sinun täytyy odottaa %s!" msgid "" -"You need a PC connected to your dreambox. If you need further instructions, " -"please visit the website http://www.dm7025.de.\n" -"Your dreambox will now be halted. After you have performed the update " -"instructions from the website, your new firmware will ask you to restore " -"your settings." +"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n" +"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings." msgstr "" -"Tarvitse PC:n, joka on yhdistetty Dreamboksiin. Katso lisätietoja http://www." -"dm7025.de.\n" -"Dreamboksisi sammutetaan nyt. Kun olet tehnyt päivitystoimenpiteet sivuston " -"mukaisesti, uusi ohjelmaversio pyytää sinua palauttamaan asetukset." +"Tarvitse PC:n, joka on yhdistetty Dreamboksiin. Katso lisätietoja http://www.dm7025.de.\n" +"Dreamboksisi sammutetaan nyt. Kun olet tehnyt päivitystoimenpiteet sivuston mukaisesti, uusi ohjelmaversio pyytää sinua palauttamaan asetukset." msgid "" "You need to set a pin code and hide it from your children.\n" @@ -4942,28 +4780,20 @@ msgstr "Dreambox käynnistyy uudelleen kun painat OK." msgid "Your TV works with 50 Hz. Good!" msgstr "Televisiosi toimii 50Hz:llä. Hyvä!" -msgid "" -"Your backup succeeded. We will now continue to explain the further upgrade " -"process." +msgid "Your backup succeeded. We will now continue to explain the further upgrade process." msgstr "Varmuuskopiointi onnistui. Päivitys jatkuu eteenpäin." -msgid "" -"Your collection exceeds the size of a single layer medium, you will need a " -"blank dual layer DVD!" +msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!" msgstr "" msgid "Your dreambox is shutting down. Please stand by..." msgstr "Laite sammutetaan. Odota..." -msgid "" -"Your dreambox isn't connected to the internet properly. Please check it and " -"try again." -msgstr "" -"Yhteyttä Internetiin ei kyetty muodostamaan. Tarkista verkkoasetukset ja " -"yritä uudelleen." +msgid "Your dreambox isn't connected to the internet properly. Please check it and try again." +msgstr "Yhteyttä Internetiin ei kyetty muodostamaan. Tarkista verkkoasetukset ja yritä uudelleen." msgid "Your email address:" -msgstr "" +msgstr "Sähköpostiosoite:" msgid "" "Your frontprocessor firmware must be upgraded.\n" @@ -4980,7 +4810,7 @@ msgstr "" "Valitse mitä haluat tehdä seuraavaksi." msgid "Your name (optional):" -msgstr "" +msgstr "Nimi (ei pakollinen):" msgid "Your network configuration has been activated." msgstr "Verkkoasetukset on aktivoitu." @@ -5118,13 +4948,13 @@ msgid "assigned CAIds" msgstr "Määritetyt CAId:t" msgid "assigned CAIds:" -msgstr "" +msgstr "Määritetyt CAId:t:" msgid "assigned Services/Provider" msgstr "Määritetyt kanavat/palveluntarjoajat" msgid "assigned Services/Provider:" -msgstr "" +msgstr "Määritetyt kanavat/palveluntarjoajat:" #, python-format msgid "audio track (%s) format" @@ -5141,7 +4971,7 @@ msgid "auto" msgstr "" msgid "available" -msgstr "" +msgstr "saatavilla" # Tämä teksti näytetään monessa valikossa EXIT-napin # kaltaisena poistumistoimintona. @@ -5210,7 +5040,7 @@ msgid "copy to bouquets" msgstr "kopioi suosikkilistalle" msgid "could not be removed" -msgstr "" +msgstr "ei voitu poistaa" msgid "create directory" msgstr "luo hakemisto" @@ -5363,7 +5193,7 @@ msgid "go to standby" msgstr "siirry valmiustilaan" msgid "grab this frame as bitmap" -msgstr "" +msgstr "tallenna tämä ruutu kuvatiedostoksi" msgid "green" msgstr "vihreä" @@ -5486,16 +5316,16 @@ msgid "move PiP to main picture" msgstr "Siirrä PiP pääkuvaan" msgid "move down to last entry" -msgstr "" +msgstr "siirry viimeiseen kohtaan" msgid "move down to next entry" -msgstr "" +msgstr "siirry seuraavaan kohtaan" msgid "move up to first entry" -msgstr "" +msgstr "siirry ensimmäiseen kohtaan" msgid "move up to previous entry" -msgstr "" +msgstr "siirry edelliseen kohtaan" msgid "movie list" msgstr "tallenneluettelo" @@ -5525,7 +5355,7 @@ msgid "no HDD found" msgstr "kiintolevyä ei löydy" msgid "no Services/Providers selected" -msgstr "" +msgstr "palveluja/palveluntarjoajia ei valittu" msgid "no module found" msgstr "(ei CA-moduulia)" @@ -5579,7 +5409,7 @@ msgid "open servicelist(up)" msgstr "Avaa kanavalista(ylöspäin)" msgid "open virtual keyboard input help" -msgstr "" +msgstr "avaa virtuaalinäppäimistön ohje" msgid "pass" msgstr "hyväksytty" @@ -5703,7 +5533,7 @@ msgid "select CAId" msgstr "Valitse CAId" msgid "select CAId's" -msgstr "" +msgstr "valitse CAId:t" msgid "select image from server" msgstr "valitse päivitys palvelimelta" @@ -5712,7 +5542,7 @@ msgid "select interface" msgstr "valitse sovitin" msgid "select menu entry" -msgstr "" +msgstr "valitse valikon kohta" msgid "select movie" msgstr "valitse tallenne" @@ -5898,7 +5728,7 @@ msgid "waiting" msgstr "odottaa" msgid "was removed successfully" -msgstr "" +msgstr "poistettiin onnistuneesti" msgid "weekly" msgstr "joka viikko" @@ -5918,13 +5748,8 @@ msgstr "Kyllä" msgid "yes (keep feeds)" msgstr "Kyllä (pidä feedit)" -msgid "" -"your dreambox might be unusable now. Please consult the manual for further " -"assistance before rebooting your dreambox." -msgstr "" -"Asennus ei onnistunut. Dreambox saattaa olla käyttökelvottomassa tilassa. " -"Joudut ehkä asentamaan ohjelmiston uudelleen tietokoneen avulla. Katso " -"käyttöoppaasta lisäohjeita ennen kuin käynnistät laitteen uudelleen." +msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox." +msgstr "Asennus ei onnistunut. Dreambox saattaa olla käyttökelvottomassa tilassa. Joudut ehkä asentamaan ohjelmiston uudelleen tietokoneen avulla. Katso käyttöoppaasta lisäohjeita ennen kuin käynnistät laitteen uudelleen." msgid "zap" msgstr "kanavanvaihto" diff --git a/po/nl.po b/po/nl.po index c247606..73c365f 100644 --- a/po/nl.po +++ b/po/nl.po @@ -101,6 +101,8 @@ msgid "" "\n" "System will restart after the restore!" msgstr "" +"\n" +"Systeem zal opnieuw opstarten na het herstellen!" msgid "" "\n" @@ -194,10 +196,10 @@ msgid "(show optional DVD audio menu)" msgstr "(optioneel DVD audio menu weergeven)" msgid "* Only available if more than one interface is active." -msgstr "* Enkel beschikbaar indien meer dan één interface actief is." +msgstr "* Alleen beschikbaar indien meer dan één interface actief is." msgid "* Only available when entering hidden SSID or network key" -msgstr "* Enkel beschikbaar bij het ingegeven van de verborgen SSID of netwerk sleutel" +msgstr "* Alleen beschikbaar bij het ingegeven van de verborgen SSID of netwerk sleutel" msgid ".NFI Download failed:" msgstr ".NFI Download mislukt:" @@ -415,7 +417,7 @@ msgid "Action on long powerbutton press" msgstr "Bij lang indrukken stand-by toets" msgid "Action:" -msgstr "Aktie:" +msgstr "Actie:" msgid "Activate Picture in Picture" msgstr "Activeer Picture In Picture" @@ -564,7 +566,7 @@ msgid "Artist" msgstr "Artiest" msgid "Ask before shutdown:" -msgstr "Slaaptimer aktie bevestigen:" +msgstr "Slaaptimer actie bevestigen:" msgid "Ask user" msgstr "Vraag gebruiker" @@ -591,7 +593,7 @@ msgid "Auto chapter split every ? minutes (0=never)" msgstr "Automatisch hoofdstuk splitsen elke ? min (0=nooit)" msgid "Auto flesh" -msgstr "Automatische huidskleur tiint" +msgstr "Automatische huidskleur tint" msgid "Auto scart switching" msgstr "Automatisch scart schakelen" @@ -666,13 +668,13 @@ msgid "Behavior of 0 key in PiP-mode" msgstr "Functie van de 0-toets in PiP modus" msgid "Behavior when a movie is started" -msgstr "Aktie na 'start afspelen'" +msgstr "Actie na 'start afspelen'" msgid "Behavior when a movie is stopped" -msgstr "Aktie na 'stop afspelen'" +msgstr "Actie na 'stop afspelen'" msgid "Behavior when a movie reaches the end" -msgstr "Aktie na 'einde bestand'" +msgstr "Actie na 'einde bestand'" msgid "Bitrate:" msgstr "Bitrate:" @@ -819,7 +821,7 @@ msgid "Choose upgrade source" msgstr "Kies upgrade bron" msgid "Choose your Skin" -msgstr "Kies een Skin" +msgstr "Kies uw favoriete Skin" msgid "Circular left" msgstr "Circulaire links" @@ -958,7 +960,7 @@ msgid "" msgstr "" "Verbinding met Fritz!Box\n" "mislukt! (%s)\n" -"probeer opnieuw..." +"Probeert opnieuw..." msgid "Constellation" msgstr "Constellatie" @@ -1147,7 +1149,7 @@ msgid "Deselect" msgstr "Deselecteer" msgid "Destination directory" -msgstr "Doel map" +msgstr "Doelmap" msgid "Detected HDD:" msgstr "Gedetecteerde harde schijf:" @@ -1218,7 +1220,7 @@ msgid "" msgstr "" "Verbinding metFritz!Box\n" "verbroken! (%s)\n" -"probeer opnieuw..." +"Probeert opnieuw..." msgid "Dish" msgstr "Schotel" @@ -1318,7 +1320,7 @@ msgid "Do you want to remove the package:\n" msgstr "Wilt u het volgende pakket verwijderen:\n" msgid "Do you want to restore your settings?" -msgstr "Wilt u uw instelingen nu terugzetten?" +msgstr "Wilt u uw instelingen nu terugplaatsen?" msgid "Do you want to resume this playback?" msgstr "Wilt u het afspelen vervolgen?" @@ -1446,7 +1448,7 @@ msgid "Enable" msgstr "Aan" msgid "Enable 5V for active antenna" -msgstr "5V voor aktieve antenne aanschakelen" +msgstr "5V voor actieve antenne inschakelen" msgid "Enable Cleanup Wizard?" msgstr "Activeer Cleanup Wizard?" @@ -1845,7 +1847,7 @@ msgid "In order to record a timer, the TV was switched to the recording service! msgstr "Voor een timer opname, is nu de juiste zender ingeschakelt!\n" msgid "Include your email and name (optional) in the mail?" -msgstr "Uw e-mailadres en naam (optioneel) in de mail?" +msgstr "Vermeld uw e-mailadres en naam (optioneel) in de mail?" msgid "Increased voltage" msgstr "Verhoogd voltage" @@ -2377,7 +2379,7 @@ msgstr "" "Indien u 'nee' kiest, blijft het menu onbeveiligd!" msgid "No wireless networks found! Please refresh." -msgstr "Geen draadloze netwerken gevonden! Verniew." +msgstr "Geen draadloze netwerken gevonden! Vernieuw." msgid "" "No working local network adapter found.\n" @@ -2404,7 +2406,7 @@ msgid "No, but restart from begin" msgstr "Nee, vanaf begin herstarten" msgid "No, do nothing." -msgstr "nee, geen aktie." +msgstr "Nee, geen actie." msgid "No, just start my dreambox" msgstr "Nee, uitsluitend Dreambox starten" @@ -2419,7 +2421,7 @@ msgid "No, send them never" msgstr "Nee, verstuur ze nooit" msgid "None" -msgstr "geen" +msgstr "Geen" #. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching #. the left/right) @@ -2509,10 +2511,10 @@ msgid "Package removed successfully.\n" msgstr "Pakket met succes verwijderd.\n" msgid "Packet management" -msgstr "Pakket beheer" +msgstr "Pakketbeheer" msgid "Packet manager" -msgstr "Pakket beheer" +msgstr "Pakketbeheer" msgid "Page" msgstr "Pagina" @@ -2689,7 +2691,7 @@ msgid "Please select tag to filter..." msgstr "Selecteer markering om te filteren..." msgid "Please select target directory or medium" -msgstr "Selecteer doel map of medium" +msgstr "Selecteer doelmap of medium" msgid "Please select the movie path..." msgstr "Selecteer het opname pad..." @@ -2767,7 +2769,7 @@ msgid "Plugin browser" msgstr "Applicatie browser" msgid "Plugin manager" -msgstr "Pakket beheer" +msgstr "Applicatie beheer" msgid "Plugin manager activity information" msgstr "Pluginbeheer activiteit informatie" @@ -3527,7 +3529,7 @@ msgid "Sleep Timer" msgstr "Slaaptimer" msgid "Sleep timer action:" -msgstr "Slaaptimer aktie:" +msgstr "Slaaptimer actie:" msgid "Slideshow Interval (sec.)" msgstr "Diavoorstelling interval (sec.)" @@ -3953,8 +3955,8 @@ msgid "" msgstr "" "Deze test controleert de Nameservers.\n" "Indien u een \"onbevestigd\" bericht ziet:\n" -"- Controleer dan uw DHCP server, kabels en instellingen\n" -"- Indien de Nameservers handmatig ingesteld zijn, controleer deze dan." +"- controleer dan uw DHCP server, kabels en instellingen\n" +"- indien de Nameservers handmatig ingesteld zijn, controleer deze dan." msgid "" "This test checks whether a network cable is connected to your LAN-Adapter.\n" @@ -3975,8 +3977,8 @@ msgid "" msgstr "" "Deze test controleert of er voor uw LAN adapter een geldig IP adres gevonden is.\n" "Indien u de \"onbevestigd\" melding ziet:\n" -"- Is er geen geldig IP adres gevonden\n" -"- Dient u uw DHCP server, kabels en instellingen te controleren" +"- is er geen geldig IP adres gevonden\n" +"- dient u uw DHCP server, kabels en instellingen te controleren" msgid "" "This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n" @@ -3988,7 +3990,7 @@ msgid "" msgstr "" "Deze test controleert of uw LAN adapter ingesteld is voor automatisch toewijzen van het IP adres middels DHCP.\n" "Indien u de \"Gedeactiveerd\" melding ziet:\n" -"- Is uw LAN adapter mogelijk handmatig ingesteld\n" +"- is uw LAN adapter mogelijk handmatig ingesteld\n" "- controleer dan of u wel de juiste (IP) gegevens gebruikt heeft\n" "Indien u een \"Ingeschakeld\" melding ziet:\n" "- controleer dan of u wel een correct werkende DHCP server in uw netwerk heeft." @@ -4334,7 +4336,7 @@ msgid "Video Wizard" msgstr "Video Wizard" msgid "Video enhancement preview" -msgstr "Videoverbetering preview" +msgstr "Voorbeeld videoverbetering" msgid "Video enhancement settings" msgstr "Videoverbetering instellingen..." @@ -4473,7 +4475,7 @@ msgid "" "\n" "Then seek to the end, press OK, select 'end cut'. That's it." msgstr "" -"Wekom bij de Cutlist editor.\n" +"Welkom bij de Cutlist editor.\n" "\n" "Start met zoeken wat je wenst te verwijderen. Druk op OK, selecteer 'start cut'.\n" "\n" @@ -4678,7 +4680,7 @@ msgid "" "You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n" "Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings." msgstr "" -"U dient uw PC met uw Dreambox te verbinden. Voor meer informatie verwijzen wij u naar de website http://www.dm7025.de.\n" +"U dient uw PC met uw Dreambox te verbinden. Voor meer informatie verwijzen wij u naar de website http://www.dream-multimedia-tv.de.\n" "De dreambox word nu uitgeschakelt. Indien u deze aanwijzingen nauwgezet volgt, zal de Dreambox u na de update vragen of u uw instellingen terug wilt plaatsen." msgid "" @@ -4806,10 +4808,10 @@ msgid "activate current configuration" msgstr "activeer huidige configuratie" msgid "add Provider" -msgstr "Provider toevoegen" +msgstr "Provider" msgid "add Service" -msgstr "Zender toevoegen" +msgstr "Zender" msgid "add a nameserver entry" msgstr "voeg een nameserver toe" @@ -4933,7 +4935,7 @@ msgid "chapters" msgstr "hoofdstukken" msgid "choose destination directory" -msgstr "Kies doel map" +msgstr "Kies doelmap" msgid "circular left" msgstr "circular links" @@ -4984,7 +4986,7 @@ msgid "delete file" msgstr "Verwijder bestand" msgid "delete playlist entry" -msgstr "wis item in de afspeellijst" +msgstr "Wis item in de afspeellijst" msgid "delete saved playlist" msgstr "Opgeslagen afspeellijst wissen" @@ -5008,7 +5010,7 @@ msgid "do not change" msgstr "niet schakelen" msgid "do nothing" -msgstr "Geen aktie" +msgstr "Geen actie" msgid "don't record" msgstr "Niet opnemen" @@ -5166,16 +5168,16 @@ msgid "insert mark here" msgstr "Markeerpunt invoegen" msgid "jump back to the previous title" -msgstr "terug naar vorige titel" +msgstr "Terug naar vorige titel" msgid "jump forward to the next title" -msgstr "vooruit naar volgende titel" +msgstr "Vooruit naar volgende titel" msgid "jump to listbegin" -msgstr "naar begin lijst " +msgstr "Ga naar begin lijst " msgid "jump to listend" -msgstr "naar einde lijst" +msgstr "Ga naar einde lijst" msgid "jump to next marked position" msgstr "spring naar de volgende markering" @@ -5208,7 +5210,7 @@ msgid "load playlist" msgstr "Afspeellijst laden" msgid "locked" -msgstr "Ja" +msgstr "vergrendeld" msgid "loopthrough to" msgstr "Doorlus naar" @@ -5217,7 +5219,7 @@ msgid "manual" msgstr "handmatig" msgid "menu" -msgstr "menu" +msgstr "Menu" msgid "menulist" msgstr "menulijst" @@ -5265,7 +5267,7 @@ msgid "next channel in history" msgstr "Volgende zender in geschiedenis" msgid "no" -msgstr "nee" +msgstr "Nee" msgid "no CAId selected" msgstr "Geen CAId geselecteerd" @@ -5292,7 +5294,7 @@ msgid "none" msgstr "geen" msgid "not locked" -msgstr "Nee" +msgstr "niet vergrendeld" msgid "not used" msgstr "niet gebruikt" @@ -5337,7 +5339,7 @@ msgid "pass" msgstr "passage" msgid "pause" -msgstr "pause" +msgstr "Pause" msgid "play entry" msgstr "Afspelen" @@ -5412,7 +5414,7 @@ msgid "repeated" msgstr "herhalen" msgid "rewind to the previous chapter" -msgstr "terugspoelen naar vorig hoofdstuk" +msgstr "Terugspoelen naar vorig hoofdstuk" msgid "right" msgstr "rechts" @@ -5566,7 +5568,7 @@ msgid "stop PiP" msgstr "Stop PiP" msgid "stop entry" -msgstr "stoppen" +msgstr "Stoppen" msgid "stop recording" msgstr "Stop opname" @@ -5587,7 +5589,7 @@ msgid "switch to playlist" msgstr "Ga naar afspeellijst" msgid "switch to the next angle" -msgstr "schakel naar de volgende hoek" +msgstr "Schakel naar de volgende hoek" msgid "switch to the next audio track" msgstr "Volgend audio spoor" @@ -5665,7 +5667,7 @@ msgid "yellow" msgstr "geel" msgid "yes" -msgstr "ja" +msgstr "Ja" msgid "yes (keep feeds)" msgstr "ja (bewaar feeds)" diff --git a/po/sv.po b/po/sv.po index a437a8e..8a143ba 100644 --- a/po/sv.po +++ b/po/sv.po @@ -125,7 +125,7 @@ msgid " updates available." msgstr " Uppdateringar tillgängliga." msgid " wireless networks found!" -msgstr "" +msgstr " trådlöst nätverk hittat!" msgid "#000000" msgstr "" @@ -205,10 +205,8 @@ msgstr "* Enbart tillgänglig vid angiven dold SSID eller nätverksnyckel" msgid ".NFI Download failed:" msgstr ".NFI Nedladdning misslyckades:" -msgid "" -".NFI file passed md5sum signature check. You can safely flash this image!" -msgstr "" -".NFI fil passerade md5sum signatur kontroll. Du kan använda denna image!" +msgid ".NFI file passed md5sum signature check. You can safely flash this image!" +msgstr ".NFI fil passerade md5sum signatur kontroll. Du kan använda denna image!" msgid "/usr/share/enigma2 directory" msgstr "/usr/share/enigma2 bibliotek" @@ -223,7 +221,7 @@ msgid "1" msgstr "" msgid "1 wireless network found!" -msgstr "" +msgstr "1 trådlöst nätverk hittat!" msgid "1.0" msgstr "1.0" @@ -355,19 +353,11 @@ msgstr "" "En inspelning pågår redan.\n" "Vad vill du göra?" -msgid "" -"A recording is currently running. Please stop the recording before trying to " -"configure the positioner." -msgstr "" -"En inspelning pågår. Vänligen avbryt den innan du försöker konfigurera " -"motorn." +msgid "A recording is currently running. Please stop the recording before trying to configure the positioner." +msgstr "En inspelning pågår. Vänligen avbryt den innan du försöker konfigurera motorn." -msgid "" -"A recording is currently running. Please stop the recording before trying to " -"start the satfinder." -msgstr "" -"En inspelning pågår. Vänligen avbryt inspelningen före du försöker starta " -"satfinder." +msgid "A recording is currently running. Please stop the recording before trying to start the satfinder." +msgstr "En inspelning pågår. Vänligen avbryt inspelningen före du försöker starta satfinder." #, python-format msgid "A required tool (%s) was not found." @@ -469,12 +459,8 @@ msgstr "Lägg till i favoritlista" msgid "Add to favourites" msgstr "Lägg till i favoriter" -msgid "" -"Adds enigma2 settings and dreambox model informations like SN, rev... if " -"enabled." -msgstr "" -"Lägger till enigma2 inställningar och dreambox modellinformation såsom SN, " -"rev... om aktiverad." +msgid "Adds enigma2 settings and dreambox model informations like SN, rev... if enabled." +msgstr "Lägger till enigma2 inställningar och dreambox modellinformation såsom SN, rev... om aktiverad." msgid "Adds network configuration if enabled." msgstr "Lägger till nätverkskonfiguration om aktiverad." @@ -482,16 +468,8 @@ msgstr "Lägger till nätverkskonfiguration om aktiverad." msgid "Adds wlan configuration if enabled." msgstr "Lägger till wlan konfiguration om aktiverad." -msgid "" -"Adjust the color settings so that all the color shades are distinguishable, " -"but appear as saturated as possible. If you are happy with the result, press " -"OK to close the video fine-tuning, or use the number keys to select other " -"test screens." -msgstr "" -"Justera färginställningarna så att alla färgnivåer är urskiljningsbara, men " -"de ska vara så färgfulla som möjligt. När du är nöjd med resultatet, tryck " -"OK för att stänga videoinställningarna eller tryck på nummerknapp för att " -"välja annan testbild." +msgid "Adjust the color settings so that all the color shades are distinguishable, but appear as saturated as possible. If you are happy with the result, press OK to close the video fine-tuning, or use the number keys to select other test screens." +msgstr "Justera färginställningarna så att alla färgnivåer är urskiljningsbara, men de ska vara så färgfulla som möjligt. När du är nöjd med resultatet, tryck OK för att stänga videoinställningarna eller tryck på nummerknapp för att välja annan testbild." msgid "Advanced" msgstr "Avancerat" @@ -511,12 +489,8 @@ msgstr "Avancerad återskapning" msgid "After event" msgstr "Efter program" -msgid "" -"After the start wizard is completed, you need to protect single services. " -"Refer to your dreambox's manual on how to do that." -msgstr "" -"Efter startguiden är avslutad, behöver du skydda enskilda kanaler. Läs i din " -"manual för Dreambox om hur du utför det." +msgid "After the start wizard is completed, you need to protect single services. Refer to your dreambox's manual on how to do that." +msgstr "Efter startguiden är avslutad, behöver du skydda enskilda kanaler. Läs i din manual för Dreambox om hur du utför det." msgid "Album" msgstr "Album" @@ -730,9 +704,7 @@ msgstr "Bränn till DVD..." msgid "Bus: " msgstr "Bus: " -msgid "" -"By pressing the OK Button on your remote control, the info bar is being " -"displayed." +msgid "By pressing the OK Button on your remote control, the info bar is being displayed." msgstr "Infobalken visas om du trycker OK på din fjärrkontroll." msgid "C" @@ -829,7 +801,7 @@ msgid "Choose Tuner" msgstr "Välj tuner" msgid "Choose a wireless network" -msgstr "" +msgstr "Välj ett trådlöst nätverk" msgid "Choose backup files" msgstr "Välj backupfil" @@ -1202,7 +1174,7 @@ msgid "DiSEqC repeats" msgstr "DiSEqC repetetioner" msgid "DiSEqC-Tester settings" -msgstr "" +msgstr "DiSEqC-Tester inställningar" msgid "Dialing:" msgstr "Ringer upp:" @@ -1218,7 +1190,7 @@ msgid "Directory %s nonexistent." msgstr "Bibliotek %s finns ej." msgid "Directory browser" -msgstr "" +msgstr "Biblioteksbläddrare" msgid "Disable" msgstr "Avaktivera" @@ -1354,11 +1326,8 @@ msgstr "Vill du återställa dina inställningar?" msgid "Do you want to resume this playback?" msgstr "Vill du återuppta uppspelningen?" -msgid "" -"Do you want to submit your email address and name so that we can contact you " -"if needed?" -msgstr "" -"Vill du skicka med din epost och namn så vi kan kontakta dig om så behövs?" +msgid "Do you want to submit your email address and name so that we can contact you if needed?" +msgstr "Vill du skicka med din epost och namn så vi kan kontakta dig om så behövs?" msgid "Do you want to update your Dreambox?" msgstr "Vill du uppdatera din Dreambox?" @@ -1392,8 +1361,7 @@ msgstr "Klar - Installerat eller uppgraderat %d paket med %d fel" #, python-format msgid "Done - Installed, upgraded or removed %d packages with %d errors" -msgstr "" -"Klar - installerat, uppgraderat eller avinstallerat %d paket med %d fel" +msgstr "Klar - installerat, uppgraderat eller avinstallerat %d paket med %d fel" msgid "Download" msgstr "Nedladdning" @@ -1515,7 +1483,7 @@ msgid "Encryption Type" msgstr "Krypteringstyp" msgid "Encryption:" -msgstr "" +msgstr "Kryptering:" msgid "End time" msgstr "Sluttid" @@ -1684,8 +1652,7 @@ msgstr "Klar med omstarten av ditt nätverk" msgid "Finnish" msgstr "Finska" -msgid "" -"First we need to download the latest boot environment for the USB flasher." +msgid "First we need to download the latest boot environment for the USB flasher." msgstr "Först måste vi ladda ner senaste bootmiljön för USB flasher." msgid "Flash" @@ -1857,22 +1824,13 @@ msgstr "" "din scartkontakt. Tryck OK för återgå." msgid "" -"If your TV has a brightness or contrast enhancement, disable it. If there is " -"something called \"dynamic\", set it to standard. Adjust the backlight level " -"to a value suiting your taste. Turn down contrast on your TV as much as " -"possible.\n" -"Then turn the brightness setting as low as possible, but make sure that the " -"two lowermost shades of gray stay distinguishable.\n" -"Do not care about the bright shades now. They will be set up in the next " -"step.\n" +"If your TV has a brightness or contrast enhancement, disable it. If there is something called \"dynamic\", set it to standard. Adjust the backlight level to a value suiting your taste. Turn down contrast on your TV as much as possible.\n" +"Then turn the brightness setting as low as possible, but make sure that the two lowermost shades of gray stay distinguishable.\n" +"Do not care about the bright shades now. They will be set up in the next step.\n" "If you are happy with the result, press OK." msgstr "" -"Om din TV har ljusstyrke- eller kontrastförbättrare rekommenderas du att " -"stänga av den. Om det finns något som heter \"dynamic\" rekommenderas du att " -"använda standard. Justera ljusstyrkan till en inställning som du tycker är " -"bra. Använd så lite kontrast som möjligt.\n" -"Sätt ljusstyrkan till så låg som möjligt, men säkerställ att de två lägsta " -"nivåerna av grå är urskiljningsbara.\n" +"Om din TV har ljusstyrke- eller kontrastförbättrare rekommenderas du att stänga av den. Om det finns något som heter \"dynamic\" rekommenderas du att använda standard. Justera ljusstyrkan till en inställning som du tycker är bra. Använd så lite kontrast som möjligt.\n" +"Sätt ljusstyrkan till så låg som möjligt, men säkerställ att de två lägsta nivåerna av grå är urskiljningsbara.\n" "Ta inte hänsyn till de ljusa nivåerna nu. De kommer justeras i nästa steg.\n" "När du är nöjd med resultatet, tryck OK." @@ -1885,8 +1843,7 @@ msgstr "Image uppgradering" msgid "In Progress" msgstr "I utförande" -msgid "" -"In order to record a timer, the TV was switched to the recording service!\n" +msgid "In order to record a timer, the TV was switched to the recording service!\n" msgstr "För att göra en timerinspelning, växlades TV till inspelande kanal!\n" msgid "Include your email and name (optional) in the mail?" @@ -2008,7 +1965,8 @@ msgstr "Italienska" msgid "Job View" msgstr "Arbets Vy" -#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect) +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this +#. breaks the aspect) msgid "Just Scale" msgstr "Bara skala" @@ -2063,7 +2021,8 @@ msgstr "Avsluta DVD Spelare?" msgid "Left" msgstr "Vänster" -#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term. +#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep +#. english term. msgid "Letterbox" msgstr "Letterbox" @@ -2337,7 +2296,7 @@ msgid "No 50 Hz, sorry. :(" msgstr "Ingen 50 Hz, tyvärr. :(" msgid "No Connection" -msgstr "" +msgstr "Ingen anslutning" msgid "No HDD found or HDD not initialized!" msgstr "Ingen hårddisk hittad eller initierad!" @@ -2371,10 +2330,9 @@ msgid "No free tuner!" msgstr "Ingen ledig tuner!" msgid "No networks found" -msgstr "" +msgstr "Inget nätverk hittat" -msgid "" -"No packages were upgraded yet. So you can check your network and try again." +msgid "No packages were upgraded yet. So you can check your network and try again." msgstr "Inga paket uppgraderade. Undersök ditt nätverk och prova igen." msgid "No picture on TV? Press EXIT and retry." @@ -2421,34 +2379,28 @@ msgstr "" "Om du anger 'Nej' här kommer installationsskyddet vara avaktiverat!" msgid "No wireless networks found! Please refresh." -msgstr "" +msgstr "Inget trådlöst nätverk hittat! Vänligen uppdatera." msgid "" "No working local network adapter found.\n" -"Please verify that you have attached a network cable and your network is " -"configured correctly." +"Please verify that you have attached a network cable and your network is configured correctly." msgstr "" "Inget fungerandes lokalt nätverkskort funnet.\n" -"Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt nätverk " -"är korrekt konfigurerat." +"Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt nätverk är korrekt konfigurerat." msgid "" "No working wireless network adapter found.\n" -"Please verify that you have attached a compatible WLAN device and your " -"network is configured correctly." +"Please verify that you have attached a compatible WLAN device and your network is configured correctly." msgstr "" "Inget fungerandes trådlöst nätverkskort funnet.\n" -"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet och att din " -"nätverkskonfiguration är korrekt." +"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet och att din nätverkskonfiguration är korrekt." msgid "" "No working wireless network interface found.\n" -" Please verify that you have attached a compatible WLAN device or enable " -"your local network interface." +" Please verify that you have attached a compatible WLAN device or enable your local network interface." msgstr "" "Inget fungerandes trådlöst nätverkskort funnet.\n" -"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet eller " -"aktiverat ditt lokala nätverkskort." +"Vänligen bekräfta att du har anslutit ett kompatibelt WLAN enhet eller aktiverat ditt lokala nätverkskort." msgid "No, but restart from begin" msgstr "Nej, men starta om från början" @@ -2466,12 +2418,13 @@ msgid "No, scan later manually" msgstr "Nej, sök manuellt senare" msgid "No, send them never" -msgstr "Ne, skicka aldrig" +msgstr "Nej, skicka aldrig" msgid "None" msgstr "Inga" -#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right) +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching +#. the left/right) msgid "Nonlinear" msgstr "Ej linjär" @@ -2482,12 +2435,8 @@ msgid "Norwegian" msgstr "Norska" #, python-format -msgid "" -"Not enough diskspace. Please free up some diskspace and try again. (%d MB " -"required, %d MB available)" -msgstr "" -"Inte tillräckligt med diskutrymme. Vänligen frigör diskutrymme och försök " -"igen. (%d MB krävs, %d MB tillgängligt)" +msgid "Not enough diskspace. Please free up some diskspace and try again. (%d MB required, %d MB available)" +msgstr "Inte tillräckligt med diskutrymme. Vänligen frigör diskutrymme och försök igen. (%d MB krävs, %d MB tillgängligt)" msgid "" "Nothing to scan!\n" @@ -2499,14 +2448,8 @@ msgstr "" msgid "Now Playing" msgstr "Spelas nu" -msgid "" -"Now, use the contrast setting to turn up the brightness of the background as " -"much as possible, but make sure that you can still see the difference " -"between the two brightest levels of shades.If you have done that, press OK." -msgstr "" -"Använd kontrastinställningen för att justera ljusstyrka på bakgrunden så " -"mycket som möjligt, men säkerställ att du fortfarande kan se skillnaden " -"mellan de två ljusaste nivåerna av skuggor. När du har gjort det tryck OK." +msgid "Now, use the contrast setting to turn up the brightness of the background as much as possible, but make sure that you can still see the difference between the two brightest levels of shades.If you have done that, press OK." +msgstr "Använd kontrastinställningen för att justera ljusstyrka på bakgrunden så mycket som möjligt, men säkerställ att du fortfarande kan se skillnaden mellan de två ljusaste nivåerna av skuggor. När du har gjort det tryck OK." msgid "OK" msgstr "OK" @@ -2574,7 +2517,8 @@ msgstr "Pakethanterare" msgid "Page" msgstr "Sida" -#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term +#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, +#. keep english term msgid "Pan&Scan" msgstr "Pan&Scan" @@ -2608,7 +2552,8 @@ msgstr "BiB konfiguration" msgid "PicturePlayer" msgstr "Bildspelare" -#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. +#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep +#. english term. msgid "Pillarbox" msgstr "Svarta kanter" @@ -2658,26 +2603,21 @@ msgid "Please choose the default services lists you want to install." msgstr "Vänligen välj vilken grundservicelista som du vill installera." msgid "" -"Please configure or verify your Nameservers by filling out the required " -"values.\n" +"Please configure or verify your Nameservers by filling out the required values.\n" "When you are ready press OK to continue." msgstr "" -"Vänligen konfigurera eller bekräfta din namnserver med att fylla i de " -"begärda fälten.\n" +"Vänligen konfigurera eller bekräfta din namnserver med att fylla i de begärda fälten.\n" "När du är klar tryck OK för att fortsätta" msgid "" -"Please configure your internet connection by filling out the required " -"values.\n" +"Please configure your internet connection by filling out the required values.\n" "When you are ready press OK to continue." msgstr "" +"Vänligen konfigurera din Internet anslutning med att fylla i begärda fält.\n" +"När du är klar tryck OK för att forsätta." -msgid "" -"Please disconnect all USB devices from your Dreambox and (re-)attach the " -"target USB stick (minimum size is 64 MB) now!" -msgstr "" -"Vänligen koppla bort alla USB enheter från din Dreambox och (åter-)anslut " -"mål USB stick (minimumstorlek är 64MB) nu!" +msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!" +msgstr "Vänligen koppla bort alla USB enheter från din Dreambox och (åter-)anslut mål USB stick (minimumstorlek är 64MB) nu!" msgid "Please do not change any values unless you know what you are doing!" msgstr "Vänligen ändra inte om du inte vet vad du gör!" @@ -2712,12 +2652,8 @@ msgstr "Vänligen ange ditt namn här (valfritt):" msgid "Please follow the instructions on the TV" msgstr "Vänligen följ instruktionerna på TVn" -msgid "" -"Please note that the previously selected media could not be accessed and " -"therefore the default directory is being used instead." -msgstr "" -"Vänligen notera att föregående valda mediat var inte åtkomstbart och därför " -"är nu default bibliotek valt." +msgid "Please note that the previously selected media could not be accessed and therefore the default directory is being used instead." +msgstr "Vänligen notera att föregående valda mediat var inte åtkomstbart och därför är nu default bibliotek valt." msgid "Please press OK to continue." msgstr "Vänligen tryck OK för att försätta." @@ -2759,13 +2695,11 @@ msgid "Please select the movie path..." msgstr "Vänligen ange filmens sökväg..." msgid "" -"Please select the network interface that you want to use for your internet " -"connection.\n" +"Please select the network interface that you want to use for your internet connection.\n" "\n" "Please press OK to continue." msgstr "" -"Vänligen välj nätverkskort som du vill använda för anslutning till " -"Internet.\n" +"Vänligen välj nätverkskort som du vill använda för anslutning till Internet.\n" "\n" "Vänligen tryck OK för att fortsätta" @@ -2774,6 +2708,9 @@ msgid "" "\n" "Please press OK to continue." msgstr "" +"Vänligen välj det trådlösa nätverk du vill ansluta till.\n" +"\n" +"Vänligen tryck OK för att forsätta." msgid "Please set up tuner B" msgstr "Vänligen installera tuner B" @@ -2791,15 +2728,10 @@ msgid "" msgstr "" "Använd piltangenterna för att flytta BiB fönstret.\n" "Tryck Bouquet +/- för ändra storleken på fönstret.\n" -"Tryck OK för att gå tillbaka till TV läge eller EXIT för att avbryta " -"flyttning." +"Tryck OK för att gå tillbaka till TV läge eller EXIT för att avbryta flyttning." -msgid "" -"Please use the UP and DOWN keys to select your language. Afterwards press " -"the OK button." -msgstr "" -"Vänligen använd UPP och NER pil för att välja språk. Efter val tryck på OK " -"knappen." +msgid "Please use the UP and DOWN keys to select your language. Afterwards press the OK button." +msgstr "Vänligen använd UPP och NER pil för att välja språk. Efter val tryck på OK knappen." msgid "Please wait for activation of your network configuration..." msgstr "Vänligen vänta för aktivering av din nätverkskonfiguration..." @@ -3167,12 +3099,8 @@ msgstr "Återskapning pågår" msgid "Restore system settings" msgstr "Återskapa systeminställningar" -msgid "" -"Restoring the settings is done. Please press OK to activate the restored " -"settings now." -msgstr "" -"Återställning av inställningar klart. Tryck OK för att aktivera återskapade " -"inställningar" +msgid "Restoring the settings is done. Please press OK to activate the restored settings now." +msgstr "Återställning av inställningar klart. Tryck OK för att aktivera återskapade inställningar" msgid "Resume from last position" msgstr "Återuppspela från senaste position" @@ -3337,22 +3265,13 @@ msgstr "Sök US MID band" msgid "Scan band US SUPER" msgstr "Sök US SUPER band" -msgid "" -"Scan your network for wireless Access Points and connect to them using your " -"WLAN USB Stick\n" -msgstr "" -"Sök ditt nätverk för trådlös Access Punkt och anslut till den med WLAN USB " -"Stick\n" +msgid "Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n" +msgstr "Sök ditt nätverk för trådlös Access Punkt och anslut till den med WLAN USB Stick\n" -msgid "" -"Scan your network for wireless Access Points and connect to them using your " -"selected wireless device.\n" -msgstr "" -"Söka ditt nätverk efter trådlös Accesspunkt och ansluta till det med ditt " -"valda trådlösa enhet.\n" +msgid "Scan your network for wireless Access Points and connect to them using your selected wireless device.\n" +msgstr "Söka ditt nätverk efter trådlös Accesspunkt och ansluta till det med ditt valda trådlösa enhet.\n" -msgid "" -"Scans default lamedbs sorted by satellite with a connected dish positioner" +msgid "Scans default lamedbs sorted by satellite with a connected dish positioner" msgstr "Sök grund lamedbs sorterat på satellite med en " msgid "Search east" @@ -3803,7 +3722,8 @@ msgstr "Symbolrate" msgid "System" msgstr "System" -#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline) +#. TRANSLATORS: Add here whatever should be shown in the "translator" about +#. screen, up to 6 lines (use \n for newline) msgid "TRANSLATOR_INFO" msgstr "" "Översättning utfört av: WeeGull\n" @@ -3853,6 +3773,8 @@ msgid "" "Thank you for using the wizard.\n" "Please press OK to continue." msgstr "" +"Tack för att du använde guiden.\n" +"Vänligen tryck OK för att forsätta." msgid "" "Thank you for using the wizard. Your box is now ready to use.\n" @@ -3861,21 +3783,11 @@ msgstr "" "Tack för att du använde guiden. Din box är nu konfigurerad.\n" "Tryck OK för att börja använda din Dreambox." -msgid "" -"The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to " -"create a Dreambox format data DVD (which will not play in stand-alone DVD " -"players) instead?" -msgstr "" -"DVD standarden stödjer inte H.264 (HDTV) videoströmmar. Vill du skapa en " -"Dreambox format data DVD (kommer ej kunnas spelas i vanlig DVD spelare) " -"istället? " +msgid "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?" +msgstr "DVD standarden stödjer inte H.264 (HDTV) videoströmmar. Vill du skapa en Dreambox format data DVD (kommer ej kunnas spelas i vanlig DVD spelare) istället? " -msgid "" -"The USB stick is now bootable. Do you want to download the latest image from " -"the feed server and save it on the stick?" -msgstr "" -"USB sticken är nu bootbar. Vill du ladda ner senaste image från feed server " -"och spara den på sticken?" +msgid "The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?" +msgstr "USB sticken är nu bootbar. Vill du ladda ner senaste image från feed server och spara den på sticken?" msgid "The backup failed. Please choose a different backup location." msgstr "Backupen misslyckades, välj en annan plats för din backup " @@ -3899,8 +3811,7 @@ msgstr "Följande filer hittades..." msgid "" "The input port should be configured now.\n" -"You can now configure the screen by displaying some test pictures. Do you " -"want to do that now?" +"You can now configure the screen by displaying some test pictures. Do you want to do that now?" msgstr "" "Ingångsport bör konfigureras nu.\n" "Du kan konfigurera skärmen med hjälp av några testbilder. Vill du gör det nu?" @@ -3908,27 +3819,14 @@ msgstr "" msgid "The installation of the default services lists is finished." msgstr "Installationen av grundservicelistan är klar." -msgid "" -"The installation of the default settings is finished. You can now continue " -"configuring your Dreambox by pressing the OK button on the remote control." -msgstr "" -"Installationen av grundinställningar är nu klar. Du kan nu slutföra din " -"konfiguration av Dreambox med att trycka på OK knappen på din fjärrkontroll." +msgid "The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control." +msgstr "Installationen av grundinställningar är nu klar. Du kan nu slutföra din konfiguration av Dreambox med att trycka på OK knappen på din fjärrkontroll." -msgid "" -"The md5sum validation failed, the file may be corrupted! Are you sure that " -"you want to burn this image to flash memory? You are doing this at your own " -"risk!" -msgstr "" -"md5sun validering misslyckades, filen kan vara korrupt! Är du säker på att " -"du vill flasha denna image till flashminnet? Du utför detta på egen risk!" +msgid "The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!" +msgstr "md5sun validering misslyckades, filen kan vara korrupt! Är du säker på att du vill flasha denna image till flashminnet? Du utför detta på egen risk!" -msgid "" -"The md5sum validation failed, the file may be downloaded incompletely or be " -"corrupted!" -msgstr "" -"md5sum validering misslyckades, filen kanske inte blev helt nedladdad eller " -"är korrupt!" +msgid "The md5sum validation failed, the file may be downloaded incompletely or be corrupted!" +msgstr "md5sum validering misslyckades, filen kanske inte blev helt nedladdad eller är korrupt!" msgid "The package doesn't contain anything." msgstr "Paketet innehåller ingenting." @@ -3976,10 +3874,8 @@ msgstr "" "Pluginen för trådlöst LAN är inte installerad!\n" "Vänligen installera den." -msgid "" -"The wizard can backup your current settings. Do you want to do a backup now?" -msgstr "" -"Guiden kan ta en backup på nuvarande inställningar. Vill du ta en backup nu?" +msgid "The wizard can backup your current settings. Do you want to do a backup now?" +msgstr "Guiden kan ta en backup på nuvarande inställningar. Vill du ta en backup nu?" msgid "The wizard is finished now." msgstr "Guiden är nu färdig." @@ -4003,8 +3899,7 @@ msgid "" "There might not be enough Space on the selected Partition.\n" "Do you really want to continue?" msgstr "" -"Det är inte säkert att det finns tillräckligt med utrymme på vald " -"partition.\n" +"Det är inte säkert att det finns tillräckligt med utrymme på vald partition.\n" "Vill du verkligen fortsätta?" msgid "There was an error downloading the packetlist. Please try again." @@ -4017,26 +3912,14 @@ msgstr "Ett fel uppstod. Paketet:" msgid "This .NFI file does not contain a valid %s image!" msgstr "Denna .NFI fil innehåller ingen giltig %s image!" -msgid "" -"This .NFI file does not have a md5sum signature and is not guaranteed to " -"work. Do you really want to burn this image to flash memory?" -msgstr "" -"Denna .NFI har ingen md5sum signatur och är inte garanterad att den " -"fungerar. Vill du verkligen flasha denna image till flashminnet?" +msgid "This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?" +msgstr "Denna .NFI har ingen md5sum signatur och är inte garanterad att den fungerar. Vill du verkligen flasha denna image till flashminnet?" -msgid "" -"This .NFI file has a valid md5 signature. Continue programming this image to " -"flash memory?" -msgstr "" -"Denna .NFI har giltig md5sum. Fortsätta programmera denna image till " -"flashminnet?" +msgid "This .NFI file has a valid md5 signature. Continue programming this image to flash memory?" +msgstr "Denna .NFI har giltig md5sum. Fortsätta programmera denna image till flashminnet?" -msgid "" -"This DVD RW medium is already formatted - reformatting will erase all " -"content on the disc." -msgstr "" -"Detta DVD RW media är redan formaterat - omformatering kommer ta bort all " -"data på skivan." +msgid "This DVD RW medium is already formatted - reformatting will erase all content on the disc." +msgstr "Detta DVD RW media är redan formaterat - omformatering kommer ta bort all data på skivan." #, python-format msgid "This Dreambox can't decode %s streams!" @@ -4068,14 +3951,12 @@ msgid "" "This test checks for configured Nameservers.\n" "If you get a \"unconfirmed\" message:\n" "- please check your DHCP, cabling and Adapter setup\n" -"- if you configured your Nameservers manually please verify your entries in " -"the \"Nameserver\" Configuration" +"- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration" msgstr "" "Detta test kontrollerar konfigurationen för Namnservrar.\n" "Om du får ett \"obekräftat\" meddelande:\n" "- vänligen kontrollera din DHCP, kablar och adapter installation\n" -"- om du har konfigurerat din Namnserver manuellt vänligen bekräfta dina " -"inställningar i \"Namnserver\" INstallation" +"- om du har konfigurerat din Namnserver manuellt vänligen bekräfta dina inställningar i \"Namnserver\" INstallation" msgid "" "This test checks whether a network cable is connected to your LAN-Adapter.\n" @@ -4083,8 +3964,7 @@ msgid "" "- verify that a network cable is attached\n" "- verify that the cable is not broken" msgstr "" -"Detta test kontrollerar om en nätverkskablen är ansluten till din LAN " -"adapter.\n" +"Detta test kontrollerar om en nätverkskablen är ansluten till din LAN adapter.\n" "Om du får ett \"Ej ansluten\" meddelande:\n" "- bekräfta att nätverkskabel är ansluten\n" "- bekräfta att kabeln inte är trasig" @@ -4101,24 +3981,19 @@ msgstr "" "- vänlig kontrollera din DHCP, kablar och nätverkskorts installation" msgid "" -"This test checks whether your LAN Adapter is set up for automatic IP Address " -"configuration with DHCP.\n" +"This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\n" "If you get a \"disabled\" message:\n" " - then your LAN Adapter is configured for manual IP Setup\n" -"- verify thay you have entered correct IP informations in the AdapterSetup " -"dialog.\n" +"- verify thay you have entered correct IP informations in the AdapterSetup dialog.\n" "If you get an \"enabeld\" message:\n" "-verify that you have a configured and working DHCP Server in your network." msgstr "" -"Detta test kontrollerar om din LAN adapter är konfigurerad för automatisk IP " -"adress tilldelning med DHCP.\n" +"Detta test kontrollerar om din LAN adapter är konfigurerad för automatisk IP adress tilldelning med DHCP.\n" "Om du får en \"deaktiverad\" meddelande:\n" "- ditt LAN är konfigurerat för manuell IP tilldelning\n" -"- bekräfta att du har angivit korrekt IP information i Adapterinstallation " -"dialogen.\n" +"- bekräfta att du har angivit korrekt IP information i Adapterinstallation dialogen.\n" "Om du får ett \"aktiverat\" meddelande:\n" -"- bekräfta att du har konfigurerad och fungerandes DHCP server på ditt " -"nätverk." +"- bekräfta att du har konfigurerad och fungerandes DHCP server på ditt nätverk." msgid "This test detects your configured LAN-Adapter." msgstr "Detta test upptäcker konfigurerade LAN adapter." @@ -4201,17 +4076,13 @@ msgstr "Titelset läge" msgid "" "To update your Dreambox firmware, please follow these steps:\n" -"1) Turn off your box with the rear power switch and plug in the bootable USB " -"stick.\n" -"2) Turn mains back on and hold the DOWN button on the front panel pressed " -"for 10 seconds.\n" +"1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n" +"2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n" "3) Wait for bootup and follow instructions of the wizard." msgstr "" "För att uppdatera din Dreambox firmware, vänligen utför följande steg:\n" -"1) Stäng av din box med strömbrytaren på baksidan och sätt in bootbar USB " -"stick.\n" -"2) Slå på strömbrytaren och håll NER pil på fronten intryckt i ungerfär 10 " -"sekunder.\n" +"1) Stäng av din box med strömbrytaren på baksidan och sätt in bootbar USB stick.\n" +"2) Slå på strömbrytaren och håll NER pil på fronten intryckt i ungerfär 10 sekunder.\n" "3) Vänta på uppstart och följ instruktionerna från guiden." msgid "Today" @@ -4416,17 +4287,14 @@ msgstr "" "\n" "Inställning Tuner A" -msgid "" -"Use the up/down keys on your remote control to select an option. After that, " -"press OK." -msgstr "" -"Använd upp/ner pilarna på din fjärrkontroll för att välja. Tryck sedan OK." +msgid "Use the up/down keys on your remote control to select an option. After that, press OK." +msgstr "Använd upp/ner pilarna på din fjärrkontroll för att välja. Tryck sedan OK." msgid "Use this video enhancement settings?" msgstr "Använd denna videoförbättringskonfiguration?" msgid "Use time of currently running service" -msgstr "" +msgstr "Använd tid från närvarande vald service" msgid "Use usals for this sat" msgstr "Använd USALS för denna sat" @@ -4479,15 +4347,13 @@ msgstr "Videoförbättringsinstallation" msgid "" "Video input selection\n" "\n" -"Please press OK if you can see this page on your TV (or select a different " -"input port).\n" +"Please press OK if you can see this page on your TV (or select a different input port).\n" "\n" "The next input port will be automatically probed in 10 seconds." msgstr "" "Video ingångsval\n" "\n" -"Vänligen tryck OK om du kan se denna bild på din TV (eller välj annan " -"ingångsport).\n" +"Vänligen tryck OK om du kan se denna bild på din TV (eller välj annan ingångsport).\n" "\n" "Nästa ingångsport kommer automatiskt provas om 10 sekunder." @@ -4519,8 +4385,7 @@ msgid "View list of available CommonInterface extensions" msgstr "Visa lista över tillgängliga CommonInterface utökningar" msgid "View list of available Display and Userinterface extensions." -msgstr "" -"Visa lista över tillgängliga Display och Användargränssnitt utökningar." +msgstr "Visa lista över tillgängliga Display och Användargränssnitt utökningar." msgid "View list of available EPG extensions." msgstr "Visa lista över tillgängliga EPG utökningar." @@ -4589,12 +4454,10 @@ msgid "Warn if free space drops below (kB):" msgstr "Varna om tillgängligt utrymme understiger (kB):" msgid "" -"We will now test if your TV can also display this resolution at 50hz. If " -"your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" +"We will now test if your TV can also display this resolution at 50hz. If your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" "Please press OK to begin." msgstr "" -"Vi kommer nu testa om din TV kan hantera upplösningen i 50 Hz. Om din skärm " -"blir svart, vänta ca 20 sek så kommer den att återgå till 60 Hz.\n" +"Vi kommer nu testa om din TV kan hantera upplösningen i 50 Hz. Om din skärm blir svart, vänta ca 20 sek så kommer den att återgå till 60 Hz.\n" "Vänlig tryck OK för att starta." msgid "Wed" @@ -4609,8 +4472,7 @@ msgstr "Veckodag" msgid "" "Welcome to the Cutlist editor.\n" "\n" -"Seek to the start of the stuff you want to cut away. Press OK, select 'start " -"cut'.\n" +"Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.\n" "\n" "Then seek to the end, press OK, select 'end cut'. That's it." msgstr "" @@ -4618,40 +4480,34 @@ msgstr "" "\n" "Sök början på det innehåll du vill klippa bort. Tryck OK, välj 'start cut'.\n" "\n" -"Sök därefter slutet på det innehåll du vill klippa bort, tryck OK, välj 'end " -"cut'. Det var allt." +"Sök därefter slutet på det innehåll du vill klippa bort, tryck OK, välj 'end cut'. Det var allt." -msgid "" -"Welcome to the Image upgrade wizard. The wizard will assist you in upgrading " -"the firmware of your Dreambox by providing a backup facility for your " -"current settings and a short explanation of how to upgrade your firmware." -msgstr "" -"Välkommen till uppgraderings guiden. Guiden hjälper dig med uppgraderingen " -"av mjukvaran i din Dreambox genom att tillgodose en backupmöjlighet till " -"dina aktuella inställningar och en kort förklaring hur du uppgraderar " -"mjukvaran." +msgid "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading the firmware of your Dreambox by providing a backup facility for your current settings and a short explanation of how to upgrade your firmware." +msgstr "Välkommen till uppgraderings guiden. Guiden hjälper dig med uppgraderingen av mjukvaran i din Dreambox genom att tillgodose en backupmöjlighet till dina aktuella inställningar och en kort förklaring hur du uppgraderar mjukvaran." msgid "" "Welcome to the cleanup wizard.\n" "\n" "We have detected that your available internal memory has dropped below 2MB.\n" -"To ensure stable operation of your Dreambox, the internal memory should be " -"cleaned up.\n" +"To ensure stable operation of your Dreambox, the internal memory should be cleaned up.\n" "You can use this wizard to remove some extensions.\n" msgstr "" +"Välkommen till upprensnings guiden.\n" +"\n" +"Det har upptäckts att tillgängligt utrymme på interna minnet understiger 2MB.\n" +"För att uppnå en stabil Dreambox bör interna minnet rensas upp.\n" +"Du kan använda den här guiden för att ta bort vissa utökningar.\n" msgid "" "Welcome.\n" "\n" -"If you want to connect your Dreambox to the Internet, this wizard will guide " -"you through the basic network setup of your Dreambox.\n" +"If you want to connect your Dreambox to the Internet, this wizard will guide you through the basic network setup of your Dreambox.\n" "\n" "Press OK to start configuring your network" msgstr "" "Välkommen.\n" "\n" -"Om du vill ansluta din Dreambox till Internet, då kommer den här guiden " -"hjälpa dig genom grundläggande konfiguration av din Dreambox.\n" +"Om du vill ansluta din Dreambox till Internet, då kommer den här guiden hjälpa dig genom grundläggande konfiguration av din Dreambox.\n" "\n" "Tryck OK för att starta konfigurationen av ditt nätverk." @@ -4681,8 +4537,7 @@ msgstr "Vad ska ske med skickade crashlogs?" msgid "" "When you do a factory reset, you will lose ALL your configuration data\n" "(including bouquets, services, satellite data ...)\n" -"After completion of factory reset, your receiver will restart " -"automatically!\n" +"After completion of factory reset, your receiver will restart automatically!\n" "\n" "Really do a factory reset?" msgstr "" @@ -4764,12 +4619,8 @@ msgstr "Du kan avbryta installationen." msgid "You can cancel the removal." msgstr "Du kan avbryta borttagningen." -msgid "" -"You can choose some default settings now. Please select the settings you " -"want to be installed." -msgstr "" -"Du kan välja från några grundinställningar nu. Vänligen välj de " -"inställningar du vill installera." +msgid "You can choose some default settings now. Please select the settings you want to be installed." +msgstr "Du kan välja från några grundinställningar nu. Vänligen välj de inställningar du vill installera." msgid "You can choose, what you want to install..." msgstr "Du kan välja, vad vill du ska installeras..." @@ -4786,89 +4637,51 @@ msgstr "Du kan inte ta bort detta!" msgid "You chose not to install any default services lists." msgstr "Du har valt att inte installera någon grundservicelista." -msgid "" -"You chose not to install any default settings. You can however install the " -"default settings later in the settings menu." -msgstr "" -"Du har valt att inte installera grundinställningar. Du kan om du vill senare " -"installera grundinställningarna via installations menyerna." +msgid "You chose not to install any default settings. You can however install the default settings later in the settings menu." +msgstr "Du har valt att inte installera grundinställningar. Du kan om du vill senare installera grundinställningarna via installations menyerna." -msgid "" -"You chose not to install anything. Please press OK finish the install wizard." -msgstr "" -"Du har valt att inte installetra något. Vänligen tryck OK för att avsluta " -"installations guiden." +msgid "You chose not to install anything. Please press OK finish the install wizard." +msgstr "Du har valt att inte installetra något. Vänligen tryck OK för att avsluta installations guiden." -msgid "" -"You do not seem to have a harddisk in your Dreambox. So backing up to a " -"harddisk is not an option for you." -msgstr "" -"Du verkar inte ha någon hårddisk i din Dreambox. Att ta backup till en " -"hårddisk är därför inte möjligt." +msgid "You do not seem to have a harddisk in your Dreambox. So backing up to a harddisk is not an option for you." +msgstr "Du verkar inte ha någon hårddisk i din Dreambox. Att ta backup till en hårddisk är därför inte möjligt." msgid "" -"You have chosen to backup to a compact flash card. The card must be in the " -"slot. We do not verify if it is really used at the moment. So better backup " -"to the harddisk!\n" +"You have chosen to backup to a compact flash card. The card must be in the slot. We do not verify if it is really used at the moment. So better backup to the harddisk!\n" "Please press OK to start the backup now." msgstr "" -"Du har valt att ta backup till ett flash-kort. Kortet måste sitta i sloten. " -"Vi kan inte verifiera att den används förnärvarande. Så det är bättre att ta " -"backup till hårddisk!\n" +"Du har valt att ta backup till ett flash-kort. Kortet måste sitta i sloten. Vi kan inte verifiera att den används förnärvarande. Så det är bättre att ta backup till hårddisk!\n" "Tryck OK för att starta backupen." msgid "" "You have chosen to backup to an usb drive. Better backup to the harddisk!\n" "Please press OK to start the backup now." msgstr "" -"Du har valt att ta backup till ett USB minne. Bättre att ta backup till " -"HDD!\n" +"Du har valt att ta backup till ett USB minne. Bättre att ta backup till HDD!\n" "Tryck OK för att starta backup." -msgid "" -"You have chosen to backup to your harddisk. Please press OK to start the " -"backup now." -msgstr "" -"Du har valt att ta backup till din hårddisk. Vänligen tryck OK så startar " -"backupen." +msgid "You have chosen to backup to your harddisk. Please press OK to start the backup now." +msgstr "Du har valt att ta backup till din hårddisk. Vänligen tryck OK så startar backupen." -msgid "" -"You have chosen to backup your settings. Please press OK to start the backup " -"now." -msgstr "" -"Du har valt att ta backup på dina inställningar. Vänligen tryck OK för att " -"starta backup nu." +msgid "You have chosen to backup your settings. Please press OK to start the backup now." +msgstr "Du har valt att ta backup på dina inställningar. Vänligen tryck OK för att starta backup nu." -msgid "" -"You have chosen to create a new .NFI flasher bootable USB stick. This will " -"repartition the USB stick and therefore all data on it will be erased." -msgstr "" -"Du har valt att skapa en ny .NFI flash startbar USB stick. Detta kommer " -"repartitionera USB stickan och efter det kommer all data på den vara borta." +msgid "You have chosen to create a new .NFI flasher bootable USB stick. This will repartition the USB stick and therefore all data on it will be erased." +msgstr "Du har valt att skapa en ny .NFI flash startbar USB stick. Detta kommer repartitionera USB stickan och efter det kommer all data på den vara borta." -msgid "" -"You have chosen to restore your settings. Enigma2 will restart after " -"restore. Please press OK to start the restore now." -msgstr "" -"Du har valt att återskapa dina inställningar. Enigma2 kommer starta om efter " -"återskapningen. Vänligen tryck OK för att starta återskapningen nu." +msgid "You have chosen to restore your settings. Enigma2 will restart after restore. Please press OK to start the restore now." +msgstr "Du har valt att återskapa dina inställningar. Enigma2 kommer starta om efter återskapningen. Vänligen tryck OK för att starta återskapningen nu." #, python-format msgid "You have to wait %s!" msgstr "Du måste vänta %s!" msgid "" -"You need a PC connected to your dreambox. If you need further instructions, " -"please visit the website http://www.dm7025.de.\n" -"Your dreambox will now be halted. After you have performed the update " -"instructions from the website, your new firmware will ask you to restore " -"your settings." +"You need a PC connected to your dreambox. If you need further instructions, please visit the website http://www.dm7025.de.\n" +"Your dreambox will now be halted. After you have performed the update instructions from the website, your new firmware will ask you to restore your settings." msgstr "" -"Du behöver ha en PC kopplad till din Dreambox. Behöver du ytterligare " -"instruktioner vänligen gå till websidan http://www.dm7025.de.\n" -"Din dreambox kommer nu att stoppas. När du har genomfört uppdateringen " -"instruktioner från websidan, din nya mjukvara kommer att fråga dig om du " -"vill återställa dina inställningar." +"Du behöver ha en PC kopplad till din Dreambox. Behöver du ytterligare instruktioner vänligen gå till websidan http://www.dm7025.de.\n" +"Din dreambox kommer nu att stoppas. När du har genomfört uppdateringen instruktioner från websidan, din nya mjukvara kommer att fråga dig om du vill återställa dina inställningar." msgid "" "You need to set a pin code and hide it from your children.\n" @@ -4886,6 +4699,11 @@ msgid "" "\n" "Please press OK to continue." msgstr "" +"Din Dreambox är nu klar för användning.\n" +"\n" +"Din Internet anslutning fungerar nu.\n" +"\n" +"Vänligen tryck OK för att forsätta." msgid "Your Dreambox will restart after pressing OK on your remote control." msgstr "Din Dreambox kommer starta vid tryck på OK på din fjärrkontroll." @@ -4893,29 +4711,17 @@ msgstr "Din Dreambox kommer starta vid tryck på OK på din fjärrkontroll." msgid "Your TV works with 50 Hz. Good!" msgstr "Din TV fungerar med 50 Hz. Bra!" -msgid "" -"Your backup succeeded. We will now continue to explain the further upgrade " -"process." -msgstr "" -"Backupen lyckades. Vi kommer nu att fortsätta förklara " -"uppgraderingsprocessen." +msgid "Your backup succeeded. We will now continue to explain the further upgrade process." +msgstr "Backupen lyckades. Vi kommer nu att fortsätta förklara uppgraderingsprocessen." -msgid "" -"Your collection exceeds the size of a single layer medium, you will need a " -"blank dual layer DVD!" -msgstr "" -"Din samling överstiger storleken på single layer media, du kommer behöva en " -"tom dual layer DVD!" +msgid "Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!" +msgstr "Din samling överstiger storleken på single layer media, du kommer behöva en tom dual layer DVD!" msgid "Your dreambox is shutting down. Please stand by..." msgstr "Din Dreambox håller på att stängas av. Vänligen vänta..." -msgid "" -"Your dreambox isn't connected to the internet properly. Please check it and " -"try again." -msgstr "" -"Din dreambox är inte ansluten till Internet på korrekt sätt. Åtgärda och " -"försök igen." +msgid "Your dreambox isn't connected to the internet properly. Please check it and try again." +msgstr "Din dreambox är inte ansluten till Internet på korrekt sätt. Åtgärda och försök igen." msgid "Your email address:" msgstr "Din epost adress:" @@ -4931,6 +4737,8 @@ msgid "" "Your internet connection is not working!\n" "Please choose what you want to do next." msgstr "" +"Din Internat anslutning fungerar inte!\n" +"Vänligen välj vad du vill utföra." msgid "Your name (optional):" msgstr "Ditt namn (valfritt):" @@ -4979,14 +4787,10 @@ msgid "[move mode]" msgstr "[flyttläge]" msgid "a gui to assign services/providers to common interface modules" -msgstr "" -"ett gränssnitt för att tilldela services/providers till ett common interface " -"modul" +msgstr "ett gränssnitt för att tilldela services/providers till ett common interface modul" msgid "a gui to assign services/providers/caids to common interface modules" -msgstr "" -"ett gränssnitt för att tilldela services/providers/caids till ett common " -"interface modul" +msgstr "ett gränssnitt för att tilldela services/providers/caids till ett common interface modul" msgid "abort alternatives edit" msgstr "avbryt ändra alternativ" @@ -5868,12 +5672,8 @@ msgstr "ja" msgid "yes (keep feeds)" msgstr "ja (behåll feeds)" -msgid "" -"your dreambox might be unusable now. Please consult the manual for further " -"assistance before rebooting your dreambox." -msgstr "" -"din dreambox kanske inte fungerar längre. Vänligen läs manualen hur du får " -"hjälp innan du startar om din dreambox." +msgid "your dreambox might be unusable now. Please consult the manual for further assistance before rebooting your dreambox." +msgstr "din dreambox kanske inte fungerar längre. Vänligen läs manualen hur du får hjälp innan du startar om din dreambox." msgid "zap" msgstr "zap" @@ -6024,8 +5824,7 @@ msgstr "zapped" #~ msgstr "Vill du verkligen avsluta?" #~ msgid "Do you want to continue installing or removing selected plugins?\n" -#~ msgstr "" -#~ "Vill du fortsätta med installation eller borttagning av vald plugin?\n" +#~ msgstr "Vill du fortsätta med installation eller borttagning av vald plugin?\n" #~ msgid "Downloading image description..." #~ msgstr "Ladda ner image beskrivning..." @@ -6106,48 +5905,38 @@ msgstr "zapped" #~ msgid "" #~ "No working local networkadapter found.\n" -#~ "Please verify that you have attached a network cable and your Network is " -#~ "configured correctly." +#~ "Please verify that you have attached a network cable and your Network is configured correctly." #~ msgstr "" #~ "Inget fungerades lokalt nätverkskort hittat.\n" -#~ "Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt " -#~ "Nätverk är korrekt konfigurerat." +#~ "Vänligen bekräfta att du har anslutit en nätverkskabel och att ditt Nätverk är korrekt konfigurerat." #~ msgid "" #~ "No working wireless interface found.\n" -#~ " Please verify that you have attached a compatible WLAN USB Stick or " -#~ "enable your local network interface." +#~ " Please verify that you have attached a compatible WLAN USB Stick or enable your local network interface." #~ msgstr "" #~ "Inget fungerade trådlöst nätverkskort hittat.\n" -#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick " -#~ "eller aktiverat ditt lokala nätverkskort." +#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick eller aktiverat ditt lokala nätverkskort." #~ msgid "" #~ "No working wireless interface found.\n" -#~ " Please verify that you have attached a compatible WLAN device or enable " -#~ "you local network interface." +#~ " Please verify that you have attached a compatible WLAN device or enable you local network interface." #~ msgstr "" #~ "Inget fungerandes trådlöst kort hittat.\n" -#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller " -#~ "aktiverat lokalt nätverkskort." +#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller aktiverat lokalt nätverkskort." #~ msgid "" #~ "No working wireless interface found.\n" -#~ " Please verify that you have attached a compatible WLAN device or enable " -#~ "your local network interface." +#~ " Please verify that you have attached a compatible WLAN device or enable your local network interface." #~ msgstr "" #~ "Inget fungerandes trådlöst kort hittat.\n" -#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller " -#~ "aktiverat ditt lokala nätverkskort." +#~ " Vänligen bekräfta att du har anslutit ett kompatibelt WLAN kort eller aktiverat ditt lokala nätverkskort." #~ msgid "" #~ "No working wireless networkadapter found.\n" -#~ "Please verify that you have attached a compatible WLAN USB Stick and your " -#~ "Network is configured correctly." +#~ "Please verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly." #~ msgstr "" #~ "Inget fungerande trådlöst nätverkskort hittat.\n" -#~ "Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick och " -#~ "konfigurerat ditt Nätverk korrekt." +#~ "Vänligen bekräfta att du har anslutit ett kompatibelt WLAN USB Stick och konfigurerat ditt Nätverk korrekt." #~ msgid "No, let me choose default lists" #~ msgstr "Nej, låt mig välja grundlista" @@ -6155,14 +5944,8 @@ msgstr "zapped" #~ msgid "No, send them never." #~ msgstr "Nej, skicka aldrig." -#~ msgid "" -#~ "Now please insert the USB stick (minimum size is 64 MB) that you want to " -#~ "format and use as .NFI image flasher. Press OK after you've put the stick " -#~ "back in." -#~ msgstr "" -#~ "Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera " -#~ "och använda som .NFI image flasher. Tryck OK efter du anslutit stickan i " -#~ "boxen. " +#~ msgid "Now please insert the USB stick (minimum size is 64 MB) that you want to format and use as .NFI image flasher. Press OK after you've put the stick back in." +#~ msgstr "Vänligen anslut nu USB stick (minsta storlek 64MB) som du vill formatera och använda som .NFI image flasher. Tryck OK efter du anslutit stickan i boxen. " #~ msgid "Other..." #~ msgstr "Annat..." @@ -6170,31 +5953,21 @@ msgstr "zapped" #~ msgid "Partitioning USB stick..." #~ msgstr "Partitionera USB stick..." -#~ msgid "" -#~ "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your " -#~ "Dreambox and press the OK button on your remote control to enable the " -#~ "built in wireless network support" -#~ msgstr "" -#~ "Vänligen anslut ditt Zydas ZD1211B chipset kompatibelt WLAN USB Stick " -#~ "till din Dreambox och tryck OK på din fjärrkontroll för att aktivera det " -#~ "inbyggda trådlösa nätverksstödet." +#~ msgid "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your Dreambox and press the OK button on your remote control to enable the built in wireless network support" +#~ msgstr "Vänligen anslut ditt Zydas ZD1211B chipset kompatibelt WLAN USB Stick till din Dreambox och tryck OK på din fjärrkontroll för att aktivera det inbyggda trådlösa nätverksstödet." #~ msgid "" -#~ "Please configure your local LAN internet connection by filling out the " -#~ "needed values.\n" +#~ "Please configure your local LAN internet connection by filling out the needed values.\n" #~ "When you are ready please press OK to continue." #~ msgstr "" -#~ "Vänligen konfigurera ditt lokala LANs Internet anslutning med att fylla i " -#~ "de behövda värdena.\n" +#~ "Vänligen konfigurera ditt lokala LANs Internet anslutning med att fylla i de behövda värdena.\n" #~ "När du är klar vänligen tryck på OK för att forsätta." #~ msgid "" -#~ "Please configure your wireless LAN internet connection by filling out the " -#~ "needed values.\n" +#~ "Please configure your wireless LAN internet connection by filling out the needed values.\n" #~ "When you are ready please press OK to continue." #~ msgstr "" -#~ "Vänligen konfigurera ditt trådlösa LANs Internet med att fylla i de " -#~ "behövda värdena.\n" +#~ "Vänligen konfigurera ditt trådlösa LANs Internet med att fylla i de behövda värdena.\n" #~ "När du är klar vänligen tryck OK för att forsätta." #~ msgid "Please select below the wireless network you want to connect to." @@ -6214,38 +5987,26 @@ msgstr "zapped" #~ msgid "" #~ "Pressing OK enables the built in wireless LAN support of your Dreambox.\n" -#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are " -#~ "supported.\n" +#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\n" #~ "Connect your Wlan USB Stick to your Dreambox before pressing OK.\n" #~ "\n" #~ msgstr "" -#~ "Att trycka på OK aktiverar det inbyggda stödet för trådlöst LAN på din " -#~ "Dreambox.\n" -#~ "WLAN USB Stick med Zydas ZD1211B och RAlink RT73 chipset stödjs för " -#~ "detta.\n" +#~ "Att trycka på OK aktiverar det inbyggda stödet för trådlöst LAN på din Dreambox.\n" +#~ "WLAN USB Stick med Zydas ZD1211B och RAlink RT73 chipset stödjs för detta.\n" #~ "Anslut ditt WLAN USB Stick till din Dreambox före du trycker på OK.\n" #~ "\n" #~ msgid "Really delete this timer?" #~ msgstr "Verkligen ta bort denna timer?" -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really reboot " -#~ "now?" -#~ msgstr "" -#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?" +#~ msgid "Recording(s) are in progress or coming up in few seconds... really reboot now?" +#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?" -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really " -#~ "restart now?" -#~ msgstr "" -#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?" +#~ msgid "Recording(s) are in progress or coming up in few seconds... really restart now?" +#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen starta om nu?" -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really " -#~ "shutdown now?" -#~ msgstr "" -#~ "Inspelning(ar) pågår eller ska snart påbörjas... verkligen stänga av nu?" +#~ msgid "Recording(s) are in progress or coming up in few seconds... really shutdown now?" +#~ msgstr "Inspelning(ar) pågår eller ska snart påbörjas... verkligen stänga av nu?" #~ msgid "Remounting stick partition..." #~ msgstr "Ommontera stcik partition..." @@ -6299,8 +6060,7 @@ msgstr "zapped" #~ "\n" #~ "Please press OK to continue." #~ msgstr "" -#~ "Tack för att du använde guiden. Din dreambox är nu klar för att " -#~ "användas.\n" +#~ "Tack för att du använde guiden. Din dreambox är nu klar för att användas.\n" #~ "\n" #~ "Ditt lokala LANs Internet anslutning fungerar nu.\n" #~ "\n" @@ -6313,8 +6073,7 @@ msgstr "zapped" #~ "\n" #~ "Please press OK to continue." #~ msgstr "" -#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att " -#~ "användas.\n" +#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att användas.\n" #~ "\n" #~ "Ditt trådlösa Internet anslutning fungerar nu.\n" #~ "\n" @@ -6324,32 +6083,17 @@ msgstr "zapped" #~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n" #~ "Please press OK to start using your Dreambox." #~ msgstr "" -#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att " -#~ "användas.\n" +#~ "Tack för att du använde guiden. Din Dreambox är nu klar för att användas.\n" #~ "Vänligen tryck OK för att börja använda din Dreambox." -#~ msgid "" -#~ "The .NFI Image flasher USB stick is now ready to use. Please download an ." -#~ "NFI image file from the feed server and save it on the stick. Then reboot " -#~ "and hold the 'Down' key on the front panel to boot the .NFI flasher from " -#~ "the stick!" -#~ msgstr "" -#~ ".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda " -#~ "ner .NFI image fil från feed server och spara på stickan. Efter det " -#~ "starta om och håll 'Ner' knappen på fronten intryckt för att starta .NFI " -#~ "flasher från stickan!" +#~ msgid "The .NFI Image flasher USB stick is now ready to use. Please download an .NFI image file from the feed server and save it on the stick. Then reboot and hold the 'Down' key on the front panel to boot the .NFI flasher from the stick!" +#~ msgstr ".NFI Image flasher USB stick är nu klar för att användas. Vänligen ladda ner .NFI image fil från feed server och spara på stickan. Efter det starta om och håll 'Ner' knappen på fronten intryckt för att starta .NFI flasher från stickan!" #~ msgid "Title:" #~ msgstr "Titel:" -#~ msgid "" -#~ "To make sure you intend to do this, please remove the target USB stick " -#~ "now and stick it back in upon prompt. Press OK when you have taken the " -#~ "stick out." -#~ msgstr "" -#~ "För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål " -#~ "USB stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har " -#~ "tagit ut stickan." +#~ msgid "To make sure you intend to do this, please remove the target USB stick now and stick it back in upon prompt. Press OK when you have taken the stick out." +#~ msgstr "För att säkerställa att du verkligen vill göra detta, vänligen ta ut mål USB stickan nu och sätt tillbaka den vid begäran. Tryck OK när du har tagit ut stickan." #~ msgid "Unicable" #~ msgstr "Unicable" @@ -6372,15 +6116,13 @@ msgstr "zapped" #~ msgid "" #~ "Welcome.\n" #~ "\n" -#~ "If you want to connect your Dreambox to the Internet, this wizard will " -#~ "guide you through the basic network setup of your Dreambox.\n" +#~ "If you want to connect your Dreambox to the Internet, this wizard will guide you through the basic network setup of your Dreambox.\n" #~ "\n" #~ "Press the OK button on your remote control to move to the next step." #~ msgstr "" #~ "Välkommen.\n" #~ "\n" -#~ "Om du vill ansluta din Dreambox till Internet, denna guide kommer hjälpa " -#~ "dig med grundinställningarna av nätverket i din Dreambox.\n" +#~ "Om du vill ansluta din Dreambox till Internet, denna guide kommer hjälpa dig med grundinställningarna av nätverket i din Dreambox.\n" #~ "\n" #~ "Tryck OK på din fjärrkontroll för att gå till nästa steg." diff --git a/skin.py b/skin.py old mode 100644 new mode 100755 index 5b8ce65..064fd21 --- a/skin.py +++ b/skin.py @@ -148,6 +148,8 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1) guiObject.setFont(parseFont(value, scale)) elif attrib == 'zPosition': guiObject.setZPosition(int(value)) + elif attrib == 'itemHeight': + guiObject.setItemHeight(int(value)) elif attrib in ("pixmap", "backgroundPixmap", "selectionPixmap"): ptr = loadPixmap(value, desktop) # this should already have been filename-resolved. if attrib == "pixmap":