diff options
-rw-r--r-- | CONTRIBUTORS | 30 | ||||
-rw-r--r-- | HISTORY | 38 | ||||
-rw-r--r-- | channels.conf | 29 | ||||
-rw-r--r-- | config.h | 6 | ||||
-rw-r--r-- | epg.c | 334 | ||||
-rw-r--r-- | fontosd-iso8859-2.c | 452 | ||||
-rw-r--r-- | i18n.c | 779 | ||||
-rw-r--r-- | keys.c | 12 | ||||
-rw-r--r-- | menu.c | 181 | ||||
-rw-r--r-- | menu.h | 5 | ||||
-rw-r--r-- | menuitems.c | 53 | ||||
-rw-r--r-- | menuitems.h | 4 | ||||
-rw-r--r-- | recording.c | 6 | ||||
-rw-r--r-- | recording.h | 6 | ||||
-rw-r--r-- | tools.c | 30 | ||||
-rw-r--r-- | tools.h | 10 | ||||
-rw-r--r-- | transfer.c | 3 | ||||
-rw-r--r-- | vdr.c | 31 |
18 files changed, 1111 insertions, 898 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index dadcf8c..5b460ca 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -936,6 +936,9 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi> for reporting a bug in handling key macros with keys after @plugin for adding compiler options "-fPIC -g" to all plugins for adding a leading '0' to the day in the DayDateTime() function + for reporting a crash in the Schedule menu with events that have no title + for a patch that was used to implement automatic cursor advance when entering text + via the numeric keys Ralf Klueber <ralf.klueber@vodafone.com> for reporting a bug in cutting a recording if there is only a single editing mark @@ -1154,11 +1157,14 @@ Andreas Regel <andreas.regel@gmx.de> for reporting a problem with messages when a cOsdObject uses the raw OSD for implementing palette replace mode in the OSD bitmaps -Thomas Bergwinkl <Thomas.Bergwinkl@t-online.de> +Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de> for fixing the validity check for channel IDs, because some providers use TIDs with value 0 for pointing out that transponder handling didn't work with satellites that provide two transponders on the same frequency, with different polarization + for fixing detecting if there can be any useful further input when entering channel + numbers + for fixing handling the '0' key for switching between the last two channels Stéphane Esté-Gracias <sestegra@free.fr> for fixing a typo in libsi/si.h @@ -1655,3 +1661,25 @@ André Weidemann <Andre.Weidemann@web.de> Jürgen Schilling <juergen_schilling@web.de> for reporting that color buttons were displayed in the recording info menu if it has been invoked from a player + +Jesus Bravo Alvarez <jba@pobox.com> + for reporting a second place where a message should be given when an instant + recording is started + for updating the Spanish OSD texts + +Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> + for suggesting how to modify logging so that even on NPTL systems each line in + the log file shows the individual thread's pid + +Franz Gangkofer <Franz.Gangkofer@cadsoft.de> + for reporting a problem with @plugin in keymacros.conf in case the named plugin + is not loaded + +Malte Schröder <MalteSch@gmx.de> + for reporting a crash after executing the SVDRP command CLRE + +Markus Hahn <mhahn@reel-multimedia.com> + for suggesting to only start recordings if there is at least 300MB free disk space + +Jaroslaw Swierczynski <swiergot@gmail.com> + for updating the Polish OSD texts and the fontosd-iso8859-2.c file @@ -4189,3 +4189,41 @@ Video Disk Recorder Revision History Ahrenberg). - No longer displaying color buttons in the recording info menu if it has been invoked from a player (reported by Jürgen Schilling). + +2006-01-22: Version 1.3.40 + +- Fixed a second place where a message should be given when an instant recording + is started (reported by Jesus Bravo Alvarez). +- Modified logging so that even on NPTL systems each line in the log file shows + the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski). +- Fixed a problem with @plugin in keymacros.conf in case the named plugin is not + loaded (reported by Franz Gangkofer). +- Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule' + pointers from cChannel objects (reported by Malte Schröder). +- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). +- Improved NULL checking in strreplace(). +- Fixed a crash in the Schedule menu with events that have no title (reported by + Rolf Ahrenberg). cEvent::FixEpgBugs() now assigns a "No title" string to events + that have no title. +- Updated the Estonian OSD texts (thanks to Arthur Konovalov). +- Recordings are now only started if there is at least 300MB free disk space + (suggested by Markus Hahn). +- When entering text via the numeric keys, the cursor now automatically advances + (based on a patch from Rolf Ahrenberg). +- Updated the Polish OSD texts and the fontosd-iso8859-2.c file (thanks to Jaroslaw + Swierczynski). +- Disabled the "buffer reserve" in Transfer Mode. Last chance to complain if you + really need it - it will be completely removed in the next version. If you are + experiencing problems with a/v running out of sync, try the latest driver and + firmware (if you are using a full featured DVB card). +- Switching channels with the Up/Down or Channel+/Channel- keys now works a lot + faster when the repeat function kicks in, by not actually switching the + channel every time, but rather only displaying the channel info and doing + the final switch when the key is released. +- The channel display is now updated _before_ the channel is switched. +- Added a missing initialization of 'timeout' in the cDisplayChannel constructor. +- Fixed detecting if there can be any useful further input when entering channel + numbers (thanks to Thomas Bergwinkl). +- Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez). +- Fixed handling the '0' key for switching between the last two channels (thanks + to Thomas Bergwinkl). diff --git a/channels.conf b/channels.conf index c427628..e15663d 100644 --- a/channels.conf +++ b/channels.conf @@ -23,7 +23,7 @@ Super RTL,S RTL;RTL World:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089: VOX;RTL World:12187:hC34:S19.2E:27500:167:136=deu:71:0:12060:1:1089:0 KABEL1;ProSiebenSat.1:12480:vC34:S19.2E:27500:511:512=deu:33:0:899:133:33:0 DAS VIERTE,D VIERTE;BetaDigital:12460:hC34:S19.2E:27500:2047:2048=deu:36:0:1793:133:5:0 -NEUN LIVE Television,NEUN LIVE;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0 +9Live;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0 DSF;BetaDigital:12480:vC34:S19.2E:27500:1023:1024=deu:39:0:900:133:33:0 HSE24,HSE24;BetaDigital:12480:vC34:S19.2E:27500:1279:1280=deu:37:0:40:133:33:0 Bloomberg TV Germany;Bloomberg:12551:vC56:S19.2E:22000:162:99=deu:0:0:12160:1:1108:0 @@ -46,7 +46,7 @@ rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0 :Premiere World PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1801,1722,1702:8:133:2:0 PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1801,1722,1702:10:133:2:0 -PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1801,1722,1702:11:133:2:0 +PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1801,1722,1702:11:133:2:0 PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1702,1801:43:133:2:0 PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0 PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0 @@ -65,6 +65,7 @@ PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:33:0:27:133:4:0 N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0 LibertyTV FR;LibertyTV.com:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0 :- +münchen.TV/RFO,müTV/RFO;BetaDigital:12148:hC34:S19.2E:27500:495:496=deu:0:0:658:133:7:0 ProSieben Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:161:84=deu;85=deu:36:0:20002:1:1082:0 Kabel 1 Schweiz;ProSiebenSat.1:12051:vC34:S19.2E:27500:162:163=deu:165:0:20003:1:1082:0 Kabel 1 Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:166:167=deu:169:0:20004:1:1082:0 @@ -83,10 +84,26 @@ RTL TELE Letzebuerg:12551:vC56:S19.2E:22000:168:144=eng,146=fra,151=ltz:74:0:399 Nick/Talpa;CANALDIGITAAL:12574:hC56:S19.2E:22000:512+8190:84=dut:33:622,100:5010:53:1109:0 NICK;MTV Networks:12226:hC34:S19.2E:27500:513+8190:661=deu:577:0:28640:1:1091:0 MTV Central;MTV Networks:11739:vC34:S19.2E:27500:3031:3032:3034:0:28653:1:1066:0 -VIVA;VIVA Fernsehen GmbH & Co. KG:12669:vC56:S19.2E:22000:309:310=deu:311:0:12732:1:1116:0 -VIVA PLUS;VIVA Fernsehen GmbH & Co. KG:12551:vC56:S19.2E:22000:171:172=deu:173:0:12120:1:1108:0 +VIVA;MTV Networks:11973:vC34:S19.2E:27500:4061+8190:4062:4064:0:28676:1:1078:0 +VIVA PLUS;MTV Networks:11973:vC34:S19.2E:27500:4071+8190:4072:4074:0:28677:1:1078:0 QVC Deutschland;QVC:12551:vC56:S19.2E:22000:165:166:167:0:12100:1:1108:0 TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0 +:NTSC +Venevision;T-Systems/MTI:11200:vC56:S13.0E:27500:922:923=und:0:0:4750:0:13400:0 +EBC.1;T-Systems/MTI:11200:vC56:S13.0E:27500:373:374=eng:0:0:4747:0:13400:0 +:HDTV +HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:100:200:0 +HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:318:200:0 +Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0 +Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0 +SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0 +SMD HD:12699:V:S19.2E:22000:133:234=eng:0:0:3231:1:1118:0 +Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0 +TV HD;CSAT:12581:vC56:S19.2E:22000:165:100=fra;101=fra:0:0:9306:1:1110:0 +C M HD;Telenor:11261:hC78:S1.0W:24500:517:660=eng;661=eng:0:B00:3306:70:33:0 +C MORE HD;Telenor:11389:hC78:S1.0W:24500:512:640;641=eng:0:B00:3306:70:34:0 +HELLAS-HDTV;Scopus Network Technologies:11642:hC34:S13.0E:27500:2201:2211=ell,2212=eng:0:0:2200:318:15700:0 +TPS Star:10757:vC34:S13.0E:27500:420:430=fra,431=eng:440:500,100:1204:176:11200:0 :@201 Sky Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0 Sky Two;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0 @@ -115,10 +132,6 @@ S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:20 CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0 BBC PARL'MNT;BSkyB:10847:vC56:S28.2E:22000:2327:2328=eng:2331:0:6902:2:2050:0 IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0 -Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0 -Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0 -SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0 -Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0 eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0 Challenger Tv;Telespazio:11304:hC34:S13.0E:27500:490:491:0:0:8409:318:500:0 TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:3:1:65535:1:0 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.240 2006/01/13 15:17:19 kls Exp $ + * $Id: config.h 1.241 2006/01/15 16:01:48 kls Exp $ */ #ifndef __CONFIG_H @@ -19,8 +19,8 @@ #include "i18n.h" #include "tools.h" -#define VDRVERSION "1.3.39" -#define VDRVERSNUM 10339 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.40" +#define VDRVERSNUM 10340 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $Id: epg.c 1.49 2006/01/15 13:58:30 kls Exp $ + * $Id: epg.c 1.51 2006/01/20 14:09:48 kls Exp $ */ #include "epg.h" @@ -422,197 +422,196 @@ void cEvent::FixEpgBugs(void) strreplace(description, '\x86', ' '); strreplace(description, '\x87', ' '); + if (!title) { + // we don't want any "(null)" titles + title = strcpyrealloc(title, tr("No title")); + EpgBugFixStat(12, ChannelID()); + } + if (Setup.EPGBugfixLevel == 0) return; // Some TV stations apparently have their own idea about how to fill in the // EPG data. Let's fix their bugs as good as we can: - if (title) { - - // Some channels put the ShortText in quotes and use either the ShortText - // or the Description field, depending on how long the string is: - // - // Title - // "ShortText". Description - // - if ((shortText == NULL) != (description == NULL)) { - char *p = shortText ? shortText : description; - if (*p == '"') { - const char *delim = "\"."; - char *e = strstr(p + 1, delim); - if (e) { - *e = 0; - char *s = strdup(p + 1); - char *d = strdup(e + strlen(delim)); - free(shortText); - free(description); - shortText = s; - description = d; - EpgBugFixStat(1, ChannelID()); - } - } - } - // Some channels put the Description into the ShortText (preceded - // by a blank) if there is no actual ShortText and the Description - // is short enough: - // - // Title - // Description - // - if (shortText && !description) { - if (*shortText == ' ') { - memmove(shortText, shortText + 1, strlen(shortText)); - description = shortText; - shortText = NULL; - EpgBugFixStat(2, ChannelID()); + // Some channels put the ShortText in quotes and use either the ShortText + // or the Description field, depending on how long the string is: + // + // Title + // "ShortText". Description + // + if ((shortText == NULL) != (description == NULL)) { + char *p = shortText ? shortText : description; + if (*p == '"') { + const char *delim = "\"."; + char *e = strstr(p + 1, delim); + if (e) { + *e = 0; + char *s = strdup(p + 1); + char *d = strdup(e + strlen(delim)); + free(shortText); + free(description); + shortText = s; + description = d; + EpgBugFixStat(1, ChannelID()); } } + } - // Sometimes they repeat the Title in the ShortText: - // - // Title - // Title - // - if (shortText && strcmp(title, shortText) == 0) { - free(shortText); + // Some channels put the Description into the ShortText (preceded + // by a blank) if there is no actual ShortText and the Description + // is short enough: + // + // Title + // Description + // + if (shortText && !description) { + if (*shortText == ' ') { + memmove(shortText, shortText + 1, strlen(shortText)); + description = shortText; shortText = NULL; - EpgBugFixStat(3, ChannelID()); + EpgBugFixStat(2, ChannelID()); } + } - // Some channels put the ShortText between double quotes, which is nothing - // but annoying (some even put a '.' after the closing '"'): - // - // Title - // "ShortText"[.] - // - if (shortText && *shortText == '"') { - int l = strlen(shortText); - if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) { - memmove(shortText, shortText + 1, l); - char *p = strrchr(shortText, '"'); - if (p) - *p = 0; - EpgBugFixStat(4, ChannelID()); - } + // Sometimes they repeat the Title in the ShortText: + // + // Title + // Title + // + if (shortText && strcmp(title, shortText) == 0) { + free(shortText); + shortText = NULL; + EpgBugFixStat(3, ChannelID()); + } + + // Some channels put the ShortText between double quotes, which is nothing + // but annoying (some even put a '.' after the closing '"'): + // + // Title + // "ShortText"[.] + // + if (shortText && *shortText == '"') { + int l = strlen(shortText); + if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) { + memmove(shortText, shortText + 1, l); + char *p = strrchr(shortText, '"'); + if (p) + *p = 0; + EpgBugFixStat(4, ChannelID()); } + } - if (Setup.EPGBugfixLevel <= 1) - return; + if (Setup.EPGBugfixLevel <= 1) + return; - // Some channels apparently try to do some formatting in the texts, - // which is a bad idea because they have no way of knowing the width - // of the window that will actually display the text. - // Remove excess whitespace: - title = compactspace(title); - shortText = compactspace(shortText); - description = compactspace(description); + // Some channels apparently try to do some formatting in the texts, + // which is a bad idea because they have no way of knowing the width + // of the window that will actually display the text. + // Remove excess whitespace: + title = compactspace(title); + shortText = compactspace(shortText); + description = compactspace(description); #define MAX_USEFUL_EPISODE_LENGTH 40 - // Some channels put a whole lot of information in the ShortText and leave - // the Description totally empty. So if the ShortText length exceeds - // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description - // instead: - if (!isempty(shortText) && isempty(description)) { - if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { - free(description); - description = shortText; - shortText = NULL; - EpgBugFixStat(6, ChannelID()); - } + // Some channels put a whole lot of information in the ShortText and leave + // the Description totally empty. So if the ShortText length exceeds + // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description + // instead: + if (!isempty(shortText) && isempty(description)) { + if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { + free(description); + description = shortText; + shortText = NULL; + EpgBugFixStat(6, ChannelID()); } + } - // Some channels put the same information into ShortText and Description. - // In that case we delete one of them: - if (shortText && description && strcmp(shortText, description) == 0) { - if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { - free(shortText); - shortText = NULL; - } - else { - free(description); - description = NULL; - } - EpgBugFixStat(7, ChannelID()); + // Some channels put the same information into ShortText and Description. + // In that case we delete one of them: + if (shortText && description && strcmp(shortText, description) == 0) { + if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { + free(shortText); + shortText = NULL; + } + else { + free(description); + description = NULL; } + EpgBugFixStat(7, ChannelID()); + } - // Some channels use the ` ("backtick") character, where a ' (single quote) - // would be normally used. Actually, "backticks" in normal text don't make - // much sense, so let's replace them: - strreplace(title, '`', '\''); - strreplace(shortText, '`', '\''); - strreplace(description, '`', '\''); + // Some channels use the ` ("backtick") character, where a ' (single quote) + // would be normally used. Actually, "backticks" in normal text don't make + // much sense, so let's replace them: + strreplace(title, '`', '\''); + strreplace(shortText, '`', '\''); + strreplace(description, '`', '\''); - if (Setup.EPGBugfixLevel <= 2) - return; + if (Setup.EPGBugfixLevel <= 2) + return; - // The stream components have a "description" field which some channels - // apparently have no idea of how to set correctly: - if (components) { - for (int i = 0; i < components->NumComponents(); i++) { - tComponent *p = components->Component(i); - switch (p->stream) { - case 0x01: { // video - if (p->description) { - if (strcasecmp(p->description, "Video") == 0 || - strcasecmp(p->description, "Bildformat") == 0) { - // Yes, we know it's video - that's what the 'stream' code - // is for! But _which_ video is it? - free(p->description); - p->description = NULL; - EpgBugFixStat(8, ChannelID()); - } - } - if (!p->description) { - switch (p->type) { - case 0x01: - case 0x05: p->description = strdup("4:3"); break; - case 0x02: - case 0x03: - case 0x06: - case 0x07: p->description = strdup("16:9"); break; - case 0x04: - case 0x08: p->description = strdup(">16:9"); break; - case 0x09: - case 0x0D: p->description = strdup("HD 4:3"); break; - case 0x0A: - case 0x0B: - case 0x0E: - case 0x0F: p->description = strdup("HD 16:9"); break; - case 0x0C: - case 0x10: p->description = strdup("HD >16:9"); break; - } - EpgBugFixStat(9, ChannelID()); + // The stream components have a "description" field which some channels + // apparently have no idea of how to set correctly: + if (components) { + for (int i = 0; i < components->NumComponents(); i++) { + tComponent *p = components->Component(i); + switch (p->stream) { + case 0x01: { // video + if (p->description) { + if (strcasecmp(p->description, "Video") == 0 || + strcasecmp(p->description, "Bildformat") == 0) { + // Yes, we know it's video - that's what the 'stream' code + // is for! But _which_ video is it? + free(p->description); + p->description = NULL; + EpgBugFixStat(8, ChannelID()); } } - break; - case 0x02: { // audio - if (p->description) { - if (strcasecmp(p->description, "Audio") == 0) { - // Yes, we know it's audio - that's what the 'stream' code - // is for! But _which_ audio is it? - free(p->description); - p->description = NULL; - EpgBugFixStat(10, ChannelID()); - } - } - if (!p->description) { - switch (p->type) { - case 0x05: p->description = strdup("Dolby Digital"); break; - // all others will just display the language - } - EpgBugFixStat(11, ChannelID()); + if (!p->description) { + switch (p->type) { + case 0x01: + case 0x05: p->description = strdup("4:3"); break; + case 0x02: + case 0x03: + case 0x06: + case 0x07: p->description = strdup("16:9"); break; + case 0x04: + case 0x08: p->description = strdup(">16:9"); break; + case 0x09: + case 0x0D: p->description = strdup("HD 4:3"); break; + case 0x0A: + case 0x0B: + case 0x0E: + case 0x0F: p->description = strdup("HD 16:9"); break; + case 0x0C: + case 0x10: p->description = strdup("HD >16:9"); break; + } + EpgBugFixStat(9, ChannelID()); + } + } + break; + case 0x02: { // audio + if (p->description) { + if (strcasecmp(p->description, "Audio") == 0) { + // Yes, we know it's audio - that's what the 'stream' code + // is for! But _which_ audio is it? + free(p->description); + p->description = NULL; + EpgBugFixStat(10, ChannelID()); } } - break; - } - } - } - } - else { - // we don't want any "(null)" titles - title = strcpyrealloc(title, tr("No title")); - EpgBugFixStat(12, ChannelID()); + if (!p->description) { + switch (p->type) { + case 0x05: p->description = strdup("Dolby Digital"); break; + // all others will just display the language + } + EpgBugFixStat(11, ChannelID()); + } + } + break; + } + } } } @@ -935,7 +934,10 @@ bool cSchedules::ClearAll(void) cSchedulesLock SchedulesLock(true, 1000); cSchedules *s = (cSchedules *)Schedules(SchedulesLock); if (s) { - s->Clear(); + for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) + Timer->SetEvent(NULL); + for (cSchedule *Schedule = s->First(); Schedule; Schedule = s->Next(Schedule)) + Schedule->Cleanup(INT_MAX); return true; } return false; diff --git a/fontosd-iso8859-2.c b/fontosd-iso8859-2.c index 979c902..e61e9a8 100644 --- a/fontosd-iso8859-2.c +++ b/fontosd-iso8859-2.c @@ -3948,23 +3948,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x000001F0, // ....*****.... - 0x000003F8, // ...*******... - 0x0000071C, // ..***...***.. - 0x00000C0C, // .**......**.. - 0x00000C06, // .**.......**. - 0x00000C06, // .**.......**. - 0x00000E00, // .***......... - 0x00000700, // ..***........ + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000FE0, // .*******..... 0x00000FE0, // .*******..... - 0x00000FA0, // .*****.*..... - 0x00000380, // ...***....... - 0x00000180, // ....**....... - 0x00000180, // ....**....... - 0x00000300, // ...**........ 0x00000600, // ..**......... - 0x00000FFE, // .***********. - 0x00000FFC, // .**********.. + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x000007FE, // ..**********. + 0x000007FE, // ..**********. 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. @@ -4032,34 +4032,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. }, { // 166 - 6, 27, - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. + 15, 27, + 0x00000070, // ........***.... + 0x000000E0, // .......***..... + 0x000001C0, // ......***...... + 0x00000380, // .....***....... + 0x00000000, // ............... + 0x000003E0, // .....*****..... + 0x00000FF8, // ...*********... + 0x00000C1C, // ...**.....***.. + 0x0000180C, // ..**.......**.. + 0x00001804, // ..**........*.. + 0x00001800, // ..**........... + 0x00001C00, // ..***.......... + 0x00000F80, // ...*****....... + 0x000007F8, // ....********... + 0x0000007C, // ........*****.. + 0x0000000E, // ...........***. + 0x00000006, // ............**. + 0x00003006, // .**.........**. + 0x00001806, // ..**........**. + 0x0000180C, // ..**.......**.. + 0x00000FF8, // ...*********... + 0x000007F0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... }, { // 167 13, 27, @@ -4212,34 +4212,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // .............. }, { // 172 - 13, 27, - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000FFF, // .************ - 0x00000FFF, // .************ - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. + 14, 27, + 0x00000000, // .............. + 0x00000030, // ........**.... + 0x00000060, // .......**..... + 0x000000C0, // ......**...... + 0x00000000, // .............. + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x0000000E, // ..........***. + 0x0000000C, // ..........**.. + 0x0000001C, // .........***.. + 0x00000038, // ........***... + 0x00000070, // .......***.... + 0x000000E0, // ......***..... + 0x000000C0, // ......**...... + 0x000001C0, // .....***...... + 0x00000380, // ....***....... + 0x00000700, // ...***........ + 0x00000600, // ...**......... + 0x00000E00, // ..***......... + 0x00001C00, // .***.......... + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. }, { // 173 8, 27, @@ -4302,34 +4302,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // .............. }, { // 175 - 8, 27, - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x0000007E, // .******. - 0x0000007E, // .******. - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + 14, 27, + 0x00000000, // .............. + 0x00000000, // .............. + 0x000000C0, // ......**...... + 0x000000C0, // ......**...... + 0x00000000, // .............. + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x0000000E, // ..........***. + 0x0000000C, // ..........**.. + 0x0000001C, // .........***.. + 0x00000038, // ........***... + 0x00000070, // .......***.... + 0x000000E0, // ......***..... + 0x000000C0, // ......**...... + 0x000001C0, // .....***...... + 0x00000380, // ....***....... + 0x00000700, // ...***........ + 0x00000600, // ...**......... + 0x00000E00, // ..***......... + 0x00001C00, // .***.......... + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. }, { // 176 14, 27, @@ -4371,23 +4371,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000FFE, // .***********. - 0x00000FFE, // .***********. - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000000, // ............. - 0x00000FFE, // .***********. - 0x00000FFE, // .***********. - 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. + 0x000001F0, // ....*****.... + 0x000007FC, // ..*********.. + 0x0000060C, // ..**.....**.. + 0x0000040C, // ..*......**.. + 0x0000000C, // .........**.. + 0x000001FC, // ....*******.. + 0x000007CC, // ..*****..**.. + 0x00000E0C, // .***.....**.. + 0x00000C0C, // .**......**.. + 0x00000C1C, // .**.....***.. + 0x00000FFE, // .***********. + 0x000003EE, // ...*****.***. + 0x0000000E, // .........***. + 0x0000000E, // .........***. + 0x00000006, // ..........**. 0x00000000, // ............. 0x00000000, // ............. }, @@ -4428,23 +4428,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ........ 0x00000000, // ........ 0x00000000, // ........ - 0x00000000, // ........ - 0x0000003C, // ..****.. - 0x0000007E, // .******. - 0x00000046, // .*...**. - 0x00000006, // .....**. - 0x0000001C, // ...***.. - 0x00000006, // .....**. - 0x00000003, // ......** - 0x000000C3, // **....** - 0x0000007E, // .******. + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x0000001E, // ...****. 0x0000003C, // ..****.. - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + 0x00000070, // .***.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... 0x00000000, // ........ 0x00000000, // ........ 0x00000000, // ........ @@ -4518,27 +4518,27 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............ 0x00000000, // ............ 0x00000000, // ............ - 0x000000FF, // ....******** - 0x000001FF, // ...********* - 0x000003F6, // ..******.**. - 0x000003F6, // ..******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000003F6, // ..******.**. - 0x000003F6, // ..******.**. - 0x000000F6, // ....****.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000001F8, // ...******... + 0x000003FC, // ..********.. + 0x0000060C, // .**.....**.. + 0x00000600, // .**......... + 0x00000700, // .***........ + 0x000003F0, // ..******.... + 0x000000FC, // ....******.. + 0x0000000E, // ........***. + 0x00000606, // .**......**. + 0x00000606, // .**......**. + 0x000007FC, // .*********.. + 0x000001F8, // ...******... + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ 0x00000000, // ............ }, { // 183 @@ -4692,34 +4692,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ....... }, { // 188 - 20, 27, - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00018030, // ...**.........**.... - 0x00038020, // ..***.........*..... - 0x00078040, // .****........*...... - 0x000180C0, // ...**.......**...... - 0x00018180, // ...**......**....... - 0x00018100, // ...**......*........ - 0x0001830C, // ...**.....**....**.. - 0x0001860C, // ...**....**.....**.. - 0x0001861C, // ...**....**....***.. - 0x00000C3C, // ........**....****.. - 0x0000186C, // .......**....**.**.. - 0x0000384C, // ......***....*..**.. - 0x000030FF, // ......**....******** - 0x000060FF, // .....**.....******** - 0x0000E00C, // ....***.........**.. - 0x0000C004, // ....**...........*.. - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... + 12, 27, + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000007FC, // .*********.. + 0x000007FC, // .*********.. + 0x00000018, // .......**... + 0x00000018, // .......**... + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000180, // ...**....... + 0x00000300, // ..**........ + 0x00000600, // .**......... + 0x000007FE, // .**********. + 0x000007FE, // .**********. + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ }, { // 189 20, 27, @@ -4782,34 +4782,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............ }, { // 191 - 14, 27, - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x000000C0, // ......**...... - 0x000000C0, // ......**...... - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x000000C0, // ......**...... - 0x000000C0, // ......**...... - 0x000001C0, // .....***...... - 0x00000380, // ....***....... - 0x00000700, // ...***........ - 0x00000600, // ...**......... - 0x00000C00, // ..**.......... - 0x00000C0C, // ..**......**.. - 0x00000C0C, // ..**......**.. - 0x00000E1C, // ..***....***.. - 0x000007F8, // ...********... - 0x000003E0, // ....*****..... + 12, 27, + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000060, // .....**..... + 0x00000060, // .....**..... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000007FC, // .*********.. + 0x000007FC, // .*********.. + 0x00000018, // .......**... + 0x00000018, // .......**... + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000180, // ...**....... + 0x00000300, // ..**........ + 0x00000600, // .**......... + 0x000007FE, // .**********. + 0x000007FE, // .**********. + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ }, { // 192 15, 27, @@ -5113,10 +5113,10 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { }, { // 202 15, 27, - 0x000000C0, // .......**...... - 0x000001E0, // ......****..... - 0x00000320, // .....**..*..... - 0x00000230, // .....*...**.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... 0x00000000, // ............... 0x00001FFE, // ..************. 0x00001FFE, // ..************. @@ -5135,9 +5135,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00001800, // ..**........... 0x00001FFE, // ..************. 0x00001FFE, // ..************. - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... + 0x00000006, // ............**. + 0x00000006, // ............**. + 0x00000006, // ............**. 0x00000000, // ............... 0x00000000, // ............... }, @@ -5323,10 +5323,10 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { }, { // 209 17, 27, - 0x00000000, // ................. - 0x00000760, // ......***.**..... - 0x00000FE0, // .....*******..... + 0x00000070, // ..........***.... + 0x00000060, // ..........**..... 0x000000C0, // .........**...... + 0x00000180, // ........**....... 0x00000000, // ................. 0x0000600C, // ..**.........**.. 0x0000700C, // ..***........**.. @@ -6078,9 +6078,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x000000E0, // .....***..... - 0x000000B0, // .....*.**.... - 0x00000190, // ....**..*.... + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. 0x000001F0, // ....*****.... @@ -6095,9 +6095,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x0000060C, // ..**.....**.. 0x000007F8, // ..********... 0x000001F0, // ....*****.... - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. + 0x00000038, // .......***... + 0x00000070, // ......***.... + 0x00000038, // .......***... 0x00000000, // ............. 0x00000000, // ............. }, @@ -6288,9 +6288,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00000180, // ....**....... - 0x000003F8, // ...*******... - 0x00000270, // ...*..***.... + 0x0000000C, // .........**.. + 0x00000018, // ........**... + 0x00000030, // .......**.... 0x00000000, // ............. 0x00000000, // ............. 0x000004F8, // ..*..*****... @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.235 2006/01/15 12:22:15 kls Exp $ + * $Id: i18n.c 1.240 2006/01/22 15:55:28 kls Exp $ * * Translations provided by: * @@ -15,8 +15,8 @@ * French Jean-Claude Repetto <jc@repetto.org>, Olivier Jacques <jacquesolivier@hotmail.com>, Gregoire Favre <greg@magma.unil.ch>, Nicolas Huillard <nhuillard@e-dition.fr> * Norwegian Jørgen Tvedt <pjtvedt@online.no>, Truls Slevigen <truls@slevigen.no> * Finnish Hannu Savolainen <hannu@opensound.com>, Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, Niko Tarnanen <niko.tarnanen@hut.fi>, Rolf Ahrenberg <rahrenbe@cc.hut.fi> - * Polish Michael Rakowski <mrak@gmx.de> - * Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com> + * Polish Michael Rakowski <mrak@gmx.de>, Jaroslaw Swierczynski <swiergot@gmail.com> + * Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com>, Jesus Bravo Alvarez <jba@pobox.com> * Greek Dimitrios Dimitrakos <mail@dimitrios.de> * Swedish Tomas Prybil <tomas@prybil.se>, Jan Ekholm <chakie@infa.abo.fi> * Romanian Paul Lacatus <paul@campina.iiruc.ro>, Lucian Muresan <lucianm@users.sourceforge.net> @@ -112,8 +112,8 @@ const tI18nPhrase Phrases[] = { "iso8859-1", "iso8859-1", "iso8859-15", - "iso8859-1", - "iso8859-1", + "iso8859-2", + "iso8859-15", "iso8859-7", "iso8859-1", "iso8859-2", @@ -198,7 +198,7 @@ const tI18nPhrase Phrases[] = { "Chaînes", "Kanaler", "Kanavat", - "Kanaly", + "Kana³y", "Canales", "ÊáíÜëéá", "Kanaler", @@ -220,7 +220,7 @@ const tI18nPhrase Phrases[] = { "Timere", "Ajastimet", "Timery", - "Timer", + "Programar grabaciones", "×ñïíïðñïãñáììáôéóìïß", "Timers", "Timer-e", @@ -261,8 +261,8 @@ const tI18nPhrase Phrases[] = { "Infos sur l'enregistrement", "",// TODO "Tallenteen tiedot", - "",// TODO - "",// TODO + "Informacje o nagraniu", + "Información de grabación", "Ðëçñïöïñßåò EããñáöÞò", "Inspelning", "Detaliile înregistrãrii", @@ -282,7 +282,7 @@ const tI18nPhrase Phrases[] = { "Configuration", "Konfigurasjon", "Asetukset", - "Nastawy", + "Ustawienia", "Configuración", "Ñõèìéóåéò", "Inställningar", @@ -303,7 +303,7 @@ const tI18nPhrase Phrases[] = { "Commandes", "Kommandoer", "Komennot", - "Rozkazy", + "Polecenia", "Órdenes", "ÅíôïëÝò", "Kommandon", @@ -324,7 +324,7 @@ const tI18nPhrase Phrases[] = { "Commandes d'enregistrement", "",// TODO "Tallennekomennot", - "Rozkazy Nagran", + "Polecenia nagrañ", "Órdenes de grabación", "ÅíôïëÝò ãéÜ åããñáöÝò", "Inspelningskommandon", @@ -345,7 +345,7 @@ const tI18nPhrase Phrases[] = { "Modifier une chaîne", "Editer kanal", "Muokkaa kanavaa", - "Ustawienie kanalu", + "Edycja kana³u", "Modificar canal", "Ôñïðïðïßçóç Êáíáëéïý", "Ändra kanal", @@ -366,8 +366,8 @@ const tI18nPhrase Phrases[] = { "Changer la programmation", "Editer timer", "Muokkaa ajastinta", - "Ustawienie timerow", - "Modificar timer", + "Edycja timera", + "Modificar programación", "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý", "Ändra timer", "Modificare timer", @@ -408,8 +408,8 @@ const tI18nPhrase Phrases[] = { "Info", "",//TODO "Tiedot", - "",//TODO - "",//TODO + "Info", + "Info", "Ðëçñïöïñßåò", "Info", "Info", @@ -430,7 +430,7 @@ const tI18nPhrase Phrases[] = { "Program Guide - %s", "Ohjelmisto - %s", "Program - %s", - "Programa - %s", + "Guía de programación - %s", "Ðñüãñáììá - %s", "Program - %s", "Programul canalului %s", @@ -438,7 +438,7 @@ const tI18nPhrase Phrases[] = { "Guia de Programació - %s", "¿àÞÓàÐÜÜÐ - %s", "Raspored - %s", - "Programm - %s", + "Ajakava - %s", "Program - %s", }, { "This event - %s", @@ -449,17 +449,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Tämä tapahtuma - %s", "",//TODO + "Este evento - %s", "",//TODO + "Ta audycja - %s", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "See sündmus - %s", "",//TODO }, { "This event - all channels", @@ -470,17 +470,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Tämä tapahtuma - kaikki kanavat", "",//TODO + "Este evento - todos los canales", "",//TODO + "Ta audycja - wszystkie kana³y", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "See sündmus - kõik kanalid", "",//TODO }, { "All events - all channels", @@ -491,17 +491,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Kaikki tapahtumat - kaikki kanavat", "",//TODO + "Todos los eventos - todos los canales", "",//TODO + "Wszystkie audycje - wszystkie kana³y", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "Kõik sündmused - kõik kanalid", "",//TODO }, { "What's on now?", @@ -513,7 +513,7 @@ const tI18nPhrase Phrases[] = { "Programmes en cours", "Hvilket program sendes nå?", "Menossa nyt", - "Program biezacy", + "Program bie¿±cy", "¿Qué hay ahora?", "ÔñÝ÷ïí ðñüãñáììá", "Vad sänds nu?", @@ -534,8 +534,8 @@ const tI18nPhrase Phrases[] = { "Prochains programmes", "Hvilket program er neste?", "Tulossa seuraavaksi", - "Program nastepny", - "¿Qué hay proximo?", + "Nastêpne audycje", + "¿Qué hay después?", "Åðüìåíï ðñüãñáììá", "Vilket är nästa program?", "Ce emisiuni urmeazã?", @@ -555,7 +555,7 @@ const tI18nPhrase Phrases[] = { "Résumé", "Sammendrag", "Yhteenveto", - "Zawartosc", + "Podsumowanie", "Resumen", "Ðåñéå÷üìåíï", "Sammanfattning", @@ -564,7 +564,7 @@ const tI18nPhrase Phrases[] = { "Resum", "¾ßØáÐÝØÕ", "Sadr¾aj", - "Kokkuvõte", + "Ülevaade", "Omtale", }, // Button texts (should not be more than 10 characters!): @@ -577,7 +577,7 @@ const tI18nPhrase Phrases[] = { "Modifier", "Editer", "Muokkaa", - "Edycja", + "Edytuj", "Modificar", "ÐñïóáñìïãÞ", "Ändra", @@ -619,7 +619,7 @@ const tI18nPhrase Phrases[] = { "Supprimer", "Slett", "Poista", - "Usunac", + "Usuñ", "Borrar", "ÄéáãñáöÞ", "Ta bort", @@ -640,7 +640,7 @@ const tI18nPhrase Phrases[] = { "Marquer", "Marker", "Siirrä", - "Zaznaczyc", + "Zaznacz", "Marcar", "ÅðéëïãÞ", "Märk", @@ -661,7 +661,7 @@ const tI18nPhrase Phrases[] = { "Marche/Arr", "Av/På", "Päällä/Pois", - "Zal./ Wyl.", + "W³/Wy³", "On/Off", "Aíïé÷/Këåéóôü", "På/Av", @@ -670,7 +670,7 @@ const tI18nPhrase Phrases[] = { "On/Off", "²ÚÛ/²ëÚÛ", "De-/Aktiviraj", - "Sees/Väljas", + "On/Off", "Til/Fra", }, { "Timer", @@ -682,6 +682,8 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "Ajastin", + "Timer",// TODO + "Programa", "",// TODO "",// TODO "",// TODO @@ -689,9 +691,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO - "",// TODO - "",// TODO + "Taimer", "",// TODO }, { "Button$Record", @@ -703,7 +703,7 @@ const tI18nPhrase Phrases[] = { "Enregistre", "Ta opp", "Tallenna", - "Nagrywac", + "Nagraj", "Grabar", "ÅããñáöÞ", "Inspelning", @@ -724,7 +724,7 @@ const tI18nPhrase Phrases[] = { "Lire", "Spill av", "Toista", - "Odtwarzac", + "Odtwórz", "Play", "ÁíáðáñáãùãÞ", "Spela upp", @@ -745,7 +745,7 @@ const tI18nPhrase Phrases[] = { "Pause", "",// TODO "Tauko", - "Przerwa", + "Pauza", "Pausa", "Ðáýóç", "Pausa", @@ -766,7 +766,7 @@ const tI18nPhrase Phrases[] = { "Retour", "Spol tilbake", "Alkuun", - "Poczatek", + "Pocz±tek", "Rebobinar", "ÌåôáöïñÜ óôçí Áñ÷Þ", "Återspolning", @@ -787,7 +787,7 @@ const tI18nPhrase Phrases[] = { "Arrêt", "Stopp", "Lopeta", - "Zakonczyc", + "Zatrzymaj", "Parar", "ÔÝñìá", "Stopp", @@ -808,7 +808,7 @@ const tI18nPhrase Phrases[] = { "Reprendre", "Fortsett", "Jatka", - "Dalej", + "Wznów", "Continuar", "ÅðáíáöïñÜ", "Fortsätt", @@ -829,7 +829,7 @@ const tI18nPhrase Phrases[] = { "Ouvrir", "Åpne", "Avaa", - "Otworzyc", + "Otwórz", "Abrir", "Áíïéãìá", "Öppna", @@ -850,7 +850,7 @@ const tI18nPhrase Phrases[] = { "Regarder", "Skift til", "Valitse", - "Przelaczyc", + "Prze³±cz", "Cambiar", "AëëáãÞ", "Byt", @@ -892,8 +892,8 @@ const tI18nPhrase Phrases[] = { "Après", "Neste", "Seuraavaksi", - "Nastepny", - "Siguiente", + "Nastêpnie", + "Después", "Åðüìåíï", "Nästa", "Urmãtor", @@ -901,7 +901,7 @@ const tI18nPhrase Phrases[] = { "Següent", "´ÐÛÕÕ", "Slijedi", - "Järgmine", + "Tulekul", "Næste", }, { "Button$Schedule", @@ -914,7 +914,7 @@ const tI18nPhrase Phrases[] = { "Programmer", "Ohjelmisto", "Program", - "Programa", + "Guía", "Ðñüãñáììá", "Program", "Program", @@ -922,7 +922,7 @@ const tI18nPhrase Phrases[] = { "Programar", "¿àÞÓàÐÜÜÐ", "Raspored", - "Kava", + "Ajakava", "Program", }, { "Button$ABC/abc", @@ -955,7 +955,7 @@ const tI18nPhrase Phrases[] = { "Insérer", "",// TODO "Lisää", - "Wstawiac", + "Wstaw", "Insertar", "ÅéóáãùãÞ", "Infoga", @@ -976,7 +976,7 @@ const tI18nPhrase Phrases[] = { "Écraser", "",// TODO "Korvaa", - "Przepisac", + "Nadpisz", "Sobreescribir", "ÁíôéêáôÜóôáóç", "Skriv över", @@ -1039,8 +1039,8 @@ const tI18nPhrase Phrases[] = { "Scan", "",//TODO "Päivitä", - "",//TODO - "",//TODO + "Skanuj", + "Escanear", "ÓÜñùóç", "Skanna", "Cãutare canale", @@ -1060,8 +1060,8 @@ const tI18nPhrase Phrases[] = { "Audio", "",// TODO "Ääni", - "",// TODO - "",// TODO + "D¼wiêk", + "Audio", "¹÷ïò", "Ljud", "Sunet", @@ -1082,7 +1082,7 @@ const tI18nPhrase Phrases[] = { "Supprimer la chaîne?", "Slette kanal?", "Poistetaanko kanava?", - "Usunac kanal?", + "Usun±æ kana³?", "¿Eliminar canal?", "ÄéáãñáöÞ êáíáëéïý?", "Ta bort kanalen?", @@ -1103,8 +1103,8 @@ const tI18nPhrase Phrases[] = { "Supprimer la programmation?", "Slette timer?", "Poistetaanko ajastin?", - "Usunac timer?", - "¿Eliminar timer?", + "Usun±æ timer?", + "¿Eliminar programación?", "ÄéáãñáöÞ ÷ñïíïðñïãñáììáôéóìïý;?", "Ta bort timern?", "ªterg timer-ul?", @@ -1124,7 +1124,7 @@ const tI18nPhrase Phrases[] = { "Supprimer l'enregistrement?", "Slette opptak?", "Poistetaanko tallenne?", - "Usunac nagranie?", + "Usun±æ nagranie?", "¿Eliminar grabacion?", "ÄéáãñáöÞ åããñáöÞò?", "Ta bort inspelningen?", @@ -1145,8 +1145,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - confirmez la suppression", "Timer gjør opptak - vil du slette likevel?", "Ajastettu tallennus käynnissä - poistetaanko silti?", - "Nagrywanie w trakcie - napewno usunac?", - "¿Timer activo - de verdad eliminarlo?", + "Trwa nagrywanie - na pewno usun±æ?", + "Todavía está grabando - ¿eliminar realmente?", "×ñïíïðñïãñáììáôéóìüò óÝ åîÝëéîç - ÄéáãñáöÞ óßãïõñá?", "Timerstyrd inspelning pågår - Avbryta ändå?", "Timer-ul tocmai înregistreazã - ºterg, totuºi?", @@ -1166,7 +1166,7 @@ const tI18nPhrase Phrases[] = { "Arrêter l'enregistrement?", "Stoppe opptak?", "Lopetetaanko tallennus?", - "Zakonczyc nagranie?", + "Zatrzymaæ nagrywanie?", "¿Parar grabación?", "Áêýñùóç åããñáöÞò?", "Stanna inspelning?", @@ -1187,8 +1187,8 @@ const tI18nPhrase Phrases[] = { "Annuler les modifications?", "Avbryte redigering?", "Perutaanko muokkaus?", - "Zakonczyc montaz?", - "¿Cancelar modificación?", + "Anulowaæ monta¿?", + "¿Cancelar edición?", "Aêýñùóç åðåîåñãáóßáò?", "Avbryta redigeringen?", "Opresc montajul înregistrãrii?", @@ -1208,8 +1208,8 @@ const tI18nPhrase Phrases[] = { "Redémarrer?", "Vil du virkelig starte på nytt?", "Käynnistetäänkö uudelleen?", - "Rzeczywiscie nowy start?", - "¿De verdad reiniciar?", + "Na pewno zrestartowaæ?", + "¿Reiniciar realmente?", "Ná ãßíåé óßãïõñá åðáíåêêßíçóç?", "Vill du verkligen starta om?", "Sigur repornesc?", @@ -1229,8 +1229,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - redémarrer?", "Gjør opptak - starte på nytt likevel?", "Tallennus kesken - käynnistetäänkö uudelleen?", - "Nagrywanie w trakcie - rzeczywiscie nowy start?", - "Grabando - ¿reiniciar?", + "Trwa nagrywanie - zrestartowaæ mimo to?", + "Grabación en curso - ¿reiniciar igualmente?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé åðáíåêêßíçóç?", "Inspelning pågår, vill du ändå starta om?", "Tocmai se înregistreazã - repornesc, totuºi?", @@ -1250,8 +1250,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - confirmez l'arrêt", "Gjør opptak - slå av likevel?", "Tallennus kesken - sammutetaanko?", - "Nagrywanie w trakcie - mimo to wylaczyc?", - "Grabando - ¿apagar?", + "Trwa nagrywanie - wy³±czyæ mimo to?", + "Grabación en curso - ¿apagar igualmente?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé ôåñìáôéóìüò?", "Inspelning pågår, vill du ändå avbryta?", "Tocmai se înregistreazã - închid, totuºi?", @@ -1271,8 +1271,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement dans %d minutes - confirmez l'arrêt", "Skal gjøre opptak om %d minutter - slå av likevel?", "Tallennus alkaa %d min kuluttua - sammutetaanko?", - "Nagrywanie za %d minut - mimo to wylaczyc?", - "Grabando en %d minutos, ¿de verdad apagar?", + "Nagrywanie za %d minut - wy³±czyæ mimo to?", + "Grabación dentro de %d minutos, ¿apagar realmente?", "ÁíáìÝíåôáé åããñáöÞ óÝ %d ëåðôÜ - ÔåëéêÜ íá ôåñìáôéóôåß?", "Inspelning startar om %d minuter, vill du avsluta?", "Înregistrez peste %d minute - închid, totuºi?", @@ -1292,7 +1292,7 @@ const tI18nPhrase Phrases[] = { "Appuyez sur une touche pour annuler l'arrêt", "Trykk en tast for ikke å slå av", "Peru sammutus painamalla mitä tahansa näppäintä", - "Dowolny przycisk zatrzyma wylaczanie", + "Naci¶nij dowolny klawisz aby nie wy³±czaæ", "Pulse una tecla para interrumpir apagar", "Ðßåóå Ýíá ðëÞêôñï ãéÜ áêýñùäç ôåñìáôéóìïý", "Tryck valfri knapp för att återkalla avstängningen", @@ -1335,7 +1335,7 @@ const tI18nPhrase Phrases[] = { "Fréquence", "Frekvens", "Taajuus", - "Czestotliwosc", + "Czêstotliwo¶æ", "Frecuencia", "Óõ÷íüôçôá", "Frekvens", @@ -1377,8 +1377,8 @@ const tI18nPhrase Phrases[] = { "Source", "",//TODO "Lähde", - "Zrodlo", - "",//TODO + "¬ród³o", + "Fuente", "ÐçãÞ", "Källa", "Sursã", @@ -1399,7 +1399,7 @@ const tI18nPhrase Phrases[] = { "Srate", "Symbolinopeus", "Srate", - "Srate", + "T.símbolos", "Srate", "Srate", "Ratã simboluri", @@ -1567,7 +1567,7 @@ const tI18nPhrase Phrases[] = { "Kortleser", "Salaus (CA)", "CA", - "CA", + "Acceso condicional (CA)", "CA", "Kortläsare", "CA (Acces Condiþional)", @@ -1586,17 +1586,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "vapaa", "",//TODO + "en abierto", "",//TODO + "Otwarta transmisja", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "FTA", "",//TODO }, { "encrypted", @@ -1607,17 +1607,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "salattu", "",//TODO + "cifrado", "",//TODO + "szyfrowany", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "krüptitud", "",//TODO }, { "Sid", @@ -1650,7 +1650,7 @@ const tI18nPhrase Phrases[] = { "Inversion", "Inversion", "Inversio", - "Inversion", + "Inwersja", "Inversion", "ÁíôéóôñïöÞ", "Inversion", @@ -1671,8 +1671,8 @@ const tI18nPhrase Phrases[] = { "Bande passante", "Bandwidth", "Kaistanleveys", - "Szerokosc pasma", - "Bandwidth", + "Pasmo", + "Ancho de banda", "Åýñïò Óõ÷íïôÞôùí", "Bandbredd", "Lãrgime de bandã", @@ -1735,7 +1735,7 @@ const tI18nPhrase Phrases[] = { "Modulation", "Modulaatio", "Modulacja", - "Modulation", + "Modulación", "Äéáìüñöùóç", "Modulation", "Modulaþie", @@ -1756,7 +1756,7 @@ const tI18nPhrase Phrases[] = { "Transmission", "Transmissio", "Transmisja", - "Transmission", + "Transmisión", "ÌåôÜäïóç", "Transmission", "Transmisiune", @@ -1777,7 +1777,7 @@ const tI18nPhrase Phrases[] = { "Guard", "Suojaväli", "Guard", - "Guard", + "Int.Guarda", "Ðñïóôáóßá", "Guard", "Guard", @@ -1797,8 +1797,8 @@ const tI18nPhrase Phrases[] = { "Hiérarchie", "Hierarchy", "Hierarkia", - "Hierachia", - "Hierarchy", + "Hierarchia", + "Jerarquía", "Éåñáñ÷åßá", "Hierarchy", "Ierarhie", @@ -1840,7 +1840,7 @@ const tI18nPhrase Phrases[] = { "Chaîne", "Kanal", "Kanava", - "Kanal", + "Kana³", "Canal", "ÊáíÜëé", "Kanal", @@ -1861,7 +1861,7 @@ const tI18nPhrase Phrases[] = { "Jour", "Dag", "Päivä", - "Dzien", + "Dzieñ", "Día", "ÇìÝñá", "Dag", @@ -1882,7 +1882,7 @@ const tI18nPhrase Phrases[] = { "Début", "Start", "Aloitus", - "Poczatek", + "Pocz±tek", "Comienzo", "Áñ÷Þ", "Börjar", @@ -1924,8 +1924,8 @@ const tI18nPhrase Phrases[] = { "VPS", "",// TODO "VPS", - "",// TODO - "",// TODO + "VPS", + "VPS", "VPS", "VPS", "VPS", @@ -1966,8 +1966,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie", "Levetid", "Elinikä", - "Trwalosc dni", - "Durabilidad", + "Czas ¿ycia", + "Duración", "ÄéÝñêåéá ÐáñáìïíÞò", "Livstid", "Timp de pãstrare", @@ -2008,7 +2008,7 @@ const tI18nPhrase Phrases[] = { "Premier jour", "Første dag", "1. päivä", - "Pierwszy dzien", + "Pierwszy dzieñ", "Primer día", "Ðñþôç ìÝñá", "Första dag", @@ -2030,8 +2030,8 @@ const tI18nPhrase Phrases[] = { "Cette chaîne est en cours d'utilisation!", "Kanalen er i bruk av en timer!", "Kanava on ajastimen käytössä!", - "Kanal jest zajety przez timer nagran", - "¡Canal está ocupado por un timer!", + "Kana³ jest u¿ywany przez timer!", + "¡Hay una grabación programada para este canal!", "Ôï êáíÜëç ÷ñéóéìïðïéåßôáé áðü ÷ñïíïðñïãñáììáôéóìü!", "Kanalen används av en timer!", "Canalul este utilizat de un timer!", @@ -2051,8 +2051,8 @@ const tI18nPhrase Phrases[] = { "Impossible de changer de chaîne!", "Ikke mulig å skifte kanal!", "Kanavan vaihtaminen ei mahdollista!", - "Kanal nie moze byc teraz przelaczony!", - "¡No puedo cambiar canal!", + "Nie mo¿na prze³±czyæ kana³u!", + "¡No se puede cambiar de canal!", "ÁëëáãÞ êáíáëéïý áäýíáôç!", "Omöjligt att byta kanal!", "Nu pot comuta canalul!", @@ -2073,7 +2073,7 @@ const tI18nPhrase Phrases[] = { "Timer gjør opptak!", "Ajastintallennus käynnissä!", "Timer nagrywa!", - "¡Timer esta grabando!", + "¡Grabación en curso!", "Ãßíåôáé ðñïãñáìáôéóìÝíç åããñáöÞ!", "Timerstyrd inspelning pågår!", "Timer-ul tocmai înregistreazã!", @@ -2081,7 +2081,7 @@ const tI18nPhrase Phrases[] = { "El temporitzador està gravant!", "¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã!", "Snimanje po definiranom terminu!", - "Taimeri salvestamine!", + "Taimeriga salvestamine aktiivne!", "Timer optager nu!", }, { "Error while accessing recording!", @@ -2093,7 +2093,7 @@ const tI18nPhrase Phrases[] = { "Impossible d'accèder à l'enregistrement", "Feil under lesing av opptak!", "Tallenteen toistaminen epäonnistui!", - "Blad - brak dostepu do nagrania!", + "Bl±d podczas dostêpu do nagrania!", "¡Error al acceder a la grabación!", "Ðñüâëçìá óôÞí ðñïóðÝëáóç åããñáöÞò!", "Inspelningen går inte att läsa!", @@ -2114,7 +2114,7 @@ const tI18nPhrase Phrases[] = { "Erreur de suppression de l'enregistrement!", "Feil under sletting av opptak!", "Tallenteen poistaminen epäonnistui!", - "Blad przy usuwaniu nagrania!", + "Bl±d podczas usuwania nagrania!", "¡Error al borrar la grabación!", "ËÜèïò êáôÜ ôÞí äéáãñáöÞ ôïõ áñ÷åßïõ!", "Inspelningen går inte att ta bort!", @@ -2135,8 +2135,8 @@ const tI18nPhrase Phrases[] = { "*** Chaîne invalide! ***", "*** Ugyldig Kanal! ***", "*** Virheellinen kanavavalinta! ***", - "*** Niewazny kanal ***", - "*** Canal inválido ***", + "*** Niepoprawny kana³ ***", + "*** Canal no válido ***", "*** Áêõñï êáíÜëç ***", "*** Felaktig kanal ***", "*** Canal invalid ***", @@ -2157,7 +2157,7 @@ const tI18nPhrase Phrases[] = { "Ingen ledige DVB enheter for opptak!", "Ei vapaata DVB-viritintä tallennukselle!", "Brak wolnej karty DVB do nagrywania!", - "¡No hay dispositivo DVB disponible para grabar!", + "¡Ningún dispositivo DVB disponible para grabar!", "ÁíåðÜñêåéá DVB ÊÜñôáò ãéÜ åããñáöÞ!", "Det finns ingen ledig DVB enhet för inspelning!", "Nu mai sunt dispozitive DVB disponibile pentru înregistrare!", @@ -2177,7 +2177,7 @@ const tI18nPhrase Phrases[] = { "Chaîne non disponible!", "",//TODO "Kanava ei ole käytettävissä!", - "Kanal jest niedostepny!", + "Kana³ nie jest dostêpny!", "!Canal no disponible!", "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!", "Kanalen är inte tillgänglig!", @@ -2198,7 +2198,7 @@ const tI18nPhrase Phrases[] = { "Caractéristiques des chaînes ne sont pas uniques", "",//TODO "Kanava-asetukset eivät ole yksilölliset!", - "Nastawy kanalu sa niejednoznaczne!", + "Ustawienia kana³u nie s± unikalne!", "!Propiedades de canal duplicadas!", "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!", "Kanalinställningarna är ej unika!", @@ -2219,7 +2219,7 @@ const tI18nPhrase Phrases[] = { "Chaîne verrouillée (enregistrement en cours)!", "Kanalen er låst (opptak)!", "Kanava lukittu (tallennus käynnissä)!", - "Kanal zablokowany (nagrywanie w toku)!", + "Kana³ zablokowany (trwa nagrywanie)!", "¡Canal bloqueado (grabando)!", "Ôï êáíÜëé åßíáé áðïó÷ïëéìÝíï (Ãßíåôå åããñáöÞ)!", "Kanalen är låst (inspelning pågår)!", @@ -2240,8 +2240,8 @@ const tI18nPhrase Phrases[] = { "Impossible d'utiliser le mode transfert!", "Kan ikke starte transfer modus!", "Siirtotilan aloitus epäonnistui!", - "Tryb transferowy jest niemozliwy!", - "¡No puedo iniciar modo de transferencia!", + "Nie mo¿na uruchomiæ trybu transferu!", + "¡No se puede iniciar el modo de transferencia!", "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!", "Kan inte starta Transfer Mode!", "Nu pot porni modul de transfer!", @@ -2261,8 +2261,8 @@ const tI18nPhrase Phrases[] = { "Pas de marques d'édition définies!", "",//TODO "Muokkausmerkinnät puuttuvat!", - "Brak znakow montazowych!", - "",//TODO + "Nie zdefiniowano znaczników monta¿u!", + "¡No se definieron marcas de edición!", "ÄÝí Ý÷ïõí ïñéóôåß óçìåßá åðåîåñãáóßáò", "Det finns inga redigeringsmärken",//TODO "Nu s-au pus marcaje de montaj pentru aceastã înregistrare", @@ -2282,8 +2282,8 @@ const tI18nPhrase Phrases[] = { "Impossible de commencer le montage!", "Kan ikke starte redigeringsprosessen!", "Muokkauksen aloitus epäonnistui!", - "Uruchamianie montazu jest niemozliwe!", - "¡No puedo iniciar proceso de modificación!", + "Nie mo¿na uruchomiæ procesu edycji!", + "¡No se puede iniciar el proceso de edición!", "Áäõíáìßá åêêßíçóçò ôçò åðåîåñãáóßáò!", "Kan inte starta redigering!", "Nu pot porni montajul înregistrãrii!", @@ -2303,8 +2303,8 @@ const tI18nPhrase Phrases[] = { "Montage déjà en cours!", "Redigeringsprosessen er allerede aktiv!", "Muokkaus on jo käynnissä!", - "Montaz w toku!", - "¡Proceso de modificación ya fue iniciado!", + "Proces edycji jest ju¿ aktywny!", + "¡El proceso de edición ya está activo!", "Åðåîåñãáóßá âñßóêåôáé óÝ åîÝëéîç!", "Redigeringen är redan aktiv!", "Montajul înregistrãrii este deja activ!", @@ -2312,7 +2312,7 @@ const tI18nPhrase Phrases[] = { "Procés d'edició iniciat anteriorment!", "¿àÞæÕáá ÒØÔÕÞÜÞÝâÐÖÐ ãÖÕ ×ÐßãéÕÝ!", "Ureðivanje je veæ aktivirano!", - "Redigeerimine on juba aktiivne!", + "Redigeerimine juba aktiivne!", "Redigeringsproces er allerede aktiv!", }, { "Can't shutdown - option '-s' not given!", @@ -2324,8 +2324,8 @@ const tI18nPhrase Phrases[] = { "Arrêt impossible - option '-s' absente!", "Kan ikke slå av - startet uten parameteret '-s'!", "Sammutus ei onnistu - '-s' parametri puuttuu!", - "Wylaczenie niemozliwe - brak opcji '-s'!", - "¡No puedo apagar - opción '-s' ausente!", + "Nie mo¿na wy³±czyæ - nie podano opcji '-s'!", + "¡No se puede apagar - falta el parámetro '-s'!", "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!", "Kan inte avsluta, måste använda parameter '-s'", "Nu pot închide - vezi opþiunea '-s'", @@ -2336,6 +2336,27 @@ const tI18nPhrase Phrases[] = { "Väljalülitamine ebaõnnestus - '-s' parameeter puudub!", "Kan ikke slukke - parameter '-s' ikke angivet!", }, + { "Not enough disk space to start recording!", + "Nicht genügend Plattenplatz für Aufnahme!", + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + }, { "Low disk space!", "Platte beinahe voll!", "Premalo prostora na disku!", @@ -2345,8 +2366,8 @@ const tI18nPhrase Phrases[] = { "Disque presque plein!", "Lite ledig diskplass!", "Tallennustila loppumassa!", - "Dysk wkrotce pelny!", - "¡Disco casi lleno", + "Ma³o miejsca na dysku!", + "¡Poco espacio en disco!", "Ï óêëçñüò êïíôåýåé íÜ ãåìßóåé!", "Lågt diskutrymme!", "Spaþiul pe disc e foarte scãzut!", @@ -2354,7 +2375,7 @@ const tI18nPhrase Phrases[] = { "Disc gairebé ple!", "½ÕÔÞáâÐâÞçÝÞ ÜÕáâÐ ÝÐ ÔØáÚÕ!", "Nedovoljno prostora na disku", - "Kõvaketas peaaegu täis!", + "Kõvaketas täis!", "Kun lidt diskplads tilbage!", }, { "Opening CAM menu...", @@ -2366,8 +2387,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Avataan CA-moduulin valikkoa...", - "",//TODO - "",//TODO + "Otwieram menu CAM...", + "Abriendo el menú CAM...", "",//TODO "Åßóïäïò CAM Ìåíïý", "",//TODO @@ -2387,8 +2408,8 @@ const tI18nPhrase Phrases[] = { "Impossible d'ouvrir le menu CAM!", "",//TODO "CA-moduulin valikko ei saatavilla", - "CAM-Menu niedostepne!", - "¡No pudeo acceder al menú de la CAM!", + "Nie mo¿na otworzyæ menu CAM!", + "¡No se puede abrir el menú CAM!", "Áäýíáôç ç ðñüóâáóç óôü CAM ìåíïý!", "Det går inte att öppna CAM menyn!", "Nu pot deschide meniul CAM", @@ -2408,8 +2429,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "CA-moduuli palautetaan alkutilaan...", - "",//TODO - "",//TODO + "Resetujê CAM...", + "Reiniciando CAM...", "",//TODO "ÅðáíáöïñÜ CAM", "",//TODO @@ -2429,8 +2450,8 @@ const tI18nPhrase Phrases[] = { "Impossible de réinitialiser la CAM!", "",//TODO "CA-moduulin palautus alkutilaan epäonnistui!", - "Nieudany CAM-Reset!", - "¡No puedo reiniciar la CAM!", + "Nie mo¿na zresetowaæ CAM!", + "¡No se puede reiniciar CAM!", "Áäýíáôç ç åðáíáöïñÜ óôü CAM", "Kan inte återställa CAM!", "Nu pot reseta CAM", @@ -2450,8 +2471,8 @@ const tI18nPhrase Phrases[] = { "La CAM a été réinitialisée", "",//TODO "CA-moduuli palautettu alkutilaan", - "CAM-Reset wykonany", - "CAM reiniciada", + "CAM zosta³ zresetowany", + "CAM reiniciado", "¸ãéíå åðáíáöïñÜ óôï CAM", "CA modulen har återställts", "CAM-ul a fost resetat", @@ -2471,8 +2492,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Syötä %d numeroa!", - "",//TODO - "",//TODO + "Proszê podaæ %d cyfr!", + "¡Escriba %d dígitos!", "",//TODO "Ðáñáêáëü ðëçêôñïëïãÞóåôå %d íïýìåñá", "",//TODO @@ -2492,8 +2513,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "Pas d'audio disponible!", "Äänen kieli ei ole valittavissa!", - "",//TODO - "",//TODO + "D¼wiêk nie jest dostêpny!", + "¡No hay audio disponible!", "Ìç äéáèÝóéìïò Þ÷ïò", "Ljud saknas!" "Lipseºte sunetul!", @@ -2620,7 +2641,7 @@ const tI18nPhrase Phrases[] = { "Opptak", "Tallennus", "Nagranie", - "Opciones de Grabación", + "Opciones de grabación", "ÅããñáöÞ", "Inspelning", "Înregistrare", @@ -2641,7 +2662,7 @@ const tI18nPhrase Phrases[] = { "Spill av", "Toisto", "Odtwarzanie", - "Opciones de Reproducción", + "Opciones de reproducción", "ÁíáðáñáãùãÞ", "Uppspelning", "Redare", @@ -2661,7 +2682,7 @@ const tI18nPhrase Phrases[] = { "Divers", "Forskjellig", "Sekalaiset", - "Pozostale", + "Ró¿ne", "Varios", "ÄéÜöïñá", "Diverse", @@ -2682,7 +2703,7 @@ const tI18nPhrase Phrases[] = { "Plugins", "Plugins", "Laajennokset", - "Plugins", + "Wtyczki", "Plugins", "ÅðåêôÜóåéò", "Moduler", @@ -2703,7 +2724,7 @@ const tI18nPhrase Phrases[] = { "Plugin", "Plugin", "Laajennos", - "Plugin", + "Wtyczka", "Plugin", "ÅðÝêôáóç", "Modul", @@ -2724,7 +2745,7 @@ const tI18nPhrase Phrases[] = { "Redémarrer", "Start på nytt", "Käynnistä uudelleen", - "Zastartowac", + "Restart", "Reiniciar", "Åðáíåêêßíçóç", "Omstart", @@ -2746,7 +2767,7 @@ const tI18nPhrase Phrases[] = { "Langue", "Språk", "Kieli", - "Jezyk", + "Jêzyk", "Idioma", "Ãëþóóá", "Språk", @@ -2767,8 +2788,8 @@ const tI18nPhrase Phrases[] = { "Skin", "",// TODO "Ulkoasu", - "",// TODO - "",// TODO + "Skórka", + "Skin", "ÅðéöÜíåéá", "Skin", "Skin", @@ -2788,8 +2809,8 @@ const tI18nPhrase Phrases[] = { "Thème", "",// TODO "Teema", - "",// TODO - "",// TODO + "Motyw", + "Tema", "ÈÝìá", "Tema", "Temã", @@ -2809,8 +2830,8 @@ const tI18nPhrase Phrases[] = { "Gauche", "",// TODO "Vaakakeskitys", - "",// TODO - "",// TODO + "Od lewej", + "Izquierda", "ÁñéóôåñÜ", "Vänster", "Stânga", @@ -2830,8 +2851,8 @@ const tI18nPhrase Phrases[] = { "Haut", "",// TODO "Pystykeskitys", - "",// TODO - "",// TODO + "Od góry", + "Arriba", "ÅðÜíù", "Övre", "Sus", @@ -2851,7 +2872,7 @@ const tI18nPhrase Phrases[] = { "Largeur", "Bredde", "Leveys", - "Szerokosc", + "Szeroko¶æ", "Anchura", "ÌÜêñïò", "Bredd", @@ -2872,7 +2893,7 @@ const tI18nPhrase Phrases[] = { "Hauteur", "Høyde", "Korkeus", - "Wysokosc", + "Wysoko¶æ", "Altura", "¾øïò", "Höjd", @@ -2893,8 +2914,8 @@ const tI18nPhrase Phrases[] = { "Durée affichage message (s)", "Tid meldinger skal vises (s)", "Viestien esitysaika (s)", - "Czas wyswietlania wiadomosci (s)", - "Duración muestra mensajes (s)", + "Czas trwania wiadomo¶ci (s)", + "Duración de los mensajes (sg)", "×ñüíïò Ýíäåéîçò ìõíçìÜôùí (ä)", "Tid för meddelanden (sek)", "Timp afiºare mesaje (sec)", @@ -2914,8 +2935,8 @@ const tI18nPhrase Phrases[] = { "Utiliser les petits caractères", "",// TODO "Käytä pieniä kirjasimia", - "",// TODO - "",// TODO + "U¿ywaj ma³ej czcionki", + "Usar letra pequeña", "×ñéóçìïðïßçóç ìéêñüí ãñáììáôïóåéñþí", "Använd liten font", "Utilizare fonturi mici", @@ -2935,8 +2956,8 @@ const tI18nPhrase Phrases[] = { "jamais", "",// TODO "ei koskaan", - "",// TODO - "",// TODO + "nigdy", + "nunca", "ÐïôÝ" "aldrig", "niciodatã", @@ -2956,8 +2977,8 @@ const tI18nPhrase Phrases[] = { "dépend du skin", "",// TODO "ulkoasun mukaan", - "",// TODO - "",// TODO + "zal. od skórki", + "según skin", "ÅîáñôÜôå áðü ôÞí åðéöÜíåéá", "skin beroende", "dep. de skin", @@ -2977,8 +2998,8 @@ const tI18nPhrase Phrases[] = { "toujours", "",// TODO "aina", - "",// TODO - "",// TODO + "zawsze", + "siempre", "ðÜíôá", "alltid", "întotdeauna", @@ -2998,8 +3019,8 @@ const tI18nPhrase Phrases[] = { "Position infos chaînes", "Posisjon på kanalinformasjon", "Kanavatiedon sijainti", - "Lokalizacja informacji o kanale", - "Posición para información canal", + "Pozycja informacji o kanale", + "Posición para información de canal", "ÈÝóç ðëçñïöïñßáò êáíáëéþí", "Placering av kanalinformation", "Poziþia informaþiilor despre canal", @@ -3019,8 +3040,8 @@ const tI18nPhrase Phrases[] = { "Durée affichage infos chaînes (s)", "",// TODO "Kanavatiedon esitysaika (s)", - "",// TODO - "",// TODO + "Czas trwania informacji o kanale (s)", + "Tiempo de información de canal (sg)", "÷ñüíïò Ýíäåéêóçò ðëçñïöïñßùí êáíáëéïý óå (ä)", "Kanal information (s)", "Durata afiºãrii info-canal (s)", @@ -3028,7 +3049,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "¿ÞÚÐ× ØÝäÞàÜÐæØØ Þ ÚÐÝÐÛÕ (áÕÚ)", "Vrijeme prikaza informacije o programu (s)", - "Kanaliteate esitusaeg (s)", + "Kanaliinfo esitusaeg (s)", "Tid kanalinfo skal vises (s)", }, { "Setup.OSD$Info on channel switch", @@ -3040,8 +3061,8 @@ const tI18nPhrase Phrases[] = { "Affichage progr. en cours", "Info ved kanalskifte", "Näytä kanavatieto vaihdettaessa", - "Informacja przy zmianie kanalu", - "Información para cambio de canal", + "Informacja przy zmianie kana³u", + "Mostrar info al cambiar de canal", "Ðëçñïöïñßåò óôÞí áëëáãÞ êáíáëéïý", "Information vid kanalbyte", "Informaþii la comutarea canalului", @@ -3049,7 +3070,7 @@ const tI18nPhrase Phrases[] = { "Informació del canvi de canal", "¿ÞÚÐ×ëÒÐâì ØÝäÞàÜÐæØî Þ ÚÐÝÐÛÕ", "Informacije kod promjene kanala", - "Kanaliteate näitamine", + "Kanaliinfo näitamine", "Info ved kanalskift", }, { "Setup.OSD$Timeout requested channel info", @@ -3061,6 +3082,8 @@ const tI18nPhrase Phrases[] = { "", // TODO "", // TODO "Sulje kanavatieto pyydettäessä", + "Czas oczekiwania na informacje", + "Auto-cerrar al solicitar info de canal", "", // TODO "", // TODO "", // TODO @@ -3068,9 +3091,7 @@ const tI18nPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO - "", // TODO - "", // TODO - "", // TODO + "Kanaliinfo kuvamise ajapiirang", "", // TODO }, { "Setup.OSD$Scroll pages", @@ -3082,8 +3103,8 @@ const tI18nPhrase Phrases[] = { "Défilement par pages", "Rask rulling i menyer", "Valikoiden vieritys sivuttain", - "Przesuwac stronami", - "Desplazar página entera", + "Przesuwaj stronami", + "Deslizar páginas enteras", "Êýëéóç óåëßäáò", "Bläddra sidor", "Deruleazã pagini", @@ -3103,8 +3124,8 @@ const tI18nPhrase Phrases[] = { "Défilement rotatif", "",// TODO "Valikoiden vieritys ympäri", - "",// TODO - "",// TODO + "Skrajne pozycje s±siaduj±", + "Rotar arriba/abajo al deslizar", "Êýëéóç ãýñù-ãýñù", "Rulla texten", "Derulare circularã", @@ -3123,17 +3144,17 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO + "Sulje valikkonäppäimellä", "",// TODO + "Cerrar al pulsar botón de menú", "",// TODO + "Klawisz Menu zamyka", "",// TODO "",// TODO "",// TODO "",// TODO "",// TODO - "",// TODO - "",// TODO - "",// TODO - "",// TODO + "Sulgemine Menüü klahviga", "",// TODO }, { "Setup.OSD$Sort timers", @@ -3145,8 +3166,8 @@ const tI18nPhrase Phrases[] = { "Trier les programmations", "Sorter timere", "Järjestä ajastimet", - "Sortowanie timerow", - "Ordenar timers", + "Sortuj timery", + "Ordenar programas de grabación", "ÏñãÜíùóç ÷ñïíïðñïãñáììáôéóìþí", "Sortera timers", "Sortare timer-e", @@ -3166,8 +3187,8 @@ const tI18nPhrase Phrases[] = { "Dossiers d'enregistrements", "Kataloger til opptak", "Näytä tallennehakemistot", - "Wykaz nagran", - "Gracaciones en directorios", + "Katalogi nagrañ", + "Mostrar directorios de grabaciones", "ÖÜêåëïé åããñáöþí", "Kataloger för inspelningar", "Directoare înregistrãri", @@ -3187,8 +3208,8 @@ const tI18nPhrase Phrases[] = { "Inactivité avant rech. EPG (h)", "Ledig tid før EPG-søk (h)", "Ohjelmaoppaan taustapäivitys (h)", - "Czas do skanu EPG (h)", - "Tiempo hasta exploración EPG (h)", + "Czas skanowania EPG (h)", + "Tiempo de exploración de EPG (h)", "×ñüíïò äéÜñêåéáò åîÝôáóçò EPG óå þñåò", "EPG sökning timeout", "Interval achiziþie EPG (h)", @@ -3208,8 +3229,8 @@ const tI18nPhrase Phrases[] = { "Niveau de correction EPG", "Nivå for EPG-feilretting", "Ohjelmaoppaan korjaustaso", - "Poziom bledow EPG", - "Nivel para arreglar EPG", + "Stopieñ poprawek b³êdów EPG", + "Nivel de corrección de EPG", "Âáèìüò äéüñèùóçò ïäçãïý EPG", "Nivå för EPG bugfix", "Nivel corecþie EPG", @@ -3229,8 +3250,8 @@ const tI18nPhrase Phrases[] = { "Montrer l'EPG périmé (min)", "",// TODO "Vanha tieto näkyy (min)", - "",// TODO - "",// TODO + "Czas przechowywania EPG (min)", + "Mostrar datos antiguos de EPG (m)", "¸íäåéîç îåðåñáóìÝíùí ðëçñïöïñéþí (ëåðôÜ)", "Visa gammal information (min)", "Date EPG expirate cel mult (min)", @@ -3250,7 +3271,7 @@ const tI18nPhrase Phrases[] = { "Ajuster l'heure du système", "Juster system-klokken", "Tahdista kellonaika", - "Ustawianie czasu", + "Ustawiaj czas systemowy", "Ajustar reloj de sistema", "Óõíôïíéóìüò þñáò õðïëïãéóôÞ", "Ställ in systemtid", @@ -3271,8 +3292,8 @@ const tI18nPhrase Phrases[] = { "Utiliser l'heure de la chaîne", "Bruk klokke fra transponder", "Vastaanota kellonaika transponderilta", - "Transponder do ustawiania czasu", - "Transponder para reloj de sistema", + "U¿yj czasu z transpondera", + "Transponder del que tomar la hora", "Áíáìåôáäüôçò óõíôïíéóìïý þñáò", "Använd klockan från transponder", "Preia ora din transponder", @@ -3292,8 +3313,8 @@ const tI18nPhrase Phrases[] = { "Langues préférées", "",// TODO "Suosikkikielet", - "",// TODO - "",// TODO + "Preferowanych jêzyków", + "Idiomas preferidos", "Ðñïôåéíüìåíåò ãëþóóåò", "Önskade språk", "Limbi preferate", @@ -3313,8 +3334,8 @@ const tI18nPhrase Phrases[] = { "Langue préférée", "",// TODO "Suosikkikieli", - "",// TODO - "",// TODO + "Preferowany jêzyk", + "Idioma preferido", "Ðñïôåéíüìåíç ãëþóóá", "Önskat språk", "Limba preferatã", @@ -3334,8 +3355,8 @@ const tI18nPhrase Phrases[] = { "Carte DVB primaire", "Hoved DVB-enhet", "Ensisijainen DVB-sovitin", - "Pierwotny interfejs DVB", - "Primer interface DVB", + "Pierwszy interfejs DVB", + "Interfaz DVB primario", "Êýñéá DVB êÜñôá", "Primär DVB enhet", "Dispozitiv DVB primar", @@ -3355,8 +3376,8 @@ const tI18nPhrase Phrases[] = { "Format d'affichage", "",//TODO "Näyttömuoto", - "",//TODO - "",//TODO + "Format wy¶wietlania obrazu", + "Formato de visualización", "ÌïñöÞ áðåéêüíéóçò Âßíôåï", "Format för video display", "Formatul redãrii video", @@ -3439,8 +3460,8 @@ const tI18nPhrase Phrases[] = { "Format vidéo", "TV-Format", "Kuvasuhde", - "Format telewizyjny", - "Formato Vídeo", + "Format obrazu", + "Formato de vídeo", "ÌïñöÞ ïèüíçò", "Video format", "Format video", @@ -3460,8 +3481,8 @@ const tI18nPhrase Phrases[] = { "Utiliser le Dolby Digital", "",//TODO "Käytä Dolby Digital -ääntä", - "",//TODO - "",//TODO + "U¿ywaj Dolby Digital", + "Usar Dolby Digital", "×ñÞóç Þ÷ïõ Dolby Digital", "Använd Dolby Digital", "Sunet Dolby Digital", @@ -3481,8 +3502,8 @@ const tI18nPhrase Phrases[] = { "Mettre à jour les chaînes", "",// TODO "Päivitä kanavat", - "",// TODO - "",// TODO + "Aktualizuj kana³y", + "Actualizar canales", "ÅíçìÝñùóç êáíáëéþí", "Uppdatera kanaler", "Actualizare canale", @@ -3502,8 +3523,8 @@ const tI18nPhrase Phrases[] = { "noms uniquement", "",// TODO "vain nimet", - "",// TODO - "",// TODO + "tylko nazwy", + "sólo nombres", "ìüíï ïíüìáôá", "bara namn", "doar numele", @@ -3523,8 +3544,8 @@ const tI18nPhrase Phrases[] = { "noms et PIDs", "",// TODO "nimet ja PID:it", - "",// TODO - "",// TODO + "nazwy i PID-y", + "nombres y PIDs", "Ïíüìáôá êáß PIDs", "namn och PID", "nume si PID-uri", @@ -3532,7 +3553,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "ÝÐ×ÒÐÝØï Ø PIDë", "imena i identifikatore (PIDs)", - "nimed ja PID-id", + "nimi ja PID-id", "navne og PIDs", }, { "add new channels", @@ -3544,8 +3565,8 @@ const tI18nPhrase Phrases[] = { "ajouter chaînes", "",// TODO "uudet kanavat", - "",// TODO - "",// TODO + "dodawaj nowe kana³y", + "añadir canales", "ðñïóèÞêç íÝùí êáíáëéþí", "lägg till nya kanaler", "adãugare canale noi", @@ -3565,8 +3586,8 @@ const tI18nPhrase Phrases[] = { "ajouter transpondeurs", "",// TODO "uudet transponderit", - "",// TODO - "",// TODO + "dodawaj nowe transpondery", + "añadir transponders", "ðñïóèÞêç íÝïõ áíáìåôáäüôç", "lägg till nya transponders", "adãugare transpondere noi", @@ -3586,8 +3607,8 @@ const tI18nPhrase Phrases[] = { "Langues audio", "",//TODO "Äänen kielet", - "",//TODO - "",//TODO + "Jêzyków d¼wiêku", + "Idiomas de audio", "Ãëþóóåò Þ÷ïõ", "Antal ljudspråk", "Limbi sunet", @@ -3607,8 +3628,8 @@ const tI18nPhrase Phrases[] = { "Langue audio", "",//TODO "Äänen kieli", - "",//TODO - "",//TODO + "Jêzyk d¼wiêku", + "Idioma de audio", "Ãëþóóá Þ÷ïõ", "Ljudspråk", "Limba sunetului", @@ -3649,8 +3670,8 @@ const tI18nPhrase Phrases[] = { "Fréquence basse LNB (MHz)", "LO-frekvens i lavbåndet (MHz)", "LNB-alataajuus (MHz)", - "Dolna czestotliwosc LNB (MHz)", - "Frecuencia baja LNB (MHz)", + "Dolna czêstotliwo¶æ LNB (MHz)", + "Frecuencia inferior del LNB (MHz)", "ÊÜôù LNB-Óõ÷íüôçôá (MHz)", "Undre LNB frekvens (MHz)", "Frecvnþã LNB inferioarã (Mhz)", @@ -3670,8 +3691,8 @@ const tI18nPhrase Phrases[] = { "Fréquence haute LNB (MHz)", "LO-frekvens i høybåndet (MHz)", "LNB-ylätaajuus (MHz)", - "Gorna czestotliwosc LNB (MHz)", - "Frecuencia alta LNB (MHz)", + "Górna czêstotliwo¶æ LNB (MHz)", + "Frecuencia superior del LNB (MHz)", "¢íù LNB-Óõ÷íüôçôá (MHz)", "Övre LNB frekvens (MHz)", "Frecvnþã LNB superioarã (MHz)", @@ -3691,7 +3712,7 @@ const tI18nPhrase Phrases[] = { "Utiliser le DiSEqC", "Bruk DiSEqC", "Käytä DiSEqC-kytkintä", - "Uzywac DiSEqC", + "U¿ywaj DiSEqC", "Utilizar DiSEqC", "Åíåñãïðïßçóç DiSEqC", "Använd DiSEqC", @@ -3733,7 +3754,7 @@ const tI18nPhrase Phrases[] = { "Marge antérieure (min)", "Opptaksmargin start (min)", "Aloitusmarginaali (min)", - "Poczatkowy czas buforowy (min)", + "Margines na pocz±tku (min)", "Comenzar grabación antes (min)", "Ðñüóèåôïò ÷ñüíïò óôçí áñ÷Þ (ëåðôÜ)", "Marginal för start (min)", @@ -3754,8 +3775,8 @@ const tI18nPhrase Phrases[] = { "Marge postérieure (min)", "Opptaksmargin slutt (min)", "Lopetusmarginaali (min)", - "Koncowy czas buforowy (min)", - "Cortar grabación después (min)", + "Margines na koñcu (min)", + "Acabar grabación después (min)", "Ðñüóèåôïò ÷ñüíïò óôü ôÝëïò (ëåðôÜ)", "Marginal för stopp (min)", "Marjã la oprire (min)", @@ -3775,7 +3796,7 @@ const tI18nPhrase Phrases[] = { "Limite primaire", "Prioritetsgrense HovedDVB", "Ensisijaisen sovittimen prioriteettiraja", - "Pierwotny limit", + "Podstawowy limit", "Límite primario", "Ðñïôåýïí üñéï", "Primär gräns", @@ -3784,7 +3805,7 @@ const tI18nPhrase Phrases[] = { "Límit primari", "¼ØÝ. ßàØÞàØâÕâ ×ÐåÒÐâÐ ÞáÝ. ãáâàÞÙáâÒÐ", "Standardno ogranièenje", - "Esmase seadme prioriteet", + "Esmane prioriteet", "Primær grænse", }, { "Setup.Recording$Default priority", @@ -3796,8 +3817,8 @@ const tI18nPhrase Phrases[] = { "Priorité par défaut", "Normal prioritet (Timer)", "Tallenteen oletusprioriteetti", - "Priorytet pierwotny", - "Prioridad predefinida", + "Domy¶lny priorytet", + "Prioridad por defecto", "ÐñïêáèïñéóìÝíç ðñïôåñáéüôçôá", "Normal prioritet", "Prioritate implicitã", @@ -3817,8 +3838,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie par défaut (j)", "Normal levetid timer (d)", "Tallenteen oletuselinikä (d)", - "Pierwotna trwalosc (d)", - "Duración predefinida", + "Domy¶lny czas ¿ycia (d)", + "Duración por defecto (días)", "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)", "Normal livstid (dagar)", "Timp de pãstrare predefinit (zile)", @@ -3838,8 +3859,8 @@ const tI18nPhrase Phrases[] = { "Priorité des pauses", "",// TODO "Taukotallenteen prioriteetti", - "Priorytet przerwy", - "",// TODO + "Priorytet pauzy", + "Prioridad en modo pausa", "Ðñïôåñáéüôçôá äéáëåßììáôïò", "Prioritet för direktinspelning", "Prioritate pauzã", @@ -3859,8 +3880,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie des pauses (j)", "",// TODO "Taukotallenteen elinikä (d)", - "Okres trwania przerwy (d)", - "",// TODO + "Czas ¿ycia pauzy (d)", + "Duración en modo pausa (días)", "ÄéÜñêåéá äéáëåßìáôïò", "Livstid för direktinspelning (dagar)", "Pãstrarea emisiunilor 'pauzate' (zile)", @@ -3880,7 +3901,7 @@ const tI18nPhrase Phrases[] = { "Utiliser le nom de l'épisode", "Bruk episodenavn", "Käytä jakson nimeä", - "Czy uzywac nazwe epizodu", + "U¿ywaj nazwy epizodu", "Utilizar nombre de episodo", "×ñÞóç ïíüìáôïò åðåéóïäßïõ", "Använd episodnamn", @@ -3901,8 +3922,8 @@ const tI18nPhrase Phrases[] = { "Utiliser le VPS", "",// TODO "Käytä VPS-toimintoa", - "",// TODO - "",// TODO + "U¿ywaj VPS", + "Usar servicio VPS", "×ñÞóç VPS", "Använd VPS", "Utilizeazã VPS", @@ -3922,8 +3943,8 @@ const tI18nPhrase Phrases[] = { "Marge VPS", "",// TODO "VPS-toiminnon aloitusmarginaali (s)", - "",// TODO - "",// TODO + "Margines VPS (s)", + "Margen VPS (sg)", "Ðåñéèþñéï VPS (ä)", "VPS marginal (s)", "Marjã de timp la utilizare VPS (s)", @@ -3943,8 +3964,8 @@ const tI18nPhrase Phrases[] = { "Marquage enregistr. immédiats", "Markere direkteopptak", "Merkitse pikatallenne", - "Zaznaczyc natychm. nagranie", - "Marcar grabaciones instantáneas", + "Zaznaczaj natychm. nagrywanie", + "Marcar grabaciones inmediatas", "ÅðéëïãÞ ôñÝ÷ïõóáò åããñáöÞò", "Märk direktinspelning", "Marcheazã înregistrare imediatã", @@ -3964,8 +3985,8 @@ const tI18nPhrase Phrases[] = { "Noms enregistr. immédiats", "Navngi direkteopptak", "Nimeä pikatallenne", - "Nazwac natychm. nagranie", - "Nombrar grabaciones instantáneas", + "Nazywaj natychm. nagrywanie", + "Nombrar grabaciones inmediatas", "Ïíïìáóßá ôñÝ÷ïõóáò åããñáöÞò", "Namnge direktinspelning", "Nume înregistrare imediatã", @@ -3985,8 +4006,8 @@ const tI18nPhrase Phrases[] = { "Durée enregistr. immédiat (min)", "",//TODO "Pikatallennuksen kesto (min)", - "Dlugosc bezposredniego nagrania (min)", - "Tiempo de grabación instantánea (min)", + "Czas natychm. nagrywania (min)", + "Tiempo de grabación inmediata (min)", "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)", "Direktinspelning längd (min)", "Timpul de înregistare imediatã (min)", @@ -4006,8 +4027,8 @@ const tI18nPhrase Phrases[] = { "Taille maxi des fichiers (MB)", "Maksimal størrelse på videofiler (MB)", "Suurin tiedostokoko (Mt)", - "Maks. wielkosc pliku (MB)", - "Tamaño máx. de fichero (MB)", + "Maksymalny rozmiar pliku (MB)", + "Tamaño máximo de fichero (MB)", "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)", "Maximal filstorlek för inspelning (MB)", "Dimensiune maximã a fiºierului video (MB)", @@ -4027,8 +4048,8 @@ const tI18nPhrase Phrases[] = { "Séparer les séquences éditées", "Splitt redigerte filer", "Jaottele muokatut tallenteet", - "Dzielic montowane pliki", - "Quebrar ficheros", + "Dziel edytowane pliki", + "Partir ficheros editados", "ÄéáìÝëéóìüò åðåîåñãáóìÝíùí áñ÷åßùí", "Dela upp redigerade filer", "Separare fiºiere montate", @@ -4048,7 +4069,7 @@ const tI18nPhrase Phrases[] = { "Mode multi-vitesses", "Multispeed modus", "Käytä toiston moninopeustilaa", - "Tryb wielopredkosciowy", + "Tryb wieloprêdko¶ciowy", "Modo multi-velocidad", "Ìåèïäïò ðïëëáðëÞò ôá÷ýôçôáò", "Multispeed mode", @@ -4069,8 +4090,8 @@ const tI18nPhrase Phrases[] = { "Affichage mode de lecture", "Vis avspillingsmodus", "Näytä toiston tila", - "Wyswietlac status odtwarzania", - "Mostrar modo de replay", + "Pokazuj tryb odtwarzania", + "Mostrar modo de reproducción", "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò", "Visa uppspelningsläge", "Afiºeazã redarea", @@ -4090,8 +4111,8 @@ const tI18nPhrase Phrases[] = { "ID de reprise", "Resume ID",// TODO "Tallenteen paluutunniste", - "ID odtwarzania", - "Continuar ID", + "ID wznowienia", + "ID de continuación", "ID áíáìåôÜäïóçò", "Återuppta ID", "Identificator continuare", @@ -4111,8 +4132,8 @@ const tI18nPhrase Phrases[] = { "MinEventTimeout (min)", "Minste hendelsespause (min)", "Tapahtuman odotusaika (min)", - "Min. czas do nast. akcji (Event) (min)", - "Tiempo mínimo pausa (min)", + "Minimalny czas audycji (min)", + "Tiempo mín. antes de un evento (m)", "ÅëÜ÷éóôïò ÷ñÜíïò ðáñåìâïëÞò (ëåðôÜ)", "Minsta händelse-pause (min)", "Duratã minimã emisiuni (min)", @@ -4132,8 +4153,8 @@ const tI18nPhrase Phrases[] = { "Durée minimale d'inact. (min)", "Minimumstid med inaktivitet (min)", "Käyttäjätoiminnon odotusaika (min)", - "Min. brak aktywnosci uzytkownika (min)", - "Tiempo mínimo inactividad (min)", + "Minimalny czas nieaktywno¶ci (min)", + "Tiempo mín. de inactividad (m)", "ÅëÜ÷éóôïò ÷ñüíïò áíáìïíÞò (ëåðôÜ)", "Minsta användar-inaktivitet (min)", "Durata minimã de inactivitate (min)", @@ -4153,8 +4174,8 @@ const tI18nPhrase Phrases[] = { "Temps maxi SVDRP (s)", "Ubrukt SVDRP-levetid (s)", "SVDRP-komennon odotusaika (s)", - "Min. brak aktywnosci SVDRP (s)", - "SVDRP Timeout (s)", + "Czas oczekiwania na SVDRP (s)", + "Tiempo de espera de SVDRP (sg)", "SVDRP äéáêïðÞ (ä)", "SVDRP Timeout (s)", "Timeout SVDRP (sec)", @@ -4174,8 +4195,8 @@ const tI18nPhrase Phrases[] = { "Prise en compte chaîne (s)", "",// TODO "Kanavavalinnan odotusaika (s)", - "",// TODO - "",// TODO + "Czas oczekiwania na zap (s)", + "Considerar canal como visto (sg)", "ÆÜðéíãê äéáêïðÞ (ä)", "Zap timeout(s)", "Interval zapping (s)", @@ -4196,8 +4217,8 @@ const tI18nPhrase Phrases[] = { "LMMJVSD", "MTOTFLS", "MTKTPLS", - "PWSCPSN", - "LMMJVSD", + "PW¦CPSN", + "LMXJVSD", "ÄÔÔÐÐÓÊ", "MTOTFLS", "LMMJVSD", @@ -4217,7 +4238,7 @@ const tI18nPhrase Phrases[] = { "LunMarMerJeuVenSamDim", "ManTirOnsTorFreLørSøn", "Ma Ti Ke To Pe La Su ", - "PonWtoSroCzwPiaSobNie", + "PonWto¦roCzwPi±SobNie", "LunMarMieJueVieSabDom", "ÄåõÔñßÔåôÐÝìÐáñÓÜâKõñ", "MånTisOnsTorFreLörSön", @@ -4239,8 +4260,8 @@ const tI18nPhrase Phrases[] = { " aàbcçdeéèêfghiîjklmnoôpqrstuùûvwxyz0123456789-.#~,/_@", "",// TODO " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@", - " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@", - " aábcdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@", + " a±bcædeêfghijkl³mnñoópqrs¶tuvwxyz¼¿0123456789-.#~,/_@", + " aábcçdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@", " áÜâãäåÝæçÞèéßêëìíîïüðñóòôõýö÷øùþ0123456789-.#~,/_@abcdefghijklmnopqrstuvwxyz", " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@", " aãâbcdefghiîjklmnopqrsºtþuvwxyz0123456789-.#~,/_@", @@ -4261,6 +4282,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoö6\tpqrs7\ttuv8\twxyz9", + " 0\t-.#~,/_@1\tabc2±æ\tdef3ê\tghi4\tjkl5³\tmno6ñó\tpqrs7¶\ttuv8\twxyz9¼¿", + " 0\t-.#~,/_@1\tabcáç2\tdefé3\tghií4\tjkl5\tmnoñó6\tpqrs7\ttuvú8\twxyz9", "",//TODO "",//TODO "",//TODO @@ -4268,9 +4291,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO + " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoõö6\tpqrsð7\ttuvü8\twxyzþ9", "",//TODO }, // Learning keys: @@ -4283,8 +4304,8 @@ const tI18nPhrase Phrases[] = { "Apprentissage des codes de télécommande", "Lære fjernkontrolltaster", "Kaukosäätimen opettaminen", - "Nauka kodu pilota", - "Aprendiendo teclas del telemando", + "Nauka klawiszy pilota", + "Aprendiendo teclas del mando", "ÅêìÜèçóç ðëÞêôñùí ôçëå÷åéñéóìïý", "Inlärning av fjärrkontrollsknappar", "Învãþare taste telecomandã", @@ -4304,8 +4325,8 @@ const tI18nPhrase Phrases[] = { "Phase 1: Détection du type de code", "Fase 1: Finne fjernkontroll-kodetype", "Vaihe 1: Koodauksen tunnistaminen", - "Faza 1: Detekcja typu kodu", - "Fase 1: Detectando tipo de receptor", + "Etap 1: Wykrywanie rodzaju kodu pilota", + "Fase 1: Detectando tipo de mando", "ÖÜóç 1: Áíß÷íåõóç êþäéêá RC", "Steg1: identifiering av kod", "Faza 1: Detecþia tipului telecomenzii", @@ -4325,8 +4346,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur une touche de la télécommande", "Trykk en av tastene på fjernkontrollen", "Paina mitä tahansa kaukosäätimen näppäintä", - "Nacisnac klawisz pilota", - "Pulse una tecla en el telemando", + "Naci¶nij dowolny klawisz na pilocie", + "Pulse cualquier tecla en el mando", "Ðßåóå Ýíá ðëÞêôñï óôï ôçëå÷åéñéóôÞñéï", "Tryck valfri tangent på fjärrkontrollen", "Apãsaþi o tastã pe telecomandã", @@ -4346,8 +4367,8 @@ const tI18nPhrase Phrases[] = { "Code de la télécommande détecté!", "Fjernkontroll-kodetype funnet!", "Näppäinpainallus vastaanotettu!", - "Kod pilota zostal poznany!", - "¡Código detectado!", + "Wykryto kod pilota!", + "¡Código RC detectado!", "ÂñÝèçêå êþäéêáò RC!", "Koden detekterad!", "S-a detectat tipul telecomenzii!", @@ -4367,7 +4388,7 @@ const tI18nPhrase Phrases[] = { "N'appuyer sur aucune touche ...", "Ikke trykk på noen av tastene...", "Älä paina kaukosäätimen näppäimiä...", - "Nie naciskac klawiszy...", + "Nie naciskaj teraz ¿adnego klawisza...", "No pulse ninguna tecla...", "ÌÞí ðáôÜò ðëÞêôñá...", "Tryck inte på någon knapp...", @@ -4388,7 +4409,7 @@ const tI18nPhrase Phrases[] = { "Phase 2: Apprentissage des codes des touches", "Fase 2: Lære spesifikke tastekoder", "Vaihe 2: Näppäinkoodien opettelu", - "Faza 2: Nauka pojedynczych klawiszy", + "Etap 2: Nauka konkretnych kodów klawiszy", "Fase 2: Aprendiendo códigos específicos", "Öáóç 2: ÅêìÜèçóç ìåìïíïìÝíùí ðëÞêôñùí", "Fas 2: Inlärning av specifika knapp-koder", @@ -4409,8 +4430,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur la touche '%s'", "Trykk tasten for '%s'", "Paina näppäintä toiminnolle '%s'", - "Nacisnac klawisz dla '%s'", - "Pulsar tecla para '%s'", + "Naci¶nij klawisz dla '%s'", + "Pulse la tecla para '%s'", "Ðßåóå ôï ðëÞêôñï ãéÜ '%s'", "Tryck på knappen för '%s'", "Apãsaþi tasta pentru '%s'", @@ -4430,7 +4451,7 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Haut' pour confirmer", "Trykk 'Opp' for å bekrefte", "Hyväksy painamalla 'Ylös'", - "Nacisnac 'Gora' do potwierdzenia", + "Naci¶nij 'Do góry' aby potwierdziæ", "Pulse 'Arriba' para confirmar", "Ðßåóå 'ðÜíù' ãéÜ áðïäï÷Þ", "Tryck 'Upp' för att bekräfta", @@ -4451,8 +4472,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Bas' pour continuer", "Trykk Ned' for å fortsette", "Jatka painamalla 'Alas'", - "Nacisnac 'Dol' zeby kontynuowac", - "Pulse 'Abajo' para confirmar", + "Naci¶nij 'Na dó³' aby kontynuowaæ", + "Pulse 'Abajo' para continuar", "Ðßåóå 'êÜôù' ãéÜ óõíÝ÷åéá", "Tryck 'Ner' för att bekräfta", "Apãsaþi 'Jos' pentru continuare", @@ -4472,7 +4493,7 @@ const tI18nPhrase Phrases[] = { "(Appuyer sur 'Haut' pour revenir en arrière)", "(trykk 'Opp' for å gå tilbake)", "(palaa takaisin painamalla 'Ylös')", - "(Nacisnac 'Gora' cofa)", + "(naci¶nij 'Do góry' aby siê cofn±æ)", "(Pulse 'Arriba' para retornar)", "(Ðßåóå 'ðÜíù' ãéÜ åðéóôñïöÞ", "(Tryck 'Upp' för att backa)", @@ -4493,8 +4514,8 @@ const tI18nPhrase Phrases[] = { "(Appuyer sur 'Bas' pour terminer)", "(trykk 'Ned' for å avslutte innlæring)", "(lopeta opettaminen painamalla 'Alas')", - "(Nacisnac 'Dol' by zakonczyc)", - "(Pulse 'Abajo' para terminar programación teclas)", + "(naci¶nij 'Na dó³' aby zakoñczyæ definiowanie)", + "(Pulse 'Abajo' para terminar el aprendizaje)", "(Ðßåóå 'êÜôù' ãéÜ ôåñìáôéóìü äçëþóåùí ðëÞêôñùí)", "(Tryck 'Ner' för att avsluta inlärningen)", "(Apãsaþi 'Jos' pentru terminare)", @@ -4514,8 +4535,8 @@ const tI18nPhrase Phrases[] = { "('Menu' pour passer cette touche)", "",// TODO "näppäimen puuttuessa paina 'Valikko'", - "(Nacisnac 'Menu' by ominac klawisz)", - "Pulse 'Menu' para saltarse esta tecla", + "(naci¶nij 'Menu' aby pomin±æ ten klawisz)", + "Pulse 'Menú' para omitir esta tecla", "Ðßåóå 'ìåíïý' ãéá ðñïóðÝñáóç áõôïý ôïý ðëÞêôñïõ", "(Tryck 'Meny' för att hoppa över knappen.)", "Apãsaþi 'Meniu' pentru a sãri peste aceastã tastã", @@ -4535,8 +4556,8 @@ const tI18nPhrase Phrases[] = { "Phase 3: Sauvegarde des codes des touches", "Fase 3: Lagre tastekoder", "Vaihe 3: Näppäinkoodien tallentaminen", - "Faza 3: Zapamietac Kod", - "Fase 3: Guardar códigos de teclas", + "Etap 3: Zapisywanie kodów klawiszy", + "Fase 3: Guardando los códigos de teclas", "Öáóç 3: ÁðïèÞêåõóç êùäéêþí", "Fas 3: Spara knappkoder", "Faza 3: Salvarea codurilor de taste", @@ -4556,7 +4577,7 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Haut' pour sauvegarder, 'Bas' pour annuler", "Trykk 'Opp' for å lagre, 'Ned' for å avbryte", "Paina 'Ylös' tallentaaksesi ja 'Alas' peruuttaaksesi", - "'Gora' zapamietuje, 'Dol' przerywa", + "Naci¶nij 'Do góry' aby zapisaæ, 'Na dó³' - aby anulowaæ", "Pulse 'Arriba' para guardar, 'Abajo' para anular", "Ðßåóå 'ÐÜíù' ãéá áðïèÞêåõóç, 'ÊÜôù' ãéá áêýñùóç", "Tryck 'Upp' för att spara eller 'Ner' för att avsluta.", @@ -4578,7 +4599,7 @@ const tI18nPhrase Phrases[] = { "Haut", "Opp", "Ylös", - "Gora", + "Do góry", "Arriba", "ÐÜíù", "Upp", @@ -4599,7 +4620,7 @@ const tI18nPhrase Phrases[] = { "Bas", "Ned", "Alas", - "Dol", + "Na dó³", "Abajo", "ÊÜôù", "Ner", @@ -4621,7 +4642,7 @@ const tI18nPhrase Phrases[] = { "Meny", "Valikko", "Menu", - "Menu", + "Menú", "Ìåíïý", "Meny", "Meniu", @@ -4683,7 +4704,7 @@ const tI18nPhrase Phrases[] = { "Gauche", "Venstre", "Vasemmalle", - "Lewo", + "W lewo", "Izquierda", "ÁñéóôåñÜ", "Vänster", @@ -4704,7 +4725,7 @@ const tI18nPhrase Phrases[] = { "Droite", "Høyre", "Oikealle", - "Prawo", + "W prawo", "Derecha", "ÄåîéÜ", "Höger", @@ -4767,7 +4788,7 @@ const tI18nPhrase Phrases[] = { "Jaune", "Gul", "Keltainen", - "Zolty", + "¯ó³ty", "Amarillo", "Êßôñéíï", "Gul", @@ -4809,8 +4830,8 @@ const tI18nPhrase Phrases[] = { "Info", "",//TODO "Tiedot", - "",//TODO - "",//TODO + "Info", + "Info", "Ðëçñïöïñßåò", "Info", "Info", @@ -4830,7 +4851,7 @@ const tI18nPhrase Phrases[] = { "Lecture", "",// TODO "Toista", - "Odtworzenie", + "Odtwórz", "Reproducir", "ÁíáðáñáãùãÞ", "Spela upp", @@ -4851,7 +4872,7 @@ const tI18nPhrase Phrases[] = { "Pause", "",// TODO "Tauko", - "Przerwa", + "Pauza", "Pausa", "Ðáýóç", "Pausa", @@ -4893,7 +4914,7 @@ const tI18nPhrase Phrases[] = { "Enregistrement", "",// TODO "Tallenna", - "Nagrywac", + "Nagrywaj", "Grabar", "EããñáöÞ", "Spela in", @@ -4914,8 +4935,8 @@ const tI18nPhrase Phrases[] = { "Avance rapide", "",// TODO "Pikakelaus >>", - "Naprzod", - "Adelante rápido", + "Do przodu", + "Avance rápido", "Ðñïþèçóç åìðñüò", "Snabbspolning framåt", "Derulare înainte", @@ -4935,8 +4956,8 @@ const tI18nPhrase Phrases[] = { "Retour rapide", "",// TODO "Pikakelaus <<", - "Wstecz", - "Atrás rápido", + "Do ty³u", + "Retroceso rápido", "Ðñïþèçóç ðßóù", "Snabbspolning bakåt", "Derulare înapoi", @@ -4956,8 +4977,8 @@ const tI18nPhrase Phrases[] = { "Veille", // This one caused some bug reports ;) "Power", "Virtakytkin", - "Wylaczyc", - "Corriente", + "Wy³±cz", + "Apagar", "Këåßóéìï", "På/Av", "Închidere", @@ -4977,8 +4998,8 @@ const tI18nPhrase Phrases[] = { "Chaîne+", "",// TODO "Kanava +", - "Kanal+", - "Canal +", + "Kana³+", + "Canal+", "ÊáíÜëé+", "Kanal+", "Canal+", @@ -4998,8 +5019,8 @@ const tI18nPhrase Phrases[] = { "Chaîne-", "",// TODO "Kanava -", - "Kanal-", - "Canal -", + "Kana³-", + "Canal-", "ÊáíÜëé-", "Kanal-", "Canal-", @@ -5019,7 +5040,7 @@ const tI18nPhrase Phrases[] = { "Volume+", "Volum+", "Äänenvoimakkuus +", - "Glosnej", + "G³o¶niej", "Volumen+", "¸íôáóç+", "Volym+", @@ -5061,7 +5082,7 @@ const tI18nPhrase Phrases[] = { "Coupure du son", "Lyd av", "Äänetön", - "Cisza", + "Wycisz", "Mudo", "Óéùðçëü", "Ljud Av", @@ -5082,8 +5103,8 @@ const tI18nPhrase Phrases[] = { "Audio", "",// TODO "Ääni", - "",// TODO - "",// TODO + "D¼wiêk", + "Audio", "¹÷ïò", "Ljud", "Sunet", @@ -5146,7 +5167,7 @@ const tI18nPhrase Phrases[] = { "off", "",// TODO "pois", - "wyl.", + "wy³±cz", "off", "êëåéóôü", "av", @@ -5167,7 +5188,7 @@ const tI18nPhrase Phrases[] = { "aucun", "",// TODO "tyhjä", - "zaden", + "brak", "ninguno", "êáíÝíá", "ingen", @@ -5209,8 +5230,8 @@ const tI18nPhrase Phrases[] = { "haut", "øvre", "yläreuna", - "gora", - "parte superior", + "góra", + "arriba", "ðÜíù", "övre", "sus", @@ -5230,8 +5251,8 @@ const tI18nPhrase Phrases[] = { "bas", "nedre", "alareuna", - "dol", - "parte inferior", + "dó³", + "abajo", "êÜôù", "undre", "jos", @@ -5251,7 +5272,7 @@ const tI18nPhrase Phrases[] = { "Disque", "Disk", "Levy", - "Disk", + "Dysk", "Disco", "Äßóêïò", "Disk", @@ -5272,7 +5293,7 @@ const tI18nPhrase Phrases[] = { "restant", "ledig", "vapaana", - "pozostalo", + "wolnego", "libre", "Åëåýèåñïò", "ledigt", @@ -5294,7 +5315,7 @@ const tI18nPhrase Phrases[] = { "Hopp: ", "Siirry: ", "Skok: ", - "Salta a: ", + "Saltar: ", "ÔïðïèÝôçóç: ", "Hopp: ", "Salt la: ", @@ -5314,7 +5335,7 @@ const tI18nPhrase Phrases[] = { "Volume ", "Volum ", "Äänenvoimakkuus ", - "Glosnosc ", + "G³o¶no¶æ ", "Volumen ", "¸íôáóç ", "Volym ", @@ -5335,7 +5356,7 @@ const tI18nPhrase Phrases[] = { " Arrêter la lecture", " Stopp avspilling", " Lopeta toisto", - " Zatrzymac odtwarzanie", + " Zatrzymaj odtwarzanie", " Parar reprodución", " ÔÝëïò áíáðáñáãùãÞò", " Avsluta uppspelning", @@ -5356,7 +5377,7 @@ const tI18nPhrase Phrases[] = { " Arrêter l'enregistrement ", " Stopp opptak fra ", " Lopeta tallennus ", - " Zatrzymac nagrywanie ", + " Zatrzymaj nagrywanie ", " Parar grabación ", " ÔÝëïò åããáöÞò ", " Avsluta inspelning ", @@ -5377,8 +5398,8 @@ const tI18nPhrase Phrases[] = { " Annuler le montage", " Avbryt redigering", " Peru muokkaus", - " Przerwac montaz", - " Anular modificación ", + " Anuluj edycjê", + " Anular edición", " Áêýñùóç åðåîåñãáóßáò", " Avbryt redigering", " Opreºte montajul înregistrãrii", @@ -5398,8 +5419,8 @@ const tI18nPhrase Phrases[] = { "Changement de carte DVB primaire...", "Bytter første DVB-enhet...", "Vaihdetaan ensisijaista DVB-sovitinta...", - "Pierwszy interfejs DVB przelacza...", - "Cambio al interface DVB primario...", + "Przê³±czam na pierwszy interfejs DVB...", + "Cambiando el interfaz DVB primario...", "Ç êýñéá DVB êÜñôá áëëÜæåé...", "Byter primär DVB enhet...", "Comut dispozitiv DVB primar...", @@ -5419,8 +5440,8 @@ const tI18nPhrase Phrases[] = { "Haut/Bas -> nouvelle place - OK -> déplacer", "Opp/Ned for ny plass - OK for å flytte", "'Ylös/Alas' uusi paikka - 'OK' hyväksy", - "Gora/Dol na nowa pozycje - Ok zmienia", - "Arriba/Abajo para el nuevo lugar - OK para mover", + "Do góry/Na dó³ na now± pozycjê - Ok zatwierdza", + "Arriba/Abajo para mover - OK para confirmar", "ÐÜíù/ÊÜôù ãéÜ íÝá èÝóç. ÌåôÜ ÏÊ", "Upp/Ner för nya platsen - därefter OK för att flytta", "Sus/Jos pentru noua locaþie - OK pentru a muta", @@ -5440,8 +5461,8 @@ const tI18nPhrase Phrases[] = { "Opération de montage lancée", "Redigeringsprosess startet", "Muokkaus aloitettu", - "Uruchomiony proces montazu", - "Proceso modificación iniciado", + "Proces edycji rozpoczêty", + "Proceso de edición iniciado", "Áñ÷éóå ç åðåîåñãáóßá", "Redigeringen startar", "Montajul înregistrãrii a început", @@ -5461,8 +5482,8 @@ const tI18nPhrase Phrases[] = { "Montage terminé", "Redigeringsprosess avsluttet", "Muokkaus valmis", - "Proces montazu zakonczony", - "Proceso de modificación terminado", + "Proces edycji zakoñczony", + "Proceso de edición terminado", "Ç åðåîåñãáóßá ôåëåßùóå", "Redigering avslutad", "Montajul înregistrãrii s-a terminat", @@ -5470,7 +5491,7 @@ const tI18nPhrase Phrases[] = { "Procés d'edició finalitzat", "¼ÞÝâÐÖ ÞÚÞÝçÕÝ", "Rezanje zavr¹eno", - "Redigeerimine on lõpetatud", + "Redigeerimine lõpetatud", "Redigeringsproces afsluttet", }, { "Editing process failed!", @@ -5482,8 +5503,8 @@ const tI18nPhrase Phrases[] = { "Echec du montage!", "Feil under redigering!", "Muokkaus epäonnistui!", - "Bledny proces montazu!", - "Modificación ha fallado!", + "Proces edycji nie powiód³ siê!", + "¡Proceso de edición fallido!", "Ç åðåîåñãáóßá áðÝôõ÷å!", "Redigeringsprocessen misslyckades", "Montajul înregistrãrii a eºuat", @@ -5503,6 +5524,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Tallennus aloitettu", + "Rozpoczêto nagrywanie", + "Iniciando grabación", "",//TODO "",//TODO "",//TODO @@ -5510,9 +5533,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO + "Salvestamine algas", "",//TODO }, { "Pausing live video...", @@ -5524,8 +5545,8 @@ const tI18nPhrase Phrases[] = { "Pause de l'émission en direct...", "",// TODO "Pysäytetään lähetys...", - "Zatrzymany program biezacy...", - "Emisión en directo parada...", + "Pauzujê program na ¿ywo...", + "Pausa de la emisión en directo...", "ÐÜãùìá æùíôáíïý óÞìáôïò", "Pausar direktinspelningen", "Trec în pauzã emisiunea transmisã...", @@ -5545,8 +5566,8 @@ const tI18nPhrase Phrases[] = { "Mise à jour du guide des programmes", "",// TODO "Ohjelmaoppaan päivitys aloitettu", - "",// TODO - "",// TODO + "Rozpoczynam skanowanie EPG", + "Iniciando la exploración de EPG", "Áñ÷Þ óÜñùóç EPG", "Påbörjar EPG skanning", "Pornesc achiziþia EPG", @@ -5566,7 +5587,7 @@ const tI18nPhrase Phrases[] = { "Ce plugin n'a pas de paramètres!", "",// TODO "Tällä laajennoksella ei ole asetuksia!", - "Ten plugin niema parametrow!", + "Ta wtyczka nie ma ¿adnych ustawieñ!", "Este plugin no admite configuración", "ÁõôÞ ç åðÝêôáóç äåí Ý÷åé ðáñÜìåôñïõò!", "Den här modulen har inga parametrar", @@ -5587,8 +5608,8 @@ const tI18nPhrase Phrases[] = { "VDR Classique",// TODO "",// TODO "Klassinen VDR", - "",// TODO - "",// TODO + "Klasyczny VDR", + "VDR clásico", "Êëáóéêü VDR", "Klassisk VDR", "VDR clasic", @@ -5608,8 +5629,8 @@ const tI18nPhrase Phrases[] = { "Consoles ST:TNG", "",// TODO "ST:TNG konsoli", - "",// TODO - "",// TODO + "Panel ST:TNG", + "Paneles ST:TNG", "ÌïñöÝò ST:TNG", "ST:TNG konsoll", "Cons. ST:TNG", @@ -5629,8 +5650,8 @@ const tI18nPhrase Phrases[] = { "Sans titre", "",// TODO "Ei esitystä", - "",// TODO - "",// TODO + "Bez tytu³u", + "Sin título", "×ùñßò Ôßôëï", "ingen titel", "Fãrã titlu", @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: keys.c 1.10 2006/01/05 15:39:26 kls Exp $ + * $Id: keys.c 1.11 2006/01/16 17:01:25 kls Exp $ */ #include "keys.h" @@ -250,9 +250,11 @@ cKeyMacros KeyMacros; const cKeyMacro *cKeyMacros::Get(eKeys Key) { - for (cKeyMacro *k = First(); k; k = Next(k)) { - if (*k->Macro() == Key) - return k; - } + if (Key != kNone) { + for (cKeyMacro *k = First(); k; k = Next(k)) { + if (*k->Macro() == Key) + return k; + } + } return NULL; } @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.396 2006/01/15 15:02:36 kls Exp $ + * $Id: menu.c 1.403 2006/01/22 16:06:39 kls Exp $ */ #include "menu.h" @@ -36,6 +36,8 @@ #define MAXRECORDCONTROLS (MAXDEVICES * MAXRECEIVERS) #define MAXINSTANTRECTIME (24 * 60 - 1) // 23:59 hours #define MAXWAITFORCAMMENU 4 // seconds to wait for the CAM menu to open +#define MINFREEDISK 300 // minimum free disk space required to start recording +#define NODISKSPACEDELTA 300 // seconds between "Not enough disk space to start recording!" messages #define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1) @@ -2996,9 +2998,12 @@ static void SetTrackDescriptions(bool Live) #define DIRECTCHANNELTIMEOUT 1000 //ms +cDisplayChannel *cDisplayChannel::currentDisplayChannel = NULL; + cDisplayChannel::cDisplayChannel(int Number, bool Switched) :cOsdObject(true) { + currentDisplayChannel = this; group = -1; withInfo = !Switched || Setup.ShowInfoOnChSwitch; displayChannel = Skins.Current()->DisplayChannel(withInfo); @@ -3017,12 +3022,15 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched) cDisplayChannel::cDisplayChannel(eKeys FirstKey) :cOsdObject(true) { + currentDisplayChannel = this; group = -1; number = 0; + timeout = true; lastPresent = lastFollowing = NULL; lastTime.Set(); withInfo = Setup.ShowInfoOnChSwitch; displayChannel = Skins.Current()->DisplayChannel(withInfo); + channel = Channels.GetByNumber(cDevice::CurrentChannel()); ProcessKey(FirstKey); } @@ -3030,6 +3038,7 @@ cDisplayChannel::~cDisplayChannel() { delete displayChannel; cStatus::MsgOsdClear(); + currentDisplayChannel = NULL; } void cDisplayChannel::DisplayChannel(void) @@ -3063,14 +3072,27 @@ void cDisplayChannel::DisplayInfo(void) void cDisplayChannel::Refresh(void) { - channel = Channels.GetByNumber(cDevice::CurrentChannel()); DisplayChannel(); displayChannel->SetEvents(NULL, NULL); - lastTime.Set(); +} + +cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction) +{ + if (Direction) { + while (Channel) { + Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel); + if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0)) + return Channel; + } + } + return NULL; } eOSState cDisplayChannel::ProcessKey(eKeys Key) { + cChannel *NewChannel = NULL; + if (Key != kNone) + lastTime.Set(); switch (Key) { case k0: if (number == 0) { @@ -3081,31 +3103,32 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) case k1 ... k9: if (number >= 0) { number = number * 10 + Key - k0; - if (number > 0) { - channel = Channels.GetByNumber(number); - displayChannel->SetEvents(NULL, NULL); - withInfo = false; - DisplayChannel(); - lastTime.Set(); - // Lets see if there can be any useful further input: - int n = channel ? number * 10 : 0; - cChannel *ch = channel; - while (ch && (ch = Channels.Next(ch)) != NULL) { - if (!ch->GroupSep()) { - if (n <= ch->Number() && ch->Number() <= n + 9) { - n = 0; - break; - } - if (ch->Number() > n) - n *= 10; + channel = Channels.GetByNumber(number); + displayChannel->SetEvents(NULL, NULL); + withInfo = false; + DisplayChannel(); + // Lets see if there can be any useful further input: + int n = channel ? number * 10 : 0; + int m = 10; + cChannel *ch = channel; + while (ch && (ch = Channels.Next(ch)) != NULL) { + if (!ch->GroupSep()) { + if (n <= ch->Number() && ch->Number() < n + m) { + n = 0; + break; + } + if (ch->Number() > n) { + n *= 10; + m *= 10; } } - if (n > 0) { - // This channel is the only one that fits the input, so let's take it right away: - displayChannel->Flush(); // makes sure the user sees his last input - Channels.SwitchTo(number); - return osEnd; } + if (n > 0) { + // This channel is the only one that fits the input, so let's take it right away: + displayChannel->Flush(); // makes sure the user sees his last input + NewChannel = channel; + withInfo = true; + number = 0; } } break; @@ -3136,18 +3159,27 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) group = -1; } } - lastTime.Set(); break; case kUp|k_Repeat: case kUp: case kDown|k_Repeat: case kDown: - cDevice::SwitchChannel(NORMALKEY(Key) == kUp ? 1 : -1); - // no break here case kChanUp|k_Repeat: case kChanUp: case kChanDn|k_Repeat: - case kChanDn: + case kChanDn: { + eKeys k = NORMALKEY(Key); + cChannel *ch = NextAvailableChannel(channel, (k == kUp || k == kChanUp) ? 1 : -1); + if (ch) + channel = ch; + } + // no break here + case kUp|k_Release: + case kDown|k_Release: + case kChanUp|k_Release: + case kChanDn|k_Release: + if (!(Key & k_Repeat) && channel) + NewChannel = channel; withInfo = true; group = -1; number = 0; @@ -3155,43 +3187,57 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) break; case kNone: if (number && lastTime.Elapsed() > DIRECTCHANNELTIMEOUT) { - if (Channels.GetByNumber(number)) - Channels.SwitchTo(number); - else { - number = 0; - channel = NULL; - DisplayChannel(); - lastTime.Set(); - return osContinue; - } - return osEnd; + channel = Channels.GetByNumber(number); + if (channel) + NewChannel = channel; + withInfo = true; + number = 0; + Refresh(); + lastTime.Set(); } break; //TODO //XXX case kGreen: return osEventNow; //XXX case kYellow: return osEventNext; - case kOk: if (group >= 0) { - channel = Channels.Get(Channels.GetNextNormal(group)); - if (channel) - Channels.SwitchTo(channel->Number()); - withInfo = true; - group = -1; - Refresh(); - break; - } - else if (number > 0 && channel) - Channels.SwitchTo(number); - return osEnd; - default: if ((Key & (k_Repeat | k_Release)) == 0) { - cRemote::Put(Key); - return osEnd; - } + case kOk: + if (group >= 0) { + channel = Channels.Get(Channels.GetNextNormal(group)); + if (channel) + NewChannel = channel; + withInfo = true; + group = -1; + Refresh(); + } + else if (number > 0) { + channel = Channels.GetByNumber(number); + if (channel) + NewChannel = channel; + withInfo = true; + number = 0; + Refresh(); + } + else + return osEnd; + break; + default: + if ((Key & (k_Repeat | k_Release)) == 0) { + cRemote::Put(Key); + return osEnd; + } }; if (!timeout || lastTime.Elapsed() < (uint64)(Setup.ChannelInfoTime * 1000)) { - if (!number && group < 0 && channel && channel->Number() != cDevice::CurrentChannel()) - Refresh(); // makes sure a channel switch through the SVDRP CHAN command is displayed + if (Key == kNone && !number && group < 0 && !NewChannel && channel && channel->Number() != cDevice::CurrentChannel()) { + // makes sure a channel switch through the SVDRP CHAN command is displayed + channel = Channels.GetByNumber(cDevice::CurrentChannel()); + Refresh(); + lastTime.Set(); + } DisplayInfo(); displayChannel->Flush(); + if (NewChannel) { + Channels.SwitchTo(NewChannel->Number()); + channel = NewChannel; + } return osContinue; } return osEnd; @@ -3520,6 +3566,23 @@ int cRecordControls::state = 0; bool cRecordControls::Start(cTimer *Timer, bool Pause) { + static time_t LastNoDiskSpaceMessage = 0; + int FreeMB = 0; + if (Timer) { + AssertFreeDiskSpace(Timer->Priority(), !Timer->Pending()); + Timer->SetPending(true); + } + VideoDiskSpace(&FreeMB); + if (FreeMB < MINFREEDISK) { + if (!Timer || time(NULL) - LastNoDiskSpaceMessage > NODISKSPACEDELTA) { + isyslog("not enough disk space to start recording%s%s", Timer ? " timer " : "", Timer ? *Timer->ToDescr() : ""); + Skins.Message(mtWarning, tr("Not enough disk space to start recording!")); + LastNoDiskSpaceMessage = time(NULL); + } + return false; + } + LastNoDiskSpaceMessage = 0; + ChangeState(); int ch = Timer ? Timer->Channel()->Number() : cDevice::CurrentChannel(); cChannel *channel = Channels.GetByNumber(ch); @@ -3548,8 +3611,10 @@ bool cRecordControls::Start(cTimer *Timer, bool Pause) } } } - else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) + else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) { isyslog("no free DVB device to record channel %d!", ch); + Skins.Message(mtError, tr("No free DVB device to record!")); + } } else esyslog("ERROR: channel %d not defined!", ch); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.81 2006/01/06 11:30:38 kls Exp $ + * $Id: menu.h 1.82 2006/01/22 14:24:31 kls Exp $ */ #ifndef __MENU_H @@ -82,14 +82,17 @@ private: cChannel *channel; const cEvent *lastPresent; const cEvent *lastFollowing; + static cDisplayChannel *currentDisplayChannel; void DisplayChannel(void); void DisplayInfo(void); void Refresh(void); + cChannel *NextAvailableChannel(cChannel *Channel, int Direction); public: cDisplayChannel(int Number, bool Switched); cDisplayChannel(eKeys FirstKey); virtual ~cDisplayChannel(); virtual eOSState ProcessKey(eKeys Key); + static bool IsOpen(void) { return currentDisplayChannel != NULL; } }; class cDisplayVolume : public cOsdObject { diff --git a/menuitems.c b/menuitems.c index 88e8a50..455070d 100644 --- a/menuitems.c +++ b/menuitems.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.c 1.29 2006/01/07 15:37:03 kls Exp $ + * $Id: menuitems.c 1.30 2006/01/21 12:27:14 kls Exp $ */ #include "menuitems.h" @@ -15,6 +15,8 @@ #include "skins.h" #include "status.h" +#define AUTO_ADVANCE_TIMEOUT 1500 // ms before auto advance when entering characters via numeric keys + const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@"; // --- cMenuEditItem --------------------------------------------------------- @@ -262,6 +264,23 @@ void cMenuEditStrItem::SetHelpKeys(void) cSkinDisplay::Current()->SetButtons(NULL); } +void cMenuEditStrItem::AdvancePos(void) +{ + if (pos < length - 2 && pos < int(strlen(value)) ) { + if (++pos >= int(strlen(value))) { + if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ') + pos--; // allow only two blanks at the end + else { + value[pos] = ' '; + value[pos + 1] = 0; + } + } + } + newchar = true; + if (!insert && isalpha(value[pos])) + uppercase = isupper(value[pos]); +} + void cMenuEditStrItem::Set(void) { char buf[1000]; @@ -326,6 +345,13 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) bool SameKey = Key == lastKey; if (Key != kNone) lastKey = Key; + else if (!newchar && autoAdvanceTimeout.TimedOut()) { + AdvancePos(); + newchar = true; + currentChar = NULL; + Set(); + return osContinue; + } switch (Key) { case kRed: // Switch between upper- and lowercase characters if (InEditMode()) { @@ -382,19 +408,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) uppercase = isupper(value[pos]); break; case kRight|k_Repeat: - case kRight: if (pos < length - 2 && pos < int(strlen(value)) ) { - if (++pos >= int(strlen(value))) { - if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ') - pos--; // allow only two blanks at the end - else { - value[pos] = ' '; - value[pos + 1] = 0; - } - } - } - newchar = true; - if (!insert && isalpha(value[pos])) - uppercase = isupper(value[pos]); + case kRight: AdvancePos(); if (pos == 0) SetHelpKeys(); break; @@ -413,15 +427,19 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) value[pos] = toupper(Inc(tolower(value[pos]), NORMALKEY(Key) == kUp)); else value[pos] = Inc( value[pos], NORMALKEY(Key) == kUp); - newchar = false; + newchar = true; } else return cMenuEditItem::ProcessKey(Key); break; + case k0|k_Repeat ... k9|k_Repeat: case k0 ... k9: { - if (!SameKey) - currentChar = NULL; if (InEditMode()) { + if (!SameKey) { + if (!newchar) + AdvancePos(); + currentChar = NULL; + } if (insert && newchar) { // create a new character in insert mode if (int(strlen(value)) < length - 1) { @@ -445,6 +463,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) currentChar++; } newchar = false; + autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT); } else return cMenuEditItem::ProcessKey(Key); diff --git a/menuitems.h b/menuitems.h index bfaf436..ec8e08f 100644 --- a/menuitems.h +++ b/menuitems.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.h 1.15 2006/01/06 15:16:25 kls Exp $ + * $Id: menuitems.h 1.16 2006/01/21 10:45:55 kls Exp $ */ #ifndef __MENUITEMS_H @@ -85,7 +85,9 @@ private: const char *charMap; const char *currentChar; eKeys lastKey; + cTimeMs autoAdvanceTimeout; void SetHelpKeys(void); + void AdvancePos(void); virtual void Set(void); char Inc(char c, bool Up); protected: diff --git a/recording.c b/recording.c index 0f704af..5c57e18 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.132 2006/01/08 11:40:13 kls Exp $ + * $Id: recording.c 1.133 2006/01/20 17:18:59 kls Exp $ */ #include "recording.h" @@ -117,7 +117,7 @@ void RemoveDeletedRecordings(void) } } -void AssertFreeDiskSpace(int Priority) +void AssertFreeDiskSpace(int Priority, bool Force) { static cMutex Mutex; cMutexLock MutexLock(&Mutex); @@ -126,7 +126,7 @@ void AssertFreeDiskSpace(int Priority) // it will get removed during the next call. static time_t LastFreeDiskCheck = 0; int Factor = (Priority == -1) ? 10 : 1; - if (time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) { + if (Force || time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) { if (!VideoFileSpaceAvailable(MINDISKSPACE)) { // Make sure only one instance of VDR does this: cLockFile LockFile(VideoDirectory); diff --git a/recording.h b/recording.h index d79b6b4..7eaddcc 100644 --- a/recording.h +++ b/recording.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.h 1.48 2005/12/18 11:26:51 kls Exp $ + * $Id: recording.h 1.49 2006/01/20 17:18:28 kls Exp $ */ #ifndef __RECORDING_H @@ -21,9 +21,11 @@ extern bool VfatFileSystem; void RemoveDeletedRecordings(void); -void AssertFreeDiskSpace(int Priority = 0); +void AssertFreeDiskSpace(int Priority = 0, bool Force = false); ///< The special Priority value -1 means that we shall get rid of any ///< deleted recordings faster than normal (because we're cutting). + ///< If Force is true, the check will be done even if the timeout + ///< hasn't expired yet. class cResumeFile { private: @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.110 2006/01/15 14:31:45 kls Exp $ + * $Id: tools.c 1.112 2006/01/20 14:01:28 kls Exp $ */ #include "tools.h" @@ -26,9 +26,22 @@ extern "C" { #include <unistd.h> #include <utime.h> #include "i18n.h" +#include "thread.h" int SysLogLevel = 3; +#define MAXSYSLOGBUF 256 + +void syslog_with_tid(int priority, const char *format, ...) +{ + va_list ap; + char fmt[MAXSYSLOGBUF]; + snprintf(fmt, sizeof(fmt), "[%d] %s", cThread::ThreadId(), format); + va_start(ap, format); + vsyslog(priority, fmt, ap); + va_end(ap); +} + int BCD2INT(int x) { return ((1000000 * BCDCHARTOINT((x >> 24) & 0xFF)) + @@ -125,13 +138,14 @@ char *strn0cpy(char *dest, const char *src, size_t n) char *strreplace(char *s, char c1, char c2) { - char *p = s; - - while (p && *p) { - if (*p == c1) - *p = c2; - p++; - } + if (s) { + char *p = s; + while (*p) { + if (*p == c1) + *p = c2; + p++; + } + } return s; } @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.89 2006/01/08 11:40:37 kls Exp $ + * $Id: tools.h 1.90 2006/01/15 16:19:56 kls Exp $ */ #ifndef __TOOLS_H @@ -26,9 +26,9 @@ typedef unsigned long long int uint64; extern int SysLogLevel; -#define esyslog(a...) void( (SysLogLevel > 0) ? syslog(LOG_ERR, a) : void() ) -#define isyslog(a...) void( (SysLogLevel > 1) ? syslog(LOG_INFO, a) : void() ) -#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog(LOG_DEBUG, a) : void() ) +#define esyslog(a...) void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() ) +#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO, a) : void() ) +#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog_with_tid(LOG_DEBUG, a) : void() ) #define LOG_ERROR esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__) #define LOG_ERROR_STR(s) esyslog("ERROR: %s: %m", s) @@ -52,6 +52,8 @@ template<class T> inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; } template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; } #endif +void syslog_with_tid(int priority, const char *format, ...); + #define BCDCHARTOINT(x) (10 * ((x & 0xF0) >> 4) + (x & 0xF)) int BCD2INT(int x); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.c 1.30 2005/08/14 10:55:03 kls Exp $ + * $Id: transfer.c 1.31 2006/01/21 14:13:16 kls Exp $ */ #include "transfer.h" @@ -63,6 +63,7 @@ void cTransfer::Action(void) int Result = 0; #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 bool GotBufferReserve = false; + GotBufferReserve = true; //XXX remove this line if you absolutely need the buffer reserve int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576); #endif while (Running()) { @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.238 2006/01/15 13:31:57 kls Exp $ + * $Id: vdr.c 1.244 2006/01/22 15:59:13 kls Exp $ */ #include <getopt.h> @@ -447,7 +447,7 @@ int main(int argc, char *argv[]) // Log file: if (SysLogLevel > 0) - openlog("vdr", LOG_PID | LOG_CONS, SysLogTarget); + openlog("vdr", LOG_CONS, SysLogTarget); // LOG_PID doesn't work as expected under NPTL // Check the video directory: @@ -727,7 +727,7 @@ int main(int argc, char *argv[]) LastChannel = cDevice::CurrentChannel(); LastChannelChanged = time(NULL); } - if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[0] && LastChannel != PreviousChannel[1]) + if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[PreviousChannelIndex]) PreviousChannel[PreviousChannelIndex ^= 1] = LastChannel; // Timers and Recordings: if (!Timers.BeingEdited()) { @@ -822,6 +822,7 @@ int main(int argc, char *argv[]) } } break; + // Direct main menu functions: #define DirectMainFunction(function)\ DELETE_MENU;\ if (cControl::Control())\ @@ -855,7 +856,15 @@ int main(int argc, char *argv[]) case kChanUp: case kChanDn|k_Repeat: case kChanDn: - cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1); + if (!Interact) + Menu = new cDisplayChannel(NORMALKEY(key)); + else if (cDisplayChannel::IsOpen()) { + Interact->ProcessKey(key); + continue; + } + else + cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1); + key = kNone; // nobody else needs to see these keys break; // Volume control: case kVolUp|k_Repeat: @@ -901,9 +910,7 @@ int main(int argc, char *argv[]) case kRecord: if (!cControl::Control()) { if (cRecordControls::Start()) - ;//XXX Skins.Message(mtInfo, tr("Recording")); - else - Skins.Message(mtError, tr("No free DVB device to record!")); + Skins.Message(mtInfo, tr("Recording started")); key = kNone; // nobody else needs to see this key } break; @@ -947,8 +954,6 @@ int main(int argc, char *argv[]) case osRecord: DELETE_MENU; if (cRecordControls::Start()) Skins.Message(mtInfo, tr("Recording started")); - else - Skins.Message(mtError, tr("No free DVB device to record!")); break; case osRecordings: DELETE_MENU; @@ -985,7 +990,7 @@ int main(int argc, char *argv[]) } else { // Key functions in "normal" viewing mode: - if (KeyMacros.Get(key)) { + if (key != kNone && KeyMacros.Get(key)) { cRemote::PutMacro(key); key = kNone; } @@ -999,21 +1004,17 @@ int main(int argc, char *argv[]) } // Direct Channel Select: case k1 ... k9: - Menu = new cDisplayChannel(key); - break; // Left/Right rotates trough channel groups: case kLeft|k_Repeat: case kLeft: case kRight|k_Repeat: case kRight: - Menu = new cDisplayChannel(NORMALKEY(key)); - break; // Up/Down Channel Select: case kUp|k_Repeat: case kUp: case kDown|k_Repeat: case kDown: - cDevice::SwitchChannel(NORMALKEY(key) == kUp ? 1 : -1); + Menu = new cDisplayChannel(NORMALKEY(key)); break; // Viewing Control: case kOk: LastChannel = -1; break; // forces channel display |