From d732b430ccc1d1a78e666f16553b2e3c5dd131a8 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 16 Nov 2008 13:12:56 +0100 Subject: work on asynchron pic loading... to get rid of spinning wheels --- lib/gdi/picexif.cpp | 14 +- lib/gdi/picexif.h | 11 +- lib/gdi/picload.cpp | 1028 ++++++++++++++++++++----------------- lib/gdi/picload.h | 99 +++- lib/python/Components/AVSwitch.py | 15 + lib/python/enigma_python.i | 1 + 6 files changed, 687 insertions(+), 481 deletions(-) diff --git a/lib/gdi/picexif.cpp b/lib/gdi/picexif.cpp index 844673ce..f9e8055f 100644 --- a/lib/gdi/picexif.cpp +++ b/lib/gdi/picexif.cpp @@ -75,7 +75,6 @@ Cexif::Cexif() Cexif::~Cexif() { - //ClearExif(); } void Cexif::ClearExif() @@ -89,7 +88,7 @@ void Cexif::ClearExif() } } -bool Cexif::DecodeExif(const char *filename) +bool Cexif::DecodeExif(const char *filename, int Thumb) { FILE * hFile = fopen(filename, "r"); if(!hFile) return false; @@ -98,6 +97,7 @@ bool Cexif::DecodeExif(const char *filename) m_exifinfo = new EXIFINFO; memset(m_exifinfo,0,sizeof(EXIFINFO)); freeinfo = true; + m_exifinfo->Thumnailstate = Thumb; m_szLastError[0]='\0'; ExifImageWidth = MotorolaOrder = SectionsRead=0; @@ -555,12 +555,16 @@ bool Cexif::ProcessExifDir(unsigned char * DirStart, unsigned char * OffsetBase, ProcessExifDir(SubdirStart, OffsetBase, ExifLength, m_exifinfo, LastExifRefdP); } - if (ThumbnailSize && ThumbnailOffset) + if (ThumbnailSize && ThumbnailOffset && m_exifinfo->Thumnailstate) { if (ThumbnailSize + ThumbnailOffset <= ExifLength) { - m_exifinfo->ThumbnailPointer = OffsetBase + ThumbnailOffset; - m_exifinfo->ThumbnailSize = ThumbnailSize; + if(FILE *tf = fopen(THUMBNAILTMPFILE, "w")) + { + fwrite( OffsetBase + ThumbnailOffset, ThumbnailSize, 1, tf); + fclose(tf); + m_exifinfo->Thumnailstate = 2; + } } } diff --git a/lib/gdi/picexif.h b/lib/gdi/picexif.h index cd321d7b..bdd64b2a 100644 --- a/lib/gdi/picexif.h +++ b/lib/gdi/picexif.h @@ -8,7 +8,7 @@ #define MAX_COMMENT 1000 #define MAX_SECTIONS 20 - +#define THUMBNAILTMPFILE "/tmp/.thumbcache" typedef struct tag_ExifInfo { char Version [5]; @@ -29,7 +29,7 @@ typedef struct tag_ExifInfo { float ExposureTime; float ExposureBias; float Distance; - float CCDWidth; //in milimeters + float CCDWidth; float FocalplaneXRes; float FocalplaneYRes; float FocalplaneUnits; @@ -40,9 +40,10 @@ typedef struct tag_ExifInfo { int ISOequivalent; int Process; int Orient; - unsigned char * ThumbnailPointer; - unsigned ThumbnailSize; + //unsigned char *ThumbnailPointer; + //unsigned ThumbnailSize; bool IsExif; + int Thumnailstate; } EXIFINFO; static const int BytesPerFormat[] = {0,1,1,2,4,8,1,1,2,4,8,4,8}; @@ -59,7 +60,7 @@ public: char m_szLastError[256]; Cexif(); ~Cexif(); - bool DecodeExif(const char *filename); + bool DecodeExif(const char *filename, int Thumb=0); void ClearExif(); protected: bool process_EXIF(unsigned char * CharBuf, unsigned int length); diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index 1f9bed48..2ef901f5 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -1,38 +1,38 @@ #include // must be included before Python.h because of setjmp -#include -#include "picexif.h" -#include - #include -#include -#include -#include -#include // savePNG need it - -#define JDCT_DEFAULT JDCT_IFAST +#include +#include extern "C" { #include #include -//#include "transupp.h" } -unsigned char *pic_buffer=NULL; +extern const uint32_t crc32_table[256]; + +DEFINE_REF(ePicLoad); + +static std::string getSize(const char* file) +{ + struct stat64 s; + if (stat64(file, &s) < 0) + return ""; + char tmp[20]; + snprintf(tmp, 20, "%ld kB",(long)s.st_size / 1024); + return tmp; +} -static unsigned char *conv24to32(unsigned char * orgin, int size, int background = 0) +static unsigned char *conv24to32(unsigned char *orgin, int size, unsigned char alpha = 0xFF) { int s, d; unsigned char *cr = new unsigned char[size * 4]; if (cr == NULL) { - printf("[CONV32] Error: malloc\n"); + eDebug("[Picload] Error malloc"); return(orgin); } - unsigned char alpha = 0x00; - if(background) alpha = 0xFF; - for (s = 0, d = 0 ; s < (size * 3); s += 3, d += 4 ) { cr[d] = orgin[s]; @@ -44,28 +44,27 @@ static unsigned char *conv24to32(unsigned char * orgin, int size, int background return(cr); } -static unsigned char *simple_resize(unsigned char * orgin, int ox, int oy, int dx, int dy) +static unsigned char *simple_resize(unsigned char *orgin, int ox, int oy, int dx, int dy) { unsigned char *cr, *p, *l; int i, j, k, ip; - cr = new unsigned char[dx * dy * 4]; + cr = new unsigned char[dx * dy * 3]; if (cr == NULL) { - printf("[RESIZE] Error: malloc\n"); + eDebug("[Picload] Error malloc"); return(orgin); } l = cr; - for (j = 0; j < dy; j++,l += dx * 4) + for (j = 0; j < dy; j++,l += dx * 3) { - p = orgin + (j * oy / dy * ox * 4); - for (i = 0, k = 0; i < dx; i++, k += 4) + p = orgin + (j * oy / dy * ox * 3); + for (i = 0, k = 0; i < dx; i++, k += 3) { - ip = i * ox / dx * 4; + ip = i * ox / dx * 3; l[k] = p[ip]; l[k+1] = p[ip + 1]; l[k+2] = p[ip + 2]; - l[k+3] = p[ip + 3]; } } delete [] orgin; @@ -76,18 +75,18 @@ static unsigned char *color_resize(unsigned char * orgin, int ox, int oy, int dx { unsigned char *cr, *p, *q; int i, j, k, l, xa, xb, ya, yb; - int sq, r, g, b, a; - cr = new unsigned char[dx * dy * 4]; + int sq, r, g, b; + cr = new unsigned char[dx * dy * 3]; if (cr == NULL) { - printf("[RESIZE] Error: malloc\n"); + eDebug("[Picload] Error malloc"); return(orgin); } p = cr; for (j = 0; j < dy; j++) { - for (i = 0; i < dx; i++, p += 4) + for (i = 0; i < dx; i++, p += 3) { xa = i * ox / dx; ya = j * oy / dy; @@ -97,269 +96,21 @@ static unsigned char *color_resize(unsigned char * orgin, int ox, int oy, int dx yb = (j + 1) * oy / dy; if (yb >= oy) yb = oy - 1; - for (l = ya, r = 0, g = 0, b = 0, a = 0, sq = 0; l <= yb; l++) + for (l = ya, r = 0, g = 0, b = 0, sq = 0; l <= yb; l++) { - q = orgin + ((l * ox + xa) * 4); - for (k = xa; k <= xb; k++, q += 4, sq++) + q = orgin + ((l * ox + xa) * 3); + for (k = xa; k <= xb; k++, q += 3, sq++) { - r += q[0]; g += q[1]; b += q[2]; a += q[3]; + r += q[0]; g += q[1]; b += q[2]; } } - p[0] = r / sq; p[1] = g / sq; p[2] = b / sq; p[3] = a / sq; + p[0] = r / sq; p[1] = g / sq; p[2] = b / sq; } } delete [] orgin; return(cr); } -//------------------------------------------------------------------- - -struct r_jpeg_error_mgr -{ - struct jpeg_error_mgr pub; - jmp_buf envbuffer; -}; - -void jpeg_cb_error_exit(j_common_ptr cinfo) -{ - struct r_jpeg_error_mgr *mptr; - mptr = (struct r_jpeg_error_mgr *) cinfo->err; - (*cinfo->err->output_message) (cinfo); - longjmp(mptr->envbuffer, 1); -} - -static int jpeg_save(unsigned char *image_buffer, const char * filename, int quality, int image_height, int image_width) -{ - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - FILE * outfile; /* target file */ - JSAMPROW row_pointer[1];/* pointer to JSAMPLE row[s] */ - int row_stride; /* physical row width in image buffer */ - - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - - if ((outfile = fopen(filename, "wb")) == NULL) - { - eDebug("[JPEG] can't open %s", filename); - return -1; - } - jpeg_stdio_dest(&cinfo, outfile); - - cinfo.image_width = image_width; - cinfo.image_height = image_height; - cinfo.input_components = 3; - cinfo.in_color_space = JCS_RGB; - jpeg_set_defaults(&cinfo); - jpeg_set_quality(&cinfo, quality, TRUE ); - jpeg_start_compress(&cinfo, TRUE); - row_stride = image_width * 3; - while (cinfo.next_scanline < cinfo.image_height) - { - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - jpeg_finish_compress(&cinfo); - fclose(outfile); - jpeg_destroy_compress(&cinfo); - return 0; -} - -/* Expanded data source object for memory buffer input */ -typedef struct -{ - struct jpeg_source_mgr pub; /* public fields */ - FILE *infile; /* source stream */ - JOCTET *buffer; /* start of buffer */ - boolean start_of_file; /* have we gotten any data yet? */ -} mem_source_mgr; - -typedef mem_source_mgr *mem_src_ptr; - -static void init_source (j_decompress_ptr cinfo) -{ - mem_src_ptr src = (mem_src_ptr) cinfo->src; - src->start_of_file = TRUE; -} - -static boolean fill_input_buffer (j_decompress_ptr cinfo) -{ - /* no-op */ (void)cinfo; - return TRUE; - } - -static void skip_input_data (j_decompress_ptr cinfo, long num_bytes) -{ - mem_src_ptr src = (mem_src_ptr) cinfo->src; - - if (num_bytes > 0) - { - src->pub.next_input_byte += (size_t) num_bytes; - src->pub.bytes_in_buffer -= (size_t) num_bytes; - } -} - -static void term_source (j_decompress_ptr cinfo) -{ - /* no-op */ (void)cinfo; -} - -static void jpeg_memory_src (j_decompress_ptr cinfo, unsigned char *inbfr, int len) -{ - mem_src_ptr src; - if (cinfo->src == NULL) - { - cinfo->src = (struct jpeg_source_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, (size_t)sizeof(mem_source_mgr)); - src = (mem_src_ptr) cinfo->src; - src->buffer = (JOCTET *) inbfr; - } - src = (mem_src_ptr) cinfo->src; - src->pub.init_source = init_source; - src->pub.fill_input_buffer = fill_input_buffer; - src->pub.skip_input_data = skip_input_data; - src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ - src->pub.term_source = term_source; - src->infile = 0L; - src->pub.bytes_in_buffer = len; /* sets to entire file len */ - src->pub.next_input_byte = (JOCTET *)inbfr; /* at start of buffer */ -} - -static int jpeg_load_thumb(const char *filename, int *x, int *y) -{ - struct jpeg_decompress_struct cinfo; - struct jpeg_decompress_struct *ciptr = &cinfo; - struct r_jpeg_error_mgr emgr; - FILE *fh; - - if (!(fh = fopen(filename, "rb"))) - return 0; - - ciptr->err = jpeg_std_error(&emgr.pub); - emgr.pub.error_exit = jpeg_cb_error_exit; - if (setjmp(emgr.envbuffer) == 1) - { - jpeg_destroy_decompress(ciptr); - fclose(fh); - return 0; - } - - jpeg_create_decompress(ciptr); - jpeg_stdio_src(ciptr, fh); - - jpeg_save_markers (ciptr, JPEG_APP0 + 1, 0xffff); - - jpeg_read_header(ciptr, TRUE); - - struct jpeg_marker_struct *m = cinfo.marker_list; - - unsigned char *thumb_buf = NULL; - size_t bufsize; - - if ( m ) - { - unsigned char *p_data = m->data; - while ( p_data < m->data+m->data_length ) - { - if ( p_data[0] == 0xFF && p_data[1] == 0xD8 ) - { - bufsize = (size_t) m->data_length - (size_t) (p_data-m->data); - thumb_buf = new unsigned char[bufsize]; - bufsize = 0; - do { - thumb_buf[bufsize++] = *p_data; - } while ( !(*p_data++ == 0xFF && *p_data == 0xD9) && p_data < m->data+m->data_length ); - thumb_buf[bufsize++] = *p_data; - } - p_data++; - } - } - - if ( thumb_buf != NULL ) - { - jpeg_create_decompress(ciptr); - jpeg_memory_src(ciptr, thumb_buf, bufsize-2); - jpeg_read_header(ciptr, TRUE); - } - else - eDebug("no exif thumbnail found! loading actual image instead"); - - ciptr->out_color_space = JCS_RGB; - ciptr->scale_denom = 1; - - jpeg_start_decompress(ciptr); - - *x=ciptr->output_width; - *y=ciptr->output_height; - - if(ciptr->output_components == 3) - { - JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components); - pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components]; - unsigned char *bp = pic_buffer; - - while (ciptr->output_scanline < ciptr->output_height) - { - jpeg_read_scanlines(ciptr, &lb, 1); - memcpy(bp, lb, ciptr->output_width * ciptr->output_components); - bp += ciptr->output_width * ciptr->output_components; - } - } - jpeg_finish_decompress(ciptr); - jpeg_destroy_decompress(ciptr); - fclose(fh); - return 1; -} - -static int jpeg_load(const char *filename, int *x, int *y) -{ - struct jpeg_decompress_struct cinfo; - struct jpeg_decompress_struct *ciptr = &cinfo; - struct r_jpeg_error_mgr emgr; - FILE *fh; - - if (!(fh = fopen(filename, "rb"))) - return 0; - - ciptr->err = jpeg_std_error(&emgr.pub); - emgr.pub.error_exit = jpeg_cb_error_exit; - if (setjmp(emgr.envbuffer) == 1) - { - jpeg_destroy_decompress(ciptr); - fclose(fh); - return 0; - } - - jpeg_create_decompress(ciptr); - jpeg_stdio_src(ciptr, fh); - jpeg_read_header(ciptr, TRUE); - ciptr->out_color_space = JCS_RGB; - ciptr->scale_denom = 1; - - jpeg_start_decompress(ciptr); - - *x=ciptr->output_width; - *y=ciptr->output_height; - - if(ciptr->output_components == 3) - { - JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components); - pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components]; - unsigned char *bp = pic_buffer; - - while (ciptr->output_scanline < ciptr->output_height) - { - jpeg_read_scanlines(ciptr, &lb, 1); - memcpy(bp, lb, ciptr->output_width * ciptr->output_components); - bp += ciptr->output_width * ciptr->output_components; - } - } - jpeg_finish_decompress(ciptr); - jpeg_destroy_decompress(ciptr); - fclose(fh); - return 1; -} - //--------------------------------------------------------------------------------------------- #define BMP_TORASTER_OFFSET 10 @@ -389,26 +140,26 @@ static void fetch_pallete(int fd, struct color pallete[], int count) } } -static int bmp_load(const char *filename, int *x, int *y) +static unsigned char *bmp_load(const char *file, int *x, int *y) { unsigned char buff[4]; struct color pallete[256]; - int fd = open(filename, O_RDONLY); - if (fd == -1) return 0; - if (lseek(fd, BMP_SIZE_OFFSET, SEEK_SET) == -1) return 0; + int fd = open(file, O_RDONLY); + if (fd == -1) return NULL; + if (lseek(fd, BMP_SIZE_OFFSET, SEEK_SET) == -1) return NULL; read(fd, buff, 4); *x = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24); read(fd, buff, 4); *y = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24); - if (lseek(fd, BMP_TORASTER_OFFSET, SEEK_SET) == -1) return 0; + if (lseek(fd, BMP_TORASTER_OFFSET, SEEK_SET) == -1) return NULL; read(fd, buff, 4); int raster = buff[0] + (buff[1] << 8) + (buff[2] << 16) + (buff[3] << 24); - if (lseek(fd, BMP_BPP_OFFSET, SEEK_SET) == -1) return 0; + if (lseek(fd, BMP_BPP_OFFSET, SEEK_SET) == -1) return NULL; read(fd, buff, 2); int bpp = buff[0] + (buff[1] << 8); - pic_buffer = new unsigned char[(*x) * (*y) * 3]; + unsigned char *pic_buffer = new unsigned char[(*x) * (*y) * 3]; unsigned char *wr_buffer = pic_buffer + (*x) * ((*y) - 1) * 3; switch (bpp) @@ -420,7 +171,7 @@ static int bmp_load(const char *filename, int *x, int *y) lseek(fd, raster, SEEK_SET); unsigned char * tbuffer = new unsigned char[*x / 2 + 1]; if (tbuffer == NULL) - return 0; + return NULL; for (int i = 0; i < *y; i++) { read(fd, tbuffer, (*x) / 2 + *x % 2); @@ -456,7 +207,7 @@ static int bmp_load(const char *filename, int *x, int *y) lseek(fd, raster, SEEK_SET); unsigned char * tbuffer = new unsigned char[*x]; if (tbuffer == NULL) - return 0; + return NULL; for (int i = 0; i < *y; i++) { read(fd, tbuffer, *x); @@ -492,18 +243,18 @@ static int bmp_load(const char *filename, int *x, int *y) break; } default: - return 0; + return NULL; } close(fd); - return 1; + return(pic_buffer); } -//--------------------------------------------------------------------------------------------- -static int png_load(const char *filename, int *x, int *y) -{ - static const png_color_16 my_background = {0, 0, 0, 0, 0}; +//--------------------------------------------------------------------- +static unsigned char *png_load(const char *file, int *ox, int *oy) +{ + //static const png_color_16 my_background = {0, 0, 0, 0, 0}; png_structp png_ptr; png_infop info_ptr; png_uint_32 width, height; @@ -513,17 +264,17 @@ static int png_load(const char *filename, int *x, int *y) png_byte * fbptr; FILE * fh; - if (!(fh = fopen(filename, "rb"))) return 0; + if (!(fh = fopen(file, "rb"))) return NULL; png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) - return 0; + return NULL; info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); fclose(fh); - return 0; + return NULL; } if (setjmp(png_ptr->jmpbuf)) @@ -564,9 +315,9 @@ static int png_load(const char *filename, int *x, int *y) return 0; } - pic_buffer = new unsigned char[width * height * bpp]; - *x=width; - *y=height; + unsigned char *pic_buffer = new unsigned char[width * height * bpp]; + *ox=width; + *oy=height; for(pass = 0; pass < number_passes; pass++) { @@ -577,9 +328,113 @@ static int png_load(const char *filename, int *x, int *y) png_read_end(png_ptr, info_ptr); png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); fclose(fh); - if (bpp == 3) - pic_buffer = conv24to32(pic_buffer, width * height, 1); - return 1; + return(pic_buffer); +} + +//------------------------------------------------------------------- + +struct r_jpeg_error_mgr +{ + struct jpeg_error_mgr pub; + jmp_buf envbuffer; +}; + +void jpeg_cb_error_exit(j_common_ptr cinfo) +{ + struct r_jpeg_error_mgr *mptr; + mptr = (struct r_jpeg_error_mgr *) cinfo->err; + (*cinfo->err->output_message) (cinfo); + longjmp(mptr->envbuffer, 1); +} + +static unsigned char *jpeg_load(const char *file, int *ox, int *oy) +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_decompress_struct *ciptr = &cinfo; + struct r_jpeg_error_mgr emgr; + FILE *fh; + unsigned char *pic_buffer=NULL; + + if (!(fh = fopen(file, "rb"))) + return NULL; + + ciptr->err = jpeg_std_error(&emgr.pub); + emgr.pub.error_exit = jpeg_cb_error_exit; + if (setjmp(emgr.envbuffer) == 1) + { + jpeg_destroy_decompress(ciptr); + fclose(fh); + return NULL; + } + + jpeg_create_decompress(ciptr); + jpeg_stdio_src(ciptr, fh); + jpeg_read_header(ciptr, TRUE); + ciptr->out_color_space = JCS_RGB; + ciptr->scale_denom = 1; + + jpeg_start_decompress(ciptr); + + *ox=ciptr->output_width; + *oy=ciptr->output_height; + + if(ciptr->output_components == 3) + { + JSAMPLE *lb = (JSAMPLE *)(*ciptr->mem->alloc_small)((j_common_ptr) ciptr, JPOOL_PERMANENT, ciptr->output_width * ciptr->output_components); + pic_buffer = new unsigned char[ciptr->output_height * ciptr->output_width * ciptr->output_components]; + unsigned char *bp = pic_buffer; + + while (ciptr->output_scanline < ciptr->output_height) + { + jpeg_read_scanlines(ciptr, &lb, 1); + memcpy(bp, lb, ciptr->output_width * ciptr->output_components); + bp += ciptr->output_width * ciptr->output_components; + } + } + jpeg_finish_decompress(ciptr); + jpeg_destroy_decompress(ciptr); + fclose(fh); + return(pic_buffer); +} + + +static int jpeg_save(const char * filename, int ox, int oy, unsigned char *pic_buffer) +{ + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + FILE * outfile; + JSAMPROW row_pointer[1]; + int row_stride; + + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + + if ((outfile = fopen(filename, "wb")) == NULL) + { + eDebug("[Picload] jpeg can't open %s", filename); + return 1; + } + eDebug("[Picload] save Thumbnail... %s",filename); + + jpeg_stdio_dest(&cinfo, outfile); + + cinfo.image_width = ox; + cinfo.image_height = oy; + cinfo.input_components = 3; + cinfo.in_color_space = JCS_RGB; + jpeg_set_defaults(&cinfo); + jpeg_set_quality(&cinfo, 70, TRUE ); + jpeg_start_compress(&cinfo, TRUE); + row_stride = ox * 3; + while (cinfo.next_scanline < cinfo.image_height) + { + row_pointer[0] = & pic_buffer[cinfo.next_scanline * row_stride]; + (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + jpeg_finish_compress(&cinfo); + fclose(outfile); + jpeg_destroy_compress(&cinfo); + return 0; } //------------------------------------------------------------------- @@ -597,8 +452,9 @@ inline void m_rend_gif_decodecolormap(unsigned char *cmb, unsigned char *rgbb, C } } -static int gif_load(const char *filename, int *x, int *y) +static unsigned char *gif_load(const char *file, int *ox, int *oy) { + unsigned char *pic_buffer = NULL; int px, py, i, j, ibxs; unsigned char *fbptr; unsigned char *lb=NULL; @@ -610,9 +466,9 @@ static int gif_load(const char *filename, int *x, int *y) int cmaps; int extcode; - gft = DGifOpenFileName(filename); + gft = DGifOpenFileName(file); if (gft == NULL) - return 0; + return NULL; do { if (DGifGetRecordType(gft, &rt) == GIF_ERROR) @@ -622,8 +478,8 @@ static int gif_load(const char *filename, int *x, int *y) case IMAGE_DESC_RECORD_TYPE: if (DGifGetImageDesc(gft) == GIF_ERROR) goto ERROR_R; - *x = px = gft->Image.Width; - *y = py = gft->Image.Height; + *ox = px = gft->Image.Width; + *oy = py = gft->Image.Height; pic_buffer = new unsigned char[px * py * 3]; lb = (unsigned char *)malloc(px * 3); slb = (unsigned char *) malloc(px); @@ -685,239 +541,477 @@ static int gif_load(const char *filename, int *x, int *y) while (rt != TERMINATE_RECORD_TYPE); DGifCloseFile(gft); - return 1; + return(pic_buffer); ERROR_R: - eDebug("[GIF] Error"); + eDebug("[Picload] "); if (lb) free(lb); if (slb) free(slb); DGifCloseFile(gft); - return 0; + return NULL; } //--------------------------------------------------------------------------------------------- -PyObject *getExif(const char *filename) +ePicLoad::ePicLoad() + :msg_thread(this,1), msg_main(eApp,1) { - ePyObject list; - Cexif exif; - if(exif.DecodeExif(filename)) + CONNECT(msg_thread.recv_msg, ePicLoad::gotMessage); + CONNECT(msg_main.recv_msg, ePicLoad::gotMessage); + + threadrunning = false; + m_filepara = NULL; + m_conf.max_x = 0; + m_conf.max_y = 0; + m_conf.aspect_ratio = 1.066400; //4:3 + m_conf.usecache = false; + m_conf.resizetype = 1; + memset(m_conf.background,0x00,sizeof(m_conf.background)); + m_conf.thumbnailsize = 180; +} + +ePicLoad::~ePicLoad() +{ + msg_thread.send(Message(Message::quit)); + kill(); + + if(m_filepara != NULL) + delete m_filepara; +} + + +void ePicLoad::thread() +{ + hasStarted(); + nice(4); + runLoop(); +} + +void ePicLoad::decodePic() +{ + eDebug("[Picload] decode picture... %s",m_filepara->file); + + switch(m_filepara->id) + { + case F_PNG: m_filepara->pic_buffer = png_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_JPEG: m_filepara->pic_buffer = jpeg_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_BMP: m_filepara->pic_buffer = bmp_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_GIF: m_filepara->pic_buffer = gif_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + } + + if(m_filepara->pic_buffer != NULL) + { + resizePic(); + } +} + +void ePicLoad::decodeThumb() +{ + eDebug("[Picload] get Thumbnail... %s",m_filepara->file); + + bool exif_thumbnail = false; + bool cachefile_found = false; + std::string cachefile = ""; + std::string cachedir = "/.Thumbnails"; + + if(m_filepara->id == F_JPEG) { - if(exif.m_exifinfo->IsExif) + Cexif *exif = new Cexif; + if(exif->DecodeExif(m_filepara->file, 1)) { - int pos=0; - char tmp[256]; - list = PyList_New(22); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->Version)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->CameraMake)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->CameraModel)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->DateTime)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->Comments)); - PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d x %d", exif.m_exifinfo->Width, exif.m_exifinfo->Height)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->Orientation)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->MeteringMode)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->ExposureProgram)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->LightSource)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->FlashUsed)); - PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d", exif.m_exifinfo->CompressionLevel)); - PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d", exif.m_exifinfo->ISOequivalent)); - sprintf(tmp, "%.2f", exif.m_exifinfo->Xresolution); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.2f", exif.m_exifinfo->Yresolution); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - PyList_SET_ITEM(list, pos++, PyString_FromString(exif.m_exifinfo->ResolutionUnit)); - sprintf(tmp, "%.2f", exif.m_exifinfo->Brightness); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.5f sec.", exif.m_exifinfo->ExposureTime); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.5f", exif.m_exifinfo->ExposureBias); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.5f", exif.m_exifinfo->Distance); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.5f", exif.m_exifinfo->CCDWidth); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); - sprintf(tmp, "%.2f", exif.m_exifinfo->ApertureFNumber); - PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + if(exif->m_exifinfo->IsExif) + { + if(exif->m_exifinfo->Thumnailstate==2) + { + m_filepara->file = strdup(THUMBNAILTMPFILE); + exif_thumbnail = true; + eDebug("[Picload] Exif Thumbnail found"); + } + m_filepara->addExifInfo(exif->m_exifinfo->CameraMake); + m_filepara->addExifInfo(exif->m_exifinfo->CameraModel); + m_filepara->addExifInfo(exif->m_exifinfo->DateTime); + char buf[20]; + snprintf(buf, 20, "%d x %d", exif->m_exifinfo->Width, exif->m_exifinfo->Height); + m_filepara->addExifInfo(buf); + } + exif->ClearExif(); } - else + delete exif; + } + + if((! exif_thumbnail) && m_conf.usecache) + { + if(FILE *f=fopen(m_filepara->file, "rb")) { - list = PyList_New(1); - PyList_SET_ITEM(list, 0, PyString_FromString(exif.m_szLastError)); + int c; + int count = 1024*100; + unsigned long crc32 = 0; + char crcstr[9];*crcstr=0; + + while ((c=getc(f))!=EOF) + { + crc32 = crc32_table[((crc32) ^ (c)) & 0xFF] ^ ((crc32) >> 8); + if(--count < 0) break; + } + + fclose(f); + crc32 = ~crc32; + sprintf(crcstr, "%08lX", crc32); + + cachedir = m_filepara->file; + unsigned int pos = cachedir.find_last_of("/"); + if (pos != std::string::npos) + cachedir = cachedir.substr(0, pos) + "/.Thumbnails"; + + cachefile = cachedir + std::string("/pc_") + crcstr; + if(!access(cachefile.c_str(), R_OK)) + { + cachefile_found = true; + m_filepara->file = strdup(cachefile.c_str()); + m_filepara->id = F_JPEG; + eDebug("[Picload] Cache File found"); + } } - exif.ClearExif(); } - else + + switch(m_filepara->id) { - list = PyList_New(1); - PyList_SET_ITEM(list, 0, PyString_FromString(exif.m_szLastError)); + case F_PNG: m_filepara->pic_buffer = png_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_JPEG: m_filepara->pic_buffer = jpeg_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_BMP: m_filepara->pic_buffer = bmp_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; + case F_GIF: m_filepara->pic_buffer = gif_load(m_filepara->file, &m_filepara->ox, &m_filepara->oy); break; } + + if(exif_thumbnail) + ::unlink(THUMBNAILTMPFILE); + + if(m_filepara->pic_buffer != NULL) + { + //save cachefile + if(m_conf.usecache && (! exif_thumbnail) && (! cachefile_found)) + { + if(access(cachedir.c_str(), R_OK)) + ::mkdir(cachedir.c_str(), 0755); + + //resize for Thumbnail + int imx, imy; + if (m_filepara->ox <= m_filepara->oy) + { + imy = m_conf.thumbnailsize; + imx = (int)( (m_conf.thumbnailsize * ((double)m_filepara->ox)) / ((double)m_filepara->oy) ); + } + else + { + imx = m_conf.thumbnailsize; + imy = (int)( (m_conf.thumbnailsize * ((double)m_filepara->oy)) / ((double)m_filepara->ox) ); + } - return list ? (PyObject*)list : (PyObject*)PyList_New(0); -} + m_filepara->pic_buffer = color_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy); + m_filepara->ox = imx; + m_filepara->oy = imy; -//--------------------------------------------------------------------------------------------- -enum {F_NONE, F_PNG, F_JPEG, F_BMP, F_GIF}; + if(jpeg_save(cachefile.c_str(), m_filepara->ox, m_filepara->oy, m_filepara->pic_buffer)) + eDebug("[Picload] error saving cachefile"); + } -static int pic_id(const char *name) + resizePic(); + } +} + +void ePicLoad::resizePic() { - unsigned char id[10]; - int fd = open(name, O_RDONLY); - if (fd == -1) - return F_NONE; - read(fd, id, 10); - close(fd); + int imx, imy; + + if((m_conf.aspect_ratio * m_filepara->oy * m_filepara->max_x / m_filepara->ox) <= m_filepara->max_y) + { + imx = m_filepara->max_x; + imy = (int)(m_conf.aspect_ratio * m_filepara->oy * m_filepara->max_x / m_filepara->ox); + } + else + { + imx = (int)((1.0/m_conf.aspect_ratio) * m_filepara->ox * m_filepara->max_y / m_filepara->oy); + imy = m_filepara->max_y; + } + + if(m_conf.resizetype) + m_filepara->pic_buffer = color_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy); + else + m_filepara->pic_buffer = simple_resize(m_filepara->pic_buffer, m_filepara->ox, m_filepara->oy, imx, imy); - if(id[1] == 'P' && id[2] == 'N' && id[3] == 'G') - return F_PNG; - else if(id[6] == 'J' && id[7] == 'F' && id[8] == 'I' && id[9] == 'F') - return F_JPEG; - else if(id[0] == 0xff && id[1] == 0xd8 && id[2] == 0xff) - return F_JPEG; - else if(id[0] == 'B' && id[1] == 'M' ) - return F_BMP; - else if(id[0] == 'G' && id[1] == 'I' && id[2] == 'F') - return F_GIF; - return F_NONE; + m_filepara->ox = imx; + m_filepara->oy = imy; } -int loadPic(ePtr &result, std::string filename, int w, int h, int aspect, int resize_mode, int rotate, int background, std::string cachefile, int thumbnail) +void ePicLoad::gotMessage(const Message &msg) { - result = 0; - int ox=0, oy=0, imx, imy; - pic_buffer=NULL; - bool cache=false; + switch (msg.type) + { + case Message::decode_Pic: + decodePic(); + msg_main.send(Message(Message::decode_finished)); + break; + case Message::decode_Thumb: + decodeThumb(); + msg_main.send(Message(Message::decode_finished)); + break; + case Message::quit: // called from decode thread + eDebug("[Picload] decode thread ... got quit msg"); + quit(0); + break; + case Message::decode_finished: // called from main thread + //eDebug("[Picload] decode finished... %s", m_filepara->file); + threadrunning=false; + if(m_filepara->callback) + { + PictureData(m_filepara->picinfo.c_str()); + } + else + { + if(m_filepara != NULL) + { + delete m_filepara; + m_filepara = NULL; + } + } + break; + default: + eDebug("unhandled thread message"); + } +} - if(cachefile.length()) +int ePicLoad::startThread(int what, const char *file, int x, int y) +{ + if(threadrunning && m_filepara != NULL) + { + eDebug("[Picload] thread running"); + m_filepara->callback = false; + return 1; + } + + if(m_filepara != NULL) + { + delete m_filepara; + m_filepara = NULL; + } + + int file_id = -1; + unsigned char id[10]; + int fd = ::open(file, O_RDONLY); + if (fd == -1) return 1; + ::read(fd, id, 10); + ::close(fd); + + if(id[1] == 'P' && id[2] == 'N' && id[3] == 'G') file_id = F_PNG; + else if(id[6] == 'J' && id[7] == 'F' && id[8] == 'I' && id[9] == 'F') file_id = F_JPEG; + else if(id[0] == 0xff && id[1] == 0xd8 && id[2] == 0xff) file_id = F_JPEG; + else if(id[0] == 'B' && id[1] == 'M' ) file_id = F_BMP; + else if(id[0] == 'G' && id[1] == 'I' && id[2] == 'F') file_id = F_GIF; + + if(file_id < 0) { - if(png_load(cachefile.c_str(), &ox, &oy)) - eDebug("[CACHEPIC] x-size=%d, y-size=%d", ox, oy); + eDebug("[Picload] "); + return 1; } - if(pic_buffer==NULL) + m_filepara = new Cfilepara(file, file_id, getSize(file)); + x > 0 ? m_filepara->max_x = x : m_filepara->max_x = m_conf.max_x; + y > 0 ? m_filepara->max_y = y : m_filepara->max_y = m_conf.max_y; + + if(m_filepara->max_x <= 0 || m_filepara->max_y <= 0) { - switch(pic_id(filename.c_str())) - { - case F_PNG: png_load(filename.c_str(), &ox, &oy);break; - case F_JPEG: { - if (thumbnail) - jpeg_load_thumb(filename.c_str(), &ox, &oy); - else - jpeg_load(filename.c_str(), &ox, &oy); - pic_buffer = conv24to32(pic_buffer, ox*oy, 1); - break; } - case F_BMP: bmp_load(filename.c_str(), &ox, &oy);pic_buffer = conv24to32(pic_buffer, ox*oy, 1); break; - case F_GIF: gif_load(filename.c_str(), &ox, &oy);pic_buffer = conv24to32(pic_buffer, ox*oy, 1); break; - default: - eDebug("[PIC] "); - return 0; - } + delete m_filepara; + m_filepara = NULL; + eDebug("[Picload] "); + return 1; + } - if(pic_buffer==NULL) - return 0; + threadrunning=true; + if(what==1) + msg_thread.send(Message(Message::decode_Pic)); + else + msg_thread.send(Message(Message::decode_Thumb)); + run(); + return 0; +} - double aspect_ratio; - switch(aspect) - { - case 1: aspect_ratio = 1.778 / ((double)720/576); break; //16:9 - case 2: aspect_ratio = 1.600 / ((double)720/576); break; //16:10 - case 3: aspect_ratio = 1.250 / ((double)720/576); break; //5:4 - default: aspect_ratio = 1.333 / ((double)720/576); //4:3 - } +RESULT ePicLoad::startDecode(const char *file, int x, int y) +{ + return startThread(1, file, x, y); +} + +RESULT ePicLoad::getThumbnail(const char *file, int x, int y) +{ + return startThread(0, file, x, y); +} - if((aspect_ratio * oy * w / ox) <= h) +RESULT ePicLoad::setPara(PyObject *val) +{ + if (!PyList_Check(val)) + return 0; + if (PyList_Size(val) < 6) + return 0; + + m_conf.max_x = PyInt_AsLong( PyList_GET_ITEM(val, 0)); + m_conf.max_y = PyInt_AsLong( PyList_GET_ITEM(val, 1)); + m_conf.aspect_ratio = PyFloat_AsDouble( PyList_GET_ITEM(val, 2)); + m_conf.usecache = PyInt_AsLong( PyList_GET_ITEM(val, 3)); + m_conf.resizetype = PyInt_AsLong( PyList_GET_ITEM(val, 4)); + const char *bg_str = PyString_AsString( PyList_GET_ITEM(val, 5)); + + if(bg_str[0] == '#' && strlen(bg_str)==9) + { + int bg = strtoul(bg_str+1, NULL, 16); + m_conf.background[0] = bg&0xFF; //BB + m_conf.background[1] = (bg>>8)&0xFF; //GG + m_conf.background[2] = (bg>>16)&0xFF; //RR + m_conf.background[3] = bg>>24; //AA + } + + eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]); + return 1; +} + +PyObject *ePicLoad::getInfo(const char *filename) +{ + ePyObject list; + + Cexif *exif = new Cexif; + if(exif->DecodeExif(filename)) + { + if(exif->m_exifinfo->IsExif) { - imx = w; - imy = (int)(aspect_ratio*oy*w/ox); + char tmp[256]; + int pos=0; + list = PyList_New(23); + PyList_SET_ITEM(list, pos++, PyString_FromString(filename)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->Version)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->CameraMake)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->CameraModel)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->DateTime)); + PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d x %d", exif->m_exifinfo->Width, exif->m_exifinfo->Height)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->FlashUsed)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->Orientation)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->Comments)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->MeteringMode)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->ExposureProgram)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->LightSource)); + PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d", exif->m_exifinfo->CompressionLevel)); + PyList_SET_ITEM(list, pos++, PyString_FromFormat("%d", exif->m_exifinfo->ISOequivalent)); + sprintf(tmp, "%.2f", exif->m_exifinfo->Xresolution); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.2f", exif->m_exifinfo->Yresolution); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + PyList_SET_ITEM(list, pos++, PyString_FromString(exif->m_exifinfo->ResolutionUnit)); + sprintf(tmp, "%.2f", exif->m_exifinfo->Brightness); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.5f sec.", exif->m_exifinfo->ExposureTime); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.5f", exif->m_exifinfo->ExposureBias); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.5f", exif->m_exifinfo->Distance); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.5f", exif->m_exifinfo->CCDWidth); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); + sprintf(tmp, "%.2f", exif->m_exifinfo->ApertureFNumber); + PyList_SET_ITEM(list, pos++, PyString_FromString(tmp)); } else { - imx = (int)((1.0/aspect_ratio)*ox*h/oy); - imy = h; + list = PyList_New(2); + PyList_SET_ITEM(list, 0, PyString_FromString(filename)); + PyList_SET_ITEM(list, 1, PyString_FromString(exif->m_szLastError)); } + exif->ClearExif(); + } + else + { + list = PyList_New(2); + PyList_SET_ITEM(list, 0, PyString_FromString(filename)); + PyList_SET_ITEM(list, 1, PyString_FromString(exif->m_szLastError)); + } + delete exif; - if(resize_mode) pic_buffer = color_resize(pic_buffer, ox, oy, imx, imy); - else pic_buffer = simple_resize(pic_buffer, ox, oy, imx, imy); + return list ? (PyObject*)list : (PyObject*)PyList_New(0); +} - ox = imx; - oy = imy; - } - else cache = true; +int ePicLoad::getData(ePtr &result) +{ + if(m_filepara->pic_buffer == NULL) return 0; + + m_filepara->pic_buffer = conv24to32(m_filepara->pic_buffer, m_filepara->ox * m_filepara->oy); - result=new gPixmap(eSize(w, h), 32); + result=new gPixmap(eSize(m_filepara->max_x, m_filepara->max_y), 32); gSurface *surface = result->surface; int a=0, b=0; int nc=0, oc=0; int o_y=0, u_y=0, v_x=0, h_x=0; - unsigned char clear[4] = {0x00,0x00,0x00,0x00}; - if(background) clear[3]=0xFF; - unsigned char *tmp_buffer=((unsigned char *)(surface->data)); - if(oy < h) + unsigned char *tmp_buffer=((unsigned char *)(surface->data)); + + if(m_filepara->oy < m_filepara->max_y) { - o_y=(h-oy)/2; - u_y=h-oy-o_y; + o_y = (m_filepara->max_y - m_filepara->oy) / 2; + u_y = m_filepara->max_y - m_filepara->oy - o_y; } - if(ox < w) + if(m_filepara->ox < m_filepara->max_x) { - v_x=(w-ox)/2; - h_x=w-ox-v_x; + v_x = (m_filepara->max_x - m_filepara->ox) / 2; + h_x = m_filepara->max_x - m_filepara->ox - v_x; } - //eDebug("o_y=%d u_y=%d v_x=%d h_x=%d", o_y, u_y, v_x, h_x); - - if(oy < h) - for(a=0; a<(o_y*ox); a++, nc+=4) + if(m_filepara->oy < m_filepara->max_y) + { + for(a=0; a<(o_y*m_filepara->ox); a++, nc+=4) { tmp_buffer=((unsigned char *)(surface->data)) + nc; - memcpy(tmp_buffer, clear, sizeof(clear)); + memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background)); } - - for(a=0; aoy; a++) { - if(ox < w) + if(m_filepara->ox < m_filepara->max_x) + { for(b=0; bdata)) + nc; - memcpy(tmp_buffer, clear, sizeof(clear)); + memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background)); } + } - for(b=0; b<(ox*4); b+=4, nc+=4) + for(b=0; b<(m_filepara->ox*4); b+=4, nc+=4) { tmp_buffer=((unsigned char *)(surface->data)) + nc; - tmp_buffer[2]=pic_buffer[oc++]; - tmp_buffer[1]=pic_buffer[oc++]; - tmp_buffer[0]=pic_buffer[oc++]; - tmp_buffer[3]=pic_buffer[oc++]; - + tmp_buffer[2] = m_filepara->pic_buffer[oc++]; + tmp_buffer[1] = m_filepara->pic_buffer[oc++]; + tmp_buffer[0] = m_filepara->pic_buffer[oc++]; + tmp_buffer[3] = m_filepara->pic_buffer[oc++]; } - if(ox < w) + if(m_filepara->ox < m_filepara->max_x) + { for(b=0; bdata)) + nc; - memcpy(tmp_buffer, clear, sizeof(clear)); + memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background)); } + } } - - if(oy < h) - for(a=0; a<(u_y*ox); a++, nc+=4) + + if(m_filepara->oy < m_filepara->max_y) + { + for(a=0; a<(u_y*m_filepara->ox); a++, nc+=4) { tmp_buffer=((unsigned char *)(surface->data)) + nc; - memcpy(tmp_buffer, clear, sizeof(clear)); + memcpy(tmp_buffer, m_conf.background, sizeof(m_conf.background)); } - - //eDebug("[PIC] buffer=%d, nc=%d oc=%d ox=%d, oy=%d",w*h*4, nc, oc, ox, oy); + } surface->clut.data=0; surface->clut.colors=0; surface->clut.start=0; - - delete [] pic_buffer; - if(cachefile.length() && !cache) - { - savePNG( cachefile.c_str(), result); - eDebug("[SAVEPIC] x-size=%d, y-size=%d", ox, oy); - } + delete m_filepara; + m_filepara = NULL; return 0; } diff --git a/lib/gdi/picload.h b/lib/gdi/picload.h index 7bb9adf1..a85567c0 100644 --- a/lib/gdi/picload.h +++ b/lib/gdi/picload.h @@ -1,11 +1,102 @@ #ifndef __picload_h__ #define __picload_h__ -#include "Python.h" #include -#include +#include +#include +#include +#include -SWIG_VOID(int) loadPic(ePtr &SWIG_OUTPUT, std::string filename, int x, int y, int aspect, int resize_mode=0, int rotate=0, int background=0, std::string cachefile="", int thumbnail=0); -PyObject *getExif(const char *filename); +#ifndef SWIG +class Cfilepara +{ +public: + int max_x; + int max_y; + bool callback; + + const char *file; + int id; + int ox; + int oy; + unsigned char *pic_buffer; + std::string picinfo; + int test; + + Cfilepara(const char *mfile, int mid, std::string size) + { + file = strdup(mfile); + id = mid; + pic_buffer = NULL; + callback = true; + picinfo = mfile; + picinfo += + "\n" + size + "\n"; + } + + ~Cfilepara() + { + if(pic_buffer != NULL) delete pic_buffer; + picinfo.clear(); + } + + void addExifInfo(std::string val) { picinfo += val + "\n"; } +}; +#endif + +class ePicLoad: public eMainloop, public eThread, public Object, public iObject +{ + DECLARE_REF(ePicLoad); + + enum{ F_PNG, F_JPEG, F_BMP, F_GIF}; + + void decodePic(); + void decodeThumb(); + void resizePic(); + + Cfilepara *m_filepara; + bool threadrunning; + + struct PConf + { + int max_x; + int max_y; + double aspect_ratio; + unsigned char background[4]; + bool resizetype; + bool usecache; + int thumbnailsize; + int test; + } m_conf; + + struct Message + { + int type; + enum + { + decode_Pic, + decode_Thumb, + decode_finished, + quit + }; + Message(int type=0) + :type(type) {} + }; + eFixedMessagePump msg_thread, msg_main; + + void gotMessage(const Message &message); + void thread(); + int startThread(int what, const char *file, int x, int y); +public: + PSignal1 PictureData; + + ePicLoad(); + ~ePicLoad(); + + RESULT startDecode(const char *filename, int x=0, int y=0); + RESULT getThumbnail(const char *filename, int x=0, int y=0); + RESULT setPara(PyObject *val); + PyObject *getInfo(const char *filename); + SWIG_VOID(int) getData(ePtr &SWIG_OUTPUT); +}; #endif // __picload_h__ diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py index 8f99b98e..7ac2bb98 100644 --- a/lib/python/Components/AVSwitch.py +++ b/lib/python/Components/AVSwitch.py @@ -28,6 +28,21 @@ class AVSwitch: def setSystem(self, value): eAVSwitch.getInstance().setVideomode(value) + def getOutputAspect(self): + if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3 + return 1.333333333 + elif valstr == "16_9": # auto ... 4:3 or 16:9 + # TODO: here we must retrieve the current video aspect ratio... + # because the TV can run in 4:3 or in 16:9 mode.. (switched by wss or scart pin8) + # until we have done this we always return the scale value for 16:9!! + return 1.777777778 + elif valstr in ("16_9_always", "16_9_letterbox"): # 16:9 + return 1.777777778 + elif valstr in ("16_10_letterbox", "16_10_panscan"): # 16:10 + return 1.6 + print "unknown output aspect!" + return 1.0000 + def getAspectRatioSetting(self): valstr = config.av.aspectratio.value if valstr == "4_3_letterbox": diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 7de05d2b..84936375 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -141,6 +141,7 @@ typedef long time_t; %include // TODO: embed these... +%immutable ePicLoad::PictureData; %immutable eButton::selected; %immutable eInput::changed; %immutable eComponentScan::statusChanged; -- cgit v1.2.3 From 94913d0f73c36623ae19916d79cee759b7f6bc98 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 16 Nov 2008 13:14:59 +0100 Subject: change pictureplayer to use async pic loading --- .../Plugins/Extensions/PicturePlayer/plugin.py | 901 +++++++++++---------- 1 file changed, 464 insertions(+), 437 deletions(-) diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py index ea906f0d..7d62d2be 100644 --- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py +++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py @@ -1,318 +1,511 @@ -from enigma import eTimer, loadPic, getExif +from enigma import ePicLoad, eTimer, getDesktop + from Screens.Screen import Screen -from Screens.ServiceInfo import ServiceInfoList, ServiceInfoListEntry -from Components.ActionMap import ActionMap, NumberActionMap +from Tools.Directories import resolveFilename, pathExists, SCOPE_MEDIA +from Plugins.Plugin import PluginDescriptor + from Components.Pixmap import Pixmap, MovingPixmap +from Components.ActionMap import ActionMap, NumberActionMap from Components.Label import Label - -from Components.ConfigList import ConfigList -from Components.config import * - -from Tools.Directories import resolveFilename, fileExists, pathExists, createDir, SCOPE_MEDIA +from Components.Button import Button from Components.FileList import FileList from Components.AVSwitch import AVSwitch +from Components.Sources.List import List +from Components.ConfigList import ConfigList -from Plugins.Plugin import PluginDescriptor +from Components.config import config, ConfigSubsection, ConfigInteger, ConfigSelection, ConfigText, ConfigEnableDisable, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry + +def getAspectforPic(): + return AVSwitch().getFramebufferScale() config.pic = ConfigSubsection() -config.pic.slidetime = ConfigInteger(default=10, limits=(5, 60)) -config.pic.resize = ConfigSelection(default="0", choices = [("0", _("simple")), ("1", _("better"))]) +config.pic.framesize = ConfigInteger(default=30, limits=(5, 99)) +config.pic.slidetime = ConfigInteger(default=10, limits=(10, 60)) +config.pic.resize = ConfigSelection(default="1", choices = [("0", _("simple")), ("1", _("better"))]) config.pic.cache = ConfigEnableDisable(default=True) config.pic.lastDir = ConfigText(default=resolveFilename(SCOPE_MEDIA)) -config.pic.rotate = ConfigSelection(default="0", choices = [("0", _("none")), ("1", _("manual")), ("2", _("by Exif"))]) +config.pic.infoline = ConfigEnableDisable(default=True) +config.pic.loop = ConfigEnableDisable(default=True) +config.pic.bgcolor = ConfigSelection(default="#00000000", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))]) +config.pic.textcolor = ConfigSelection(default="#0038FF48", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))]) -def getAspect(): - val = AVSwitch().getAspectRatioSetting() - return val/2 +class picshow(Screen): + def __init__(self, session): + self.skin = """ + + + + + + + + + + + + """ -#------------------------------------------------------------------------------------------ + Screen.__init__(self, session) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"], + { + "cancel": self.KeyExit, + "red": self.KeyRed, + "yellow": self.KeyYellow, + "blue": self.KeyBlue, + "ok": self.KeyOk + }, -1) + + self["key_red"] = Button(_("Thumbnails")) + self["key_green"] = Button() + self["key_yellow"] = Button(_("Exif")) + self["key_blue"] = Button(_("Setup")) + self["label"] = Label() + self["thn"] = Pixmap() -class ThumbView(Screen): - skin = """ - - - - - - - - - - - - - - - - """ + currDir = config.pic.lastDir.value + if not pathExists(currDir): + currDir = "/" + + self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)") + self["filelist"] = self.filelist + self["filelist"].onSelectionChanged.append(self.selectionChanged) + + self.ThumbTimer = eTimer() + self.ThumbTimer.callback.append(self.showThumb) + + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.showPic) + + self.onLayoutFinish.append(self.setConf) + + def showPic(self, picInfo=""): + ptr = self.picload.getData() + if ptr != None: + self["thn"].instance.setPixmap(ptr.__deref__()) + self["thn"].show() + + text = picInfo.split('\n',1) + self["label"].setText(text[1]) + self["label"].show() + + def showThumb(self): + if not self.filelist.canDescent(): + if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1: + self.ThumbTimer.start(500, True) + + def selectionChanged(self): + if not self.filelist.canDescent(): + self.ThumbTimer.start(500, True) + else: + self["label"].hide() + self["thn"].hide() + + def KeyRed(self): + #if not self.filelist.canDescent(): + self.session.openWithCallback(self.callbackView, Pic_Thumb, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory()) + + def KeyYellow(self): + if not self.filelist.canDescent(): + self.session.open(Pic_Exif, self.picload.getInfo(self.filelist.getCurrentDirectory() + self.filelist.getFilename())) - def __init__(self, session, filelist, name, path): - self.skin = ThumbView.skin + def KeyBlue(self): + self.session.openWithCallback(self.setConf ,Pic_Setup) + + def KeyOk(self): + if self.filelist.canDescent(): + self.filelist.descent() + else: + self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory()) + + def setConf(self): + #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB) + self.picload.setPara([self["thn"].instance.size().width(), self["thn"].instance.size().height(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), "#00000000"]) + + def callbackView(self, val=0): + if val > 0: + self.filelist.moveToIndex(val) + + def KeyExit(self): + del self.picload + + if self.filelist.getCurrentDirectory() is None: + config.pic.lastDir.value = "/" + else: + config.pic.lastDir.value = self.filelist.getCurrentDirectory() + + config.pic.save() + self.close() + +#------------------------------------------------------------------------------------------ + +class Pic_Setup(Screen): + def __init__(self, session): + self.skin = """ + + """ + Screen.__init__(self, session) + + self["actions"] = NumberActionMap(["SetupActions"], + { + "cancel": self.close, + "left": self.keyLeft, + "right": self.keyRight, + "0": self.keyNumber, + "1": self.keyNumber, + "2": self.keyNumber, + "3": self.keyNumber, + "4": self.keyNumber, + "5": self.keyNumber, + "6": self.keyNumber, + "7": self.keyNumber, + "8": self.keyNumber, + "9": self.keyNumber + }, -1) + + list = [] + self["liste"] = ConfigList(list) + list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime)) + list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize)) + list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache)) + list.append(getConfigListEntry(_("show Infoline"), config.pic.infoline)) + list.append(getConfigListEntry(_("Frame size in full view"), config.pic.framesize)) + list.append(getConfigListEntry(_("slide picture in loop"), config.pic.loop)) + list.append(getConfigListEntry(_("backgroundcolor"), config.pic.bgcolor)) + list.append(getConfigListEntry(_("textcolor"), config.pic.textcolor)) + + def keyLeft(self): + self["liste"].handleKey(KEY_LEFT) + + def keyRight(self): + self["liste"].handleKey(KEY_RIGHT) + + def keyNumber(self, number): + self["liste"].handleKey(KEY_0 + number) + +#--------------------------------------------------------------------------- + +class Pic_Exif(Screen): + def __init__(self, session, exiflist): + self.skin = """ + + + {"template": [ MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)], "fonts": [gFont("Regular", 20)], "itemHeight": 30 } + + + """ Screen.__init__(self, session) - self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "MovieSelectionActions"], + self["actions"] = ActionMap(["OkCancelActions"], + { + "cancel": self.close + }, -1) + + exifdesc = [_("Filename:"), "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"] + list = [] + + for x in range(len(exiflist)): + if x>0: + list.append((exifdesc[x], exiflist[x])) + else: + name = exiflist[x].split('/')[-1] + list.append((exifdesc[x], name)) + self["menu"] = List(list) + +#---------------------------------------------------------------------------------------- + +T_INDEX = 0 +T_FRAME_POS = 1 +T_PAGE = 2 +T_NAME = 3 +T_FULL = 4 + +class Pic_Thumb(Screen): + def __init__(self, session, piclist, lastindex, path): + + self.textcolor = config.pic.textcolor.value + self.color = config.pic.bgcolor.value + textsize = 20 + self.spaceX = 35 + self.picX = 190 + self.spaceY = 30 + self.picY = 200 + + size_w = getDesktop(0).size().width() + size_h = getDesktop(0).size().height() + self.thumbsX = size_w / (self.spaceX + self.picX) # thumbnails in X + self.thumbsY = size_h / (self.spaceY + self.picY) # thumbnails in Y + self.thumbsC = self.thumbsX * self.thumbsY # all thumbnails + + self.positionlist = [] + skincontent = "" + + posX = -1 + for x in range(self.thumbsC): + posY = x / self.thumbsX + posX += 1 + if posX >= self.thumbsX: + posX = 0 + + absX = self.spaceX + (posX*(self.spaceX + self.picX)) + absY = self.spaceY + (posY*(self.spaceY + self.picY)) + self.positionlist.append((absX, absY)) + skincontent += "" + + skincontent += "" + + + # Screen, backgroundlabel and MovingPixmap + self.skin = " \ + " + skincontent + "" + + Screen.__init__(self, session) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"], { "cancel": self.Exit, "ok": self.KeyOk, - "showEventInfo": self.StartExif, - "right": self.key_right, "left": self.key_left, + "right": self.key_right, "up": self.key_up, - "down": self.key_down + "down": self.key_down, + "showEventInfo": self.StartExif, }, -1) - for x in range(6): + self["frame"] = MovingPixmap() + for x in range(self.thumbsC): self["label"+str(x)] = Label() self["thumb"+str(x)] = Pixmap() - self["frame"] = MovingPixmap() - - self.aspect = getAspect() - self.path = path - self.filelist = filelist + + self.Thumbnaillist = [] + self.filelist = [] self.currPage = -1 - self.index = 0 - self.old_index = 0 - self.thumblist = [] - self.thumbindex = 0 - self.list = [] - self.poslist = [[50,63],[265,63],[480,63],[50,288],[265,288],[480,288]] - - count=0 - pos=0 - for x in self.filelist: + self.dirlistcount = 0 + self.path = path + + index = 0 + framePos = 0 + Page = 0 + for x in piclist: if x[0][1] == False: - self.list.append((x[0][0], self.path + x[0][0], count/6, pos, "(" + str(count+1) + ") ")) - pos += 1 - if pos == 6: - pos = 0 - if x[0][0] == name: - self.index = count - count += 1 - self.maxentry = len(self.list)-1 + self.filelist.append((index, framePos, Page, x[0][0], path + x[0][0])) + index += 1 + framePos += 1 + if framePos > (self.thumbsC -1): + framePos = 0 + Page += 1 + else: + self.dirlistcount += 1 - if self.maxentry < 0: - self["label0"].setText(_("no Picture found")) + self.maxentry = len(self.filelist)-1 + self.index = lastindex - self.dirlistcount + if self.index < 0: + self.index = 0 + + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.showPic) + + self.onLayoutFinish.append(self.setPicloadConf) self.ThumbTimer = eTimer() - self.ThumbTimer.callback.append(self.showThumb) + self.ThumbTimer.callback.append(self.showPic) - self.fillPage() + def setPicloadConf(self): + self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), self.color]) + self.paintFrame() + + def paintFrame(self): + #print "index=" + str(self.index) + if self.maxentry < self.index or self.index < 0: + return + + pos = self.positionlist[self.filelist[self.index][T_FRAME_POS]] + self["frame"].moveTo( pos[0], pos[1], 1) + self["frame"].startMoving() + + if self.currPage != self.filelist[self.index][T_PAGE]: + self.currPage = self.filelist[self.index][T_PAGE] + self.newPage() + + def newPage(self): + self.Thumbnaillist = [] + #clear Labels and Thumbnail + for x in range(self.thumbsC): + self["label"+str(x)].setText("") + self["thumb"+str(x)].hide() + #paint Labels and fill Thumbnail-List + for x in self.filelist: + if x[T_PAGE] == self.currPage: + self["label"+str(x[T_FRAME_POS])].setText("(" + str(x[T_INDEX]+1) + ") " + x[T_NAME]) + self.Thumbnaillist.append([0, x[T_FRAME_POS], x[T_FULL]]) + + #paint Thumbnail start + self.showPic() + + def showPic(self, picInfo=""): + for x in range(len(self.Thumbnaillist)): + if self.Thumbnaillist[x][0] == 0: + if self.picload.getThumbnail(self.Thumbnaillist[x][2]) == 1: #zu tun probier noch mal + self.ThumbTimer.start(500, True) + else: + self.Thumbnaillist[x][0] = 1 + break + elif self.Thumbnaillist[x][0] == 1: + self.Thumbnaillist[x][0] = 2 + ptr = self.picload.getData() + if ptr != None: + self["thumb" + str(self.Thumbnaillist[x][1])].instance.setPixmap(ptr.__deref__()) + self["thumb" + str(self.Thumbnaillist[x][1])].show() + def key_left(self): self.index -= 1 if self.index < 0: self.index = self.maxentry - self.fillPage() + self.paintFrame() def key_right(self): self.index += 1 if self.index > self.maxentry: self.index = 0 - self.fillPage() + self.paintFrame() def key_up(self): - self.index -= 3 + self.index -= self.thumbsX if self.index < 0: - self.index = 0 - self.fillPage() + self.index =self.maxentry + self.paintFrame() def key_down(self): - self.index += 3 + self.index += self.thumbsX if self.index > self.maxentry: - self.index = self.maxentry - self.fillPage() - - def fillPage(self): - if self.maxentry < 0: - return + self.index = 0 + self.paintFrame() - self["frame"].moveTo(self.poslist[self.list[self.index][3]][0], self.poslist[self.list[self.index][3]][1], 1) - self["frame"].startMoving() - - if self.list[self.index][2] != self.currPage: - self.currPage = self.list[self.index][2] - textlist = ["","","","","",""] - self.thumblist = ["","","","","",""] - - for x in self.list: - if x[2] == self.currPage: - textlist[x[3]] = x[4] + x[0] - self.thumblist[x[3]] = x[0] - - for x in range(6): - self["label"+str(x)].setText(textlist[x]) - self["thumb"+str(x)].hide() - - self.ThumbTimer.start(500, True) - - def showThumb(self): - if self.thumblist[self.thumbindex] != "": - cachefile = "" - if config.pic.cache.value: - cachedir = self.path + ".Thumbnails/" - cachefile = cachedir + self.thumblist[self.thumbindex] + str(180) + str(160) + str(self.aspect) - if not pathExists(cachedir): - if not createDir(cachedir): - cachefile = "" - - ptr = loadPic(self.path + self.thumblist[self.thumbindex], 180, 160, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value), 1, cachefile, 1) - if ptr != None: - self["thumb"+str(self.thumbindex)].show() - self["thumb"+str(self.thumbindex)].instance.setPixmap(ptr) - - self.thumbindex += 1 - if self.thumbindex < 6: - self.ThumbTimer.start(500, True) - else: - self.thumbindex = 0 - else: - self.thumbindex = 0 - def StartExif(self): if self.maxentry < 0: return - - self.session.open(ExifView, self.list[self.index][1], self.list[self.index][0]) + self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.index][T_FULL])) def KeyOk(self): if self.maxentry < 0: return - self.old_index = self.index - self.session.openWithCallback(self.returnView ,PicView, self.filelist, self.list[self.index][0], self.path) - - def returnView(self, val=0): + self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist, self.index, self.path) + + def callbackView(self, val=0): self.index = val if self.old_index != self.index: - self.fillPage() - + self.paintFrame() def Exit(self): - self.close(self.index) + del self.picload + self.close(self.index + self.dirlistcount) -#------------------------------------------------------------------------------------------ +#--------------------------------------------------------------------------- -class PicView(Screen): - skin = """ - - - - - - - - - - - """ - - def __init__(self, session, filelist, name, path): - self.skin = PicView.skin - Screen.__init__(self, session) +class Pic_Full_View(Screen): + def __init__(self, session, filelist, index, path): - self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "MovieSelectionActions"], + self.textcolor = config.pic.textcolor.value + self.bgcolor = config.pic.bgcolor.value + space = config.pic.framesize.value + size_w = getDesktop(0).size().width() + size_h = getDesktop(0).size().height() + + self.skin = " \ + \ + \ + \ + " + + Screen.__init__(self, session) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"], { "cancel": self.Exit, - "showEventInfo": self.StartExif, - "green": self.Play, - "yellow": self.Pause, + "green": self.PlayPause, + "yellow": self.PlayPause, "blue": self.nextPic, - "red": self.prevPic + "red": self.prevPic, + "left": self.prevPic, + "right": self.nextPic, + "showEventInfo": self.StartExif, }, -1) - - self.aspect = getAspect() - self.blinking = False - self.autoShow = True - self.slideOn = False - self.pauseOn = False - self.index = 0 - self.old = 0 - self.list = [] - count=0 - for x in filelist: - if x[0][1] == False: - self.list.append((x[0][0], path + x[0][0], 0)) - if x[0][0] == name: - self.index = count - count += 1 - self.maxentry = len(self.list)-1 - - self["file"] = Label(_("please wait, loading picture...")) - self["picture"] = Pixmap() self["point"] = Pixmap() - self["play"] = Pixmap() - self["pause"] = Pixmap() + self["pic"] = Pixmap() + self["play_icon"] = Pixmap() + self["file"] = Label(_("please wait, loading picture...")) - self.decodeTimer = eTimer() - self.decodeTimer.callback.append(self.decodePic) - self.decodeTimer.start(300, True) + self.old_index = 0 + self.filelist = [] + self.lastindex = index + self.currPic = [] + self.shownow = True + self.dirlistcount = 0 - self.slideTimer = eTimer() - self.slideTimer.callback.append(self.slidePic) - - - def Pause(self): - if self.slideOn: - if self.pauseOn: - self.pauseOn=False - self["pause"].show() - else: - self.pauseOn=True - self["play"].show() - self.slideValue = 0 - - def Play(self): - if self.pauseOn == False: - if self.slideOn: - self.slideOn=False - self["play"].show() - else: - self.slideOn=True - self.slideTimer.start(1000, True) - - self.slideValue = int(config.pic.slidetime.value) + for x in filelist: + if len(filelist[0]) == 3: #orig. filelist + if x[0][1] == False: + self.filelist.append(path + x[0][0]) + else: + self.dirlistcount += 1 + else: # thumbnaillist + self.filelist.append(x[T_FULL]) + + self.maxentry = len(self.filelist)-1 + self.index = index - self.dirlistcount + if self.index < 0: + self.index = 0 - def slidePic(self): - if self.slideOn == True and self.pauseOn == False: - self.blinkingWidget("play") - self.slideValue -= 1 - if self.slideValue <= 0: - self.slideValue = int(config.pic.slidetime.value) - self.nextPic() + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.finish_decode) - self.slideTimer.start(1000, True) + self.slideTimer = eTimer() + self.slideTimer.callback.append(self.slidePic) - if self.pauseOn: - self.blinkingWidget("pause") - self.slideTimer.start(1000, True) + if self.maxentry >= 0: + self.onLayoutFinish.append(self.setPicloadConf) - def decodePic(self): - self.currPic = loadPic(self.list[self.index][1], 560, 450, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value),1) - self["point"].hide() - if self.autoShow: - self.showPic() - self.autoShow = False + def setPicloadConf(self): + self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), getAspectforPic(), 0, int(config.pic.resize.value), self.bgcolor]) - def showPic(self): - if self.currPic != None: - self.old = self.index - self["file"].setText(self.list[self.old][0] + " (" + str(self.old+1) + "/" + str(self.maxentry+1) + ")") - self["picture"].instance.setPixmap(self.currPic) + self["play_icon"].hide() + if config.pic.infoline.value == False: + self["file"].hide() + self.start_decode() - self.next() - self["point"].show() - self.decodeTimer.start(300, True) - - def nextPic(self): - self.showPic() - - def prevPic(self): - self.index = self.old - self.prev() - self.autoShow = True + def ShowPicture(self): + if self.shownow and len(self.currPic): + self.shownow = False + self["file"].setText(self.currPic[0]) + self.lastindex = self.currPic[1] + self["pic"].instance.setPixmap(self.currPic[2].__deref__()) + self.currPic = [] + + self.next() + self.start_decode() + + def finish_decode(self, picInfo=""): + self["point"].hide() + ptr = self.picload.getData() + if ptr != None: + text = "" + try: + text = picInfo.split('\n',1) + text = "(" + str(self.index+1) + "/" + str(self.maxentry+1) + ") " + text[0].split('/')[-1] + except: + pass + self.currPic = [] + self.currPic.append(text) + self.currPic.append(self.index) + self.currPic.append(ptr) + self.ShowPicture() + + def start_decode(self): + self.picload.startDecode(self.filelist[self.index]) self["point"].show() - self.decodeTimer.start(300, True) - + def next(self): self.index += 1 if self.index > self.maxentry: @@ -322,218 +515,52 @@ class PicView(Screen): self.index -= 1 if self.index < 0: self.index = self.maxentry - - def blinkingWidget(self, name): - if self.blinking: - self.blinking=False - self[name].show() - else: - self.blinking=True - self[name].hide() - - def StartExif(self): - if self.pauseOn == False: - self.Pause() - self.session.openWithCallback(self.StopExif ,ExifView, self.list[self.old][1], self.list[self.old][0]) - - def StopExif(self): - if self.pauseOn: - self.Pause() - - def Exit(self): - self.close(self.old) - -#------------------------------------------------------------------------------------------ -class ExifView(Screen): - skin = """ - - - """ - - def __init__(self, session, fullname, name): - self.skin = ExifView.skin - Screen.__init__(self, session) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "cancel": self.close - }, -1) - - dlist = ["Name:", "EXIF-Version:", "Camera-Make:", "Camera-Model:", "Date/Time:", "User Comments:", "Width / Height:", "Orientation:", "Metering Mode:", "Exposure Program:", "Light Source:", "Flash used:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"] - tlist = [ ] - self["exiflist"] = ServiceInfoList(tlist) - tlist.append(ServiceInfoListEntry(dlist[0], name)) - count=1 - for x in getExif(fullname): - tlist.append(ServiceInfoListEntry(dlist[count], x)) - count += 1 - -#------------------------------------------------------------------------------------------ - -class PicSetup(Screen): - skin = """ - - - """ - - def __init__(self, session): - self.skin = PicSetup.skin - Screen.__init__(self, session) - - self["actions"] = NumberActionMap(["SetupActions"], - { - "cancel": self.close, - "left": self.keyLeft, - "right": self.keyRight, - "0": self.keyNumber, - "1": self.keyNumber, - "2": self.keyNumber, - "3": self.keyNumber, - "4": self.keyNumber, - "5": self.keyNumber, - "6": self.keyNumber, - "7": self.keyNumber, - "8": self.keyNumber, - "9": self.keyNumber - }, -1) - - self.list = [] - self["liste"] = ConfigList(self.list) - self.list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime)) - self.list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize)) - self.list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache)) - #self.list.append(getConfigListEntry(_("Rotate Picture"), config.pic.rotate)) - - def keyLeft(self): - self["liste"].handleKey(KEY_LEFT) - - def keyRight(self): - self["liste"].handleKey(KEY_RIGHT) - - def keyNumber(self, number): - self["liste"].handleKey(KEY_0 + number) - - -#------------------------------------------------------------------------------------------ - -class picmain(Screen): - skin = """ - - - - - - - - - - """ - - def __init__(self, session): - self.skin = picmain.skin - Screen.__init__(self, session) - - self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"], - { - "ok": self.KeyOk, - "cancel": self.Exit, - "right": self.rightDown, - "left": self.leftUp, - "up": self.up, - "down": self.down, - "showEventInfo": self.StartExif, - "contextMenu": self.Settings, - "red": self.StartThumb - }, -1) - - self.aspect = getAspect() - currDir = config.pic.lastDir.value - if not pathExists(currDir): - currDir = "/" - - self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)") - self["filelist"] = self.filelist - self["thumbnail"] = Pixmap() - - self.ThumbTimer = eTimer() - self.ThumbTimer.callback.append(self.showThumb) - self.ThumbTimer.start(500, True) - - def up(self): - self["filelist"].up() - self.ThumbTimer.start(1500, True) - - def down(self): - self["filelist"].down() - self.ThumbTimer.start(1500, True) - - def leftUp(self): - self["filelist"].pageUp() - self.ThumbTimer.start(1500, True) - - def rightDown(self): - self["filelist"].pageDown() - self.ThumbTimer.start(1500, True) - - def showThumb(self): - if not self.filelist.canDescent(): - cachefile = "" - if config.pic.cache.value: - cachedir = self.filelist.getCurrentDirectory() + ".Thumbnails/" - cachefile = cachedir + self.filelist.getFilename() + str(180) + str(160) + str(self.aspect) - if not pathExists(cachedir): - if not createDir(cachedir): - cachefile = "" - - ptr = loadPic(self.filelist.getCurrentDirectory() + self.filelist.getFilename(), 180, 160, self.aspect, int(config.pic.resize.value), 0, 0, cachefile, 1) - if ptr != None: - self["thumbnail"].show() - self["thumbnail"].instance.setPixmap(ptr) - else: - self["thumbnail"].hide() - - def KeyOk(self): - if self.filelist.canDescent(): - self.filelist.descent() + def slidePic(self): + print "slide to next Picture index=" + str(self.lastindex) + if config.pic.loop.value==False and self.lastindex == self.maxentry: + self.PlayPause() + self.shownow = True + self.ShowPicture() + + def PlayPause(self): + if self.slideTimer.isActive(): + self.slideTimer.stop() + self["play_icon"].hide() else: - self.session.openWithCallback(self.returnVal, PicView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory()) - - def StartThumb(self): - self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory()) + self.slideTimer.start(config.pic.slidetime.value*1000) + self["play_icon"].show() + self.nextPic() - def returnVal(self, val=0): - if val > 0: - for x in self.filelist.getFileList(): - if x[0][1] == True: - val += 1 - self.filelist.moveToIndex(val) + def prevPic(self): + self.currPic = [] + self.index = self.lastindex + self.prev() + self.start_decode() + self.shownow = True + def nextPic(self): + self.shownow = True + self.ShowPicture() + def StartExif(self): - if not self.filelist.canDescent(): - self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename()) + if self.maxentry < 0: + return + self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.lastindex])) - def Settings(self): - self.session.open(PicSetup) - def Exit(self): - if self.filelist.getCurrentDirectory() is None: - config.pic.lastDir.value = "/" - else: - config.pic.lastDir.value = self.filelist.getCurrentDirectory() - - config.pic.save() - self.close() + del self.picload + self.close(self.lastindex + self.dirlistcount) #------------------------------------------------------------------------------------------ def main(session, **kwargs): - session.open(picmain) + session.open(picshow) def filescan_open(list, session, **kwargs): # Recreate List as expected by PicView filelist = [((file.path, False), None) for file in list] - session.open(PicView, filelist, "", "") + session.open(Pic_Full_View, filelist, 0, file.path) def filescan(**kwargs): from Components.Scanner import Scanner, ScanPath @@ -557,5 +584,5 @@ def filescan(**kwargs): def Plugins(**kwargs): return \ - [PluginDescriptor(name="PicturePlayer", description="Picture Viewer (BMP, PNG, JPG, GIF)", icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main), - PluginDescriptor(name="PicturePlayer", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)] + [PluginDescriptor(name=_("PicturePlayer"), description=_("fileformats (BMP, PNG, JPG, GIF)"), icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main), + PluginDescriptor(name=_("PicturePlayer"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)] -- cgit v1.2.3 From 5bbb74ccef1fe4bd524a5cd6427d3c7b803fe82e Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 08:44:20 +0100 Subject: remove hotplugNotifier on every way of exiting --- lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py index 836c9fbd..162bf352 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py @@ -50,7 +50,7 @@ class DVDToolbox(Screen): "green": self.update, "yellow": self.format, #"blue": self.eject, - "cancel": self.close, + "cancel": self.exit, "pageUp": self.pageUp, "pageDown": self.pageDown }) -- cgit v1.2.3 From 083c49ace50d1aa702cf47785e0d38966f8e71a1 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 10:01:47 +0100 Subject: allow blanking DVD-RAM media. the burn tool however only writes disc-at-once. --- lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py index 162bf352..b88dbb3f 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py @@ -89,7 +89,7 @@ class DVDToolbox(Screen): for line in mediuminfo.splitlines(): if line.find("Mounted Media:") > -1: mediatype = line.rsplit(',',1)[1][1:] - if mediatype.find("RW") > 0: + if mediatype.find("RW") > 0 or mediatype.find("RAM") > 0: self.formattable = True else: self.formattable = False @@ -186,7 +186,7 @@ class DVDformatTask(Task): if line.startswith("- media is already formatted"): self.error = self.ERROR_ALREADYFORMATTED self.retryargs = [ "-force" ] - if line.startswith("- media is not blank"): + if line.startswith("- media is not blank") or line.startswith(" -format=full to perform full (lengthy) reformat;"): self.error = self.ERROR_ALREADYFORMATTED self.retryargs = [ "-blank" ] if line.startswith(":-( mounted media doesn't appear to be"): -- cgit v1.2.3 From b19b6c15482681e331f346acb56b1566102e1418 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 10:10:39 +0100 Subject: actually exit dvd player on pressing exit key in exit choicebox --- lib/python/Plugins/Extensions/DVDPlayer/plugin.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py index cb5f0e0d..593d4d2e 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py @@ -491,7 +491,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP def askLeavePlayer(self): choices = [(_("Continue playing"), "play"), (_("Exit"), "exit")] if not self.physicalDVD: - choices.insert(1,(_("Return to file browser"), "browser")) + choices.insert(1,(_("Return to file browser"), "browser")) self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices) def sendKey(self, key): @@ -590,19 +590,16 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP print "cur_dlg", self.session.current_dialog def exitCB(self, answer): - if answer is not None: - if answer[1] == "exit": - if self.service: - self.service = None - self.close() - if answer[1] == "browser": + if not answer or answer and answer[1] == "exit": + if self.service: + self.service = None + self.close() + if answer and answer[1] == "browser": #TODO check here if a paused dvd playback is already running... then re-start it... #else - if self.service: - self.service = None - self.showFileBrowser() - else: - pass + if self.service: + self.service = None + self.showFileBrowser() def __onClose(self): for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)): -- cgit v1.2.3 From 2a7b743b84bd9ef380af30b0f9f260bf386eed9a Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 17 Nov 2008 13:57:43 +0100 Subject: add missing \n (without this the lamedb is currupted after shutdown enigma2) --- lib/dvb/db.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 1c332033..44191586 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -497,7 +497,7 @@ void eDVBDB::saveServicelist(const char *file) { if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2) { - fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", + fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", sat.frequency, sat.symbol_rate, sat.polarisation, sat.fec, sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position, -- cgit v1.2.3 From 9ccb92fb3eaca35ec60c1a596db9620f9f302044 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 17 Nov 2008 21:17:34 +0100 Subject: more changes for async picture decode support --- lib/gdi/picload.cpp | 109 +++++++++++++++------ lib/gdi/picload.h | 5 + lib/python/Components/AVSwitch.py | 16 ++- .../SystemPlugins/Videomode/VideoHardware.py | 29 ++++++ 4 files changed, 125 insertions(+), 34 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index 2ef901f5..b1dfd1a1 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -569,19 +569,29 @@ ePicLoad::ePicLoad() m_conf.thumbnailsize = 180; } -ePicLoad::~ePicLoad() +void ePicLoad::waitFinished() { msg_thread.send(Message(Message::quit)); kill(); +} +ePicLoad::~ePicLoad() +{ + if (threadrunning) + waitFinished(); if(m_filepara != NULL) delete m_filepara; } +void ePicLoad::thread_finished() +{ + threadrunning=false; +} void ePicLoad::thread() { hasStarted(); + threadrunning=true; nice(4); runLoop(); } @@ -759,7 +769,6 @@ void ePicLoad::gotMessage(const Message &msg) break; case Message::decode_finished: // called from main thread //eDebug("[Picload] decode finished... %s", m_filepara->file); - threadrunning=false; if(m_filepara->callback) { PictureData(m_filepara->picinfo.c_str()); @@ -824,7 +833,6 @@ int ePicLoad::startThread(int what, const char *file, int x, int y) return 1; } - threadrunning=true; if(what==1) msg_thread.send(Message(Message::decode_Pic)); else @@ -843,33 +851,6 @@ RESULT ePicLoad::getThumbnail(const char *file, int x, int y) return startThread(0, file, x, y); } -RESULT ePicLoad::setPara(PyObject *val) -{ - if (!PyList_Check(val)) - return 0; - if (PyList_Size(val) < 6) - return 0; - - m_conf.max_x = PyInt_AsLong( PyList_GET_ITEM(val, 0)); - m_conf.max_y = PyInt_AsLong( PyList_GET_ITEM(val, 1)); - m_conf.aspect_ratio = PyFloat_AsDouble( PyList_GET_ITEM(val, 2)); - m_conf.usecache = PyInt_AsLong( PyList_GET_ITEM(val, 3)); - m_conf.resizetype = PyInt_AsLong( PyList_GET_ITEM(val, 4)); - const char *bg_str = PyString_AsString( PyList_GET_ITEM(val, 5)); - - if(bg_str[0] == '#' && strlen(bg_str)==9) - { - int bg = strtoul(bg_str+1, NULL, 16); - m_conf.background[0] = bg&0xFF; //BB - m_conf.background[1] = (bg>>8)&0xFF; //GG - m_conf.background[2] = (bg>>16)&0xFF; //RR - m_conf.background[3] = bg>>24; //AA - } - - eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]); - return 1; -} - PyObject *ePicLoad::getInfo(const char *filename) { ePyObject list; @@ -935,6 +916,7 @@ PyObject *ePicLoad::getInfo(const char *filename) int ePicLoad::getData(ePtr &result) { + result = 0; if(m_filepara->pic_buffer == NULL) return 0; m_filepara->pic_buffer = conv24to32(m_filepara->pic_buffer, m_filepara->ox * m_filepara->oy); @@ -1015,3 +997,70 @@ int ePicLoad::getData(ePtr &result) return 0; } + +RESULT ePicLoad::setPara(PyObject *val) +{ + if (!PyList_Check(val)) + return 0; + if (PyList_Size(val) < 6) + return 0; + + m_conf.max_x = PyInt_AsLong( PyList_GET_ITEM(val, 0)); + m_conf.max_y = PyInt_AsLong( PyList_GET_ITEM(val, 1)); + m_conf.aspect_ratio = PyFloat_AsDouble( PyList_GET_ITEM(val, 2)); + m_conf.usecache = PyInt_AsLong( PyList_GET_ITEM(val, 3)); + m_conf.resizetype = PyInt_AsLong( PyList_GET_ITEM(val, 4)); + const char *bg_str = PyString_AsString( PyList_GET_ITEM(val, 5)); + + if(bg_str[0] == '#' && strlen(bg_str)==9) + { + int bg = strtoul(bg_str+1, NULL, 16); + m_conf.background[0] = bg&0xFF; //BB + m_conf.background[1] = (bg>>8)&0xFF; //GG + m_conf.background[2] = (bg>>16)&0xFF; //RR + m_conf.background[3] = bg>>24; //AA + } + + eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]); + return 1; +} + +//------------------------------------------------------------------------------------ + +//for old plugins +SWIG_VOID(int) loadPic(ePtr &result, std::string filename, int x, int y, int aspect, int resize_mode, int rotate, int background, std::string cachefile) +{ + result = 0; + eDebug("deprecated loadPic function used!!! please use the non blocking version! you can see demo code in Pictureplayer plugin... this function is removed in the near future!"); + ePicLoad mPL; + + double aspect_ratio; + switch(aspect) + { + case 1: aspect_ratio = 1.778 / ((double)720/576); break; //16:9 + case 2: aspect_ratio = 1.600 / ((double)720/576); break; //16:10 + case 3: aspect_ratio = 1.250 / ((double)720/576); break; //5:4 + default: aspect_ratio = 1.333 / ((double)720/576); //4:3 + } + + ePyObject list = PyList_New(6); + PyList_SET_ITEM(list, 0, PyLong_FromLong(x)); + PyList_SET_ITEM(list, 1, PyLong_FromLong(y)); + PyList_SET_ITEM(list, 2, PyFloat_FromDouble(aspect_ratio)); + PyList_SET_ITEM(list, 3, PyLong_FromLong(0)); + PyList_SET_ITEM(list, 4, PyLong_FromLong(resize_mode)); + if(background) + PyList_SET_ITEM(list, 5, PyString_FromString("#ff000000")); + else + PyList_SET_ITEM(list, 5, PyString_FromString("#00000000")); + + mPL.setPara(list); + + if(!mPL.startDecode(filename.c_str())) + { + mPL.waitFinished(); // this blocks until the thread is finished + mPL.getData(result); + } + + return 0; +} diff --git a/lib/gdi/picload.h b/lib/gdi/picload.h index a85567c0..6a0f70b9 100644 --- a/lib/gdi/picload.h +++ b/lib/gdi/picload.h @@ -86,7 +86,9 @@ class ePicLoad: public eMainloop, public eThread, public Object, public iObject void gotMessage(const Message &message); void thread(); int startThread(int what, const char *file, int x, int y); + void thread_finished(); public: + void waitFinished(); PSignal1 PictureData; ePicLoad(); @@ -99,4 +101,7 @@ public: SWIG_VOID(int) getData(ePtr &SWIG_OUTPUT); }; +//for old plugins +SWIG_VOID(int) loadPic(ePtr &SWIG_OUTPUT, std::string filename, int x, int y, int aspect, int resize_mode=0, int rotate=0, int background=0, std::string cachefile=""); + #endif // __picload_h__ diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py index 7ac2bb98..19aca24d 100644 --- a/lib/python/Components/AVSwitch.py +++ b/lib/python/Components/AVSwitch.py @@ -1,5 +1,5 @@ from config import config, ConfigSlider, ConfigSelection, ConfigYesNo, ConfigEnableDisable, ConfigSubsection, ConfigBoolean -from enigma import eAVSwitch +from enigma import eAVSwitch, getDesktop from SystemInfo import SystemInfo class AVSwitch: @@ -32,9 +32,12 @@ class AVSwitch: if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3 return 1.333333333 elif valstr == "16_9": # auto ... 4:3 or 16:9 - # TODO: here we must retrieve the current video aspect ratio... - # because the TV can run in 4:3 or in 16:9 mode.. (switched by wss or scart pin8) - # until we have done this we always return the scale value for 16:9!! + try: + aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read() + if aspect_str == "1": # 4:3 + return 1.333333333 + except IOError: + pass return 1.777777778 elif valstr in ("16_9_always", "16_9_letterbox"): # 16:9 return 1.777777778 @@ -43,6 +46,11 @@ class AVSwitch: print "unknown output aspect!" return 1.0000 + def getFramebufferScale(self): + aspect = self.getOutputAspect() + fb_size = getDesktop(0).size() + return aspect / ((1.0 * fb_size.width()) / fb_size.height()) + def getAspectRatioSetting(self): valstr = config.av.aspectratio.value if valstr == "4_3_letterbox": diff --git a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py index 2422475e..5e38f3e6 100644 --- a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py +++ b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py @@ -59,6 +59,34 @@ class VideoHardware: widescreen_modes = set(["720p", "1080i"]) + def getOutputAspect(self): + ret = 1.777777778 # 16:9 + port = config.av.videoport.value + if port not in config.av.videomode: + print "current port not available in getOutputAspect!!! force 16:9" + else: + mode = config.av.videomode[port].value + force_widescreen = self.isWidescreenMode(port, mode) + is_widescreen = force_widescreen or config.av.aspect.value in ["16_9", "16_10"] + is_auto = config.av.aspect.value == "auto" + if is_widescreen: + if force_widescreen: + pass + else: + aspect = {"16_9": "16:9", "16_10": "16:10"}[config.av.aspect.value] + if aspect == "16:10": + ret = 1.6 + elif is_auto: + try: + aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read() + if aspect_str == "1": # 4:3 + ret = 1.333333333 + except IOError: + pass + else: # 4:3 + ret = 1.333333333 + return ret + def __init__(self): self.last_modes_preferred = [ ] self.on_hotplug = CList() @@ -80,6 +108,7 @@ class VideoHardware: config.av.tvsystem.notifiers = [ ] config.av.wss.notifiers = [ ] AVSwitch.setInput = self.AVSwitchSetInput + AVSwitch.getOutputAspect = self.getOutputAspect config.av.aspect.addNotifier(self.updateAspect) config.av.wss.addNotifier(self.updateAspect) -- cgit v1.2.3 From 68687c79e44dbd66db07879bd25309f08e339ece Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 17 Nov 2008 23:12:48 +0100 Subject: picload.cpp: fix 32bpp pngs --- lib/gdi/picload.cpp | 65 ++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index b1dfd1a1..b9ca31aa 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -254,34 +254,33 @@ static unsigned char *bmp_load(const char *file, int *x, int *y) static unsigned char *png_load(const char *file, int *ox, int *oy) { - //static const png_color_16 my_background = {0, 0, 0, 0, 0}; - png_structp png_ptr; - png_infop info_ptr; + static const png_color_16 my_background = {0, 0, 0, 0, 0}; + png_uint_32 width, height; unsigned int i; int bit_depth, color_type, interlace_type; - int number_passes, pass; - png_byte * fbptr; - FILE * fh; + png_byte *fbptr; + FILE *fh; - if (!(fh = fopen(file, "rb"))) return NULL; + if (!(fh = fopen(file, "rb"))) + return NULL; - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) return NULL; - info_ptr = png_create_info_struct(png_ptr); + png_infop info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); - fclose(fh); + fclose(fh); return NULL; } if (setjmp(png_ptr->jmpbuf)) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); - fclose(fh); - return 0; + fclose(fh); + return NULL; } png_init_io(png_ptr, fh); @@ -289,40 +288,44 @@ static unsigned char *png_load(const char *file, int *ox, int *oy) png_read_info(png_ptr, info_ptr); png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); - if ((color_type == PNG_COLOR_TYPE_PALETTE)||(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)||(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) - png_set_expand(png_ptr); - if (bit_depth == 16) - png_set_strip_16(png_ptr); + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + png_set_palette_to_rgb(png_ptr); + png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); + } if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { png_set_gray_to_rgb(png_ptr); + png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); + } + if (color_type & PNG_COLOR_MASK_ALPHA) + png_set_strip_alpha(png_ptr); - number_passes = png_set_interlace_handling(png_ptr); - png_read_update_info(png_ptr, info_ptr); + if (bit_depth < 8) + png_set_packing(png_ptr); - int bpp = png_get_rowbytes(png_ptr, info_ptr)/width; - if ((bpp !=4) && (bpp !=3)) - { - eDebug("[PNG] Error processing"); - return 0; - } + if (bit_depth == 16) + png_set_strip_16(png_ptr); + + int number_passes = png_set_interlace_handling(png_ptr); + png_read_update_info(png_ptr, info_ptr); - if (width * height > 1000000) // 1000x1000 or equiv. + if (width * 3 != png_get_rowbytes(png_ptr, info_ptr)) { - eDebug("[png_load] image size is %d x %d, which is \"too large\".", (int)width, (int)height); - png_read_end(png_ptr, info_ptr); + eDebug("[Picload] Error processing"); png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); fclose(fh); - return 0; + return NULL; } - unsigned char *pic_buffer = new unsigned char[width * height * bpp]; + unsigned char *pic_buffer = new unsigned char[height * width * 3]; *ox=width; *oy=height; - for(pass = 0; pass < number_passes; pass++) + for(int pass = 0; pass < number_passes; pass++) { fbptr = (png_byte *)pic_buffer; - for (i = 0; i < height; i++, fbptr += width * bpp) + for (i = 0; i < height; i++, fbptr += width * 3) png_read_row(png_ptr, fbptr, NULL); } png_read_end(png_ptr, info_ptr); -- cgit v1.2.3 From 9ca172f45cc02fe5cb693e7d35aade7d2233d448 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 17 Nov 2008 23:14:29 +0100 Subject: picload: more simple non async decode (deprecated) --- lib/gdi/picload.cpp | 86 ++++++++++++++++++++++++++++------------------------- lib/gdi/picload.h | 6 ++-- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index b9ca31aa..f67507ca 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -790,9 +790,9 @@ void ePicLoad::gotMessage(const Message &msg) } } -int ePicLoad::startThread(int what, const char *file, int x, int y) +int ePicLoad::startThread(int what, const char *file, int x, int y, bool async) { - if(threadrunning && m_filepara != NULL) + if(async && threadrunning && m_filepara != NULL) { eDebug("[Picload] thread running"); m_filepara->callback = false; @@ -836,22 +836,28 @@ int ePicLoad::startThread(int what, const char *file, int x, int y) return 1; } - if(what==1) - msg_thread.send(Message(Message::decode_Pic)); + if (async) { + if(what==1) + msg_thread.send(Message(Message::decode_Pic)); + else + msg_thread.send(Message(Message::decode_Thumb)); + run(); + } + else if (what == 1) + decodePic(); else - msg_thread.send(Message(Message::decode_Thumb)); - run(); + decodeThumb(); return 0; } -RESULT ePicLoad::startDecode(const char *file, int x, int y) +RESULT ePicLoad::startDecode(const char *file, int x, int y, bool async) { - return startThread(1, file, x, y); + return startThread(1, file, x, y, async); } -RESULT ePicLoad::getThumbnail(const char *file, int x, int y) +RESULT ePicLoad::getThumbnail(const char *file, int x, int y, bool async) { - return startThread(0, file, x, y); + return startThread(0, file, x, y, async); } PyObject *ePicLoad::getInfo(const char *filename) @@ -1003,28 +1009,29 @@ int ePicLoad::getData(ePtr &result) RESULT ePicLoad::setPara(PyObject *val) { - if (!PyList_Check(val)) + if (!PySequence_Check(val)) return 0; - if (PyList_Size(val) < 6) + if (PySequence_Size(val) < 6) return 0; - - m_conf.max_x = PyInt_AsLong( PyList_GET_ITEM(val, 0)); - m_conf.max_y = PyInt_AsLong( PyList_GET_ITEM(val, 1)); - m_conf.aspect_ratio = PyFloat_AsDouble( PyList_GET_ITEM(val, 2)); - m_conf.usecache = PyInt_AsLong( PyList_GET_ITEM(val, 3)); - m_conf.resizetype = PyInt_AsLong( PyList_GET_ITEM(val, 4)); - const char *bg_str = PyString_AsString( PyList_GET_ITEM(val, 5)); + else { + ePyObject fast = PySequence_Fast(val, ""); + m_conf.max_x = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 0)); + m_conf.max_y = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 1)); + m_conf.aspect_ratio = PyFloat_AsDouble( PySequence_Fast_GET_ITEM(val, 2)); + m_conf.usecache = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 3)); + m_conf.resizetype = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 4)); + const char *bg_str = PyString_AsString( PySequence_Fast_GET_ITEM(val, 5)); - if(bg_str[0] == '#' && strlen(bg_str)==9) - { - int bg = strtoul(bg_str+1, NULL, 16); - m_conf.background[0] = bg&0xFF; //BB - m_conf.background[1] = (bg>>8)&0xFF; //GG - m_conf.background[2] = (bg>>16)&0xFF; //RR - m_conf.background[3] = bg>>24; //AA + if(bg_str[0] == '#' && strlen(bg_str)==9) + { + int bg = strtoul(bg_str+1, NULL, 16); + m_conf.background[0] = bg&0xFF; //BB + m_conf.background[1] = (bg>>8)&0xFF; //GG + m_conf.background[2] = (bg>>16)&0xFF; //RR + m_conf.background[3] = bg>>24; //AA + } + eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]); } - - eDebug("[Picload] setPara max-X=%d max-Y=%d aspect_ratio=%lf cache=%d resize=%d bg=#%02X%02X%02X%02X", m_conf.max_x, m_conf.max_y, m_conf.aspect_ratio, (int)m_conf.usecache, (int)m_conf.resizetype, m_conf.background[3], m_conf.background[2], m_conf.background[1], m_conf.background[0]); return 1; } @@ -1046,24 +1053,21 @@ SWIG_VOID(int) loadPic(ePtr &result, std::string filename, int x, int y default: aspect_ratio = 1.333 / ((double)720/576); //4:3 } - ePyObject list = PyList_New(6); - PyList_SET_ITEM(list, 0, PyLong_FromLong(x)); - PyList_SET_ITEM(list, 1, PyLong_FromLong(y)); - PyList_SET_ITEM(list, 2, PyFloat_FromDouble(aspect_ratio)); - PyList_SET_ITEM(list, 3, PyLong_FromLong(0)); - PyList_SET_ITEM(list, 4, PyLong_FromLong(resize_mode)); + ePyObject tuple = PyTuple_New(6); + PyTuple_SET_ITEM(tuple, 0, PyLong_FromLong(x)); + PyTuple_SET_ITEM(tuple, 1, PyLong_FromLong(y)); + PyTuple_SET_ITEM(tuple, 2, PyFloat_FromDouble(aspect_ratio)); + PyTuple_SET_ITEM(tuple, 3, PyLong_FromLong(0)); + PyTuple_SET_ITEM(tuple, 4, PyLong_FromLong(resize_mode)); if(background) - PyList_SET_ITEM(list, 5, PyString_FromString("#ff000000")); + PyTuple_SET_ITEM(tuple, 5, PyString_FromString("#ff000000")); else - PyList_SET_ITEM(list, 5, PyString_FromString("#00000000")); + PyTuple_SET_ITEM(tuple, 5, PyString_FromString("#00000000")); - mPL.setPara(list); + mPL.setPara(tuple); - if(!mPL.startDecode(filename.c_str())) - { - mPL.waitFinished(); // this blocks until the thread is finished + if(!mPL.startDecode(filename.c_str(), 0, 0, false)) mPL.getData(result); - } return 0; } diff --git a/lib/gdi/picload.h b/lib/gdi/picload.h index 6a0f70b9..f64fd2f9 100644 --- a/lib/gdi/picload.h +++ b/lib/gdi/picload.h @@ -85,7 +85,7 @@ class ePicLoad: public eMainloop, public eThread, public Object, public iObject void gotMessage(const Message &message); void thread(); - int startThread(int what, const char *file, int x, int y); + int startThread(int what, const char *file, int x, int y, bool async=true); void thread_finished(); public: void waitFinished(); @@ -94,8 +94,8 @@ public: ePicLoad(); ~ePicLoad(); - RESULT startDecode(const char *filename, int x=0, int y=0); - RESULT getThumbnail(const char *filename, int x=0, int y=0); + RESULT startDecode(const char *filename, int x=0, int y=0, bool async=true); + RESULT getThumbnail(const char *filename, int x=0, int y=0, bool async=true); RESULT setPara(PyObject *val); PyObject *getInfo(const char *filename); SWIG_VOID(int) getData(ePtr &SWIG_OUTPUT); -- cgit v1.2.3 From cd51d1c8a2ec341b4202689e693b7bf012610d0d Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:17:46 +0100 Subject: change hotplugNotifier to return correct state transition for cd-rom type and flash type devices --- lib/python/Plugins/SystemPlugins/Hotplug/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py index 97ddf4a1..e593e942 100644 --- a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py @@ -53,7 +53,7 @@ class Hotplug(Protocol): for callback in hotplugNotifier: try: - callback(dev, media_state) + callback(dev, action or media_state) except AttributeError: hotplugNotifier.remove(callback) -- cgit v1.2.3 From 53a9e8c65ffb3c83736be784c894c57beca5bde5 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:20:56 +0100 Subject: use new hotplugNotifier return value to clear playlist if audio CD was removed --- .../Plugins/Extensions/MediaPlayer/plugin.py | 27 +++++++++++++--------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 0d5305d7..babef3e7 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -863,17 +863,22 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self.session.open(Subtitles) def hotplugCB(self, dev, media_state): - if dev == harddiskmanager.getCD(): - from Components.Scanner import scanDevice - devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()) - self.cdAudioTrackFiles = [] - res = scanDevice(devpath) - list = [ (r.description, r, res[r], self.session) for r in res ] - if list: - (desc, scanner, files, session) = list[0] - for file in files: - if file.mimetype == "audio/x-cda": - self.cdAudioTrackFiles.append(file.path) + if dev == harddiskmanager.getCD(): + if media_state == "1": + from Components.Scanner import scanDevice + devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()) + self.cdAudioTrackFiles = [] + res = scanDevice(devpath) + list = [ (r.description, r, res[r], self.session) for r in res ] + if list: + (desc, scanner, files, session) = list[0] + for file in files: + if file.mimetype == "audio/x-cda": + self.cdAudioTrackFiles.append(file.path) + else: + self.cdAudioTrackFiles = [] + if self.isAudioCD: + self.clear_playlist() class MediaPlayerLCDScreen(Screen): skin = """ -- cgit v1.2.3 From 95b10a03763a432c7d5940cc83d9e4fa9ed3cc7c Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:22:01 +0100 Subject: use hotplugNotifier to ease use of NFIFlash plugin. change some excess status bar translatables to static english. --- .../Plugins/SystemPlugins/NFIFlash/downloader.py | 50 +++++++++------------- .../Plugins/SystemPlugins/NFIFlash/flasher.py | 10 ++--- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py index c2046af7..7e34d2bb 100644 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py @@ -18,6 +18,7 @@ import urllib from twisted.web import client from twisted.internet import reactor, defer from twisted.python import failure +from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier class UserRequestedCancel(Exception): pass @@ -335,7 +336,7 @@ class NFIDownload(Screen): self.download = self.nfo_download self.downloading(True) client.getPage(nfourl).addCallback(self.nfo_finished).addErrback(self.nfo_failed) - self["statusbar"].text = _("Downloading image description...") + self["statusbar"].text = ("Downloading image description...") def nfo_failed(self, failure_instance): print "[nfo_failed] " + str(failure_instance) @@ -400,7 +401,7 @@ class NFIDownload(Screen): pos = self.nfo.find("MD5:") if pos > 0 and len(self.nfo) >= pos+5+32: - self["statusbar"].text = _("Please wait for md5 signature verification...") + self["statusbar"].text = ("Please wait for md5 signature verification...") cmd = "md5sum -c -" md5 = self.nfo[pos+5:pos+5+32] + " " + self.nfilocal print cmd, md5 @@ -489,33 +490,22 @@ class NFIDownload(Screen): def umount_finished(self, retval): self.container.appClosed.remove(self.umount_finished) - self.session.openWithCallback(self.dmesg_clear, MessageBox, _("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."), MessageBox.TYPE_INFO) - - def dmesg_clear(self, answer): self.container.appClosed.append(self.dmesg_cleared) self.taskstring = "" self.cmd = "dmesg -c" print "executing " + self.cmd self.container.execute(self.cmd) - def dmesg_cleared(self, retval): + def dmesg_cleared(self, answer): self.container.appClosed.remove(self.dmesg_cleared) - self.session.openWithCallback(self.stick_back_in, MessageBox, (_("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.")), MessageBox.TYPE_INFO) - - def stick_back_in(self, answer): - self["statusbar"].text = _("Waiting for USB stick to settle...") - self.delayTimer = eTimer() - self.delayTimer.callback.append(self.waiting_for_stick) - self.delayCount = -1 - self.delayTimer.start(1000) - - def waiting_for_stick(self): - self.delayCount += 1 - self["job_progressbar"].range = 6 - self["job_progressbar"].value = self.delayCount - self["job_progresslabel"].text = "-%d s" % (6-self.delayCount) - if self.delayCount > 5: - self.delayTimer.stop() + self.msgbox = self.session.open(MessageBox, _("Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"), MessageBox.TYPE_INFO) + hotplugNotifier.append(self.hotplugCB) + + def hotplugCB(self, dev, action): + print "[hotplugCB]", dev, action + if dev.startswith("sd") and action == "add": + self.msgbox.close() + hotplugNotifier.remove(self.hotplugCB) self.container.appClosed.append(self.dmesg_scanned) self.taskstring = "" self.cmd = "dmesg" @@ -539,8 +529,8 @@ class NFIDownload(Screen): self.session.openWithCallback(self.fdisk_query, MessageBox, (_("The following device was found:\n\n%s\n\nDo you want to write the USB flasher to this stick?") % self.devicetext), MessageBox.TYPE_YESNO) def fdisk_query(self, answer): - if answer == True: - self["statusbar"].text = _("Partitioning USB stick...") + if answer == True and self.stickdevice: + self["statusbar"].text = ("Partitioning USB stick...") self["job_progressbar"].range = 1000 self["job_progressbar"].value = 100 self["job_progresslabel"].text = "5.00%" @@ -562,7 +552,7 @@ class NFIDownload(Screen): self.tar_finished(0) self["job_progressbar"].value = 700 else: - self["statusbar"].text = _("Decompressing USB stick flasher boot image...") + self["statusbar"].text = ("Decompressing USB stick flasher boot image...") self.taskstring = "" self.container.appClosed.append(self.tar_finished) self.container.setCWD("/tmp") @@ -588,7 +578,7 @@ class NFIDownload(Screen): self.container.appClosed.remove(self.tar_finished) if retval == 0: self.imagefilename = "/tmp/nfiflash_" + self.box + ".img" - self["statusbar"].text = _("Copying USB flasher boot image to stick...") + self["statusbar"].text = ("Copying USB flasher boot image to stick...") self.taskstring = "" self.container.appClosed.append(self.dd_finished) self.cmd = "dd if=%s of=%s" % (self.imagefilename,self.stickdevice+"/part1") @@ -607,7 +597,7 @@ class NFIDownload(Screen): if retval == 0: self["job_progressbar"].value = 950 self["job_progresslabel"].text = "95.00%" - self["statusbar"].text = _("Remounting stick partition...") + self["statusbar"].text = ("Remounting stick partition...") self.taskstring = "" self.container.appClosed.append(self.mount_finished) self.cmd = "mount %s /mnt/usb -o rw,sync" % (self.stickdevice+"/part1") @@ -622,7 +612,7 @@ class NFIDownload(Screen): if retval == 0: self["job_progressbar"].value = 1000 self["job_progresslabel"].text = "100.00%" - self["statusbar"].text = _(".NFI Flasher bootable USB stick successfully created.") + self["statusbar"].text = (".NFI Flasher bootable USB stick successfully created.") self.session.openWithCallback(self.remove_img, MessageBox, _("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!"), MessageBox.TYPE_INFO) self["destlist"].changeDir("/mnt/usb") else: @@ -659,8 +649,8 @@ def filescan(**kwargs): Scanner(mimetypes = ["application/x-dream-image"], paths_to_scan = [ - ScanPath(path = "", with_subdirs = False), + ScanPath(path = "", with_subdirs = False), ], name = "NFI", - description = (_("Download .NFI-Files for USB-Flasher")+"..."), + description = (_("Download .NFI-Files for USB-Flasher")+"..."), openfnc = filescan_open, ) diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py index 6a982c58..860efc02 100644 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py @@ -17,7 +17,7 @@ import re class writeNAND(Task): def __init__(self,job,param,box): - Task.__init__(self,job, _("Writing image file to NAND Flash")) + Task.__init__(self,job, ("Writing image file to NAND Flash")) self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/mywritenand") if box == "dm7025": self.end = 256 @@ -26,7 +26,7 @@ class writeNAND(Task): if box == "dm8000": self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/dm8000_writenand") self.args += param - self.weighting = 1 + self.weighting = 1 def processOutput(self, data): print "[writeNand] " + data @@ -174,8 +174,8 @@ class NFIFlash(Screen): print sign if sign.find("NFI1" + self.box + "\0") == 0: if self.md5sum != "": - self["statusbar"].text = _("Please wait for md5 signature verification...") - self.session.summary.setText(_("Please wait for md5 signature verification...")) + self["statusbar"].text = ("Please wait for md5 signature verification...") + self.session.summary.setText(("Please wait for md5 signature verification...")) self.container = eConsoleAppContainer() self.container.setCWD(self["filelist"].getCurrentDirectory()) self.container.appClosed.append(self.md5finished) @@ -252,7 +252,7 @@ class NFIFlash(Screen): def reboot(self): if self.job.status == self.job.FINISHED: - self["statusbar"].text = _("rebooting...") + self["statusbar"].text = ("rebooting...") TryQuitMainloop(self.session,2) def createSummary(self): -- cgit v1.2.3 From e7364f6c8cd59562884f895042980b88a962c945 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:24:20 +0100 Subject: show dvd burn jobs running in background in main menu and fix potential crash on aborting during CheckDiskspaceTask --- lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py index b88dbb3f..ce16259e 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py @@ -63,7 +63,7 @@ class DVDToolbox(Screen): def pageDown(self): self["details"].pageDown() - def update(self, dev="", media_state=""): + def update(self, dev="", action=""): self["space_label"].text = _("Please wait... Loading list...") self["info"].text = "" self["details"].setText("") -- cgit v1.2.3 From c2ec827d12f170cb4bee1a42be9e454c7174207b Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:29:31 +0100 Subject: show dvd burn jobs running in background in main menu and fix potential crash on aborting during CheckDiskspaceTask --- lib/python/Plugins/Extensions/DVDBurn/Process.py | 3 +++ lib/python/Plugins/Extensions/DVDBurn/TitleList.py | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 89ca90fd..946b44ad 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -368,6 +368,9 @@ class CheckDiskspaceTask(Task): self.global_preconditions.append(DiskspacePrecondition(diskSpaceNeeded)) self.weighting = 5 + def abort(self): + self.finish(aborted = True) + def run(self, callback): failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False) if len(failed_preconditions): diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py index 345af877..537da0dd 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py +++ b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py @@ -74,9 +74,22 @@ class TitleList(Screen, HelpableScreen): self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)]) self.updateTitleList() - + + def checkBackgroundJobs(self): + for job in job_manager.getPendingJobs(): + print "type(job):", type(job) + print "Process.DVDJob:", Process.DVDJob + if type(job) == Process.DVDJob: + self.backgroundJob = job + return + self.backgroundJob = None + def showMenu(self): menu = [] + self.checkBackgroundJobs() + if self.backgroundJob: + j = self.backgroundJob + menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob)) if self.project.settings.output.getValue() == "dvd": menu.append((_("Burn DVD"), self.burnProject)) elif self.project.settings.output.getValue() == "iso": @@ -97,6 +110,11 @@ class TitleList(Screen, HelpableScreen): if choice: choice[1]() + def showBackgroundJob(self): + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, self.backgroundJob) + self.backgroundJob = None + def titleProperties(self): if self.getCurrentTitle(): self.session.openWithCallback(self.updateTitleList, TitleProperties.TitleProperties, self, self.project, self["titles"].getIndex()) @@ -217,7 +235,7 @@ class TitleList(Screen, HelpableScreen): totalsize += title.estimatedDiskspace self["titles"].list = res self.updateSize(totalsize) - + def updateSize(self, totalsize): size = int((totalsize/1024)/1024) max_SL = 4370 -- cgit v1.2.3 From a8e2ae086f201762677d9f926b75285d1c299ab2 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:29:39 +0100 Subject: remove superfluous import --- lib/python/Screens/InfoBarGenerics.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index cdaa2c1e..eb79c74e 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1312,7 +1312,6 @@ class InfoBarJobman: self.session.openWithCallback(self.JobViewCB, JobView, job) def JobViewCB(self, in_background): - from Screens.TaskView import JobView job_manager.in_background = in_background # depends on InfoBarExtensions -- cgit v1.2.3 From f38670a4ea4d6dc6206e6bd99ad25943d0bf3602 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:33:56 +0100 Subject: do remove elementary stream files... and do it correctly! --- lib/python/Plugins/Extensions/DVDBurn/Process.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 946b44ad..750e9d9b 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -165,7 +165,7 @@ class DemuxTask(Task): def cleanup(self, failed): if failed: import os - for file in self.generated_files.itervalues(): + for file in self.generated_files: os.remove(file) class MplexTaskPostcondition(Condition): @@ -220,7 +220,7 @@ class RemoveESFiles(Task): def prepare(self): self.args += ["-f"] - self.args += self.demux_task.generated_files.values() + self.args += self.demux_task.generated_files self.args += [self.demux_task.cutfile] class DVDAuthorTask(Task): @@ -794,7 +794,7 @@ class DVDJob(Job): demux = DemuxTask(self, link_name) self.mplextask = MplexTask(self, outputfile=title_filename, demux_task=demux) self.mplextask.end = self.estimateddvdsize - #RemoveESFiles(self, demux) + RemoveESFiles(self, demux) WaitForResidentTasks(self) PreviewTask(self, self.workspace + "/dvd/VIDEO_TS/") output = self.project.settings.output.getValue() -- cgit v1.2.3 From 5aa89f34249397330995cc0ab1e080c1f567e174 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 17 Nov 2008 23:34:41 +0100 Subject: get rid of some floating point values --- lib/gdi/picload.cpp | 35 +++++++++++----------- lib/python/Components/AVSwitch.py | 14 ++++----- .../Plugins/Extensions/PicturePlayer/plugin.py | 14 +++++---- .../SystemPlugins/Videomode/VideoHardware.py | 8 ++--- 4 files changed, 36 insertions(+), 35 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index f67507ca..375f33fb 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -1011,16 +1011,16 @@ RESULT ePicLoad::setPara(PyObject *val) { if (!PySequence_Check(val)) return 0; - if (PySequence_Size(val) < 6) + if (PySequence_Size(val) < 7) return 0; else { ePyObject fast = PySequence_Fast(val, ""); m_conf.max_x = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 0)); m_conf.max_y = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 1)); - m_conf.aspect_ratio = PyFloat_AsDouble( PySequence_Fast_GET_ITEM(val, 2)); - m_conf.usecache = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 3)); - m_conf.resizetype = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 4)); - const char *bg_str = PyString_AsString( PySequence_Fast_GET_ITEM(val, 5)); + m_conf.aspect_ratio = (double)PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 2)) / PyInt_AsLong(PySequence_Fast_GET_ITEM(val, 3)); + m_conf.usecache = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 4)); + m_conf.resizetype = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 5)); + const char *bg_str = PyString_AsString( PySequence_Fast_GET_ITEM(val, 6)); if(bg_str[0] == '#' && strlen(bg_str)==9) { @@ -1040,29 +1040,30 @@ RESULT ePicLoad::setPara(PyObject *val) //for old plugins SWIG_VOID(int) loadPic(ePtr &result, std::string filename, int x, int y, int aspect, int resize_mode, int rotate, int background, std::string cachefile) { + long asp1, asp2; result = 0; eDebug("deprecated loadPic function used!!! please use the non blocking version! you can see demo code in Pictureplayer plugin... this function is removed in the near future!"); ePicLoad mPL; - double aspect_ratio; switch(aspect) { - case 1: aspect_ratio = 1.778 / ((double)720/576); break; //16:9 - case 2: aspect_ratio = 1.600 / ((double)720/576); break; //16:10 - case 3: aspect_ratio = 1.250 / ((double)720/576); break; //5:4 - default: aspect_ratio = 1.333 / ((double)720/576); //4:3 + case 1: asp1 = 16*576, asp2 = 9*720; break; //16:9 + case 2: asp1 = 16*576, asp2 = 10*720; break; //16:10 + case 3: asp1 = 5*576, asp2 = 4*720; break; //5:4 + default: asp1 = 4*576, asp2 = 3*720; break; //4:3 } - - ePyObject tuple = PyTuple_New(6); + + ePyObject tuple = PyTuple_New(7); PyTuple_SET_ITEM(tuple, 0, PyLong_FromLong(x)); PyTuple_SET_ITEM(tuple, 1, PyLong_FromLong(y)); - PyTuple_SET_ITEM(tuple, 2, PyFloat_FromDouble(aspect_ratio)); - PyTuple_SET_ITEM(tuple, 3, PyLong_FromLong(0)); - PyTuple_SET_ITEM(tuple, 4, PyLong_FromLong(resize_mode)); + PyTuple_SET_ITEM(tuple, 2, PyLong_FromLong(asp1)); + PyTuple_SET_ITEM(tuple, 3, PyLong_FromLong(asp2)); + PyTuple_SET_ITEM(tuple, 4, PyLong_FromLong(0)); + PyTuple_SET_ITEM(tuple, 5, PyLong_FromLong(resize_mode)); if(background) - PyTuple_SET_ITEM(tuple, 5, PyString_FromString("#ff000000")); + PyTuple_SET_ITEM(tuple, 6, PyString_FromString("#ff000000")); else - PyTuple_SET_ITEM(tuple, 5, PyString_FromString("#00000000")); + PyTuple_SET_ITEM(tuple, 6, PyString_FromString("#00000000")); mPL.setPara(tuple); diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py index 19aca24d..00350cbb 100644 --- a/lib/python/Components/AVSwitch.py +++ b/lib/python/Components/AVSwitch.py @@ -30,26 +30,24 @@ class AVSwitch: def getOutputAspect(self): if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3 - return 1.333333333 + return (4,3) elif valstr == "16_9": # auto ... 4:3 or 16:9 try: aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read() if aspect_str == "1": # 4:3 - return 1.333333333 + return (4,3) except IOError: pass - return 1.777777778 elif valstr in ("16_9_always", "16_9_letterbox"): # 16:9 - return 1.777777778 + pass elif valstr in ("16_10_letterbox", "16_10_panscan"): # 16:10 - return 1.6 - print "unknown output aspect!" - return 1.0000 + return (16,10) + return (16,9) def getFramebufferScale(self): aspect = self.getOutputAspect() fb_size = getDesktop(0).size() - return aspect / ((1.0 * fb_size.width()) / fb_size.height()) + return (aspect[0] * fb_size.height(), aspect[1] * fb_size.width()) def getAspectRatioSetting(self): valstr = config.av.aspectratio.value diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py index 7d62d2be..0cdab563 100644 --- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py +++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py @@ -15,7 +15,7 @@ from Components.ConfigList import ConfigList from Components.config import config, ConfigSubsection, ConfigInteger, ConfigSelection, ConfigText, ConfigEnableDisable, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry -def getAspectforPic(): +def getScale(): return AVSwitch().getFramebufferScale() config.pic = ConfigSubsection() @@ -119,8 +119,9 @@ class picshow(Screen): self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory()) def setConf(self): + sc = getScale() #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB) - self.picload.setPara([self["thn"].instance.size().width(), self["thn"].instance.size().height(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), "#00000000"]) + self.picload.setPara((self["thn"].instance.size().width(), self["thn"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), "#00000000")) def callbackView(self, val=0): if val > 0: @@ -311,10 +312,10 @@ class Pic_Thumb(Screen): self.ThumbTimer.callback.append(self.showPic) def setPicloadConf(self): - self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), self.color]) + sc = getScale() + self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), self.color]) self.paintFrame() - - + def paintFrame(self): #print "index=" + str(self.index) if self.maxentry < self.index or self.index < 0: @@ -468,7 +469,8 @@ class Pic_Full_View(Screen): self.onLayoutFinish.append(self.setPicloadConf) def setPicloadConf(self): - self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), getAspectforPic(), 0, int(config.pic.resize.value), self.bgcolor]) + sc = getScale() + self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), sc[0], sc[1], 0, int(config.pic.resize.value), self.bgcolor]) self["play_icon"].hide() if config.pic.infoline.value == False: diff --git a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py index 5e38f3e6..02fdf9a5 100644 --- a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py +++ b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py @@ -60,7 +60,7 @@ class VideoHardware: widescreen_modes = set(["720p", "1080i"]) def getOutputAspect(self): - ret = 1.777777778 # 16:9 + ret = (16,9) port = config.av.videoport.value if port not in config.av.videomode: print "current port not available in getOutputAspect!!! force 16:9" @@ -75,16 +75,16 @@ class VideoHardware: else: aspect = {"16_9": "16:9", "16_10": "16:10"}[config.av.aspect.value] if aspect == "16:10": - ret = 1.6 + ret = (16,10) elif is_auto: try: aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read() if aspect_str == "1": # 4:3 - ret = 1.333333333 + ret = (4,3) except IOError: pass else: # 4:3 - ret = 1.333333333 + ret = (4,3) return ret def __init__(self): -- cgit v1.2.3 From 0aaff23c4b0ef5a1a8b21489fe00f1ac94cfc1f6 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 18 Nov 2008 12:14:35 +0100 Subject: esubtitle.cpp: initialize uninitialized varible... this fixes not working or rarely working dvb subtitles --- lib/gui/esubtitle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/gui/esubtitle.cpp b/lib/gui/esubtitle.cpp index c837afc6..085a749a 100644 --- a/lib/gui/esubtitle.cpp +++ b/lib/gui/esubtitle.cpp @@ -16,6 +16,7 @@ eSubtitleWidget::eSubtitleWidget(eWidget *parent) setBackgroundColor(gRGB(0,0,0,255)); m_page_ok = 0; m_dvb_page_ok = 0; + m_pango_page_ok = 0; CONNECT(m_hide_subtitles_timer->timeout, eSubtitleWidget::clearPage); } -- cgit v1.2.3 From 5cb7cb980986fe89da490d8d5c2a73b935844724 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:04:38 +0100 Subject: use already translated string --- lib/python/Plugins/Extensions/PicturePlayer/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py index 0cdab563..aeca12dc 100644 --- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py +++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py @@ -202,7 +202,7 @@ class Pic_Exif(Screen): "cancel": self.close }, -1) - exifdesc = [_("Filename:"), "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"] + exifdesc = [_("filename")+':', "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"] list = [] for x in range(len(exiflist)): -- cgit v1.2.3 From 93105cf34883745d8d886de926631d25c587a1f2 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:14:29 +0100 Subject: locale update for NFIFlash --- po/de.po | 97 ++++++++++++++++++++++------------------------------------------ 1 file changed, 33 insertions(+), 64 deletions(-) diff --git a/po/de.po b/po/de.po index 75186438..e9257bfa 100755 --- a/po/de.po +++ b/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-14 23:57+0100\n" -"PO-Revision-Date: 2008-11-14 23:41+0100\n" +"POT-Creation-Date: 2008-11-18 12:42+0100\n" +"PO-Revision-Date: 2008-11-18 13:00+0100\n" "Last-Translator: Andreas Frisch \n" "Language-Team: none\n" "MIME-Version: 1.0\n" @@ -743,9 +743,6 @@ msgstr "Abspielen fortsetzen" msgid "Contrast" msgstr "Kontrast" -msgid "Copying USB flasher boot image to stick..." -msgstr "" - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "" @@ -822,9 +819,6 @@ msgstr "Dänisch" msgid "Date" msgstr "Datum" -msgid "Decompressing USB stick flasher boot image..." -msgstr "" - msgid "Deep Standby" msgstr "Ausschalten" @@ -858,7 +852,7 @@ msgid "Description" msgstr "Beschreibung" msgid "Destination directory" -msgstr "Zielverzeichniss" +msgstr "Zielverzeichnis" msgid "Detected HDD:" msgstr "Erkannte Festplatte:" @@ -1039,9 +1033,6 @@ msgstr "Herunterladbare Erweiterungen" msgid "Downloading" msgstr "Herunterladen" -msgid "Downloading image description..." -msgstr "" - msgid "Downloading plugin information. Please wait..." msgstr "Lade Plugin-Informationen herunter. Bitte warten..." @@ -1124,9 +1115,6 @@ msgstr "Passwortverschlüsselungstyp" msgid "Encryption Type" msgstr "Verschlüssellungsart" -msgid "End" -msgstr "Ende" - msgid "End time" msgstr "Endzeit" @@ -1269,12 +1257,8 @@ msgstr "Netzwerkneustart abgeschlossen" msgid "Finnish" msgstr "Finnisch" -msgid "" -"First we need to download the latest boot environment for the USB flasher." -msgstr "" - -msgid "Fix USB stick" -msgstr "" +msgid "First we need to download the latest boot environment for the USB flasher." +msgstr "Zuerst muss die neueste Bootumgebung für den USB-Flasher heruntergeladen werden." msgid "Flash" msgstr "" @@ -1863,7 +1847,7 @@ msgstr "" "Bitte die Tuner konfigurieren bevor die Kanalsuche gestartet wird." msgid "No useable USB stick found" -msgstr "" +msgstr "Kein nutzbarer USB-Stick gefunden" msgid "" "No valid service PIN found!\n" @@ -1994,9 +1978,6 @@ msgstr "" msgid "Orbital Position" msgstr "Orbitposition" -msgid "Other..." -msgstr "Andere..." - msgid "PAL" msgstr "PAL" @@ -2031,9 +2012,6 @@ msgstr "Jugendschutz-Einstellungen" msgid "Parental control type" msgstr "Jugendschutz-Typ" -msgid "Partitioning USB stick..." -msgstr "" - msgid "Pause movie at end" msgstr "Am Filmende pausieren" @@ -2081,8 +2059,10 @@ msgid "Please choose he package..." msgstr "Bitte wählen Sie das Paket aus..." msgid "Please choose the default services lists you want to install." -msgstr "" -"Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen." +msgstr "Bitte wählen Sie die Standard-Kanallisten, die Sie installieren wollen." + +msgid "Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!" +msgstr "Bitte ziehen Sie jetzt alle USB-Geräte von Ihrer Dreambox ab und stecken (erneut) den zu benutzenden USB-Stick (Mindestgrößte von 64 MB) ein!" msgid "Please do not change any values unless you know what you are doing!" msgstr "Bitte ändern Sie keine Werte, falls Sie nicht wissen, was Sie tun!" @@ -2174,9 +2154,6 @@ msgstr "" msgid "Please wait for activation of your network configuration..." msgstr "Bitte warten während die Netzwerkkonfiguration aktiviert wird..." -msgid "Please wait for md5 signature verification..." -msgstr "" - msgid "Please wait while we configure your network..." msgstr "Bitte warten während das Netzwerk konfiguriert wird..." @@ -2357,9 +2334,6 @@ msgstr "Bildwiederholrate" msgid "Refresh rate selection." msgstr "Auswahl der Bildwiederholungsrate." -msgid "Remounting stick partition..." -msgstr "" - msgid "Remove Bookmark" msgstr "Bookmark entfernen" @@ -2853,9 +2827,6 @@ msgstr "Standby" msgid "Standby / Restart" msgstr "Standby / Neustart" -msgid "Start" -msgstr "Start" - msgid "Start from the beginning" msgstr "Am Anfang starten" @@ -2978,21 +2949,11 @@ msgstr "" "Der Assistent ist hiermit beendet. Ihre Dreambox kann nun benutzt werden.\n" "Bitte drücken Sie OK, um den Assistenten zu verlassen." -msgid "" -"The .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 "" +msgid "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?" +msgstr "Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-Player abspielbar ist) erstellt werden?" -msgid "" -"The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to " -"create a Dreambox format data DVD (which will not play in stand-alone DVD " -"players) instead?" -msgstr "" -"Der DVD-Standard unterstützt keine H.264 (HDTV) Videos. Soll stattdessen " -"eine Daten-DVD im Dreambox-Format (die nicht in einem herkömmlichen DVD-" -"Player abspielbar ist) erstellt werden?" +msgid "The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?" +msgstr "Der USB-Stick ist nun bootfähig. Wollen Sie das neueste Image vom Update-Server herunterladen und auf dem Stick speichern?" msgid "The backup failed. Please choose a different backup location." msgstr "" @@ -3007,6 +2968,11 @@ msgid "" "\n" "Do you want to write the USB flasher to this stick?" msgstr "" +"Das folgende Medium wurde gefunden:\n" +"\n" +"%s\n" +"\n" +"Soll der USB-Flasher auf diesen Stick installiert werden?" msgid "" "The input port should be configured now.\n" @@ -3257,9 +3223,15 @@ msgid "Titleset mode" msgstr "Titleset" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." msgstr "" +"Um Ihre Dreambox-Firmware zu aktualisieren, folgen Sie bitte diesen Anweisungen:\n" +"1) Schalten Sie Ihre Dreambox mit dem Schalter auf der Rückseite aus und stecken Sie den bootfähigen USB-Stick ein.\n" +"2) Schalten Sie den Netzschalter wieder ein und halten dabei den \"nach unten\"-Knopf auf der Vorderseite für 10 Sekunden gedrückt.\n" +"3) Nach dem Bootvorgang folgen Sie bitten den Instruktionen des Assistenten." msgid "Today" msgstr "Heute" @@ -3348,6 +3320,12 @@ msgstr "USB" msgid "USB Stick" msgstr "USB-Stick" +msgid "USB stick wizard" +msgstr "" + +msgid "Ukrainian" +msgstr "" + msgid "" "Unable to complete filesystem check.\n" "Error: " @@ -3533,9 +3511,6 @@ msgstr "WSS bei 4:3" msgid "Waiting" msgstr "Warte" -msgid "Waiting for USB stick to settle..." -msgstr "" - msgid "" "We will now test if your TV can also display this resolution at 50hz. If " "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" @@ -3613,9 +3588,6 @@ msgstr "Schreiben fehlgeschlagen!" msgid "Writing NFI image file to flash completed" msgstr "" -msgid "Writing image file to NAND Flash" -msgstr "" - msgid "YPbPr" msgstr "YPbPr" @@ -3924,9 +3896,6 @@ msgstr "Negativliste" msgid "burn audio track (%s)" msgstr "Brenne die Audiospur (%s)" -msgid "by Exif" -msgstr "" - msgid "change recording (duration)" msgstr "Aufnahme ändern (Aufnahmelänge)" -- cgit v1.2.3 From 623abfc754b4a95f79f90cf0498300d16b52f894 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:14:46 +0100 Subject: scroll to bottom of output after execution --- lib/python/Screens/Console.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/python/Screens/Console.py b/lib/python/Screens/Console.py index b57f2400..c6b156cf 100644 --- a/lib/python/Screens/Console.py +++ b/lib/python/Screens/Console.py @@ -55,6 +55,7 @@ class Console(Screen): str = self["text"].getText() str += _("Execution finished!!"); self["text"].setText(str) + self["text"].lastPage() if self.finishedCallback is not None: self.finishedCallback() if not retval and self.closeOnSuccess: @@ -67,4 +68,4 @@ class Console(Screen): self.container.dataAvail.remove(self.dataAvail) def dataAvail(self, str): - self["text"].setText(self["text"].getText() + str) + self["text"].setText(self["text"].getText() + str) \ No newline at end of file -- cgit v1.2.3 From 219e5a3edf67e060c751b70419a8a5293fea169a Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:15:12 +0100 Subject: add isMount encapsulation --- lib/python/Tools/Directories.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/python/Tools/Directories.py b/lib/python/Tools/Directories.py index 2b60924c..0d238b30 100644 --- a/lib/python/Tools/Directories.py +++ b/lib/python/Tools/Directories.py @@ -126,6 +126,9 @@ def resolveFilename(scope, base = "", path_prefix = None): def pathExists(path): return os_path.exists(path) +def isMount(path): + return os_path.ismount(path) + def createDir(path, makeParents = False): try: if makeParents: -- cgit v1.2.3 From 0753892fd72a1aad2ae5bf9592786ab962622e5d Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:15:33 +0100 Subject: add automatic downloading of latest image and possibility of backing up configuration to the bootable usb sticks --- .../Plugins/SystemPlugins/NFIFlash/downloader.py | 60 ++++++++++++++++++---- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py index 7e34d2bb..160620fd 100644 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py @@ -120,10 +120,10 @@ class NFIDownload(Screen): - - - - + + + + @@ -170,6 +170,7 @@ class NFIDownload(Screen): self.box = HardwareInfo().get_device_name() self.feed_base = "http://www.dreamboxupdate.com/opendreambox/1.5/%s/images/" % self.box self.nfi_filter = "" # "release" # only show NFIs containing this string, or all if "" + self.wizard_mode = False self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "EPGSelectActions"], { @@ -206,7 +207,7 @@ class NFIDownload(Screen): self["key_yellow"].text = (_("Change dir.")) else: self["key_yellow"].text = (_("Select image")) - self["key_blue"].text = (_("Fix USB stick")) + self["key_blue"].text = (_("USB stick wizard")) def switchList(self,to_where=None): if self.download or not self["feedlist"].isValid(): @@ -400,7 +401,7 @@ class NFIDownload(Screen): print "couldn't save nfo file " + self.nfofilename pos = self.nfo.find("MD5:") - if pos > 0 and len(self.nfo) >= pos+5+32: + if pos > 0 and len(self.nfo) >= pos+5+32: self["statusbar"].text = ("Please wait for md5 signature verification...") cmd = "md5sum -c -" md5 = self.nfo[pos+5:pos+5+32] + " " + self.nfilocal @@ -416,6 +417,8 @@ class NFIDownload(Screen): else: self["statusbar"].text = "Download completed." self.downloading(False) + if self.wizard_mode: + self.configBackup() def md5ready(self, retval): self.download_container.sendEOF() @@ -424,9 +427,12 @@ class NFIDownload(Screen): print "[md5finished]: " + str(retval) self.download_container.appClosed.remove(self.md5finished) if retval==0: - self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!") - self.switchList(self.LIST_SOURCE) self.downloading(False) + if self.wizard_mode: + self.configBackup() + else: + self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!") + self.switchList(self.LIST_SOURCE) else: self.session.openWithCallback(self.nfi_remove, MessageBox, (_("The md5sum validation failed, the file may be downloaded incompletely or be corrupted!") + "\n" + _("Remove the broken .NFI file?")), MessageBox.TYPE_YESNO) @@ -613,10 +619,11 @@ class NFIDownload(Screen): self["job_progressbar"].value = 1000 self["job_progresslabel"].text = "100.00%" self["statusbar"].text = (".NFI Flasher bootable USB stick successfully created.") - self.session.openWithCallback(self.remove_img, MessageBox, _("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!"), MessageBox.TYPE_INFO) + self.session.openWithCallback(self.flasherFinishedCB, MessageBox, _("The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?"), type = MessageBox.TYPE_YESNO) self["destlist"].changeDir("/mnt/usb") else: - self.session.openWithCallback(self.remove_img, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR) + self.session.openWithCallback(self.flasherFinishedCB, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR) + self.remove_img(True) def remove_img(self, answer): if fileExists("/tmp/nfiflasher_image.tar.bz2"): @@ -626,6 +633,39 @@ class NFIDownload(Screen): self.downloading(False) self.switchList(self.LIST_SOURCE) + def flasherFinishedCB(self, answer): + if answer == True: + self.wizard_mode = True + self["feedlist"].moveSelection(0) + self["path_bottom"].text = str(self["destlist"].getCurrentDirectory()) + self.nfo_download() + self.nfi_download() + + def configBackup(self): + self.session.openWithCallback(self.runBackup, MessageBox, _("The wizard can backup your current settings. Do you want to do a backup now?")) + + def runBackup(self, result=None): + from Tools.Directories import createDir, isMount, pathExists + from time import localtime + from datetime import date + from Screens.Console import Console + if result: + if isMount("/mnt/usb/"): + if (pathExists("/mnt/usb/backup") == False): + createDir("/mnt/usb/backup", True) + d = localtime() + dt = date(d.tm_year, d.tm_mon, d.tm_mday) + self.backup_file = "backup/" + str(dt) + "_settings_backup.tar.gz" + self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + "/mnt/usb/" + self.backup_file + " /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"], finishedCallback = self.backup_finished, closeOnSuccess = True) + + def backup_finished(self): + wizardfd = open("/mnt/usb/wizard.nfo", "w") + if wizardfd: + wizardfd.write("image: "+self["feedlist"].getNFIname()+'\n') + wizardfd.write("configuration: "+self.backup_file+'\n') + wizardfd.close() + self.session.open(MessageBox, _("To update your Dreambox firmware, please follow these steps:\n1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n3) Wait for bootup and follow instructions of the wizard."), type = MessageBox.TYPE_INFO) + def closeCB(self): if self.download: self.download.stop() -- cgit v1.2.3 From b925b5213ddc05911ca9736cc22628c876f604f6 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:21:10 +0100 Subject: change some translations --- po/de.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/de.po b/po/de.po index e9257bfa..70cd99f3 100755 --- a/po/de.po +++ b/po/de.po @@ -4398,10 +4398,10 @@ msgid "select" msgstr "wähle" msgid "select .NFI flash file" -msgstr "Wähle eine .NFI Flashdatei" +msgstr "Wähle Sie eine .NFI Flashdatei" msgid "select image from server" -msgstr "Wähle ein Image vom Server" +msgstr "Wähle Sie ein Image vom Server" msgid "select interface" msgstr "Wähle einen Netzwerkadapter" -- cgit v1.2.3 From 71c070aafe23537ee96a68dbff46246d44476869 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 13:26:05 +0100 Subject: update tr,lt language --- po/lt.po | 101 +++++++++++++++++++++++++--------------- po/tr.po | 157 +++++++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 156 insertions(+), 102 deletions(-) mode change 100755 => 100644 po/lt.po diff --git a/po/lt.po b/po/lt.po old mode 100755 new mode 100644 index 6aecc954..3c00cccc --- a/po/lt.po +++ b/po/lt.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-16 23:21+0100\n" -"PO-Revision-Date: 2008-11-15 22:37+0200\n" +"POT-Creation-Date: 2008-11-18 13:25+0100\n" +"PO-Revision-Date: 2008-11-17 14:56+0200\n" "Last-Translator: Audronis, Grincevicius \n" "Language-Team: Adga / enigma2 (c) \n" "MIME-Version: 1.0\n" @@ -387,9 +387,6 @@ msgstr "Visi" msgid "All Satellites" msgstr "Visi palydovai" -msgid "All..." -msgstr "Visi..." - msgid "Alpha" msgstr "Permatoma" @@ -1122,9 +1119,6 @@ msgstr "Rakto užšifravimo tipas" msgid "Encryption Type" msgstr "Užšifravimo bÅ«das" -msgid "End" -msgstr "Pabaiga" - msgid "End time" msgstr "Pabaigos laikas" @@ -1813,7 +1807,7 @@ msgid "No HDD found or HDD not initialized!" msgstr "Kietas diskas nerastas arba neinicializuotas!" msgid "No Networks found" -msgstr "" +msgstr "Jokie Tinklai nesurasti" msgid "No backup needed" msgstr "AtsarginÄ—s kopijos nereikia" @@ -1850,6 +1844,9 @@ msgstr "NÄ—ra pozicionieriaus, kuris rastų priekinį kraÅ¡tÄ…." msgid "No satellite frontend found!!" msgstr "Nerastas palydovas!!" +msgid "No tags are set on these movies." +msgstr "" + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "NÄ—ra imtuvo, suderinto naudotis su diseqc pozicionieriumi!" @@ -2001,9 +1998,6 @@ msgstr "Tik nekoduotus" msgid "Orbital Position" msgstr "Pozicija orbitoje" -msgid "Other..." -msgstr "Kitas..." - msgid "PAL" msgstr "PAL" @@ -2146,8 +2140,8 @@ msgstr "PraÅ¡ome iÅ¡sirinkti subkanalÄ… dÄ—l įraÅ¡ymo..." msgid "Please select a subservice..." msgstr "PraÅ¡ome iÅ¡sirinkti subkanalÄ…..." -msgid "Please select keyword to filter..." -msgstr "PraÅ¡ome iÅ¡sirinkti raktinį žodį dÄ—l filtravimo..." +msgid "Please select tag to filter..." +msgstr "" msgid "Please select target directory or medium" msgstr "PraÅ¡ome iÅ¡sirinkti direktorijÄ… arba diskÄ…" @@ -2862,9 +2856,6 @@ msgstr "BudÄ—ti" msgid "Standby / Restart" msgstr "BudÄ—ti / Perkrauti" -msgid "Start" -msgstr "PradÄ—ti" - msgid "Start from the beginning" msgstr "Pradžia nuo pradžios" @@ -2965,6 +2956,15 @@ msgstr "TV sistema" msgid "Table of content for collection" msgstr "Turinio lentelÄ— dÄ—l kolekcijos" +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + msgid "Terrestrial" msgstr "AntžeminÄ—" @@ -3267,6 +3267,9 @@ msgstr "Laiko perst." msgid "Timeshift not possible!" msgstr "Laiko perstumimas negalimas!" +msgid "Timeshift path..." +msgstr "" + msgid "Timezone" msgstr "Laiko juosta" @@ -3379,7 +3382,7 @@ msgid "USB Stick" msgstr "USB raktelis" msgid "Ukrainian" -msgstr "" +msgstr "UkrainieÄių" msgid "" "Unable to complete filesystem check.\n" @@ -3426,7 +3429,7 @@ msgid "Upgrading Dreambox... Please wait" msgstr "Atnaujinamas imtuvas... PraÅ¡ome palaukti" msgid "Use" -msgstr "" +msgstr "Naudoti" msgid "Use DHCP" msgstr "Naudoti DHCP" @@ -3635,6 +3638,9 @@ msgstr "KÄ… JÅ«s norite skanuoti?" msgid "Where do you want to backup your settings?" msgstr "Kur JÅ«s norite iÅ¡saugoti nustatymų atsarginÄ™ kopijÄ…?" +msgid "Where to save temporary timeshift recordings?" +msgstr "" + msgid "Wireless" msgstr "Belaidis " @@ -3775,15 +3781,6 @@ msgstr "" "JÅ«sų imtuvas turi bÅ«ti sustabdytas. Po atnaujinimo nauja PÄ® papraÅ¡ys atkurti " "JÅ«sų nustatymus. " -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Jums iÅ¡ pradžių reikia nustatyti keletÄ… raktinių žodžių!\n" -"Spauskite MENU-mygtukÄ… nustatykite raktinius žodžius.\n" -"Ar jÅ«s norite nustatyti raktinius žodžius dabar?" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -4012,7 +4009,7 @@ msgid "delete cut" msgstr "trinti iÅ¡kirpimÄ…" msgid "delete file" -msgstr "" +msgstr "trinti failÄ…" msgid "delete playlist entry" msgstr "trinti įrašą iÅ¡ grojaraÅ¡Äio " @@ -4150,7 +4147,7 @@ msgid "help..." msgstr "Pagalba..." msgid "hidden network" -msgstr "" +msgstr "paslÄ—ptas tinklas" msgid "hide extended description" msgstr "slÄ—pti iÅ¡plÄ—stÄ… apraÅ¡ymÄ…" @@ -4431,13 +4428,13 @@ msgid "right" msgstr "deÅ¡inys" msgid "save last directory on exit" -msgstr "" +msgstr "iÅ¡saugoti paskutinÄ™ direktorijÄ… iÅ¡einant" msgid "save playlist" msgstr "iÅ¡saugoti grojaraÅ¡tį" msgid "save playlist on exit" -msgstr "" +msgstr "iÅ¡saugoti grojaraÅ¡tį iÅ¡einant" msgid "scan done!" msgstr "skanavimas baigtas!" @@ -4503,11 +4500,11 @@ msgstr "rodyti užduoÄių detales" msgid "show extended description" msgstr "rodyti iÅ¡plÄ—stÄ… informacijÄ…" -msgid "show first tag" -msgstr "rodyti pirmÄ… etiketÄ™" +msgid "show first selected tag" +msgstr "" -msgid "show second tag" -msgstr "rodyti sekanÄiÄ… kortelÄ™" +msgid "show second selected tag" +msgstr "" msgid "show shutdown menu" msgstr "iÅ¡jungimo meniu" @@ -4558,7 +4555,7 @@ msgid "start cut here" msgstr "pradÄ—ti iÅ¡kirpimÄ… Äia" msgid "start directory" -msgstr "" +msgstr "pradÄ—ti direktorijÄ…" msgid "start timeshift" msgstr "PradÄ—ti laiko perstumimÄ…" @@ -4689,6 +4686,9 @@ msgstr "įjungta" #~ msgid "Adress" #~ msgstr "IP adresas" +#~ msgid "All..." +#~ msgstr "Visi..." + #~ msgid "Allow zapping via webif" #~ msgstr "Leisti jungti per webif" @@ -4819,6 +4819,9 @@ msgstr "įjungta" #~ "Ä®junkite vietinį tinklÄ… savo imtuve.\n" #~ "\n" +#~ msgid "End" +#~ msgstr "Pabaiga" + #~ msgid "Exit wizard and configure later manually" #~ msgstr "IÅ¡junkite nustatymų vedlį ir konfigÅ«ruokite vÄ—liau rankiniu bÅ«du " @@ -4885,6 +4888,9 @@ msgstr "įjungta" #~ msgid "No, let me choose default lists" #~ msgstr "Ne, leiskite man pasirinkti numatytuosius sÄ…raÅ¡us" +#~ msgid "Other..." +#~ msgstr "Kitas..." + #~ 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 " @@ -4936,6 +4942,9 @@ msgstr "įjungta" #~ msgid "Please select below the wireless network you want to connect to." #~ msgstr "PraÅ¡ome iÅ¡sirinkti belaidį tinklÄ…, prie kurio jÅ«s norite jungtis." +#~ msgid "Please select keyword to filter..." +#~ msgstr "PraÅ¡ome iÅ¡sirinkti raktinį žodį dÄ—l filtravimo..." + #, fuzzy #~ msgid "" #~ "Please select the network interface that you want to use for your " @@ -4999,6 +5008,9 @@ msgstr "įjungta" #~ msgid "Show files from %s" #~ msgstr "Rodyti failus iÅ¡ %s" +#~ msgid "Start" +#~ msgstr "PradÄ—ti" + #, fuzzy #~ msgid "Start Webinterface" #~ msgstr "Pasirinkti numatytÄ… sÄ…sajÄ…" @@ -5107,6 +5119,15 @@ msgstr "įjungta" #~ msgid "You have to wait for" #~ msgstr "JÅ«s turite laukti" +#~ msgid "" +#~ "You need to define some keywords first!\n" +#~ "Press the menu-key to define keywords.\n" +#~ "Do you want to define keywords now?" +#~ msgstr "" +#~ "Jums iÅ¡ pradžių reikia nustatyti keletÄ… raktinių žodžių!\n" +#~ "Spauskite MENU-mygtukÄ… nustatykite raktinius žodžius.\n" +#~ "Ar jÅ«s norite nustatyti raktinius žodžius dabar?" + #, fuzzy #~ msgid "" #~ "Your Dreambox is now ready to use.\n" @@ -5193,3 +5214,9 @@ msgstr "įjungta" #~ msgid "seconds." #~ msgstr "sekundžių." + +#~ msgid "show first tag" +#~ msgstr "rodyti pirmÄ… etiketÄ™" + +#~ msgid "show second tag" +#~ msgstr "rodyti sekanÄiÄ… kortelÄ™" diff --git a/po/tr.po b/po/tr.po index 67d6891f..e88daf71 100644 --- a/po/tr.po +++ b/po/tr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-16 23:21+0100\n" +"POT-Creation-Date: 2008-11-18 13:25+0100\n" "PO-Revision-Date: \n" "Last-Translator: Zülfikar VeyisoÄŸlu \n" "Language-Team: \n" @@ -219,7 +219,7 @@ msgid "" "Dreambox to standby. Do that now?" msgstr "" "BitmiÅŸ olan bir kayıt zamanlayıcısı Dreambox'ı\n" -"uyku moduna almak istiyor. Åžimdi alınsın mı?" +"uyku kipine almak istiyor. Åžimdi alınsın mı?" msgid "" "A finished record timer wants to shut down\n" @@ -268,7 +268,7 @@ msgid "" "Dreambox to standby. Do that now?" msgstr "" "Zamanlanmış bir görev Dreambox'ı\n" -"uyku moduna almak istiyor. Åžimdi alınsın mı?" +"uyku kipine almak istiyor. Åžimdi alınsın mı?" msgid "" "A sleep timer wants to shut down\n" @@ -387,14 +387,11 @@ msgstr "Tümü" msgid "All Satellites" msgstr "Tüm uydular" -msgid "All..." -msgstr "Tümü..." - msgid "Alpha" msgstr "Alfa" msgid "Alternative radio mode" -msgstr "Alternatif radyo modu" +msgstr "Alternatif radyo kipi" msgid "Alternative services tuner priority" msgstr "Alternatif kanallarda tuner önceliÄŸi" @@ -504,10 +501,10 @@ msgid "Begin time" msgstr "BaÅŸlangıç" msgid "Behavior of 'pause' when paused" -msgstr "Duraklama modunda 'duraklat' tuÅŸuna basıldığında" +msgstr "Duraklama kipinde 'duraklat' tuÅŸuna basıldığında" msgid "Behavior of 0 key in PiP-mode" -msgstr "PiP modunda 0 tuÅŸuna basıldığında" +msgstr "PiP kipinde 0 tuÅŸuna basıldığında" msgid "Behavior when a movie is started" msgstr "Film baÅŸlatıldığı zaman" @@ -695,7 +692,7 @@ msgid "Complex (allows mixing audio tracks and aspects)" msgstr "Kompleks (karışık ses izlerine ve açılara izin verir)" msgid "Configuration Mode" -msgstr "Konfigürasyon modu" +msgstr "Konfigürasyon kipi" msgid "Configuring" msgstr "Ayarlanıyor" @@ -871,7 +868,7 @@ msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" msgid "DiSEqC mode" -msgstr "DiSEqC modu" +msgstr "DiSEqC kipi" msgid "DiSEqC repeats" msgstr "DiSEqC tekrarı" @@ -1124,9 +1121,6 @@ msgstr "Åžifreleme anahtar tipi" msgid "Encryption Type" msgstr "Åžifreleme Tipi" -msgid "End" -msgstr "BitiÅŸ zamanı" - msgid "End time" msgstr "BitiÅŸ zamanı" @@ -1371,7 +1365,7 @@ msgid "Harddisk setup" msgstr "Sabitdisk kurulumu" msgid "Harddisk standby after" -msgstr "Belirtilen süre kullanılmadığında Sabitdiski uyku moduna al" +msgstr "Belirtilen süre kullanılmadığında Sabitdiski uyku kipine al" msgid "Hidden network SSID" msgstr "GizlenmiÅŸ aÄŸ SSID" @@ -1380,7 +1374,7 @@ msgid "Hierarchy Information" msgstr "HiyerarÅŸi Bilgisi" msgid "Hierarchy mode" -msgstr "HiyerarÅŸi modu" +msgstr "HiyerarÅŸi kipi" msgid "How many minutes do you want to record?" msgstr "Kaç dakikalık kayıt baÅŸlatmak istiyorsunuz?" @@ -1676,7 +1670,7 @@ msgid "Mkfs failed" msgstr "Mkfs (disk biçimlendirme) baÅŸarısız" msgid "Mode" -msgstr "Mod" +msgstr "Kip" msgid "Model: " msgstr "Model: " @@ -1852,6 +1846,9 @@ msgstr "Pozisyoner uyumlu uç ekipman bulunamadı." msgid "No satellite frontend found!!" msgstr "Uydu uç ekipmanı (frontend) bulunamadı!!" +msgid "No tags are set on these movies." +msgstr "" + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "DiSEqC pozisyoner kullanımı için tuner ayarı yapılmamış." @@ -2000,9 +1997,6 @@ msgstr "Yalnızca ÅŸifresiz" msgid "Orbital Position" msgstr "Yörüngesel (orbital) Pozisyon" -msgid "Other..." -msgstr "DiÄŸer..." - msgid "PAL" msgstr "PAL" @@ -2144,8 +2138,8 @@ msgstr "Lütfen kaydedilmesini istediÄŸiniz alt servisi seçin..." msgid "Please select a subservice..." msgstr "Lütfen bir alt servis seçin..." -msgid "Please select keyword to filter..." -msgstr "Lütfen filtre için anahtar kelime girin..." +msgid "Please select tag to filter..." +msgstr "" msgid "Please select target directory or medium" msgstr "Lütfen hedef klasörü veya medyayı seçin" @@ -2169,7 +2163,7 @@ msgid "" msgstr "" "Lütfen yönlendirme tuÅŸlarını kullanarak PiP ekranını taşıyın.\n" "PiP penceresini boyutlandırmak için Buket +/- tuÅŸlarını kullanın.\n" -"TV moduna dönmek için OK'a veya taşımayı iptal etmek için EXIT tuÅŸuna basın." +"TV kipine dönmek için OK'a veya taşımayı iptal etmek için EXIT tuÅŸuna basın." msgid "" "Please use the UP and DOWN keys to select your language. Afterwards press " @@ -2290,7 +2284,7 @@ msgid "Provider to scan" msgstr "Yayıncıya göre ara" msgid "Providers" -msgstr "SaÄŸlayıcılar" +msgstr "Yayıncılar" msgid "Quickzap" msgstr "Hızlızap" @@ -2529,7 +2523,7 @@ msgid "Save Playlist" msgstr "Oynatma listesini Kaydet" msgid "Scaling Mode" -msgstr "Ölçeklendirme Modu" +msgstr "Ölçeklendirme Kipi" msgid "Scan " msgstr "Ara" @@ -2652,7 +2646,7 @@ msgid "Select video input" msgstr "Görüntü giriÅŸini seç" msgid "Select video mode" -msgstr "Görüntü modunu seç" +msgstr "Görüntü kipini seç" msgid "Selected source image" msgstr "Seçilen kaynak imaj" @@ -2679,7 +2673,7 @@ msgid "Service Searching" msgstr "Uydu Yapılandırma" msgid "Service has been added to the favourites." -msgstr "Kanal favorilerinize eklendi." +msgstr "Kanal favorilere eklendi." msgid "Service has been added to the selected bouquet." msgstr "Kanal seçilen bukete eklendi." @@ -2733,7 +2727,7 @@ msgid "Setup" msgstr "Kurulum" msgid "Setup Mode" -msgstr "Kurulum Modu" +msgstr "Kurulum Kipi" msgid "Show Info" msgstr "Bilgiyi Göster" @@ -2841,7 +2835,7 @@ msgstr "A-Z ye Sırala" #. TRANSLATORS: This must fit into the header button in the EPG-List msgid "Sort Time" -msgstr "Zamana göre sırala" +msgstr "Zamana göre" msgid "Sound" msgstr "Ses" @@ -2856,14 +2850,11 @@ msgid "Spanish" msgstr "İspanyolca" msgid "Standby" -msgstr "Uyku modu" +msgstr "Uyku kipi" msgid "Standby / Restart" msgstr "Kapatma Menüsü" -msgid "Start" -msgstr "BaÅŸlama zamanı" - msgid "Start from the beginning" msgstr "En baÅŸtan baÅŸla" @@ -2964,14 +2955,23 @@ msgstr "TV Sistemi" msgid "Table of content for collection" msgstr "Kolleksiyonun içerik listesi (TOC)" +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + msgid "Terrestrial" msgstr "Karasal" msgid "Terrestrial provider" -msgstr "Karasal servis saÄŸlayıcı" +msgstr "Karasal servis yayınlayıcı" msgid "Test mode" -msgstr "Test modu" +msgstr "Test kipi" msgid "Test the network configuration of your Dreambox.\n" msgstr "Dreambox'ınızın aÄŸ yapılandırmasını test edin.\n" @@ -3264,6 +3264,9 @@ msgstr "Zamanı bük (Timeshift)" msgid "Timeshift not possible!" msgstr "Zaman bükme kullanılamaz!" +msgid "Timeshift path..." +msgstr "" + msgid "Timezone" msgstr "Zaman dilimi" @@ -3377,7 +3380,7 @@ msgid "USB Stick" msgstr "USB Bellek" msgid "Ukrainian" -msgstr "" +msgstr "Ukraynaca" msgid "" "Unable to complete filesystem check.\n" @@ -3424,7 +3427,7 @@ msgid "Upgrading Dreambox... Please wait" msgstr "Dreambox güncelleniyor... Lütfen bekleyin" msgid "Use" -msgstr "" +msgstr "Kullan" msgid "Use DHCP" msgstr "DHCP Kullan" @@ -3524,7 +3527,7 @@ msgstr "" "Sonraki giriÅŸ otomatik olarak 10 saniye sonra test edilecektir." msgid "Video mode selection." -msgstr "Görüntü modu seçimi." +msgstr "Görüntü kipi seçimi." msgid "View Rass interactive..." msgstr "EtkileÅŸimli Rass'ı (Radio acoustic sounding system) göster" @@ -3536,7 +3539,7 @@ msgid "Virtual KeyBoard" msgstr "Sanal Klavye" msgid "Voltage mode" -msgstr "Voltaj modu" +msgstr "Voltaj kipi" msgid "Volume" msgstr "Ses" @@ -3633,6 +3636,9 @@ msgstr "Neleri aramak istiyorsunuz?" msgid "Where do you want to backup your settings?" msgstr "Ayarlarınızın yedeÄŸini nereye almak istiyorsunuz?" +msgid "Where to save temporary timeshift recordings?" +msgstr "" + msgid "Wireless" msgstr "Kablosuz" @@ -3770,19 +3776,10 @@ msgid "" msgstr "" "Dreambox'ınızın PC baÄŸlantısına ihtiyacı var. EÄŸer daha fazla açıklamaya " "ihtiyacınız varsa, lütfen http://www.dm7025.de adresini ziyaret edin.\n" -"Åžimdi Dreambox'ınız kapatlıyor. Web sitesinde belirtilen güncelleme " +"Åžimdi Dreambox'ınız kapatılıyor. Web sitesinde belirtilen güncelleme " "talimatlarını yerine getirdikten sonra, yeni cihaz yazılımı ayarlarınızı " "geri yüklemek isteyip istemediÄŸiniz sorusunu soracaktır." -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Öncelikle bazı anahtar kelimeler girmeniz gerekiyor!\n" -"Menü tuÅŸuna basın ve anahtar kelimeyi tanımlayın.\n" -"Anahtar kelimeyi ÅŸimdi tanımlamak ister misiniz??" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -3853,7 +3850,7 @@ msgid "[favourite edit]" msgstr "[favori düzenle]" msgid "[move mode]" -msgstr "[taşıma modu]" +msgstr "[taşıma kipi]" msgid "abort alternatives edit" msgstr "alternatif düzenlemekten vazgeç" @@ -4013,7 +4010,7 @@ msgid "delete cut" msgstr "kesimi sil" msgid "delete file" -msgstr "" +msgstr "dosya sil" msgid "delete playlist entry" msgstr "seçilen oynatma listesini sil" @@ -4028,7 +4025,7 @@ msgid "disable" msgstr "devre dışı" msgid "disable move mode" -msgstr "taşıma modunu kapat" +msgstr "taşıma kipini kapat" msgid "disabled" msgstr "devre dışı" @@ -4064,7 +4061,7 @@ msgid "enable favourite edit" msgstr "favori düzenlemeyi aç" msgid "enable move mode" -msgstr "taşıma modunu aç" +msgstr "taşıma kipini aç" msgid "enabled" msgstr "açık" @@ -4136,10 +4133,10 @@ msgid "free diskspace" msgstr "boÅŸ disk alanı" msgid "go to deep standby" -msgstr "derin uyku moduna git" +msgstr "derin uyku kipine geç" msgid "go to standby" -msgstr "uyku moduna git" +msgstr "uyku kipine geç" msgid "headline" msgstr "baÅŸlık" @@ -4300,7 +4297,7 @@ msgid "no module found" msgstr "modül bulunamadı" msgid "no standby" -msgstr "uyku moduna geçilmesin" +msgstr "uyku kipine geçilmesin" msgid "no timeout" msgstr "zaman aşımı kullanılmasın" @@ -4432,13 +4429,13 @@ msgid "right" msgstr "saÄŸ" msgid "save last directory on exit" -msgstr "" +msgstr "çıkarken, son klasörü kaydet" msgid "save playlist" msgstr "oynatma listesini kaydet" msgid "save playlist on exit" -msgstr "" +msgstr "çıkarken, oynatma listesini kaydet" msgid "scan done!" msgstr "arama tamamlandı!" @@ -4504,17 +4501,17 @@ msgstr "EPG detaylarını göster" msgid "show extended description" msgstr "geniÅŸletilmiÅŸ açıklamayı göster" -msgid "show first tag" -msgstr "ilk etiketi göster" +msgid "show first selected tag" +msgstr "" -msgid "show second tag" -msgstr "saniye etiketini göster" +msgid "show second selected tag" +msgstr "" msgid "show shutdown menu" msgstr "kapatma menüsünü göster" msgid "show single service EPG..." -msgstr "tek kanal EPG bilgisini göster..." +msgstr "tekli EPG" msgid "show tag menu" msgstr "etiket menüsünü göster" @@ -4553,13 +4550,13 @@ msgid "standard" msgstr "standart" msgid "standby" -msgstr "uyku modu" +msgstr "uyku kipi" msgid "start cut here" msgstr "buradan kes" msgid "start directory" -msgstr "" +msgstr "baÅŸlangıç klasörü" msgid "start timeshift" msgstr "zaman bükmeyi baÅŸlat" @@ -4680,6 +4677,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "\"?" #~ msgstr "\"?" +#~ msgid "All..." +#~ msgstr "Tümü..." + #~ msgid "" #~ "Are you sure you want to enable WLAN support?\n" #~ "Connect your Wlan USB Stick to your Dreambox and press OK.\n" @@ -4768,6 +4768,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ "Dreambox'un yerel aÄŸ baÄŸlantısını aç.\n" #~ "\n" +#~ msgid "End" +#~ msgstr "BitiÅŸ zamanı" + #~ msgid "Enter WLAN networkname/SSID:" #~ msgstr "Kablosuz (WLAN) aÄŸ adı/SSID girin:" @@ -4822,6 +4825,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "No, let me choose default lists" #~ msgstr "Hayır, öntanımlı listeleri seçmeme izin ver" +#~ msgid "Other..." +#~ msgstr "DiÄŸer..." + #~ 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 " @@ -4850,6 +4856,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Please select below the wireless network you want to connect to." #~ msgstr "Lütfen baÄŸlanmak istediÄŸiniz kablosuz ağı seçin." +#~ msgid "Please select keyword to filter..." +#~ msgstr "Lütfen filtre için anahtar kelime girin..." + #~ 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 " @@ -4886,6 +4895,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Restart your wireless interface" #~ msgstr "Kablosuz arabirimini yeniden baÅŸlat" +#~ msgid "Start" +#~ msgstr "BaÅŸlama zamanı" + #~ msgid "Step " #~ msgstr "Adım" @@ -4948,6 +4960,15 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ "\n" #~ "Kumandanızın OK tuÅŸuna basarak sonraki adıma geçebilirsiniz." +#~ msgid "" +#~ "You need to define some keywords first!\n" +#~ "Press the menu-key to define keywords.\n" +#~ "Do you want to define keywords now?" +#~ msgstr "" +#~ "Öncelikle bazı anahtar kelimeler girmeniz gerekiyor!\n" +#~ "Menü tuÅŸuna basın ve anahtar kelimeyi tanımlayın.\n" +#~ "Anahtar kelimeyi ÅŸimdi tanımlamak ister misiniz??" + #~ msgid "" #~ "Your local LAN internet connection is not working!\n" #~ "Please choose what you want to do next." @@ -5014,3 +5035,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "seconds." #~ msgstr "saniye." + +#~ msgid "show first tag" +#~ msgstr "ilk etiketi göster" + +#~ msgid "show second tag" +#~ msgstr "saniye etiketini göster" -- cgit v1.2.3 From 63bae75ab8aaaee8bca8175918d376bb729bf65d Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 15:17:52 +0100 Subject: don't hold debug lock while doing bsodFatal --- lib/base/eerror.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/base/eerror.cpp b/lib/base/eerror.cpp index 1e4d348f..7ebac213 100644 --- a/lib/base/eerror.cpp +++ b/lib/base/eerror.cpp @@ -86,9 +86,11 @@ void eFatal(const char* fmt, ...) va_start(ap, fmt); vsnprintf(buf, 1024, fmt, ap); va_end(ap); - singleLock s(DebugLock); - logOutput(lvlFatal, "FATAL: " + std::string(buf) + "\n"); - fprintf(stderr, "FATAL: %s\n",buf ); + { + singleLock s(DebugLock); + logOutput(lvlFatal, "FATAL: " + std::string(buf) + "\n"); + fprintf(stderr, "FATAL: %s\n",buf ); + } bsodFatal(); } -- cgit v1.2.3 From 1d042d155d0f33d2777e47da082b24b49a503491 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 18 Nov 2008 15:44:31 +0100 Subject: fix typos --- lib/gdi/picload.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index 375f33fb..0fafeabd 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -1015,12 +1015,12 @@ RESULT ePicLoad::setPara(PyObject *val) return 0; else { ePyObject fast = PySequence_Fast(val, ""); - m_conf.max_x = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 0)); - m_conf.max_y = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 1)); - m_conf.aspect_ratio = (double)PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 2)) / PyInt_AsLong(PySequence_Fast_GET_ITEM(val, 3)); - m_conf.usecache = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 4)); - m_conf.resizetype = PyInt_AsLong( PySequence_Fast_GET_ITEM(val, 5)); - const char *bg_str = PyString_AsString( PySequence_Fast_GET_ITEM(val, 6)); + m_conf.max_x = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 0)); + m_conf.max_y = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 1)); + m_conf.aspect_ratio = (double)PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 2)) / PyInt_AsLong(PySequence_Fast_GET_ITEM(fast, 3)); + m_conf.usecache = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 4)); + m_conf.resizetype = PyInt_AsLong( PySequence_Fast_GET_ITEM(fast, 5)); + const char *bg_str = PyString_AsString( PySequence_Fast_GET_ITEM(fast, 6)); if(bg_str[0] == '#' && strlen(bg_str)==9) { -- cgit v1.2.3 From d924772eeced2429c007e51ce6dcb50dadec2836 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 15:47:32 +0100 Subject: don't try to look for python files when handling a C++ crash --- lib/base/eerror.cpp | 4 ++-- lib/python/python.cpp | 16 ++++++++-------- main/bsod.cpp | 51 ++++++++++++++++++++++++++++----------------------- main/bsod.h | 2 +- main/enigma.cpp | 2 +- 5 files changed, 40 insertions(+), 35 deletions(-) diff --git a/lib/base/eerror.cpp b/lib/base/eerror.cpp index 7ebac213..4c4d6551 100644 --- a/lib/base/eerror.cpp +++ b/lib/base/eerror.cpp @@ -77,7 +77,7 @@ int logOutputConsole=1; static pthread_mutex_t DebugLock = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP; -extern void bsodFatal(); +extern void bsodFatal(const char *component); void eFatal(const char* fmt, ...) { @@ -91,7 +91,7 @@ void eFatal(const char* fmt, ...) logOutput(lvlFatal, "FATAL: " + std::string(buf) + "\n"); fprintf(stderr, "FATAL: %s\n",buf ); } - bsodFatal(); + bsodFatal("enigma2"); } #ifdef DEBUG diff --git a/lib/python/python.cpp b/lib/python/python.cpp index 50b66103..c5faeed4 100644 --- a/lib/python/python.cpp +++ b/lib/python/python.cpp @@ -5,7 +5,7 @@ extern "C" void init_enigma(); extern "C" void eBaseInit(void); extern "C" void eConsoleInit(void); -extern void bsodFatal(); +extern void bsodFatal(const char *component); #define SKIP_PART2 #include @@ -44,7 +44,7 @@ ePyObject::operator PyObject*() if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } return 0; } @@ -57,7 +57,7 @@ void ePyObject::incref(const char *file, int line) if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } if (m_erased || m_ob->ob_refcnt <= 0) { @@ -66,7 +66,7 @@ void ePyObject::incref(const char *file, int line) if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } if (m_ob->ob_refcnt == 0x7FFFFFFF) { @@ -75,7 +75,7 @@ void ePyObject::incref(const char *file, int line) if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } m_file = file; m_line = line; @@ -92,7 +92,7 @@ void ePyObject::decref(const char *file, int line) if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } if (m_erased || m_ob->ob_refcnt <= 0) { @@ -101,7 +101,7 @@ void ePyObject::decref(const char *file, int line) if (m_file) eDebug("last modified in file %s line %d from %d to %d", m_file, m_line, m_from, m_to); - bsodFatal(); + bsodFatal("enigma2, refcnt"); } m_file = file; m_line = line; @@ -207,7 +207,7 @@ int ePython::call(ePyObject pFunc, ePyObject pArgs) eDebug("(PyObject_CallObject(%s,%s) failed)", PyString_AS_STRING(FuncStr), PyString_AS_STRING(ArgStr)); Py_DECREF(FuncStr); Py_DECREF(ArgStr); - bsodFatal(); + bsodFatal(0); } } return res; diff --git a/main/bsod.cpp b/main/bsod.cpp index 173a2cce..583107d7 100644 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -67,7 +67,7 @@ extern std::string getLogBuffer(); #define INFOFILE "/maintainer.info" -void bsodFatal() +void bsodFatal(const char *component) { char logfile[128]; sprintf(logfile, "/media/hdd/enigma2_crash_%u.log", (unsigned int)time(0)); @@ -81,30 +81,35 @@ void bsodFatal() char crash_emailaddr[256] = CRASH_EMAILADDR; char crash_component[256] = "enigma2"; - while ((start = lines.find("\n File \"", start)) != std::string::npos) + if (component) + snprintf(crash_component, 256, component); + else { - start += 9; - size_t end = lines.find("\"", start); - if (end == std::string::npos) - break; - end = lines.rfind("/", end); - if (end == std::string::npos) - break; - if (end - start >= (256 - strlen(INFOFILE))) - continue; - char filename[256]; - snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE); - FILE *cf = fopen(filename, "r"); - if (cf) + while ((start = lines.find("\n File \"", start)) != std::string::npos) { - fgets(crash_emailaddr, sizeof crash_emailaddr, cf); - if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n') - crash_emailaddr[strlen(crash_emailaddr)-1] = 0; + start += 9; + size_t end = lines.find("\"", start); + if (end == std::string::npos) + break; + end = lines.rfind("/", end); + if (end == std::string::npos) + break; + if (end - start >= (256 - strlen(INFOFILE))) + continue; + char filename[256]; + snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE); + FILE *cf = fopen(filename, "r"); + if (cf) + { + fgets(crash_emailaddr, sizeof crash_emailaddr, cf); + if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n') + crash_emailaddr[strlen(crash_emailaddr)-1] = 0; - fgets(crash_component, sizeof crash_component, cf); - if (*crash_component && crash_component[strlen(crash_component)-1] == '\n') - crash_component[strlen(crash_component)-1] = 0; - fclose(cf); + fgets(crash_component, sizeof crash_component, cf); + if (*crash_component && crash_component[strlen(crash_component)-1] == '\n') + crash_component[strlen(crash_component)-1] = 0; + fclose(cf); + } } } @@ -242,7 +247,7 @@ void handleFatalSignal(int signum, siginfo_t *si, void *ctx) oops(uc->uc_mcontext, signum == SIGSEGV || signum == SIGABRT); #endif eDebug("-------"); - bsodFatal(); + bsodFatal("enigma2, signal"); } void bsodCatchSignals() diff --git a/main/bsod.h b/main/bsod.h index aa8cfb74..4ee4c48b 100644 --- a/main/bsod.h +++ b/main/bsod.h @@ -3,6 +3,6 @@ void bsodLogInit(); void bsodCatchSignals(); -void bsodFatal(); +void bsodFatal(const char *component); #endif diff --git a/main/enigma.cpp b/main/enigma.cpp index 0893b035..98175c49 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -248,7 +248,7 @@ int main(int argc, char **argv) if (exit_code == 5) /* python crash */ { eDebug("(exit code 5)"); - bsodFatal(); + bsodFatal(0); } dsk.paint(); -- cgit v1.2.3 From ea644879586a9472041552d84dd7b7ebba29ec3e Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 18 Nov 2008 16:17:28 +0100 Subject: fix FATAL: ebase.cpp:129 ASSERTION notifiers.find(fd) == notifiers.end() FAILED! --- lib/base/ebase.cpp | 23 ++++++++++++++++++----- lib/base/ebase.h | 3 ++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/base/ebase.cpp b/lib/base/ebase.cpp index bd2ec589..f42b72b8 100644 --- a/lib/base/ebase.cpp +++ b/lib/base/ebase.cpp @@ -126,6 +126,18 @@ eMainloop::~eMainloop() void eMainloop::addSocketNotifier(eSocketNotifier *sn) { int fd = sn->getFD(); + std::map::iterator it(notifiers.find(fd)); + if (m_inActivate && m_inActivate->ref.count == 1) + { + /* when the current active SocketNotifier's refcount is one, + then no more external references are existing. + So it gets destroyed when the activate callback is finished (->AddRef() / ->Release() calls in processOneEvent). + But then the sn->stop() is called to late for the next Asserion. + Thus we call sn->stop() here (this implicitly calls eMainloop::removeSocketNotifier) and we don't get trouble + with the next Assertion. + */ + m_inActivate->stop(); + } ASSERT(notifiers.find(fd) == notifiers.end()); notifiers[fd]=sn; } @@ -243,14 +255,15 @@ int eMainloop::processOneEvent(unsigned int twisted_timeout, PyObject **res, ePy if (it != notifiers.end() && it->second->state == 1) // added and in poll { - eSocketNotifier *sn = it->second; - int req = sn->getRequested(); + m_inActivate = it->second; + int req = m_inActivate->getRequested(); if (pfd[i].revents & req) { - sn->AddRef(); - sn->activate(pfd[i].revents & req); - sn->Release(); + m_inActivate->AddRef(); + m_inActivate->activate(pfd[i].revents & req); + m_inActivate->Release(); } pfd[i].revents &= ~req; + m_inActivate = 0; } if (pfd[i].revents & (POLLERR|POLLHUP|POLLNVAL)) eDebug("poll: unhandled POLLERR/HUP/NVAL for fd %d(%d)", pfd[i].fd, pfd[i].revents); diff --git a/lib/base/ebase.h b/lib/base/ebase.h index 84845a95..524052bd 100644 --- a/lib/base/ebase.h +++ b/lib/base/ebase.h @@ -195,6 +195,7 @@ class eMainloop int processOneEvent(unsigned int user_timeout, PyObject **res=0, ePyObject additional=ePyObject()); int retval; int m_is_idle; + eSocketNotifier *m_inActivate; int m_interrupt_requested; timespec m_twisted_timer; // twisted timer @@ -209,7 +210,7 @@ public: #endif eMainloop() - :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_interrupt_requested(0) + :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_inActivate(0), m_interrupt_requested(0) { existing_loops.push_back(this); } -- cgit v1.2.3 From a8455f54b7c4eeb1ebf769e7194a089098ab4959 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 18 Nov 2008 16:25:11 +0100 Subject: remove unneeded code --- lib/base/ebase.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/base/ebase.cpp b/lib/base/ebase.cpp index f42b72b8..313732ab 100644 --- a/lib/base/ebase.cpp +++ b/lib/base/ebase.cpp @@ -126,7 +126,6 @@ eMainloop::~eMainloop() void eMainloop::addSocketNotifier(eSocketNotifier *sn) { int fd = sn->getFD(); - std::map::iterator it(notifiers.find(fd)); if (m_inActivate && m_inActivate->ref.count == 1) { /* when the current active SocketNotifier's refcount is one, -- cgit v1.2.3 From 6034a35be47b6e1e4f0599547fd4228e7ff0b4fd Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 22:20:15 +0100 Subject: Don't search past buffer in TS I-frame cutter. closes #66. --- lib/dvb/dvb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index e04caa00..66ec1d2d 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -982,7 +982,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s // eDebug("filterRecordData, size=%d (mod 188=%d), first byte is %02x", len, len %188, data[0]); unsigned char *d = data; - while ((d = (unsigned char*)memmem(d, data + len - d, "\x00\x00\x01", 3))) + while ((d + 3 < data + len) && (d = (unsigned char*)memmem(d, data + len - d, "\x00\x00\x01", 3))) { int offset = d - data; int ts_offset = offset - offset % 188; /* offset to the start of TS packet */ -- cgit v1.2.3 From 7944d659ae7007d55d21451f08312f975cc3f25f Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 18 Nov 2008 23:36:25 +0100 Subject: fix alpha channel for 1 or 2 bit pngs --- png_load.diff | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 png_load.diff diff --git a/png_load.diff b/png_load.diff new file mode 100644 index 00000000..9a5a6894 --- /dev/null +++ b/png_load.diff @@ -0,0 +1,32 @@ +diff -Naur enigma2.orig/lib/gdi/picload.cpp enigma2/lib/gdi/picload.cpp +--- enigma2.orig/lib/gdi/picload.cpp 2008-11-18 21:52:44.000000000 +0100 ++++ enigma2/lib/gdi/picload.cpp 2008-11-18 22:38:34.000000000 +0100 +@@ -288,24 +288,12 @@ + png_read_info(png_ptr, info_ptr); + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); + +- if (color_type == PNG_COLOR_TYPE_PALETTE) +- { +- png_set_palette_to_rgb(png_ptr); +- png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); +- } +- if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) +- { +- png_set_gray_to_rgb(png_ptr); +- png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); +- } +- if (color_type & PNG_COLOR_MASK_ALPHA) +- png_set_strip_alpha(png_ptr); +- +- if (bit_depth < 8) +- png_set_packing(png_ptr); +- ++ if ((color_type == PNG_COLOR_TYPE_PALETTE)||(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)||(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) ++ png_set_expand(png_ptr); + if (bit_depth == 16) + png_set_strip_16(png_ptr); ++ if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ++ png_set_gray_to_rgb(png_ptr); + + int number_passes = png_set_interlace_handling(png_ptr); + png_read_update_info(png_ptr, info_ptr); -- cgit v1.2.3 From ac28912f03ba943cce61b30df2014f06dd499ba7 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 19 Nov 2008 09:58:34 +0100 Subject: fix filelist crash, add necessary import for hotplug --- lib/python/Plugins/Extensions/PicturePlayer/plugin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py index aeca12dc..e9da3e2f 100644 --- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py +++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py @@ -1,7 +1,7 @@ from enigma import ePicLoad, eTimer, getDesktop from Screens.Screen import Screen -from Tools.Directories import resolveFilename, pathExists, SCOPE_MEDIA +from Tools.Directories import resolveFilename, pathExists, fileExists, SCOPE_MEDIA from Plugins.Plugin import PluginDescriptor from Components.Pixmap import Pixmap, MovingPixmap @@ -91,8 +91,9 @@ class picshow(Screen): def showThumb(self): if not self.filelist.canDescent(): - if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1: - self.ThumbTimer.start(500, True) + if self.filelist.getCurrentDirectory() and self.filelist.getFilename(): + if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1: + self.ThumbTimer.start(500, True) def selectionChanged(self): if not self.filelist.canDescent(): -- cgit v1.2.3 From e09c5aad8f93dab13e7b981a75c4d5473ea1376c Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 19 Nov 2008 12:42:52 +0100 Subject: update MediaPlayer to use new async ePicLoad function for cover artwork. currently no transparent background possible though :/ --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index babef3e7..981f08cb 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -1,6 +1,6 @@ from os import path as os_path, remove as os_remove, listdir as os_listdir from time import strftime -from enigma import iPlayableService, eTimer, eServiceCenter, iServiceInformation, loadPic +from enigma import iPlayableService, eTimer, eServiceCenter, iServiceInformation, ePicLoad from ServiceReference import ServiceReference from Screens.Screen import Screen from Screens.HelpMenu import HelpableScreen @@ -171,6 +171,9 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self.currList = "filelist" self.coverArtFileName = "" + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.paintCoverArtPixmapCB) + self.isAudioCD = False self.AudioCD_albuminfo = {} self.cdAudioTrackFiles = [] @@ -206,6 +209,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB config.mediaplayer.defaultDir.setValue(self.filelist.getCurrentDirectory()) config.mediaplayer.defaultDir.save() hotplugNotifier.remove(self.hotplugCB) + del self.picload self.close() def checkSkipShowHideLock(self): @@ -294,9 +298,15 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB new_coverArtFileName = path + filename if self.coverArtFileName != new_coverArtFileName: self.coverArtFileName = new_coverArtFileName - pixmap = loadPic(self.coverArtFileName, 116, 116, AVSwitch().getAspectRatioSetting()/2,1,0,0) - if pixmap is not None: - self["coverArt"].instance.setPixmap(pixmap.__deref__()) + sc = AVSwitch().getFramebufferScale() + #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB) + self.picload.setPara((self["coverArt"].instance.size().width(), self["coverArt"].instance.size().height(), sc[0], sc[1], False, 1, "#ff000000")) + self.picload.startDecode(self.coverArtFileName) + + def paintCoverArtPixmapCB(self, picInfo=None): + ptr = self.picload.getData() + if ptr != None: + self["coverArt"].instance.setPixmap(ptr.__deref__()) def leftDown(self): self.lefttimer = True -- cgit v1.2.3 From 5e6249693c0c59f61dce4a14ad0902fd9d78769a Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 19 Nov 2008 17:13:33 +0100 Subject: correctly use new ePicLoad. keep "no cover art" pixmap resident the whole time instead of reloading it. move entire cover art functionality into MediaPixmap class. --- .../Plugins/Extensions/MediaPlayer/plugin.py | 83 +++++++++++++--------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 981f08cb..8477ecc1 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -35,18 +35,58 @@ class MyPlayList(PlayList): self.oldCurrPlaying = -1 class MediaPixmap(Pixmap): + def __init__(self): + Pixmap.__init__(self) + self.coverArtFileName = "" + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.paintCoverArtPixmapCB) + self.coverFileNames = ["folder.png", "folder.jpg"] + def applySkin(self, desktop, screen): - self.default_pixmap = None + from Tools.LoadPixmap import LoadPixmap if self.skinAttributes is not None: for (attrib, value) in self.skinAttributes: if attrib == "pixmap": - self.default_pixmap = value + noCoverFile = value break - if self.default_pixmap is None: - self.default_pixmap = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png") - self.coverFileNames = ["folder.png", "folder.jpg"] + if noCoverFile is None: + noCoverFile = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png") + self.noCoverPixmap = LoadPixmap(noCoverFile) return Pixmap.applySkin(self, desktop, screen) + def onShow(self): + Pixmap.onShow(self) + sc = AVSwitch().getFramebufferScale() + #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB) + self.picload.setPara((self.instance.size().width(), self.instance.size().height(), sc[0], sc[1], False, 1, "#00000000")) + + def paintCoverArtPixmapCB(self, picInfo=None): + ptr = self.picload.getData() + if ptr != None: + self.instance.setPixmap(ptr.__deref__()) + + def updateCoverArt(self, path): + while not path.endswith("/"): + path = path[:-1] + new_coverArtFileName = None + for filename in self.coverFileNames: + if fileExists(path + filename): + new_coverArtFileName = path + filename + if self.coverArtFileName != new_coverArtFileName: + self.coverArtFileName = new_coverArtFileName + if new_coverArtFileName: + self.picload.startDecode(self.coverArtFileName) + else: + self.showDefaultCover() + + def showDefaultCover(self): + self.instance.setPixmap(self.noCoverPixmap) + + #def destroy(self): + #Pixmap.destroy(self) + #print "mediapixmap ***********+ destroy" + + class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen): ALLOW_SUSPEND = True ENABLE_RESUME_SUPPORT = True @@ -74,7 +114,6 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self["filelist"] = self.filelist self.playlist = MyPlayList() - #self.playlist = PlayList() self.is_closing = False self.delname = "" self["playlist"] = self.playlist @@ -169,11 +208,6 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self.leftKeyTimer.callback.append(self.leftTimerFire) self.currList = "filelist" - - self.coverArtFileName = "" - self.picload = ePicLoad() - self.picload.PictureData.get().append(self.paintCoverArtPixmapCB) - self.isAudioCD = False self.AudioCD_albuminfo = {} self.cdAudioTrackFiles = [] @@ -209,7 +243,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB config.mediaplayer.defaultDir.setValue(self.filelist.getCurrentDirectory()) config.mediaplayer.defaultDir.save() hotplugNotifier.remove(self.hotplugCB) - del self.picload + del self["coverArt"].picload self.close() def checkSkipShowHideLock(self): @@ -289,25 +323,6 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB if self[name].getText() != info: self[name].setText(info) - def updateCoverArtPixmap(self, path): - while not path.endswith("/"): - path = path[:-1] - new_coverArtFileName = self["coverArt"].default_pixmap - for filename in self["coverArt"].coverFileNames: - if fileExists(path + filename): - new_coverArtFileName = path + filename - if self.coverArtFileName != new_coverArtFileName: - self.coverArtFileName = new_coverArtFileName - sc = AVSwitch().getFramebufferScale() - #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB) - self.picload.setPara((self["coverArt"].instance.size().width(), self["coverArt"].instance.size().height(), sc[0], sc[1], False, 1, "#ff000000")) - self.picload.startDecode(self.coverArtFileName) - - def paintCoverArtPixmapCB(self, picInfo=None): - ptr = self.picload.getData() - if ptr != None: - self["coverArt"].instance.setPixmap(ptr.__deref__()) - def leftDown(self): self.lefttimer = True self.leftKeyTimer.start(1000) @@ -835,11 +850,9 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self.unPauseService() if needsInfoUpdate == True: path = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()].getPath() - self.updateCoverArtPixmap(path) + self["coverArt"].updateCoverArt(path) else: - pngname = self["coverArt"].default_pixmap - self.coverArtFileName = pngname - self["coverArt"].instance.setPixmapFromFile(self.coverArtFileName) + self["coverArt"].showDefaultCover() self.readTitleInformation() def updatedSeekState(self): -- cgit v1.2.3 From 5474861f9be0b88428d490b45625d1a65575c020 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 19 Nov 2008 17:39:20 +0100 Subject: fix mediascanner list handling, thx to mechatron --- lib/python/Plugins/Extensions/PicturePlayer/plugin.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py index e9da3e2f..05adb633 100644 --- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py +++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py @@ -452,6 +452,11 @@ class Pic_Full_View(Screen): self.filelist.append(path + x[0][0]) else: self.dirlistcount += 1 + elif len(filelist[0]) == 2: #scanlist + if x[0][1] == False: + self.filelist.append(x[0][0]) + else: + self.dirlistcount += 1 else: # thumbnaillist self.filelist.append(x[T_FULL]) -- cgit v1.2.3 From 9dbdf3dcf3fd2da5d19a93774180e0dcae85c671 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Thu, 20 Nov 2008 00:41:56 +0100 Subject: Durchsucher -> Durchsuche --- po/de.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/de.po b/po/de.po index 70cd99f3..8c1fabe7 100755 --- a/po/de.po +++ b/po/de.po @@ -2547,7 +2547,7 @@ msgid "Scan band EU VHF I" msgstr "Durchsuche EU VHF I" msgid "Scan band EU VHF III" -msgstr "Durchsucher EU VHF III" +msgstr "Durchsuche EU VHF III" msgid "Scan band US HIGH" msgstr "Durchsuche US HIGH" @@ -2556,7 +2556,7 @@ msgid "Scan band US HYPER" msgstr "Durchsuche US HYPER" msgid "Scan band US LOW" -msgstr "Durchsucher US LOW" +msgstr "Durchsuche US LOW" msgid "Scan band US MID" msgstr "Durchsuche US MID" -- cgit v1.2.3 From 3c31c5e7adaba2190409c39547ae4052ce5d83eb Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 20 Nov 2008 01:15:26 +0100 Subject: fix alpha channel for 1 or 2 bit pngs --- lib/gdi/picload.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/lib/gdi/picload.cpp b/lib/gdi/picload.cpp index 0fafeabd..c162f89d 100644 --- a/lib/gdi/picload.cpp +++ b/lib/gdi/picload.cpp @@ -288,24 +288,12 @@ static unsigned char *png_load(const char *file, int *ox, int *oy) png_read_info(png_ptr, info_ptr); png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); - if (color_type == PNG_COLOR_TYPE_PALETTE) - { - png_set_palette_to_rgb(png_ptr); - png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); - } - if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - png_set_gray_to_rgb(png_ptr); - png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); - } - if (color_type & PNG_COLOR_MASK_ALPHA) - png_set_strip_alpha(png_ptr); - - if (bit_depth < 8) - png_set_packing(png_ptr); - + if ((color_type == PNG_COLOR_TYPE_PALETTE)||(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)||(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) + png_set_expand(png_ptr); if (bit_depth == 16) png_set_strip_16(png_ptr); + if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(png_ptr); int number_passes = png_set_interlace_handling(png_ptr); png_read_update_info(png_ptr, info_ptr); -- cgit v1.2.3 From d8cbf1fa62da972b6a86c6f56ee2bbafb072f0cb Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 20 Nov 2008 01:16:23 +0100 Subject: Revert "fix alpha channel for 1 or 2 bit pngs" This reverts commit 7944d659ae7007d55d21451f08312f975cc3f25f. --- png_load.diff | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 png_load.diff diff --git a/png_load.diff b/png_load.diff deleted file mode 100644 index 9a5a6894..00000000 --- a/png_load.diff +++ /dev/null @@ -1,32 +0,0 @@ -diff -Naur enigma2.orig/lib/gdi/picload.cpp enigma2/lib/gdi/picload.cpp ---- enigma2.orig/lib/gdi/picload.cpp 2008-11-18 21:52:44.000000000 +0100 -+++ enigma2/lib/gdi/picload.cpp 2008-11-18 22:38:34.000000000 +0100 -@@ -288,24 +288,12 @@ - png_read_info(png_ptr, info_ptr); - png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); - -- if (color_type == PNG_COLOR_TYPE_PALETTE) -- { -- png_set_palette_to_rgb(png_ptr); -- png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); -- } -- if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) -- { -- png_set_gray_to_rgb(png_ptr); -- png_set_background(png_ptr, (png_color_16 *)&my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); -- } -- if (color_type & PNG_COLOR_MASK_ALPHA) -- png_set_strip_alpha(png_ptr); -- -- if (bit_depth < 8) -- png_set_packing(png_ptr); -- -+ if ((color_type == PNG_COLOR_TYPE_PALETTE)||(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)||(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) -+ png_set_expand(png_ptr); - if (bit_depth == 16) - png_set_strip_16(png_ptr); -+ if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) -+ png_set_gray_to_rgb(png_ptr); - - int number_passes = png_set_interlace_handling(png_ptr); - png_read_update_info(png_ptr, info_ptr); -- cgit v1.2.3 From 5a626462406c008da1c81cf304a448d9abd19576 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 20 Nov 2008 12:17:28 +0100 Subject: decode id3 cover art images embedded into mp3 files and show them in mediaplayer --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 11 ++++++----- lib/service/servicemp3.cpp | 14 +++++++++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 8477ecc1..b6d87a6e 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -82,10 +82,10 @@ class MediaPixmap(Pixmap): def showDefaultCover(self): self.instance.setPixmap(self.noCoverPixmap) - #def destroy(self): - #Pixmap.destroy(self) - #print "mediapixmap ***********+ destroy" - + def embeddedCoverArt(self): + print "[embeddedCoverArt] found" + self.coverArtFileName = "/tmp/.id3coverart" + self.picload.startDecode(self.coverArtFileName) class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen): ALLOW_SUSPEND = True @@ -224,7 +224,8 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB { iPlayableService.evUpdatedInfo: self.__evUpdatedInfo, iPlayableService.evUser+11: self.__evDecodeError, - iPlayableService.evUser+12: self.__evPluginError + iPlayableService.evUser+12: self.__evPluginError, + iPlayableService.evUser+13: self["coverArt"].embeddedCoverArt }) def doNothing(self): diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 19b7735b..017c58f0 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -16,6 +16,7 @@ #include /* for subtitles */ #include +#include // eServiceFactoryMP3 @@ -944,6 +945,17 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg) m_audioStreams.push_back(audio); } + GValue *gv_image = gst_tag_list_get_value_index(tags, GST_TAG_IMAGE, 0); + if ( gv_image ) + { + GstBuffer *buf_image; + buf_image = gst_value_get_buffer (gv_image); + int fd = open("/tmp/.id3coverart", O_CREAT|O_WRONLY|O_TRUNC, 0644); + int ret = write(fd, GST_BUFFER_DATA(buf_image), GST_BUFFER_SIZE(buf_image)); + close(fd); + m_event((iPlayableService*)this, evUser+13); + } + gst_tag_list_free(tags); m_event((iPlayableService*)this, evUpdatedInfo); break; @@ -984,7 +996,7 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg) { if ( gst_is_missing_plugin_message(msg) ) { - gchar *description = gst_missing_plugin_message_get_description(msg); + gchar *description = gst_missing_plugin_message_get_description(msg); if ( description ) { m_error_message = "GStreamer plugin " + (std::string)description + " not available!\n"; -- cgit v1.2.3 From 60fc8afd61923e8bbf949d04b73491862390b65f Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 20 Nov 2008 22:54:11 +0100 Subject: fix keymap associations with INFO button --- data/keymap.xml | 2 +- lib/python/Screens/InfoBarGenerics.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/keymap.xml b/data/keymap.xml index 6b8b583d..0a0dc867 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -77,7 +77,7 @@ - + diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index eb79c74e..b923340c 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -403,7 +403,7 @@ class InfoBarEPG: self.eventView = None self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", { - "showEventView": (self.openEventView, _("show EPG...")), + "showEventInfo": (self.openEventView, _("show EPG...")), "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")), "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible, }) -- cgit v1.2.3 From 7b99a1af4abb7fdd77889feabe6bbd08d6c1d343 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 22 Nov 2008 09:23:16 +0100 Subject: AVSwitch.py: fix getOutputAspect function --- lib/python/Components/AVSwitch.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py index 00350cbb..1f529cfd 100644 --- a/lib/python/Components/AVSwitch.py +++ b/lib/python/Components/AVSwitch.py @@ -29,6 +29,7 @@ class AVSwitch: eAVSwitch.getInstance().setVideomode(value) def getOutputAspect(self): + valstr = config.av.aspectratio.value if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3 return (4,3) elif valstr == "16_9": # auto ... 4:3 or 16:9 -- cgit v1.2.3 From 7049be52bf2235dfb848b28dcd9aa44eb204771c Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 22 Nov 2008 12:14:43 +0100 Subject: fix type in bcm4501 snr dB calculation --- lib/dvb/frontend.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index b0e92d39..a74e65ca 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -728,7 +728,7 @@ int eDVBFrontend::readFrontendData(int type) eDebug("FE_READ_SNR failed (%m)"); if (!strcmp(m_description, "BCM4501 (internal)")) { - unsigned int SDS_SNRE = snr << 16; + float SDS_SNRE = snr << 16; float snr_in_db; if (parm_u_qpsk_fec_inner <= FEC_AUTO) // DVB-S1 / QPSK @@ -748,7 +748,7 @@ int eDVBFrontend::readFrontendData(int type) if (fval1 < 10.0) { fval2 = SNR_COEFF[0]; - for (int i=0; i<6; ++i) + for (int i=1; i<6; ++i) { fval2 *= fval1; fval2 += SNR_COEFF[i]; -- cgit v1.2.3 From 74837aa1b9a2d0ee3cd630b74abcb224272290ab Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 24 Nov 2008 09:57:14 +0100 Subject: re-introduce consistent EXIT key behaviour. sort "quit" entry to the top though. --- lib/python/Plugins/Extensions/DVDPlayer/plugin.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py index 593d4d2e..b7d66a82 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py @@ -489,7 +489,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP self.doShow() def askLeavePlayer(self): - choices = [(_("Continue playing"), "play"), (_("Exit"), "exit")] + choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")] if not self.physicalDVD: choices.insert(1,(_("Return to file browser"), "browser")) self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices) @@ -590,16 +590,19 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP print "cur_dlg", self.session.current_dialog def exitCB(self, answer): - if not answer or answer and answer[1] == "exit": - if self.service: - self.service = None - self.close() - if answer and answer[1] == "browser": + if answer is not None: + if answer[1] == "exit": + if self.service: + self.service = None + self.close() + if answer[1] == "browser": #TODO check here if a paused dvd playback is already running... then re-start it... #else - if self.service: - self.service = None - self.showFileBrowser() + if self.service: + self.service = None + self.showFileBrowser() + else: + pass def __onClose(self): for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)): -- cgit v1.2.3 From f3c055a916ecea1bf7a43b6a06b7eb75a8c6d6ef Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 24 Nov 2008 14:32:19 +0100 Subject: update sv,lt,it.is,tr language --- po/is.po | 312 +++++++++++++++++++++----------- po/it.po | 607 ++++++++++++++++++++++++++++++++++----------------------------- po/lt.po | 213 ++++++++++++++-------- po/sv.po | 339 +++++++++++++++++++++++------------ po/tr.po | 246 +++++++++++++++++--------- 5 files changed, 1073 insertions(+), 644 deletions(-) mode change 100755 => 100644 po/it.po diff --git a/po/is.po b/po/is.po index 7ce1bc7c..9d934f3a 100644 --- a/po/is.po +++ b/po/is.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Icelandic translation v.1.41\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-14 07:24+0100\n" +"POT-Creation-Date: 2008-11-24 14:31+0100\n" "PO-Revision-Date: 2008-11-13 09:24-0000\n" "Last-Translator: Baldur Sveinsson \n" "Language-Team: Polar Team/LT Team \n" @@ -97,9 +97,6 @@ msgstr "" msgid ".NFI Download failed:" msgstr ".NFI Niðurhal tókst ekki:" -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr ".NFI keyranlegt stýrikerfi af USB staut tilbúið." - msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" @@ -387,9 +384,6 @@ msgstr "Allt" msgid "All Satellites" msgstr "Allir gervihnettir" -msgid "All..." -msgstr "Allt..." - msgid "Alpha" msgstr "Gegnsæi" @@ -737,9 +731,6 @@ msgstr "Halda áfram að spila" msgid "Contrast" msgstr "Skerpa" -msgid "Copying USB flasher boot image to stick..." -msgstr "Afrita keyranlegt USB stýrikerfi yfir á staut..." - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "Gat ekki tengt við Dreambox .NFI stýrikerfis vefþjón:" @@ -816,9 +807,6 @@ msgstr "Danska" msgid "Date" msgstr "Dags" -msgid "Decompressing USB stick flasher boot image..." -msgstr "Afþjappa keyranlegt USB stauts stýrikerfi..." - msgid "Deep Standby" msgstr "Djúp biðstaða" @@ -946,9 +934,6 @@ msgstr "" "Viltu örugglega hala niður\n" "innskotinu \"%s\"?" -msgid "Do you really want to exit?" -msgstr "Viltu virkilega hætta?" - msgid "" "Do you really want to initialize the harddisk?\n" "All data on the disk will be lost!" @@ -1040,9 +1025,6 @@ msgstr "Niðurhalanleg innskot" msgid "Downloading" msgstr "Hleð niður" -msgid "Downloading image description..." -msgstr "Hleð niður lýsingu stýrikerfis..." - msgid "Downloading plugin information. Please wait..." msgstr "Hala niður innskots upplýsingum. Vinsamlega bíðið..." @@ -1125,9 +1107,6 @@ msgstr "" msgid "Encryption Type" msgstr "Gerð kóðunar" -msgid "End" -msgstr "Hætta" - msgid "End time" msgstr "Loka tími" @@ -1201,6 +1180,9 @@ msgstr "Framganga keyrslu:" msgid "Execution finished!!" msgstr "Keyrslu lokið!" +msgid "Exif" +msgstr "" + msgid "Exit" msgstr "Hætta" @@ -1276,9 +1258,6 @@ msgstr "" "Fyrst þarf að hala niður nýjustu uppfærslum til að búa til keyranlegan USB " "Staut. " -msgid "Fix USB stick" -msgstr "Laga USB staut" - msgid "Flash" msgstr "Forritun" @@ -1294,6 +1273,9 @@ msgstr "Forma" msgid "Frame repeat count during non-smooth winding" msgstr "Fjöldi ramma við hraðspólun" +msgid "Frame size in full view" +msgstr "" + msgid "French" msgstr "Franska" @@ -1811,6 +1793,9 @@ msgstr "Ekki 50 Hz, því miður. :(" msgid "No HDD found or HDD not initialized!" msgstr "Fann ekki harðan disk eða hann ekki formaður!" +msgid "No Networks found" +msgstr "" + msgid "No backup needed" msgstr "Afritun óþörf" @@ -1844,6 +1829,9 @@ msgstr "Það fannst ekki móttakari sem styður staðsetjara." msgid "No satellite frontend found!!" msgstr "Það fannst ekki gervihnattamóttakari!!" +msgid "No tags are set on these movies." +msgstr "" + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Enginn móttakari er stilltur til að nota með staðsetjara!" @@ -1936,15 +1924,6 @@ msgstr "" msgid "Now Playing" msgstr "Spila núna" -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 "" -"Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota fyrir " -"keyranlegar USB stýrikerfi. Ãttu á OK þegar þú ert búinn að setja hann í " -"samband." - 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 " @@ -1984,9 +1963,6 @@ msgstr "Bara fríar rásir" msgid "Orbital Position" msgstr "Staðsetnging gervihnattar" -msgid "Other..." -msgstr "Annað..." - msgid "PAL" msgstr "PAL" @@ -2021,15 +1997,15 @@ msgstr "Uppsetning á foreldrastýringu" msgid "Parental control type" msgstr "Gerð foreldrastýringar" -msgid "Partitioning USB stick..." -msgstr "Bý til diskhluta á USB staut..." - msgid "Pause movie at end" msgstr "Setja á pásu við enda myndar" msgid "PiPSetup" msgstr "Uppsetning Mynd í Mynd" +msgid "PicturePlayer" +msgstr "" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Pillarbox" @@ -2073,6 +2049,11 @@ msgstr "Vinsamlega veldur pakka..." msgid "Please choose the default services lists you want to install." msgstr "Vinsamlega veldu sjálfgefinn rásalista sem að þú vilt nota." +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!" msgstr "Ekki breyta gildum ef þú veist ekki hvað þú ert að gera!" @@ -2128,8 +2109,8 @@ msgstr "Velja undirrás til að taka upp..." msgid "Please select a subservice..." msgstr "Vinsamlega veldu undirrás..." -msgid "Please select keyword to filter..." -msgstr "Veldu orð til að leita út..." +msgid "Please select tag to filter..." +msgstr "" msgid "Please select target directory or medium" msgstr "Vinsamlega veldu möppu eða geymslu" @@ -2165,9 +2146,6 @@ msgstr "" msgid "Please wait for activation of your network configuration..." msgstr "" -msgid "Please wait for md5 signature verification..." -msgstr "Vinsamlega bíðið eftir staðfestingu md5 staðfestingu..." - msgid "Please wait while we configure your network..." msgstr "" @@ -2348,9 +2326,6 @@ msgstr "Hressingar tíðni" msgid "Refresh rate selection." msgstr "Hressingar tíðni val." -msgid "Remounting stick partition..." -msgstr "Endurtengi diskhluta stauts..." - msgid "Remove Bookmark" msgstr "Taka út bókamerki" @@ -2840,9 +2815,6 @@ msgstr "Biðstaða" msgid "Standby / Restart" msgstr "Biðstaða / Endurræsing" -msgid "Start" -msgstr "Byrja" - msgid "Start from the beginning" msgstr "Byrja frá byrjun" @@ -2949,6 +2921,15 @@ msgstr "Sjónvarps kerfi" msgid "Table of content for collection" msgstr "Efnisyfirlit yfir safn" +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + msgid "Terrestrial" msgstr "Stafrænt í lofti" @@ -2971,17 +2952,6 @@ msgstr "" "Takk fyrir að nota álfinn. Núna er móttakarinn tilbúinn til notkunar.\n" "Ãttu á OK til að byrja að nota móttakarann," -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 stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið " -"niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá getur " -"þú endurræst og með því að halda niður 'Niður' takka framaná móttakaranum þá " -"getur þú valið stýrikerfi frá stautnum!" - 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 " @@ -2990,6 +2960,11 @@ msgstr "" "DVD staðallinn er ekki með möguleika á H.264 (HDTV). Viltu búa til Dreambox " "gagna disk (sem ekki er hægt að venjulegum DVD spilara) í staðinn." +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." msgstr "Afritun mistókst. Veldu annan stað fyrir afritið." @@ -3194,6 +3169,9 @@ msgstr "Mörk" msgid "Thu" msgstr "Fim" +msgid "Thumbnails" +msgstr "" + msgid "Thursday" msgstr "Fimmtudagur" @@ -3243,6 +3221,9 @@ msgstr "Lifandi pása" msgid "Timeshift not possible!" msgstr "Tímabreyting ekki möguleg!" +msgid "Timeshift path..." +msgstr "" + msgid "Timezone" msgstr "Tímabelti" @@ -3259,12 +3240,13 @@ msgid "Titleset mode" msgstr "" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." msgstr "" -"Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB stautinn " -"úr sambandi og tengja hann aftur þegar þú ert beðinn um það. Ãttu á OK þegar " -"þú er búinn að taka hann úr sambandi." msgid "Today" msgstr "à dag" @@ -3353,6 +3335,12 @@ msgstr "USB" msgid "USB Stick" msgstr "USB stautur" +msgid "USB stick wizard" +msgstr "" + +msgid "Ukrainian" +msgstr "" + msgid "" "Unable to complete filesystem check.\n" "Error: " @@ -3397,6 +3385,9 @@ msgstr "Uppfæri" msgid "Upgrading Dreambox... Please wait" msgstr "Uppfæri Dreamboxið...vinsamlegast bíðið" +msgid "Use" +msgstr "" + msgid "Use DHCP" msgstr "Nota DHCP" @@ -3530,9 +3521,6 @@ msgstr "WSS á 4:3" msgid "Waiting" msgstr "Bíð" -msgid "Waiting for USB stick to settle..." -msgstr "Bíð eftir að USB tengist..." - 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" @@ -3600,6 +3588,9 @@ msgstr "Að hverju viltu leita?" msgid "Where do you want to backup your settings?" msgstr "Hvar viltu vista afritið?" +msgid "Where to save temporary timeshift recordings?" +msgstr "" + msgid "Wireless" msgstr "Þráðlaust" @@ -3615,9 +3606,6 @@ msgstr "Tókst ekki að skrifa!" msgid "Writing NFI image file to flash completed" msgstr "Búið að skrifa .NFI stýrikerfi í minni" -msgid "Writing image file to NAND Flash" -msgstr "Skrifa stýrikerfi í NAND Flash" - msgid "YPbPr" msgstr "YPbPr" @@ -3739,15 +3727,6 @@ msgstr "" "leiðbeinungunum á síðunni þá mun nýja stýrikerfið biðja þig um að setja " "aftur inn afritið." -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Þú þarft að velja einhver orð fyrst!\n" -"Ãttu á menu lykilinn til að setja inn orð.\n" -"Viltu setja inn orð núna?" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -3902,19 +3881,25 @@ msgstr "til baka" msgid "background image" msgstr "bakgrunns mynd" +msgid "backgroundcolor" +msgstr "" + msgid "better" msgstr "betra" +msgid "black" +msgstr "" + msgid "blacklist" msgstr "svarti listi" +msgid "blue" +msgstr "" + #, python-format msgid "burn audio track (%s)" msgstr "" -msgid "by Exif" -msgstr "by Exif" - msgid "change recording (duration)" msgstr "breyta upptöku (tíma)" @@ -3966,12 +3951,12 @@ msgstr "daglega" msgid "day" msgstr "dagur" -msgid "delete" -msgstr "eyða" - msgid "delete cut" msgstr "eyða klippingu" +msgid "delete file" +msgstr "" + msgid "delete playlist entry" msgstr "eyða atriði úr spilunarlista" @@ -4074,6 +4059,9 @@ msgstr "" msgid "failed" msgstr "tókst ekki" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + msgid "filename" msgstr "skráarnafn" @@ -4098,6 +4086,9 @@ msgstr "fara í djúpsvefn" msgid "go to standby" msgstr "fara í biðstöðu" +msgid "green" +msgstr "" + msgid "headline" msgstr "yfirskrift" @@ -4107,6 +4098,9 @@ msgstr "hlusta á útvarp...." msgid "help..." msgstr "hjálp..." +msgid "hidden network" +msgstr "" + msgid "hide extended description" msgstr "fela auka upplýsingar" @@ -4247,9 +4241,6 @@ msgstr "nei" msgid "no HDD found" msgstr "fann ekki harða disk" -msgid "no Picture found" -msgstr "fannst engin mynd" - msgid "no module found" msgstr "fann ekki einingu" @@ -4328,15 +4319,15 @@ msgstr "fyrri rás" msgid "previous channel in history" msgstr "fyrri rás í sögu" -msgid "rebooting..." -msgstr "endurræsi..." - msgid "record" msgstr "taka upp" msgid "recording..." msgstr "tek upp...." +msgid "red" +msgstr "" + msgid "remove a nameserver entry" msgstr "" @@ -4385,9 +4376,15 @@ msgstr "fara til baka á fyrri kafla" msgid "right" msgstr "hægri" +msgid "save last directory on exit" +msgstr "" + msgid "save playlist" msgstr "vista spilunarlista" +msgid "save playlist on exit" +msgstr "" + msgid "scan done!" msgstr "leit lokið!" @@ -4440,6 +4437,9 @@ msgstr "sýna aðalvalmynd DVD " msgid "show EPG..." msgstr "sýna EPG" +msgid "show Infoline" +msgstr "" + msgid "show all" msgstr "sýna allt" @@ -4452,11 +4452,11 @@ msgstr "sýna atriði nánar" msgid "show extended description" msgstr "sýna auka upplýsingar" -msgid "show first tag" -msgstr "sýna fyrsta merki" +msgid "show first selected tag" +msgstr "" -msgid "show second tag" -msgstr "sýna annað merki" +msgid "show second selected tag" +msgstr "" msgid "show shutdown menu" msgstr "sýna slökkva valmynd" @@ -4491,6 +4491,9 @@ msgstr "fara áfram" msgid "skip forward (enter time)" msgstr "stökkva áfram (slá inn tíma)" +msgid "slide picture in loop" +msgstr "" + msgid "sort by date" msgstr "raða eftir dagsetningu" @@ -4506,6 +4509,9 @@ msgstr "biðstaða" msgid "start cut here" msgstr "byrja að klippa hér" +msgid "start directory" +msgstr "" + msgid "start timeshift" msgstr "byrja lifandi pásu" @@ -4545,6 +4551,9 @@ msgstr "skipta á næsta undirtexta" msgid "text" msgstr "texti" +msgid "textcolor" +msgstr "" + msgid "this recording" msgstr "þessi upptaka" @@ -4596,6 +4605,9 @@ msgstr "hvíti listi" msgid "year" msgstr "ár" +msgid "yellow" +msgstr "" + msgid "yes" msgstr "já" @@ -4652,6 +4664,9 @@ msgstr "stokkið" #~ msgid "%s (%s, %d MB free)" #~ msgstr "%s (%s, %d MB laus)" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr ".NFI keyranlegt stýrikerfi af USB staut tilbúið." + #~ msgid "0 V" #~ msgstr "0 V" @@ -4693,6 +4708,9 @@ msgstr "stokkið" #~ msgid "Add service" #~ msgstr "Bæta við rás" +#~ msgid "All..." +#~ msgstr "Allt..." + #~ msgid "Ask before zapping" #~ msgstr "Spyrja fyrir rásastökk" @@ -4717,9 +4735,15 @@ msgstr "stokkið" #~ msgid "Confirm" #~ msgstr "Staðfestu" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Afrita keyranlegt USB stýrikerfi yfir á staut..." + #~ msgid "Custom skip time for 1/3 keys" #~ msgstr "Setja sökk tímabil fyrir 1/3 lykla" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "Afþjappa keyranlegt USB stauts stýrikerfi..." + #~ msgid "Default" #~ msgstr "Venjulegt" @@ -4749,6 +4773,9 @@ msgstr "stokkið" #~ "Viltu örugglega hala niður\n" #~ "þetta innskot \"" +#~ msgid "Do you really want to exit?" +#~ msgstr "Viltu virkilega hætta?" + #~ msgid "Do you want to enable the parental control feature or your dreambox?" #~ msgstr "Viltu gera barnalæsingu virka í Dreamboxinu?" @@ -4762,9 +4789,15 @@ msgstr "stokkið" #~ msgid "Do you want to view a cutlist tutorial?" #~ msgstr "Viltu horfa á leiðbeinungar um klippingar?" +#~ msgid "Downloading image description..." +#~ msgstr "Hleð niður lýsingu stýrikerfis..." + #~ msgid "Dreambox to standby. Do that now?" #~ msgstr "Fara í biðstöðu. Gera það núna?" +#~ msgid "End" +#~ msgstr "Hætta" + #~ msgid "Enigma1 like radiomode" #~ msgstr "Útvarps stilling eins og Enigma1" @@ -4777,6 +4810,9 @@ msgstr "stokkið" #~ msgid "Fast zapping" #~ msgstr "Stökkva hratt" +#~ msgid "Fix USB stick" +#~ msgstr "Laga USB staut" + #~ msgid "Games / Plugins" #~ msgstr "Leikir / Innskot" @@ -4846,12 +4882,33 @@ msgstr "stokkið" #~ msgid "Nothing connected" #~ msgstr "Ekkert tengt" +#~ 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 "" +#~ "Tengdu núna USB stautinn (minnsta stærð er 64 MB) sem að þú vilt nota " +#~ "fyrir keyranlegar USB stýrikerfi. Ãttu á OK þegar þú ert búinn að setja " +#~ "hann í samband." + +#~ msgid "Other..." +#~ msgstr "Annað..." + #~ msgid "Parental Control" #~ msgstr "Foreldra stýring" #~ msgid "Parental Lock" #~ msgstr "Foreldra stýring" +#~ msgid "Partitioning USB stick..." +#~ msgstr "Bý til diskhluta á USB staut..." + +#~ msgid "Please select keyword to filter..." +#~ msgstr "Veldu orð til að leita út..." + +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "Vinsamlega bíðið eftir staðfestingu md5 staðfestingu..." + #~ msgid "Positioner mode" #~ msgstr "Stilling mótorstýringar" @@ -4903,6 +4960,9 @@ msgstr "stokkið" #~ msgid "Remember service pin" #~ msgstr "Muna kóða fyrir rásir" +#~ msgid "Remounting stick partition..." +#~ msgstr "Endurtengi diskhluta stauts..." + #~ msgid "Remove service" #~ msgstr "Eyða rás" @@ -4948,6 +5008,9 @@ msgstr "stokkið" #~ msgid "Socket " #~ msgstr "Tengi" +#~ msgid "Start" +#~ msgstr "Byrja" + #~ msgid "Startwizard" #~ msgstr "Byrja álf" @@ -4957,12 +5020,32 @@ msgstr "stokkið" #~ msgid "Swap services" #~ msgstr "Skipta á milli rása" +#~ 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 stýrikerfis stautur er nú tilbúinn til notkunar. Nú getur þú hlaðið " +#~ "niður .NFI stýrikerfi frá strauma vefþjón og vistað það á stautnum. Þá " +#~ "getur þú endurræst og með því að halda niður 'Niður' takka framaná " +#~ "móttakaranum þá getur þú valið stýrikerfi frá stautnum!" + #~ msgid "The sleep timer has been acitvated." #~ msgstr "Tímastilling fyrir biðstöðu er virkur." #~ msgid "Timeshifting" #~ msgstr "Lifandi pása" +#~ 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 "" +#~ "Til að vera viss um að þú viljir gera þetta þá átt þú að taka USB " +#~ "stautinn úr sambandi og tengja hann aftur þegar þú ert beðinn um það. " +#~ "Ãttu á OK þegar þú er búinn að taka hann úr sambandi." + #~ msgid "Transpondertype" #~ msgstr "Gerð sendis" @@ -4990,18 +5073,39 @@ msgstr "stokkið" #~ msgid "Visualize positioner movement" #~ msgstr "Sýna færslu mótorsins" +#~ msgid "Waiting for USB stick to settle..." +#~ msgstr "Bíð eftir að USB tengist..." + +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "Skrifa stýrikerfi í NAND Flash" + #~ msgid "Yes, scan now" #~ msgstr "Já, leita núna" +#~ msgid "" +#~ "You need to define some keywords first!\n" +#~ "Press the menu-key to define keywords.\n" +#~ "Do you want to define keywords now?" +#~ msgstr "" +#~ "Þú þarft að velja einhver orð fyrst!\n" +#~ "Ãttu á menu lykilinn til að setja inn orð.\n" +#~ "Viltu setja inn orð núna?" + #~ msgid "You selected a playlist" #~ msgstr "Þú valdir spilunarlista" #~ msgid "add bouquet..." #~ msgstr "bæta við rásavendi..." +#~ msgid "by Exif" +#~ msgstr "by Exif" + #~ msgid "copy to favourites" #~ msgstr "bæta við uppáhalds lista" +#~ msgid "delete" +#~ msgstr "eyða" + #~ msgid "empty/unknown" #~ msgstr "tómur/óþekkt" @@ -5017,6 +5121,9 @@ msgstr "stokkið" #~ msgid "loopthrough to socket A" #~ msgstr "tengt frá tengi A" +#~ msgid "no Picture found" +#~ msgstr "fannst engin mynd" + #~ msgid "only /etc/enigma2 directory" #~ msgstr "bara /etc/enigma2 mappa" @@ -5026,6 +5133,9 @@ msgstr "stokkið" #~ msgid "play previous playlist entry" #~ msgstr "spila fyrra atriði á spilunarlista" +#~ msgid "rebooting..." +#~ msgstr "endurræsi..." + #~ msgid "remove bouquet" #~ msgstr "eyða fléttu" @@ -5063,6 +5173,12 @@ msgstr "stokkið" #~ msgid "select Slot" #~ msgstr "veldu hólf" +#~ msgid "show first tag" +#~ msgstr "sýna fyrsta merki" + +#~ msgid "show second tag" +#~ msgstr "sýna annað merki" + #~ msgid "skip backward (self defined)" #~ msgstr "stökkva til baka (ákveðinn tíma)" diff --git a/po/it.po b/po/it.po old mode 100755 new mode 100644 index b7a6d6f5..f9514444 --- a/po/it.po +++ b/po/it.po @@ -4,8 +4,8 @@ msgid "" msgstr "" "Project-Id-Version: enigma2 Italian Locale\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-14 07:24+0100\n" -"PO-Revision-Date: 2008-09-23 09:02+0100\n" +"POT-Creation-Date: 2008-11-24 14:31+0100\n" +"PO-Revision-Date: 2008-11-21 09:29+0100\n" "Last-Translator: Spaeleus \n" "Language-Team: WWW.LINSAT.NET \n" "MIME-Version: 1.0\n" @@ -54,7 +54,7 @@ msgstr "%H:%M" #, python-format msgid "%d jobs are running in the background!" -msgstr "" +msgstr "%d applicazioni attive in background!" #, python-format msgid "%d min" @@ -89,20 +89,18 @@ msgid "(show optional DVD audio menu)" msgstr "(Mostrare il menu opzionale DVD audio)" msgid "* Only available if more than one interface is active." -msgstr "" +msgstr "* Disponibile solo se più di una intefaccia è attiva." msgid "* Only available when entering hidden SSID or network key" -msgstr "" +msgstr "* Disponibile solo su inserimento SSID nascosto o chiave di rete" msgid ".NFI Download failed:" -msgstr "" - -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr "" +msgstr "Scaricamento .nfi fallito:" msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" +"Verifica \"md5sum\" file .nfi superata.L'immagine può essere installata!" msgid "/usr/share/enigma2 directory" msgstr "Cartella /usr/share/enigma2" @@ -340,7 +338,7 @@ msgid "Add timer" msgstr "Agg. timer" msgid "Add title" -msgstr "Aggiungere titolo" +msgstr "Agg. Titolo" msgid "Add to bouquet" msgstr "Aggiungere al bouquet" @@ -384,9 +382,6 @@ msgstr "Tutti" msgid "All Satellites" msgstr "Tutti i satelliti" -msgid "All..." -msgstr "Tutti" - msgid "Alpha" msgstr "Trasparenza" @@ -409,6 +404,8 @@ msgid "" "Are you sure you want to activate this network configuration?\n" "\n" msgstr "" +"Attivare questa configurazione di rete?\n" +"\n" msgid "" "Are you sure you want to restart your network interfaces?\n" @@ -442,7 +439,7 @@ msgid "Auto" msgstr "Auto" msgid "Auto chapter split every ? minutes (0=never)" -msgstr "Divisione automatica capitoli ogni ? minuti (0=mai)" +msgstr "Divisione automatica capitoli ogni \"x\" minuti (0=mai)" msgid "Auto scart switching" msgstr "Scambio automatico scart" @@ -475,7 +472,7 @@ msgid "Back" msgstr "Indietro" msgid "Background" -msgstr "" +msgstr "Sfondo" msgid "Backup" msgstr "Backup" @@ -523,7 +520,7 @@ msgid "Burn DVD" msgstr "Masterizzare DVD" msgid "Burn existing image to DVD" -msgstr "" +msgstr "Scrivere immagine esistente su DVD" msgid "Burn to DVD..." msgstr "Masterizzare su DVD" @@ -561,7 +558,7 @@ msgid "Cancel" msgstr "Annulla" msgid "Cannot parse feed directory" -msgstr "" +msgstr "Analisi cartella feed impossibile!" msgid "Capacity: " msgstr "Capacità: " @@ -576,7 +573,7 @@ msgid "Change bouquets in quickzap" msgstr "Cambio di bouquet nello zapping veloce" msgid "Change dir." -msgstr "" +msgstr "Camb. cart." msgid "Change pin code" msgstr "Cambiare codice PIN" @@ -687,7 +684,7 @@ msgid "Complete" msgstr "Completo" msgid "Complex (allows mixing audio tracks and aspects)" -msgstr "" +msgstr "Complessa (permette mix tracce audio e aspetti)" msgid "Configuration Mode" msgstr "Configurazione" @@ -724,7 +721,7 @@ msgid "Content does not fit on DVD!" msgstr "Le dimensioni superano la capacità del DVD!" msgid "Continue in background" -msgstr "" +msgstr "Proseguire in background" msgid "Continue playing" msgstr "Riproduzione continua" @@ -732,17 +729,14 @@ msgstr "Riproduzione continua" msgid "Contrast" msgstr "Contrasto" -msgid "Copying USB flasher boot image to stick..." -msgstr "" - msgid "Could not connect to Dreambox .NFI Image Feed Server:" -msgstr "" +msgstr "Collegamento a server Immagini .nfi Dreambox impossibile:" msgid "Could not load Medium! No disc inserted?" msgstr "Impossibile caricare supporto! Nessun disco Inserito?" msgid "Create DVD-ISO" -msgstr "" +msgstr "Creare DVD-ISO" msgid "Create movie folder failed" msgstr "Creazione cartella video fallita!" @@ -803,7 +797,7 @@ msgid "DVD Player" msgstr "Player DVD" msgid "DVD media toolbox" -msgstr "" +msgstr "Strumenti supporti DVD" msgid "Danish" msgstr "Danese" @@ -811,9 +805,6 @@ msgstr "Danese" msgid "Date" msgstr "Data" -msgid "Decompressing USB stick flasher boot image..." -msgstr "" - msgid "Deep Standby" msgstr "Spegnimento (Deep-Standby)" @@ -847,7 +838,7 @@ msgid "Description" msgstr "Descrizione" msgid "Destination directory" -msgstr "" +msgstr "Cartella destinazione" msgid "Detected HDD:" msgstr "HDD rilevato:" @@ -871,7 +862,7 @@ msgid "DiSEqC repeats" msgstr "Ripetizioni DiSEqC" msgid "Direct playback of linked titles without menu" -msgstr "Riproduzione diretta dei titoli collegati senza Menu" +msgstr "Riproduzione diretta dei titoli senza Menu" #, python-format msgid "Directory %s nonexistent." @@ -919,6 +910,8 @@ msgid "" "Do you really want to REMOVE\n" "the plugin \"%s\"?" msgstr "" +"Confermare la cancellazione\n" +"del plugin \"%s\"?" msgid "" "Do you really want to check the filesystem?\n" @@ -936,9 +929,8 @@ msgid "" "Do you really want to download\n" "the plugin \"%s\"?" msgstr "" - -msgid "Do you really want to exit?" -msgstr "Uscire?" +"Confermare il download\n" +"del plugin \"%s\"?" msgid "" "Do you really want to initialize the harddisk?\n" @@ -1011,16 +1003,16 @@ msgid "Done - Installed or upgraded %d packages with %d errors" msgstr "Fatto! Installati o aggiornati %d pacchetti con %d errori" msgid "Download" -msgstr "" +msgstr "Download" msgid "Download .NFI-Files for USB-Flasher" -msgstr "" +msgstr "Scaricare file .nfi per Flasher USB" msgid "Download Plugins" msgstr "Scaricare Plugin" msgid "Download of USB flasher boot image failed: " -msgstr "" +msgstr "Scaricamento immagine di avvio Flasher USB fallito: " msgid "Downloadable new plugins" msgstr "Nuovi plugin scaricabili" @@ -1031,14 +1023,11 @@ msgstr "Plugin scaricabili" msgid "Downloading" msgstr "Download in corso" -msgid "Downloading image description..." -msgstr "" - msgid "Downloading plugin information. Please wait..." msgstr "Ricerca informazioni plugin in corso. Attendere..." msgid "Dreambox format data DVD (HDTV compatible)" -msgstr "DVD in formato dati Dreambox (compatibile HDTV)" +msgstr "DVD in formato dati Dreambox (compat. HDTV)" msgid "Dutch" msgstr "Olandese" @@ -1057,16 +1046,16 @@ msgid "East" msgstr "Est" msgid "Edit" -msgstr "" +msgstr "Modif." msgid "Edit DNS" msgstr "Mod. DNS" msgid "Edit Title" -msgstr "" +msgstr "Mod. Titolo" msgid "Edit chapters of current title" -msgstr "Modifica capitolo del titolo corrente" +msgstr "Modifica capitoli del titolo corrente" msgid "Edit services list" msgstr "Modificare lista canali" @@ -1081,7 +1070,7 @@ msgid "Edit the network configuration of your Dreambox.\n" msgstr "Modificare la configurazione di rete del DreamBox.\n" msgid "Edit title" -msgstr "Modificare titolo" +msgstr "Mod. Titolo" msgid "Electronic Program Guide" msgstr "Guida Programmi Elettronica" @@ -1111,14 +1100,11 @@ msgid "Encryption Key" msgstr "Chiave Codifica" msgid "Encryption Keytype" -msgstr "" +msgstr "Tipo chiave codifica" msgid "Encryption Type" msgstr "Tipo Codifica" -msgid "End" -msgstr "Fine" - msgid "End time" msgstr "Ora fine" @@ -1156,10 +1142,10 @@ msgid "Enter Rewind at speed" msgstr "Avviare REW a velocità" msgid "Enter WLAN network name/SSID:" -msgstr "" +msgstr "Inserire nome di rete/SSID WLAN:" msgid "Enter WLAN passphrase/key:" -msgstr "" +msgstr "Inserire password/chiave WLAN" msgid "Enter main menu..." msgstr "Menu Principale" @@ -1171,7 +1157,7 @@ msgid "Error" msgstr "Errore" msgid "Error executing plugin" -msgstr "" +msgstr "Errore in esecuzione plugin!" #, python-format msgid "" @@ -1188,11 +1174,14 @@ msgid "Everything is fine" msgstr "Tutto OK!" msgid "Execution Progress:" -msgstr "Esecuzione processo:" +msgstr "Processo in esecuzione:" msgid "Execution finished!!" msgstr "Esecuzione finita!!" +msgid "Exif" +msgstr "Exif" + msgid "Exit" msgstr "Uscire" @@ -1209,10 +1198,10 @@ msgid "Expert" msgstr "Esperto" msgid "Extended Networksetup Plugin..." -msgstr "" +msgstr "Plugin esteso Configurazione Rete" msgid "Extended Setup..." -msgstr "" +msgstr "Configurazione Estesa" msgid "Extensions" msgstr "Estensioni" @@ -1254,36 +1243,36 @@ msgid "Finished" msgstr "Terminato" msgid "Finished configuring your network" -msgstr "" +msgstr "Configurazione di rete terminata" msgid "Finished restarting your network" -msgstr "" +msgstr "Riavvio rete terminato" msgid "Finnish" msgstr "Finlandese" msgid "" "First we need to download the latest boot environment for the USB flasher." -msgstr "" - -msgid "Fix USB stick" -msgstr "" +msgstr "E' necessario scaricare l'ambiente aggiornato per il flasher USB." msgid "Flash" -msgstr "" +msgstr "Flash" msgid "Flashing failed" -msgstr "" +msgstr "Flash fallito!" msgid "Font size" -msgstr "Dimensione carattere" +msgstr "Dim. Carattere" msgid "Format" -msgstr "" +msgstr "Formattare" msgid "Frame repeat count during non-smooth winding" msgstr "FRC durante riproduzione discontinua" +msgid "Frame size in full view" +msgstr "Dimensione frame in visualizzazione piena" + msgid "French" msgstr "Francese" @@ -1365,7 +1354,7 @@ msgid "Harddisk standby after" msgstr "Standby Harddisk dopo" msgid "Hidden network SSID" -msgstr "" +msgstr "SSID Rete nascosto" msgid "Hierarchy Information" msgstr "Informazioni gerarchia" @@ -1383,10 +1372,10 @@ msgid "IP Address" msgstr "Indirizzo IP" msgid "ISO file is too large for this filesystem!" -msgstr "" +msgstr "File ISO troppo grande per questo filesystem!" msgid "ISO path" -msgstr "" +msgstr "Percorso ISO" msgid "Icelandic" msgstr "Islandese" @@ -1423,7 +1412,7 @@ msgstr "" "Quando il risultato appare soddisfacente, premere OK." msgid "Image flash utility" -msgstr "" +msgstr "Utilità flash immagini" msgid "Image-Upgrade" msgstr "Aggiornamento Immagine" @@ -1594,7 +1583,7 @@ msgid "Load" msgstr "Caricare" msgid "Load Length of Movies in Movielist" -msgstr "" +msgstr "Caricare durata registrazioni nella lista" msgid "Local Network" msgstr "Rete Locale" @@ -1720,7 +1709,7 @@ msgid "NEXT" msgstr "PROSSIMI" msgid "NFI image flashing completed. Press Yellow to Reboot!" -msgstr "" +msgstr "Inst. immagine completata. Per riavviare premere \"Giallo\"!" msgid "NOW" msgstr "IN ONDA" @@ -1804,6 +1793,9 @@ msgstr "50 Hz non disponibili. :(" msgid "No HDD found or HDD not initialized!" msgstr "HDD non trovato o non formattato!" +msgid "No Networks found" +msgstr "Nessuna rete rilevata!" + msgid "No backup needed" msgstr "Backup non necessario" @@ -1815,7 +1807,7 @@ msgstr "" "(Timeout in lettura PAT)" msgid "No details for this image file" -msgstr "" +msgstr "Nessun dettaglio disponibile per questo file" msgid "No event info found, recording indefinitely." msgstr "Nessuna informazione sull'evento, registrazione illimitata." @@ -1837,6 +1829,9 @@ msgstr "Nessun apparato in grado di pilotare un motore è disponibile!" msgid "No satellite frontend found!!" msgstr "Nessun apparato satellitare trovato!!!" +msgid "No tags are set on these movies." +msgstr "Nessuna etichetta configurata su queste registrazioni." + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Nessun tuner è configurato per l'utilizzo di un motore!" @@ -1848,7 +1843,7 @@ msgstr "" "Configurare i tuner prima di effettuare una ricerca canali." msgid "No useable USB stick found" -msgstr "" +msgstr "Nessuna penna USB utilizzabile rilevata!" msgid "" "No valid service PIN found!\n" @@ -1873,18 +1868,27 @@ msgid "" "Please verify that you have attached a network cable and your network is " "configured correctly." msgstr "" +"Nessuna scheda di rete locate trovata!\n" +"Verificare che il cavo sia collegato e che la rete sia configurata " +"correttamente." msgid "" "No working wireless network adapter found.\n" "Please verify that you have attached a compatible WLAN device and your " "network is configured correctly." msgstr "" +"Nessun adattatore di rete wireless trovato!\n" +"Verificare di aver collegato un adattatore WLAN compatibile e che la rete " +"sia configurata correttamente." msgid "" "No working wireless network interface found.\n" " Please verify that you have attached a compatible WLAN device or enable " "your local network interface." msgstr "" +"Nessuna interfaccia wireless attiva trovata!\n" +"Verificare di aver collegato un dispositivo WLAN compatibile e di aver " +"abilitato l'interfaccia di rete locale." msgid "No, but restart from begin" msgstr "No, riprendere dall'inizio" @@ -1929,12 +1933,6 @@ msgstr "" msgid "Now Playing" msgstr "In riproduzione" -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 "" - 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 " @@ -1954,7 +1952,7 @@ msgid "OSD Settings" msgstr "Configurazione OSD" msgid "OSD visibility" -msgstr "" +msgstr "Trasparenza OSD" msgid "Off" msgstr "Off" @@ -1974,9 +1972,6 @@ msgstr "Solo canali \"in chiaro\"" msgid "Orbital Position" msgstr "Posizione orbitale" -msgid "Other..." -msgstr "Altro" - msgid "PAL" msgstr "PAL" @@ -2011,15 +2006,15 @@ msgstr "Configurazione Controllo Parentale" msgid "Parental control type" msgstr "Tipo Controllo Parentale" -msgid "Partitioning USB stick..." -msgstr "" - msgid "Pause movie at end" msgstr "Riproduzione in pausa al termine" msgid "PiPSetup" msgstr "Configurazione PiP" +msgid "PicturePlayer" +msgstr "PicturePlayer" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Pillarbox" @@ -2034,7 +2029,7 @@ msgid "Play" msgstr "Play" msgid "Play Audio-CD..." -msgstr "" +msgstr "Rirodurre CD Audio..." msgid "Play recorded movies..." msgstr "Riprodurre Registrazioni" @@ -2049,10 +2044,10 @@ msgid "Please change recording endtime" msgstr "Cambiare ora fine registrazione" msgid "Please check your network settings!" -msgstr "" +msgstr "Verificare la configurazione di rete!" msgid "Please choose .NFI image file from feed server to download" -msgstr "" +msgstr "Selezionare l'immagine .nfi da scaricare dal server feed" msgid "Please choose an extension..." msgstr "Selezionare un'estensione" @@ -2063,6 +2058,13 @@ msgstr "Selezionare il pacchetto" msgid "Please choose the default services lists you want to install." msgstr "Sceglere la lista di canali predefinita da installare." +msgid "" +"Please disconnect all USB devices from your Dreambox and (re-)attach the " +"target USB stick (minimum size is 64 MB) now!" +msgstr "" +"Ora scollegare tutti i dispositivi USB dal Dreambox, poi ricollegare la " +"penna USB di destinazione (capacità minima 64 MB)!" + msgid "Please do not change any values unless you know what you are doing!" msgstr "" "Non modificare alcun valore se non si è sicuri di quello che si sta facendo!" @@ -2105,7 +2107,7 @@ msgid "Please press OK!" msgstr "Premere OK!" msgid "Please select .NFI flash image file from medium" -msgstr "" +msgstr "Selezionare immagine .nfi dal supporto" msgid "Please select a playlist to delete..." msgstr "Selezionare la playlist da cancellare" @@ -2119,11 +2121,11 @@ msgstr "Selezionare un sottoservizio da registrare" msgid "Please select a subservice..." msgstr "Selezionare un sottoservizio" -msgid "Please select keyword to filter..." -msgstr "Selezionare una parola chiave come filtro" +msgid "Please select tag to filter..." +msgstr "Selezionare una etichetta come filtro" msgid "Please select target directory or medium" -msgstr "" +msgstr "Selezionare cartella o supporto di destinazione" msgid "Please select the movie path..." msgstr "Selezionare cartella video" @@ -2154,19 +2156,16 @@ msgstr "" "confermare." msgid "Please wait for activation of your network configuration..." -msgstr "" - -msgid "Please wait for md5 signature verification..." -msgstr "" +msgstr "Attendere: attivazione configurazione di rete in corso..." msgid "Please wait while we configure your network..." -msgstr "" +msgstr "Attendere: configurazione rete in corso..." msgid "Please wait while your network is restarting..." -msgstr "" +msgstr "Attendere: riavvio della rete in corso..." msgid "Please wait..." -msgstr "" +msgstr "Attendere..." msgid "Please wait... Loading list..." msgstr "Attendere... Lista in caricamento." @@ -2250,7 +2249,7 @@ msgid "Primary DNS" msgstr "DNS Primario" msgid "Properties of current title" -msgstr "" +msgstr "Proprietà titolo corrente" msgid "Protect services" msgstr "Proteggere canali" @@ -2301,16 +2300,16 @@ msgid "Really exit the subservices quickzap?" msgstr "Uscire dallo zapping veloce sottoservizi?" msgid "Really reboot now?" -msgstr "" +msgstr "Riavviare ora?" msgid "Really restart now?" -msgstr "" +msgstr "Riavviare ora?" msgid "Really shutdown now?" -msgstr "" +msgstr "Spegnere ora?" msgid "Reboot" -msgstr "" +msgstr "Riavvio" msgid "Reception Settings" msgstr "Configurazione ricezione" @@ -2322,10 +2321,10 @@ msgid "Recorded files..." msgstr "Registrazioni..." msgid "Recording" -msgstr "Registrazione in corso" +msgstr "Registrazione..." msgid "Recording(s) are in progress or coming up in few seconds!" -msgstr "" +msgstr "Registrazioni in corso o in avvio a breve!" msgid "Recordings always have priority" msgstr "Le registrazioni hanno sempre la priorità" @@ -2339,9 +2338,6 @@ msgstr "Frequenza di aggiornamento" msgid "Refresh rate selection." msgstr "Selezione frequenza di aggiornamento." -msgid "Remounting stick partition..." -msgstr "" - msgid "Remove Bookmark" msgstr "Rimuovere segnalibro" @@ -2358,13 +2354,13 @@ msgid "Remove plugins" msgstr "Cancellare plugin" msgid "Remove the broken .NFI file?" -msgstr "" +msgstr "Rimuovere il file .nfi corrotto?" msgid "Remove the incomplete .NFI file?" -msgstr "" +msgstr "Rimuovere il file .nfi incompleto?" msgid "Remove title" -msgstr "Cancellare titolo" +msgstr "Canc. Titolo" #, python-format msgid "Removing directory %s failed. (Maybe not empty.)" @@ -2389,7 +2385,7 @@ msgid "Reset" msgstr "Reset" msgid "Reset and renumerate title names" -msgstr "" +msgstr "Resettare e rinumerare i titoli" msgid "Resolution" msgstr "Risoluzione" @@ -2617,7 +2613,7 @@ msgid "Select channel to record from" msgstr "Selezionare il canale di registrazione" msgid "Select image" -msgstr "" +msgstr "Selezionare un'immagine" msgid "Select refresh rate" msgstr "Selezionare la frequenza di refresh" @@ -2629,13 +2625,13 @@ msgid "Select video mode" msgstr "Selezionare la modalità video" msgid "Selected source image" -msgstr "" +msgstr "Selezionare immagine sorgente" msgid "Send DiSEqC" -msgstr "" +msgstr "Inviare DiSEqC" msgid "Send DiSEqC only on satellite change" -msgstr "" +msgstr "Inviare DiSEqC solo su cambio satellite" msgid "Seperate titles with a main menu" msgstr "Separare i titoli con un Menu Principale" @@ -2689,19 +2685,19 @@ msgid "Services" msgstr "Canali" msgid "Set Voltage and 22KHz" -msgstr "" +msgstr "Configurare voltaggio e 22KHz" msgid "Set as default Interface" msgstr "=> interfaccia predefinita" msgid "Set interface as default Interface" -msgstr "" +msgstr "=> interfaccia predefinita" msgid "Set limits" msgstr "Impostare limiti" msgid "Settings" -msgstr "Setting" +msgstr "Config." msgid "Setup" msgstr "Configurazione" @@ -2755,7 +2751,7 @@ msgid "Simple" msgstr "Semplice" msgid "Simple titleset (compatibility for legacy players)" -msgstr "" +msgstr "Set titoli semplice (compatibilità con riproduttori legacy)" msgid "Single" msgstr "Singolo" @@ -2835,9 +2831,6 @@ msgstr "Standby" msgid "Standby / Restart" msgstr "Standby / Riavvio" -msgid "Start" -msgstr "Avvio" - msgid "Start from the beginning" msgstr "Partire dall'inizio" @@ -2928,14 +2921,14 @@ msgstr "Sistema" #. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline) msgid "TRANSLATOR_INFO" msgstr "" -"Traduzione italiana\n" -"Dreambox - Enigma2 image\n" +"Traduzione italiana per\n" +"enigma2 - Dreambox\n" "Dario Croci - WWW.LINSAT.NET\n" "Supporto: spaeleus@croci.org.\n" -"- 7 Settembre 2008 -" +"- 21 novembre 2008 -" msgid "TS file is too large for ISO9660 level 1!" -msgstr "" +msgstr "File TS troppo grande per ISO9660 livello 1!" msgid "TV System" msgstr "Standard TV" @@ -2943,6 +2936,15 @@ msgstr "Standard TV" msgid "Table of content for collection" msgstr "Elenco contenuti raccolta" +msgid "Tag 1" +msgstr "Etich. 1" + +msgid "Tag 2" +msgstr "Etich. 2" + +msgid "Tags" +msgstr "Etich." + msgid "Terrestrial" msgstr "Terrestre" @@ -2963,14 +2965,7 @@ msgid "" "Please press OK to start using your Dreambox." msgstr "" "Grazie per aver usato questo wizard. Il DreamBox ora è pronto.\n" -"Premere OK per inziare ad usarlo." - -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 "" +"Premere OK per iniziare ad usarlo." msgid "" "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to " @@ -2980,6 +2975,13 @@ msgstr "" "Lo standard DVD non supporta flussi video H.264 (HDTV). Creare un DVD in " "formato dati Dreambox? (NON sarà riproducibile su lettori DVD standard!)" +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 "" +"Ora la penna USB è avviabile. Scaricare l'immagine più recente dal server e " +"salvarla sulla penna?" + msgid "The backup failed. Please choose a different backup location." msgstr "Backup fallito! Selezionare una destinazione differente per il backup." @@ -2991,6 +2993,11 @@ msgid "" "\n" "Do you want to write the USB flasher to this stick?" msgstr "" +"Rilevato il seguente dispositivo:\n" +"\n" +"%s\n" +"\n" +"Installare il flasher USB su questa penna?" msgid "" "The input port should be configured now.\n" @@ -3016,11 +3023,16 @@ msgid "" "you want to burn this image to flash memory? You are doing this at your own " "risk!" msgstr "" +"Validazione md5sum fallita, il file potrebbe essere corrotto! Il caricamento " +"di questa immagine su memoria flash potrebbe rappresentare un rischio! " +"Continuare?" msgid "" "The md5sum validation failed, the file may be downloaded incompletely or be " "corrupted!" msgstr "" +"Convalida md5sum fallita: il file potrebbe essere stato scaricato solo " +"parzialmente o essere corrotto!" msgid "The package doesn't contain anything." msgstr "Il pacchetto non contiene nulla" @@ -3077,22 +3089,28 @@ msgstr "" #, python-format msgid "This .NFI file does not contain a valid %s image!" -msgstr "" +msgstr "Il file .nfi non contiene un'immagine %s valida!" 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 "" +"Il file .nfi non possiede una firma md5 valida: non è garantito il suo " +"funzionamento. Installare comunque l'immagine sulla memoria flash?" msgid "" "This .NFI file has a valid md5 signature. Continue programming this image to " "flash memory?" msgstr "" +"Il file .nfi possiede una firma md5 valida. Continuare l'installazione " +"dell'immagine sulla memoria flash?" msgid "" "This DVD RW medium is already formatted - reformatting will erase all " "content on the disc." msgstr "" +"Il DVD-RW è già formattato - una nuova formattazione cancellerà tutto il " +"contenuto del disco!" #, python-format msgid "This Dreambox can't decode %s video streams!" @@ -3173,6 +3191,9 @@ msgstr "Soglia" msgid "Thu" msgstr "Gio" +msgid "Thumbnails" +msgstr "Miniature" + msgid "Thursday" msgstr "Giovedì" @@ -3204,6 +3225,8 @@ msgid "" "Timer overlap in timers.xml detected!\n" "Please recheck it!" msgstr "" +"Sovrapposizione Timer rilevata in timers.xml!\n" +"Ricontrollare!" msgid "Timer sanity error" msgstr "Errore congruenza Timer!" @@ -3220,6 +3243,9 @@ msgstr "Timeshift" msgid "Timeshift not possible!" msgstr "Timeshift impossibile!" +msgid "Timeshift path..." +msgstr "Percorso Timeshift" + msgid "Timezone" msgstr "Fuso orario" @@ -3227,18 +3253,28 @@ msgid "Title" msgstr "Titolo" msgid "Title properties" -msgstr "" +msgstr "Proprietà titolo" msgid "Title:" msgstr "Titolo:" msgid "Titleset mode" -msgstr "" +msgstr "Modalità set tioli" 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 "" +"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" +"3) Wait for bootup and follow instructions of the wizard." +msgstr "" +"Per aggiornare il firmware del Dreambox, seguire queste indicazioni:\n" +"1) Spegnere il box tramite l'interruttore posteriore e collegare la penna " +"USB avviabile.\n" +"2) Riaccendere il box tenendo premuto il tasto GIU' del pannello frontale " +"per 10 secondi.\n" +"3) Attendere l'avvio e seguire le istruzioni della configurazione guidata." msgid "Today" msgstr "Oggi" @@ -3327,6 +3363,12 @@ msgstr "USB" msgid "USB Stick" msgstr "Penna USB" +msgid "USB stick wizard" +msgstr "Configurazione Guidata Penna USB" + +msgid "Ukrainian" +msgstr "Ucraino" + msgid "" "Unable to complete filesystem check.\n" "Error: " @@ -3342,7 +3384,7 @@ msgstr "" "Errore: " msgid "Uncommitted DiSEqC command" -msgstr "Coamdo DiSEqC 'Uncommitted'" +msgstr "Comando DiSEqC 'Uncommitted'" msgid "Universal LNB" msgstr "LNB Universale" @@ -3351,7 +3393,7 @@ msgid "Unmount failed" msgstr "Unmount fallito!" msgid "Update" -msgstr "" +msgstr "Aggiornare" msgid "Updates your receiver's software" msgstr "Aggiornare il software del ricevitore" @@ -3371,6 +3413,9 @@ msgstr "Aggiornamento in corso" msgid "Upgrading Dreambox... Please wait" msgstr "DreamBox in aggiornamento... Attendere." +msgid "Use" +msgstr "Usare" + msgid "Use DHCP" msgstr "Usare DHCP" @@ -3478,7 +3523,7 @@ msgid "View teletext..." msgstr "Televideo" msgid "Virtual KeyBoard" -msgstr "" +msgstr "Tastiera virtuale" msgid "Voltage mode" msgstr "Modalità voltaggio" @@ -3496,7 +3541,7 @@ msgid "WPA" msgstr "WPA" msgid "WPA or WPA2" -msgstr "" +msgstr "WPA o WPA2" msgid "WPA2" msgstr "WPA2" @@ -3507,9 +3552,6 @@ msgstr "WSS su 4:3" msgid "Waiting" msgstr "In attesa" -msgid "Waiting for USB stick to settle..." -msgstr "" - msgid "" "We will now test if your TV can also display this resolution at 50hz. If " "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" @@ -3579,6 +3621,9 @@ msgstr "Cosa cercare?" msgid "Where do you want to backup your settings?" msgstr "Dove salvare il backup configurazione?" +msgid "Where to save temporary timeshift recordings?" +msgstr "Dove salvare le registrazioni temporanee \"timeshift\"?" + msgid "Wireless" msgstr "Wireless" @@ -3592,10 +3637,7 @@ msgid "Write failed!" msgstr "Scrittura fallita!" msgid "Writing NFI image file to flash completed" -msgstr "" - -msgid "Writing image file to NAND Flash" -msgstr "" +msgstr "Scrittura file immagine su flash completata" msgid "YPbPr" msgstr "YPbPr" @@ -3607,7 +3649,7 @@ msgid "Yes" msgstr "Sì" msgid "Yes, and delete this movie" -msgstr "" +msgstr "Sì, e cancellare questa registrazione" msgid "Yes, backup my settings!" msgstr "Sì, eseguire backup configurazione!" @@ -3694,10 +3736,13 @@ 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 "" +"La creazione di una nuova penna USB avviabile come Flasher .nfi richiede la " +"riscrittura delle partizioni. Tutti i dati presenti sulla penna saranno " +"cancellati!" #, python-format msgid "You have to wait %s!" -msgstr "Occorre attendere %s!" +msgstr "Occorre attendere per %s!" msgid "" "You need a PC connected to your dreambox. If you need further instructions, " @@ -3711,15 +3756,6 @@ msgstr "" "Il DreamBox sarà arrestato, e al termine delle operazioni il nuovo firmware " "chiederà di ripristinare le configurazioni." -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Per prima cosa occorre definire alcune\n" -"parole chiave! Premere il tasto MENU per\n" -"definirle. Iniziare?" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -3759,7 +3795,7 @@ msgstr "" "Premere OK per iniziare l'aggiornamento." msgid "Your network configuration has been activated." -msgstr "" +msgstr "Configurazione di rete attivata." msgid "" "Your network configuration has been activated.\n" @@ -3767,6 +3803,10 @@ msgid "" "\n" "Do you want to disable the second network interface?" msgstr "" +"Configurazione di rete attivata.\n" +"Rilevata seconda intefaccia di rete.\n" +"\n" +"Disabilitare la seconda interfaccia di rete?" msgid "Zap back to service before positioner setup?" msgstr "" @@ -3803,10 +3843,10 @@ msgid "about to start" msgstr "Avvio in corso" msgid "activate current configuration" -msgstr "" +msgstr "Attivare configurazione corrente" msgid "add a nameserver entry" -msgstr "" +msgstr "Aggiungere voce Nameserver" msgid "add alternatives" msgstr "Aggiungere alternative" @@ -3865,11 +3905,11 @@ msgstr "" #, python-format msgid "audio track (%s) format" -msgstr "" +msgstr "Formato traccia audio (%s)" #, python-format msgid "audio track (%s) language" -msgstr "" +msgstr "Lingua traccia audio (%s)" msgid "audio tracks" msgstr "Tracce audio" @@ -3878,20 +3918,26 @@ msgid "back" msgstr "Indietro" msgid "background image" -msgstr "Immagine di sfondo" +msgstr "immagine di sfondo" + +msgid "backgroundcolor" +msgstr "Colore di sfondo" msgid "better" msgstr "Migliore" +msgid "black" +msgstr "Nero" + msgid "blacklist" msgstr "Lista nera" +msgid "blue" +msgstr "Blu" + #, python-format msgid "burn audio track (%s)" -msgstr "" - -msgid "by Exif" -msgstr "by Exif" +msgstr "Masterizzare traccia audio (%s)" msgid "change recording (duration)" msgstr "Cambiare la registrazione (durata)" @@ -3903,7 +3949,7 @@ msgid "chapters" msgstr "Capitoli" msgid "choose destination directory" -msgstr "" +msgstr "Selezionare cartella destinazione" msgid "circular left" msgstr "Circolare a sinistra" @@ -3915,7 +3961,7 @@ msgid "clear playlist" msgstr "Cancellare playlist" msgid "color" -msgstr "Immagine di sfondo" +msgstr "colore" msgid "complex" msgstr "Complesso" @@ -3944,12 +3990,12 @@ msgstr "Giornaliero" msgid "day" msgstr "Giorno" -msgid "delete" -msgstr "Cancellare" - msgid "delete cut" msgstr "Cancellare taglio" +msgid "delete file" +msgstr "Cancellare file" + msgid "delete playlist entry" msgstr "Cancellare voce dalla playlist" @@ -4017,7 +4063,7 @@ msgid "end favourites edit" msgstr "Fine edit preferiti" msgid "enigma2 and network" -msgstr "" +msgstr "enigma2 e rete" msgid "equal to" msgstr "Uguale a:" @@ -4026,7 +4072,7 @@ msgid "exceeds dual layer medium!" msgstr "Supera la capacità di DVD doppio strato!" msgid "exit DVD player or return to file browser" -msgstr "Uscire dal Player DVD e trornare alla lista file" +msgstr "Uscire dal Player DVD e tornare alla lista file" msgid "exit mediaplayer" msgstr "Uscire dal Mediaplayer" @@ -4035,23 +4081,26 @@ msgid "exit movielist" msgstr "Uscire da lista registrazioni" msgid "exit nameserver configuration" -msgstr "" +msgstr "Uscire da configurazione Nameserver" msgid "exit network adapter configuration" -msgstr "" +msgstr "Uscire da Configurazione Interfaccia di Rete" msgid "exit network adapter setup menu" -msgstr "" +msgstr "Uscire da menu configurazione interfaccia di rete" msgid "exit network interface list" -msgstr "" +msgstr "Uscire da elenco interfacce di rete" msgid "exit networkadapter setup menu" -msgstr "" +msgstr "Uscire dal menu configurazione interfaccia di rete" msgid "failed" msgstr "Fallito" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "Formati file (BMP, PNG, JPG, GIF)" + msgid "filename" msgstr "Nome file" @@ -4059,7 +4108,7 @@ msgid "fine-tune your display" msgstr "Regolazione fine schermo" msgid "font face" -msgstr "Modalità \"Authoring\"" +msgstr "Carattere" msgid "forward to the next chapter" msgstr "Passare al capitolo successivo" @@ -4076,8 +4125,11 @@ msgstr "Spegnimento (Deep Standby)" msgid "go to standby" msgstr "Standby" +msgid "green" +msgstr "Verde" + msgid "headline" -msgstr "Titolo" +msgstr "Intest." msgid "hear radio..." msgstr "Radio" @@ -4085,6 +4137,9 @@ msgstr "Radio" msgid "help..." msgstr "Aiuto" +msgid "hidden network" +msgstr "Rete nascosta" + msgid "hide extended description" msgstr "Nascondere descrizione estesa" @@ -4092,7 +4147,7 @@ msgid "hide player" msgstr "Nascondere il player" msgid "highlighted button" -msgstr "Pulsante evidenziato" +msgstr "Puls. evidenziato" msgid "horizontal" msgstr "Orizzontale" @@ -4175,7 +4230,7 @@ msgid "menu" msgstr "Menu" msgid "menulist" -msgstr "" +msgstr "Menu" msgid "mins" msgstr "Min" @@ -4193,16 +4248,16 @@ msgid "move PiP to main picture" msgstr "Inviare PiP a schermo principale" msgid "move down to last entry" -msgstr "" +msgstr "Andare all'ultima voce" msgid "move down to next entry" -msgstr "" +msgstr "Andare alla voce successiva" msgid "move up to first entry" -msgstr "" +msgstr "Andare alla prima voce" msgid "move up to previous entry" -msgstr "" +msgstr "Tornare alla voce precedente" msgid "movie list" msgstr "Lista registrazioni" @@ -4225,9 +4280,6 @@ msgstr "No" msgid "no HDD found" msgstr "Nessun HDD trovato!" -msgid "no Picture found" -msgstr "Nessuna immagine trovata!" - msgid "no module found" msgstr "Nessun modulo trovato!" @@ -4259,13 +4311,13 @@ msgid "on" msgstr "On" msgid "on READ ONLY medium." -msgstr "" +msgstr "su supporto A SOLA LETTURA." msgid "once" msgstr "Una volta" msgid "open nameserver configuration" -msgstr "" +msgstr "Configurazione Nameserver" msgid "open servicelist" msgstr "Lista canali" @@ -4277,7 +4329,7 @@ msgid "open servicelist(up)" msgstr "Lista canali (sù)" msgid "open virtual keyboard input help" -msgstr "" +msgstr "Aprire help imput tastiera virtuale" msgid "pass" msgstr "Pass" @@ -4306,17 +4358,17 @@ msgstr "Canale precedente" msgid "previous channel in history" msgstr "Canale precedente nella history" -msgid "rebooting..." -msgstr "" - msgid "record" msgstr "Registrare" msgid "recording..." -msgstr "Registrazione in corso..." +msgstr "Registrazione..." + +msgid "red" +msgstr "Rosso" msgid "remove a nameserver entry" -msgstr "" +msgstr "Eliminare voce Nameserver" msgid "remove after this position" msgstr "Cancellare dopo questa pos." @@ -4363,15 +4415,21 @@ msgstr "Tornare al capitolo precedente" msgid "right" msgstr "Destro" +msgid "save last directory on exit" +msgstr "Salvare l'ultima cartella uscendo" + msgid "save playlist" msgstr "Salvare la playlist" +msgid "save playlist on exit" +msgstr "Salvare la playlist uscendo" + msgid "scan done!" msgstr "Ricerca terminata!" #, python-format msgid "scan in progress - %d%% done!" -msgstr "Ricerca in corso - %d%% completato:" +msgstr "Ricerca in corso - %d%% completata!" msgid "scan state" msgstr "Stato ricerca" @@ -4389,16 +4447,16 @@ msgid "select" msgstr "Selezionare" msgid "select .NFI flash file" -msgstr "" +msgstr "Selezionare il file flash .nfi" msgid "select image from server" -msgstr "" +msgstr "Selezionare immagine dal server" msgid "select interface" -msgstr "" +msgstr "Selezionare Interfaccia" msgid "select menu entry" -msgstr "" +msgstr "Selezionare voce menu" msgid "select movie" msgstr "Selezionare registrazione" @@ -4418,6 +4476,9 @@ msgstr "Mostrare il Menu Principale DVD" msgid "show EPG..." msgstr "EPG" +msgid "show Infoline" +msgstr "Mostrare Informazioni" + msgid "show all" msgstr "Mostrare tutto" @@ -4430,11 +4491,11 @@ msgstr "Mostrare dettagli evento" msgid "show extended description" msgstr "Mostrare descrizione estesa" -msgid "show first tag" -msgstr "Mostrare la prima etichetta" +msgid "show first selected tag" +msgstr "Mostrare la prima etichetta selezionata" -msgid "show second tag" -msgstr "Mostrare la seconda etichetta" +msgid "show second selected tag" +msgstr "Mostrare la seconda etichetta selezionata" msgid "show shutdown menu" msgstr "Mostrare menu di arresto" @@ -4469,6 +4530,9 @@ msgstr "Skip avanti" msgid "skip forward (enter time)" msgstr "Skip avanti (inserire intervallo)" +msgid "slide picture in loop" +msgstr "Scorrere immagini in loop" + msgid "sort by date" msgstr "Ordine per data" @@ -4484,6 +4548,9 @@ msgstr "Standby" msgid "start cut here" msgstr "Inizio Taglio" +msgid "start directory" +msgstr "Cartella di avvio" + msgid "start timeshift" msgstr "Avviare timeshift" @@ -4523,6 +4590,9 @@ msgstr "Passare alla lingua sottotitoli successiva" msgid "text" msgstr "Testo" +msgid "textcolor" +msgstr "Colore testo" + msgid "this recording" msgstr "Questa registrazione" @@ -4574,6 +4644,9 @@ msgstr "Lista bianca" msgid "year" msgstr "Anno" +msgid "yellow" +msgstr "Giallo" + msgid "yes" msgstr "Sì" @@ -4600,85 +4673,65 @@ msgstr "Zapped" #~ "\n" #~ "Enigma2 sarà riavviato dopo il ripristino" -#~ msgid "\"?" -#~ msgstr "\"?" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr "Creazione penna USB per Flasher .nfi terminata con successo" -#~ msgid "DVD ENTER key" -#~ msgstr "Tasto ENTER DVD" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Copia immagine di avvio Flasher USB in corso..." -#~ msgid "DVD down key" -#~ msgstr "Tasto 'Giù' DVD" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "Decompressione immagine di avvio USB Flasher in corso..." -#~ msgid "DVD left key" -#~ msgstr "Tasto 'Sx' DVD" +#~ msgid "Downloading image description..." +#~ msgstr "Scaricamento descrizione immagine in corso..." -#~ msgid "DVD right key" -#~ msgstr "Tasto 'Dx' DVD" - -#~ msgid "DVD up key" -#~ msgstr "Tasto 'Sù' DVD" +#~ msgid "Fix USB stick" +#~ msgstr "Conf. Penna" #~ msgid "" -#~ "Do you really want to REMOVE\n" -#~ "the plugin \"" +#~ "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 "" -#~ "Si conferma la rimozione\n" -#~ "del plugin \"%s\"?" +#~ "Ora inserire la penna USB (min. 64 MB) che sarà formattata per essere " +#~ "utilizzata come flasher di immagini .nfi. Premere OK dopo aver inserito " +#~ "la penna." -#~ msgid "" -#~ "Do you really want to download\n" -#~ "the plugin \"" -#~ msgstr "" -#~ "Si conferma il download\n" -#~ "del plugin \"%s\"?" +#~ msgid "Partitioning USB stick..." +#~ msgstr "Partizione penna USB in corso..." -#~ msgid "Jump to video title 1 (play movie from start)" -#~ msgstr "Passare al titolo video 1 (riprodurre dall'inizio)" +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "Attendere la verifica della firma md5..." -#~ msgid "" -#~ "No working local networkadapter found.\n" -#~ "Please verify that you have attached a network cable and your Network is " -#~ "configured correctly." -#~ msgstr "" -#~ "Nessuna scheda di rete locate trovata!\n" -#~ "Verificare di aver collegato il cavo e che la rete sia configurata " -#~ "correttamente." +#~ msgid "Remounting stick partition..." +#~ msgstr "\"Remount\" partizione penna in corso..." #~ msgid "" -#~ "No working wireless interface found.\n" -#~ " Please verify that you have attached a compatible WLAN device or enable " -#~ "you local network interface." -#~ msgstr "" -#~ "Nessun adattatore di rete wireless trovato!\n" -#~ "Verificare di aver collegato un adattatore WLAN USB compatibile o " -#~ "abilitare l'intefaccia di rete locale." +#~ "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 "La penna USB - Flasher Immagini .nfi è pronta per l'uso. Scaricare " #~ msgid "" -#~ "No working wireless networkadapter found.\n" -#~ "Please verify that you have attached a compatible WLAN USB Stick and your " -#~ "Network is configured correctly." +#~ "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 "" -#~ "Nessun adattatore di rete wireless trovato!\n" -#~ "Verificare di aver collegato un adattatore WLAN USB compatibile e che la " -#~ "rete sia configutata correttamente." +#~ "Ora, per maggiore sicurezza, rimuovere la penna USB e ricollegarla solo " +#~ "quando verrà richiesto. Premere OK dopo aver rimosso la penna." -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really reboot " -#~ "now?" -#~ msgstr "Registrazioni in corso o in avvio a breve! Riavviare ora?" +#~ msgid "Waiting for USB stick to settle..." +#~ msgstr "Configurazione penna USB in corso..." -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really " -#~ "restart now?" -#~ msgstr "Registrazioni in corso o in avvio a breve! Riavviare ora?" +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "Scrittura file immagine su Flash NAND" -#~ msgid "" -#~ "Recording(s) are in progress or coming up in few seconds... really " -#~ "shutdown now?" -#~ msgstr "Registrazioni in corso o in avvio a breve! Spegnere ora?" +#~ msgid "by Exif" +#~ msgstr "by Exif" -#~ msgid "full /etc directory" -#~ msgstr "Cartella /etc completa" +#~ msgid "no Picture found" +#~ msgstr "Nessuna immagine trovata!" -#~ msgid "only /etc/enigma2 directory" -#~ msgstr "Solo la cartella /etc/enigma2" +#~ msgid "rebooting..." +#~ msgstr "Riavvio in corso..." diff --git a/po/lt.po b/po/lt.po index 3c00cccc..54045258 100644 --- a/po/lt.po +++ b/po/lt.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-18 13:25+0100\n" -"PO-Revision-Date: 2008-11-17 14:56+0200\n" +"POT-Creation-Date: 2008-11-24 14:31+0100\n" +"PO-Revision-Date: 2008-11-18 23:49+0200\n" "Last-Translator: Audronis, Grincevicius \n" "Language-Team: Adga / enigma2 (c) \n" "MIME-Version: 1.0\n" @@ -94,9 +94,6 @@ msgstr "* Pasiekiamas tiktai, surinkus paslÄ—ptÄ… SSID ar tinklo raktÄ…" msgid ".NFI Download failed:" msgstr ".NFI parsisiuntimas klaidingas:" -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr ".NFI diegÄ—jo paleidimo USB raktelis sÄ—kmingai sukurtas." - msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" @@ -734,9 +731,6 @@ msgstr "TÄ™sti žiÅ«rÄ—jimÄ…" msgid "Contrast" msgstr "Kontrastas" -msgid "Copying USB flasher boot image to stick..." -msgstr "Kopijuojamas USB diegÄ—jo paleidimo atvaizdas į raktelį..." - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "Negalima prisijungti prie Dreambox .NFI atvaizdo perdavimo serverio:" @@ -813,9 +807,6 @@ msgstr "Danų" msgid "Date" msgstr "Duomenys" -msgid "Decompressing USB stick flasher boot image..." -msgstr "Dekompresuojamas USB raktelis, diegÄ—jo paleidžiamasis atvaizdas..." - msgid "Deep Standby" msgstr "VisiÅ¡kai iÅ¡jungti" @@ -1034,9 +1025,6 @@ msgstr "Galimi įdiegti priedai" msgid "Downloading" msgstr "ParsisiunÄiama" -msgid "Downloading image description..." -msgstr "Atvaizdo apibÅ«dinimo parsisiuntimas..." - msgid "Downloading plugin information. Please wait..." msgstr "ParsiunÄiama informacija apie priedus. PraÅ¡ome palaukti..." @@ -1192,6 +1180,9 @@ msgstr "Vykdymo eiga:" msgid "Execution finished!!" msgstr "Vykdymas baigtas!!" +msgid "Exif" +msgstr "" + msgid "Exit" msgstr "IÅ¡eiti" @@ -1265,9 +1256,6 @@ msgid "" "First we need to download the latest boot environment for the USB flasher." msgstr "IÅ¡ pradžių reikia parsisiųsti paskutinÄ™ aplinkÄ… USB atvaizdo diegÄ—jui." -msgid "Fix USB stick" -msgstr "Taisyti USB" - msgid "Flash" msgstr "VidinÄ— atmintis" @@ -1283,6 +1271,9 @@ msgstr "Formatas" msgid "Frame repeat count during non-smooth winding" msgstr "RÄ—mo pakartojimo skaiÄiavimas per nelygų vingiavimÄ…" +msgid "Frame size in full view" +msgstr "" + msgid "French" msgstr "PrancÅ«zų" @@ -1845,7 +1836,7 @@ msgid "No satellite frontend found!!" msgstr "Nerastas palydovas!!" msgid "No tags are set on these movies." -msgstr "" +msgstr "Jokios kortelÄ—s su užraÅ¡u nÄ—ra nustatytos Å¡iems kino filmams" msgid "No tuner is configured for use with a diseqc positioner!" msgstr "NÄ—ra imtuvo, suderinto naudotis su diseqc pozicionieriumi!" @@ -1950,15 +1941,6 @@ msgstr "" msgid "Now Playing" msgstr "Dabar grojama" -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 "" -"Dabar praÅ¡ome įdÄ—ti USB raktelį (minimalus dydis yra 64 MB), kad " -"suformatuoti ir naudoti kaip.NFI atvaizdo diegÄ—jÄ…. Spauskite OK po to, kai " -"jÅ«s įdÄ—jote raktelį." - 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 " @@ -2032,15 +2014,15 @@ msgstr "TÄ—vų kontrolÄ—s nustatymai" msgid "Parental control type" msgstr "TÄ—vų kontrolÄ—s rūšis" -msgid "Partitioning USB stick..." -msgstr "Padalijamas USB raktelis..." - msgid "Pause movie at end" msgstr "Filmo pauzÄ— pabaigoje" msgid "PiPSetup" msgstr "PiP nustatymas" +msgid "PicturePlayer" +msgstr "" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Pillarbox" @@ -2085,6 +2067,11 @@ msgid "Please choose the default services lists you want to install." msgstr "" "PraÅ¡ome pasirinkti numatytuosius kanalų sÄ…raÅ¡us, kuriuos jÅ«s norite įdiegti." +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!" msgstr "PraÅ¡ome nekeisti reikÅ¡mių, jeigu JÅ«s nežinote kÄ… darote! " @@ -2141,7 +2128,7 @@ msgid "Please select a subservice..." msgstr "PraÅ¡ome iÅ¡sirinkti subkanalÄ…..." msgid "Please select tag to filter..." -msgstr "" +msgstr "PraÅ¡ome iÅ¡sirinkti kortelÄ™ filtravimui..." msgid "Please select target directory or medium" msgstr "PraÅ¡ome iÅ¡sirinkti direktorijÄ… arba diskÄ…" @@ -2177,9 +2164,6 @@ msgstr "" msgid "Please wait for activation of your network configuration..." msgstr "PraÅ¡ome laukti jÅ«sų tinklo konfigÅ«racijos aktyvavimo..." -msgid "Please wait for md5 signature verification..." -msgstr "PraÅ¡ome laukti md5 paraÅ¡o patikrinimo..." - msgid "Please wait while we configure your network..." msgstr "PraÅ¡ome laukti kol konfigÅ«ruojamas jÅ«sų tinklas..." @@ -2360,9 +2344,6 @@ msgstr "Atnaujinimo norma" msgid "Refresh rate selection." msgstr "Atnaujinkite normos pasirinkimÄ…" -msgid "Remounting stick partition..." -msgstr "Perjungiamas raktelio padalinimas..." - msgid "Remove Bookmark" msgstr "PaÅ¡alinti žymÄ™" @@ -2957,13 +2938,13 @@ msgid "Table of content for collection" msgstr "Turinio lentelÄ— dÄ—l kolekcijos" msgid "Tag 1" -msgstr "" +msgstr "KortelÄ— 1" msgid "Tag 2" -msgstr "" +msgstr "KortelÄ— 2" msgid "Tags" -msgstr "" +msgstr "KortelÄ—s" msgid "Terrestrial" msgstr "AntžeminÄ—" @@ -2988,17 +2969,6 @@ msgstr "" "naudojimui.\n" "PraÅ¡ome nuspauskite OK, kad pradÄ—ti naudotis imtuvu." -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 atvaizdo diegimo USB raktelis yra paruoÅ¡tas naudoti. PraÅ¡ome perkelti ." -"NFI atvaizdo failÄ… iÅ¡ perdavimo serverio ir iÅ¡saugoti jį raktelyje. Tada " -"perkraukite ir laikykite nuspaustÄ… mygtukÄ… 'Žemyn' ant priekinÄ—s imtuvo " -"panÄ—lÄ—s kad paleisti .NFI diegÄ—jÄ… iÅ¡ raktelio!" - 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 " @@ -3008,6 +2978,11 @@ msgstr "" "Dreambox formato duomenų DVD (kuris nepasileis viena pozicija DVD " "grotuvuose), vietoj to?" +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." msgstr "IÅ¡saugoti nepavyko. Pasirinkite kitÄ… vietÄ… iÅ¡saugojimui. " @@ -3218,6 +3193,9 @@ msgstr "Heterodinas" msgid "Thu" msgstr "Ket" +msgid "Thumbnails" +msgstr "" + msgid "Thursday" msgstr "Ketvirtadienis" @@ -3268,7 +3246,7 @@ msgid "Timeshift not possible!" msgstr "Laiko perstumimas negalimas!" msgid "Timeshift path..." -msgstr "" +msgstr "Laiko poslinkio kelias..." msgid "Timezone" msgstr "Laiko juosta" @@ -3286,11 +3264,13 @@ msgid "Titleset mode" msgstr "Pavadinimo nustatymo bÅ«das" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." msgstr "" -"Jeigu jÅ«s ketinate daryti tai, praÅ¡ome paÅ¡alinti USB raktelį dabar. " -"Spauskite OK, kai iÅ¡imsite raktelįį." msgid "Today" msgstr "Å iandien" @@ -3381,6 +3361,9 @@ msgstr "USB" msgid "USB Stick" msgstr "USB raktelis" +msgid "USB stick wizard" +msgstr "" + msgid "Ukrainian" msgstr "UkrainieÄių" @@ -3567,9 +3550,6 @@ msgstr "WSS į 4:3" msgid "Waiting" msgstr "Laukite" -msgid "Waiting for USB stick to settle..." -msgstr "Laukite kol USB raktelis susitvarkys..." - 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" @@ -3639,7 +3619,7 @@ msgid "Where do you want to backup your settings?" msgstr "Kur JÅ«s norite iÅ¡saugoti nustatymų atsarginÄ™ kopijÄ…?" msgid "Where to save temporary timeshift recordings?" -msgstr "" +msgstr "Kur saugoti laikinus laiko poslinkio įraÅ¡us?" msgid "Wireless" msgstr "Belaidis " @@ -3656,9 +3636,6 @@ msgstr "Ä®raÅ¡ymas klaidingas!" msgid "Writing NFI image file to flash completed" msgstr "NFI atvaizdo failo įraÅ¡ymas į vidinÄ™ atmintį užbaigtas" -msgid "Writing image file to NAND Flash" -msgstr "Atvaizdo failo į NAND fliašą įraÅ¡ymas" - msgid "YPbPr" msgstr "YPbPr" @@ -3941,19 +3918,25 @@ msgstr "atgal" msgid "background image" msgstr "foninis atvaizdas" +msgid "backgroundcolor" +msgstr "" + msgid "better" msgstr "geriau" +msgid "black" +msgstr "" + msgid "blacklist" msgstr "juodas sÄ…raÅ¡as" +msgid "blue" +msgstr "" + #, python-format msgid "burn audio track (%s)" msgstr "iÅ¡deginkite garso takelį (%s)" -msgid "by Exif" -msgstr "pagal Exif" - msgid "change recording (duration)" msgstr "pakeisti įraÅ¡ymÄ… (trukmÄ™)" @@ -4113,6 +4096,9 @@ msgstr "iÅ¡eiti iÅ¡ tinklo adapterio nustatymų meniu" msgid "failed" msgstr "klaidingas" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + msgid "filename" msgstr "failo pavadinimas" @@ -4137,6 +4123,9 @@ msgstr "eiti į visiÅ¡kÄ… iÅ¡jungimÄ…" msgid "go to standby" msgstr "eiti į iÅ¡jungimÄ…" +msgid "green" +msgstr "" + msgid "headline" msgstr "antraÅ¡tÄ—" @@ -4289,9 +4278,6 @@ msgstr "ne" msgid "no HDD found" msgstr "Kietas diskas nerastas" -msgid "no Picture found" -msgstr "PaveikslÄ—lių nerasta" - msgid "no module found" msgstr "modulis nerastas" @@ -4370,15 +4356,15 @@ msgstr "BuvÄ™s kanalas" msgid "previous channel in history" msgstr "BuvÄ™s kanalas į istorijÄ…" -msgid "rebooting..." -msgstr "perleidžiama..." - msgid "record" msgstr "įraÅ¡as" msgid "recording..." msgstr "įraÅ¡oma..." +msgid "red" +msgstr "" + msgid "remove a nameserver entry" msgstr "paÅ¡alinkite serverio pavadinimo įėjimÄ…" @@ -4488,6 +4474,9 @@ msgstr "rodyti DVD pagrindinį meniu" msgid "show EPG..." msgstr "Rodyti EPG..." +msgid "show Infoline" +msgstr "" + msgid "show all" msgstr "rodyti viskÄ…" @@ -4501,10 +4490,10 @@ msgid "show extended description" msgstr "rodyti iÅ¡plÄ—stÄ… informacijÄ…" msgid "show first selected tag" -msgstr "" +msgstr "rodyti pirmÄ… iÅ¡sirinktÄ… kortelÄ™ su užraÅ¡u" msgid "show second selected tag" -msgstr "" +msgstr "rodyti kitÄ… iÅ¡sirinktÄ… kortelÄ™ su užraÅ¡u" msgid "show shutdown menu" msgstr "iÅ¡jungimo meniu" @@ -4539,6 +4528,9 @@ msgstr "Praleisti sukimÄ… į priekį" msgid "skip forward (enter time)" msgstr "Praleisti pirmyn (įraÅ¡ykite laikÄ…)" +msgid "slide picture in loop" +msgstr "" + msgid "sort by date" msgstr "rūšiuoti pagal datÄ…" @@ -4596,6 +4588,9 @@ msgstr "perjungti į kitÄ… subtitrų kalbÄ…" msgid "text" msgstr "tekstas" +msgid "textcolor" +msgstr "" + msgid "this recording" msgstr "tai įraÅ¡yta" @@ -4647,6 +4642,9 @@ msgstr "baltas sÄ…raÅ¡as" msgid "year" msgstr "metai" +msgid "yellow" +msgstr "" + msgid "yes" msgstr "taip" @@ -4676,6 +4674,9 @@ msgstr "įjungta" #~ msgid "\"?" #~ msgstr "\"?" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr ".NFI diegÄ—jo paleidimo USB raktelis sÄ—kmingai sukurtas." + #~ msgid "Abort" #~ msgstr "Nutraukti" @@ -4752,6 +4753,9 @@ msgstr "įjungta" #~ msgid "Connect to the Internet with your local LAN" #~ msgstr "Prisijunkite prie interneto su vietiniu tinklu" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Kopijuojamas USB diegÄ—jo paleidimo atvaizdas į raktelį..." + #~ msgid "DVD ENTER key" #~ msgstr "DVD SURINKTI raktÄ…" @@ -4767,6 +4771,9 @@ msgstr "įjungta" #~ msgid "DVD up key" #~ msgstr "DVD aukÅ¡tyn raktas" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "Dekompresuojamas USB raktelis, diegÄ—jo paleidžiamasis atvaizdas..." + #~ msgid "Default-Wizard" #~ msgstr "Numatytas vedlys" @@ -4796,6 +4803,9 @@ msgstr "įjungta" #~ msgid "Do you really want to exit?" #~ msgstr "JÅ«s tikrai norite iÅ¡eiti?" +#~ msgid "Downloading image description..." +#~ msgstr "Atvaizdo apibÅ«dinimo parsisiuntimas..." + #~ msgid "Edit current title" #~ msgstr "Suredaguokite dabartinį pavadinimÄ…" @@ -4828,6 +4838,9 @@ msgstr "įjungta" #~ msgid "Factoryreset" #~ msgstr "Gamykliniai nustatymai" +#~ msgid "Fix USB stick" +#~ msgstr "Taisyti USB" + #~ msgid "Jump to video title 1 (play movie from start)" #~ msgstr "Å uolis į vaizdo pavadinimÄ… 1 (rodo kino filmÄ… nuo pradžios)" @@ -4888,9 +4901,21 @@ msgstr "įjungta" #~ msgid "No, let me choose default lists" #~ msgstr "Ne, leiskite man pasirinkti numatytuosius sÄ…raÅ¡us" +#~ 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 "" +#~ "Dabar praÅ¡ome įdÄ—ti USB raktelį (minimalus dydis yra 64 MB), kad " +#~ "suformatuoti ir naudoti kaip.NFI atvaizdo diegÄ—jÄ…. Spauskite OK po to, " +#~ "kai jÅ«s įdÄ—jote raktelį." + #~ msgid "Other..." #~ msgstr "Kitas..." +#~ msgid "Partitioning USB stick..." +#~ msgstr "Padalijamas USB raktelis..." + #~ 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 " @@ -4959,6 +4984,9 @@ msgstr "įjungta" #~ "\n" #~ "PraÅ¡ome spausti OK, kad tÄ™sti." +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "PraÅ¡ome laukti md5 paraÅ¡o patikrinimo..." + #, fuzzy #~ msgid "Port" #~ msgstr "Jungtis A" @@ -4996,6 +5024,9 @@ msgstr "įjungta" #~ msgstr "" #~ "Vyksta įraÅ¡ymas arba netrukus prasidÄ—s... tikrai norite iÅ¡jungti dabar?" +#~ msgid "Remounting stick partition..." +#~ msgstr "Perjungiamas raktelio padalinimas..." + #~ msgid "Restart your wireless interface" #~ msgstr "Paleiskite iÅ¡ naujo savo belaidį įrenginį" @@ -5078,6 +5109,25 @@ msgstr "įjungta" #~ "naudojimui.\n" #~ "PraÅ¡ome nuspauskite OK, kad pradÄ—ti naudotis imtuvu." +#~ 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 atvaizdo diegimo USB raktelis yra paruoÅ¡tas naudoti. PraÅ¡ome " +#~ "perkelti .NFI atvaizdo failÄ… iÅ¡ perdavimo serverio ir iÅ¡saugoti jį " +#~ "raktelyje. Tada perkraukite ir laikykite nuspaustÄ… mygtukÄ… 'Žemyn' ant " +#~ "priekinÄ—s imtuvo panÄ—lÄ—s kad paleisti .NFI diegÄ—jÄ… iÅ¡ raktelio!" + +#~ 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 "" +#~ "Jeigu jÅ«s ketinate daryti tai, praÅ¡ome paÅ¡alinti USB raktelį dabar. " +#~ "Spauskite OK, kai iÅ¡imsite raktelįį." + #, fuzzy #~ msgid "Use Authorization" #~ msgstr "Poliarizacija" @@ -5092,6 +5142,9 @@ msgstr "įjungta" #~ msgid "VCR Switch" #~ msgstr "VCR perjungÄ—jas" +#~ msgid "Waiting for USB stick to settle..." +#~ msgstr "Laukite kol USB raktelis susitvarkys..." + #, fuzzy #~ msgid "" #~ "Welcome.\n" @@ -5112,6 +5165,9 @@ msgstr "įjungta" #~ msgid "When complete, press Key 0 to burn the collection!" #~ msgstr "Kai bus baigta, spauskite mygtukÄ… 0, kad iÅ¡degintumÄ—te kolekcijÄ…!" +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "Atvaizdo failo į NAND fliašą įraÅ¡ymas" + #, fuzzy #~ msgid "You can choose, what you want to install.." #~ msgstr "JÅ«s galite iÅ¡sirinkti, kÄ… jÅ«s norite įdiegti..." @@ -5179,6 +5235,9 @@ msgstr "įjungta" #~ "JÅ«sų belaidžio interneto prisijungimas neveikia!\n" #~ "PraÅ¡om pasirinkti tai, kÄ… jÅ«s norite padaryti paskui." +#~ msgid "by Exif" +#~ msgstr "pagal Exif" + #~ msgid "cancel" #~ msgstr "panaikinti" @@ -5197,9 +5256,15 @@ msgstr "įjungta" #~ msgid "minutes and" #~ msgstr "minuÄių ir" +#~ msgid "no Picture found" +#~ msgstr "PaveikslÄ—lių nerasta" + #~ msgid "only /etc/enigma2 directory" #~ msgstr "tik /etc/enigma2 direktorijÄ…" +#~ msgid "rebooting..." +#~ msgstr "perleidžiama..." + #~ msgid "scan done! %d services found!" #~ msgstr "PaieÅ¡ka atlikta! %d Kanalai surasti!" diff --git a/po/sv.po b/po/sv.po index 5e554251..d437dba2 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-14 07:24+0100\n" -"PO-Revision-Date: 2008-11-12 12:27+0100\n" +"POT-Creation-Date: 2008-11-24 14:31+0100\n" +"PO-Revision-Date: 2008-11-18 13:32+0100\n" "Last-Translator: WeeGull \n" "Language-Team: WeeGull \n" "MIME-Version: 1.0\n" @@ -100,9 +100,6 @@ msgstr "* Enbart tillgänglig vid angiven dold SSID eller nätverksnyckel" msgid ".NFI Download failed:" msgstr ".NFI Nedladdning misslyckades:" -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr ".NFI Flash bootbar USB stick skapad. " - msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" @@ -391,9 +388,6 @@ msgstr "Alla" msgid "All Satellites" msgstr "Alla Satelliter" -msgid "All..." -msgstr "Alla..." - msgid "Alpha" msgstr "Alpha" @@ -696,7 +690,7 @@ msgid "Complete" msgstr "Komplett" msgid "Complex (allows mixing audio tracks and aspects)" -msgstr "" +msgstr "Komplex (tillÃ¥ter mixning av ljudspÃ¥r och aspekt)" msgid "Configuration Mode" msgstr "Konfigurationsläge" @@ -741,9 +735,6 @@ msgstr "Fortsätt spela" msgid "Contrast" msgstr "Kontrast" -msgid "Copying USB flasher boot image to stick..." -msgstr "Kopiera USB flash boot image till stick..." - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "Kunde inte ansluta till Dreambox .NFI image feed Server:" @@ -820,9 +811,6 @@ msgstr "Danska" msgid "Date" msgstr "Datum" -msgid "Decompressing USB stick flasher boot image..." -msgstr "Packar upp USB flash boot image..." - msgid "Deep Standby" msgstr "Stäng av" @@ -950,9 +938,6 @@ msgstr "" "Vill du verkligen ladda ner\n" "pluginet \"%s\"?" -msgid "Do you really want to exit?" -msgstr "Vill du verkligen avsluta?" - msgid "" "Do you really want to initialize the harddisk?\n" "All data on the disk will be lost!" @@ -1044,9 +1029,6 @@ msgstr "Nerladdningsbara plugins" msgid "Downloading" msgstr "Laddar ner" -msgid "Downloading image description..." -msgstr "Ladda ner image beskrivning..." - msgid "Downloading plugin information. Please wait..." msgstr "Hämtar plugin information. Var vänlig vänta..." @@ -1076,7 +1058,7 @@ msgid "Edit DNS" msgstr "Ändra DNS" msgid "Edit Title" -msgstr "" +msgstr "Ändra titel" msgid "Edit chapters of current title" msgstr "Ändra kapitel i nuvarande titel" @@ -1129,9 +1111,6 @@ msgstr "Krypterings Nyckelvariant" msgid "Encryption Type" msgstr "Krypteringstyp" -msgid "End" -msgstr "Slut" - msgid "End time" msgstr "Sluttid" @@ -1205,6 +1184,9 @@ msgstr "Exekverings pÃ¥gÃ¥r:" msgid "Execution finished!!" msgstr "Exekvering färdig!" +msgid "Exif" +msgstr "" + msgid "Exit" msgstr "Avsluta" @@ -1278,9 +1260,6 @@ 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 "Fix USB stick" -msgstr "Fix USB stick" - msgid "Flash" msgstr "Flash" @@ -1296,6 +1275,9 @@ msgstr "Format" msgid "Frame repeat count during non-smooth winding" msgstr "Bildupprepning vid hackig spolning" +msgid "Frame size in full view" +msgstr "" + msgid "French" msgstr "Franska" @@ -1813,6 +1795,9 @@ msgstr "Ingen 50 Hz, tyvärr. :(" msgid "No HDD found or HDD not initialized!" msgstr "Ingen hÃ¥rddisk hittad eller initierad!" +msgid "No Networks found" +msgstr "" + msgid "No backup needed" msgstr "Ingen backup behövs" @@ -1845,6 +1830,9 @@ msgstr "Ingen motorkapabel frontend hittad." msgid "No satellite frontend found!!" msgstr "Ingen satellit frontend funnen!!" +msgid "No tags are set on these movies." +msgstr "" + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Ingen tuner är konfigurerad för motor diseqc!" @@ -1946,14 +1934,6 @@ msgstr "" msgid "Now Playing" msgstr "Spelas nu" -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, 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 " @@ -1993,9 +1973,6 @@ msgstr "Bara Fri sökning" msgid "Orbital Position" msgstr "Orbital position" -msgid "Other..." -msgstr "Annat..." - msgid "PAL" msgstr "PAL" @@ -2030,15 +2007,15 @@ msgstr "Föräldrakontroll installation" msgid "Parental control type" msgstr "Föräldrakontroll typ" -msgid "Partitioning USB stick..." -msgstr "Partitionera USB stick..." - msgid "Pause movie at end" msgstr "Pausa filmen" msgid "PiPSetup" msgstr "BiB konfiguration" +msgid "PicturePlayer" +msgstr "" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Svarta kanter" @@ -2082,6 +2059,11 @@ msgstr "Vänligen välj paket" msgid "Please choose the default services lists you want to install." msgstr "Vänligen välj vilken grundservicelista som du vill installera." +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!" msgstr "Vänligen ändra inte om du inte vet vad du gör!" @@ -2137,8 +2119,8 @@ msgstr "Vänligen välj en underkanal för inspelning..." msgid "Please select a subservice..." msgstr "Vänligen välj en underkanal..." -msgid "Please select keyword to filter..." -msgstr "Vänligen välj nyckelord för filter..." +msgid "Please select tag to filter..." +msgstr "" msgid "Please select target directory or medium" msgstr "Vänligen välj mÃ¥lbibliotek eller media" @@ -2175,9 +2157,6 @@ msgstr "" msgid "Please wait for activation of your network configuration..." msgstr "Vänligen vänta för aktivering av din nätverkskonfiguration..." -msgid "Please wait for md5 signature verification..." -msgstr "Vänligen vänta för md5 signatur verifiering..." - msgid "Please wait while we configure your network..." msgstr "Vänligen vänta medans ditt nätverk konfigureras..." @@ -2269,7 +2248,7 @@ msgid "Primary DNS" msgstr "Primär DNS" msgid "Properties of current title" -msgstr "" +msgstr "Egenskaper pÃ¥ nuvarande titel" msgid "Protect services" msgstr "Skydda kanaler" @@ -2358,9 +2337,6 @@ msgstr "Uppdateringstakt" msgid "Refresh rate selection." msgstr "Uppdateringsfrekvens val." -msgid "Remounting stick partition..." -msgstr "Ommontera stcik partition..." - msgid "Remove Bookmark" msgstr "Ta bort Bokmärke" @@ -2408,7 +2384,7 @@ msgid "Reset" msgstr "Nollställ" msgid "Reset and renumerate title names" -msgstr "" +msgstr "Ã…terställ och omnumrera titelnamnen" msgid "Resolution" msgstr "Upplösning" @@ -2649,10 +2625,10 @@ msgid "Selected source image" msgstr "Välj käll image" msgid "Send DiSEqC" -msgstr "" +msgstr "Skicka DiSEqC" msgid "Send DiSEqC only on satellite change" -msgstr "" +msgstr "Skicka enbart DiSEqC vid ändrad satellit" msgid "Seperate titles with a main menu" msgstr "Separera titlar med en huvudmeny" @@ -2706,7 +2682,7 @@ msgid "Services" msgstr "Kanaler" msgid "Set Voltage and 22KHz" -msgstr "" +msgstr "Ange Volt och 22KHz" msgid "Set as default Interface" msgstr "Använd som standard Interface" @@ -2772,7 +2748,7 @@ msgid "Simple" msgstr "Enkel" msgid "Simple titleset (compatibility for legacy players)" -msgstr "" +msgstr "Enkelt titelset (kompabilitet för äldre spelare)" msgid "Single" msgstr "Singel" @@ -2852,9 +2828,6 @@ msgstr "Viloläge" msgid "Standby / Restart" msgstr "Viloläge / Omstart" -msgid "Start" -msgstr "Start" - msgid "Start from the beginning" msgstr "Spela upp frÃ¥n början" @@ -2958,6 +2931,15 @@ msgstr "TV System" msgid "Table of content for collection" msgstr "Index över innehÃ¥llet av samligen" +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + msgid "Terrestrial" msgstr "Marksänd" @@ -2980,17 +2962,6 @@ 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 .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 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 " @@ -3000,6 +2971,11 @@ msgstr "" "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 "" + msgid "The backup failed. Please choose a different backup location." msgstr "Backupen misslyckades, välj en annan plats för din backup " @@ -3207,6 +3183,9 @@ msgstr "Gränsvärde" msgid "Thu" msgstr "Tors" +msgid "Thumbnails" +msgstr "" + msgid "Thursday" msgstr "Torsdag" @@ -3256,6 +3235,9 @@ msgstr "Timeshift" msgid "Timeshift not possible!" msgstr "Timeshift inte möjligt!" +msgid "Timeshift path..." +msgstr "" + msgid "Timezone" msgstr "Tidszon" @@ -3263,21 +3245,22 @@ msgid "Title" msgstr "Titel" msgid "Title properties" -msgstr "" +msgstr "Titel egenskaper" msgid "Title:" msgstr "Title:" msgid "Titleset mode" -msgstr "" +msgstr "Titelset läge" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." 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 "Today" msgstr "Idag" @@ -3366,6 +3349,12 @@ msgstr "USB" msgid "USB Stick" msgstr "USB Minne" +msgid "USB stick wizard" +msgstr "" + +msgid "Ukrainian" +msgstr "" + msgid "" "Unable to complete filesystem check.\n" "Error: " @@ -3410,6 +3399,9 @@ msgstr "Uppgradering" msgid "Upgrading Dreambox... Please wait" msgstr "Uppgraderar Dreambox... Vänligen vänta" +msgid "Use" +msgstr "" + msgid "Use DHCP" msgstr "Använd DHCP" @@ -3545,9 +3537,6 @@ msgstr "WSS pÃ¥ 4:3" msgid "Waiting" msgstr "Väntar" -msgid "Waiting for USB stick to settle..." -msgstr "Väntar pÃ¥ USB stick..." - 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" @@ -3614,6 +3603,9 @@ msgstr "Vad vill du söka efter?" msgid "Where do you want to backup your settings?" msgstr "Var vill du spara dina inställningar?" +msgid "Where to save temporary timeshift recordings?" +msgstr "" + msgid "Wireless" msgstr "TrÃ¥dlöst" @@ -3629,9 +3621,6 @@ msgstr "Skrivning misslyckades!" msgid "Writing NFI image file to flash completed" msgstr "Skrivning av NFI image fil till flash klart" -msgid "Writing image file to NAND Flash" -msgstr "Skrivning av image fil till NAND flash" - msgid "YPbPr" msgstr "YPbPr" @@ -3754,15 +3743,6 @@ msgstr "" "instruktioner frÃ¥n websidan, din nya mjukvara kommer att frÃ¥ga dig om du " "vill Ã¥terställa dina inställningar." -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Du mÃ¥ste ange nÃ¥gra nyckelord först!\n" -"Tryck Meny för att ange nyckelord.\n" -"Vill du ange nyckelord nu?" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -3909,11 +3889,11 @@ msgstr "" #, python-format msgid "audio track (%s) format" -msgstr "" +msgstr "ljudspÃ¥r (%s) format" #, python-format msgid "audio track (%s) language" -msgstr "" +msgstr "ljudspÃ¥r (%s) sprÃ¥k" msgid "audio tracks" msgstr "ljudspÃ¥r" @@ -3924,18 +3904,24 @@ msgstr "tillbaka" msgid "background image" msgstr "bakgrundsbild" +msgid "backgroundcolor" +msgstr "" + msgid "better" msgstr "bättre" +msgid "black" +msgstr "" + msgid "blacklist" msgstr "svartlista" -#, python-format -msgid "burn audio track (%s)" +msgid "blue" msgstr "" -msgid "by Exif" -msgstr "av Exif" +#, python-format +msgid "burn audio track (%s)" +msgstr "bränn ljudspÃ¥r (%s)" msgid "change recording (duration)" msgstr "ändra inspelning (längd)" @@ -3988,12 +3974,12 @@ msgstr "daglig" msgid "day" msgstr "dag" -msgid "delete" -msgstr "ta bort" - msgid "delete cut" msgstr "ta bort klipp" +msgid "delete file" +msgstr "" + msgid "delete playlist entry" msgstr "ta bort post i spellista" @@ -4096,6 +4082,9 @@ msgstr "avsluta nätverkskort installationsmeny" msgid "failed" msgstr "misslyckades" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + msgid "filename" msgstr "filnamn" @@ -4120,6 +4109,9 @@ msgstr "stäng av mottagaren" msgid "go to standby" msgstr "inta standby" +msgid "green" +msgstr "" + msgid "headline" msgstr "rubrik" @@ -4129,6 +4121,9 @@ msgstr "lyssna pÃ¥ radio..." msgid "help..." msgstr "hjälp..." +msgid "hidden network" +msgstr "" + msgid "hide extended description" msgstr "dölj utökad beskrivning" @@ -4269,9 +4264,6 @@ msgstr "nej" msgid "no HDD found" msgstr "ingen hÃ¥rddisk hittad" -msgid "no Picture found" -msgstr "ingen bild hittad" - msgid "no module found" msgstr "ingen modul hittad" @@ -4350,15 +4342,15 @@ msgstr "föregÃ¥ende kanal" msgid "previous channel in history" msgstr "föregÃ¥ende kanal i historiken" -msgid "rebooting..." -msgstr "startar om..." - msgid "record" msgstr "spela in" msgid "recording..." msgstr "spelar in..." +msgid "red" +msgstr "" + msgid "remove a nameserver entry" msgstr "ta bort en namnserver post" @@ -4407,9 +4399,15 @@ msgstr "spola bakÃ¥t till föregÃ¥ende kapitel" msgid "right" msgstr "höger" +msgid "save last directory on exit" +msgstr "" + msgid "save playlist" msgstr "spara spellista" +msgid "save playlist on exit" +msgstr "" + msgid "scan done!" msgstr "sökning klar!" @@ -4462,6 +4460,9 @@ msgstr "visa DVD huvudmeny" msgid "show EPG..." msgstr "visa EPG..." +msgid "show Infoline" +msgstr "" + msgid "show all" msgstr "visa alla" @@ -4474,11 +4475,11 @@ msgstr "visa programdetaljer" msgid "show extended description" msgstr "visa utökad beskrivning" -msgid "show first tag" -msgstr "visa första märkning" +msgid "show first selected tag" +msgstr "" -msgid "show second tag" -msgstr "visa andra märkning" +msgid "show second selected tag" +msgstr "" msgid "show shutdown menu" msgstr "visa avstängningsmeny" @@ -4513,6 +4514,9 @@ msgstr "hoppa framÃ¥t" msgid "skip forward (enter time)" msgstr "hoppa framÃ¥t (ange tid)" +msgid "slide picture in loop" +msgstr "" + msgid "sort by date" msgstr "sortera efter datum" @@ -4528,6 +4532,9 @@ msgstr "viloläge" msgid "start cut here" msgstr "startklipp här" +msgid "start directory" +msgstr "" + msgid "start timeshift" msgstr "starta timeshift" @@ -4567,6 +4574,9 @@ msgstr "byt till nästa textningssprÃ¥k" msgid "text" msgstr "text" +msgid "textcolor" +msgstr "" + msgid "this recording" msgstr "denna inspelning" @@ -4618,6 +4628,9 @@ msgstr "vitlista" msgid "year" msgstr "Ã¥r" +msgid "yellow" +msgstr "" + msgid "yes" msgstr "ja" @@ -4647,12 +4660,18 @@ msgstr "zapped" #~ msgid "\"?" #~ msgstr "\"?" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr ".NFI Flash bootbar USB stick skapad. " + #~ msgid "Abort" #~ msgstr "Avbryt" #~ msgid "Add title..." #~ msgstr "Lägg till titel..." +#~ msgid "All..." +#~ msgstr "Alla..." + #~ msgid "An error has occured. (%s)" #~ msgstr "Ett fel har uppstÃ¥tt. (%s)" @@ -4705,6 +4724,9 @@ msgstr "zapped" #~ msgid "Connect to the Internet with your local LAN" #~ msgstr "Anslut Internet till dit lokala LAN" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Kopiera USB flash boot image till stick..." + #~ msgid "DVD ENTER key" #~ msgstr "DVD ENTER tangent" @@ -4720,6 +4742,9 @@ msgstr "zapped" #~ msgid "DVD up key" #~ msgstr "DVD upp tangent" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "Packar upp USB flash boot image..." + #~ msgid "Device Setup..." #~ msgstr "Nätverksinstallation..." @@ -4740,6 +4765,12 @@ msgstr "zapped" #~ "Vill du verkligen ladda ner\n" #~ "pluginen \"" +#~ msgid "Do you really want to exit?" +#~ msgstr "Vill du verkligen avsluta?" + +#~ msgid "Downloading image description..." +#~ msgstr "Ladda ner image beskrivning..." + #~ msgid "Edit current title" #~ msgstr "Ändra vald titel" @@ -4759,9 +4790,15 @@ msgstr "zapped" #~ "Aktivera lokalt nätverk i din Dreambox.\n" #~ "\n" +#~ msgid "End" +#~ msgstr "Slut" + #~ msgid "Exit wizard and configure later manually" #~ msgstr "Avsluta guide och konfigurera manuellt senare" +#~ msgid "Fix USB stick" +#~ msgstr "Fix USB stick" + #~ msgid "Jump to video title 1 (play movie from start)" #~ msgstr "Hoppa till video titel 1 (spela film frÃ¥n start)" @@ -4819,6 +4856,21 @@ msgstr "zapped" #~ msgid "No, let me choose default lists" #~ msgstr "Nej, lÃ¥t mig välja grundlista" +#~ 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..." + +#~ 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 " @@ -4849,6 +4901,12 @@ msgstr "zapped" #~ msgid "Please select below the wireless network you want to connect to." #~ msgstr "Vänligen välj nedan vilket trÃ¥dlöst nätverk du vill ansluta till." +#~ msgid "Please select keyword to filter..." +#~ msgstr "Vänligen välj nyckelord för filter..." + +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "Vänligen vänta för md5 signatur verifiering..." + #~ 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 " @@ -4881,6 +4939,9 @@ msgstr "zapped" #~ 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..." + #~ msgid "Restart your wireless interface" #~ msgstr "Omstart av din trÃ¥dlösa adapter" @@ -4893,6 +4954,9 @@ msgstr "zapped" #~ msgid "Show files from %s" #~ msgstr "Visa filer frÃ¥n %s" +#~ msgid "Start" +#~ msgstr "Start" + #~ msgid "Step " #~ msgstr "Steg " @@ -4932,6 +4996,29 @@ msgstr "zapped" #~ "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 "" +#~ "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 "Waiting for USB stick to settle..." +#~ msgstr "Väntar pÃ¥ USB stick..." + #~ msgid "" #~ "Welcome.\n" #~ "\n" @@ -4947,6 +5034,18 @@ msgstr "zapped" #~ "\n" #~ "Tryck OK pÃ¥ din fjärrkontroll för att gÃ¥ till nästa steg." +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "Skrivning av image fil till NAND flash" + +#~ msgid "" +#~ "You need to define some keywords first!\n" +#~ "Press the menu-key to define keywords.\n" +#~ "Do you want to define keywords now?" +#~ msgstr "" +#~ "Du mÃ¥ste ange nÃ¥gra nyckelord först!\n" +#~ "Tryck Meny för att ange nyckelord.\n" +#~ "Vill du ange nyckelord nu?" + #~ msgid "" #~ "Your local LAN internet connection is not working!\n" #~ "Please choose what you want to do next." @@ -4982,6 +5081,12 @@ msgstr "zapped" #~ "Din trÃ¥dlösa Internet anslutning fungerar inte!\n" #~ "Vänligen välj vad du vill göra." +#~ msgid "by Exif" +#~ msgstr "av Exif" + +#~ msgid "delete" +#~ msgstr "ta bort" + #~ msgid "equal to Socket A" #~ msgstr "likadant som IngÃ¥ng A" @@ -4991,5 +5096,17 @@ msgstr "zapped" #~ msgid "loopthrough to socket A" #~ msgstr "loopthrough till ingÃ¥ng A" +#~ msgid "no Picture found" +#~ msgstr "ingen bild hittad" + #~ msgid "only /etc/enigma2 directory" #~ msgstr "endast /etc/enigma2 bibliotek" + +#~ msgid "rebooting..." +#~ msgstr "startar om..." + +#~ msgid "show first tag" +#~ msgstr "visa första märkning" + +#~ msgid "show second tag" +#~ msgstr "visa andra märkning" diff --git a/po/tr.po b/po/tr.po index e88daf71..1643f33f 100644 --- a/po/tr.po +++ b/po/tr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-18 13:25+0100\n" +"POT-Creation-Date: 2008-11-24 14:31+0100\n" "PO-Revision-Date: \n" "Last-Translator: Zülfikar VeyisoÄŸlu \n" "Language-Team: \n" @@ -93,10 +93,6 @@ msgstr "* Yalnızca gizlenmiÅŸ SSID veya aÄŸ anahtarı girildiÄŸinde kullanılab msgid ".NFI Download failed:" msgstr ".NFI dosyası indirilirken hata oluÅŸtu:" -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr "" -"USB bellek için önyükleme yapabilir .NFI FlaÅŸlayıcı baÅŸarıyla oluÅŸturuldu." - msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" @@ -734,9 +730,6 @@ msgstr "Oynatmaya devam et" msgid "Contrast" msgstr "Kontrast" -msgid "Copying USB flasher boot image to stick..." -msgstr "Önyükleme yapabilir USB flaÅŸlayıcı imajı belleÄŸe kopyalanıyor..." - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "Dreambox .NFI imaj sunucusuna baÄŸlanamıyor:" @@ -813,10 +806,6 @@ msgstr "Danca" msgid "Date" msgstr "Tarih" -msgid "Decompressing USB stick flasher boot image..." -msgstr "" -"Sıkıştırılmış önyükleme yapabilir USB bellek flaÅŸlayıcı çıkartılıyor..." - msgid "Deep Standby" msgstr "Derin Uyku" @@ -1036,9 +1025,6 @@ msgstr "İndirilebilir eklentiler" msgid "Downloading" msgstr "İndiriliyor" -msgid "Downloading image description..." -msgstr "İmaj açıklaması indiriliyor..." - msgid "Downloading plugin information. Please wait..." msgstr "Eklenti bilgisi indiriliyor. Lütfen bekleyin..." @@ -1194,6 +1180,9 @@ msgstr "Uygulama ilerliyor:" msgid "Execution finished!!" msgstr "Uygulama bitti!!" +msgid "Exif" +msgstr "" + msgid "Exit" msgstr "Çıkış" @@ -1269,9 +1258,6 @@ msgstr "" "Öncelikle en güncel önyükleme yapabilir USB flaÅŸlayıcı ortamının indirilmesi " "gerekiyor." -msgid "Fix USB stick" -msgstr "USB belleÄŸi onar" - msgid "Flash" msgstr "FlaÅŸa yaz" @@ -1287,6 +1273,9 @@ msgstr "Biçimlendir" msgid "Frame repeat count during non-smooth winding" msgstr "Adım adım ilerletmede çerçeve tekrar sayısı " +msgid "Frame size in full view" +msgstr "" + msgid "French" msgstr "Fransızca" @@ -1771,7 +1760,7 @@ msgid "Network setup" msgstr "AÄŸ kurulumu" msgid "Network test" -msgstr "AÄŸ testi" +msgstr "AÄŸ yapılandırmasını test et" msgid "Network test..." msgstr "AÄŸ testi..." @@ -1847,7 +1836,7 @@ msgid "No satellite frontend found!!" msgstr "Uydu uç ekipmanı (frontend) bulunamadı!!" msgid "No tags are set on these movies." -msgstr "" +msgstr "Bu filmler için etiket tanımlanmamış" msgid "No tuner is configured for use with a diseqc positioner!" msgstr "DiSEqC pozisyoner kullanımı için tuner ayarı yapılmamış." @@ -1950,14 +1939,6 @@ msgstr "" msgid "Now Playing" msgstr "Oynatılıyor" -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 "" -"Lütfen ÅŸimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB bellek " -"takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuÅŸuna basın." - 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 " @@ -2031,15 +2012,15 @@ msgstr "Ebeveyn kontrolü kurulumu" msgid "Parental control type" msgstr "Ebeveyn kontrolü tipi" -msgid "Partitioning USB stick..." -msgstr "USB bellek bölümlendiriliyor..." - msgid "Pause movie at end" msgstr "BittiÄŸinde filmi duraklat" msgid "PiPSetup" msgstr "PiP Kurulumu" +msgid "PicturePlayer" +msgstr "" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Pillarbox" @@ -2083,6 +2064,13 @@ msgstr "Lütfen paket seçin..." msgid "Please choose the default services lists you want to install." msgstr "Lütfen yüklemek istediÄŸiniz varsayılan kanal listesini seçin." +msgid "" +"Please disconnect all USB devices from your Dreambox and (re-)attach the " +"target USB stick (minimum size is 64 MB) now!" +msgstr "" +"Lütfen tüm USB aygıtlarını Dreambox'ınızdan çıkarın ve iÅŸlem yapmak " +"istediÄŸiniz USB belleÄŸi (min. 64MB kapasiteli) tekrar takın!" + msgid "Please do not change any values unless you know what you are doing!" msgstr "Lütfen ne yaptığınızı bilmiyorsanız hiçbir deÄŸeri deÄŸiÅŸtirmeyin!" @@ -2139,7 +2127,7 @@ msgid "Please select a subservice..." msgstr "Lütfen bir alt servis seçin..." msgid "Please select tag to filter..." -msgstr "" +msgstr "Lütfen filtreleme için etiket seçin ..." msgid "Please select target directory or medium" msgstr "Lütfen hedef klasörü veya medyayı seçin" @@ -2175,9 +2163,6 @@ msgstr "" msgid "Please wait for activation of your network configuration..." msgstr "AÄŸ yapılandırmanızın aktifleÅŸtirmesi için lütfen bekleyin..." -msgid "Please wait for md5 signature verification..." -msgstr "md5 imza doÄŸrulamasının yapılabilmesi için lütfen bekleyin..." - msgid "Please wait while we configure your network..." msgstr "Lütfen aÄŸ yapılandırılırken bekleyin..." @@ -2359,9 +2344,6 @@ msgstr "Yenileme Hızı" msgid "Refresh rate selection." msgstr "Tazeleme hızı seçimi." -msgid "Remounting stick partition..." -msgstr "USB bellek bölümlendirmesi (partition) yeniden yapılandırılıyor..." - msgid "Remove Bookmark" msgstr "Yer imini Sil" @@ -2526,7 +2508,7 @@ msgid "Scaling Mode" msgstr "Ölçeklendirme Kipi" msgid "Scan " -msgstr "Ara" +msgstr "Ara : " msgid "Scan QAM128" msgstr "QAM128'i ara" @@ -2683,7 +2665,7 @@ msgid "" "(Timeout reading PMT)" msgstr "" "Kanal geçersiz!\n" -"(PMT okumasında zaman aşımı oldu)" +"(PMT okumasında zaman aşımı oluÅŸtu)" msgid "" "Service not found!\n" @@ -2712,7 +2694,7 @@ msgid "Set Voltage and 22KHz" msgstr "Voltaj ve 22KHz ayarla" msgid "Set as default Interface" -msgstr "Varsayılan arayüz olarak ayarla" +msgstr "Varsayılan arayüz olarak ata" msgid "Set interface as default Interface" msgstr "Arayüzü varsayılan arayüz olarak ata" @@ -2721,7 +2703,7 @@ msgid "Set limits" msgstr "Limitleri belirle" msgid "Settings" -msgstr "Ayarları" +msgstr "Ayarlar" msgid "Setup" msgstr "Kurulum" @@ -2751,7 +2733,7 @@ msgid "Show positioner movement" msgstr "Pozisyoner haraketini göster" msgid "Show services beginning with" -msgstr "Cihaz açılırken bu kanalla baÅŸla" +msgstr "Kanalları harf sırasına göre göster" msgid "Show the radio player..." msgstr "Radyo oynatıcıyı göster..." @@ -2815,7 +2797,7 @@ msgid "Slow Motion speeds" msgstr "Ağır Çekim hızları" msgid "Some plugins are not available:\n" -msgstr "Eklentilerin bazıları kullanılamaz:\n" +msgstr "Bazı eklentiler kullanılamaz:\n" msgid "Somewhere else" msgstr "BaÅŸka bir yere" @@ -2831,7 +2813,7 @@ msgstr "" #. TRANSLATORS: This must fit into the header button in the EPG-List msgid "Sort A-Z" -msgstr "A-Z ye Sırala" +msgstr "A-Z ye" #. TRANSLATORS: This must fit into the header button in the EPG-List msgid "Sort Time" @@ -2953,16 +2935,16 @@ msgid "TV System" msgstr "TV Sistemi" msgid "Table of content for collection" -msgstr "Kolleksiyonun içerik listesi (TOC)" +msgstr "Kolleksiyonun içerik listesi tablosu (TOC)" msgid "Tag 1" -msgstr "" +msgstr "Etiket 1" msgid "Tag 2" -msgstr "" +msgstr "Etiket 2" msgid "Tags" -msgstr "" +msgstr "Etiketler" msgid "Terrestrial" msgstr "Karasal" @@ -2987,17 +2969,6 @@ msgstr "" "hazır.\n" "Dreambox'ınızı kullanmaya baÅŸlamak için OK tuÅŸuna basın." -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 İmaj flaÅŸlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj dosyasını " -"sunucudan çekin ve belleÄŸe kaydedin. Ardından önyüklemenin USB bellekten " -"yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan 'Down' tuÅŸuna " -"basılı tutun!" - 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 " @@ -3007,6 +2978,13 @@ msgstr "" "Dreambox'ın DVD biçiminde (standart DVD oynatıcılarda oynatamazsınız) " "oluÅŸturmak ister misiniz?" +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 bellek artık önyükleme yapabilir. Yayınlanan son imajı sunucudan " +"indirmek ve usb belleÄŸe kaydetmek istiyor musunuz?" + msgid "The backup failed. Please choose a different backup location." msgstr "Yedek alınamadı. Lütfen baÅŸka bir yedekleme konumu seçin." @@ -3215,6 +3193,9 @@ msgstr "EÅŸik" msgid "Thu" msgstr "PerÅŸ" +msgid "Thumbnails" +msgstr "" + msgid "Thursday" msgstr "PerÅŸembe" @@ -3265,7 +3246,7 @@ msgid "Timeshift not possible!" msgstr "Zaman bükme kullanılamaz!" msgid "Timeshift path..." -msgstr "" +msgstr "Zaman bükücü yol adı..." msgid "Timezone" msgstr "Zaman dilimi" @@ -3283,12 +3264,21 @@ msgid "Titleset mode" msgstr "BaÅŸlıkseti kipi" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." msgstr "" -"Bunu yapmak istediÄŸinizden eminseniz, lütfen hedef USB çubuÄŸu yerinden " -"çıkarın ve istenildiÄŸinde tekrar takın. USB çubuÄŸu çıkardıysanız lütfen OK " -"tuÅŸuna basın." +"Lütfen Dreambox sistem yazılımını güncellemek için, aÅŸağıdaki adımları takip " +"edin:\n" +"1) Dreambox'ınızı, arkasındaki kapama anahtarından kapayın ve önyükleme " +"yapabilir USB belleÄŸi takın.\n" +"2) Ön panelde yer alan AÅžAÄžI tuÅŸuna basın ve cihazı tekrar açın. 10 saniye " +"boyunca AÅžAÄžI tuÅŸunu bırakmayın.\n" +"3) Önyüklemenin yapılmasını bekleyin ve sihirbazın yapacağı yönlendirmeleri " +"takip edin." msgid "Today" msgstr "Bugün" @@ -3379,6 +3369,9 @@ msgstr "USB" msgid "USB Stick" msgstr "USB Bellek" +msgid "USB stick wizard" +msgstr "USB bellek sihirbazı" + msgid "Ukrainian" msgstr "Ukraynaca" @@ -3565,9 +3558,6 @@ msgstr "WSS 4:3" msgid "Waiting" msgstr "Bekleniyor" -msgid "Waiting for USB stick to settle..." -msgstr "USB çubuÄŸun takılması bekleniyor..." - 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" @@ -3637,7 +3627,7 @@ msgid "Where do you want to backup your settings?" msgstr "Ayarlarınızın yedeÄŸini nereye almak istiyorsunuz?" msgid "Where to save temporary timeshift recordings?" -msgstr "" +msgstr "Geçici zaman bükücü kayıtlarında kayıt nereye yapılsın?" msgid "Wireless" msgstr "Kablosuz" @@ -3654,9 +3644,6 @@ msgstr "Yazma baÅŸarısız!" msgid "Writing NFI image file to flash completed" msgstr "NFI imajının flaÅŸa yazımı tamamlandı" -msgid "Writing image file to NAND Flash" -msgstr "İmaj, NAND FlaÅŸa yazılıyor" - msgid "YPbPr" msgstr "YPbPr" @@ -3942,19 +3929,25 @@ msgstr "geri" msgid "background image" msgstr "arkaplan tesmi" +msgid "backgroundcolor" +msgstr "" + msgid "better" msgstr "daha iyi" +msgid "black" +msgstr "" + msgid "blacklist" msgstr "kara liste" +msgid "blue" +msgstr "" + #, python-format msgid "burn audio track (%s)" msgstr "(%s) ses izini yaz" -msgid "by Exif" -msgstr "Exif'ten al" - msgid "change recording (duration)" msgstr "kaydı deÄŸiÅŸtir (süre)" @@ -4114,6 +4107,9 @@ msgstr "aÄŸ donanımı kurulum menüsünden çık" msgid "failed" msgstr "baÅŸarısız" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + msgid "filename" msgstr "dosyaadı" @@ -4138,6 +4134,9 @@ msgstr "derin uyku kipine geç" msgid "go to standby" msgstr "uyku kipine geç" +msgid "green" +msgstr "" + msgid "headline" msgstr "baÅŸlık" @@ -4290,9 +4289,6 @@ msgstr "hayır" msgid "no HDD found" msgstr "HDD bulunamadı" -msgid "no Picture found" -msgstr "Resim/fotoÄŸraf bulunamadı" - msgid "no module found" msgstr "modül bulunamadı" @@ -4371,15 +4367,15 @@ msgstr "önceki kanal" msgid "previous channel in history" msgstr "hafızadaki önceki kanal" -msgid "rebooting..." -msgstr "yeniden baÅŸlatılıyor..." - msgid "record" msgstr "kayıt" msgid "recording..." msgstr "kaydediliyor..." +msgid "red" +msgstr "" + msgid "remove a nameserver entry" msgstr "isim sunucusu kaydı silin" @@ -4489,6 +4485,9 @@ msgstr "DVD ana menüsünü göster" msgid "show EPG..." msgstr "EPG yi göster..." +msgid "show Infoline" +msgstr "" + msgid "show all" msgstr "tümünü göster" @@ -4502,10 +4501,10 @@ msgid "show extended description" msgstr "geniÅŸletilmiÅŸ açıklamayı göster" msgid "show first selected tag" -msgstr "" +msgstr "ilk seçili etiketi göster" msgid "show second selected tag" -msgstr "" +msgstr "ikinci seçili etiketi göster" msgid "show shutdown menu" msgstr "kapatma menüsünü göster" @@ -4540,6 +4539,9 @@ msgstr "sonraki kanala atla" msgid "skip forward (enter time)" msgstr "sonraki kanala atla (zaman girin)" +msgid "slide picture in loop" +msgstr "" + msgid "sort by date" msgstr "tarihe göre sırala" @@ -4597,6 +4599,9 @@ msgstr "sonraki alt yazı dilini seç" msgid "text" msgstr "metin" +msgid "textcolor" +msgstr "" + msgid "this recording" msgstr "bu kaydın" @@ -4648,6 +4653,9 @@ msgstr "beyaz liste" msgid "year" msgstr "yıl" +msgid "yellow" +msgstr "" + msgid "yes" msgstr "evet" @@ -4677,6 +4685,10 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "\"?" #~ msgstr "\"?" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr "" +#~ "USB bellek için önyükleme yapabilir .NFI FlaÅŸlayıcı baÅŸarıyla oluÅŸturuldu." + #~ msgid "All..." #~ msgstr "Tümü..." @@ -4720,6 +4732,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Connect to the Internet with your local LAN" #~ msgstr "Internete yerel aÄŸ donanımı ile baÄŸlanın" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Önyükleme yapabilir USB flaÅŸlayıcı imajı belleÄŸe kopyalanıyor..." + #~ msgid "DVD ENTER key" #~ msgstr "DVD ENTER tuÅŸu" @@ -4735,6 +4750,10 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "DVD up key" #~ msgstr "DVD yukarı" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "" +#~ "Sıkıştırılmış önyükleme yapabilir USB bellek flaÅŸlayıcı çıkartılıyor..." + #~ msgid "DiSEqC Mode" #~ msgstr "DiSEqC Modu" @@ -4755,6 +4774,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Do you really want to exit?" #~ msgstr "Çıkmak istediÄŸinizden emin misiniz?" +#~ msgid "Downloading image description..." +#~ msgstr "İmaj açıklaması indiriliyor..." + #~ msgid "Enable LAN" #~ msgstr "LAN'ı Aç" @@ -4777,6 +4799,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Exit wizard and configure later manually" #~ msgstr "Sihirbazdan çık ve ayarları daha sonra elle yap" +#~ msgid "Fix USB stick" +#~ msgstr "USB belleÄŸi onar" + #~ msgid "" #~ "No working local networkadapter found.\n" #~ "Please verify that you have attached a network cable and your Network is " @@ -4825,9 +4850,21 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "No, let me choose default lists" #~ msgstr "Hayır, öntanımlı listeleri seçmeme izin ver" +#~ 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 "" +#~ "Lütfen ÅŸimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB " +#~ "bellek takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuÅŸuna " +#~ "basın." + #~ msgid "Other..." #~ msgstr "DiÄŸer..." +#~ msgid "Partitioning USB stick..." +#~ msgstr "USB bellek bölümlendiriliyor..." + #~ 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 " @@ -4859,6 +4896,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "Please select keyword to filter..." #~ msgstr "Lütfen filtre için anahtar kelime girin..." +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "md5 imza doÄŸrulamasının yapılabilmesi için lütfen bekleyin..." + #~ 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 " @@ -4892,6 +4932,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgstr "" #~ "KAYIT iÅŸlemi devam ediyor. Cihazı kapatmak istediÄŸinizden emin misiniz?" +#~ msgid "Remounting stick partition..." +#~ msgstr "USB bellek bölümlendirmesi (partition) yeniden yapılandırılıyor..." + #~ msgid "Restart your wireless interface" #~ msgstr "Kablosuz arabirimini yeniden baÅŸlat" @@ -4945,6 +4988,29 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ "hazır.\n" #~ "Dreambox'ınızı kullanmak için OK tuÅŸuna basın." +#~ 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 İmaj flaÅŸlayıcı USB bellek kullanıma hazır. Lütfen .NFI imaj " +#~ "dosyasını sunucudan çekin ve belleÄŸe kaydedin. Ardından önyüklemenin USB " +#~ "bellekten yapılabilmesi için cihazı yeniden açarken, ön panelde bulunan " +#~ "'Down' tuÅŸuna basılı tutun!" + +#~ 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 "" +#~ "Bunu yapmak istediÄŸinizden eminseniz, lütfen hedef USB çubuÄŸu yerinden " +#~ "çıkarın ve istenildiÄŸinde tekrar takın. USB çubuÄŸu çıkardıysanız lütfen " +#~ "OK tuÅŸuna basın." + +#~ msgid "Waiting for USB stick to settle..." +#~ msgstr "USB çubuÄŸun takılması bekleniyor..." + #~ msgid "" #~ "Welcome.\n" #~ "\n" @@ -4960,6 +5026,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ "\n" #~ "Kumandanızın OK tuÅŸuna basarak sonraki adıma geçebilirsiniz." +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "İmaj, NAND FlaÅŸa yazılıyor" + #~ msgid "" #~ "You need to define some keywords first!\n" #~ "Press the menu-key to define keywords.\n" @@ -5006,6 +5075,9 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ "Kablosuz internet baÄŸlantınız çalışmıyor!\n" #~ "Lütfen sonraki adımda ne yapmak istediÄŸinizi seçiniz." +#~ msgid "by Exif" +#~ msgstr "Exif'ten al" + #~ msgid "delete" #~ msgstr "sil" @@ -5018,9 +5090,15 @@ msgstr "kanal deÄŸiÅŸtirildi" #~ msgid "minutes and" #~ msgstr "dakika ve" +#~ msgid "no Picture found" +#~ msgstr "Resim/fotoÄŸraf bulunamadı" + #~ msgid "only /etc/enigma2 directory" #~ msgstr "yalnızca /etc/enigma2 klasörü" +#~ msgid "rebooting..." +#~ msgstr "yeniden baÅŸlatılıyor..." + #~ msgid "scan done! %d services found!" #~ msgstr "kanal araması tamamlandı! %d kanal bulundu!" -- cgit v1.2.3 From 4faf769dd3aa03a1ccce0df36beecb4d5f57cffb Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 24 Nov 2008 19:09:45 +0100 Subject: delete file, shuffle, save & delete playlist and settings screen only for intermediate+ users --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index b6d87a6e..607294ba 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -482,17 +482,20 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB else: menu.append((_("add files to playlist"), "copyfiles")) menu.append((_("switch to playlist"), "playlist")) - menu.append((_("delete file"), "deletefile")) + if config.usage.setup_level.index >= 1: # intermediate+ + menu.append((_("delete file"), "deletefile")) else: menu.append((_("switch to filelist"), "filelist")) - menu.append((_("shuffle playlist"), "shuffle")) - menu.append((_("Delete entry"), "deleteentry")) menu.append((_("clear playlist"), "clear")) + menu.append((_("Delete entry"), "deleteentry")) + if config.usage.setup_level.index >= 1: # intermediate+ + menu.append((_("shuffle playlist"), "shuffle")) menu.append((_("hide player"), "hide")); - menu.append((_("save playlist"), "saveplaylist")); menu.append((_("load playlist"), "loadplaylist")); - menu.append((_("delete saved playlist"), "deleteplaylist")); - menu.append((_("Edit settings"), "settings")) + if config.usage.setup_level.index >= 1: # intermediate+ + menu.append((_("save playlist"), "saveplaylist")); + menu.append((_("delete saved playlist"), "deleteplaylist")); + menu.append((_("Edit settings"), "settings")) self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu) def menuCallback(self, choice): -- cgit v1.2.3 From 08d4f4729ac8c417f767628ef521dc71f232cf98 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 24 Nov 2008 22:04:28 +0100 Subject: add possibility to request tsid/onid for iDVBChannel --- lib/dvb/dvb.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/dvb/dvb.h | 11 +++++++++++ lib/dvb/idvb.h | 1 + 3 files changed, 65 insertions(+) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 66ec1d2d..fd509d5d 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -1499,6 +1500,58 @@ RESULT eDVBChannel::setCIRouting(const eDVBCIRouting &routing) return -1; } +void eDVBChannel::SDTready(int result) +{ + ePyObject args = PyTuple_New(2); + bool ok=false; + if (!result) + { + for (std::vector::const_iterator i = m_SDT->getSections().begin(); i != m_SDT->getSections().end(); ++i) + { + ok = true; + PyTuple_SET_ITEM(args, 0, PyInt_FromLong((*i)->getTransportStreamId())); + PyTuple_SET_ITEM(args, 1, PyInt_FromLong((*i)->getOriginalNetworkId())); + break; + } + } + if (!ok) + { + PyTuple_SET_ITEM(args, 0, Py_None); + PyTuple_SET_ITEM(args, 1, Py_None); + Py_INCREF(Py_None); + Py_INCREF(Py_None); + } + PyObject_CallObject(m_tsid_onid_callback, args); + Py_DECREF(args); + Py_DECREF(m_tsid_onid_callback); + m_tsid_onid_callback = ePyObject(); + m_tsid_onid_demux = 0; + m_SDT = 0; +} + +RESULT eDVBChannel::requestTsidOnid(ePyObject callback) +{ + if (PyCallable_Check(callback)) + { + if (!getDemux(m_tsid_onid_demux, 0)) + { + m_SDT = new eTable; + CONNECT(m_SDT->tableReady, eDVBChannel::SDTready); + if (m_SDT->start(m_tsid_onid_demux, eDVBSDTSpec())) + { + m_tsid_onid_demux = 0; + m_SDT = 0; + } + else + { + m_tsid_onid_callback = callback; + return 0; + } + } + } + return -1; +} + RESULT eDVBChannel::getDemux(ePtr &demux, int cap) { ePtr &our_demux = (cap & capDecode) ? m_decoder_demux : m_demux; diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index 13556c26..fa1801db 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -10,8 +10,11 @@ #include #include #include +#include #include +#include + class eDVBChannel; /* we do NOT handle resource conflicts here. instead, the allocateChannel @@ -259,6 +262,8 @@ public: RESULT getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, int mode); int getUseCount() { return m_use_count; } + + RESULT requestTsidOnid(ePyObject callback); private: ePtr m_frontend; ePtr m_demux, m_decoder_demux; @@ -299,6 +304,12 @@ private: oRefCount m_use_count; void AddUse(); void ReleaseUse(); + + /* for tsid/onid read */ + ePyObject m_tsid_onid_callback; + ePtr m_tsid_onid_demux; + ePtr > m_SDT; + void SDTready(int err); }; #endif // SWIG diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index cda05894..5fc633aa 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -504,6 +504,7 @@ class iDVBChannel: public iObject public: /* direct frontend access for raw channels and/or status inquiries. */ virtual SWIG_VOID(RESULT) getFrontend(ePtr &SWIG_OUTPUT)=0; + virtual RESULT requestTsidOnid(SWIG_PYOBJECT(ePyObject) callback) { return -1; } #ifndef SWIG enum { -- cgit v1.2.3 From afc5eb78a27a7c41fffd81eadf7ac650cb6f2043 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 24 Nov 2008 23:49:28 +0100 Subject: add missing incref --- lib/dvb/dvb.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index fd509d5d..7e9a39c6 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1544,6 +1544,7 @@ RESULT eDVBChannel::requestTsidOnid(ePyObject callback) } else { + Py_INCREF(callback); m_tsid_onid_callback = callback; return 0; } -- cgit v1.2.3 From 371e23c22dcec461ee3fbc8c989859cd08717b3d Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 25 Nov 2008 00:34:29 +0100 Subject: fix some refcounting bugs --- lib/base/nconfig.cpp | 1 + lib/dvb/dvb.cpp | 6 ++++-- lib/dvb/epgcache.cpp | 2 +- lib/gui/elistboxcontent.cpp | 17 +++++++++++------ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/base/nconfig.cpp b/lib/base/nconfig.cpp index 31b0a36f..106558ac 100644 --- a/lib/base/nconfig.cpp +++ b/lib/base/nconfig.cpp @@ -25,6 +25,7 @@ RESULT ePythonConfigQuery::getConfigValue(const char *key, std::string &value) if (PyString_Check(pRet)) { value.assign(PyString_AS_STRING(pRet)); + Py_DECREF(pRet); return 0; } Py_DECREF(pRet); diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 7e9a39c6..eac4554d 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1502,7 +1502,7 @@ RESULT eDVBChannel::setCIRouting(const eDVBCIRouting &routing) void eDVBChannel::SDTready(int result) { - ePyObject args = PyTuple_New(2); + ePyObject args = PyTuple_New(2), ret; bool ok=false; if (!result) { @@ -1521,7 +1521,9 @@ void eDVBChannel::SDTready(int result) Py_INCREF(Py_None); Py_INCREF(Py_None); } - PyObject_CallObject(m_tsid_onid_callback, args); + ret = PyObject_CallObject(m_tsid_onid_callback, args); + if (ret) + Py_DECREF(ret); Py_DECREF(args); Py_DECREF(m_tsid_onid_callback); m_tsid_onid_callback = ePyObject(); diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 0bb6e25b..222cba32 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -1672,7 +1672,7 @@ int handleEvent(eServiceEvent *ptr, ePyObject dest_list, const char* argstring, { fillTuple(convertFuncArgs, argstring, argcount, service, ptr, nowTime, service_name); ePyObject result = PyObject_CallObject(convertFunc, convertFuncArgs); - if (result) + if (!result) { if (service_name) Py_DECREF(service_name); diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index beb12044..69f72a41 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -467,7 +467,8 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, /* type is borrowed */ } else eWarning("eListboxPythonConfigContent: second value of tuple is not a tuple."); - /* value is borrowed */ + if (value) + Py_DECREF(value); } if (selected && (!local_style || !local_style->m_selection)) @@ -622,7 +623,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c painter.clip(itemregion); clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip); - ePyObject items; + ePyObject items, buildfunc_ret; if (m_list && cursorValid()) { @@ -638,7 +639,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c if (PyCallable_Check(m_buildFunc)) // when we have a buildFunc then call it { if (PyTuple_Check(items)) - items = PyObject_CallObject(m_buildFunc, items); + buildfunc_ret = items = PyObject_CallObject(m_buildFunc, items); else eDebug("items is no tuple"); } @@ -983,8 +984,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry); error_out: - if (m_buildFunc && PyCallable_Check(m_buildFunc) && items) - Py_DECREF(items); + if (buildfunc_ret) + Py_DECREF(buildfunc_ret); painter.clippop(); } @@ -1015,7 +1016,11 @@ int eListboxPythonMultiContent::currentCursorSelectable() { ePyObject ret = PyObject_CallObject(m_selectableFunc, args); if (ret) - return ret == Py_True; + { + bool retval = ret == Py_True; + Py_DECREF(ret); + return ret; + } eDebug("call m_selectableFunc failed!!! assume not callable"); } else -- cgit v1.2.3 From 7b2563cd3851bb8deb9aed6e2043b87b1fc5b063 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 25 Nov 2008 19:07:44 +0100 Subject: some refcounting fixes and speedups --- lib/dvb/pmt.cpp | 18 ++++++++++-------- lib/service/servicedvb.cpp | 18 +++++++++--------- lib/service/servicedvbrecord.cpp | 12 ++++++------ 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 842d6979..25ac5465 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -1143,8 +1143,8 @@ void eDVBCAService::sendCAPMT() static PyObject *createTuple(int pid, const char *type) { PyObject *r = PyTuple_New(2); - PyTuple_SetItem(r, 0, PyInt_FromLong(pid)); - PyTuple_SetItem(r, 1, PyString_FromString(type)); + PyTuple_SET_ITEM(r, 0, PyInt_FromLong(pid)); + PyTuple_SET_ITEM(r, 1, PyString_FromString(type)); return r; } @@ -1154,17 +1154,18 @@ static inline void PyList_AppendSteal(PyObject *list, PyObject *item) Py_DECREF(item); } +extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp + PyObject *eDVBServicePMTHandler::program::createPythonObject() { - PyObject *r = PyDict_New(); + ePyObject r = PyDict_New(); + ePyObject l = PyList_New(0); - PyObject *l = PyList_New(0); - PyList_AppendSteal(l, createTuple(0, "pat")); if (pmtPid != -1) PyList_AppendSteal(l, createTuple(pmtPid, "pmt")); - + for (std::vector::const_iterator i(videoStreams.begin()); i != videoStreams.end(); ++i) @@ -1184,7 +1185,8 @@ PyObject *eDVBServicePMTHandler::program::createPythonObject() if (textPid != -1) PyList_AppendSteal(l, createTuple(textPid, "text")); - - PyDict_SetItemString(r, "pids", l); + + PutToDict(r, "pids", l); + return r; } diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 4141236a..f3183fef 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -109,7 +109,7 @@ static void PutToDict(ePyObject &dict, const char*key, long value) eDebug("could not create PyObject for %s", key); } -extern void PutToDict(ePyObject &dict, const char*key, const char *value); +extern void PutToDict(ePyObject &dict, const char*key, const char *value); // defined in dvb/frontend.cpp void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm) { @@ -2197,8 +2197,8 @@ PyObject *eDVBServicePlay::getCutList() for (std::multiset::iterator i(m_cue_entries.begin()); i != m_cue_entries.end(); ++i) { ePyObject tuple = PyTuple_New(2); - PyTuple_SetItem(tuple, 0, PyLong_FromLongLong(i->where)); - PyTuple_SetItem(tuple, 1, PyInt_FromLong(i->what)); + PyTuple_SET_ITEM(tuple, 0, PyLong_FromLongLong(i->where)); + PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(i->what)); PyList_Append(list, tuple); Py_DECREF(tuple); } @@ -3020,23 +3020,23 @@ RESULT eDVBServicePlay::stream(ePtr &ptr) return 0; } +extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp + PyObject *eDVBServicePlay::getStreamingData() { eDVBServicePMTHandler::program program; if (m_service_handler.getProgramInfo(program)) { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } - PyObject *r = program.createPythonObject(); + ePyObject r = program.createPythonObject(); ePtr demux; if (!m_service_handler.getDataDemux(demux)) { uint8_t demux_id; - demux->getCADemuxID(demux_id); - - PyDict_SetItemString(r, "demux", PyInt_FromLong(demux_id)); + if (!demux->getCADemuxID(demux_id)) + PutToDict(r, "demux", PyInt_FromLong(demux_id)); } return r; diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index 89d022cc..b63776d4 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -363,23 +363,23 @@ RESULT eDVBServiceRecord::stream(ePtr &ptr) return 0; } +extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp + PyObject *eDVBServiceRecord::getStreamingData() { eDVBServicePMTHandler::program program; if (!m_tuned || m_service_handler.getProgramInfo(program)) { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } - PyObject *r = program.createPythonObject(); + ePyObject r = program.createPythonObject(); ePtr demux; if (!m_service_handler.getDataDemux(demux)) { uint8_t demux_id; - demux->getCADemuxID(demux_id); - - PyDict_SetItemString(r, "demux", PyInt_FromLong(demux_id)); + if (!demux->getCADemuxID(demux_id)) + PutToDict(r, "demux", PyInt_FromLong(demux_id)); } return r; -- cgit v1.2.3 From 2dbd18117bf8519ea700c7f87424eaa2e5a794fa Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 25 Nov 2008 21:15:42 +0100 Subject: add possibility to always switch to 13V before do sec commands --- lib/dvb/sec.cpp | 17 ++++++++++----- lib/dvb/sec.h | 2 +- lib/python/Components/NimManager.py | 42 ++++++++++++++++++++++++------------- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 2b7f717b..39124b34 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -388,6 +388,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA iDVBFrontend *sec_fe=&frontend; eDVBRegisteredFrontend *linked_fe = 0; eDVBSatelliteDiseqcParameters::t_diseqc_mode diseqc_mode = di_param.m_diseqc_mode; + eDVBSatelliteSwitchParameters::t_voltage_mode voltage_mode = sw_param.m_voltage_mode; + bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13; + + if (diseqc13V) + voltage_mode = eDVBSatelliteSwitchParameters::HV; frontend.getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satposDependPtr); @@ -437,13 +442,13 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)) band |= 2; - if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_14V + if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical - && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) + && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) voltage = VOLTAGE(13); - else if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_18V + else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical) - && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) + && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) voltage = VOLTAGE(18); if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON) || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) ) @@ -597,7 +602,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) ); sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) ); - if ( RotorCmd != -1 && RotorCmd != lastRotorCmd ) + if (diseqc13V) + vlt = iDVBFrontend::voltage13; + else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd ) { if (rotor_param.m_inputpower_parameters.m_use) vlt = VOLTAGE(18); // in input power mode set 18V for measure input power diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index e68ed167..27dcedd5 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -170,7 +170,7 @@ class eDVBSatelliteSwitchParameters #endif public: enum t_22khz_signal { HILO=0, ON=1, OFF=2 }; // 22 Khz - enum t_voltage_mode { HV=0, _14V=1, _18V=2, _0V=3 }; // 14/18 V + enum t_voltage_mode { HV=0, _14V=1, _18V=2, _0V=3, HV_13=4 }; // 14/18 V #ifndef SWIG t_voltage_mode m_voltage_mode; t_22khz_signal m_22khz_signal; diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index f4e91083..edd3bbbb 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -39,7 +39,7 @@ class SecConfigure: sec.addSatellite(orbpos) self.configuredSatellites.add(orbpos) - def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50, fastDiSEqC = False, setVoltageTone = True): + def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50, fastDiSEqC = False, setVoltageTone = True, diseqc13V = False): if orbpos is None or orbpos == 3601: return #simple defaults @@ -70,7 +70,10 @@ class SecConfigure: if 0 <= diseqcmode < 3: self.addSatellite(sec, orbpos) if setVoltageTone: - sec.setVoltageMode(switchParam.HV) + if diseqc13V: + sec.setVoltageMode(switchParam.HV_13) + else: + sec.setVoltageMode(switchParam.HV) sec.setToneMode(switchParam.HILO) else: sec.setVoltageMode(switchParam._14V) @@ -90,7 +93,10 @@ class SecConfigure: for x in self.NimManager.satList: print "Add sat " + str(x[0]) self.addSatellite(sec, int(x[0])) - sec.setVoltageMode(switchParam.HV) + if diseqc13V: + sec.setVoltageMode(switchParam.HV_13) + else: + sec.setVoltageMode(switchParam.HV) sec.setToneMode(switchParam.HILO) sec.setRotorPosNum(0) # USALS @@ -172,24 +178,24 @@ class SecConfigure: print "diseqcmode: ", nim.diseqcMode.value if nim.diseqcMode.value == "single": #single if nim.simpleSingleSendDiSEqC.value: - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, diseqc13V = nim.diseqc13V.value) else: - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value) elif nim.diseqcMode.value == "toneburst_a_b": #Toneburst A/B - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO, diseqc13V = nim.diseqc13V.value) elif nim.diseqcMode.value == "diseqc_a_b": #DiSEqC A/B fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) elif nim.diseqcMode.value == "diseqc_a_b_c_d": #DiSEqC A/B/C/D fastDiSEqC = nim.simpleDiSEqCOnlyOnSatChange.value setVoltageTone = nim.simpleDiSEqCSetVoltageTone.value - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) - self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcA.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcB.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcC.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) + self.addLNBSimple(sec, slotid = x, orbpos = nim.diseqcD.orbital_position, toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB, fastDiSEqC = fastDiSEqC, setVoltageTone = setVoltageTone, diseqc13V = nim.diseqc13V.value) elif nim.diseqcMode.value == "positioner": #Positioner if nim.latitudeOrientation.value == "north": laValue = rotorParam.NORTH @@ -219,7 +225,8 @@ class SecConfigure: laDirection = laValue, turningSpeed = turning_speed, useInputPower = useInputPower, - inputPowerDelta = inputPowerDelta) + inputPowerDelta = inputPowerDelta, + diseqc13V = nim.diseqc13V.value) elif nim.configMode.value == "advanced": #advanced config self.updateAdvanced(sec, x) print "sec config completed" @@ -383,7 +390,10 @@ class SecConfigure: satpos = y currSat = config.Nims[slotid].advanced.sat[satpos] if currSat.voltage.value == "polarization": - sec.setVoltageMode(switchParam.HV) + if config.Nims[slotid].diseqc13V.value: + sec.setVoltageMode(switchParam.HV_13) + else: + sec.setVoltageMode(switchParam.HV) elif currSat.voltage.value == "13V": sec.setVoltageMode(switchParam._14V) elif currSat.voltage.value == "18V": @@ -902,6 +912,8 @@ def InitNimManager(nimmgr): # nim.configMode.value = "simple" # nim.configMode.save() + nim.diseqc13V = ConfigYesNo(default = False) + nim.diseqcMode = ConfigSelection( choices = [ ("single", _("Single")), -- cgit v1.2.3 From d7ae342d89a508cb2d997bc21443b1a602fa76bf Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Wed, 26 Nov 2008 13:15:58 +0100 Subject: update tr,da,lt language --- po/da.po | 437 +++++++++++++++++++++++++++++++++++++++++---------------------- po/lt.po | 47 ++++--- po/tr.po | 39 +++--- 3 files changed, 337 insertions(+), 186 deletions(-) mode change 100755 => 100644 po/da.po diff --git a/po/da.po b/po/da.po old mode 100755 new mode 100644 index 30a6c978..6939da56 --- a/po/da.po +++ b/po/da.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-14 07:24+0100\n" -"PO-Revision-Date: 2008-10-23 19:33+0100\n" +"POT-Creation-Date: 2008-11-26 13:07+0100\n" +"PO-Revision-Date: 2008-11-25 07:29+0100\n" "Last-Translator: Ingmar Jørgensen \n" "Language-Team: jazzydane \n" "MIME-Version: 1.0\n" @@ -87,17 +87,14 @@ msgid "(show optional DVD audio menu)" msgstr "(Vis ekstra DVD lyd menu)" msgid "* Only available if more than one interface is active." -msgstr "" +msgstr "* Kun tilgængelig hvis mere end et interface er aktivt." msgid "* Only available when entering hidden SSID or network key" -msgstr "" +msgstr "* Kun tilgængelig ved indtastning af skjult SSID eller netværks nøgle" msgid ".NFI Download failed:" msgstr ".NFI download fejlede:" -msgid ".NFI Flasher bootable USB stick successfully created." -msgstr ".NFI flash bootbar USB stick blev oprettet." - msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" @@ -386,9 +383,6 @@ msgstr "Alle" msgid "All Satellites" msgstr "Alle satellitter" -msgid "All..." -msgstr "Alle..." - msgid "Alpha" msgstr "Alpha" @@ -411,6 +405,8 @@ msgid "" "Are you sure you want to activate this network configuration?\n" "\n" msgstr "" +"Er du sikker pÃ¥, at du vil aktivere denne netværks opsætning?\n" +"\n" msgid "" "Are you sure you want to restart your network interfaces?\n" @@ -525,7 +521,7 @@ msgid "Burn DVD" msgstr "Brænde DVD" msgid "Burn existing image to DVD" -msgstr "" +msgstr "Brænd eksisterende image til DVD" msgid "Burn to DVD..." msgstr "Brænd til DVD..." @@ -689,7 +685,7 @@ msgid "Complete" msgstr "Færdig" msgid "Complex (allows mixing audio tracks and aspects)" -msgstr "" +msgstr "Kompleks (tillader blanding af lydspor og billedformater)" msgid "Configuration Mode" msgstr "Konfigurations Type" @@ -734,9 +730,6 @@ msgstr "Fortsæt afspilning" msgid "Contrast" msgstr "Kontrast" -msgid "Copying USB flasher boot image to stick..." -msgstr "Kopierer USB flash boot imaget til stick..." - msgid "Could not connect to Dreambox .NFI Image Feed Server:" msgstr "Kunne ikke forbinde til Dreambox .NFI image feed serveren:" @@ -744,7 +737,7 @@ msgid "Could not load Medium! No disc inserted?" msgstr "Kunne ikke indlæse media! Ingen disk isat?" msgid "Create DVD-ISO" -msgstr "" +msgstr "Opret DVD-ISO" msgid "Create movie folder failed" msgstr "Oprette Movie folder fejlede" @@ -813,9 +806,6 @@ msgstr "Dansk" msgid "Date" msgstr "Dato" -msgid "Decompressing USB stick flasher boot image..." -msgstr "Dekomprimerer USB stik flash boot image..." - msgid "Deep Standby" msgstr "Afbryde" @@ -943,9 +933,6 @@ msgstr "" "Vil du virkelig downloade\n" "pluginet \"%s\"?" -msgid "Do you really want to exit?" -msgstr "Ønsker du virkelig at afslutte?" - msgid "" "Do you really want to initialize the harddisk?\n" "All data on the disk will be lost!" @@ -1037,9 +1024,6 @@ msgstr "Plugins der kan hentes" msgid "Downloading" msgstr "Henter" -msgid "Downloading image description..." -msgstr "Downloader image beskrivelse..." - msgid "Downloading plugin information. Please wait..." msgstr "Henter plugin informationer. Vent venligst..." @@ -1063,13 +1047,13 @@ msgid "East" msgstr "Øst" msgid "Edit" -msgstr "" +msgstr "Rediger" msgid "Edit DNS" msgstr "Ændre DNS" msgid "Edit Title" -msgstr "" +msgstr "Rediger titel" msgid "Edit chapters of current title" msgstr "Rediger kapitler i aktuel titel" @@ -1117,14 +1101,11 @@ msgid "Encryption Key" msgstr "Kodnings Nøgle" msgid "Encryption Keytype" -msgstr "" +msgstr "Kodnings nøgletype" msgid "Encryption Type" msgstr "Kodnings Type" -msgid "End" -msgstr "Slut" - msgid "End time" msgstr "Stop tid" @@ -1161,10 +1142,10 @@ msgid "Enter Rewind at speed" msgstr "Sæt Tilbagespolings hastighed" msgid "Enter WLAN network name/SSID:" -msgstr "" +msgstr "Indtast WLAN netværks navn/SSID" msgid "Enter WLAN passphrase/key:" -msgstr "" +msgstr "Indtast WLAN kodesætning/nøgle:" msgid "Enter main menu..." msgstr "Ã…bne hoved menu..." @@ -1198,6 +1179,9 @@ msgstr "Kommando Status:" msgid "Execution finished!!" msgstr "Kommandoen udført!!" +msgid "Exif" +msgstr "" + msgid "Exit" msgstr "Afslut" @@ -1259,10 +1243,10 @@ msgid "Finished" msgstr "Færdig" msgid "Finished configuring your network" -msgstr "" +msgstr "Afsluttede opsætning af dit netværk" msgid "Finished restarting your network" -msgstr "" +msgstr "Afsluttede genstart af dit netværk" msgid "Finnish" msgstr "Finsk" @@ -1271,9 +1255,6 @@ msgid "" "First we need to download the latest boot environment for the USB flasher." msgstr "Først skal vi downloade seneste boot miljø for USB flash." -msgid "Fix USB stick" -msgstr "Klargør USB stick" - msgid "Flash" msgstr "Flash" @@ -1289,6 +1270,9 @@ msgstr "Formatere" msgid "Frame repeat count during non-smooth winding" msgstr "Billed gentagelses tæller ved hurtig spoling" +msgid "Frame size in full view" +msgstr "" + msgid "French" msgstr "Fransk" @@ -1310,6 +1294,9 @@ msgstr "Fre" msgid "Friday" msgstr "Fredag" +msgid "Frisian" +msgstr "" + msgid "Fritz!Box FON IP address" msgstr "Fritz!Box TELEFON IP adresse" @@ -1370,7 +1357,7 @@ msgid "Harddisk standby after" msgstr "Harddisk Hvile efter:" msgid "Hidden network SSID" -msgstr "" +msgstr "Skjult netværks SSID" msgid "Hierarchy Information" msgstr "Hiraki Information" @@ -1388,10 +1375,10 @@ msgid "IP Address" msgstr "IP-Adresse" msgid "ISO file is too large for this filesystem!" -msgstr "" +msgstr "ISO filen er for stor til dette filsystem!" msgid "ISO path" -msgstr "" +msgstr "ISO stien" msgid "Icelandic" msgstr "Islandsk" @@ -1808,6 +1795,9 @@ msgstr "" "Ingen HDD fundet eller\n" "HDD ikke initialiseret!." +msgid "No Networks found" +msgstr "" + msgid "No backup needed" msgstr "Ingen backup nødvendig" @@ -1841,6 +1831,9 @@ msgstr "Ingen brugbar Motor frontend fundet." msgid "No satellite frontend found!!" msgstr "Ingen satellit frontend fundet!!" +msgid "No tags are set on these movies." +msgstr "" + msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Ingen Tuner er konfigureret til brug af diseqc Motor!" @@ -1877,18 +1870,27 @@ msgid "" "Please verify that you have attached a network cable and your network is " "configured correctly." msgstr "" +"Der kunne ikke findes en fungerende netværksadapter.\n" +"Undersøg venligst, at du har tilsluttet kabler og at dit netværk er korrekt " +"opsat." msgid "" "No working wireless network adapter found.\n" "Please verify that you have attached a compatible WLAN device and your " "network is configured correctly." msgstr "" +"Der kunne ikke findes en fungerende trÃ¥dløs netværksadapter.\n" +"Undersøg venligst, at du har tilsluttet en kompatibel WLAN enhed og at " +"netværket er korrekt opsat." msgid "" "No working wireless network interface found.\n" " Please verify that you have attached a compatible WLAN device or enable " "your local network interface." msgstr "" +"Der kunne ikke findes et trÃ¥dløs netværks interface.\n" +"Undersøg venligst, at du har tilsluttet en kompatibel WLAN enhed eller " +"aktiver dit lokale netværks interface." msgid "No, but restart from begin" msgstr "Nej, men genstart fra begyndelse" @@ -1933,15 +1935,6 @@ msgstr "" msgid "Now Playing" msgstr "Nu Afspilles" -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 "" -"Nu, indsæt venligst USB sticken (minimum størrelse 64MB) som du vil " -"formattere og benytte som .NFI image flasher.Tryk pÃ¥ OK efter at sticken " -"igen er sat i boxen." - 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 " @@ -1981,9 +1974,6 @@ msgstr "Søg kun ukodet" msgid "Orbital Position" msgstr "Omløbs Position" -msgid "Other..." -msgstr "Andet..." - msgid "PAL" msgstr "PAL" @@ -2018,15 +2008,15 @@ msgstr "Forældre Kontrol Opsætning" msgid "Parental control type" msgstr "Forældre Kontrol Type" -msgid "Partitioning USB stick..." -msgstr "Partitionerer USB stick..." - msgid "Pause movie at end" msgstr "Pause ved filmslutning" msgid "PiPSetup" msgstr "PiP Opsætning" +msgid "PicturePlayer" +msgstr "" + #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" msgstr "Sort stribe i top og bund af billede" @@ -2070,6 +2060,11 @@ msgstr "Vælg venligst en pakke..." msgid "Please choose the default services lists you want to install." msgstr "Vælg venligst standard kanal lister som du ønsker at installere." +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!" msgstr "Venligst ikke ændre værdier hvis du ikke ved hvad du gør!" @@ -2125,8 +2120,8 @@ msgstr "Vælg en underkanal til at optagelse..." msgid "Please select a subservice..." msgstr "Vælg venligst en underkanal..." -msgid "Please select keyword to filter..." -msgstr "Vælg venligst et nøgleord til filter..." +msgid "Please select tag to filter..." +msgstr "" msgid "Please select target directory or medium" msgstr "Vælg venligst destinations mappe eller media" @@ -2160,19 +2155,16 @@ msgstr "" "knappen." msgid "Please wait for activation of your network configuration..." -msgstr "" - -msgid "Please wait for md5 signature verification..." -msgstr "Vent venligst pÃ¥ verificering af md5 signatur..." +msgstr "Vent venligt pÃ¥ aktivering af din netværks opsætning..." msgid "Please wait while we configure your network..." -msgstr "" +msgstr "Vent venligts, mens vi opsætter dit netværk..." msgid "Please wait while your network is restarting..." -msgstr "" +msgstr "Vent venligst, mens dit netværk genstartes..." msgid "Please wait..." -msgstr "" +msgstr "Vent venligst..." msgid "Please wait... Loading list..." msgstr "Vent venligst... Henter liste..." @@ -2256,7 +2248,7 @@ msgid "Primary DNS" msgstr "Primær DNS" msgid "Properties of current title" -msgstr "" +msgstr "Egenskaber for den aktuelle titel" msgid "Protect services" msgstr "Beskytte Kanaler?" @@ -2345,9 +2337,6 @@ msgstr "Opdaterings Rate" msgid "Refresh rate selection." msgstr "Opdaterings Rate vælger." -msgid "Remounting stick partition..." -msgstr "Genmonterer partitioner pÃ¥ stick..." - msgid "Remove Bookmark" msgstr "Fjern bogmærke" @@ -2395,7 +2384,7 @@ msgid "Reset" msgstr "Genstart" msgid "Reset and renumerate title names" -msgstr "" +msgstr "Nulstiller og genoptæller titel navne" msgid "Resolution" msgstr "Opløsning" @@ -2635,10 +2624,10 @@ msgid "Selected source image" msgstr "Vælg kilde image" msgid "Send DiSEqC" -msgstr "" +msgstr "Sender DiSEqC" msgid "Send DiSEqC only on satellite change" -msgstr "" +msgstr "Sender DiSEqC kun ved satellite skifte" msgid "Seperate titles with a main menu" msgstr "Adskil titler med en hoved menu" @@ -2692,13 +2681,13 @@ msgid "Services" msgstr "Kanaler" msgid "Set Voltage and 22KHz" -msgstr "" +msgstr "Sætter Spænding og 22KHz" msgid "Set as default Interface" msgstr "Sæt som standard interface" msgid "Set interface as default Interface" -msgstr "" +msgstr "Sætter interfacet om standard interface" msgid "Set limits" msgstr "Indstil limits" @@ -2758,7 +2747,7 @@ msgid "Simple" msgstr "Simpel" msgid "Simple titleset (compatibility for legacy players)" -msgstr "" +msgstr "Enkelt titelopsætning (kompatibel med legacy afspillere)" msgid "Single" msgstr "Enkelt" @@ -2838,9 +2827,6 @@ msgstr "Standby" msgid "Standby / Restart" msgstr "Afbryde / Genstarte" -msgid "Start" -msgstr "Start" - msgid "Start from the beginning" msgstr "Start fra begyndelse" @@ -2940,7 +2926,7 @@ msgstr "" "http://www.dream-multimedia-tv.de/board/index.php?sid=" msgid "TS file is too large for ISO9660 level 1!" -msgstr "" +msgstr "TS filen er for stor til ISO9660 level 1!" msgid "TV System" msgstr "TV System" @@ -2948,6 +2934,15 @@ msgstr "TV System" msgid "Table of content for collection" msgstr "Indholdsfortegnelse for kollektion" +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + msgid "Terrestrial" msgstr "DVB T" @@ -2970,16 +2965,6 @@ msgstr "" "Tak fordi du brugte Start Hjælpen. Din Dreambox er nu klar til brug .\n" "Tryk venligst OK, for at starte den." -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 flash USB sticken er nu klar til brug. Download venligst en .NFI " -"image fil fra feed serveren og gem den pÃ¥ sticken. Genstart derefter og hold " -"'NED' knappen pÃ¥ front panelet inde for at boote .NFI flash fra sticken!" - 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 " @@ -2989,6 +2974,11 @@ msgstr "" "stedet oprette en Dreambox format DVD (som ikke kan afspilles i en " "almindelig DVD afspiller)? " +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." msgstr "Backup har slÃ¥et fejl. Vælg en anden mÃ¥de at lave backup pÃ¥." @@ -3196,6 +3186,9 @@ msgstr "Threshold" msgid "Thu" msgstr "Tor" +msgid "Thumbnails" +msgstr "" + msgid "Thursday" msgstr "Torsdag" @@ -3245,6 +3238,9 @@ msgstr "Tidsskift" msgid "Timeshift not possible!" msgstr "Timeskift ikke mulig!." +msgid "Timeshift path..." +msgstr "" + msgid "Timezone" msgstr "Tidszone" @@ -3252,21 +3248,22 @@ msgid "Title" msgstr "Titel" msgid "Title properties" -msgstr "" +msgstr "Titel egenskaber" msgid "Title:" msgstr "Titel:" msgid "Titleset mode" -msgstr "" +msgstr "Titelopsætning modus" 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." +"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" +"3) Wait for bootup and follow instructions of the wizard." msgstr "" -"For at sikre at du vil gøre dette, skal du venligst fjerne destinations USB " -"sticken nu og sætte den tilbage, nÃ¥r du bliver anmodet herom. Tryk pÃ¥ OK, " -"nÃ¥r du har taget sticken ud." msgid "Today" msgstr "Idag" @@ -3355,6 +3352,12 @@ msgstr "USB" msgid "USB Stick" msgstr "USB Stick" +msgid "USB stick wizard" +msgstr "" + +msgid "Ukrainian" +msgstr "" + msgid "" "Unable to complete filesystem check.\n" "Error: " @@ -3399,6 +3402,9 @@ msgstr "Opdaterer" msgid "Upgrading Dreambox... Please wait" msgstr "Opdaterer Dreambox... Vent venligst" +msgid "Use" +msgstr "" + msgid "Use DHCP" msgstr "Brug (DHCP)" @@ -3505,7 +3511,7 @@ msgid "View teletext..." msgstr "Se teletekst..." msgid "Virtual KeyBoard" -msgstr "" +msgstr "Virtuelt tastatur" msgid "Voltage mode" msgstr "Spændings type" @@ -3523,7 +3529,7 @@ msgid "WPA" msgstr "WPA" msgid "WPA or WPA2" -msgstr "" +msgstr "WPA eller WPA2" msgid "WPA2" msgstr "WPA2" @@ -3534,9 +3540,6 @@ msgstr "WSS pÃ¥ 4:3" msgid "Waiting" msgstr "Venter" -msgid "Waiting for USB stick to settle..." -msgstr "Venter pÃ¥ USB sticken..." - 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" @@ -3602,6 +3605,9 @@ msgstr "Hvad vil du søge?" msgid "Where do you want to backup your settings?" msgstr "Hvor vil du lave en kopi af dine indstillinger?" +msgid "Where to save temporary timeshift recordings?" +msgstr "" + msgid "Wireless" msgstr "TrÃ¥dløst" @@ -3617,9 +3623,6 @@ msgstr "Skrivning mislykkedes!" msgid "Writing NFI image file to flash completed" msgstr "Skrivning af NFI image til flash tilendebragt" -msgid "Writing image file to NAND Flash" -msgstr "Skriver image fil til NAND flash" - msgid "YPbPr" msgstr "Komponent" @@ -3630,7 +3633,7 @@ msgid "Yes" msgstr "Ja" msgid "Yes, and delete this movie" -msgstr "" +msgstr "Ja, og slet denne film" msgid "Yes, backup my settings!" msgstr "Ja, start kopiering af mine indstillinger!" @@ -3740,15 +3743,6 @@ msgstr "" "Instruktioner fra websiden, vil den nye firmware vil bede dig om at " "geninstallere, dine indstillinger." -msgid "" -"You need to define some keywords first!\n" -"Press the menu-key to define keywords.\n" -"Do you want to define keywords now?" -msgstr "" -"Du mÃ¥ definere nogle nøgleord først!\n" -"Tryk pÃ¥ menu for at definere nøgleord.\n" -"Vil du definere nøgleord nu?" - msgid "" "You need to set a pin code and hide it from your children.\n" "\n" @@ -3789,7 +3783,7 @@ msgstr "" "Tryk OK for at starte opdateringen." msgid "Your network configuration has been activated." -msgstr "" +msgstr "Din netværks opsætning er blevet aktiveret." msgid "" "Your network configuration has been activated.\n" @@ -3797,6 +3791,10 @@ msgid "" "\n" "Do you want to disable the second network interface?" msgstr "" +"Din netværks opsætning er blevet aktiveret.\n" +"Der er fundet et andet opsat interface.\n" +"\n" +"Vil du deaktivere det andet netværks interface?" msgid "Zap back to service before positioner setup?" msgstr "Skift tilbage til kanal før Motor Opsætning?" @@ -3829,10 +3827,10 @@ msgid "about to start" msgstr "Ved at starte" msgid "activate current configuration" -msgstr "" +msgstr "aktiver den aktuelle opsætning" msgid "add a nameserver entry" -msgstr "" +msgstr "tilføj en navneserver angivelse" msgid "add alternatives" msgstr "Tilføj alternativer" @@ -3891,11 +3889,11 @@ msgstr "" #, python-format msgid "audio track (%s) format" -msgstr "" +msgstr "lydspor (%s) format" #, python-format msgid "audio track (%s) language" -msgstr "" +msgstr "lydspor (%s) sprog" msgid "audio tracks" msgstr "lyd spor" @@ -3906,18 +3904,24 @@ msgstr "Tilbage" msgid "background image" msgstr "baggrunds billede" +msgid "backgroundcolor" +msgstr "" + msgid "better" msgstr "Bedre" +msgid "black" +msgstr "" + msgid "blacklist" msgstr "Sortliste" -#, python-format -msgid "burn audio track (%s)" +msgid "blue" msgstr "" -msgid "by Exif" -msgstr "Via Exif" +#, python-format +msgid "burn audio track (%s)" +msgstr "brænd lydspor (%s)" msgid "change recording (duration)" msgstr "Skifte optagelse (længde)" @@ -3970,12 +3974,12 @@ msgstr "Daglig" msgid "day" msgstr "dag" -msgid "delete" -msgstr "Slet" - msgid "delete cut" msgstr "Slet klip" +msgid "delete file" +msgstr "" + msgid "delete playlist entry" msgstr "Slette spilleliste indhold" @@ -4043,7 +4047,7 @@ msgid "end favourites edit" msgstr "Afslut favorit redigering" msgid "enigma2 and network" -msgstr "" +msgstr "enigma2 og netværk" msgid "equal to" msgstr "svarende til" @@ -4061,23 +4065,26 @@ msgid "exit movielist" msgstr "Afslutte Filmliste" msgid "exit nameserver configuration" -msgstr "" +msgstr "afslut navneserver opsætning" msgid "exit network adapter configuration" -msgstr "" +msgstr "afslut netværksadapter opsætning" msgid "exit network adapter setup menu" -msgstr "" +msgstr "afslut netværksadapter opsætnings menu" msgid "exit network interface list" -msgstr "" +msgstr "afslut netværks interface oversigt" msgid "exit networkadapter setup menu" -msgstr "" +msgstr "afslut netværksadapter opsætnings menu" msgid "failed" msgstr "mislykkedes" +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + msgid "filename" msgstr "fil navn" @@ -4102,6 +4109,9 @@ msgstr "GÃ¥ til dyb standby" msgid "go to standby" msgstr "GÃ¥ til Standby" +msgid "green" +msgstr "" + msgid "headline" msgstr "overskrift" @@ -4111,6 +4121,9 @@ msgstr "Høre radio..." msgid "help..." msgstr "Hjælp..." +msgid "hidden network" +msgstr "" + msgid "hide extended description" msgstr "Skjule udvidet beskrivelse" @@ -4219,16 +4232,16 @@ msgid "move PiP to main picture" msgstr "Flytte PiP til hoved billede" msgid "move down to last entry" -msgstr "" +msgstr "flyt ned til sidste indtastning" msgid "move down to next entry" -msgstr "" +msgstr "flyrt ned til næste indtastning" msgid "move up to first entry" -msgstr "" +msgstr "flyt op til første indtastning" msgid "move up to previous entry" -msgstr "" +msgstr "flyt op til foregÃ¥ende indtastning" msgid "movie list" msgstr "Film liste" @@ -4251,9 +4264,6 @@ msgstr "Nej" msgid "no HDD found" msgstr "Ingen HDD fundet" -msgid "no Picture found" -msgstr "Intet Billede fundet" - msgid "no module found" msgstr "Ingen modul fundet" @@ -4291,7 +4301,7 @@ msgid "once" msgstr "En gang" msgid "open nameserver configuration" -msgstr "" +msgstr "Ã¥bn navneserver opsætning" msgid "open servicelist" msgstr "Ã…bne kanalliste" @@ -4303,7 +4313,7 @@ msgid "open servicelist(up)" msgstr "Ã…bne kanalliste(op)" msgid "open virtual keyboard input help" -msgstr "" +msgstr "Ã¥bn hjælp til virtuel tastatur input" msgid "pass" msgstr "Ok" @@ -4332,18 +4342,18 @@ msgstr "Forrige kanal" msgid "previous channel in history" msgstr "Forrige sete kanal" -msgid "rebooting..." -msgstr "genstarter..." - msgid "record" msgstr "Optage" msgid "recording..." msgstr "Optager..." -msgid "remove a nameserver entry" +msgid "red" msgstr "" +msgid "remove a nameserver entry" +msgstr "fjern en navneserver angivelse" + msgid "remove after this position" msgstr "Fjerne efter denne position" @@ -4389,9 +4399,15 @@ msgstr "Kør tilbage til forrige kapitel" msgid "right" msgstr "Højre" +msgid "save last directory on exit" +msgstr "" + msgid "save playlist" msgstr "Gem spilleliste" +msgid "save playlist on exit" +msgstr "" + msgid "scan done!" msgstr "Søgning slut!" @@ -4421,10 +4437,10 @@ msgid "select image from server" msgstr "vælg image fra server" msgid "select interface" -msgstr "" +msgstr "vælg interface" msgid "select menu entry" -msgstr "" +msgstr "vælg meny indgang" msgid "select movie" msgstr "Vælg Film" @@ -4444,6 +4460,9 @@ msgstr "Vis DVD Hoved Menu" msgid "show EPG..." msgstr "Vis EPG..." +msgid "show Infoline" +msgstr "" + msgid "show all" msgstr "Vis alle" @@ -4456,11 +4475,11 @@ msgstr "Vis program detaljer" msgid "show extended description" msgstr "Vis udvidet beskrivelse" -msgid "show first tag" -msgstr "Vis første mærke" +msgid "show first selected tag" +msgstr "" -msgid "show second tag" -msgstr "Vis andet mærke" +msgid "show second selected tag" +msgstr "" msgid "show shutdown menu" msgstr "Vise afbryde menu" @@ -4495,6 +4514,9 @@ msgstr "Drop fremad" msgid "skip forward (enter time)" msgstr "Skip fremad (skriv tiden)" +msgid "slide picture in loop" +msgstr "" + msgid "sort by date" msgstr "Sorter pÃ¥ Dato" @@ -4510,6 +4532,9 @@ msgstr "Standby" msgid "start cut here" msgstr "Start klip her" +msgid "start directory" +msgstr "" + msgid "start timeshift" msgstr "Start timeskift" @@ -4549,6 +4574,9 @@ msgstr "Skift til næste undertekst sprog" msgid "text" msgstr "Tekst" +msgid "textcolor" +msgstr "" + msgid "this recording" msgstr "Denne optagelse" @@ -4600,6 +4628,9 @@ msgstr "Hvidliste" msgid "year" msgstr "Ã¥r" +msgid "yellow" +msgstr "" + msgid "yes" msgstr "Ja" @@ -4629,6 +4660,9 @@ msgstr "Zappet" #~ msgid "\"?" #~ msgstr "\"?" +#~ msgid ".NFI Flasher bootable USB stick successfully created." +#~ msgstr ".NFI flash bootbar USB stick blev oprettet." + #~ msgid "AV-Setup" #~ msgstr "AV-Indstilling" @@ -4638,6 +4672,9 @@ msgstr "Zappet" #~ msgid "Add title..." #~ msgstr "Tilføj titel..." +#~ msgid "All..." +#~ msgstr "Alle..." + #~ msgid "Allow Unsupported Modes" #~ msgstr "Tillade Usupporterede Typer" @@ -4702,6 +4739,9 @@ msgstr "Zappet" #~ msgid "Connect to the Internet with your local LAN" #~ msgstr "Tilslutte Internet til dit lokale LAN netværk" +#~ msgid "Copying USB flasher boot image to stick..." +#~ msgstr "Kopierer USB flash boot imaget til stick..." + #~ msgid "DVD ENTER key" #~ msgstr "DVD ENTER tast" @@ -4717,6 +4757,9 @@ msgstr "Zappet" #~ msgid "DVD up key" #~ msgstr "DVD op tast" +#~ msgid "Decompressing USB stick flasher boot image..." +#~ msgstr "Dekomprimerer USB stik flash boot image..." + #~ msgid "Default-Wizard" #~ msgstr "Default-Guide" @@ -4746,6 +4789,12 @@ msgstr "Zappet" #~ "Vil du virkelig downloade\n" #~ "dette plugin \"" +#~ msgid "Do you really want to exit?" +#~ msgstr "Ønsker du virkelig at afslutte?" + +#~ msgid "Downloading image description..." +#~ msgstr "Downloader image beskrivelse..." + #~ msgid "Edit current title" #~ msgstr "Ændre nuværende titel" @@ -4771,9 +4820,15 @@ msgstr "Zappet" #~ msgid "Enable zap history" #~ msgstr "Aktivere zap historie" +#~ msgid "End" +#~ msgstr "Slut" + #~ msgid "Exit wizard and configure later manually" #~ msgstr "Afslutte hjælpen og konfigure manuelt senere" +#~ msgid "Fix USB stick" +#~ msgstr "Klargør USB stick" + #~ msgid "Hello!" #~ msgstr "Goddag!" @@ -4846,9 +4901,24 @@ msgstr "Zappet" #~ msgid "No, let me choose default lists" #~ msgstr "Nej, lad mig vælge standard lister" +#~ 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 "" +#~ "Nu, indsæt venligst USB sticken (minimum størrelse 64MB) som du vil " +#~ "formattere og benytte som .NFI image flasher.Tryk pÃ¥ OK efter at sticken " +#~ "igen er sat i boxen." + +#~ msgid "Other..." +#~ msgstr "Andet..." + #~ msgid "Output Type" #~ msgstr "Udgangs Type" +#~ msgid "Partitioning USB stick..." +#~ msgstr "Partitionerer 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 " @@ -4880,6 +4950,12 @@ msgstr "Zappet" #~ msgstr "" #~ "Venligst vælg nedenunder det trÃ¥dløse Netværk du vil tilsluttes til." +#~ msgid "Please select keyword to filter..." +#~ msgstr "Vælg venligst et nøgleord til filter..." + +#~ msgid "Please wait for md5 signature verification..." +#~ msgstr "Vent venligst pÃ¥ verificering af md5 signatur..." + #~ 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 " @@ -4921,6 +4997,9 @@ msgstr "Zappet" #~ "Optagelse(r) er igang eller starter op om fÃ¥ sekunder... vil du virkelig " #~ "afbryde nu?" +#~ msgid "Remounting stick partition..." +#~ msgstr "Genmonterer partitioner pÃ¥ stick..." + #~ msgid "Reset configuration" #~ msgstr "Genstart Konfiguration" @@ -4949,6 +5028,9 @@ msgstr "Zappet" #~ msgid "Show files from %s" #~ msgstr "Vis filer fra %s" +#~ msgid "Start" +#~ msgstr "Start" + #~ msgid "Startwizard" #~ msgstr "Start Hjælp" @@ -4988,6 +5070,17 @@ msgstr "Zappet" #~ "Tak fordi du brugte hjælpen. Din Dreambox er nu klar til brug.\n" #~ "Tryk venligst OK for at starte din Dreambox nu." +#~ 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 flash USB sticken er nu klar til brug. Download venligst en ." +#~ "NFI image fil fra feed serveren og gem den pÃ¥ sticken. Genstart derefter " +#~ "og hold 'NED' knappen pÃ¥ front panelet inde for at boote .NFI flash fra " +#~ "sticken!" + #~ msgid "" #~ "This test checks whether your LAN Adapter is set up for automatic IP " #~ "Address configuration with DHCP.\n" @@ -5008,6 +5101,15 @@ msgstr "Zappet" #~ "-kontroler om du har en konfigureret og virkende DHCP Server i dit " #~ "netværk." +#~ 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 "" +#~ "For at sikre at du vil gøre dette, skal du venligst fjerne destinations " +#~ "USB sticken nu og sætte den tilbage, nÃ¥r du bliver anmodet herom. Tryk pÃ¥ " +#~ "OK, nÃ¥r du har taget sticken ud." + #~ msgid "" #~ "Unable to initialize harddisk.\n" #~ "Please refer to the user manual.\n" @@ -5026,6 +5128,9 @@ msgstr "Zappet" #~ msgid "Videosize:" #~ msgstr "Billedformat:" +#~ msgid "Waiting for USB stick to settle..." +#~ msgstr "Venter pÃ¥ USB sticken..." + #~ msgid "" #~ "Welcome.\n" #~ "\n" @@ -5041,9 +5146,21 @@ msgstr "Zappet" #~ "\n" #~ "Tryk OK pÃ¥ din fjernbetjening for at gÃ¥ videre til næste trin." +#~ msgid "Writing image file to NAND Flash" +#~ msgstr "Skriver image fil til NAND flash" + #~ msgid "You can choose, what you want to install.." #~ msgstr "Du kan vælge, hvad du vil have indstalleret..." +#~ msgid "" +#~ "You need to define some keywords first!\n" +#~ "Press the menu-key to define keywords.\n" +#~ "Do you want to define keywords now?" +#~ msgstr "" +#~ "Du mÃ¥ definere nogle nøgleord først!\n" +#~ "Tryk pÃ¥ menu for at definere nøgleord.\n" +#~ "Vil du definere nøgleord nu?" + #~ msgid "" #~ "Your local LAN internet connection is not working!\n" #~ "Please choose what you want to do next." @@ -5079,6 +5196,12 @@ msgstr "Zappet" #~ "Din trÃ¥dløse LAN internet tilslutning virker ikke!\n" #~ "Vælg venligst hvad du nu vil gøre." +#~ msgid "by Exif" +#~ msgstr "Via Exif" + +#~ msgid "delete" +#~ msgstr "Slet" + #~ msgid "equal to Socket A" #~ msgstr "Som Tuner A" @@ -5088,6 +5211,9 @@ msgstr "Zappet" #~ msgid "loopthrough to socket A" #~ msgstr "Forbundet til Tuner A" +#~ msgid "no Picture found" +#~ msgstr "Intet Billede fundet" + #~ msgid "only /etc/enigma2 directory" #~ msgstr "Kun /etc/enigma2 direktorie" @@ -5097,6 +5223,15 @@ msgstr "Zappet" #~ msgid "play previous playlist entry" #~ msgstr "Afspil forrige i spilleliste" +#~ msgid "rebooting..." +#~ msgstr "genstarter..." + +#~ msgid "show first tag" +#~ msgstr "Vis første mærke" + +#~ msgid "show second tag" +#~ msgstr "Vis andet mærke" + #~ msgid "skip backward (self defined)" #~ msgstr "Skip tilbage (bruger defineret)" diff --git a/po/lt.po b/po/lt.po index 54045258..d6db20d0 100644 --- a/po/lt.po +++ b/po/lt.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-24 14:31+0100\n" -"PO-Revision-Date: 2008-11-18 23:49+0200\n" +"POT-Creation-Date: 2008-11-26 13:07+0100\n" +"PO-Revision-Date: 2008-11-25 00:26+0200\n" "Last-Translator: Audronis, Grincevicius \n" "Language-Team: Adga / enigma2 (c) \n" "MIME-Version: 1.0\n" @@ -1181,7 +1181,7 @@ msgid "Execution finished!!" msgstr "Vykdymas baigtas!!" msgid "Exif" -msgstr "" +msgstr "Exif" msgid "Exit" msgstr "IÅ¡eiti" @@ -1272,7 +1272,7 @@ msgid "Frame repeat count during non-smooth winding" msgstr "RÄ—mo pakartojimo skaiÄiavimas per nelygų vingiavimÄ…" msgid "Frame size in full view" -msgstr "" +msgstr "Kadro dydis pilname vaizde" msgid "French" msgstr "PrancÅ«zų" @@ -1295,6 +1295,9 @@ msgstr "Pen" msgid "Friday" msgstr "Penktadienis" +msgid "Frisian" +msgstr "" + msgid "Fritz!Box FON IP address" msgstr "Fritz!Box FON IP adresas" @@ -2021,7 +2024,7 @@ msgid "PiPSetup" msgstr "PiP nustatymas" msgid "PicturePlayer" -msgstr "" +msgstr "PaveikslÄ—lių grotuvas" #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" @@ -2071,6 +2074,8 @@ msgid "" "Please disconnect all USB devices from your Dreambox and (re-)attach the " "target USB stick (minimum size is 64 MB) now!" msgstr "" +"PraÅ¡ome atjungti visus USB prietaisus nuo savo Dreambox, ir (per-) įjungti " +"pasirinktÄ… USB prietaisÄ… (minimalus dydis yra 64 MB) dabar!" msgid "Please do not change any values unless you know what you are doing!" msgstr "PraÅ¡ome nekeisti reikÅ¡mių, jeigu JÅ«s nežinote kÄ… darote! " @@ -2982,6 +2987,8 @@ 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 prietaisas dabar yra paleidžiamasis. JÅ«s norite persisiųsti paskutinį " +"atvaizdÄ… iÅ¡ perdavimo serverio ir iÅ¡saugoti tai prietaise?" msgid "The backup failed. Please choose a different backup location." msgstr "IÅ¡saugoti nepavyko. Pasirinkite kitÄ… vietÄ… iÅ¡saugojimui. " @@ -3194,7 +3201,7 @@ msgid "Thu" msgstr "Ket" msgid "Thumbnails" -msgstr "" +msgstr "MiniatiÅ«ros" msgid "Thursday" msgstr "Ketvirtadienis" @@ -3271,6 +3278,12 @@ msgid "" "for 10 seconds.\n" "3) Wait for bootup and follow instructions of the wizard." msgstr "" +"Kad atnaujintumÄ—te jÅ«sų imtuvo programinÄ™ įrangÄ…, praÅ¡ome atlikti:\n" +"1) IÅ¡junkite savo imtuvÄ… su galiniu įtampos iÅ¡jungimo mygtuku ir prijunkite " +"paleidžiamÄ…jį USB prietaisÄ….\n" +"2) VÄ—l įjunkite maitinimo tinklÄ… laikydami nuspaustÄ… ŽEMYN mygtukÄ… ant " +"priekinÄ—s panÄ—lÄ—s apie 10 sekundžių \n" +"3) Laukite paleidimo ir sekite nustatymų vedlio instrukcijas." msgid "Today" msgstr "Å iandien" @@ -3362,7 +3375,7 @@ msgid "USB Stick" msgstr "USB raktelis" msgid "USB stick wizard" -msgstr "" +msgstr "USB prietaiso vedlys" msgid "Ukrainian" msgstr "UkrainieÄių" @@ -3919,19 +3932,19 @@ msgid "background image" msgstr "foninis atvaizdas" msgid "backgroundcolor" -msgstr "" +msgstr "foninÄ— spalva" msgid "better" msgstr "geriau" msgid "black" -msgstr "" +msgstr "juodas" msgid "blacklist" msgstr "juodas sÄ…raÅ¡as" msgid "blue" -msgstr "" +msgstr "mÄ—lynas" #, python-format msgid "burn audio track (%s)" @@ -4097,7 +4110,7 @@ msgid "failed" msgstr "klaidingas" msgid "fileformats (BMP, PNG, JPG, GIF)" -msgstr "" +msgstr "failų formatai (BMP, PNG, JPG, GIF)" msgid "filename" msgstr "failo pavadinimas" @@ -4124,7 +4137,7 @@ msgid "go to standby" msgstr "eiti į iÅ¡jungimÄ…" msgid "green" -msgstr "" +msgstr "žalias" msgid "headline" msgstr "antraÅ¡tÄ—" @@ -4363,7 +4376,7 @@ msgid "recording..." msgstr "įraÅ¡oma..." msgid "red" -msgstr "" +msgstr "raudonas" msgid "remove a nameserver entry" msgstr "paÅ¡alinkite serverio pavadinimo įėjimÄ…" @@ -4475,7 +4488,7 @@ msgid "show EPG..." msgstr "Rodyti EPG..." msgid "show Infoline" -msgstr "" +msgstr "rodyti informacijos eilutÄ™" msgid "show all" msgstr "rodyti viskÄ…" @@ -4529,7 +4542,7 @@ msgid "skip forward (enter time)" msgstr "Praleisti pirmyn (įraÅ¡ykite laikÄ…)" msgid "slide picture in loop" -msgstr "" +msgstr "skaidrÄ—s paveikslÄ—lis kontÅ«re" msgid "sort by date" msgstr "rūšiuoti pagal datÄ…" @@ -4589,7 +4602,7 @@ msgid "text" msgstr "tekstas" msgid "textcolor" -msgstr "" +msgstr "teksto spalva" msgid "this recording" msgstr "tai įraÅ¡yta" @@ -4643,7 +4656,7 @@ msgid "year" msgstr "metai" msgid "yellow" -msgstr "" +msgstr "geltonas" msgid "yes" msgstr "taip" diff --git a/po/tr.po b/po/tr.po index 1643f33f..5c832269 100644 --- a/po/tr.po +++ b/po/tr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-24 14:31+0100\n" +"POT-Creation-Date: 2008-11-26 13:07+0100\n" "PO-Revision-Date: \n" "Last-Translator: Zülfikar VeyisoÄŸlu \n" "Language-Team: \n" @@ -384,7 +384,7 @@ msgid "All Satellites" msgstr "Tüm uydular" msgid "Alpha" -msgstr "Alfa" +msgstr "Saydamlık" msgid "Alternative radio mode" msgstr "Alternatif radyo kipi" @@ -574,7 +574,7 @@ msgid "Change bouquets in quickzap" msgstr "Kanal deÄŸiÅŸtirirken buketler arası geçiÅŸe izin ver" msgid "Change dir." -msgstr "Klasör deÄŸiÅŸtir." +msgstr "Klasör deÄŸiÅŸtir" msgid "Change pin code" msgstr "Åžifre deÄŸiÅŸtir" @@ -1181,7 +1181,7 @@ msgid "Execution finished!!" msgstr "Uygulama bitti!!" msgid "Exif" -msgstr "" +msgstr "Exif" msgid "Exit" msgstr "Çıkış" @@ -1274,7 +1274,7 @@ msgid "Frame repeat count during non-smooth winding" msgstr "Adım adım ilerletmede çerçeve tekrar sayısı " msgid "Frame size in full view" -msgstr "" +msgstr "Tam ekranda çerçeve boyutu" msgid "French" msgstr "Fransızca" @@ -1297,6 +1297,9 @@ msgstr "Cuma" msgid "Friday" msgstr "Cuma" +msgid "Frisian" +msgstr "" + msgid "Fritz!Box FON IP address" msgstr "Fritz!Box FON IP adresi" @@ -1354,7 +1357,7 @@ msgid "Harddisk setup" msgstr "Sabitdisk kurulumu" msgid "Harddisk standby after" -msgstr "Belirtilen süre kullanılmadığında Sabitdiski uyku kipine al" +msgstr "Kullanılmadığında Sabit diski uyku kipine geçir" msgid "Hidden network SSID" msgstr "GizlenmiÅŸ aÄŸ SSID" @@ -2019,7 +2022,7 @@ msgid "PiPSetup" msgstr "PiP Kurulumu" msgid "PicturePlayer" -msgstr "" +msgstr "Resim Oynatıcı" #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" @@ -3194,7 +3197,7 @@ msgid "Thu" msgstr "PerÅŸ" msgid "Thumbnails" -msgstr "" +msgstr "Küçük resimler" msgid "Thursday" msgstr "PerÅŸembe" @@ -3930,19 +3933,19 @@ msgid "background image" msgstr "arkaplan tesmi" msgid "backgroundcolor" -msgstr "" +msgstr "zemin rengi" msgid "better" msgstr "daha iyi" msgid "black" -msgstr "" +msgstr "siyah" msgid "blacklist" msgstr "kara liste" msgid "blue" -msgstr "" +msgstr "mavi" #, python-format msgid "burn audio track (%s)" @@ -4108,7 +4111,7 @@ msgid "failed" msgstr "baÅŸarısız" msgid "fileformats (BMP, PNG, JPG, GIF)" -msgstr "" +msgstr "dosya biçimi (BMP, PNG, JPG, GIF)" msgid "filename" msgstr "dosyaadı" @@ -4135,7 +4138,7 @@ msgid "go to standby" msgstr "uyku kipine geç" msgid "green" -msgstr "" +msgstr "yeÅŸil" msgid "headline" msgstr "baÅŸlık" @@ -4374,7 +4377,7 @@ msgid "recording..." msgstr "kaydediliyor..." msgid "red" -msgstr "" +msgstr "kırmızı" msgid "remove a nameserver entry" msgstr "isim sunucusu kaydı silin" @@ -4486,7 +4489,7 @@ msgid "show EPG..." msgstr "EPG yi göster..." msgid "show Infoline" -msgstr "" +msgstr "Bilgi satırını göster" msgid "show all" msgstr "tümünü göster" @@ -4540,7 +4543,7 @@ msgid "skip forward (enter time)" msgstr "sonraki kanala atla (zaman girin)" msgid "slide picture in loop" -msgstr "" +msgstr "slayt görüntüsünü döndür" msgid "sort by date" msgstr "tarihe göre sırala" @@ -4600,7 +4603,7 @@ msgid "text" msgstr "metin" msgid "textcolor" -msgstr "" +msgstr "metin rengi" msgid "this recording" msgstr "bu kaydın" @@ -4654,7 +4657,7 @@ msgid "year" msgstr "yıl" msgid "yellow" -msgstr "" +msgstr "sarı" msgid "yes" msgstr "evet" -- cgit v1.2.3 From 04b3fc4ece96fd8dc6c7d53bd55e9ee1b7bf8b3b Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Wed, 26 Nov 2008 13:31:41 +0100 Subject: add frisian language, update language cache --- data/countries/x-fy.png | Bin 0 -> 2685 bytes lib/python/Components/Language.py | 1 + lib/python/Components/language_cache.py | 140 +- po/Makefile.am | 2 +- po/fy.po | 4615 +++++++++++++++++++++++++++++++ 5 files changed, 4737 insertions(+), 21 deletions(-) create mode 100644 data/countries/x-fy.png create mode 100644 po/fy.po diff --git a/data/countries/x-fy.png b/data/countries/x-fy.png new file mode 100644 index 00000000..ac32ca28 Binary files /dev/null and b/data/countries/x-fy.png differ diff --git a/lib/python/Components/Language.py b/lib/python/Components/Language.py index 6d1e31f3..395f6829 100644 --- a/lib/python/Components/Language.py +++ b/lib/python/Components/Language.py @@ -36,6 +36,7 @@ class Language: self.addLanguage(_("Swedish"), "sv", "SE") self.addLanguage(_("Turkish"), "tr", "TR") self.addLanguage(_("Ukrainian"), "uk", "UA") + self.addLanguage(_("Frisian"), "fy", "x-FY") # there is no separate country for frisian self.callbacks = [] diff --git a/lib/python/Components/language_cache.py b/lib/python/Components/language_cache.py index 046f281d..a9c02bc0 100644 --- a/lib/python/Components/language_cache.py +++ b/lib/python/Components/language_cache.py @@ -4,6 +4,7 @@ LANG_TEXT = { "fr_FR": "French", "fi_FI": "Finnish", "pt_PT": "Portuguese", + "fy_x-FY": "Frisian", "it_IT": "Italian", "no_NO": "Norwegian", "nl_NL": "Dutch", @@ -21,6 +22,7 @@ LANG_TEXT = { "tr_TR": "Turkish", "de_DE": "German", "ar_AE": "Arabic", + "uk_UA": "Ukrainian", "sv_SE": "Swedish", "pl_PL": "Polish", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -30,6 +32,7 @@ LANG_TEXT = { "fr_FR": "Französisch", "fi_FI": "Finnisch", "pt_PT": "portugiesisch", + "fy_x-FY": "Frisian", "it_IT": "Italienisch", "no_NO": "Norwegisch", "nl_NL": "Holländisch", @@ -47,6 +50,7 @@ LANG_TEXT = { "tr_TR": "Türkisch", "de_DE": "Deutsch", "ar_AE": "Arabisch", + "uk_UA": "Ukrainian", "sv_SE": "Schwedisch", "pl_PL": "Polnisch", "T1": "Bitte benutzen Sie die Hoch/Runter-Tasten, um Ihre Sprache auszuwählen. Danach drücken Sie bitte OK.", @@ -56,6 +60,7 @@ LANG_TEXT = { "fr_FR": "French", "fi_FI": "Finnish", "pt_PT": "Portuguese", + "fy_x-FY": "Frisian", "it_IT": "Italian", "no_NO": "Norwegian", "nl_NL": "Dutch", @@ -73,6 +78,7 @@ LANG_TEXT = { "tr_TR": "Turkish", "de_DE": "المانـى", "ar_AE": "Arabic", + "uk_UA": "Ukrainian", "sv_SE": "Swedish", "pl_PL": "Polish", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -82,6 +88,7 @@ LANG_TEXT = { "fr_FR": "Francès", "fi_FI": "Finlandès", "pt_PT": "Portuguès", + "fy_x-FY": "Frisian", "it_IT": "Italià", "no_NO": "Noruec", "nl_NL": "Holandès", @@ -99,6 +106,7 @@ LANG_TEXT = { "tr_TR": "Turc", "de_DE": "Alemany", "ar_AE": "Àrab", + "uk_UA": "Ukrainian", "sv_SE": "Suec", "pl_PL": "Polish", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -108,6 +116,7 @@ LANG_TEXT = { "fr_FR": "Francuski", "fi_FI": "Finski", "pt_PT": "Portugalski", + "fy_x-FY": "Frisian", "it_IT": "Talijanski", "no_NO": "NorveÅ¡ki", "nl_NL": "Nizozemski", @@ -125,6 +134,7 @@ LANG_TEXT = { "tr_TR": "Turski", "de_DE": "NjemaÄki", "ar_AE": "Arabski", + "uk_UA": "Ukrainian", "sv_SE": "Å vedski", "pl_PL": "Poljski", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -134,6 +144,7 @@ LANG_TEXT = { "fr_FR": "Francouzsky", "fi_FI": "Finsky", "pt_PT": "Portugalsky", + "fy_x-FY": "Frisian", "it_IT": "Italsky", "no_NO": "Norsky", "nl_NL": "Holandsky", @@ -151,6 +162,7 @@ LANG_TEXT = { "tr_TR": "Turecky", "de_DE": "NÄ›mecky", "ar_AE": "Arabsky", + "uk_UA": "Ukrainian", "sv_SE": "Å védsky", "pl_PL": "Polsky", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -160,6 +172,7 @@ LANG_TEXT = { "fr_FR": "Fransk", "fi_FI": "Finsk", "pt_PT": "Portugisisk", + "fy_x-FY": "Frisian", "it_IT": "Italiensk", "no_NO": "Norsk", "nl_NL": "Hollandsk", @@ -177,6 +190,7 @@ LANG_TEXT = { "tr_TR": "Tyrkisk", "de_DE": "Tysk", "ar_AE": "Arabisk", + "uk_UA": "Ukrainian", "sv_SE": "Svensk", "pl_PL": "Polsk", "T1": "Benyt venligst OP og NED tasten til at vælge sprog. Tryk bagefter pÃ¥ OK knappen.", @@ -186,6 +200,7 @@ LANG_TEXT = { "fr_FR": "Frans", "fi_FI": "Fins", "pt_PT": "Portugees", + "fy_x-FY": "Frisian", "it_IT": "Italiaans", "no_NO": "Noors", "nl_NL": "Nederlands", @@ -203,6 +218,7 @@ LANG_TEXT = { "tr_TR": "Turks", "de_DE": "Duits", "ar_AE": "Arabisch", + "uk_UA": "Ukrainian", "sv_SE": "Zweeds", "pl_PL": "Pools", "T1": "Gebruik de omhoog/omlaag toeten om de gewenste taal te selecteren. Druk daarna op OK.", @@ -212,6 +228,7 @@ LANG_TEXT = { "fr_FR": "Ranska", "fi_FI": "Suomi", "pt_PT": "Portugali", + "fy_x-FY": "Frisian", "it_IT": "Italia", "no_NO": "Norja", "nl_NL": "Hollanti", @@ -229,15 +246,17 @@ LANG_TEXT = { "tr_TR": "Turkki", "de_DE": "Saksa", "ar_AE": "Arabia", + "uk_UA": "Ukrainian", "sv_SE": "Ruotsi", "pl_PL": "Puola", - "T1": "Valitse kieli ylös/alas nappuloilla ja paina OK.", + "T1": "Valitse kieli ylös/alas näppäimillä ja paina OK-näppäintä.", "T2": "Kielivalinta", }, "fr_FR": { "fr_FR": "Français", "fi_FI": "Finlandais", "pt_PT": "Portugais", + "fy_x-FY": "Frisian", "it_IT": "Italien", "no_NO": "Norvégien", "nl_NL": "Hollandais", @@ -255,6 +274,7 @@ LANG_TEXT = { "tr_TR": "Turke", "de_DE": "Allemand", "ar_AE": "Arabe", + "uk_UA": "Ukrainian", "sv_SE": "Suédois", "pl_PL": "Polonais", "T1": "Veuillez utiliser les touches HAUT et BAS pour choisir votre langage. Ensuite presser le bouton OK.", @@ -264,6 +284,7 @@ LANG_TEXT = { "fr_FR": "Γαλλικά", "fi_FI": "Φιλλανδικά", "pt_PT": "ΠοÏτογαλλικά", + "fy_x-FY": "Frisian", "it_IT": "Ιταλικά", "no_NO": "ÎοÏβηφικά", "nl_NL": "Ολλανδικά", @@ -281,6 +302,7 @@ LANG_TEXT = { "tr_TR": "ΤοÏÏκικα", "de_DE": "ΓεÏμανικά", "ar_AE": "ΑÏαβικά", + "uk_UA": "Ukrainian", "sv_SE": "Σουιδεζικά", "pl_PL": "Πολωνικά", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -290,6 +312,7 @@ LANG_TEXT = { "fr_FR": "Francia", "fi_FI": "Finn", "pt_PT": "Portugál", + "fy_x-FY": "Frisian", "it_IT": "Olasz", "no_NO": "Norvég", "nl_NL": "Holland", @@ -307,6 +330,7 @@ LANG_TEXT = { "tr_TR": "Török", "de_DE": "Német", "ar_AE": "Arab", + "uk_UA": "Ukrainian", "sv_SE": "Svéd", "pl_PL": "Lengyel", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -316,6 +340,7 @@ LANG_TEXT = { "fr_FR": "PrancÅ«zų", "fi_FI": "Suomių", "pt_PT": "Portugalų", + "fy_x-FY": "Frisian", "it_IT": "Italų", "no_NO": "Norvegų", "nl_NL": "Olandų", @@ -333,6 +358,7 @@ LANG_TEXT = { "tr_TR": "Turkų", "de_DE": "VokieÄių", "ar_AE": "Arabų", + "uk_UA": "UkrainieÄių", "sv_SE": "Å vedų", "pl_PL": "Lenkų", "T1": "PraÅ¡ome naudoti AUKÅ TYN IR ŽEMYN mygtukus, kad iÅ¡sirinktumÄ—te savo kalbÄ…. Po to spauskite OK mygtukÄ….", @@ -342,6 +368,7 @@ LANG_TEXT = { "fr_FR": "Franska", "fi_FI": "Finnska", "pt_PT": "Portúgalska", + "fy_x-FY": "Frisian", "it_IT": "Ãtalska", "no_NO": "Norska", "nl_NL": "Hollenska", @@ -359,15 +386,17 @@ LANG_TEXT = { "tr_TR": "Tyrkneska", "de_DE": "Þýska", "ar_AE": "Arabíska", + "uk_UA": "Ukrainian", "sv_SE": "Sænskt", "pl_PL": "Pólska", - "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", + "T1": "Vinsamlega notið UP og NIÃUR takka til að velja tungumál. Ãttu svo á OK til að nota.", "T2": "Val tungumáls", }, "it_IT": { "fr_FR": "Francese", "fi_FI": "Finlandese", "pt_PT": "Portoghese", + "fy_x-FY": "Frisian", "it_IT": "Italiano", "no_NO": "Norvegese", "nl_NL": "Olandese", @@ -385,6 +414,7 @@ LANG_TEXT = { "tr_TR": "Turco", "de_DE": "Tedesco", "ar_AE": "Arabo", + "uk_UA": "Ucraino", "sv_SE": "Svedese", "pl_PL": "Polacco", "T1": "Selezionare la propria lingua utilizzando i tasti Sù/Giù. Premere OK per confermare.", @@ -394,6 +424,7 @@ LANG_TEXT = { "fr_FR": "Fransk", "fi_FI": "Finsk", "pt_PT": "Portugisisk", + "fy_x-FY": "Frisian", "it_IT": "Italiensk", "no_NO": "Norsk", "nl_NL": "Nederlandsk", @@ -411,6 +442,7 @@ LANG_TEXT = { "tr_TR": "Tyrkisk", "de_DE": "Tysk", "ar_AE": "Arabisk", + "uk_UA": "Ukrainian", "sv_SE": "Svensk", "pl_PL": "Polsk", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -420,6 +452,7 @@ LANG_TEXT = { "fr_FR": "Francuski", "fi_FI": "FiÅ„ski", "pt_PT": "Portugalski", + "fy_x-FY": "Frisian", "it_IT": "WÅ‚oski", "no_NO": "Norweski", "nl_NL": "Holenderski", @@ -437,6 +470,7 @@ LANG_TEXT = { "tr_TR": "Turecki", "de_DE": "Niemiecki", "ar_AE": "Arabski", + "uk_UA": "Ukrainian", "sv_SE": "Szwedzki", "pl_PL": "Polski", "T1": "W celu wyboru jÄ™zyka użyj klawiszy GÓRA i DÓÅ. Nastepnie nacisnij przycisk OK.", @@ -446,6 +480,7 @@ LANG_TEXT = { "fr_FR": "Francês", "fi_FI": "Finlandês", "pt_PT": "Português", + "fy_x-FY": "Frisian", "it_IT": "Italiano", "no_NO": "Norueguês", "nl_NL": "Holandês", @@ -463,6 +498,7 @@ LANG_TEXT = { "tr_TR": "Turco", "de_DE": "Alemão", "ar_AE": "Arabe", + "uk_UA": "Ukrainian", "sv_SE": "Sueco", "pl_PL": "Polaco", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -472,6 +508,7 @@ LANG_TEXT = { "fr_FR": "ФранцузÑкий", "fi_FI": "Окончание", "pt_PT": "Portuguese", + "fy_x-FY": "Frisian", "it_IT": "ИтальÑнÑкий", "no_NO": "ÐорвежÑкий", "nl_NL": "ÐидерландÑкий", @@ -489,6 +526,7 @@ LANG_TEXT = { "tr_TR": "Турецкий", "de_DE": "Ðемецкий", "ar_AE": "ÐрабÑкий", + "uk_UA": "Ukrainian", "sv_SE": "ШведÑкий", "pl_PL": "Polish", "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", @@ -498,6 +536,7 @@ LANG_TEXT = { "fr_FR": "Francés", "fi_FI": "Finlandés", "pt_PT": "Portugués", + "fy_x-FY": "Frisian", "it_IT": "Italiano", "no_NO": "Noruego", "nl_NL": "Alemán", @@ -515,6 +554,7 @@ LANG_TEXT = { "tr_TR": "Turco", "de_DE": "Alemán", "ar_AE": "Arábigo", + "uk_UA": "Ukrainian", "sv_SE": "Sueco", "pl_PL": "Polaco", "T1": "Use las teclas ARRIBA y ABAJO para seleccionar su idioma. Después, pulse el botón OK.", @@ -524,6 +564,7 @@ LANG_TEXT = { "fr_FR": "Franska", "fi_FI": "Finska", "pt_PT": "Portugisiska", + "fy_x-FY": "Frisian", "it_IT": "Italienska", "no_NO": "Norska", "nl_NL": "Holländska", @@ -541,6 +582,7 @@ LANG_TEXT = { "tr_TR": "Turkiska", "de_DE": "Tyska", "ar_AE": "Arabiska", + "uk_UA": "Ukrainian", "sv_SE": "Svenska", "pl_PL": "Polska", "T1": "Vänligen använd UPP och NER pil för att välja sprÃ¥k. Efter val tryck pÃ¥ OK knappen.", @@ -548,28 +590,86 @@ LANG_TEXT = { }, "tr_TR": { "fr_FR": "Fransızca", - "fi_FI": "BitiÅŸ", - "pt_PT": "Portuguese", - "it_IT": "İtalya", - "no_NO": "Norveç", - "nl_NL": "Almanca", + "fi_FI": "Fince", + "pt_PT": "Portekizce", + "fy_x-FY": "Frisian", + "it_IT": "İtalyanca", + "no_NO": "Norveççe", + "nl_NL": "Flemenkçe", "el_GR": "Greek", - "hu_HU": "Hungarian", - "lt_LT": "Lithuanian", - "hr_HR": "Croatian", + "hu_HU": "Macarca", + "lt_LT": "Litvanyaca", + "hr_HR": "Hırvatça", "en_EN": "İngilizce", "es_ES": "İspanyolca", - "ca_AD": "Catalan", - "ru_RU": "Russian", - "is_IS": "izlanda", - "da_DK": "Çanak", - "cs_CZ": "Czech", - "tr_TR": "Turkish", - "de_DE": "Alman", + "ca_AD": "Katalanca", + "ru_RU": "Rusça", + "is_IS": "İzlandaca", + "da_DK": "Danca", + "cs_CZ": "Çekçe", + "tr_TR": "Türkçe", + "de_DE": "Almanca", "ar_AE": "Arapça", - "sv_SE": "İsveç", + "uk_UA": "Ukraynaca", + "sv_SE": "İsveççe", "pl_PL": "Polish", - "T1": "Please use the UP and DOWN keys to select your language. Afterwards press the OK button.", - "T2": "Lisan Seçimi", + "T1": "Dil seçiminizi, yapmak için YUKARI ve AÅžAÄžI tuÅŸlarını, onaylamak için OK tuÅŸunu kullanın.", + "T2": "Dil seçimi", +}, +"uk_UA": { + "fr_FR": "Французька", + "fi_FI": "ФінÑька", + "pt_PT": "ПортугальÑька", + "fy_x-FY": "Frisian", + "it_IT": "ІталійÑька", + "no_NO": "ÐорвежÑька", + "nl_NL": "ДанÑька", + "el_GR": "Грецька", + "hu_HU": "УгорÑька", + "lt_LT": "ЛитовÑька", + "hr_HR": "ХорватьÑка", + "en_EN": "ÐнглійÑька", + "es_ES": "ІÑпанÑька", + "ca_AD": "КаталонÑька", + "ru_RU": "РоÑійÑька", + "is_IS": "ІÑландÑька", + "da_DK": "ДанÑька", + "cs_CZ": "ЧешÑька", + "tr_TR": "Турецька", + "de_DE": "Ðімецька", + "ar_AE": "ÐрабÑький", + "uk_UA": "Ukrainian", + "sv_SE": "ШведÑька", + "pl_PL": "ПольÑька", + "T1": "ВикориÑтовуйте кнопки ВВЕРХ Ñ– Ð’ÐИЗ, щоб вибрати Вашу мову. ПіÑÐ»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ натиÑніть OK.", + "T2": "Вибір мови", +}, +"fy_x-FY": { + "fr_FR": "Frans", + "fi_FI": "Finsk", + "pt_PT": "Portugeesk", + "fy_x-FY": "Frisian", + "it_IT": "Italiaansk", + "no_NO": "Noarsk", + "nl_NL": "Nederlansk", + "el_GR": "Gryks", + "hu_HU": "Hongaarsk", + "lt_LT": "Lithuaniansk", + "hr_HR": "Kroatysk", + "en_EN": "Engelsk", + "es_ES": "Spaans", + "ca_AD": "Catalânsk", + "ru_RU": "Russysk", + "is_IS": "Iislansk", + "da_DK": "Deensk", + "cs_CZ": "Tsjechysk", + "tr_TR": "Turks", + "de_DE": "Dúts", + "ar_AE": "Arabysk", + "uk_UA": "Ukrainian", + "sv_SE": "Zweeds", + "pl_PL": "Poolsk", + "T1": "Brúk de op en del toets om jo taal te kiezen. Dernei druk op OK", + "T2": "Taal Kieze", }, } diff --git a/po/Makefile.am b/po/Makefile.am index 02727930..26518b56 100644 --- a/po/Makefile.am +++ b/po/Makefile.am @@ -5,7 +5,7 @@ GETTEXT=xgettext #MSGFMT = ./msgfmt.py MSGFMT = msgfmt -LANGS := de en ar nl es is it da sv no fr fi tr ca cs hr hu ru pt el lt pl uk +LANGS := ar ca cs da de el en es fi fr fy hr hu is it lt nl no pl pt ru sv tr uk LANGPO := $(foreach LANG, $(LANGS),$(LANG).po) LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo) diff --git a/po/fy.po b/po/fy.po new file mode 100644 index 00000000..af5e21ad --- /dev/null +++ b/po/fy.po @@ -0,0 +1,4615 @@ +# translation of fy.po to gerrit +# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER +# This file is distributed under the same license as the tuxbox-enigma package. +# +# Automatically generated, 2005. +# Gerrit , 2007, 2008. +# gerrit , 2008. +msgid "" +msgstr "" +"Project-Id-Version: fy\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-11-26 13:07+0100\n" +"PO-Revision-Date: 2008-11-15 09:40+0100\n" +"Last-Translator: gerrit \n" +"Language-Team: gerrit \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Nederlands\n" +"X-Poedit-Country: NEDERLAND\n" +"X-Poedit-SourceCharset: iso-8859-15\n" +"X-Generator: KBabel 1.11.4\n" + +msgid " " +msgstr " " + +msgid "#000000" +msgstr "#000000" + +msgid "#0064c7" +msgstr "#0064c7" + +msgid "#25062748" +msgstr "#25062748" + +msgid "#389416" +msgstr "#389416" + +msgid "#80000000" +msgstr "#80000000" + +msgid "#80ffffff" +msgstr "#80ffffff" + +msgid "#bab329" +msgstr "#bab329" + +msgid "#f23d21" +msgstr "#f23d21" + +msgid "#ffffff" +msgstr "#ffffff" + +msgid "#ffffffff" +msgstr "#ffffffff" + +msgid "%H:%M" +msgstr "%H:%M" + +#, python-format +msgid "%d jobs are running in the background!" +msgstr "%d processen rinne op 'e eftergrûn" + +#, python-format +msgid "%d min" +msgstr "%d min" + +#, python-format +msgid "%d services found!" +msgstr "%d services fûn" + +msgid "%d.%B %Y" +msgstr "%d.%B %Y" + +#, python-format +msgid "" +"%s\n" +"(%s, %d MB free)" +msgstr "" +"%s\n" +"(%s, %d MB frij)" + +#, python-format +msgid "%s (%s)\n" +msgstr "%s (%s)\n" + +msgid "(ZAP)" +msgstr "(ZAP)" + +msgid "(empty)" +msgstr "(leech)" + +msgid "(show optional DVD audio menu)" +msgstr "(opsje DVD lûd menu sjen litte)" + +msgid "* Only available if more than one interface is active." +msgstr "" + +msgid "* Only available when entering hidden SSID or network key" +msgstr "" + +msgid ".NFI Download failed:" +msgstr "flater by it binnenhelje fan .NFI triem." + +msgid "" +".NFI file passed md5sum signature check. You can safely flash this image!" +msgstr "" +".NFI triem goedkarre by de md5sum kontrole. Dit image kin feilich nei flash " +"skreawn wurde." + +msgid "/usr/share/enigma2 directory" +msgstr "/usr/share/enigma2 map" + +msgid "/var directory" +msgstr "/var map" + +msgid "0" +msgstr "0" + +msgid "1" +msgstr "1" + +msgid "1.0" +msgstr "1.0" + +msgid "1.1" +msgstr "1.1" + +msgid "1.2" +msgstr "1.2" + +msgid "12V output" +msgstr "12V útgong" + +msgid "13 V" +msgstr "13 V" + +msgid "16:10" +msgstr "16:10" + +msgid "16:10 Letterbox" +msgstr "16:10 Letterbox" + +msgid "16:10 PanScan" +msgstr "16:10 PanScan" + +msgid "16:9" +msgstr "16:9" + +msgid "16:9 Letterbox" +msgstr "16:9 Letterbox" + +msgid "16:9 always" +msgstr "altiid 16:9" + +msgid "18 V" +msgstr "18 V" + +msgid "2" +msgstr "2" + +msgid "3" +msgstr "3" + +msgid "30 minutes" +msgstr "30 minuten" + +msgid "4" +msgstr "4" + +msgid "4:3" +msgstr "4:3" + +msgid "4:3 Letterbox" +msgstr "4:3 Letterbox" + +msgid "4:3 PanScan" +msgstr "4:3 PanScan" + +msgid "5" +msgstr "5" + +msgid "5 minutes" +msgstr "5 minuten" + +msgid "50 Hz" +msgstr "50 Hz" + +msgid "6" +msgstr "6" + +msgid "60 minutes" +msgstr "60 minuten" + +msgid "7" +msgstr "7" + +msgid "8" +msgstr "8" + +msgid "9" +msgstr "9" + +msgid "" +msgstr "" + +msgid "??" +msgstr "??" + +msgid "A" +msgstr "A" + +#, python-format +msgid "" +"A configuration file (%s) was modified since Installation.\n" +"Do you want to keep your version?" +msgstr "" +"In konfiguraasje triem (%s) wie feroare nei ynstalaasje.\n" +"Wolle jo jo ferzje hâlde ?" + +msgid "" +"A finished record timer wants to set your\n" +"Dreambox to standby. Do that now?" +msgstr "" +"In tiidsbarren wol de Dreambox yn sliipstand\n" +"skeakelje... No nei de sliipstand ?" + +msgid "" +"A finished record timer wants to shut down\n" +"your Dreambox. Shutdown now?" +msgstr "" +"In tiidsbarren wol de Dreambox\n" +"útskeakelje... No útskeakelje ?" + +msgid "A graphical EPG for all services of an specific bouquet" +msgstr "In grafyske EPG foar alle kanalen fan in spesifyk bouquet" + +#, python-format +msgid "" +"A record has been started:\n" +"%s" +msgstr "" +"In opnimmen is start:\n" +"%s" + +msgid "" +"A recording is currently running.\n" +"What do you want to do?" +msgstr "" +"In opnimmen is dwaande.\n" +"Wat wolle jo dwaan ?" + +msgid "" +"A recording is currently running. Please stop the recording before trying to " +"configure the positioner." +msgstr "" +"Opnimmen is dwaande. Stopje it opnimmen earst foar jo de rotor-ynstellingen " +"wizigje." + +msgid "" +"A recording is currently running. Please stop the recording before trying to " +"start the satfinder." +msgstr "" +"Opnimmen is dwaande. Stopje it opnimmen earst, foar jo de satfyner brûke." + +#, python-format +msgid "A required tool (%s) was not found." +msgstr "In benedicht programma (%s) wie net fûn" + +msgid "" +"A sleep timer wants to set your\n" +"Dreambox to standby. Do that now?" +msgstr "" +"In sliiptiidsbarren wol de Dreambox yn paraatstand sette\n" +"Dit no dwaan ?" + +msgid "" +"A sleep timer wants to shut down\n" +"your Dreambox. Shutdown now?" +msgstr "" +"In sliiptiidsbarren wol de Dreambox útskeakelje\n" +"No útskeakelje ?" + +msgid "" +"A timer failed to record!\n" +"Disable TV and try again?\n" +msgstr "" +"In tiidsbarren koe net opnimme!\n" +"TV utskeakelje en opnei besykje ?\n" + +msgid "A/V Settings" +msgstr "A/F ynstellingen" + +msgid "AA" +msgstr "AA" + +msgid "AB" +msgstr "AB" + +msgid "AC3 default" +msgstr "AC3 standert" + +msgid "AC3 downmix" +msgstr "AC3 downmix" + +msgid "AGC" +msgstr "AGC" + +msgid "AGC:" +msgstr "AGC:" + +msgid "About" +msgstr "Oer" + +msgid "About..." +msgstr "Oer...." + +msgid "Action on long powerbutton press" +msgstr "Aksje by lang yndrukken oanknop" + +msgid "Action:" +msgstr "Aksje:" + +msgid "Activate Picture in Picture" +msgstr "PIP ynskeakelje" + +msgid "Activate network settings" +msgstr "Netwurk ynstellingen aktief meitsje" + +msgid "Adapter settings" +msgstr "Adapter ynstellingen" + +msgid "Add" +msgstr "Tafoegje" + +msgid "Add Bookmark" +msgstr "In blêdwizer tafoegje" + +msgid "Add a mark" +msgstr "In merker tafoegje" + +msgid "Add a new title" +msgstr "In nije titel tafoegje" + +msgid "Add timer" +msgstr "In tiidsbarren tafoegje" + +msgid "Add title" +msgstr "In titel tafoegje" + +msgid "Add to bouquet" +msgstr "Oan in boeket tafoegje" + +msgid "Add to favourites" +msgstr "Oan favorieten tafoegje" + +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 "" +"Feroarje de ynstellingen sa, da't alle skaad fan 'e kleur fuort is, mar wol " +"fol fan kleur binne. Ot jo lokkig binne mei it einresultaat, druk OK om " +"fideo ôfstellen ôf te slúten, of brûk de nûmmer toetsen foar in oar test " +"skerm." + +msgid "Advanced" +msgstr "Afansjearre" + +msgid "Advanced Video Setup" +msgstr "Afansjearre Fideo Ynstellingen" + +msgid "After event" +msgstr "Nei it barren" + +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 "" +"Ot de startgucheler klear is, kinne jo in service befeilichje. Sjoch yn 'e " +"hânlieding foar ynformaasje." + +msgid "Album:" +msgstr "Album:" + +msgid "All" +msgstr "Alles" + +msgid "All Satellites" +msgstr "Alle Satellyten" + +msgid "Alpha" +msgstr "Alpha" + +msgid "Alternative radio mode" +msgstr "Oare Radio mode" + +msgid "Alternative services tuner priority" +msgstr "Alternatief kanaal tuner prioriteit" + +msgid "An empty filename is illegal." +msgstr "Gjin triemnamme is net tastien" + +msgid "An unknown error occured!" +msgstr "In unbekende flater !" + +msgid "Arabic" +msgstr "Arabysk" + +msgid "" +"Are you sure you want to activate this network configuration?\n" +"\n" +msgstr "" + +msgid "" +"Are you sure you want to restart your network interfaces?\n" +"\n" +msgstr "" +"Wolle jo de netwurk interfaces nij starte?\n" +"\n" + +msgid "Artist:" +msgstr "Artyst:" + +msgid "Ask before shutdown:" +msgstr "Freechje foar it útskeakeljen:" + +msgid "Ask user" +msgstr "freechje gebrûker" + +msgid "Aspect Ratio" +msgstr "Aspect ratio" + +msgid "Audio" +msgstr "Lûd" + +msgid "Audio Options..." +msgstr "Lûd opsjes..." + +msgid "Authoring mode" +msgstr "Authentikaasje troch" + +msgid "Auto" +msgstr "Auto" + +msgid "Auto chapter split every ? minutes (0=never)" +msgstr "Haadstik automatysk eltse ? minuten splitse (0=nea)" + +msgid "Auto scart switching" +msgstr "Auto scart skeakelje" + +msgid "Automatic" +msgstr "Automatysk" + +msgid "Automatic Scan" +msgstr "Automatysk sykjen" + +msgid "Available format variables" +msgstr "Beskikbere variabele formaten" + +msgid "B" +msgstr "B" + +msgid "BA" +msgstr "BA" + +msgid "BB" +msgstr "BB" + +msgid "BER" +msgstr "BER" + +msgid "BER:" +msgstr "BER:" + +msgid "Back" +msgstr "Werom" + +msgid "Background" +msgstr "Eftergrûn" + +msgid "Backup" +msgstr "Backup" + +msgid "Backup Location" +msgstr "Backup Lokaasje" + +msgid "Backup Mode" +msgstr "Backup Mode" + +msgid "Backup is done. Please press OK to see the result." +msgstr "Backup is klear. Druk Ok foar útfier" + +msgid "Band" +msgstr "Bân" + +msgid "Bandwidth" +msgstr "Bânbridte" + +msgid "Begin time" +msgstr "Begjin tiid" + +msgid "Behavior of 'pause' when paused" +msgstr "Gedrach fan 'pause' yn pause mode" + +msgid "Behavior of 0 key in PiP-mode" +msgstr "Gedrach fan 0 toets yn PiP mode" + +msgid "Behavior when a movie is started" +msgstr "Gedrach wannear in film start is" + +msgid "Behavior when a movie is stopped" +msgstr "Gedrach wannear in film stoppe is" + +msgid "Behavior when a movie reaches the end" +msgstr "Gedrach wannear in film bijna op syn ein is." + +msgid "Bookmarks" +msgstr "Boekmerkers" + +msgid "Brightness" +msgstr "Helderens" + +msgid "Burn DVD" +msgstr "In DVD brâne" + +msgid "Burn existing image to DVD" +msgstr "Besteand Image op DVD skiif brâne" + +msgid "Burn to DVD..." +msgstr "Nei DVD brâne" + +msgid "Bus: " +msgstr "Bus: " + +msgid "" +"By pressing the OK Button on your remote control, the info bar is being " +"displayed." +msgstr "By de Ok toets op jo ôfstansbetsjinning, wurd de ynfo balke toant" + +msgid "C" +msgstr "C" + +msgid "C-Band" +msgstr "C-Bân" + +msgid "CF Drive" +msgstr "CF Drive" + +msgid "CVBS" +msgstr "CVBS" + +msgid "Cable" +msgstr "Kabel" + +msgid "Cache Thumbnails" +msgstr "Cache Plaatsjes" + +msgid "Call monitoring" +msgstr "Skille monitor" + +msgid "Cancel" +msgstr "Ôfbrekke" + +msgid "Cannot parse feed directory" +msgstr "Kin feed map net ferwurkje" + +msgid "Capacity: " +msgstr "Skiif-grutte:" + +msgid "Card" +msgstr "Kaart" + +msgid "Catalan" +msgstr "Catalânsk" + +msgid "Change bouquets in quickzap" +msgstr "Feroarje fan boeket yn quickzap" + +msgid "Change dir." +msgstr "Feroarje dir." + +msgid "Change pin code" +msgstr "Feroarje pinkode" + +msgid "Change service pin" +msgstr "Feroarje service pin" + +msgid "Change service pins" +msgstr "Feroarje service pins" + +msgid "Change setup pin" +msgstr "Feroarje ynstellingen pin" + +msgid "Channel" +msgstr "Kanaal" + +msgid "Channel Selection" +msgstr "Kanaal seleksje" + +msgid "Channel:" +msgstr "Kanaal:" + +msgid "Channellist menu" +msgstr "Kanaal-lyst menu" + +msgid "Chap." +msgstr "Haads." + +msgid "Chapter" +msgstr "Haadstik" + +msgid "Chapter:" +msgstr "Haadstik:" + +msgid "Check" +msgstr "Neisjen" + +msgid "Checking Filesystem..." +msgstr "Bestânsysteem neisjen" + +msgid "Choose Tuner" +msgstr "Kies Tuner" + +msgid "Choose bouquet" +msgstr "Kies bouquet" + +msgid "Choose source" +msgstr "Kies bron" + +msgid "Choose target folder" +msgstr "Kies doel map" + +msgid "Choose your Skin" +msgstr "Kies Oanklaaiing" + +msgid "Cleanup" +msgstr "Opskjinje" + +msgid "Clear before scan" +msgstr "Wiskje foar sykjen ?" + +msgid "Clear log" +msgstr "Log wiskje" + +msgid "Close" +msgstr "Slúte" + +msgid "Code rate high" +msgstr "Kode faasje heech" + +msgid "Code rate low" +msgstr "Kode faasje leech" + +msgid "Coderate HP" +msgstr "Kode faasje HP" + +msgid "Coderate LP" +msgstr "Kode faasje LP" + +msgid "Collection name" +msgstr "Kolleksje namme" + +msgid "Collection settings" +msgstr "Kolleksje ynstellingen" + +msgid "Color Format" +msgstr "Kleur formaat" + +msgid "Command execution..." +msgstr "Kommando útfiere" + +msgid "Command order" +msgstr "Kommando folgoarde" + +msgid "Committed DiSEqC command" +msgstr "Oanwizen DiSEqC kommando" + +msgid "Common Interface" +msgstr "Common Interface" + +msgid "Compact Flash" +msgstr "Compact flash" + +msgid "Compact flash card" +msgstr "Compact flash kaart" + +msgid "Complete" +msgstr "Kompleet" + +msgid "Complex (allows mixing audio tracks and aspects)" +msgstr "" + +msgid "Configuration Mode" +msgstr "Ynstellingen modus" + +msgid "Configuring" +msgstr "Oan it ynstellen" + +msgid "Conflicting timer" +msgstr "Tiidsbarren konflikt" + +msgid "Connected to" +msgstr "Ferbûn mei" + +msgid "Connected to Fritz!Box!" +msgstr "Ferbûn mei Fritz!Box!" + +msgid "Connecting to Fritz!Box..." +msgstr "Ferbine mei Fritz!Box..." + +#, python-format +msgid "" +"Connection to Fritz!Box\n" +"failed! (%s)\n" +"retrying..." +msgstr "" +"Ferbine mei Fritz!Box\n" +"mislearre ! (%s)\n" +"Besykje opnei ..." + +msgid "Constellation" +msgstr "Himmel" + +msgid "Content does not fit on DVD!" +msgstr "Ynhald past net op in DVD !" + +msgid "Continue in background" +msgstr "Fjierder gean yn 'e eftergrûn" + +msgid "Continue playing" +msgstr "Kontinu spielje" + +msgid "Contrast" +msgstr "Kontrast" + +msgid "Could not connect to Dreambox .NFI Image Feed Server:" +msgstr "Kin net ferbine mei Dreambox .NFI Image feed server:" + +msgid "Could not load Medium! No disc inserted?" +msgstr "Koe medium net lade ! Is der wol in disc oanwezig ?" + +msgid "Create DVD-ISO" +msgstr "Meitsje DVD-ISO" + +msgid "Create movie folder failed" +msgstr "Meitjse fan film map mislearre" + +#, python-format +msgid "Creating directory %s failed." +msgstr "Meitjse fan map %s is mislearre" + +msgid "Creating partition failed" +msgstr "Meitsjen fan partisje is mislearre" + +msgid "Croatian" +msgstr "Kroatysk" + +msgid "Current Transponder" +msgstr "Hjoeddeiske Transponder" + +msgid "Current settings:" +msgstr "Hjoeddeiske ynstellingen:" + +msgid "Current version:" +msgstr "Hjoeddeiske ferzje :" + +msgid "Custom skip time for '1'/'3'-keys" +msgstr "Brûker spring tiid foar knoppen 1-3" + +msgid "Custom skip time for '4'/'6'-keys" +msgstr "Brûker spring tiid foar knoppen 4-6" + +msgid "Custom skip time for '7'/'9'-keys" +msgstr "Brûker spring tiid foar knoppen 7-9" + +msgid "Customize" +msgstr "Oanpasse" + +msgid "Cut" +msgstr "Knip" + +msgid "Cutlist editor..." +msgstr "Kniplyst bewurker..." + +msgid "Czech" +msgstr "Tsjechysk" + +msgid "D" +msgstr "D" + +msgid "DHCP" +msgstr "DHCP" + +msgid "DVB-S" +msgstr "DVB-S" + +msgid "DVB-S2" +msgstr "DVB-S2" + +msgid "DVD Player" +msgstr "DVD Spieler" + +msgid "DVD media toolbox" +msgstr "DVD media arkbak" + +msgid "Danish" +msgstr "Deensk" + +msgid "Date" +msgstr "Datum" + +msgid "Deep Standby" +msgstr "Sliip stand" + +msgid "Default services lists" +msgstr "Standert ynstellingen lysten" + +msgid "Default settings" +msgstr "Standert ynstellingen" + +msgid "Delay" +msgstr "Fertraging" + +msgid "Delete" +msgstr "Ferwiderje" + +msgid "Delete entry" +msgstr "Ferwiderje ynfier" + +msgid "Delete failed!" +msgstr "Ferwiderjen mislearre!" + +#, python-format +msgid "" +"Delete no more configured satellite\n" +"%s?" +msgstr "" +"Ferwiderje de net brûkte satellyt\n" +"%s?" + +msgid "Description" +msgstr "Beskriuwing" + +msgid "Destination directory" +msgstr "Doel Directory" + +msgid "Detected HDD:" +msgstr "Fûne hurde skiif:" + +msgid "Detected NIMs:" +msgstr "Fûne Tuners:" + +msgid "DiSEqC" +msgstr "DiSEqC" + +msgid "DiSEqC A/B" +msgstr "DiSEqC A/B" + +msgid "DiSEqC A/B/C/D" +msgstr "DiSEqC A/B/C/D" + +msgid "DiSEqC mode" +msgstr "DiSEqC-Mode" + +msgid "DiSEqC repeats" +msgstr "DiSEqC herhellingen" + +msgid "Direct playback of linked titles without menu" +msgstr "Direkt ôfspielje fan keppele titels sûnder menu" + +#, python-format +msgid "Directory %s nonexistent." +msgstr "Map %s bestiit net" + +msgid "Disable" +msgstr "Utskeakelje" + +msgid "Disable Picture in Picture" +msgstr "PIP utskeakelje" + +msgid "Disable Subtitles" +msgstr "Undertitels út" + +msgid "Disable timer" +msgstr "Tiidstjoering útskeakelje" + +msgid "Disabled" +msgstr "Utskeakele" + +#, python-format +msgid "" +"Disconnected from\n" +"Fritz!Box! (%s)\n" +"retrying..." +msgstr "" +"Ferbining ferbrutsen mei\n" +"Fritz!Box! (%s)\n" +"besyket nochris..." + +msgid "Dish" +msgstr "Panne" + +msgid "Display 16:9 content as" +msgstr "16:9 ynhâld sjen litte as" + +msgid "Display 4:3 content as" +msgstr "4:3 ynhâld sjen litte as" + +msgid "Display Setup" +msgstr "Ynstellingen sjen litte" + +#, python-format +msgid "" +"Do you really want to REMOVE\n" +"the plugin \"%s\"?" +msgstr "Wolle jo wier de plugin \"%s\" ferwiderje ?" + +msgid "" +"Do you really want to check the filesystem?\n" +"This could take lots of time!" +msgstr "Wolle jo echt it bestânsysteem neisjen ?
Dit kin lang duorje !" + +#, python-format +msgid "Do you really want to delete %s?" +msgstr "Wolle jo wier %s ferwiderje?" + +#, python-format +msgid "" +"Do you really want to download\n" +"the plugin \"%s\"?" +msgstr "Wolle jo wier de plugin \"%s\" binnenhelje ?" + +msgid "" +"Do you really want to initialize the harddisk?\n" +"All data on the disk will be lost!" +msgstr "" + +#, python-format +msgid "Do you really want to remove directory %s from the disk?" +msgstr "Wolle jo echt map %s ferwiderje van skiif ?" + +#, python-format +msgid "Do you really want to remove your bookmark of %s?" +msgstr "Wolle jo echt boekmerk fan %s ferwiderje ?" + +msgid "" +"Do you want to backup now?\n" +"After pressing OK, please wait!" +msgstr "" +"Wolle jo no in backup meitsje?\n" +"Nei OK, eefkes wachtsje" + +msgid "Do you want to burn this collection to DVD medium?" +msgstr "Wolle jo dizze kolleksje nei DVD brâne ?" + +msgid "Do you want to do a service scan?" +msgstr "Wolle jo no nei kanalen sykje ?" + +msgid "Do you want to do another manual service scan?" +msgstr "Wolle jo opnei mei de hân sykje ?" + +msgid "Do you want to enable the parental control feature on your dreambox?" +msgstr "Wolle jo it berne slot ynskeakelje ?" + +msgid "Do you want to install default sat lists?" +msgstr "Wolle jo de standert sat lysten installearje ?" + +msgid "Do you want to play DVD in drive?" +msgstr "Wolle jo de DVD ôfspielje ?" + +msgid "Do you want to preview this DVD before burning?" +msgstr "Wolle jo de DVD besjen foar it brânen ?" + +msgid "Do you want to restore your settings?" +msgstr "Wolle jo jo ynstellingen wêrom sette ?" + +msgid "Do you want to resume this playback?" +msgstr "Wolle jo dit opnimmen fjierder ôfspielje ?" + +msgid "" +"Do you want to update your Dreambox?\n" +"After pressing OK, please wait!" +msgstr "" +"Wolle jo jo dreambox bywurkje ?\n" +"Nei Ok, eefkes geduld !" + +msgid "Do you want to view a tutorial?" +msgstr "Wolle jo in foarbyld sjen ?" + +msgid "Don't stop current event but disable coming events" +msgstr "Dit barren net stopje, maar oankommende barren útskeakelje" + +#, python-format +msgid "Done - Installed or upgraded %d packages" +msgstr "Dien - %d paket(ten) ynstalllearre of bywurke" + +#, python-format +msgid "Done - Installed or upgraded %d packages with %d errors" +msgstr "Klear - %d paket(ten) ynstallearre of bywurke mei %d flaters" + +msgid "Download" +msgstr "Binnenhelje" + +msgid "Download .NFI-Files for USB-Flasher" +msgstr "Binnenhelje fan .NFI triemen foar USB Flasher" + +msgid "Download Plugins" +msgstr "Ynstekkers binnenhelje" + +msgid "Download of USB flasher boot image failed: " +msgstr "Binnenhelje fan USB boot image misljearre:" + +msgid "Downloadable new plugins" +msgstr "Binnen te heljen nije ynstekkers" + +msgid "Downloadable plugins" +msgstr "Binnen te heljen ynstekkers" + +msgid "Downloading" +msgstr "Binnenheljen fan" + +msgid "Downloading plugin information. Please wait..." +msgstr "Binnenheljen fan ynstekker ynformaasje..." + +msgid "Dreambox format data DVD (HDTV compatible)" +msgstr "Dreambox yndieling data DVD (HDTV geskikt)" + +msgid "Dutch" +msgstr "Nederlansk" + +msgid "E" +msgstr "E" + +msgid "EPG Selection" +msgstr "EPG Seleksje" + +#, python-format +msgid "ERROR - failed to scan (%s)!" +msgstr "Flater - Sykjen mislearre (%s)!" + +msgid "East" +msgstr "East" + +msgid "Edit" +msgstr "" + +msgid "Edit DNS" +msgstr "Wyzigje de DNS" + +msgid "Edit Title" +msgstr "" + +msgid "Edit chapters of current title" +msgstr "Bewurkje haadstik fan dizze titel" + +msgid "Edit services list" +msgstr "Wyzigje kanaallyst" + +msgid "Edit settings" +msgstr "Wyzigje ynstellingen" + +msgid "Edit the Nameserver configuration of your Dreambox.\n" +msgstr "Bewrukje de nammeserver ynstellingen fan de Dreambox.\n" + +msgid "Edit the network configuration of your Dreambox.\n" +msgstr "Bewurkje de netwurk ynstellingen fan de Dreambox.\n" + +msgid "Edit title" +msgstr "Bewukje titel" + +msgid "Electronic Program Guide" +msgstr "Elektroniske Programma Gids" + +msgid "Enable" +msgstr "Ynskeakelje" + +msgid "Enable 5V for active antenna" +msgstr "5V ynskeakelje foar hjoeddeiske antenne" + +msgid "Enable multiple bouquets" +msgstr "Mear boeketten sjen litte" + +msgid "Enable parental control" +msgstr "Alderlik tasjoch ynskeakelje" + +msgid "Enable timer" +msgstr "Tiidsjtoering ynskeakelje" + +msgid "Enabled" +msgstr "Ynskeakele" + +msgid "Encryption" +msgstr "Encryption" + +msgid "Encryption Key" +msgstr "Encryption Kaai" + +msgid "Encryption Keytype" +msgstr "" + +msgid "Encryption Type" +msgstr "Encryption Type" + +msgid "End time" +msgstr "Eintiid" + +msgid "EndTime" +msgstr "Eintiid" + +msgid "English" +msgstr "Engelsk" + +msgid "" +"Enigma2 Skinselector v0.5 BETA\n" +"\n" +"If you experience any problems please contact\n" +"stephan@reichholf.net\n" +"\n" +"© 2006 - Stephan Reichholf" +msgstr "" +"Enigma2 Skinselector v0.5 BETA\n" +"\n" +"Ot jo problemen hawwe, kinne jo stephan@reichholf.net\n" +"probearje te beriken\n" +"© 2006 - Stephan Reichholf" + +#. TRANSLATORS: Note that "Enter" in the two strings below should *not* +#. be interpreted as "Give speed as input". The intended meaning is +#. instead "Initial speed when starting winding", i.e. the speed at +#. which "winding mode" is entered when first pressing "rewind" or +#. "fast forward". +msgid "Enter Fast Forward at speed" +msgstr "Ynjefte rap foarút by faasje" + +msgid "Enter Rewind at speed" +msgstr "Ynjefte rap efterút by faasje" + +msgid "Enter WLAN network name/SSID:" +msgstr "" + +msgid "Enter WLAN passphrase/key:" +msgstr "" + +msgid "Enter main menu..." +msgstr "Nei it haadmenu..." + +msgid "Enter the service pin" +msgstr "Fier de service pin yn" + +msgid "Error" +msgstr "Flater" + +msgid "Error executing plugin" +msgstr "Flater by útfieren fan ynstekker" + +#, python-format +msgid "" +"Error: %s\n" +"Retry?" +msgstr "" +"Flater: %s\n" +"Opnei ?" + +msgid "Eventview" +msgstr "Barren oersjoch" + +msgid "Everything is fine" +msgstr "Alles is goed" + +msgid "Execution Progress:" +msgstr "Utfieren foarutgong:" + +msgid "Execution finished!!" +msgstr "Utfiering klear.." + +msgid "Exif" +msgstr "" + +msgid "Exit" +msgstr "ofslúte" + +msgid "Exit editor" +msgstr "Bewurker ofslúte" + +msgid "Exit the wizard" +msgstr "De gucheler ofslúte" + +msgid "Exit wizard" +msgstr "Gucheler ofslúte" + +msgid "Expert" +msgstr "Avansearre" + +msgid "Extended Networksetup Plugin..." +msgstr "Utwreide Netwurkynstellingen Ynstekker..." + +msgid "Extended Setup..." +msgstr "Utwreide Ynstellingen..." + +msgid "Extensions" +msgstr "Utwreidingen" + +msgid "FEC" +msgstr "FEC" + +msgid "Factory reset" +msgstr "Fabryks ynstellingen" + +msgid "Failed" +msgstr "mislearre" + +msgid "Fast" +msgstr "Rap" + +msgid "Fast DiSEqC" +msgstr "Rappe DiSEqC" + +msgid "Fast Forward speeds" +msgstr "Rap foarút faasje" + +msgid "Fast epoch" +msgstr "Snelle epoch" + +msgid "Favourites" +msgstr "Favoryten" + +msgid "Filesystem Check..." +msgstr "Bestânsysteem Neisjen..." + +msgid "Filesystem contains uncorrectable errors" +msgstr "It bestânsysteem hat grutte flaters" + +msgid "Finetune" +msgstr "Fyn ôfstemme" + +msgid "Finished" +msgstr "Ofrûn" + +msgid "Finished configuring your network" +msgstr "" + +msgid "Finished restarting your network" +msgstr "" + +msgid "Finnish" +msgstr "Finsk" + +msgid "" +"First we need to download the latest boot environment for the USB flasher." +msgstr "" +"Earst moat de lêste opstart triemen binnenhelle wurde foar de USB flasher." + +msgid "Flash" +msgstr "Flash" + +msgid "Flashing failed" +msgstr "Flashen misljearre" + +msgid "Font size" +msgstr "Font grutte" + +msgid "Format" +msgstr "Formaat" + +msgid "Frame repeat count during non-smooth winding" +msgstr "Byld herhelling by net glêd foar/efterút spielen" + +msgid "Frame size in full view" +msgstr "" + +msgid "French" +msgstr "Frans" + +msgid "Frequency" +msgstr "Frekwinsje" + +msgid "Frequency bands" +msgstr "Frekwinsje bânnen" + +msgid "Frequency scan step size(khz)" +msgstr "Frekwinsje sykjen stap grutte(kHz)" + +msgid "Frequency steps" +msgstr "Oantal Frekwinsje stappen" + +msgid "Fri" +msgstr "Fre" + +msgid "Friday" +msgstr "Freed" + +msgid "Frisian" +msgstr "" + +msgid "Fritz!Box FON IP address" +msgstr "Fritz!Box FON IP adres" + +#, python-format +msgid "Frontprocessor version: %d" +msgstr "Foarprocessor ferzje: %d" + +msgid "Fsck failed" +msgstr "mislearre fsck" + +msgid "Function not yet implemented" +msgstr "Nog net ynbouwde funksje" + +msgid "" +"GUI needs a restart to apply a new skin\n" +"Do you want to Restart the GUI now?" +msgstr "" +"De GUI moat opnij starte fan wege de nije skin\n" +"Wolle jo de GUI no opnei starte ?" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Genre:" +msgstr "Sjenre:" + +msgid "German" +msgstr "Dúts" + +msgid "Getting plugin information. Please wait..." +msgstr "Binnenhelje fan ynstekker ynformaasje...." + +msgid "Goto 0" +msgstr "Gjin nei 0" + +msgid "Goto position" +msgstr "Gjin nei posysje" + +msgid "Graphical Multi EPG" +msgstr "Grafyske Multi EPG" + +msgid "Greek" +msgstr "Gryks" + +msgid "Guard Interval" +msgstr "ynterfal yn 'e gaten halde" + +msgid "Guard interval mode" +msgstr "Ynterfal modus yn 'e gaten halde" + +msgid "Harddisk" +msgstr "Hurde skiif" + +msgid "Harddisk setup" +msgstr "Hurde skiif ynstellingen" + +msgid "Harddisk standby after" +msgstr "Hurde skiif yn sliipstand nei" + +msgid "Hidden network SSID" +msgstr "" + +msgid "Hierarchy Information" +msgstr "Hiërarchie Ynformaasje" + +msgid "Hierarchy mode" +msgstr "Hiërarchie mode" + +msgid "How many minutes do you want to record?" +msgstr "Hoe folle minuten wolle jo opnimme?" + +msgid "Hungarian" +msgstr "Hongaarsk" + +msgid "IP Address" +msgstr "IP Adres" + +msgid "ISO file is too large for this filesystem!" +msgstr "" + +msgid "ISO path" +msgstr "ISO paad" + +msgid "Icelandic" +msgstr "Iislansk" + +msgid "If you can see this page, please press OK." +msgstr "Kinne dizze side sjen, druk dan op OK" + +msgid "" +"If you see this, something is wrong with\n" +"your scart connection. Press OK to return." +msgstr "" +"Ot jo dit leze, is der iets raar skeef mei\n" +"jo skart oansluting. Druk OK om werom te gean." + +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 you are happy with the result, press OK." +msgstr "" +"Skeakelje in helderens of kontrast ferbettering op jo TV út. Is der iets mei " +"de namme \"dynamysk\", set it nei standert. Set it eftergrûn helderens nivo " +"nei jo eigen smaak. Set it konstrast sa leech mooglik op jo TV.\n" +"Dan, set it helderens nivo sa leech as mooglik, mar soargje dat de twa " +"leechste griistinten krek anwêzig bliuwe\n" +"Meitsje jo net drok om de helderenstinten no. Die komme werom yn de folgende " +"stap\n" +"Binne jo tefreden mei it resultaat, druk OK" + +msgid "Image flash utility" +msgstr "Image flash ark" + +msgid "Image-Upgrade" +msgstr "Byld-bywurkje" + +msgid "In Progress" +msgstr "Dwaande" + +msgid "" +"In order to record a timer, the TV was switched to the recording service!\n" +msgstr "Op in barren op te nimmen, wurd de TV nei opnimmen skeakele!\n" + +msgid "Increased voltage" +msgstr "Ferheeche spanning" + +msgid "Index" +msgstr "Yndex" + +msgid "InfoBar" +msgstr "Ynfobalke" + +msgid "Infobar timeout" +msgstr "Ynfobalke tiid" + +msgid "Information" +msgstr "Ynformaasje" + +msgid "Init" +msgstr "Initialisearje" + +msgid "Initialization..." +msgstr "Formattearje..." + +msgid "Initialize" +msgstr "Formattearje HDD" + +msgid "Initializing Harddisk..." +msgstr "" + +msgid "Input" +msgstr "Ynfier" + +msgid "Installing" +msgstr "Oan it ynstallearjen" + +msgid "Installing Software..." +msgstr "Software oan it ynstallearjen..." + +msgid "Installing default sat lists... Please wait..." +msgstr "Standert sat lyst oan it ynstalearjen... " + +msgid "Installing defaults... Please wait..." +msgstr "Standert waarden an it ynstellen..." + +msgid "Installing package content... Please wait..." +msgstr "Pakket ynhald an it ynstallearjen... Eefkes wachtsje" + +msgid "Instant Record..." +msgstr "In direct opnimmen..." + +msgid "Integrated Ethernet" +msgstr "Integreerd Ethernet" + +msgid "Integrated Wireless" +msgstr "Integreerd Triidloas" + +msgid "Intermediate" +msgstr "Yntermediate" + +msgid "Internal Flash" +msgstr "Ynterne Flash" + +msgid "Invalid Location" +msgstr "Plak net tastien" + +#, python-format +msgid "Invalid directory selected: %s" +msgstr "Unjildige map selektearre: %s" + +msgid "Inversion" +msgstr "Infertearring" + +msgid "Invert display" +msgstr "Infertearje LCD" + +msgid "Italian" +msgstr "Italiaansk" + +msgid "Job View" +msgstr "Opdracht oansjoch" + +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect) +msgid "Just Scale" +msgstr "Alinne skale" + +msgid "Keyboard Map" +msgstr "Toetseboerd Map" + +msgid "Keyboard Setup" +msgstr "Toetseboerd Ynstellingen" + +msgid "Keymap" +msgstr "Toetsebord yndieling" + +msgid "LAN Adapter" +msgstr "LAN oanslúting" + +msgid "LNB" +msgstr "LNB" + +msgid "LOF" +msgstr "LOF" + +msgid "LOF/H" +msgstr "LOF/H" + +msgid "LOF/L" +msgstr "LOF/L" + +msgid "Language selection" +msgstr "Taal Kieze" + +msgid "Language..." +msgstr "Taal..." + +msgid "Last speed" +msgstr "Lêste faasje" + +msgid "Latitude" +msgstr "Bridtegraad" + +msgid "Leave DVD Player?" +msgstr "DVD Spieler ôfslúte ?" + +msgid "Left" +msgstr "Links" + +#. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term. +msgid "Letterbox" +msgstr "Letterbox" + +msgid "Limit east" +msgstr "Limyt east" + +msgid "Limit west" +msgstr "Limyt west" + +msgid "Limits off" +msgstr "Limyten út" + +msgid "Limits on" +msgstr "Limyt oan" + +msgid "Link:" +msgstr "Link:" + +msgid "Linked titles with a DVD menu" +msgstr "Keppele titels mei in DVD menu" + +msgid "List of Storage Devices" +msgstr "Lyst Opslach Apparatuur" + +msgid "Lithuanian" +msgstr "Lithuaniansk" + +msgid "Load" +msgstr "Laad" + +msgid "Load Length of Movies in Movielist" +msgstr "Laad lengte fan films yn filmlyst" + +msgid "Local Network" +msgstr "Lokaal netwurk" + +msgid "Location" +msgstr "Doel" + +msgid "Lock:" +msgstr "Slot:" + +msgid "Long Keypress" +msgstr "Lang taste yndrukken" + +msgid "Longitude" +msgstr "Lingtegraad" + +msgid "MMC Card" +msgstr "MMC kaart" + +msgid "MORE" +msgstr "MEER" + +msgid "Main menu" +msgstr "Haad menu" + +msgid "Mainmenu" +msgstr "HaadMenu" + +msgid "Make this mark an 'in' point" +msgstr "Markeer dit as in 'yn' punt" + +msgid "Make this mark an 'out' point" +msgstr "Markeer dit as in 'út' punt" + +msgid "Make this mark just a mark" +msgstr "Meitsje dit in gewoan markeer punt" + +msgid "Manual Scan" +msgstr "Hanmatig sykje" + +msgid "Manual transponder" +msgstr "Hanmatige transponder" + +msgid "Margin after record" +msgstr "Extra tiid nei by it opnimmen" + +msgid "Margin before record (minutes)" +msgstr "Extra tiid foar by it opnimmen" + +msgid "Media player" +msgstr "Media Spieler" + +msgid "MediaPlayer" +msgstr "MediaSpieler" + +msgid "Medium is not a writeable DVD!" +msgstr "Medium is net in skriuwbêre DVD!" + +msgid "Medium is not empty!" +msgstr "Medium is net leech!" + +msgid "Menu" +msgstr "Menu" + +msgid "Message" +msgstr "Berjocht" + +msgid "Mkfs failed" +msgstr "Mkfs mislearre" + +msgid "Mode" +msgstr "Moadus" + +msgid "Model: " +msgstr "Model: " + +msgid "Modulation" +msgstr "Modulaasje" + +msgid "Modulator" +msgstr "Modulator" + +msgid "Mon" +msgstr "Moan" + +msgid "Mon-Fri" +msgstr "Moan - Fre" + +msgid "Monday" +msgstr "Moandei" + +msgid "Mount failed" +msgstr "Oankeppeljen mislearre" + +msgid "Move Picture in Picture" +msgstr "Ferpleats Byld yn Byld" + +msgid "Move east" +msgstr "Draai nei east" + +msgid "Move west" +msgstr "Draai nei west" + +msgid "Movielist menu" +msgstr "Filmlyst menu" + +msgid "Multi EPG" +msgstr "Multi EPG" + +msgid "Multiple service support" +msgstr "Kin meardere utstjoeringen oan" + +msgid "Multisat" +msgstr "Multisat" + +msgid "Mute" +msgstr "Mute" + +msgid "N/A" +msgstr "Net oanwêzig" + +msgid "NEXT" +msgstr "Folgende" + +msgid "NFI image flashing completed. Press Yellow to Reboot!" +msgstr "NFI image flashen is klear. Druk giel om nei te starten!" + +msgid "NOW" +msgstr "No" + +msgid "NTSC" +msgstr "NTSC" + +msgid "Name" +msgstr "Namme" + +msgid "Nameserver" +msgstr "Nammeserver" + +#, python-format +msgid "Nameserver %d" +msgstr "Nammeserver %d" + +msgid "Nameserver Setup" +msgstr "Nammeserver Ynstellingen" + +msgid "Nameserver settings" +msgstr "Nammeserver ynstellingen" + +msgid "Netmask" +msgstr "Netmasker" + +msgid "Network Configuration..." +msgstr "Netwurk configuraasje" + +msgid "Network Mount" +msgstr "Netwurk oankeppelingen" + +msgid "Network SSID" +msgstr "Netwurk SSID" + +msgid "Network Setup" +msgstr "Netwurk Ynstellingen" + +msgid "Network scan" +msgstr "Netwurk ôfsykje" + +msgid "Network setup" +msgstr "Netwurk ynstellingen" + +msgid "Network test" +msgstr "Netwurk test" + +msgid "Network test..." +msgstr "Netwurk test..." + +msgid "Network..." +msgstr "Netwurk..." + +msgid "Network:" +msgstr "Netwurk:" + +msgid "NetworkWizard" +msgstr "Netwurk gûcheler" + +msgid "New" +msgstr "Nij" + +msgid "New pin" +msgstr "Nije pin" + +msgid "New version:" +msgstr "Nije ferzje:" + +msgid "Next" +msgstr "Folgende" + +msgid "No" +msgstr "Nee" + +msgid "No (supported) DVDROM found!" +msgstr "Gjin (ondersteunde) DVDROM fûn!" + +msgid "No 50 Hz, sorry. :(" +msgstr "Gjin 50 Hz, sorry. :(" + +msgid "No HDD found or HDD not initialized!" +msgstr "Gjin hurde skiif fûn of HDD net formatearre!" + +msgid "No Networks found" +msgstr "" + +msgid "No backup needed" +msgstr "Gjin backup nedich" + +msgid "" +"No data on transponder!\n" +"(Timeout reading PAT)" +msgstr "" +"Gjin data op transponder\n" +"(tiid fan lêzen PAT)" + +msgid "No details for this image file" +msgstr "Gjin details beskikber foar dit image triem" + +msgid "No event info found, recording indefinitely." +msgstr "Gjin barren ynfo fûn, giit foar altiid troch mei opnimmen.." + +msgid "No free tuner!" +msgstr "Gjin tuner oer" + +msgid "" +"No packages were upgraded yet. So you can check your network and try again." +msgstr "Pakketten bin net bywurke. Besjoch it netwurk en besykje opnei." + +msgid "No picture on TV? Press EXIT and retry." +msgstr "Gjin plaatsje op TV? Druk EXIT en probearje opnei" + +msgid "No positioner capable frontend found." +msgstr "Gjin posysjesyker foarein fûn." + +msgid "No satellite frontend found!!" +msgstr "Gjin sattelyt foarein fûn." + +msgid "No tags are set on these movies." +msgstr "" + +msgid "No tuner is configured for use with a diseqc positioner!" +msgstr "Der is gjin tuner ynsteld foar gebrûk mei in diseqc posysje syker!" + +msgid "" +"No tuner is enabled!\n" +"Please setup your tuner settings before you start a service scan." +msgstr "" +"Gjin tuner aktief!\n" +"Stel dizze earst yn foar jo kanalen sykje kinne." + +msgid "No useable USB stick found" +msgstr "Gjin brûkbere USB stick fûn" + +msgid "" +"No valid service PIN found!\n" +"Do you like to change the service PIN now?\n" +"When you say 'No' here the service protection stay disabled!" +msgstr "" +"Gjin jildige service PIN fûn !\n" +"Wolle jo dizze no ynstelle ?\n" +"By 'nee' wurd de service befeiliging útskeakele !" + +msgid "" +"No valid setup PIN found!\n" +"Do you like to change the setup PIN now?\n" +"When you say 'No' here the setup protection stay disabled!" +msgstr "" +"Gjin jildige ynstellingen PIN fûn !\n" +"Wolle jo dizze no ynstelle ?\n" +"By 'nee' wurd de ynstellingen befeiliging útskeakele !" + +msgid "" +"No working local network adapter found.\n" +"Please verify that you have attached a network cable and your network is " +"configured correctly." +msgstr "" + +msgid "" +"No working wireless network adapter found.\n" +"Please verify that you have attached a compatible WLAN device and your " +"network is configured correctly." +msgstr "" + +msgid "" +"No working wireless network interface found.\n" +" Please verify that you have attached a compatible WLAN device or enable " +"your local network interface." +msgstr "" + +msgid "No, but restart from begin" +msgstr "Nee, mar start fanôf it begjin" + +msgid "No, do nothing." +msgstr "Nee, doch neat.." + +msgid "No, just start my dreambox" +msgstr "Nee, allinne myn box starte" + +msgid "No, scan later manually" +msgstr "Nee, letter mei de hân sykje" + +msgid "None" +msgstr "Gjin" + +#. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right) +msgid "Nonlinear" +msgstr "Net lineair" + +msgid "North" +msgstr "Noard" + +msgid "Norwegian" +msgstr "Noarsk" + +#, python-format +msgid "" +"Not enough diskspace. Please free up some diskspace and try again. (%d MB " +"required, %d MB available)" +msgstr "" +"Net genôch diskrûmte. Rûmje wat rotzooi op en besykje opnei. (%d MB nedich, %" +"d oanwêzich)" + +msgid "" +"Nothing to scan!\n" +"Please setup your tuner settings before you start a service scan." +msgstr "" +"Neat te sykjen\n" +"Earst de tuner ynstellingen dwaan, foar jo senders sykje kinne." + +msgid "Now Playing" +msgstr "No oan it ôfspieljen" + +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 "" +"No, feroare it helderens nivo en set it sa heech, mar wêz seker dat jo " +"altiid nog it ferskil sjogge tusken de twa helderste skaadnivos.Binne jo " +"klear, druk OK" + +msgid "OK" +msgstr "Ok" + +msgid "OK, guide me through the upgrade process" +msgstr "Ok, rin troch it bywurkjen proces" + +msgid "OSD Settings" +msgstr "OSD-ynstellingen" + +msgid "OSD visibility" +msgstr "OSD sichtberhiid" + +msgid "Off" +msgstr "Ut" + +msgid "On" +msgstr "Oan" + +msgid "One" +msgstr "Ien" + +msgid "Online-Upgrade" +msgstr "Online-Bywurkje" + +msgid "Only Free scan" +msgstr "Allinne Freie útstjoeringen" + +msgid "Orbital Position" +msgstr "Rumtelyke posisje" + +msgid "PAL" +msgstr "PAL" + +msgid "PIDs" +msgstr "PIDs" + +msgid "Package list update" +msgstr "Bywurkje pakketlyst " + +msgid "Packet management" +msgstr "Pakket beheer" + +msgid "Page" +msgstr "Side" + +#. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term +msgid "Pan&Scan" +msgstr "Pan&Scan" + +msgid "Parent Directory" +msgstr "Boppelizzende map" + +msgid "Parental control" +msgstr "Alderlik tasjoch" + +msgid "Parental control services Editor" +msgstr "Alderlik tasjoch bewurker" + +msgid "Parental control setup" +msgstr "Alderlik tasjoch" + +msgid "Parental control type" +msgstr "Alderlik tasjoch type" + +msgid "Pause movie at end" +msgstr "Film op pause by ein" + +msgid "PiPSetup" +msgstr "PIP Ynstellingen" + +msgid "PicturePlayer" +msgstr "" + +#. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. +msgid "Pillarbox" +msgstr "Pillar box" + +msgid "Pilot" +msgstr "Pilot" + +msgid "Pin code needed" +msgstr "Pinkode is needich" + +msgid "Play" +msgstr "Ofspylje" + +msgid "Play Audio-CD..." +msgstr "Ofspylje fan Audio-CD..." + +msgid "Play recorded movies..." +msgstr "Opname films ôfspielje..." + +msgid "Please Reboot" +msgstr "Start Dreambox opnei" + +msgid "Please Select Medium to be Scanned" +msgstr "Graach Medium kieze om ôf te sykjen" + +msgid "Please change recording endtime" +msgstr "Graach eintiid fan it opnimmen feroarje." + +msgid "Please check your network settings!" +msgstr "Graach netwurk ynstellingen neisjen!" + +msgid "Please choose .NFI image file from feed server to download" +msgstr "Graach .NFI image triem kize fan feed server om binnen te heljen" + +msgid "Please choose an extension..." +msgstr "Kies in uitbreiding..." + +msgid "Please choose he package..." +msgstr "Kies it pakket..." + +msgid "Please choose the default services lists you want to install." +msgstr "Kies de standert lysts, welk jo ynstallearje wolle." + +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!" +msgstr "Feroarje gjin waarden, wannear jo net witte wat jo dogge!" + +msgid "Please enter a name for the new bouquet" +msgstr "Namme ynjefte foar it nije bouquet" + +msgid "Please enter a name for the new marker" +msgstr "Namme ynjefte foar in nije markering" + +msgid "Please enter a new filename" +msgstr "Jou in nije bestânnamme yn" + +msgid "Please enter filename (empty = use current date)" +msgstr "Jou in triemnamme yn (leech = datum fan hjoed)" + +msgid "Please enter name of the new directory" +msgstr "Jou in namme yn foar de nije map" + +msgid "Please enter the correct pin code" +msgstr "Graach de júste pinkode yn jaan" + +msgid "Please enter the old pin code" +msgstr "De âlde pinkode graach yn jaan" + +msgid "Please follow the instructions on the TV" +msgstr "Folgje de ynstruksjes op TV" + +msgid "" +"Please note that the previously selected media could not be accessed and " +"therefore the default directory is being used instead." +msgstr "" +"Tink der om dat de foarige selektearre media net oansprutsen wurde koe, en " +"dêrom de standert map brûkt wurd." + +msgid "Please press OK to continue." +msgstr "Druk OK om fierder te gean." + +msgid "Please press OK!" +msgstr "Druk Ok!" + +msgid "Please select .NFI flash image file from medium" +msgstr "Selektearje in .NFI flash image triem fan medium" + +msgid "Please select a playlist to delete..." +msgstr "Selektearje in ofspiellyst om te ferwiderjen..." + +msgid "Please select a playlist..." +msgstr "Selektearje in ofspiellyst" + +msgid "Please select a subservice to record..." +msgstr "Jou in undersender op, om op te nimmen." + +msgid "Please select a subservice..." +msgstr "Selektearje in undersender..." + +msgid "Please select tag to filter..." +msgstr "" + +msgid "Please select target directory or medium" +msgstr "Selektearje doel map of medium" + +msgid "Please select the movie path..." +msgstr "Selektearje it paad nei de film" + +msgid "Please set up tuner B" +msgstr "ynstelle fan tuner B" + +msgid "Please set up tuner C" +msgstr "ynstelle fan tuner C" + +msgid "Please set up tuner D" +msgstr "ynstelle fan tuner D" + +msgid "" +"Please use direction keys to move the PiP window.\n" +"Press Bouquet +/- to resize the window.\n" +"Press OK to go back to the TV mode or EXIT to cancel the moving." +msgstr "" +"Pylkje knoppen om BIB finster te ferskowen.\n" +"Druk Bouquet +/- om finstergrutte te feroarjen" + +msgid "" +"Please use the UP and DOWN keys to select your language. Afterwards press " +"the OK button." +msgstr "Brúk de op en del toets om jo taal te kiezen. Dernei druk op OK" + +msgid "Please wait for activation of your network configuration..." +msgstr "" + +msgid "Please wait while we configure your network..." +msgstr "" + +msgid "Please wait while your network is restarting..." +msgstr "" + +msgid "Please wait..." +msgstr "" + +msgid "Please wait... Loading list..." +msgstr "Lyst wurd laden..." + +msgid "Plugin browser" +msgstr "Ynstekker browser" + +msgid "Plugins" +msgstr "Ynstekkers" + +msgid "Polarity" +msgstr "Polariteit" + +msgid "Polarization" +msgstr "Polarisaasje" + +msgid "Polish" +msgstr "Poolsk" + +msgid "Port A" +msgstr "Poort A" + +msgid "Port B" +msgstr "Poort B" + +msgid "Port C" +msgstr "Poort C" + +msgid "Port D" +msgstr "Poort D" + +msgid "Portuguese" +msgstr "Portugeesk" + +msgid "Positioner" +msgstr "Rotor" + +msgid "Positioner fine movement" +msgstr "Fyn ôfstelling rotor" + +msgid "Positioner movement" +msgstr "Rotor beweging" + +msgid "Positioner setup" +msgstr "Rotor ynstellingen" + +msgid "Positioner storage" +msgstr "Rotor positie opslach" + +msgid "Power threshold in mA" +msgstr "Stroom nivo yn mA" + +msgid "Predefined transponder" +msgstr "Foarôf ynstelde transponder" + +msgid "Preparing... Please wait" +msgstr "Foarbereide fan... Eefkes wachtsje" + +msgid "Press OK on your remote control to continue." +msgstr "Druk OK op of ôfstandsbestjinning om fierder te gean." + +msgid "Press OK to activate the settings." +msgstr "Druk Ok om ynstellingen aktief te meitsjen." + +msgid "Press OK to edit the settings." +msgstr "Druk OK om dizze ynstellingen te bewurkjen" + +msgid "Press OK to scan" +msgstr "Druk Ok om te sykjen" + +msgid "Press OK to start the scan" +msgstr "Druk Ok om sykjen te starten" + +msgid "Prev" +msgstr "Foarige" + +msgid "Preview menu" +msgstr "Foarige menu" + +msgid "Primary DNS" +msgstr "Eerste DNS" + +msgid "Properties of current title" +msgstr "" + +msgid "Protect services" +msgstr "Befeilich kanalen" + +msgid "Protect setup" +msgstr "Ynstellingen befeiligje" + +msgid "Provider" +msgstr "Leveransier" + +msgid "Provider to scan" +msgstr "Utstjoerder ôfsykje" + +msgid "Providers" +msgstr "Providers" + +msgid "Quickzap" +msgstr "Rapzappe" + +msgid "RC Menu" +msgstr "Ofstandsbetsjinnings menu" + +msgid "RF output" +msgstr "RF Ynstellingen" + +msgid "RGB" +msgstr "RGB" + +msgid "RSS Feed URI" +msgstr "RSS Feed URI" + +msgid "Radio" +msgstr "Radio" + +msgid "Ram Disk" +msgstr "Ram Disk" + +msgid "Really close without saving settings?" +msgstr "Slúte sunder op te slaan ?" + +msgid "Really delete done timers?" +msgstr "Ferwiderje diene tiidsbarren?" + +msgid "Really delete this timer?" +msgstr "Dit tiidsbarren ferwiderje?" + +msgid "Really exit the subservices quickzap?" +msgstr "De undersender rapzap ôfslúte?" + +msgid "Really reboot now?" +msgstr "Wier no kompleet opnei starte ?" + +msgid "Really restart now?" +msgstr "Wier no nei starte ?" + +msgid "Really shutdown now?" +msgstr "Wier no kompleet útskeakelje ?" + +msgid "Reboot" +msgstr "kompleet nei starte" + +msgid "Reception Settings" +msgstr "Untfangst Ynstellingen" + +msgid "Record" +msgstr "Opnimme" + +msgid "Recorded files..." +msgstr "Opnâme bestannen..." + +msgid "Recording" +msgstr "An it opnimmen" + +msgid "Recording(s) are in progress or coming up in few seconds!" +msgstr "In Opnimmen is dwaande of start binnen in pear sekonden!" + +msgid "Recordings always have priority" +msgstr "Opnimmen hat altiid foarrang" + +msgid "Reenter new pin" +msgstr "pin opnei ynjaan" + +msgid "Refresh Rate" +msgstr "Fernij faasje" + +msgid "Refresh rate selection." +msgstr "Fernij faasje seleksje" + +msgid "Remove Bookmark" +msgstr "Ferwiderje boekmerk" + +msgid "Remove Plugins" +msgstr "Ferwiderje ynstekkers" + +msgid "Remove a mark" +msgstr "Ferwiderje in Markeerder" + +msgid "Remove currently selected title" +msgstr "Ferwiderje it selektearre bestan" + +msgid "Remove plugins" +msgstr "Ferwiderje ynstekker" + +msgid "Remove the broken .NFI file?" +msgstr "Foute .NFI triem fuortsmite ?" + +msgid "Remove the incomplete .NFI file?" +msgstr "Net komplete .NFI triem fuortsmite ?" + +msgid "Remove title" +msgstr "Ferwiderje de titel" + +#, python-format +msgid "Removing directory %s failed. (Maybe not empty.)" +msgstr "Ferwiderje fan map %s mislearre ( miskien is der net leech )" + +msgid "Rename" +msgstr "Omneame" + +msgid "Repeat" +msgstr "Herhelje" + +msgid "Repeat Type" +msgstr "Herhelje Type" + +msgid "Repeating event currently recording... What do you want to do?" +msgstr "Herhelle barren an it opnimmen... Wat wolle jo dwaan ?" + +msgid "Repeats" +msgstr "Herhellingen" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset and renumerate title names" +msgstr "" + +msgid "Resolution" +msgstr "Skermresolusje" + +msgid "Restart" +msgstr "Opnij starte" + +msgid "Restart GUI" +msgstr "" + +msgid "Restart GUI now?" +msgstr "GUI no opnij starte?" + +msgid "Restart network" +msgstr "Netwurk nij starte" + +msgid "Restart test" +msgstr "Test nij starte" + +msgid "Restart your network connection and interfaces.\n" +msgstr "netwurk oanslúting en interfaces nij starte.\n" + +msgid "Restore" +msgstr "Werom sette" + +msgid "" +"Restoring the settings is done. Please press OK to activate the restored " +"settings now." +msgstr "" +"Werom sette fan ynstellingen is klear. Druk Ok om ynstellingen aktief te " +"meitsjen" + +msgid "Resume from last position" +msgstr "Fierder gean fanôf lêste posysje" + +#. TRANSLATORS: The string "Resuming playback" flashes for a moment +#. TRANSLATORS: at the start of a movie, when the user has selected +#. TRANSLATORS: "Resume from last position" as start behavior. +#. TRANSLATORS: The purpose is to notify the user that the movie starts +#. TRANSLATORS: in the middle somewhere and not from the beginning. +#. TRANSLATORS: (Some translators seem to have interpreted it as a +#. TRANSLATORS: question or a choice, but it is a statement.) +msgid "Resuming playback" +msgstr "Fierder gean mei ôfspieljen" + +msgid "Return to file browser" +msgstr "Werom nei triem browser" + +msgid "Return to movie list" +msgstr "Werom nei de film lyst" + +msgid "Return to previous service" +msgstr "Werom nei foariche service" + +msgid "Rewind speeds" +msgstr "Werom spiel faasje" + +msgid "Right" +msgstr "Rjochts" + +msgid "Rolloff" +msgstr "Utrolje" + +msgid "Rotor turning speed" +msgstr "Rotor rotaasje faasje" + +msgid "Running" +msgstr "Dwaande" + +msgid "Russian" +msgstr "Russysk" + +msgid "S-Video" +msgstr "S Video" + +msgid "SNR" +msgstr "SNR" + +msgid "SNR:" +msgstr "SNR:" + +msgid "Sat" +msgstr "Sneon" + +msgid "Sat / Dish Setup" +msgstr "Sat / Panne Ynstellingen" + +msgid "Satellite" +msgstr "Satellyt" + +msgid "Satellite Equipment Setup" +msgstr "Satellyt ynstellingen" + +msgid "Satellites" +msgstr "Satellyten" + +msgid "Satfinder" +msgstr "Sat syker" + +msgid "Sats" +msgstr "Sats" + +msgid "Saturday" +msgstr "Sneon" + +msgid "Save" +msgstr "Opslaan" + +msgid "Save Playlist" +msgstr "Ofspiellyst opslaan" + +msgid "Scaling Mode" +msgstr "Skaal Moadus" + +msgid "Scan " +msgstr "Sykje" + +msgid "Scan QAM128" +msgstr "Sykje QAM128" + +msgid "Scan QAM16" +msgstr "Sykje QAM16" + +msgid "Scan QAM256" +msgstr "Sykje QAM256" + +msgid "Scan QAM32" +msgstr "Sykje QAM32" + +msgid "Scan QAM64" +msgstr "Sykje QAM64" + +msgid "Scan SR6875" +msgstr "Sykje SR6875" + +msgid "Scan SR6900" +msgstr "Sykje SR6900" + +msgid "Scan Wireless Networks" +msgstr "Sykje Triitloaze netwerken" + +msgid "Scan additional SR" +msgstr "Sykje op in oanfullende SR" + +msgid "Scan band EU HYPER" +msgstr "Sykje op bân EU HYPER" + +msgid "Scan band EU MID" +msgstr "Sykje op bân EU MID" + +msgid "Scan band EU SUPER" +msgstr "Sykje op bân EU SUPER" + +msgid "Scan band EU UHF IV" +msgstr "Sykje op bân EU UHF IV" + +msgid "Scan band EU UHF V" +msgstr "Sykje op bân EU UHF V" + +msgid "Scan band EU VHF I" +msgstr "Sykje op bân EU VHF I" + +msgid "Scan band EU VHF III" +msgstr "Sykje op bân EU VHF III" + +msgid "Scan band US HIGH" +msgstr "Sykje op bân US HIGH" + +msgid "Scan band US HYPER" +msgstr "Sykje op bân US HYPER" + +msgid "Scan band US LOW" +msgstr "Sykje op bân US LOW" + +msgid "Scan band US MID" +msgstr "Sykje op bân US MID" + +msgid "Scan band US SUPER" +msgstr "Sykje op bân US SUPER" + +msgid "" +"Scan your network for wireless Access Points and connect to them using your " +"WLAN USB Stick\n" +msgstr "" +"Sykje nei triidloaze oankeppel punten en ferbyn der mei troch de WLAN USB " +"stick\n" + +msgid "" +"Scans default lamedbs sorted by satellite with a connected dish positioner" +msgstr "" +"Sykje standert lame dbs, neffens de sattelyt mei in oanslúten panne ôfsteller" + +msgid "Search east" +msgstr "Sykje east" + +msgid "Search west" +msgstr "Sykje west" + +msgid "Secondary DNS" +msgstr "Twadde DNS" + +msgid "Seek" +msgstr "Sykje" + +msgid "Select HDD" +msgstr "" + +msgid "Select Location" +msgstr "Kies Lokaasje" + +msgid "Select Network Adapter" +msgstr "Kies Netwurk Adapter" + +msgid "Select a movie" +msgstr "Kies in film" + +msgid "Select audio mode" +msgstr "Kies lûd mode" + +msgid "Select audio track" +msgstr "Kies lûd spoor" + +msgid "Select channel to record from" +msgstr "Kies kanaal om fan op te nimmen" + +msgid "Select image" +msgstr "Kies image" + +msgid "Select refresh rate" +msgstr "Kies faasje fan fernije" + +msgid "Select video input" +msgstr "Kies fideo yngong" + +msgid "Select video mode" +msgstr "Kies fideo moadus" + +msgid "Selected source image" +msgstr "Koazen bron image" + +msgid "Send DiSEqC" +msgstr "" + +msgid "Send DiSEqC only on satellite change" +msgstr "" + +msgid "Seperate titles with a main menu" +msgstr "Aparte triemen mei in haad menu" + +msgid "Sequence repeat" +msgstr "folch oarde herhelling" + +msgid "Service" +msgstr "Kanaal ynfo" + +msgid "Service Scan" +msgstr "Kanaal sykje" + +msgid "Service Searching" +msgstr "Kanalen sykje" + +msgid "Service has been added to the favourites." +msgstr "Kanaal is tafoege oan favorieten." + +msgid "Service has been added to the selected bouquet." +msgstr "Kanaal is tafoege oan selektearre bouquet." + +msgid "" +"Service invalid!\n" +"(Timeout reading PMT)" +msgstr "" +"Kanaal net jildig!\n" +"(Tiidsoerskriding lêzen fan PMT)" + +msgid "" +"Service not found!\n" +"(SID not found in PAT)" +msgstr "" +"Service net fûn!\n" +"(SID net fûn yn PAT)" + +msgid "Service scan" +msgstr "Kanaal sykje" + +msgid "" +"Service unavailable!\n" +"Check tuner configuration!" +msgstr "Kanaal net beskikber!
Sjoch tuner ynstellingen nei." + +msgid "Serviceinfo" +msgstr "Kanaal ynformaasje" + +msgid "Services" +msgstr "Kanalen" + +msgid "Set Voltage and 22KHz" +msgstr "" + +msgid "Set as default Interface" +msgstr "Ynstelle as standert ynterface" + +msgid "Set interface as default Interface" +msgstr "" + +msgid "Set limits" +msgstr "Set limyten" + +msgid "Settings" +msgstr "Ynstellingen" + +msgid "Setup" +msgstr "Ynstelle" + +msgid "Setup Mode" +msgstr "Ynstellingen Moadus" + +msgid "Show Info" +msgstr "Ynformaasje sjen litte" + +msgid "Show WLAN Status" +msgstr "WLAN status sjen litte" + +msgid "Show blinking clock in display during recording" +msgstr "Lit klok knipperje yn display by opnimmen" + +msgid "Show infobar on channel change" +msgstr "Ynfobalke sjen litte by kanaal wiksel" + +msgid "Show infobar on event change" +msgstr "Ynfobalke sjen litte by barren wiksel" + +msgid "Show infobar on skip forward/backward" +msgstr "Ynfobalke sjen by rap foarút / efterút" + +msgid "Show positioner movement" +msgstr "Rotor beweching sjen litte" + +msgid "Show services beginning with" +msgstr "Kanalen sjen litte beginnent mei" + +msgid "Show the radio player..." +msgstr "Radio spieler sjen litte..." + +msgid "Show the tv player..." +msgstr "TV Spieler sjen litte..." + +msgid "Shows the state of your wireless LAN connection.\n" +msgstr "Status fan WLAN sjen litte.\n" + +msgid "Shutdown Dreambox after" +msgstr "Dreambox útskeakelje nei" + +msgid "Similar" +msgstr "Gelykese" + +msgid "Similar broadcasts:" +msgstr "Gelykese utsjoeringen" + +msgid "Simple" +msgstr "Simpel" + +msgid "Simple titleset (compatibility for legacy players)" +msgstr "" + +msgid "Single" +msgstr "Inkel" + +msgid "Single EPG" +msgstr "Inkele EPG" + +msgid "Single satellite" +msgstr "Ien satellyt" + +msgid "Single transponder" +msgstr "Ien transponder" + +msgid "Singlestep (GOP)" +msgstr "Ien stap (GOP)" + +msgid "Skin..." +msgstr "Oanklaaiing" + +msgid "Sleep Timer" +msgstr "Tiidstjoering" + +msgid "Sleep timer action:" +msgstr "Sleep tiid barren aksje:" + +msgid "Slideshow Interval (sec.)" +msgstr "Slide foarstelling tiid (sec.)" + +#, python-format +msgid "Slot %d" +msgstr "Slot %d" + +msgid "Slow" +msgstr "Langsaam" + +msgid "Slow Motion speeds" +msgstr "Langsaam beweechjen faasje" + +msgid "Some plugins are not available:\n" +msgstr "Inkele ynstekkers binne net anwêzig:\n" + +msgid "Somewhere else" +msgstr "Ergens oars" + +msgid "" +"Sorry your Backup destination does not exist\n" +"\n" +"Please choose an other one." +msgstr "" +"Sorry.. Jo Reserve kopie plak bestiit net\n" +"\n" +"Kies in oar plak aub..." + +#. TRANSLATORS: This must fit into the header button in the EPG-List +msgid "Sort A-Z" +msgstr "Sorteer op A-Z" + +#. TRANSLATORS: This must fit into the header button in the EPG-List +msgid "Sort Time" +msgstr "Sorteer op Tiid" + +msgid "Sound" +msgstr "Lûd" + +msgid "Soundcarrier" +msgstr "Lûd-drager" + +msgid "South" +msgstr "Sud" + +msgid "Spanish" +msgstr "Spaans" + +msgid "Standby" +msgstr "Paraatmode" + +msgid "Standby / Restart" +msgstr "Paraatmode / Nijstart" + +msgid "Start from the beginning" +msgstr "Start fanôf it begjin" + +msgid "Start recording?" +msgstr "Start opnimmen?" + +msgid "Start test" +msgstr "Start test" + +msgid "StartTime" +msgstr "Starttiid" + +msgid "Starting on" +msgstr "Starte op" + +msgid "Step east" +msgstr "Stap nei east" + +msgid "Step west" +msgstr "Stap nei west" + +msgid "Stereo" +msgstr "Stereo" + +msgid "Stop" +msgstr "Stop" + +msgid "Stop Timeshift?" +msgstr "Tiidsskowen stopje?" + +msgid "Stop current event and disable coming events" +msgstr "Stopje hjoeddeiske en ankommend barren" + +msgid "Stop current event but not coming events" +msgstr "Stopje hjoeddeiske mar net ankommend barren" + +msgid "Stop playing this movie?" +msgstr "Stopje ôfspieljen fan dizze film?" + +msgid "Stop test" +msgstr "Stop test" + +msgid "Store position" +msgstr "Posysje opslaan" + +msgid "Stored position" +msgstr "Opsleine posysje" + +msgid "Subservice list..." +msgstr "UnderSender lyst..." + +msgid "Subservices" +msgstr "UnderSender" + +msgid "Subtitle selection" +msgstr "Undertitel seleksje" + +msgid "Subtitles" +msgstr "Undertitels" + +msgid "Sun" +msgstr "Sne" + +msgid "Sunday" +msgstr "Snein" + +msgid "Swap Services" +msgstr "Kanalen wikselje" + +msgid "Swedish" +msgstr "Zweeds" + +msgid "Switch to next subservice" +msgstr "Gjin nei folgende undersender" + +msgid "Switch to previous subservice" +msgstr "Gjin nei foarige undersender" + +msgid "Symbol Rate" +msgstr "Symbool faasje" + +msgid "Symbolrate" +msgstr "Symboolfaasje" + +msgid "System" +msgstr "Systeem" + +#. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline) +msgid "TRANSLATOR_INFO" +msgstr "Oersetter ynfo" + +msgid "TS file is too large for ISO9660 level 1!" +msgstr "" + +msgid "TV System" +msgstr "TV Systeem" + +msgid "Table of content for collection" +msgstr "Ynhalds tabel foar kolleksje" + +msgid "Tag 1" +msgstr "" + +msgid "Tag 2" +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "Terrestrial" +msgstr "Ether" + +msgid "Terrestrial provider" +msgstr "Ether útstjoerder" + +msgid "Test mode" +msgstr "Test moadus" + +msgid "Test the network configuration of your Dreambox.\n" +msgstr "Test de netwurk konfiguraasje fan de Dreambox.\n" + +msgid "Test-Messagebox?" +msgstr "Test-Berjochtbox?" + +msgid "" +"Thank you for using the wizard. Your box is now ready to use.\n" +"Please press OK to start using your Dreambox." +msgstr "" +"Bedankt foar it brûken fan de gucheler. Jo box is no klear om te brûken.\n" +"Druk OK om mei de Dreambox te begjinnen." + +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 "" +"De DVD standert kin gjin H.264 (HDTV) fideo streams an. Wolle jo dan in " +"Dreambox formaat data DVD meitsje ? Tink der om, dizze kin net in gewoane " +"DVD spielers ôfspiele wurde !" + +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." +msgstr "Backup is mislearre. Kies in oare backup lokaasje." + +#, python-format +msgid "" +"The following device was found:\n" +"\n" +"%s\n" +"\n" +"Do you want to write the USB flasher to this stick?" +msgstr "" +"It folgende apparaat wie fûn:\n" +"\n" +"%s\n" +"\n" +"Wolle jo de USB flasher nei dizze stick skriuwe ?" + +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?" +msgstr "" +"De yngongs poort moat no ynstelt wurde\n" +"Ynstelle kin mei it sjen litten fan in oantal bylden. No dwaan ?" + +msgid "The installation of the default services lists is finished." +msgstr "Ynstalaasje fan standert ynstellingen is klear." + +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 "" +"Standert ynstellingen binne werom set. Jo kinne fierder gean mei it " +"ynstellen fan de Dreambox troch OK te drukken op de ôfstandsbetsjinning" + +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 "" +"De md5sum misljearre, de triem is blikber Korrupt. Wolle jo wier dit byld yn " +"it flash geheugen sette ? Dit gjid op eigen risiko !" + +msgid "" +"The md5sum validation failed, the file may be downloaded incompletely or be " +"corrupted!" +msgstr "" +"De md5sum misljearre. De triem mei net kompleet binnen helle wêze of gewoan " +"korrupt weze !" + +msgid "The package doesn't contain anything." +msgstr "It pakket hat gjin ynhâld" + +#, python-format +msgid "The path %s already exists." +msgstr "It paad %s bestiit al." + +msgid "The pin code has been changed successfully." +msgstr "De pinkode is mei sukses feroare." + +msgid "The pin code you entered is wrong." +msgstr "De ynjûne pinkode is ferkeard." + +msgid "The pin codes you entered are different." +msgstr "De pinkodes binne net gelyk." + +msgid "The sleep timer has been activated." +msgstr "De sliep tiid klok is aktiveert." + +msgid "The sleep timer has been disabled." +msgstr "De sliep tiid klok is útskeakele" + +msgid "The timer file (timers.xml) is corrupt and could not be loaded." +msgstr "De tiidsbarrenlyst is korrupt en koe net laden wurde." + +msgid "" +"The wireless LAN plugin is not installed!\n" +"Please install it." +msgstr "" +"De WLAN ynstekker is net ynstallearre!\n" +"Ynstallearje dizze earst." + +msgid "" +"The wizard can backup your current settings. Do you want to do a backup now?" +msgstr "" +"De gucheler kin jo ynstellingen efterút sette. Wolle jo no een backup " +"meitsje ?" + +msgid "The wizard is finished now." +msgstr "De gucheler is klear." + +msgid "There are no default services lists in your image." +msgstr "Der binne gjin standert lysts yn de Dreambox" + +msgid "There are no default settings in your image." +msgstr "Der binne gjin standert ynstellingen yn jo byld" + +msgid "" +"There might not be enough Space on the selected Partition.\n" +"Do you really want to continue?" +msgstr "" +"Blikber is der net genôch rûmte op de koazen partysje.\n" +"Wolle jo trochgean ?" + +#, python-format +msgid "This .NFI file does not contain a valid %s image!" +msgstr "Dizze .NFI triem hat net in jildich %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 "" +"Dizze .NFI triem had gjin md5sum kontrolesom en mei misskien net wurkje. " +"Wolle jo wier dit byld yn flash geheugen sette ?" + +msgid "" +"This .NFI file has a valid md5 signature. Continue programming this image to " +"flash memory?" +msgstr "" +"Dit .NFI triem hat it jildige md5 kontrolesom. Fjierder gean mei it nei " +"flash skriuwen fan dit byld ?" + +msgid "" +"This DVD RW medium is already formatted - reformatting will erase all " +"content on the disc." +msgstr "" +"Dit DVD RW medium is al formattearre. Wer opnei dwaan sil alle gegevens op " +"disk wiskje." + +#, python-format +msgid "This Dreambox can't decode %s video streams!" +msgstr "De Dreambox kin %s fideo streams net oan !" + +msgid "This is step number 2." +msgstr "Dit is stap nûmer 2." + +msgid "This is unsupported at the moment." +msgstr "Dit wurd no nog net ondersteund." + +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" +msgstr "" +"Dizze test sjocht nei ynstelde nammeservers.\n" +"Krije jo in \"net befestige\" berjocht :\n" +"- Sjoch nei de DHCP, kabels/tridden en adapter ynstellingen\n" +"- By hânmatig ynstellen fan nammeservers, sjoch nei de ynjeftes yn de " +"\"nammeservers\" konfiguraasje" + +msgid "" +"This test checks whether a network cable is connected to your LAN-Adapter.\n" +"If you get a \"disconnected\" message:\n" +"- verify that a network cable is attached\n" +"- verify that the cable is not broken" +msgstr "" +"Dizze test sjocht nei in oanslúten LAN adapter.\n" +"Krije jo in \"net oanslúten\" berjocht :\n" +"- Sjoch nei wol of net oanslúten kabels/tridden\n" +"- Sjoch ot de kabel miskien net brutsen is" + +msgid "" +"This test checks whether a valid IP Address is found for your LAN Adapter.\n" +"If you get a \"unconfirmed\" message:\n" +"- no valid IP Address was found\n" +"- please check your DHCP, cabling and adapter setup" +msgstr "" +"Dizze test sjocht nei ynstelde IP adressen foar de LAN adapter.\n" +"Krije jo in \"net befestige\" berjocht :\n" +"- Is der in jildig IP adres ynstelt ?\n" +"- Sjoch nei de DHCP, kabels/tridden en adapter ynstellingen" + +msgid "" +"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" +"If you get an \"enabeld\" message:\n" +"-verify that you have a configured and working DHCP Server in your network." +msgstr "" +"Dizze test sjocht ot de LAN adapter ynsteld is foar automatysk IP Adres " +"ferkrije troch DHCP.\n" +"Krije jo in \"útskeakele\" berjocht :\n" +"- In hânmatig IP adres is ynstelt ?\n" +"- Is de ynjûne IP ynformaasje goed, yn it Adapterynstellingen menu ?\n" +"Krije jo in \"ynskeakele\" berjocht :\n" +"- Is der ek een DHCP server aktyf yn jo netwurk ?" + +msgid "This test detects your configured LAN-Adapter." +msgstr "Dizze test syket nei de ynstelde LAN-Adapter" + +msgid "Three" +msgstr "Trije" + +msgid "Threshold" +msgstr "Drompel" + +msgid "Thu" +msgstr "Tong" + +msgid "Thumbnails" +msgstr "" + +msgid "Thursday" +msgstr "Tongersdei" + +msgid "Time" +msgstr "Tiid" + +msgid "Time/Date Input" +msgstr "Tiid / Dei ynjefte" + +msgid "Timer" +msgstr "Tiidssjtoering" + +msgid "Timer Edit" +msgstr "Tiidsbarren bewurkje" + +msgid "Timer Editor" +msgstr "Tiidsbarren bewurker" + +msgid "Timer Type" +msgstr "Tiidsbarren type" + +msgid "Timer entry" +msgstr "Tiidsbarren item" + +msgid "Timer log" +msgstr "Tiidsbarren log" + +msgid "" +"Timer overlap in timers.xml detected!\n" +"Please recheck it!" +msgstr "" +"Tiidstjoerings conflicten fûn yn timers.xml\n" +"Graach nei sjen en meitsje!" + +msgid "Timer sanity error" +msgstr "Tiidsbarren kontrole flater" + +msgid "Timer selection" +msgstr "Tiidsbarren seleksje" + +msgid "Timer status:" +msgstr "Tiidsbarren status:" + +msgid "Timeshift" +msgstr "Tiidsskowen" + +msgid "Timeshift not possible!" +msgstr "Tiidsskowen is net mooglik !" + +msgid "Timeshift path..." +msgstr "" + +msgid "Timezone" +msgstr "Tiidszone" + +msgid "Title" +msgstr "Titel" + +msgid "Title properties" +msgstr "" + +msgid "Title:" +msgstr "Titel:" + +msgid "Titleset mode" +msgstr "" + +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" +"3) Wait for bootup and follow instructions of the wizard." +msgstr "" + +msgid "Today" +msgstr "Hjoed" + +msgid "Tone mode" +msgstr "Toan moadus" + +msgid "Toneburst" +msgstr "Toan piek" + +msgid "Toneburst A/B" +msgstr "Toneburst A/B" + +msgid "Track" +msgstr "Nummer" + +msgid "Translation" +msgstr "Oersetting" + +msgid "Translation:" +msgstr "Oersetting:" + +msgid "Transmission Mode" +msgstr "Oerstjoeren moadus" + +msgid "Transmission mode" +msgstr "Oerstjoeren type" + +msgid "Transponder" +msgstr "Transponder" + +msgid "Transponder Type" +msgstr "Transponder type" + +msgid "Tries left:" +msgstr "Oantal kearen besykjen oer:" + +msgid "Try to find used Transponders in cable network.. please wait..." +msgstr "Besykje brûkte transponders te finen yn kabel netwurk.. " + +msgid "Try to find used transponders in cable network.. please wait..." +msgstr "Besykje brûkte transponders te finen yn kabel netwurk.. " + +msgid "Tue" +msgstr "Tiis" + +msgid "Tuesday" +msgstr "Tiisdei" + +msgid "Tune" +msgstr "Ofstimme" + +msgid "Tune failed!" +msgstr "Ofstimme mislearre !" + +msgid "Tuner" +msgstr "Tuner" + +msgid "Tuner " +msgstr "Tuner" + +msgid "Tuner Slot" +msgstr "Tuner Slot" + +msgid "Tuner configuration" +msgstr "Tuner ynstellingen" + +msgid "Tuner status" +msgstr "Tuner status" + +msgid "Turkish" +msgstr "Turks" + +msgid "Two" +msgstr "Twa" + +msgid "Type of scan" +msgstr "Type fan sykjen" + +msgid "USALS" +msgstr "USALS" + +msgid "USB" +msgstr "USB" + +msgid "USB Stick" +msgstr "USB Stick" + +msgid "USB stick wizard" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "" +"Unable to complete filesystem check.\n" +"Error: " +msgstr "" +"Net yn steat om bestânsysteem nei te sjen\n" +"Flater: " + +msgid "" +"Unable to initialize harddisk.\n" +"Error: " +msgstr "" + +msgid "Uncommitted DiSEqC command" +msgstr "Net oanwizen DiSEqC kommando" + +msgid "Universal LNB" +msgstr "Unifersele LNB" + +msgid "Unmount failed" +msgstr "Ofkeppeljen mislearre" + +msgid "Update" +msgstr "Bywurkje" + +msgid "Updates your receiver's software" +msgstr "UntfangerSoftware bywurkje" + +msgid "Updating finished. Here is the result:" +msgstr "Klear met bywurkjen. Dit hat allegear bart :" + +msgid "Updating... Please wait... This can take some minutes..." +msgstr "Bywurkjen is dwaande. Waachtje even. Dit kin inkele minuten duorje." + +msgid "Upgrade finished. Do you want to reboot your Dreambox?" +msgstr "Klear mei bywurkjen. Wolle jo de Dreambox opnij starte?" + +msgid "Upgrading" +msgstr "An it bywurkjen" + +msgid "Upgrading Dreambox... Please wait" +msgstr "Dreambox an it bywurkjen..." + +msgid "Use" +msgstr "" + +msgid "Use DHCP" +msgstr "DHCP brûke" + +msgid "Use Interface" +msgstr "Brûk ynterface" + +msgid "Use Power Measurement" +msgstr "Bruk Enerzy behear" + +msgid "Use a gateway" +msgstr "In gateway brûke" + +#. TRANSLATORS: The effect of "Non-smooth winding" is that rather +#. than using ordinary "continuous" or "smooth" winding, a fast +#. sequence of stills is shown when winding at high speeds. This +#. makes it much easier too follow when almost each frame comes from +#. a new scene. The effect is achieved by repeating each shown frame +#. a couple of times. The settings control both at which speed this +#. winding mode sets in, and how many times each frame should be +#. repeated. This was previously called "Discontinuous playback" +#. which was incomprehensible. "Non-smooth winding" may be a better +#. term, but note that there is nothing irregular about it. Synonyms +#. better suited for translation to other languages may be "stepwise +#. winding/playback", or "winding/playback using stills". +msgid "Use non-smooth winding at speeds above" +msgstr "Brûk net glêd spielen by faasjes heecher" + +msgid "Use power measurement" +msgstr "Fermogensmjitting brûke" + +msgid "Use the Networkwizard to configure your Network\n" +msgstr "Bruk de netwurk gûcheler om it netwurk yn te stellen\n" + +msgid "" +"Use the left and right buttons to change an option.\n" +"\n" +"Please set up tuner A" +msgstr "" +"Knoppen links en rjochts brûke om in opsje te feroarjen.\n" +"\n" +"Stel tuner A yn" + +msgid "" +"Use the up/down keys on your remote control to select an option. After that, " +"press OK." +msgstr "Knoppen op en del brûke om in opsje te kiezen. Dêrnei druk Ok" + +msgid "Use usals for this sat" +msgstr "USALS foar dizze satellyt brûke" + +msgid "Use wizard to set up basic features" +msgstr "Gucheler foar basis ynstellingen brûke" + +msgid "Used service scan type" +msgstr "Brukte type kanaal sykjen" + +msgid "User defined" +msgstr "Gebruker ynstelling" + +msgid "VCR scart" +msgstr "VCR scart" + +msgid "VMGM (intro trailer)" +msgstr "VMGM (yntro fan film)" + +msgid "Video Fine-Tuning" +msgstr "Fideo fyn ynstellen" + +msgid "Video Fine-Tuning Wizard" +msgstr "Fideo fyn ynstel gucheler" + +msgid "Video Output" +msgstr "Fideo útgong" + +msgid "Video Setup" +msgstr "Fideo ynstellingen" + +msgid "Video Wizard" +msgstr "Fideo gucheler" + +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" +"\n" +"The next input port will be automatically probed in 10 seconds." +msgstr "" +"Fideo yngong seleksje\n" +"\n" +"Druk OK wannear jo dit sjen kinne op jo TV (of kies in oare yngong).\n" +"\n" +"De folgende yngong wurd automatysk probearre yn 10 seconden." + +msgid "Video mode selection." +msgstr "Fideo moadus seleksje" + +msgid "View Rass interactive..." +msgstr "Rass interaktief sjen litte" + +msgid "View teletext..." +msgstr "tiletekst toane..." + +msgid "Virtual KeyBoard" +msgstr "" + +msgid "Voltage mode" +msgstr "Spanning mode" + +msgid "Volume" +msgstr "Lûdsterkte" + +msgid "W" +msgstr "W" + +msgid "WEP" +msgstr "WEP" + +msgid "WPA" +msgstr "WPA" + +msgid "WPA or WPA2" +msgstr "" + +msgid "WPA2" +msgstr "WPA2" + +msgid "WSS on 4:3" +msgstr "WSS by 4:3" + +msgid "Waiting" +msgstr "Oan it wachtsjen" + +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" +"Please press OK to begin." +msgstr "" +"Wy probearje no of jo TV dizze resolusje dwaan kin by 50 Hz. Giet jo skerm " +"op swart, wachtsje 20 sec. en it giet werom nei 60 Hz.\n" +"Druk OK om te begjinnen." + +msgid "Wed" +msgstr "Woa" + +msgid "Wednesday" +msgstr "Woansdei" + +msgid "Weekday" +msgstr "Wiekdei" + +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" +"\n" +"Then seek to the end, press OK, select 'end cut'. That's it." +msgstr "" +"Wolkom by de Cutlist bewurker.\n" +"\n" +"Sykje oant it begjin fan wat jo fuorthelje wolle. Druk OK, kies start cut.\n" +"\n" +"Dan kies oant it ein, druk OK, kies ein cut. Klear.." + +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 "" +"Wolkom by de byld bywurkje gucheler. De gucheler helpt jo by it bywurkjen " +"fan de software yn jo Dreambox, in backup mochelikhiid foar jo ynstellingen " +"en in koarte útlis fan hoe de software by te wurkjen." + +msgid "" +"Welcome.\n" +"\n" +"This start wizard will guide you through the basic setup of your Dreambox.\n" +"Press the OK button on your remote control to move to the next step." +msgstr "" +"Wolkom.\n" +"\n" +"Dizze gucheler helpt jo troch de basis ynstellingen fan jo Dreambox.\n" +"Druk Ok op jo ôfstandsbetsjinning om nei de folgende stap te gean." + +msgid "Welcome..." +msgstr "Wolkom..." + +msgid "West" +msgstr "West" + +msgid "What do you want to scan?" +msgstr "Wat wolle jo ôfsykje ?" + +msgid "Where do you want to backup your settings?" +msgstr "Wêr wolle jo de gegevens opslaan?" + +msgid "Where to save temporary timeshift recordings?" +msgstr "" + +msgid "Wireless" +msgstr "Triitloas" + +msgid "Wireless Network" +msgstr "Triidloas netwurk" + +msgid "Write error while recording. Disk full?\n" +msgstr "Skriuw flater by it opnimmen. Skiif fol ?\n" + +msgid "Write failed!" +msgstr "Skriuw flater!" + +msgid "Writing NFI image file to flash completed" +msgstr "Skriuwen fan NFI byld nei flash is klear" + +msgid "YPbPr" +msgstr "YPbPr" + +msgid "Year:" +msgstr "Jier:" + +msgid "Yes" +msgstr "Ja" + +msgid "Yes, and delete this movie" +msgstr "Ja, en ferwiderje dizze film" + +msgid "Yes, backup my settings!" +msgstr "Ja, myn ynstellingen extra bewarje" + +msgid "Yes, do a manual scan now" +msgstr "Ja, no hânmatig sykje" + +msgid "Yes, do an automatic scan now" +msgstr "Ja, no automatysk sykje" + +msgid "Yes, do another manual scan now" +msgstr "Ja, no nochris hânmatig sykje" + +msgid "Yes, perform a shutdown now." +msgstr "Ja, no útskeakelje" + +msgid "Yes, restore the settings now" +msgstr "Ja, no de ynstellingen werom sette" + +msgid "Yes, returning to movie list" +msgstr "Ja, werom nei de film lyst" + +msgid "Yes, view the tutorial" +msgstr "Ja, besjoch de hânlieding" + +msgid "" +"You can choose some default settings now. Please select the settings you " +"want to be installed." +msgstr "" +"Jo kinne inkele ynstellingen dwaan no. Kies de ynstellingen die't jo " +"ynstallearje wolle" + +msgid "You can choose, what you want to install..." +msgstr "Jo kinne kieze wat te ynstallearen" + +msgid "You cannot delete this!" +msgstr "Jo kinne dit net ferwiderje!" + +msgid "You chose not to install any default services lists." +msgstr "Jo hawwe koazen gjin standert kanaallysten te ynstallearjen." + +msgid "" +"You chose not to install any default settings. You can however install the " +"default settings later in the settings menu." +msgstr "" +"Jo hawwe koazen gjin standert ynstellingen te ynstallearjen. Jo kinne letter " +"dit altiid nog dwaan in it ynstellingen menu" + +msgid "" +"You chose not to install anything. Please press OK finish the install wizard." +msgstr "" +"Jo hawwe koazen neat te ynstallearjen. Druk OK om de gucheler ôf te slúten." + +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 "" +"Jo hawwe blykber gjin hurde skiif yn jo Dreambox. Extra bewarje fan " +"ynstellingen nei in hurde skiif kin net by jo." + +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" +"Please press OK to start the backup now." +msgstr "" +"Jo wolle de ynstellingen extra bewarje op in compact flash kaart. De kaart " +"moat oanwezig weze. Wy sjogge net nei, at it ek werkelijk brukt wurd. It is " +"better om op hurde skiif te bewarjen.\n" +"Druk Ok om de ynstellingen extra op te slaan." + +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 "" +"Jo wolle de ynstellingen extra bewarje op in USB skiif. It is better om dit " +"nei hurde skiif te dwaan\n" +"Druk Ok om de ynstellingen extra te bewarjen." + +msgid "" +"You have chosen to backup to your harddisk. Please press OK to start the " +"backup now." +msgstr "" +"Jo wolle de ynstellingen extra bewarje op hurde skiif.Druk Ok om de " +"ynstellingen extra te bewarjen." + +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 "" +"Jo hawwe koazen in neie .NFI opstart USB stick te meitsjen. Dit sil de USB " +"opnei partitionearje en sa sil alle data ferlên gean." + +#, python-format +msgid "You have to wait %s!" +msgstr "Jo moatte %s wachtsje!" + +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 "" +"De moat in PC oan de dreambox ansluten weze. Foar mear ynstruktiessjoch op " +"de webside http://www.dm7025.de.\n" +"Jo dreambox sil no stopje. Nei it bywurkjen neffens de webside, de neie " +"software sil jo freegje om de oarspronkelike ynstellingen werom te setten." + +msgid "" +"You need to set a pin code and hide it from your children.\n" +"\n" +"Do you want to set the pin now?" +msgstr "" +"In pincode moat brûkt wurde om of te sluten foar bern.\n" +"\n" +"No in pinkode ynstelle ?" + +msgid "Your Dreambox will restart after pressing OK on your remote control." +msgstr "Jo D" + +msgid "Your TV works with 50 Hz. Good!" +msgstr "Jo TV wurket goed mei 50 Hz. Ok !" + +msgid "" +"Your backup succeeded. We will now continue to explain the further upgrade " +"process." +msgstr "" +"It extra bewarjen is slagge. Wy gjinne jo fierder mei utlizzen fan it bywurk " +"proces." + +msgid "Your dreambox is shutting down. Please stand by..." +msgstr "Jo Dreambox wurd no ôfsluten. Eefkes wachtsje..." + +msgid "" +"Your dreambox isn't connected to the internet properly. Please check it and " +"try again." +msgstr "" +"Jo Dreambox is net goed ferbun mei it internet. Kontrolearje en besykje " +"opnij." + +msgid "" +"Your frontprocessor firmware must be upgraded.\n" +"Press OK to start upgrade." +msgstr "" +"Jo foarprocessor software moat bywurke wurde\n" +"Druk Ok om te begjinnen." + +msgid "Your network configuration has been activated." +msgstr "" + +msgid "" +"Your network configuration has been activated.\n" +"A second configured interface has been found.\n" +"\n" +"Do you want to disable the second network interface?" +msgstr "" + +msgid "Zap back to service before positioner setup?" +msgstr "Werom zappe nei kanaal foar rotor ynstellingen?" + +msgid "Zap back to service before satfinder?" +msgstr "Werom zappe nei kanaal foar satellytsyker?" + +msgid "[alternative edit]" +msgstr "[alternatief bewurkje]" + +msgid "[bouquet edit]" +msgstr "[bouquet bewurkje]" + +msgid "[favourite edit]" +msgstr "[favorieten bewurkje]" + +msgid "[move mode]" +msgstr "[Ferpleats moadus]" + +msgid "abort alternatives edit" +msgstr "alternatieven bewurkjen ôfbrekke" + +msgid "abort bouquet edit" +msgstr "boeket bewurkjen ôfbrekke" + +msgid "abort favourites edit" +msgstr "favoriet bewurkje ôfbrekke" + +msgid "about to start" +msgstr "op it punt om te starten" + +msgid "activate current configuration" +msgstr "" + +msgid "add a nameserver entry" +msgstr "" + +msgid "add alternatives" +msgstr "alernatief tafoegje" + +msgid "add bookmark" +msgstr "boekmerk tafoegje" + +msgid "add bouquet" +msgstr "boeket tafoegje" + +msgid "add directory to playlist" +msgstr "map oan ofspiellyst tafoegje" + +msgid "add file to playlist" +msgstr "triem oan ofspiellyst tafoegje" + +msgid "add files to playlist" +msgstr "triemen tafoegje an ôfspiellyst" + +msgid "add marker" +msgstr "marker tafoegje" + +msgid "add recording (enter recording duration)" +msgstr "opnimmen tafoegje (opnimtiid)" + +msgid "add recording (enter recording endtime)" +msgstr "opnimmen tafoegje (eintiid opnimmen ynjaan)" + +msgid "add recording (indefinitely)" +msgstr "opnimmen tafoegje (foar altiid trochgean)" + +msgid "add recording (stop after current event)" +msgstr "opnimmen tafoegje (stopje nei dit barren)" + +msgid "add service to bouquet" +msgstr "kanaal tafoegje oan bouquet" + +msgid "add service to favourites" +msgstr "kanaal tafoegje oan favorieten" + +msgid "add to parental protection" +msgstr "âlderlik tasjoch tafoegje " + +msgid "advanced" +msgstr "afansjearre" + +msgid "alphabetic sort" +msgstr "sortearje op alfabet" + +msgid "" +"are you sure you want to restore\n" +"following backup:\n" +msgstr "" +"witte jo seker dizze werom te setten\n" +"de extra kopie:\n" + +#, python-format +msgid "audio track (%s) format" +msgstr "" + +#, python-format +msgid "audio track (%s) language" +msgstr "" + +msgid "audio tracks" +msgstr "audio spoor" + +msgid "back" +msgstr "werom" + +msgid "background image" +msgstr "Eftergrûn ôfbylding" + +msgid "backgroundcolor" +msgstr "" + +msgid "better" +msgstr "better" + +msgid "black" +msgstr "" + +msgid "blacklist" +msgstr "swarte lyst" + +msgid "blue" +msgstr "" + +#, python-format +msgid "burn audio track (%s)" +msgstr "" + +msgid "change recording (duration)" +msgstr "feroarje opnim tiiden" + +msgid "change recording (endtime)" +msgstr "wizigje opnimmen (eintiid)" + +msgid "chapters" +msgstr "Haadstikken" + +msgid "choose destination directory" +msgstr "kies doel map" + +msgid "circular left" +msgstr "circular links" + +msgid "circular right" +msgstr "circular rjochts" + +msgid "clear playlist" +msgstr "ofspiellyst leeg meitsje" + +msgid "color" +msgstr "kleur" + +msgid "complex" +msgstr "complex" + +msgid "config menu" +msgstr "konfiguraasje menu" + +msgid "confirmed" +msgstr "befestigt" + +msgid "connected" +msgstr "oanslúten" + +msgid "continue" +msgstr "gjea fierder" + +msgid "copy to bouquets" +msgstr "kopieer nei boeketten" + +msgid "create directory" +msgstr "map meitsje" + +msgid "daily" +msgstr "eltse dei" + +msgid "day" +msgstr "dei" + +msgid "delete cut" +msgstr "ferwiderje stik" + +msgid "delete file" +msgstr "" + +msgid "delete playlist entry" +msgstr "ofspiellyst rigele ferwiderje" + +msgid "delete saved playlist" +msgstr "ferwiderje opsleine ofspiellyst" + +msgid "delete..." +msgstr "ferwiderje..." + +msgid "disable" +msgstr "utskeakelje" + +msgid "disable move mode" +msgstr "ferpleats modus útskeakelje" + +msgid "disabled" +msgstr "útskeakele" + +msgid "disconnected" +msgstr "net oanslúten" + +msgid "do not change" +msgstr "net feroarje" + +msgid "do nothing" +msgstr "doch neat" + +msgid "don't record" +msgstr "net opnimme" + +msgid "done!" +msgstr "Klear!" + +msgid "edit alternatives" +msgstr "bewurkje alternatief" + +msgid "empty" +msgstr "leeg" + +msgid "enable" +msgstr "ynskeakelje" + +msgid "enable bouquet edit" +msgstr "bewurkjen boeket oan" + +msgid "enable favourite edit" +msgstr "bewurkjen favorieten oan" + +msgid "enable move mode" +msgstr "ferpleatsen mode oan" + +msgid "enabled" +msgstr "ynskeakele" + +msgid "end alternatives edit" +msgstr "bewurkjen alternatief út" + +msgid "end bouquet edit" +msgstr "bewurkjen boeket út" + +msgid "end cut here" +msgstr "stop stik hjirre" + +msgid "end favourites edit" +msgstr "bewurkjen favoriet út" + +msgid "enigma2 and network" +msgstr "" + +msgid "equal to" +msgstr "gelyk oan" + +msgid "exceeds dual layer medium!" +msgstr "te grut foar 2 laags medium!" + +msgid "exit DVD player or return to file browser" +msgstr "DVD spieler ferlitte en werom nei triem browser" + +msgid "exit mediaplayer" +msgstr "mediaspieler ferlitte" + +msgid "exit movielist" +msgstr "filmlyst ferlitte" + +msgid "exit nameserver configuration" +msgstr "" + +msgid "exit network adapter configuration" +msgstr "" + +msgid "exit network adapter setup menu" +msgstr "" + +msgid "exit network interface list" +msgstr "" + +msgid "exit networkadapter setup menu" +msgstr "" + +msgid "failed" +msgstr "mislearre" + +msgid "fileformats (BMP, PNG, JPG, GIF)" +msgstr "" + +msgid "filename" +msgstr "triemnamme" + +msgid "fine-tune your display" +msgstr "it skerm fyn tune" + +msgid "font face" +msgstr "font ansjoch" + +msgid "forward to the next chapter" +msgstr "foarút nei it folgende haadstik" + +msgid "free" +msgstr "frij" + +msgid "free diskspace" +msgstr "freie skiif rûmte" + +msgid "go to deep standby" +msgstr "gean nei djip paraatstand" + +msgid "go to standby" +msgstr "gean nei paraatstand" + +msgid "green" +msgstr "" + +msgid "headline" +msgstr "koptekst" + +msgid "hear radio..." +msgstr "nei radio harkje..." + +msgid "help..." +msgstr "help..." + +msgid "hidden network" +msgstr "" + +msgid "hide extended description" +msgstr "utbreide beskriuwing ferbergje" + +msgid "hide player" +msgstr "spieler ferbergje" + +msgid "highlighted button" +msgstr "oarskleurde knop" + +msgid "horizontal" +msgstr "horizontal" + +msgid "hour" +msgstr "oere" + +msgid "hours" +msgstr "oeren" + +msgid "immediate shutdown" +msgstr "direkt útskeakelje" + +#, python-format +msgid "" +"incoming call!\n" +"%s calls on %s!" +msgstr "" +"binnenkommend gesprek!\n" +"%s skillet nei %s!" + +msgid "init module" +msgstr "CI-Module initialisearje" + +msgid "insert mark here" +msgstr "tuskenfoegje marker" + +msgid "jump back to the previous title" +msgstr "werom nei de foarige titel" + +msgid "jump forward to the next title" +msgstr "foarút nei de folgende titel" + +msgid "jump to listbegin" +msgstr "spring nei begjin fan lyst" + +msgid "jump to listend" +msgstr "spring nei ein fan lyst" + +msgid "jump to next marked position" +msgstr "spring nei folgende index punt" + +msgid "jump to previous marked position" +msgstr "spring nei foarige index punt" + +msgid "leave movie player..." +msgstr "film ôfspieljen ferlitte..." + +msgid "left" +msgstr "links" + +msgid "length" +msgstr "lengte" + +msgid "list style compact" +msgstr "lyst styl kompakt" + +msgid "list style compact with description" +msgstr "lyst styl kompakt mei beskriuwing" + +msgid "list style default" +msgstr "lyst styl standert" + +msgid "list style single line" +msgstr "lyst styl ien rigele" + +msgid "load playlist" +msgstr "ofspiellyst lade" + +msgid "locked" +msgstr "op slot" + +msgid "loopthrough to" +msgstr "trochskeakele nei" + +msgid "manual" +msgstr "hânmatig" + +msgid "menu" +msgstr "menu" + +msgid "menulist" +msgstr "menulyst" + +msgid "mins" +msgstr "min" + +msgid "minute" +msgstr "minuut" + +msgid "minutes" +msgstr "minuten" + +msgid "month" +msgstr "maand" + +msgid "move PiP to main picture" +msgstr "ferplaats PiP nei haad skerm" + +msgid "move down to last entry" +msgstr "" + +msgid "move down to next entry" +msgstr "" + +msgid "move up to first entry" +msgstr "" + +msgid "move up to previous entry" +msgstr "" + +msgid "movie list" +msgstr "film lyst" + +msgid "multinorm" +msgstr "multinorm" + +msgid "never" +msgstr "nea" + +msgid "next channel" +msgstr "folgend kanaal" + +msgid "next channel in history" +msgstr "set folgende kanaal in skiednis" + +msgid "no" +msgstr "nee" + +msgid "no HDD found" +msgstr "" + +msgid "no module found" +msgstr "gjin CI-Module fûn" + +msgid "no standby" +msgstr "gjin paraatstand" + +msgid "no timeout" +msgstr "gjin tiidslimyt" + +msgid "none" +msgstr "gjin" + +msgid "not locked" +msgstr "net op slot" + +msgid "nothing connected" +msgstr "neat anslúten" + +msgid "of a DUAL layer medium used." +msgstr "fan in DUAL layer medium brûkt" + +msgid "of a SINGLE layer medium used." +msgstr "fan in SINGLE layer medium brûkt" + +msgid "off" +msgstr "uit" + +msgid "on" +msgstr "oan" + +msgid "on READ ONLY medium." +msgstr "fan in ALLINNE-LEZE medium" + +msgid "once" +msgstr "ienmalig" + +msgid "open nameserver configuration" +msgstr "" + +msgid "open servicelist" +msgstr "iepenje kanaallyst" + +msgid "open servicelist(down)" +msgstr "iepenje kanaallyst (nei beneden)" + +msgid "open servicelist(up)" +msgstr "iepenje kanaallyst (nei boppe)" + +msgid "open virtual keyboard input help" +msgstr "" + +msgid "pass" +msgstr "trochgean" + +msgid "pause" +msgstr "pause" + +msgid "play entry" +msgstr "rigele ofspielje" + +msgid "play from next mark or playlist entry" +msgstr "Spielje fanôf it folgende punt of ôfspiellyst rigele" + +msgid "play from previous mark or playlist entry" +msgstr "Spielje fanôf it foarige punt of ôfspiellyst rigele" + +msgid "please press OK when ready" +msgstr "druk Ok wanneer klear" + +msgid "please wait, loading picture..." +msgstr "plaatsje wurd laden..." + +msgid "previous channel" +msgstr "foariche kanaal" + +msgid "previous channel in history" +msgstr "set foarich kanaal yn skiednis" + +msgid "record" +msgstr "opnimme" + +msgid "recording..." +msgstr "an it opnimmen..." + +msgid "red" +msgstr "" + +msgid "remove a nameserver entry" +msgstr "" + +msgid "remove after this position" +msgstr "nei dizze posysje alles ferwiderje" + +msgid "remove all alternatives" +msgstr "ferwiderje alle alternatieven" + +msgid "remove all new found flags" +msgstr "ferwiderje nij fûn flaggen" + +msgid "remove before this position" +msgstr "foar dizze posysje alles ferwiderje" + +msgid "remove bookmark" +msgstr "boekmerk ferwiderje" + +msgid "remove directory" +msgstr "map ferwiderje" + +msgid "remove entry" +msgstr "ferwiderje yngong" + +msgid "remove from parental protection" +msgstr "ferwiderje út alderlik tasjoch" + +msgid "remove new found flag" +msgstr "ferwiderje nij fun flagge" + +msgid "remove selected satellite" +msgstr "selektearre sat ferwiderje" + +msgid "remove this mark" +msgstr "ferwiderje punt" + +msgid "repeat playlist" +msgstr "ôfspyllyst opnei spylje" + +msgid "repeated" +msgstr "herhelle" + +msgid "rewind to the previous chapter" +msgstr "werom spile nei it foarige haadstik" + +msgid "right" +msgstr "rjochts" + +msgid "save last directory on exit" +msgstr "" + +msgid "save playlist" +msgstr "ofspiellyst opslaan" + +msgid "save playlist on exit" +msgstr "" + +msgid "scan done!" +msgstr "sykjen klear !" + +#, python-format +msgid "scan in progress - %d%% done!" +msgstr "sykjen dwaande - %d%% klear!" + +msgid "scan state" +msgstr "sykjen status" + +msgid "second" +msgstr "seconde" + +msgid "second cable of motorized LNB" +msgstr "twadde kabel fan LNB-motor" + +msgid "seconds" +msgstr "seconden" + +msgid "select" +msgstr "kies" + +msgid "select .NFI flash file" +msgstr "kies .NFI flash triem" + +msgid "select image from server" +msgstr "kies byld fan server" + +msgid "select interface" +msgstr "" + +msgid "select menu entry" +msgstr "" + +msgid "select movie" +msgstr "kies film" + +msgid "select the movie path" +msgstr "kies it film paad" + +msgid "service pin" +msgstr "service pin" + +msgid "setup pin" +msgstr "pin ynstellingen" + +msgid "show DVD main menu" +msgstr "DVD haadmenu sjen litte" + +msgid "show EPG..." +msgstr "EPG sjen litte..." + +msgid "show Infoline" +msgstr "" + +msgid "show all" +msgstr "alles sjen litte" + +msgid "show alternatives" +msgstr "alternatieven sjen litte" + +msgid "show event details" +msgstr "EPG details sjen litte" + +msgid "show extended description" +msgstr "útbreide beskriuwing sjen litte" + +msgid "show first selected tag" +msgstr "" + +msgid "show second selected tag" +msgstr "" + +msgid "show shutdown menu" +msgstr "útskeakel menu sjen litte" + +msgid "show single service EPG..." +msgstr "ien kanaals EPG sjen litte" + +msgid "show tag menu" +msgstr "label menu sjen litte" + +msgid "show transponder info" +msgstr "transponder ynfo sjen litte" + +msgid "shuffle playlist" +msgstr "meitsje willekeurige ôfspiellyst" + +msgid "shutdown" +msgstr "útskeakelje" + +msgid "simple" +msgstr "simpel" + +msgid "skip backward" +msgstr "efterút oerslaan" + +msgid "skip backward (enter time)" +msgstr "efterút oerslaan (tiid ynjaan)" + +msgid "skip forward" +msgstr "foarút oerslaan" + +msgid "skip forward (enter time)" +msgstr "foarút oerslaan (tiid ynjaan)" + +msgid "slide picture in loop" +msgstr "" + +msgid "sort by date" +msgstr "sortearje op datum" + +msgid "spaces (top, between rows, left)" +msgstr "spaties (top, tusken rigels, links)" + +msgid "standard" +msgstr "standert" + +msgid "standby" +msgstr "paraatstand" + +msgid "start cut here" +msgstr "start stik hjirre" + +msgid "start directory" +msgstr "" + +msgid "start timeshift" +msgstr "tiidskowen starte" + +msgid "stereo" +msgstr "stereo" + +msgid "stop PiP" +msgstr "stopje PiP" + +msgid "stop entry" +msgstr "stopje rigele" + +msgid "stop recording" +msgstr "stopje opnimmen" + +msgid "stop timeshift" +msgstr "tiidskowen stopje" + +msgid "swap PiP and main picture" +msgstr "Pip en haad skerm wikselje" + +msgid "switch to bookmarks" +msgstr "skeakelje nei boekmerkers" + +msgid "switch to filelist" +msgstr "skeakelje nei triemlyst" + +msgid "switch to playlist" +msgstr "skeakelje nei ofspiellyst" + +msgid "switch to the next audio track" +msgstr "skeakelje nei it folgende lûd spoor" + +msgid "switch to the next subtitle language" +msgstr "skeakelje nei de folgende undertiteling taal" + +msgid "text" +msgstr "tekst" + +msgid "textcolor" +msgstr "" + +msgid "this recording" +msgstr "dit opnimmen" + +msgid "this service is protected by a parental control pin" +msgstr "dit kanaal is net beskikber troch it alderlik tasjoch." + +msgid "toggle a cut mark at the current position" +msgstr "merker oan/út op dizze posysje" + +msgid "toggle time, chapter, audio, subtitle info" +msgstr "tiid, haadstik, lûd en undertiteling ynfo omskeakelje" + +msgid "unconfirmed" +msgstr "net befestigt" + +msgid "unknown service" +msgstr "unbeneame kanaal" + +msgid "until restart" +msgstr "oant nijstart ta" + +msgid "user defined" +msgstr "brûkers ynstelling" + +msgid "vertical" +msgstr "ferticaal" + +msgid "view extensions..." +msgstr "lit útbreidingen sjen..." + +msgid "view recordings..." +msgstr "lit opname triemen sjen..." + +msgid "wait for ci..." +msgstr "wachtsje op ci..." + +msgid "wait for mmi..." +msgstr "wachtsje op mmi" + +msgid "waiting" +msgstr "oan it wachtsjen" + +msgid "weekly" +msgstr "wikeliks" + +msgid "whitelist" +msgstr "wyte lyst" + +msgid "year" +msgstr "jier" + +msgid "yellow" +msgstr "" + +msgid "yes" +msgstr "ja" + +msgid "yes (keep feeds)" +msgstr "ja (feeds hâlde)" + +msgid "" +"your dreambox might be unusable now. Please consult the manual for further " +"assistance before rebooting your dreambox." +msgstr "" +"jo Dreambox is miskien no net brûkber. sjoch yn de hanlieding foar jo jo " +"Dreambox opnij starte." + +msgid "zap" +msgstr "knip" + +msgid "zapped" +msgstr "knipt" -- cgit v1.2.3 From bf083763c6d0fb1797e574696c2bda82ab481c1a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Wed, 26 Nov 2008 14:57:43 +0100 Subject: update da language --- po/da.po | 80 ++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/po/da.po b/po/da.po index 6939da56..d978285c 100644 --- a/po/da.po +++ b/po/da.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-26 13:07+0100\n" -"PO-Revision-Date: 2008-11-25 07:29+0100\n" +"POT-Creation-Date: 2008-11-26 14:56+0100\n" +"PO-Revision-Date: 2008-11-26 14:22+0100\n" "Last-Translator: Ingmar Jørgensen \n" "Language-Team: jazzydane \n" "MIME-Version: 1.0\n" @@ -1180,7 +1180,7 @@ msgid "Execution finished!!" msgstr "Kommandoen udført!!" msgid "Exif" -msgstr "" +msgstr "Afslut" msgid "Exit" msgstr "Afslut" @@ -1271,7 +1271,7 @@ msgid "Frame repeat count during non-smooth winding" msgstr "Billed gentagelses tæller ved hurtig spoling" msgid "Frame size in full view" -msgstr "" +msgstr "Billed størrelse i fuld " msgid "French" msgstr "Fransk" @@ -1295,7 +1295,7 @@ msgid "Friday" msgstr "Fredag" msgid "Frisian" -msgstr "" +msgstr "Frisisk" msgid "Fritz!Box FON IP address" msgstr "Fritz!Box TELEFON IP adresse" @@ -1796,7 +1796,7 @@ msgstr "" "HDD ikke initialiseret!." msgid "No Networks found" -msgstr "" +msgstr "Ingen netværk fundet" msgid "No backup needed" msgstr "Ingen backup nødvendig" @@ -1832,7 +1832,7 @@ msgid "No satellite frontend found!!" msgstr "Ingen satellit frontend fundet!!" msgid "No tags are set on these movies." -msgstr "" +msgstr "Ingen tags er sat på disse film" msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Ingen Tuner er konfigureret til brug af diseqc Motor!" @@ -2015,7 +2015,7 @@ msgid "PiPSetup" msgstr "PiP Opsætning" msgid "PicturePlayer" -msgstr "" +msgstr "Billed afspiller" #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" @@ -2064,6 +2064,8 @@ msgid "" "Please disconnect all USB devices from your Dreambox and (re-)attach the " "target USB stick (minimum size is 64 MB) now!" msgstr "" +"Fjern venligst alle USB enheder fra din Dreambox og (gen-)indsæt mål USB " +"sticken (minimum størrelse 64 MB) nu!" msgid "Please do not change any values unless you know what you are doing!" msgstr "Venligst ikke ændre værdier hvis du ikke ved hvad du gør!" @@ -2121,7 +2123,7 @@ msgid "Please select a subservice..." msgstr "Vælg venligst en underkanal..." msgid "Please select tag to filter..." -msgstr "" +msgstr "Vælg venligst tag til filtrering..." msgid "Please select target directory or medium" msgstr "Vælg venligst destinations mappe eller media" @@ -2935,13 +2937,13 @@ msgid "Table of content for collection" msgstr "Indholdsfortegnelse for kollektion" msgid "Tag 1" -msgstr "" +msgstr "Tag 1" msgid "Tag 2" -msgstr "" +msgstr "Tag 2" msgid "Tags" -msgstr "" +msgstr "Tags" msgid "Terrestrial" msgstr "DVB T" @@ -2978,6 +2980,8 @@ 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 er nu bootbar. Vil du downloade det seneste image fra feed " +"serveren og gemme det på sticken?" msgid "The backup failed. Please choose a different backup location." msgstr "Backup har slået fejl. Vælg en anden måde at lave backup på." @@ -3187,7 +3191,7 @@ msgid "Thu" msgstr "Tor" msgid "Thumbnails" -msgstr "" +msgstr "Miniaturbilleder" msgid "Thursday" msgstr "Torsdag" @@ -3239,7 +3243,7 @@ msgid "Timeshift not possible!" msgstr "Timeskift ikke mulig!." msgid "Timeshift path..." -msgstr "" +msgstr "Timeshift stien..." msgid "Timezone" msgstr "Tidszone" @@ -3264,6 +3268,12 @@ msgid "" "for 10 seconds.\n" "3) Wait for bootup and follow instructions of the wizard." msgstr "" +"Du skal følge disse trin, for at opdatere din Dreambox software:\n" +"1) Sluk din box med afbryderknappen på bagsiden og indsæt din bootbare USB " +"stick.\n" +"2) Tænd igen på afbryderknappen og samtidig NED knappen på forsiden inde i " +"10 sekunder.\n" +"3) Afvent bootup og følg instruktionerne fra hjælperen på skærmen." msgid "Today" msgstr "Idag" @@ -3353,10 +3363,10 @@ msgid "USB Stick" msgstr "USB Stick" msgid "USB stick wizard" -msgstr "" +msgstr "USB stick hjælper" msgid "Ukrainian" -msgstr "" +msgstr "Ukrainsk" msgid "" "Unable to complete filesystem check.\n" @@ -3403,7 +3413,7 @@ msgid "Upgrading Dreambox... Please wait" msgstr "Opdaterer Dreambox... Vent venligst" msgid "Use" -msgstr "" +msgstr "Brug" msgid "Use DHCP" msgstr "Brug (DHCP)" @@ -3606,7 +3616,7 @@ msgid "Where do you want to backup your settings?" msgstr "Hvor vil du lave en kopi af dine indstillinger?" msgid "Where to save temporary timeshift recordings?" -msgstr "" +msgstr "Hvor skal midleridige timeshift optagelser gemmes?" msgid "Wireless" msgstr "Trådløst" @@ -3905,19 +3915,19 @@ msgid "background image" msgstr "baggrunds billede" msgid "backgroundcolor" -msgstr "" +msgstr "baggrundsfarve" msgid "better" msgstr "Bedre" msgid "black" -msgstr "" +msgstr "sort" msgid "blacklist" msgstr "Sortliste" msgid "blue" -msgstr "" +msgstr "blå" #, python-format msgid "burn audio track (%s)" @@ -3978,7 +3988,7 @@ msgid "delete cut" msgstr "Slet klip" msgid "delete file" -msgstr "" +msgstr "slet fil" msgid "delete playlist entry" msgstr "Slette spilleliste indhold" @@ -4083,7 +4093,7 @@ msgid "failed" msgstr "mislykkedes" msgid "fileformats (BMP, PNG, JPG, GIF)" -msgstr "" +msgstr "fil formater (BMP, PNG, JPG, GIF)" msgid "filename" msgstr "fil navn" @@ -4110,7 +4120,7 @@ msgid "go to standby" msgstr "Gå til Standby" msgid "green" -msgstr "" +msgstr "grøn" msgid "headline" msgstr "overskrift" @@ -4122,7 +4132,7 @@ msgid "help..." msgstr "Hjælp..." msgid "hidden network" -msgstr "" +msgstr "skjult netværk" msgid "hide extended description" msgstr "Skjule udvidet beskrivelse" @@ -4349,7 +4359,7 @@ msgid "recording..." msgstr "Optager..." msgid "red" -msgstr "" +msgstr "rød" msgid "remove a nameserver entry" msgstr "fjern en navneserver angivelse" @@ -4400,13 +4410,13 @@ msgid "right" msgstr "Højre" msgid "save last directory on exit" -msgstr "" +msgstr "gem seneste mappe ved afbrydelse" msgid "save playlist" msgstr "Gem spilleliste" msgid "save playlist on exit" -msgstr "" +msgstr "gem afspilningsliste ved afbrydelse" msgid "scan done!" msgstr "Søgning slut!" @@ -4461,7 +4471,7 @@ msgid "show EPG..." msgstr "Vis EPG..." msgid "show Infoline" -msgstr "" +msgstr "vis infoinje" msgid "show all" msgstr "Vis alle" @@ -4476,10 +4486,10 @@ msgid "show extended description" msgstr "Vis udvidet beskrivelse" msgid "show first selected tag" -msgstr "" +msgstr "vis første valgte tag" msgid "show second selected tag" -msgstr "" +msgstr "vis anden valgte tag" msgid "show shutdown menu" msgstr "Vise afbryde menu" @@ -4515,7 +4525,7 @@ msgid "skip forward (enter time)" msgstr "Skip fremad (skriv tiden)" msgid "slide picture in loop" -msgstr "" +msgstr "vis billeder i sløjfe" msgid "sort by date" msgstr "Sorter på Dato" @@ -4533,7 +4543,7 @@ msgid "start cut here" msgstr "Start klip her" msgid "start directory" -msgstr "" +msgstr "starrt mappe" msgid "start timeshift" msgstr "Start timeskift" @@ -4575,7 +4585,7 @@ msgid "text" msgstr "Tekst" msgid "textcolor" -msgstr "" +msgstr "tekstfarve" msgid "this recording" msgstr "Denne optagelse" @@ -4629,7 +4639,7 @@ msgid "year" msgstr "år" msgid "yellow" -msgstr "" +msgstr "gul" msgid "yes" msgstr "Ja" -- cgit v1.2.3 From 57de025ef5fad34e352ef0f4428dafb898af680c Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Wed, 26 Nov 2008 14:57:43 +0100 Subject: update da language --- po/da.po | 80 ++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/po/da.po b/po/da.po index 6939da56..d978285c 100644 --- a/po/da.po +++ b/po/da.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-26 13:07+0100\n" -"PO-Revision-Date: 2008-11-25 07:29+0100\n" +"POT-Creation-Date: 2008-11-26 14:56+0100\n" +"PO-Revision-Date: 2008-11-26 14:22+0100\n" "Last-Translator: Ingmar Jørgensen \n" "Language-Team: jazzydane \n" "MIME-Version: 1.0\n" @@ -1180,7 +1180,7 @@ msgid "Execution finished!!" msgstr "Kommandoen udført!!" msgid "Exif" -msgstr "" +msgstr "Afslut" msgid "Exit" msgstr "Afslut" @@ -1271,7 +1271,7 @@ msgid "Frame repeat count during non-smooth winding" msgstr "Billed gentagelses tæller ved hurtig spoling" msgid "Frame size in full view" -msgstr "" +msgstr "Billed størrelse i fuld " msgid "French" msgstr "Fransk" @@ -1295,7 +1295,7 @@ msgid "Friday" msgstr "Fredag" msgid "Frisian" -msgstr "" +msgstr "Frisisk" msgid "Fritz!Box FON IP address" msgstr "Fritz!Box TELEFON IP adresse" @@ -1796,7 +1796,7 @@ msgstr "" "HDD ikke initialiseret!." msgid "No Networks found" -msgstr "" +msgstr "Ingen netværk fundet" msgid "No backup needed" msgstr "Ingen backup nødvendig" @@ -1832,7 +1832,7 @@ msgid "No satellite frontend found!!" msgstr "Ingen satellit frontend fundet!!" msgid "No tags are set on these movies." -msgstr "" +msgstr "Ingen tags er sat på disse film" msgid "No tuner is configured for use with a diseqc positioner!" msgstr "Ingen Tuner er konfigureret til brug af diseqc Motor!" @@ -2015,7 +2015,7 @@ msgid "PiPSetup" msgstr "PiP Opsætning" msgid "PicturePlayer" -msgstr "" +msgstr "Billed afspiller" #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" @@ -2064,6 +2064,8 @@ msgid "" "Please disconnect all USB devices from your Dreambox and (re-)attach the " "target USB stick (minimum size is 64 MB) now!" msgstr "" +"Fjern venligst alle USB enheder fra din Dreambox og (gen-)indsæt mål USB " +"sticken (minimum størrelse 64 MB) nu!" msgid "Please do not change any values unless you know what you are doing!" msgstr "Venligst ikke ændre værdier hvis du ikke ved hvad du gør!" @@ -2121,7 +2123,7 @@ msgid "Please select a subservice..." msgstr "Vælg venligst en underkanal..." msgid "Please select tag to filter..." -msgstr "" +msgstr "Vælg venligst tag til filtrering..." msgid "Please select target directory or medium" msgstr "Vælg venligst destinations mappe eller media" @@ -2935,13 +2937,13 @@ msgid "Table of content for collection" msgstr "Indholdsfortegnelse for kollektion" msgid "Tag 1" -msgstr "" +msgstr "Tag 1" msgid "Tag 2" -msgstr "" +msgstr "Tag 2" msgid "Tags" -msgstr "" +msgstr "Tags" msgid "Terrestrial" msgstr "DVB T" @@ -2978,6 +2980,8 @@ 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 er nu bootbar. Vil du downloade det seneste image fra feed " +"serveren og gemme det på sticken?" msgid "The backup failed. Please choose a different backup location." msgstr "Backup har slået fejl. Vælg en anden måde at lave backup på." @@ -3187,7 +3191,7 @@ msgid "Thu" msgstr "Tor" msgid "Thumbnails" -msgstr "" +msgstr "Miniaturbilleder" msgid "Thursday" msgstr "Torsdag" @@ -3239,7 +3243,7 @@ msgid "Timeshift not possible!" msgstr "Timeskift ikke mulig!." msgid "Timeshift path..." -msgstr "" +msgstr "Timeshift stien..." msgid "Timezone" msgstr "Tidszone" @@ -3264,6 +3268,12 @@ msgid "" "for 10 seconds.\n" "3) Wait for bootup and follow instructions of the wizard." msgstr "" +"Du skal følge disse trin, for at opdatere din Dreambox software:\n" +"1) Sluk din box med afbryderknappen på bagsiden og indsæt din bootbare USB " +"stick.\n" +"2) Tænd igen på afbryderknappen og samtidig NED knappen på forsiden inde i " +"10 sekunder.\n" +"3) Afvent bootup og følg instruktionerne fra hjælperen på skærmen." msgid "Today" msgstr "Idag" @@ -3353,10 +3363,10 @@ msgid "USB Stick" msgstr "USB Stick" msgid "USB stick wizard" -msgstr "" +msgstr "USB stick hjælper" msgid "Ukrainian" -msgstr "" +msgstr "Ukrainsk" msgid "" "Unable to complete filesystem check.\n" @@ -3403,7 +3413,7 @@ msgid "Upgrading Dreambox... Please wait" msgstr "Opdaterer Dreambox... Vent venligst" msgid "Use" -msgstr "" +msgstr "Brug" msgid "Use DHCP" msgstr "Brug (DHCP)" @@ -3606,7 +3616,7 @@ msgid "Where do you want to backup your settings?" msgstr "Hvor vil du lave en kopi af dine indstillinger?" msgid "Where to save temporary timeshift recordings?" -msgstr "" +msgstr "Hvor skal midleridige timeshift optagelser gemmes?" msgid "Wireless" msgstr "Trådløst" @@ -3905,19 +3915,19 @@ msgid "background image" msgstr "baggrunds billede" msgid "backgroundcolor" -msgstr "" +msgstr "baggrundsfarve" msgid "better" msgstr "Bedre" msgid "black" -msgstr "" +msgstr "sort" msgid "blacklist" msgstr "Sortliste" msgid "blue" -msgstr "" +msgstr "blå" #, python-format msgid "burn audio track (%s)" @@ -3978,7 +3988,7 @@ msgid "delete cut" msgstr "Slet klip" msgid "delete file" -msgstr "" +msgstr "slet fil" msgid "delete playlist entry" msgstr "Slette spilleliste indhold" @@ -4083,7 +4093,7 @@ msgid "failed" msgstr "mislykkedes" msgid "fileformats (BMP, PNG, JPG, GIF)" -msgstr "" +msgstr "fil formater (BMP, PNG, JPG, GIF)" msgid "filename" msgstr "fil navn" @@ -4110,7 +4120,7 @@ msgid "go to standby" msgstr "Gå til Standby" msgid "green" -msgstr "" +msgstr "grøn" msgid "headline" msgstr "overskrift" @@ -4122,7 +4132,7 @@ msgid "help..." msgstr "Hjælp..." msgid "hidden network" -msgstr "" +msgstr "skjult netværk" msgid "hide extended description" msgstr "Skjule udvidet beskrivelse" @@ -4349,7 +4359,7 @@ msgid "recording..." msgstr "Optager..." msgid "red" -msgstr "" +msgstr "rød" msgid "remove a nameserver entry" msgstr "fjern en navneserver angivelse" @@ -4400,13 +4410,13 @@ msgid "right" msgstr "Højre" msgid "save last directory on exit" -msgstr "" +msgstr "gem seneste mappe ved afbrydelse" msgid "save playlist" msgstr "Gem spilleliste" msgid "save playlist on exit" -msgstr "" +msgstr "gem afspilningsliste ved afbrydelse" msgid "scan done!" msgstr "Søgning slut!" @@ -4461,7 +4471,7 @@ msgid "show EPG..." msgstr "Vis EPG..." msgid "show Infoline" -msgstr "" +msgstr "vis infoinje" msgid "show all" msgstr "Vis alle" @@ -4476,10 +4486,10 @@ msgid "show extended description" msgstr "Vis udvidet beskrivelse" msgid "show first selected tag" -msgstr "" +msgstr "vis første valgte tag" msgid "show second selected tag" -msgstr "" +msgstr "vis anden valgte tag" msgid "show shutdown menu" msgstr "Vise afbryde menu" @@ -4515,7 +4525,7 @@ msgid "skip forward (enter time)" msgstr "Skip fremad (skriv tiden)" msgid "slide picture in loop" -msgstr "" +msgstr "vis billeder i sløjfe" msgid "sort by date" msgstr "Sorter på Dato" @@ -4533,7 +4543,7 @@ msgid "start cut here" msgstr "Start klip her" msgid "start directory" -msgstr "" +msgstr "starrt mappe" msgid "start timeshift" msgstr "Start timeskift" @@ -4575,7 +4585,7 @@ msgid "text" msgstr "Tekst" msgid "textcolor" -msgstr "" +msgstr "tekstfarve" msgid "this recording" msgstr "Denne optagelse" @@ -4629,7 +4639,7 @@ msgid "year" msgstr "år" msgid "yellow" -msgstr "" +msgstr "gul" msgid "yes" msgstr "Ja" -- cgit v1.2.3 From 9846407eaa878cb717ae15faba55a13079b2c212 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 1 Dec 2008 20:30:11 +0100 Subject: graphmultiepg: fix crash when press red on channel without epg --- lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index 1af90f13..7f422c96 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -489,7 +489,8 @@ class GraphMultiEPG(Screen): if self.zapFunc and self["key_red"].getText() == "Zap": self.closeRecursive = True ref = self["list"].getCurrent()[1] - self.zapFunc(ref.ref) + if ref: + self.zapFunc(ref.ref) def eventSelected(self): self.infoKeyPressed() -- cgit v1.2.3 From 34c1ccf6eaef6f2e8535cb3c0cbe6390835086ef Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 1 Dec 2008 20:30:34 +0100 Subject: graphmultiepg: also show plugin in extensions menu --- lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py index 21d1bfe8..0ebcafca 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py @@ -93,4 +93,5 @@ def main(session, servicelist, **kwargs): def Plugins(**kwargs): name = _("Graphical Multi EPG") descr = _("A graphical EPG for all services of an specific bouquet") - return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main) ] + return [ PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, fnc=main), + PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main) ] -- cgit v1.2.3 From 4030160e538a616edfd896c5cf6481bb458aaabe Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 2 Dec 2008 00:07:43 +0100 Subject: fix disc handling for /dev/discs/disc in fstab ... --- lib/python/Components/Harddisk.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/python/Components/Harddisk.py b/lib/python/Components/Harddisk.py index f7c3a7cb..febd16dd 100644 --- a/lib/python/Components/Harddisk.py +++ b/lib/python/Components/Harddisk.py @@ -19,20 +19,22 @@ class Harddisk: s_minor = int(tmp[1]) for disc in listdir("/dev/discs"): path = readlink('/dev/discs/'+disc) - devidex = '/dev'+path[2:]+'/' - disc = devidex+'disc' + devidex = '/dev/discs/'+disc+'/' + devidex2 = '/dev'+path[2:]+'/' + disc = devidex2+'disc' ret = stat(disc).st_rdev if s_major == major(ret) and s_minor == minor(ret): self.devidex = devidex - print "new Harddisk", device, self.devidex + self.devidex2 = devidex2 + print "new Harddisk", device, '->', self.devidex, '->', self.devidex2 break def __lt__(self, ob): return self.device < ob.device def bus(self): - ide_cf = self.device.find("hd") == 0 and self.devidex.find("host0") == -1 # 7025 specific - internal = self.device.find("hd") == 0 and self.devidex + ide_cf = self.device.find("hd") == 0 and self.devidex2.find("host0") == -1 # 7025 specific + internal = self.device.find("hd") == 0 if ide_cf: ret = "External (CF)" elif internal: -- cgit v1.2.3 From 819285a4572823e343f0d1ab88e2c68c2caf2677 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 2 Dec 2008 00:14:00 +0100 Subject: add "divx" as known file extension --- lib/python/Components/FileList.py | 1 + lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 2 +- lib/service/servicemp3.cpp | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/python/Components/FileList.py b/lib/python/Components/FileList.py index e028ec3a..231fde2f 100644 --- a/lib/python/Components/FileList.py +++ b/lib/python/Components/FileList.py @@ -21,6 +21,7 @@ EXTENSIONS = { "bmp": "picture", "ts": "movie", "avi": "movie", + "divx": "movie", "mpg": "movie", "mpeg": "movie", "mkv": "movie", diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 607294ba..41e6ad18 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -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|mkv|mp4|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") + self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|mp4|dat|flac|divx)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") self["filelist"] = self.filelist self.playlist = MyPlayList() diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 017c58f0..9c1972d7 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -37,6 +37,7 @@ eServiceFactoryMP3::eServiceFactoryMP3() extensions.push_back("wave"); extensions.push_back("mkv"); extensions.push_back("avi"); + extensions.push_back("divx"); extensions.push_back("dat"); extensions.push_back("flac"); extensions.push_back("mp4"); @@ -207,7 +208,7 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp sourceinfo.containertype = ctMPEGTS; else if ( strcasecmp(ext, ".mkv") == 0 ) sourceinfo.containertype = ctMKV; - else if ( strcasecmp(ext, ".avi") == 0 ) + else if ( strcasecmp(ext, ".avi") == 0 || strcasecmp(ext, ".divx") == 0) sourceinfo.containertype = ctAVI; else if ( strcasecmp(ext, ".mp4") == 0 ) sourceinfo.containertype = ctMP4; -- cgit v1.2.3 From a9f7393e1d00eb89b8282aae0ddc4f6da33d9ca1 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 2 Dec 2008 15:16:49 +0100 Subject: add new after record timer event behavior "auto".. and use it as default --- Navigation.py | 4 ++-- RecordTimer.py | 29 ++++++++++++++++++++++++++--- lib/python/Screens/TimerEntry.py | 16 +++++++++++++--- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/Navigation.py b/Navigation.py index 42733cb2..715e886b 100644 --- a/Navigation.py +++ b/Navigation.py @@ -11,7 +11,7 @@ import ServiceReference # TODO: remove pNavgation, eNavigation and rewrite this stuff in python. class Navigation: - def __init__(self): + def __init__(self, nextRecordTimerAfterEventActionAuto=False): if NavigationInstance.instance is not None: raise NavigationInstance.instance @@ -33,7 +33,7 @@ class Navigation: clearFPWasTimerWakeup() if getFPWasTimerWakeup(): # sanity check to detect if the FP driver is working correct! print "buggy fp driver detected!!! please update drivers.... ignore timer wakeup!" - elif len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360: + elif nextRecordTimerAfterEventActionAuto and (len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360): if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling self.SleepTimer = SleepTimer.SleepTimer() diff --git a/RecordTimer.py b/RecordTimer.py index 28b878a1..cac475d6 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -47,6 +47,7 @@ class AFTEREVENT: NONE = 0 STANDBY = 1 DEEPSTANDBY = 2 + AUTO = 3 # please do not translate log messages class RecordTimerEntry(timer.TimerEntry, object): @@ -91,7 +92,7 @@ class RecordTimerEntry(timer.TimerEntry, object): Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes) ################################################################# - def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None, tags = None): + def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.AUTO, checkOldTimers = False, dirname = None, tags = None): timer.TimerEntry.__init__(self, int(begin), int(end)) if checkOldTimers == True: @@ -361,7 +362,12 @@ def createTimer(xml): disabled = long(xml.getAttribute("disabled") or "0") justplay = long(xml.getAttribute("justplay") or "0") afterevent = str(xml.getAttribute("afterevent") or "nothing") - afterevent = { "nothing": AFTEREVENT.NONE, "standby": AFTEREVENT.STANDBY, "deepstandby": AFTEREVENT.DEEPSTANDBY }[afterevent] + afterevent = { + "nothing": AFTEREVENT.NONE, + "standby": AFTEREVENT.STANDBY, + "deepstandby": AFTEREVENT.DEEPSTANDBY, + "auto": AFTEREVENT.AUTO + }[afterevent] if xml.hasAttribute("eit") and xml.getAttribute("eit") != "None": eit = long(xml.getAttribute("eit")) else: @@ -493,7 +499,12 @@ class RecordTimer(timer.Timer): list.append(' repeated="' + str(int(timer.repeated)) + '"') list.append(' name="' + str(stringToXML(timer.name)) + '"') list.append(' description="' + str(stringToXML(timer.description)) + '"') - list.append(' afterevent="' + str(stringToXML({ AFTEREVENT.NONE: "nothing", AFTEREVENT.STANDBY: "standby", AFTEREVENT.DEEPSTANDBY: "deepstandby" }[timer.afterEvent])) + '"') + list.append(' afterevent="' + str(stringToXML({ + AFTEREVENT.NONE: "nothing", + AFTEREVENT.STANDBY: "standby", + AFTEREVENT.DEEPSTANDBY: "deepstandby", + AFTEREVENT.AUTO: "auto" + }[timer.afterEvent])) + '"') if timer.eit is not None: list.append(' eit="' + str(timer.eit) + '"') if timer.dirname is not None: @@ -538,6 +549,18 @@ class RecordTimer(timer.Timer): return timer.begin return -1 + def isNextRecordAfterEventActionAuto(self): + now = time.time() + t = None + for timer in self.timer_list: + if timer.justplay or timer.begin < now: + continue + if t is None or t.begin == timer.begin: + t = timer + if t.afterEvent == AFTEREVENT.AUTO: + return True + return False + def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit dosave=False aufgerufen timersanitycheck = TimerSanityCheck(self.timer_list,entry) if not timersanitycheck.check(): diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index 1774061d..be8b5240 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -46,7 +46,12 @@ class TimerEntry(Screen, ConfigListScreen): def createConfig(self): justplay = self.timer.justplay - afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent] + afterevent = { + AFTEREVENT.NONE: "nothing", + AFTEREVENT.DEEPSTANDBY: "deepstandby", + AFTEREVENT.STANDBY: "standby", + AFTEREVENT.AUTO: "auto" + }[self.timer.afterEvent] weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"] @@ -84,7 +89,7 @@ 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"))], default = afterevent) + self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("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) @@ -250,7 +255,12 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.description = self.timerentry_description.value self.timer.justplay = self.timerentry_justplay.value == "zap" self.timer.resetRepeated() - self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value] + self.timer.afterEvent = { + "nothing": AFTEREVENT.NONE, + "deepstandby": AFTEREVENT.DEEPSTANDBY, + "standby": AFTEREVENT.STANDBY, + "auto": AFTEREVENT.AUTO + }[self.timerentry_afterevent.value] self.timer.service_ref = self.timerentry_service_ref self.timer.tags = self.timerentry_tags -- cgit v1.2.3 From 5f5bf69803be617adb7364f61c6eed9fd32d6d14 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 2 Dec 2008 21:39:18 +0100 Subject: add missing change for "add new after record timer event behavior "auto".. and use it as default" --- mytest.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/mytest.py b/mytest.py index 88c035ab..886efab2 100644 --- a/mytest.py +++ b/mytest.py @@ -42,13 +42,14 @@ from skin import readSkin profile("LOAD:Tools") from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE -from Components.config import config, configfile, ConfigText +from Components.config import config, configfile, ConfigText, ConfigYesNo InitFallbackFiles() profile("ReloadProfiles") eDVBDB.getInstance().reloadBouquets() config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi") +config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False) profile("Twisted") try: @@ -415,7 +416,8 @@ def runScreenTest(): plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) profile("Init:Session") - session = Session(desktop = getDesktop(0), summary_desktop = getDesktop(1), navigation = Navigation()) + nav = Navigation(config.misc.isNextRecordTimerAfterEventActionAuto.value) + session = Session(desktop = getDesktop(0), summary_desktop = getDesktop(1), navigation = nav) CiHandler.setSession(session) @@ -464,8 +466,6 @@ def runScreenTest(): profile("RunReactor") profile_final() runReactor() - profile("configfile.save") - configfile.save() profile("wakeup") from time import time @@ -473,25 +473,32 @@ def runScreenTest(): #get currentTime nowTime = time() wakeupList = [ - x for x in - [session.nav.RecordTimer.getNextRecordingTime(), - session.nav.RecordTimer.getNextZapTime(), - plugins.getNextWakeupTime()] - if x != -1 + x for x in ((session.nav.RecordTimer.getNextRecordingTime(), 0, session.nav.RecordTimer.isNextRecordAfterEventActionAuto()), + (session.nav.RecordTimer.getNextZapTime(), 1), + (plugins.getNextWakeupTime(), 2)) + if x[0] != -1 ] wakeupList.sort() + recordTimerWakeupAuto = False if len(wakeupList): startTime = wakeupList.pop(0) - if (startTime - nowTime) < 330: # no time to switch box back on + if (startTime[0] - nowTime) < 330: # no time to switch box back on wptime = nowTime + 30 # so switch back on in 30 seconds else: - wptime = startTime - 300 + wptime = startTime[0] - 300 setFPWakeuptime(wptime) + recordTimerWakeupAuto = startTime[1] == 0 and startTime[2] + config.misc.isNextRecordTimerAfterEventActionAuto.value = recordTimerWakeupAuto + config.misc.isNextRecordTimerAfterEventActionAuto.save() + profile("stopService") session.nav.stopService() profile("nav shutdown") session.nav.shutdown() + profile("configfile.save") + configfile.save() + return 0 profile("Init:skin") -- cgit v1.2.3 From 4543185382dbdd51e0e55092fd616ad5fff1eaba Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 00:35:26 +0100 Subject: frontend.cpp: add SNRdb calculation for Philips TU1216 and Philips CU1216Mk3 --- lib/dvb/frontend.cpp | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index a74e65ca..55be6f9c 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -695,6 +695,12 @@ void eDVBFrontend::timeout() #define INRANGE(X,Y,Z) (((X<=Y) && (Y<=Z))||((Z<=Y) && (Y<=X)) ? 1 : 0) +/* unsigned 32 bit division */ +static inline uint32_t fe_udiv(uint32_t a, uint32_t b) +{ + return (a + b / 2) / b; +} + int eDVBFrontend::readFrontendData(int type) { switch(type) @@ -781,7 +787,7 @@ int eDVBFrontend::readFrontendData(int type) snr_in_db = fval1; } #endif - return (int)(snr_in_db * 100.0); + return (int)(snr_in_db * 100); } else if (strstr(m_description, "Alps BSBE1 C01A") || !strcmp(m_description, "Alps -S(STV0288)")) @@ -831,12 +837,30 @@ int eDVBFrontend::readFrontendData(int type) !strcmp(m_description, "Philips -S") || !strcmp(m_description, "LG -S") ) { - float snr_in_db=(snr-39075)/1764.7; - return (int)(snr_in_db * 100.0); + return (int)((snr-39075)/17.647); } else if (!strcmp(m_description, "Alps BSBE2")) { - return (int)((snr >> 7) * 10.0); - } /* else + return (int)((snr >> 7) * 10); + } else if (!strcmp(m_description, "Philips CU1216Mk3")) + { + int mse = (~snr) & 0xFF; + switch (parm_u_qam_modulation) { + case QAM_16: return fe_udiv(1950000, (32 * mse) + 138) + 1000; + case QAM_32: return fe_udiv(2150000, (40 * mse) + 500) + 1350; + case QAM_64: return fe_udiv(2100000, (40 * mse) + 500) + 1250; + case QAM_128: return fe_udiv(1850000, (38 * mse) + 400) + 1380; + case QAM_256: return fe_udiv(1800000, (100 * mse) + 40) + 2030; + default: break; + } + return 0; + } else if (!strcmp(m_description, "Philips TU1216")) + { + snr = 0xFF - (snr & 0xFF); + if (snr != 0) + return (int)(-100 * (log10(snr) - log10(255))); + return 0; + } +/* else eDebug("no SNR dB calculation for frontendtype %s yet", m_description); */ return 0x12345678; } -- cgit v1.2.3 From 0a2edb202a5a94dc97d016457b841b1eb7df1f02 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 3 Dec 2008 12:04:12 +0100 Subject: allow hardware playback of M4A (AAC) and MP3 audio streams. --- .../Plugins/Extensions/MediaPlayer/plugin.py | 2 +- lib/service/servicemp3.cpp | 254 ++++++++++++++++----- 2 files changed, 192 insertions(+), 64 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 41e6ad18..3d1889b9 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -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|mkv|mp4|dat|flac|divx)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") + self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|mkv|mp4|m4a|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") self["filelist"] = self.filelist self.playlist = MyPlayList() diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 9c1972d7..2d217731 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -16,7 +16,6 @@ #include /* for subtitles */ #include -#include // eServiceFactoryMP3 @@ -41,6 +40,7 @@ eServiceFactoryMP3::eServiceFactoryMP3() extensions.push_back("dat"); extensions.push_back("flac"); extensions.push_back("mp4"); + extensions.push_back("m4a"); sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions); } @@ -186,10 +186,8 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp CONNECT(m_seekTimeout->timeout, eServiceMP3::seekTimeoutCB); CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll); GstElement *source = 0; - - GstElement *decoder = 0, *conv = 0, *flt = 0, *sink = 0; /* for audio */ - - GstElement *audio = 0, *switch_audio = 0, *queue_audio = 0, *video = 0, *queue_video = 0, *videodemux = 0; + GstElement *decoder = 0, *conv = 0, *flt = 0, *parser = 0, *sink = 0; /* for audio */ + GstElement *audio = 0, *switch_audio = 0, *queue_audio = 0, *video = 0, *queue_video = 0, *videodemux = 0, *audiodemux = 0; m_state = stIdle; eDebug("SERVICEMP3 construct!"); @@ -202,25 +200,50 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp ext = filename; sourceStream sourceinfo; + sourceinfo.is_video = FALSE; + sourceinfo.audiotype = atUnknown; if ( (strcasecmp(ext, ".mpeg") && strcasecmp(ext, ".mpg") && strcasecmp(ext, ".vob") && strcasecmp(ext, ".bin") && strcasecmp(ext, ".dat") ) == 0 ) + { sourceinfo.containertype = ctMPEGPS; + sourceinfo.is_video = TRUE; + } else if ( strcasecmp(ext, ".ts") == 0 ) + { sourceinfo.containertype = ctMPEGTS; + sourceinfo.is_video = TRUE; + } else if ( strcasecmp(ext, ".mkv") == 0 ) + { sourceinfo.containertype = ctMKV; + sourceinfo.is_video = TRUE; + } else if ( strcasecmp(ext, ".avi") == 0 || strcasecmp(ext, ".divx") == 0) + { sourceinfo.containertype = ctAVI; + sourceinfo.is_video = TRUE; + } else if ( strcasecmp(ext, ".mp4") == 0 ) + { sourceinfo.containertype = ctMP4; + sourceinfo.is_video = TRUE; + } + else if ( strcasecmp(ext, ".m4a") == 0 ) + { + sourceinfo.containertype = ctMP4; + sourceinfo.audiotype = atAAC; + } + else if ( strcasecmp(ext, ".mp3") == 0 ) + sourceinfo.audiotype = atMP3; else if ( (strncmp(filename, "/autofs/", 8) || strncmp(filename+strlen(filename)-13, "/track-", 7) || strcasecmp(ext, ".wav")) == 0 ) sourceinfo.containertype = ctCDA; if ( strcasecmp(ext, ".dat") == 0 ) + { sourceinfo.containertype = ctVCD; + sourceinfo.is_video = TRUE; + } if ( (strncmp(filename, "http://", 7)) == 0 ) sourceinfo.is_streaming = TRUE; - sourceinfo.is_video = ( sourceinfo.containertype && sourceinfo.containertype != ctCDA ); - eDebug("filename=%s, containertype=%d, is_video=%d, is_streaming=%d", filename, sourceinfo.containertype, sourceinfo.is_video, sourceinfo.is_streaming); int all_ok = 0; @@ -252,10 +275,19 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp if (track > 0) g_object_set (G_OBJECT (source), "track", track, NULL); } - else - sourceinfo.containertype = ctNone; } - if ( !sourceinfo.is_streaming && sourceinfo.containertype != ctCDA ) + else if ( sourceinfo.containertype == ctVCD ) + { + int fd = open(filename,O_RDONLY); + char tmp[128*1024]; + int ret = read(fd, tmp, 128*1024); + close(fd); + if ( ret == -1 ) // this is a "REAL" VCD + source = gst_element_factory_make ("vcdsrc", "vcd-source"); + if (source) + g_object_set (G_OBJECT (source), "device", "/dev/cdroms/cdrom0", NULL); + } + if ( !source && !sourceinfo.is_streaming ) { source = gst_element_factory_make ("filesrc", "file-source"); if (source) @@ -271,7 +303,7 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp audio = gst_element_factory_make("dvbaudiosink", "audiosink"); if (!audio) m_error_message += "failed to create Gstreamer element dvbaudiosink\n"; - + video = gst_element_factory_make("dvbvideosink", "videosink"); if (!video) m_error_message += "failed to create Gstreamer element dvbvideosink\n"; @@ -322,35 +354,102 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp } } else /* is audio */ { - - /* filesrc -> decodebin -> audioconvert -> capsfilter -> alsasink */ - decoder = gst_element_factory_make ("decodebin", "decoder"); - if (!decoder) - m_error_message += "failed to create Gstreamer element decodebin\n"; - - conv = gst_element_factory_make ("audioconvert", "converter"); - if (!conv) - m_error_message += "failed to create Gstreamer element audioconvert\n"; - - flt = gst_element_factory_make ("capsfilter", "flt"); - if (!flt) - m_error_message += "failed to create Gstreamer element capsfilter\n"; - - /* for some reasons, we need to set the sample format to depth/width=16, because auto negotiation doesn't work. */ - /* endianness, however, is not required to be set anymore. */ - if (flt) + std::string demux_type; + switch ( sourceinfo.containertype ) { - GstCaps *caps = gst_caps_new_simple("audio/x-raw-int", /* "endianness", G_TYPE_INT, 4321, */ "depth", G_TYPE_INT, 16, "width", G_TYPE_INT, 16, /*"channels", G_TYPE_INT, 2, */NULL); - g_object_set (G_OBJECT (flt), "caps", caps, NULL); - gst_caps_unref(caps); + case ctMP4: + demux_type = "qtdemux"; + break; + default: + break; + } + if ( demux_type.length() ) + { + audiodemux = gst_element_factory_make(demux_type.c_str(), "audiodemux"); + if (!audiodemux) + m_error_message = "GStreamer plugin " + demux_type + " not available!\n"; + } + switch ( sourceinfo.audiotype ) + { + case atMP3: + { + if ( !audiodemux ) + { + parser = gst_element_factory_make("mp3parse", "audioparse"); + if (!parser) + { + m_error_message += "failed to create Gstreamer element mp3parse\n"; + break; + } + } + sink = gst_element_factory_make("dvbaudiosink", "audiosink"); + if ( !sink ) + m_error_message += "failed to create Gstreamer element dvbaudiosink\n"; + else + all_ok = 1; + break; + } + case atAAC: + { + if ( !audiodemux ) + { + m_error_message += "cannot parse raw AAC audio\n"; + break; + } + sink = gst_element_factory_make("dvbaudiosink", "audiosink"); + if (!sink) + m_error_message += "failed to create Gstreamer element dvbaudiosink\n"; + else + all_ok = 1; + break; + } + case atAC3: + { + if ( !audiodemux ) + { + m_error_message += "cannot parse raw AC3 audio\n"; + break; + } + sink = gst_element_factory_make("dvbaudiosink", "audiosink"); + if ( !sink ) + m_error_message += "failed to create Gstreamer element dvbaudiosink\n"; + else + all_ok = 1; + break; + } + default: + { /* filesrc -> decodebin -> audioconvert -> capsfilter -> alsasink */ + decoder = gst_element_factory_make ("decodebin", "decoder"); + if (!decoder) + m_error_message += "failed to create Gstreamer element decodebin\n"; + + conv = gst_element_factory_make ("audioconvert", "converter"); + if (!conv) + m_error_message += "failed to create Gstreamer element audioconvert\n"; + + flt = gst_element_factory_make ("capsfilter", "flt"); + if (!flt) + m_error_message += "failed to create Gstreamer element capsfilter\n"; + + /* for some reasons, we need to set the sample format to depth/width=16, because auto negotiation doesn't work. */ + /* endianness, however, is not required to be set anymore. */ + if (flt) + { + GstCaps *caps = gst_caps_new_simple("audio/x-raw-int", /* "endianness", G_TYPE_INT, 4321, */ "depth", G_TYPE_INT, 16, "width", G_TYPE_INT, 16, /*"channels", G_TYPE_INT, 2, */NULL); + g_object_set (G_OBJECT (flt), "caps", caps, NULL); + gst_caps_unref(caps); + } + + sink = gst_element_factory_make ("alsasink", "alsa-output"); + if (!sink) + m_error_message += "failed to create Gstreamer element alsasink\n"; + + if (source && decoder && conv && sink) + all_ok = 1; + break; + } } - sink = gst_element_factory_make ("alsasink", "alsa-output"); - if (!sink) - m_error_message += "failed to create Gstreamer element alsasink\n"; - - if (source && decoder && conv && sink) - all_ok = 1; } if (m_gst_pipeline && all_ok) { @@ -386,8 +485,9 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp } gst_bin_add_many(GST_BIN(m_gst_pipeline), source, videodemux, audio, queue_audio, video, queue_video, switch_audio, NULL); - if ( sourceinfo.containertype == ctVCD ) + if ( sourceinfo.containertype == ctVCD && gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source") ) { + eDebug("this is a fake video cd... we use filesrc ! cdxaparse !"); GstElement *cdxaparse = gst_element_factory_make("cdxaparse", "cdxaparse"); gst_bin_add(GST_BIN(m_gst_pipeline), cdxaparse); gst_element_link(source, cdxaparse); @@ -403,29 +503,51 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp } else /* is audio*/ { - queue_audio = gst_element_factory_make("queue", "queue_audio"); - - g_signal_connect (decoder, "new-decoded-pad", G_CALLBACK(gstCBnewPad), this); - g_signal_connect (decoder, "unknown-type", G_CALLBACK(gstCBunknownType), this); - - g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL); - - /* gst_bin will take the 'floating references' */ - gst_bin_add_many (GST_BIN (m_gst_pipeline), - source, queue_audio, decoder, NULL); - - /* in decodebin's case we can just connect the source with the decodebin, and decodebin will take care about id3demux (or whatever is required) */ - gst_element_link_many(source, queue_audio, decoder, NULL); - - /* create audio bin with the audioconverter, the capsfilter and the audiosink */ - audio = gst_bin_new ("audiobin"); - - GstPad *audiopad = gst_element_get_static_pad (conv, "sink"); - gst_bin_add_many(GST_BIN(audio), conv, flt, sink, NULL); - gst_element_link_many(conv, flt, sink, NULL); - gst_element_add_pad(audio, gst_ghost_pad_new ("sink", audiopad)); - gst_object_unref(audiopad); - gst_bin_add (GST_BIN(m_gst_pipeline), audio); + if ( decoder ) + { + queue_audio = gst_element_factory_make("queue", "queue_audio"); + + g_signal_connect (decoder, "new-decoded-pad", G_CALLBACK(gstCBnewPad), this); + g_signal_connect (decoder, "unknown-type", G_CALLBACK(gstCBunknownType), this); + + g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL); + + /* gst_bin will take the 'floating references' */ + gst_bin_add_many (GST_BIN (m_gst_pipeline), + source, queue_audio, decoder, NULL); + + /* in decodebin's case we can just connect the source with the decodebin, and decodebin will take care about id3demux (or whatever is required) */ + gst_element_link_many(source, queue_audio, decoder, NULL); + + /* create audio bin with the audioconverter, the capsfilter and the audiosink */ + audio = gst_bin_new ("audiobin"); + + GstPad *audiopad = gst_element_get_static_pad (conv, "sink"); + gst_bin_add_many(GST_BIN(audio), conv, flt, sink, NULL); + gst_element_link_many(conv, flt, sink, NULL); + gst_element_add_pad(audio, gst_ghost_pad_new ("sink", audiopad)); + gst_object_unref(audiopad); + gst_bin_add (GST_BIN(m_gst_pipeline), audio); + } + else + { + gst_bin_add_many (GST_BIN (m_gst_pipeline), source, sink, NULL); + if ( parser ) + { + gst_bin_add (GST_BIN (m_gst_pipeline), parser); + gst_element_link_many(source, parser, sink, NULL); + } + if ( audiodemux ) + { + gst_bin_add (GST_BIN (m_gst_pipeline), audiodemux); + g_signal_connect(audiodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this); + gst_element_link(source, audiodemux); + eDebug("linked source, audiodemux, sink"); + } + audioStream audio; + audio.type = sourceinfo.audiotype; + m_audioStreams.push_back(audio); + } } } else { @@ -1094,8 +1216,14 @@ void eServiceMP3::gstCBpadAdded(GstElement *decodebin, GstPad *pad, gpointer use } else { - gst_pad_link(pad, gst_element_get_static_pad(gst_bin_get_by_name(pipeline,"queue_audio"), "sink")); - _this->m_audioStreams.push_back(audio); + GstElement *queue_audio = gst_bin_get_by_name(pipeline , "queue_audio"); + if ( queue_audio) + { + gst_pad_link(pad, gst_element_get_static_pad(queue_audio, "sink")); + _this->m_audioStreams.push_back(audio); + } + else + gst_pad_link(pad, gst_element_get_static_pad(gst_bin_get_by_name(pipeline , "audiosink"), "sink")); } } if (g_strrstr(type,"video")) -- cgit v1.2.3 From e68c41e73e309fd57a9a467e6102f3583a523ce8 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 12:07:04 +0100 Subject: add sleeptimer to shutdown menu --- data/menu.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/menu.xml b/data/menu.xml index 369b20e0..6bf5e3f2 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -103,6 +103,7 @@ self.session.openWithCallback(msgClosed, MessageBox, _("When you do a factory re + 2 3 -- cgit v1.2.3 From bd65449944ee0e4aab5acb3da30dd6d4a2b72198 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 15:33:47 +0100 Subject: fix Philips Tu1216 snrdb calculcation --- lib/dvb/frontend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 55be6f9c..b25794f8 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -857,7 +857,7 @@ int eDVBFrontend::readFrontendData(int type) { snr = 0xFF - (snr & 0xFF); if (snr != 0) - return (int)(-100 * (log10(snr) - log10(255))); + return 10 * (int)(-100 * (log10(snr) - log10(255))); return 0; } /* else -- cgit v1.2.3 From 7e94237a4e4ee40e1dff230d1760dcaaba3d90e8 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 16:08:07 +0100 Subject: use cElementTree instead of minidom for xml parsing (thx to Moritz Venn) --- lib/python/Screens/InfoBarGenerics.py | 6 +-- lib/python/Screens/Menu.py | 71 +++++++++++++++-------------------- lib/python/Screens/Setup.py | 43 +++++++++------------ mytest.py | 26 +++++-------- tests/test_timer.py | 6 +-- 5 files changed, 65 insertions(+), 87 deletions(-) diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index b923340c..af29ed4e 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -348,14 +348,14 @@ class InfoBarMenu: def mainMenu(self): print "loading mainmenu XML..." - menu = mdom.childNodes[0] - assert menu.tagName == "menu", "root element in menu must be 'menu'!" + menu = mdom.getroot() + assert menu.tag == "menu", "root element in menu must be 'menu'!" self.session.infobar = self # so we can access the currently active infobar from screens opened from within the mainmenu # at the moment used from the SubserviceSelection - self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu, menu.childNodes) + self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu) def mainMenuClosed(self, *val): self.session.infobar = None diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index 92039b42..93f23dfb 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -9,12 +9,10 @@ from Components.SystemInfo import SystemInfo from Tools.Directories import resolveFilename, SCOPE_SKIN -import xml.dom.minidom +import xml.etree.cElementTree from Screens.Setup import Setup, getSetupTitle -from Tools import XMLTools - # self.setModeTV() # self.setModeRadio() # self.setModeFile() @@ -22,9 +20,7 @@ from Tools import XMLTools # read the menu -menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r') -mdom = xml.dom.minidom.parseString(menufile.read()) -menufile.close() +mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml')) class boundFunction: def __init__(self, fnc, *args): @@ -103,17 +99,17 @@ class Menu(Screen): self.session.openWithCallback(self.menuClosed, Setup, dialog) def addMenu(self, destList, node): - requires = node.getAttribute("requires") + requires = node.get("requires") if requires and not SystemInfo.get(requires, False): return - MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??") - entryID = node.getAttribute("entryID") or "undefined" - weight = node.getAttribute("weight") or 50 - x = node.getAttribute("flushConfigOnClose") + MenuTitle = _(node.get("text", "??").encode("UTF-8")) + entryID = node.get("entryID", "undefined") + weight = node.get("weight", 50) + x = node.get("flushConfigOnClose") if x: - a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes) + a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node) else: - a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes) + a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node) #TODO add check if !empty(node.childNodes) destList.append((MenuTitle, a, entryID, weight)) @@ -126,18 +122,16 @@ class Menu(Screen): self.close(True) def addItem(self, destList, node): - requires = node.getAttribute("requires") + requires = node.get("requires") if requires and not SystemInfo.get(requires, False): return - item_text = node.getAttribute("text").encode("UTF-8") - entryID = node.getAttribute("entryID") or "undefined" - weight = node.getAttribute("weight") or 50 - for x in node.childNodes: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'screen': - module = x.getAttribute("module") or None - screen = x.getAttribute("screen") or None + item_text = node.get("text", "").encode("UTF-8") + entryID = node.get("entryID", "undefined") + weight = node.get("weight", 50) + for x in node: + if x.tag == 'screen': + module = x.get("module") + screen = x.get("screen") if screen is None: screen = module @@ -150,16 +144,16 @@ class Menu(Screen): # check for arguments. they will be appended to the # openDialog call - args = XMLTools.mergeText(x.childNodes) + args = x.text or "" screen += ", " + args destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight)) return - elif x.tagName == 'code': - destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes)), entryID, weight)) + elif x.tag == 'code': + destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight)) return - elif x.tagName == 'setup': - id = x.getAttribute("id") + elif x.tag == 'setup': + id = x.get("id") if item_text == "": item_text = _(getSetupTitle(id)) + "..." else: @@ -169,26 +163,23 @@ class Menu(Screen): destList.append((item_text, self.nothing, entryID, weight)) - def __init__(self, session, parent, childNode): + def __init__(self, session, parent): Screen.__init__(self, session) list = [] menuID = None - for x in childNode: #walk through the actual nodelist - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'item': - item_level = int(x.getAttribute("level") or "0") - + for x in parent: #walk through the actual nodelist + if x.tag == 'item': + item_level = int(x.get("level", 0)) if item_level <= config.usage.setup_level.index: self.addItem(list, x) count += 1 - elif x.tagName == 'menu': + elif x.tag == 'menu': self.addMenu(list, x) count += 1 - elif x.tagName == "id": - menuID = x.getAttribute("val") + elif x.tag == "id": + menuID = x.get("val") count = 0 if menuID is not None: @@ -237,10 +228,10 @@ class Menu(Screen): "9": self.keyNumberGlobal }) - a = parent.getAttribute("title").encode("UTF-8") or None + a = parent.get("title", "").encode("UTF-8") or None a = a and _(a) if a is None: - a = _(parent.getAttribute("text").encode("UTF-8")) + a = _(parent.get("text", "").encode("UTF-8")) self["title"] = StaticText(a) self.menu_title = a diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py index 3ff0b76e..35918b5b 100644 --- a/lib/python/Screens/Setup.py +++ b/lib/python/Screens/Setup.py @@ -6,8 +6,7 @@ from Components.ConfigList import ConfigListScreen from Components.Label import Label from Components.Pixmap import Pixmap -import xml.dom.minidom -from Tools import XMLTools +import xml.etree.cElementTree # FIXME: use resolveFile! # read the setupmenu @@ -17,7 +16,7 @@ try: except: # if not found in the current path, we use the global datadir-path setupfile = file('/usr/share/enigma2/setup.xml', 'r') -setupdom = xml.dom.minidom.parseString(setupfile.read()) +setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() class SetupSummary(Screen): @@ -63,16 +62,12 @@ class Setup(ConfigListScreen, Screen): self["config"].setList(list) def refill(self, list): - xmldata = setupdom.childNodes[0] - entries = xmldata.childNodes - for x in entries: #walk through the actual nodelist - if x.nodeType != xml.dom.minidom.Element.nodeType: + xmldata = setupdom.getroot() + for x in xmldata.findall("setup"): + if x.get("key") != self.setup: continue - elif x.tagName == 'setup': - if x.getAttribute("key") != self.setup: - continue - self.addItems(list, x.childNodes); - self.setup_title = x.getAttribute("title").encode("UTF-8") + self.addItems(list, x); + self.setup_title = x.get("title", "").encode("UTF-8") def __init__(self, session, setup): Screen.__init__(self, session) @@ -118,12 +113,10 @@ class Setup(ConfigListScreen, Screen): def createSummary(self): return SetupSummary - def addItems(self, list, childNode): - for x in childNode: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'item': - item_level = int(x.getAttribute("level") or "0") + def addItems(self, list, parentNode): + for x in parentNode: + if x.tag == 'item': + item_level = int(x.get("level", 0)) if not self.levelChanged in config.usage.setup_level.notifiers: config.usage.setup_level.notifiers.append(self.levelChanged) @@ -132,12 +125,12 @@ class Setup(ConfigListScreen, Screen): if item_level > config.usage.setup_level.index: continue - requires = x.getAttribute("requires") + requires = x.get("requires") if requires and not SystemInfo.get(requires, False): continue; - item_text = _(x.getAttribute("text").encode("UTF-8") or "??") - b = eval(XMLTools.mergeText(x.childNodes)); + item_text = _(x.get("text", "??").encode("UTF-8")) + b = eval(x.text or ""); if b == "": continue #add to configlist @@ -148,8 +141,8 @@ class Setup(ConfigListScreen, Screen): list.append( (item_text, item) ) def getSetupTitle(id): - xmldata = setupdom.childNodes[0].childNodes - for x in XMLTools.elementsWithTag(xmldata, "setup"): - if x.getAttribute("key") == id: - return x.getAttribute("title").encode("UTF-8") + xmldata = setupdom.getroot() + for x in xmldata.findall("setup"): + if x.get("key") == id: + return x.get("title", "").encode("UTF-8") raise "unknown setup id '%s'!" % repr(id) diff --git a/mytest.py b/mytest.py index 886efab2..014f94c9 100644 --- a/mytest.py +++ b/mytest.py @@ -321,7 +321,6 @@ class Session: profile("Standby,PowerKey") import Screens.Standby from Screens.Menu import MainMenu, mdom -import xml.dom.minidom from GlobalActions import globalActionMap class PowerKey: @@ -350,21 +349,16 @@ class PowerKey: self.shutdown() elif action == "show_menu": print "Show shutdown Menu" - menu = mdom.childNodes[0] - for x in menu.childNodes: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'menu': - for y in x.childNodes: - if y.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif y.tagName == 'id': - id = y.getAttribute("val") - if id and id == "shutdown": - self.session.infobar = self - menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x, x.childNodes) - menu_screen.setTitle(_("Standby / Restart")) - return + root = mdom.getroot() + for x in root.findall("menu"): + y = x.find("id") + if y is not None: + id = y.get("val") + if id and id == "shutdown": + self.session.infobar = self + menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x) + menu_screen.setTitle(_("Standby / Restart")) + return def powerdown(self): self.standbyblocked = 0 diff --git a/tests/test_timer.py b/tests/test_timer.py index 565a838b..ea8b0bdb 100644 --- a/tests/test_timer.py +++ b/tests/test_timer.py @@ -24,10 +24,10 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length = # generate a timer to test - import xml.dom.minidom + import xml.etree.cElementTree import RecordTimer - timer = RecordTimer.createTimer(xml.dom.minidom.parseString( + timer = RecordTimer.createTimer(xml.etree.cElementTree.fromstring( """ """ % (at + timer_start, at + timer_start + timer_length, repeat) - ).childNodes[0]) + )) t.record(timer) -- cgit v1.2.3 From 792af02ab9c2242cd15150fe0409418e9652b6fd Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 16:42:23 +0100 Subject: add missing RecordTimer changes for previous xml minidom cleanup --- RecordTimer.py | 125 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 65 insertions(+), 60 deletions(-) diff --git a/RecordTimer.py b/RecordTimer.py index cac475d6..8449a2d2 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -4,7 +4,7 @@ from Tools import Directories, Notifications from Components.config import config import timer -import xml.dom.minidom +import xml.etree.cElementTree from enigma import eEPGCache, getBestPlayableServiceReference, \ eServiceReference, iRecordableService, quitMainloop @@ -17,7 +17,7 @@ import Screens.Standby from time import localtime -from Tools.XMLTools import elementsWithTag, mergeText, stringToXML +from Tools.XMLTools import stringToXML from ServiceReference import ServiceReference # ok, for descriptions etc we have: @@ -354,42 +354,45 @@ class RecordTimerEntry(timer.TimerEntry, object): record_service = property(lambda self: self.__record_service, setRecordService) def createTimer(xml): - begin = int(xml.getAttribute("begin")) - end = int(xml.getAttribute("end")) - serviceref = ServiceReference(xml.getAttribute("serviceref").encode("utf-8")) - description = xml.getAttribute("description").encode("utf-8") - repeated = xml.getAttribute("repeated").encode("utf-8") - disabled = long(xml.getAttribute("disabled") or "0") - justplay = long(xml.getAttribute("justplay") or "0") - afterevent = str(xml.getAttribute("afterevent") or "nothing") + begin = int(xml.get("begin")) + end = int(xml.get("end")) + serviceref = ServiceReference(xml.get("serviceref").encode("utf-8")) + description = xml.get("description").encode("utf-8") + repeated = xml.get("repeated").encode("utf-8") + disabled = long(xml.get("disabled") or "0") + justplay = long(xml.get("justplay") or "0") + afterevent = str(xml.get("afterevent") or "nothing") afterevent = { "nothing": AFTEREVENT.NONE, "standby": AFTEREVENT.STANDBY, "deepstandby": AFTEREVENT.DEEPSTANDBY, "auto": AFTEREVENT.AUTO }[afterevent] - if xml.hasAttribute("eit") and xml.getAttribute("eit") != "None": - eit = long(xml.getAttribute("eit")) + eit = xml.get("eit") + if eit and eit != "None": + eit = long(eit); else: eit = None - if xml.hasAttribute("location") and xml.getAttribute("location") != "None": - location = xml.getAttribute("location").encode("utf-8") + location = xml.get("location") + if location and location != "None": + location = location.encode("utf-8") else: location = None - if xml.hasAttribute("tags") and xml.getAttribute("tags"): - tags = xml.getAttribute("tags").encode("utf-8").split(' ') + tags = xml.get("tags") + if tags and tags != "None": + tags = tags.encode("utf-8").split(' ') else: tags = None - name = xml.getAttribute("name").encode("utf-8") - #filename = xml.getAttribute("filename").encode("utf-8") + name = xml.get("name").encode("utf-8") + #filename = xml.get("filename").encode("utf-8") entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags) entry.repeated = int(repeated) - for l in elementsWithTag(xml.childNodes, "log"): - time = int(l.getAttribute("time")) - code = int(l.getAttribute("code")) - msg = mergeText(l.childNodes).strip().encode("utf-8") + for l in xml.findall("log"): + time = int(l.get("time")) + code = int(l.get("code")) + msg = l.text.strip().encode("utf-8") entry.log_entries.append((time, code, msg)) return entry @@ -415,8 +418,8 @@ class RecordTimer(timer.Timer): def loadTimer(self): # TODO: PATH! try: - doc = xml.dom.minidom.parse(self.Filename) - except xml.parsers.expat.ExpatError: + doc = xml.etree.cElementTree.parse(self.Filename) + except SyntaxError: from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox @@ -426,15 +429,18 @@ class RecordTimer(timer.Timer): try: import os os.rename(self.Filename, self.Filename + "_old") - except IOError: + except (IOError, OSError): print "renaming broken timer failed" return + except IOError: + print "timers.xml not found!" + return - root = doc.childNodes[0] + root = doc.getroot() # put out a message when at least one timer overlaps checkit = True - for timer in elementsWithTag(root.childNodes, "timer"): + for timer in root.findall("timer"): newTimer = createTimer(timer) if (self.record(newTimer, True, True) is not None) and (checkit == True): from Tools.Notifications import AddPopup @@ -443,45 +449,44 @@ class RecordTimer(timer.Timer): checkit = False # at moment it is enough when the message is displayed one time def saveTimer(self): - #doc = xml.dom.minidom.Document() - #root_element = doc.createElement('timers') - #doc.appendChild(root_element) - #root_element.appendChild(doc.createTextNode("\n")) - + #root_element = xml.etree.cElementTree.Element('timers') + #root_element.text = "\n" + #for timer in self.timer_list + self.processed_timers: # some timers (instant records) don't want to be saved. # skip them #if timer.dontSave: #continue - #t = doc.createTextNode("\t") - #root_element.appendChild(t) - #t = doc.createElement('timer') - #t.setAttribute("begin", str(int(timer.begin))) - #t.setAttribute("end", str(int(timer.end))) - #t.setAttribute("serviceref", str(timer.service_ref)) - #t.setAttribute("repeated", str(timer.repeated)) - #t.setAttribute("name", timer.name) - #t.setAttribute("description", timer.description) - #t.setAttribute("eit", str(timer.eit)) - + #t = xml.etree.cElementTree.SubElement(root_element, 'timers') + #t.set("begin", str(int(timer.begin))) + #t.set("end", str(int(timer.end))) + #t.set("serviceref", str(timer.service_ref)) + #t.set("repeated", str(timer.repeated)) + #t.set("name", timer.name) + #t.set("description", timer.description) + #t.set("afterevent", str({ + # AFTEREVENT.NONE: "nothing", + # AFTEREVENT.STANDBY: "standby", + # AFTEREVENT.DEEPSTANDBY: "deepstandby", + # AFTEREVENT.AUTO: "auto"})) + #if timer.eit is not None: + # t.set("eit", str(timer.eit)) + #if timer.dirname is not None: + # t.set("location", str(timer.dirname)) + #t.set("disabled", str(int(timer.disabled))) + #t.set("justplay", str(int(timer.justplay))) + #t.text = "\n" + #t.tail = "\n" + #for time, code, msg in timer.log_entries: - #t.appendChild(doc.createTextNode("\t\t")) - #l = doc.createElement('log') - #l.setAttribute("time", str(time)) - #l.setAttribute("code", str(code)) - #l.appendChild(doc.createTextNode(msg)) - #t.appendChild(l) - #t.appendChild(doc.createTextNode("\n")) - - #root_element.appendChild(t) - #t = doc.createTextNode("\n") - #root_element.appendChild(t) - - - #file = open(self.Filename, "w") - #doc.writexml(file) - #file.write("\n") - #file.close() + #l = xml.etree.cElementTree.SubElement(t, 'log') + #l.set("time", str(time)) + #l.set("code", str(code)) + #l.text = str(msg) + #l.tail = "\n" + + #doc = xml.etree.cElementTree.ElementTree(root_element) + #doc.write(self.Filename) list = [] -- cgit v1.2.3 From cc53ef67c6cfb594f1d30d1367210c0d3bc41d15 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 17:20:48 +0100 Subject: show timer name in dialog when asking to remove it --- lib/python/Screens/TimerEdit.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index aae345db..18ab2b79 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -199,9 +199,11 @@ class TimerEditList(Screen): self.updateState() def removeTimerQuestion(self): - if not self["timerlist"].getCurrent(): + cur = self["timerlist"].getCurrent() + if not cur: return - self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?")) + + self.session.openWithCallback(self.removeTimer, MessageBox, _("Do you really want to delete %s?") % (cur.name)) def removeTimer(self, result): if not result: -- cgit v1.2.3 From 2e5c13aebb389a6d74e4130658ccee6a863d01f6 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 17:40:25 +0100 Subject: add possibility to change start/end time in timer edit with Vol/Bouquet +/- (thx to Moritz Venn) --- lib/python/Components/config.py | 28 ++++++++++++++++++++++++++++ lib/python/Screens/TimerEntry.py | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index 4d57bbb9..d79337ba 100755 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -604,6 +604,34 @@ class ConfigClock(ConfigSequence): t = time.localtime(default) ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min]) + def increment(self): + # Check if Minutes maxed out + if self._value[1] == 59: + # Check if Hours not maxed out + if self._value[0] < 23: + # Increment Hour, reset Minutes to 0 + self._value[0] += 1 + self._value[1] = 0 + else: + # Increment Minutes + self._value[1] += 1 + # Trigger change + self.changed() + + def decrement(self): + # Check if Minutes is minimum + if self._value[1] == 0: + # Check if Hour is greater than 0 + if self._value[0] > 0: + # Decrement Hour, set Minutes to 59 + self._value[0] -= 1 + self._value[1] = 59 + else: + # Decrement Minutes + self._value[1] -= 1 + # Trigger change + self.changed() + class ConfigInteger(ConfigSequence): def __init__(self, default, limits = (0, 9999999999)): ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index be8b5240..0544eff1 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -32,11 +32,15 @@ class TimerEntry(Screen, ConfigListScreen): self.createConfig() - self["actions"] = NumberActionMap(["SetupActions"], + self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"], { "ok": self.keySelect, "save": self.keyGo, "cancel": self.keyCancel, + "volumeUp": self.incrementStart, + "volumeDown": self.decrementStart, + "size+": self.incrementEnd, + "size-": self.decrementEnd }, -2) self.list = [] @@ -160,9 +164,14 @@ class TimerEntry(Screen, ConfigListScreen): self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date) if self.timerentry_type.value == "once": self.list.append(self.entryDate) - self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime)) + + self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime) + self.list.append(self.entryStartTime) if self.timerentry_justplay.value != "zap": - self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime)) + self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime) + self.list.append(self.entryEndTime) + else: + self.entryEndTime = None self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service) self.list.append(self.channelEntry) @@ -319,6 +328,24 @@ class TimerEntry(Screen, ConfigListScreen): self.saveTimer() self.close((True, self.timer)) + def incrementStart(self): + self.timerentry_starttime.increment() + self["config"].invalidate(self.entryStartTime) + + def decrementStart(self): + self.timerentry_starttime.decrement() + self["config"].invalidate(self.entryStartTime) + + def incrementEnd(self): + if self.entryEndTime is not None: + self.timerentry_endtime.increment() + self["config"].invalidate(self.entryEndTime) + + def decrementEnd(self): + if self.entryEndTime is not None: + self.timerentry_endtime.decrement() + self["config"].invalidate(self.entryEndTime) + def subserviceSelected(self, service): if not service is None: self.timer.service_ref = ServiceReference(service[1]) -- cgit v1.2.3 From 4dda70dcac6996c8b0a2016c49d6cfbab7128fee Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 3 Dec 2008 17:53:18 +0100 Subject: initialize noCoverFile in case skin doesn't define it. thx to RitzMo --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 3d1889b9..c25af780 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -44,6 +44,7 @@ class MediaPixmap(Pixmap): def applySkin(self, desktop, screen): from Tools.LoadPixmap import LoadPixmap + noCoverFile = None if self.skinAttributes is not None: for (attrib, value) in self.skinAttributes: if attrib == "pixmap": -- cgit v1.2.3 From 191d68c0c07505af44f15a62fd59ac4216211e89 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 18:03:03 +0100 Subject: dont switch to 18V and measure input current, when slow rotor tuning is selected --- lib/dvb/sec.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 39124b34..a56dbf04 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -797,17 +797,22 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed); eSecCommand::rotor cmd; eSecCommand::pair compare; - compare.voltage = VOLTAGE(18); + if (turn_fast) + compare.voltage = VOLTAGE(18); + else + compare.voltage = VOLTAGE(13); compare.steps = +3; sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) ); // measure idle power values - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec after voltage change - sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) ); - compare.val = 1; compare.steps = -2; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); + if (turn_fast) { + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec after voltage change + sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) ); + compare.val = 1; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); + } sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec before measure sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) ); compare.val = 0; -- cgit v1.2.3 From 188224c032f898f7ddbb347839baba65550b5903 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 18:05:47 +0100 Subject: GraphMultiEpg: fix zap to services without events --- lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index 7f422c96..aff1c91d 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -93,13 +93,13 @@ class EPGList(HTMLComponent, GUIComponent): return event def getCurrent(self): - if self.cur_service is None or self.cur_event is None: + if self.cur_service is None: return ( None, None ) old_service = self.cur_service #(service, service_name, events) events = self.cur_service[2] refstr = self.cur_service[0] - if not events or not len(events): - return ( None, None ) + if self.cur_event is None or not events or not len(events): + return ( None, ServiceReference(refstr) ) event = events[self.cur_event] #(event_id, event_title, begin_time, duration) eventid = event[0] service = ServiceReference(refstr) -- cgit v1.2.3 From 1e1b651652e0f46bebc1c803e289fb84de222690 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 19:05:33 +0100 Subject: GraphMultiEpg.py: better readable code (no functional change) --- .../Extensions/GraphMultiEPG/GraphMultiEpg.py | 26 ++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index aff1c91d..441cb5d8 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -204,7 +204,13 @@ class EPGList(HTMLComponent, GUIComponent): def buildEntry(self, service, service_name, events): r1=self.service_rect r2=self.event_rect - res = [ None, MultiContentEntryText(pos = (r1.left(),r1.top()), size = (r1.width(), r1.height()), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER, text = service_name, color = self.foreColorService, backcolor = self.backColorService) ] + res = [ None, MultiContentEntryText( + pos = (r1.left(),r1.top()), + size = (r1.width(), r1.height()), + font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER, + text = service_name, + color = self.foreColorService, + backcolor = self.backColorService) ] if events: start = self.time_base+self.offs*self.time_epoch*60 @@ -222,9 +228,16 @@ class EPGList(HTMLComponent, GUIComponent): for ev in events: #(event_id, event_title, begin_time, duration) rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8) xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width) - res.append(MultiContentEntryText(pos = (left+xpos, top), size = (ewidth, height), font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP, text = ev[1], color = foreColor, color_sel = foreColorSelected, backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor)) + res.append(MultiContentEntryText( + pos = (left+xpos, top), size = (ewidth, height), + font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP, + text = ev[1], color = foreColor, color_sel = foreColorSelected, + backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor)) if rec and ewidth > 23: - res.append(MultiContentEntryPixmapAlphaTest(pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), png = self.clock_pixmap, backcolor = backColor, backcolor_sel = backColorSelected)) + res.append(MultiContentEntryPixmapAlphaTest( + pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), + png = self.clock_pixmap, backcolor = backColor, + backcolor_sel = backColorSelected)) return res def selEntry(self, dir, visible=True): @@ -278,8 +291,13 @@ class EPGList(HTMLComponent, GUIComponent): self.time_base = int(stime) test = [ (service.ref.toString(), 0, self.time_base, self.time_epoch) for service in services ] test.insert(0, 'XRnITBD') + print "BEFORE:" + for x in test: + print x epg_data = self.queryEPG(test) - + print "EPG:" + for x in epg_data: + print x self.list = [ ] tmp_list = None service = "" -- cgit v1.2.3 From 282d9e86ee6942a5c557d25cce0899857fab78dd Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 19:06:21 +0100 Subject: GraphMultiEpg/plugin.py: fix not working zap function when the bouquet is changed with bouquet +/- --- lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py index 0ebcafca..adb7015d 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py @@ -69,6 +69,7 @@ def changeBouquetCB(direction, epg): bouquet = bouquetSel.getCurrent() services = getBouquetServices(bouquet) if len(services): + global epg_bouquet epg_bouquet = bouquet epg.setServices(services) -- cgit v1.2.3 From 2ff2e2c4f2a413b36d3eeafee3439ec5df38c59d Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 20:01:01 +0100 Subject: hopefully finally fix "second cable of motorized LNB" --- lib/dvb/sec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index a56dbf04..751a5453 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -283,7 +283,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite eSecDebugNoSimulate("ret5 %d", ret); } - if (ret && rotor && curRotorPos != -1 && (direct_connected || satpos_depends_ptr == -1) ) // direct conntected or loopthrough! + if (ret && rotor && curRotorPos != -1) ret -= abs(curRotorPos-sat.orbital_position); eSecDebugNoSimulate("ret6 %d", ret); -- cgit v1.2.3 From 39410381b5f023663c70c4dec09dc1eae287259d Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 23:47:36 +0100 Subject: sync rtc time with linux time every 30 minutes when no transponder is tuned.. we need a fix for hardware without RTC... --- lib/dvb/dvbtime.cpp | 16 ++++++++++++++-- lib/dvb/dvbtime.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index c4335795..d879cfac 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -11,6 +11,8 @@ #define FP_IOCTL_SET_RTC 0x101 #define FP_IOCTL_GET_RTC 0x102 +#define TIME_UPDATE_INTERVAL (30*60*1000) + static time_t prev_time; void setRTC(time_t time) @@ -143,7 +145,7 @@ eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance; DEFINE_REF(eDVBLocalTimeHandler); eDVBLocalTimeHandler::eDVBLocalTimeHandler() - :m_time_ready(false) + :m_time_ready(false), m_updateNonTunedTimer(eTimer::create(eApp)) { if ( !instance ) instance=this; @@ -164,6 +166,7 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler() /*emit*/ m_timeUpdated(); } } + CONNECT(m_updateNonTunedTimer->timeout, eDVBLocalTimeHandler::updateNonTuned); } eDVBLocalTimeHandler::~eDVBLocalTimeHandler() @@ -211,6 +214,12 @@ void eDVBLocalTimeHandler::writeTimeOffsetData( const char* filename ) } } +void eDVBLocalTimeHandler::updateNonTuned() +{ + updateTime(-1, 0, 0); + m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true); +} + void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count ) { int time_difference; @@ -397,7 +406,7 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up int updateCount = it->second.tdt->getUpdateCount(); it->second.tdt = 0; it->second.tdt = new TDT(chan, updateCount); - it->second.tdt->startTimer(60*60*1000); // restart TDT for this transponder in 60min + it->second.tdt->startTimer(TIME_UPDATE_INTERVAL); // restart TDT for this transponder in 30min } } } @@ -430,12 +439,15 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan) { case iDVBChannel::state_ok: eDebug("[eDVBLocalTimerHandler] channel %p running", chan); + m_updateNonTunedTimer->stop(); it->second.tdt = new TDT(it->second.channel); it->second.tdt->start(); break; case iDVBChannel::state_release: eDebug("[eDVBLocalTimerHandler] remove channel %p", chan); m_knownChannels.erase(it); + if (m_knownChannels.empty()) + m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true); break; default: // ignore all other events return; diff --git a/lib/dvb/dvbtime.h b/lib/dvb/dvbtime.h index f403ffd4..3f8d9b7d 100644 --- a/lib/dvb/dvbtime.h +++ b/lib/dvb/dvbtime.h @@ -54,6 +54,7 @@ class eDVBLocalTimeHandler: public Object ePtr m_stateChangedConn; int m_prevChannelState; }; + ePtr m_updateNonTunedTimer; friend class TDT; std::map m_knownChannels; std::map m_timeOffsetMap; @@ -66,6 +67,7 @@ class eDVBLocalTimeHandler: public Object void readTimeOffsetData(const char*); void writeTimeOffsetData(const char*); void updateTime(time_t tp_time, eDVBChannel*, int updateCount); + void updateNonTuned(); static eDVBLocalTimeHandler *instance; #ifdef SWIG eDVBLocalTimeHandler(); -- cgit v1.2.3 From bf85c027880227646227e9f4ffc658e81eae5c69 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 4 Dec 2008 11:18:09 +0100 Subject: allow callback-less ePopen --- lib/python/Components/Console.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/python/Components/Console.py b/lib/python/Components/Console.py index c5fa5f98..136d10d0 100644 --- a/lib/python/Components/Console.py +++ b/lib/python/Components/Console.py @@ -8,7 +8,7 @@ class Console(object): self.callbacks = {} self.extra_args = {} - def ePopen(self, cmd, callback, extra_args=[]): + def ePopen(self, cmd, callback=None, extra_args=[]): name = cmd i = 0 while self.appContainers.has_key(name): @@ -50,5 +50,6 @@ class Console(object): extra_args = self.extra_args[name] del self.appContainers[name] del self.extra_args[name] - self.callbacks[name](data,retval,extra_args) + if self.callbacks[name]: + self.callbacks[name](data,retval,extra_args) del self.callbacks[name] -- cgit v1.2.3 From e61975a7c2d349bcc5c372c3ca472ce8da28f6fc Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 4 Dec 2008 11:18:35 +0100 Subject: allow grabbing still frames from movies using seddis AiO Screengrabber V0.8 (needs package aio-grab) for graphical dvd menus --- lib/python/Plugins/Extensions/CutListEditor/plugin.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/python/Plugins/Extensions/CutListEditor/plugin.py b/lib/python/Plugins/Extensions/CutListEditor/plugin.py index 0d2454e4..c80bff18 100644 --- a/lib/python/Plugins/Extensions/CutListEditor/plugin.py +++ b/lib/python/Plugins/Extensions/CutListEditor/plugin.py @@ -12,6 +12,7 @@ from Components.GUIComponent import GUIComponent from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT from Screens.FixedMenu import FixedMenu from Screens.HelpMenu import HelpableScreen +from ServiceReference import ServiceReference import bisect def CutListEntry(where, what): @@ -42,6 +43,7 @@ class CutListContextMenu(FixedMenu): RET_DELETEMARK = 4 RET_REMOVEBEFORE = 5 RET_REMOVEAFTER = 6 + RET_GRABFRAME = 7 SHOW_STARTCUT = 0 SHOW_ENDCUT = 1 @@ -75,6 +77,7 @@ class CutListContextMenu(FixedMenu): else: menu.append((_("remove this mark"), self.removeMark)) + menu.append((("grab this frame as bitmap"), self.grabFrame)) FixedMenu.__init__(self, session, _("Cut"), menu) self.skinName = "Menu" @@ -99,6 +102,8 @@ class CutListContextMenu(FixedMenu): def removeAfter(self): self.close(self.RET_REMOVEAFTER) + def grabFrame(self): + self.close(self.RET_GRABFRAME) class CutList(GUIComponent): def __init__(self, list): @@ -390,6 +395,8 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He # add 'out' point bisect.insort(self.cut_list, (self.context_position, 1)) self.uploadCuesheet() + elif result == CutListContextMenu.RET_GRABFRAME: + self.grabFrame() # we modify the "play" behavior a bit: # if we press pause while being in slowmotion, we will pause (and not play) @@ -399,6 +406,14 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He else: self.pauseService() + def grabFrame(self): + path = self.session.nav.getCurrentlyPlayingServiceReference().getPath() + from Components.Console import Console + grabConsole = Console() + cmd = 'grab -vblpr%d "%s"' % (180, path.rsplit('.',1)[0] + ".png") + grabConsole.ePopen(cmd) + self.playpauseService() + def main(session, service, **kwargs): session.open(CutListEditor, service) -- cgit v1.2.3 From c69c3febf1582fb1bd170bc4b04132354f574cfc Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 4 Dec 2008 11:20:12 +0100 Subject: allow fully customizable dvd menu layout, including automatic thumbnail graphic creation (requires package aio-grab) --- .../Plugins/Extensions/DVDBurn/DVDProject.py | 100 ++++++--- lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py | 10 +- .../Extensions/DVDBurn/DreamboxDVD.ddvdp.xml | 14 ++ .../DVDBurn/DreamboxDVDtemplate.ddvdp.xml | 23 -- lib/python/Plugins/Extensions/DVDBurn/Process.py | 249 +++++++++++++-------- .../Plugins/Extensions/DVDBurn/ProjectSettings.py | 34 ++- .../Extensions/DVDBurn/Text menu boat.ddvdm.xml | 35 +++ .../DVDBurn/Thumbs menu clouds.ddvdm.xml | 35 +++ .../Plugins/Extensions/DVDBurn/TitleCutter.py | 7 + lib/python/Plugins/Extensions/DVDBurn/TitleList.py | 4 +- .../Plugins/Extensions/DVDBurn/TitleProperties.py | 45 ++-- .../Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg | Bin 0 -> 62697 bytes lib/python/Plugins/Extensions/DVDBurn/dvdburn.png | Bin 13 files changed, 381 insertions(+), 175 deletions(-) create mode 100644 lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml create mode 100644 lib/python/Plugins/Extensions/DVDBurn/Text menu boat.ddvdm.xml create mode 100644 lib/python/Plugins/Extensions/DVDBurn/Thumbs menu clouds.ddvdm.xml create mode 100644 lib/python/Plugins/Extensions/DVDBurn/dreamdvd_clouds.jpg mode change 100755 => 100644 lib/python/Plugins/Extensions/DVDBurn/dvdburn.png diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py index 112a221e..b0b8197a 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py @@ -1,18 +1,10 @@ from Tools.Directories import fileExists -from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence +from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigSubList class ConfigColor(ConfigSequence): def __init__(self): ConfigSequence.__init__(self, seperator = "#", limits = [(0,255),(0,255),(0,255)]) -class ConfigPixelvals(ConfigSequence): - def __init__(self): - ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)]) - -class ConfigPixelvals(ConfigSequence): - def __init__(self): - ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)]) - class ConfigFilename(ConfigText): def __init__(self): ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False) @@ -35,19 +27,11 @@ class DVDProject: self.settings.titlesetmode = ConfigSelection(choices = [("single", _("Simple titleset (compatibility for legacy players)")), ("multi", _("Complex (allows mixing audio tracks and aspects)"))], default="multi") self.settings.output = ConfigSelection(choices = [("iso", _("Create DVD-ISO")), ("dvd", _("Burn DVD"))]) self.settings.isopath = ConfigText(fixed_size = False, visible_width = 40) - self.settings.dataformat = ConfigSelection(choices = [("iso9660_1", ("ISO9660 Level 1")), ("iso9660_4", ("ISO9660 version 2")), ("udf", ("UDF"))]) - self.settings.menubg = ConfigFilename() - self.settings.menuaudio = ConfigFilename() - self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40) - self.settings.subtitleformat = ConfigText(fixed_size = False, visible_width = 40) - self.settings.color_headline = ConfigColor() - self.settings.color_highlight = ConfigColor() - self.settings.color_button = ConfigColor() - self.settings.font_face = ConfigFilename() - self.settings.font_size = ConfigPixelvals() - self.settings.space = ConfigPixelvals() + self.settings.dataformat = ConfigSelection(choices = [("iso9660_1", ("ISO9660 Level 1")), ("iso9660_4", ("ISO9660 version 2")), ("udf", ("UDF"))]) + self.settings.menutemplate = ConfigFilename() self.settings.vmgm = ConfigFilename() - self.filekeys = ["vmgm", "menubg", "menuaudio", "font_face", "isopath"] + self.filekeys = ["vmgm", "isopath", "menutemplate"] + self.menutemplate = MenuTemplate() def addService(self, service): import DVDTitle @@ -65,12 +49,30 @@ class DVDProject: list.append('\t\n') + list.append('/>\n') list.append('\t\n') for title in self.titles: - list.append('\t\t') + list.append('\t\t\n') + list.append('\t\t\t<path>') list.append(stringToXML(title.source.getPath())) list.append('</path>\n') + list.append('\t\t\t<properties ') + audiotracks = [] + for key, val in title.properties.dict().iteritems(): + if type(val) is ConfigSubList: + audiotracks.append('\t\t\t<audiotracks>\n') + for audiotrack in val: + audiotracks.append('\t\t\t\t<audiotrack ') + for subkey, subval in audiotrack.dict().iteritems(): + audiotracks.append( subkey + '="' + str(subval.getValue()) + '" ' ) + audiotracks.append(' />\n') + audiotracks.append('\t\t\t</audiotracks>\n') + else: + list.append( key + '="' + str(val.getValue()) + '" ' ) + list.append('/>\n') + for line in audiotracks: + list.append(line) + list.append('\t\t\n') list.append('\t\n') list.append('\n') @@ -89,6 +91,13 @@ class DVDProject: return False return filename + def load(self, filename): + ret = self.loadProject(filename) + if ret: + ret = self.menutemplate.loadTemplate(self.settings.menutemplate.getValue()) + self.error += self.menutemplate.error + return ret + def loadProject(self, filename): import xml.dom.minidom try: @@ -105,9 +114,9 @@ class DVDProject: if project.nodeType == xml.dom.minidom.Element.nodeType: if project.tagName == 'settings': i = 0 - if project.attributes.length < 11: + if project.attributes.length < len(self.settings.dict()): self.error = "project attributes missing" - raise AttributeError + raise AttributeError while i < project.attributes.length: item = project.attributes.item(i) key = item.name.encode("utf-8") @@ -131,3 +140,44 @@ class DVDProject: self.error += (" in project '%s'") % (filename) return False return True + +class MenuTemplate(DVDProject): + def __init__(self): + self.settings = ConfigSubsection() + self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40) + self.settings.subtitleformat = ConfigText(fixed_size = False, visible_width = 40) + self.settings.menubg = ConfigFilename() + self.settings.menuaudio = ConfigFilename() + self.settings.dimensions = ConfigSequence(seperator = ',', default = [576,720], limits = [(352,720),(480,576)]) + self.settings.rows = ConfigInteger(default = 4, limits = (1, 10)) + self.settings.cols = ConfigInteger(default = 1, limits = (1, 4)) + self.settings.color_headline = ConfigColor() + self.settings.color_headline = ConfigColor() + self.settings.color_highlight = ConfigColor() + self.settings.color_button = ConfigColor() + self.settings.fontface_headline = ConfigFilename() + self.settings.fontface_title = ConfigFilename() + self.settings.fontface_subtitle = ConfigFilename() + self.settings.fontsize_headline = ConfigInteger(default = 46, limits = (0, 199)) + self.settings.fontsize_title = ConfigInteger(default = 24, limits = (0, 199)) + self.settings.fontsize_subtitle = ConfigInteger(default = 14, limits = (0, 199)) + self.settings.margin_top = ConfigInteger(default = 120, limits = (0, 500)) + self.settings.margin_bottom = ConfigInteger(default = 40, limits = (0, 500)) + self.settings.margin_left = ConfigInteger(default = 56, limits = (0, 500)) + self.settings.margin_right = ConfigInteger(default = 56, limits = (0, 500)) + self.settings.space_rows = ConfigInteger(default = 32, limits = (0, 500)) + self.settings.space_cols = ConfigInteger(default = 24, limits = (0, 500)) + self.settings.prev_page_text = ConfigText(default = "<<<", fixed_size = False) + self.settings.next_page_text = ConfigText(default = ">>>", fixed_size = False) + self.settings.offset_headline = ConfigSequence(seperator = ',', default = [0,0], limits = [(-1,500),(-1,500)]) + self.settings.offset_title = ConfigSequence(seperator = ',', default = [0,0], limits = [(-1,500),(-1,500)]) + self.settings.offset_subtitle = ConfigSequence(seperator = ',', default = [20,0], limits = [(-1,500),(-1,500)]) + self.settings.offset_thumb = ConfigSequence(seperator = ',', default = [40,0], limits = [(-1,500),(-1,500)]) + self.settings.thumb_size = ConfigSequence(seperator = ',', default = [200,158], limits = [(0,576),(-1,720)]) + self.settings.thumb_border = ConfigInteger(default = 2, limits = (0, 20)) + self.filekeys = ["menubg", "menuaudio", "fontface_headline", "fontface_title", "fontface_subtitle"] + + def loadTemplate(self, filename): + ret = DVDProject.loadProject(self, filename) + DVDProject.error = self.error + return ret diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py b/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py index b1c627aa..660005e6 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py @@ -51,11 +51,11 @@ class DVDTitle: self.length = info.getLength(service) def initDVDmenuText(self, project, track): - self.properties.menutitle.setValue(self.formatDVDmenuText(project.settings.titleformat.getValue(), track)) - self.properties.menusubtitle.setValue(self.formatDVDmenuText(project.settings.subtitleformat.getValue(), track)) + s = project.menutemplate.settings + self.properties.menutitle.setValue(self.formatDVDmenuText(s.titleformat.getValue(), track)) + self.properties.menusubtitle.setValue(self.formatDVDmenuText(s.subtitleformat.getValue(), track)) def formatDVDmenuText(self, template, track): - properties = self.properties template = template.replace("$i", str(track)) template = template.replace("$t", self.DVBname) template = template.replace("$d", self.DVBdescr) @@ -76,7 +76,7 @@ class DVDTitle: audiolist.append(trackstring) audiostring = ', '.join(audiolist) template = template.replace("$A", audiostring) - + if template.find("$l") >= 0: l = self.length lengthstring = "%d:%02d:%02d" % (l/3600, l%3600/60, l%60) @@ -90,7 +90,7 @@ class DVDTitle: else: template = template.replace("$Y", "").replace("$M", "").replace("$D", "").replace("$T", "") return template - + def produceFinalCuesheet(self): CUT_TYPE_IN = 0 CUT_TYPE_OUT = 1 diff --git a/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml b/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml new file mode 100644 index 00000000..2c35e531 --- /dev/null +++ b/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVD.ddvdp.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml b/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml deleted file mode 100644 index 7d8de8ce..00000000 --- a/lib/python/Plugins/Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 750e9d9b..d0c9d3c6 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -455,13 +455,13 @@ class ImagePrepareTask(Task): try: from ImageFont import truetype from Image import open as Image_open - s = self.job.project.settings + s = self.job.project.menutemplate.settings + (width, height) = s.dimensions.getValue() self.Menus.im_bg_orig = Image_open(s.menubg.getValue()) - if self.Menus.im_bg_orig.size != (self.Menus.imgwidth, self.Menus.imgheight): - self.Menus.im_bg_orig = self.Menus.im_bg_orig.resize((720, 576)) - self.Menus.fontsizes = s.font_size.getValue() - fontface = s.font_face.getValue() - self.Menus.fonts = [truetype(fontface, self.Menus.fontsizes[0]), truetype(fontface, self.Menus.fontsizes[1]), truetype(fontface, self.Menus.fontsizes[2])] + if self.Menus.im_bg_orig.size != (width, height): + self.Menus.im_bg_orig = self.Menus.im_bg_orig.resize((width, height)) + self.Menus.fontsizes = [s.fontsize_headline.getValue(), s.fontsize_title.getValue(), s.fontsize_subtitle.getValue()] + self.Menus.fonts = [(truetype(s.fontface_headline.getValue(), self.Menus.fontsizes[0])), (truetype(s.fontface_title.getValue(), self.Menus.fontsizes[1])),(truetype(s.fontface_subtitle.getValue(), self.Menus.fontsizes[2]))] Task.processFinished(self, 0) except: Task.processFinished(self, 1) @@ -480,98 +480,158 @@ class MenuImageTask(Task): def run(self, callback): self.callback = callback - try: - import ImageDraw, Image, os - s = self.job.project.settings - fonts = self.Menus.fonts - im_bg = self.Menus.im_bg_orig.copy() - im_high = Image.new("P", (self.Menus.imgwidth, self.Menus.imgheight), 0) - im_high.putpalette(self.Menus.spu_palette) - draw_bg = ImageDraw.Draw(im_bg) - draw_high = ImageDraw.Draw(im_high) - if self.menu_count == 1: - headline = s.name.getValue().decode("utf-8") - textsize = draw_bg.textsize(headline, font=fonts[0]) - if textsize[0] > self.Menus.imgwidth: - offset = (0 , 20) - else: - offset = (((self.Menus.imgwidth-textsize[0]) / 2) , 20) - draw_bg.text(offset, headline, fill=self.Menus.color_headline, font=fonts[0]) - spuxml = """ - - - """ % (self.highlightpngfilename, self.Menus.spu_palette[0], self.Menus.spu_palette[1], self.Menus.spu_palette[2]) - s_top, s_rows, s_left = s.space.getValue() - rowheight = (self.Menus.fontsizes[1]+self.Menus.fontsizes[2]+s_rows) - menu_start_title = (self.menu_count-1)*self.job.titles_per_menu + 1 - menu_end_title = (self.menu_count)*self.job.titles_per_menu + 1 - nr_titles = len(self.job.project.titles) - if menu_end_title > nr_titles: - menu_end_title = nr_titles+1 - menu_i = 0 - for title_no in range( menu_start_title , menu_end_title ): - menu_i += 1 - title = self.job.project.titles[title_no-1] - top = s_top + ( menu_i * rowheight ) - titleText = title.formatDVDmenuText(s.titleformat.getValue(), title_no).decode("utf-8") - draw_bg.text((s_left,top), titleText, fill=self.Menus.color_button, font=fonts[1]) - draw_high.text((s_left,top), titleText, fill=1, font=self.Menus.fonts[1]) - subtitleText = title.formatDVDmenuText(s.subtitleformat.getValue(), title_no).decode("utf-8") - draw_bg.text((s_left,top+36), subtitleText, fill=self.Menus.color_button, font=fonts[2]) - bottom = top+rowheight - if bottom > self.Menus.imgheight: - bottom = self.Menus.imgheight - spuxml += """ -