diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2005-10-03 18:00:00 +0200 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2005-10-03 18:00:00 +0200 |
commit | 88d8d634089bae65bdfea8238a847b7883058072 (patch) | |
tree | 8d6143bb63258e7c8b918d664f69a5870d1e8983 | |
parent | c16bbf7422f37108580e559ca849e5aafbdac672 (diff) | |
download | vdr-patch-lnbsharing-88d8d634089bae65bdfea8238a847b7883058072.tar.gz vdr-patch-lnbsharing-88d8d634089bae65bdfea8238a847b7883058072.tar.bz2 |
Version 1.3.34vdr-1.3.34
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting
this one).
- Fixed opening recording folders in case the last replayed recording no longer
exists (reported by Udo Richter).
- Fixed an unjustified "Error while accessing recording!" after deleting a recording
from a subfolder.
- Fixed handling the '.update' file in case the video directory is not at the default
location (reported by Jon Burgess).
- Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha
Volkenandt).
- Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco
Schlüßler).
- Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo
Richter).
- Fixed setting current menu item if the first one is non-selectable.
- cOsdItem::cOsdItem() now has a 'Selectable' parameter.
- Improved displaying 'sub-title' and 'bottom text' in the CAM menu.
- Added status message "Resetting CAM..." for an immediate feedback when the CAM
reset has been triggered.
- The CAM menu now automatically updates itself in case of a progress display (as
used, for instance, when updating the firmware via satellite).
- Now skipping some funny characters sent by some CAMs at the beginning of strings.
- The CAM menu is now completely closed when pressing the Menu key while inside
a sub menu.
- Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing
appear hanging).
- Added status message "Opening CAM menu..." for an immediate feedback when the CAM
menu has been requested.
- Speeded up initial opening of the CAM menu.
- Fixed handling of menus with no selectable items.
- The character 0x8A in CAM menu strings is now mapped to a real newline.
- The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines.
- Improved the CAM enquiry menu.
-rw-r--r-- | CONTRIBUTORS | 8 | ||||
-rw-r--r-- | HISTORY | 38 | ||||
-rw-r--r-- | PLUGINS/src/skincurses/HISTORY | 4 | ||||
-rw-r--r-- | PLUGINS/src/skincurses/README | 8 | ||||
-rw-r--r-- | channels.conf | 34 | ||||
-rw-r--r-- | ci.c | 37 | ||||
-rw-r--r-- | ci.h | 5 | ||||
-rw-r--r-- | config.h | 8 | ||||
-rw-r--r-- | i18n.c | 79 | ||||
-rw-r--r-- | menu.c | 95 | ||||
-rw-r--r-- | menu.h | 4 | ||||
-rw-r--r-- | osd.c | 4 | ||||
-rw-r--r-- | osdbase.c | 16 | ||||
-rw-r--r-- | osdbase.h | 4 | ||||
-rw-r--r-- | recording.c | 17 | ||||
-rw-r--r-- | recording.h | 5 | ||||
-rw-r--r-- | skins.c | 7 | ||||
-rw-r--r-- | tools.h | 4 | ||||
-rw-r--r-- | vdr.5 | 4 |
19 files changed, 305 insertions, 76 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 2a9dd18..36f15b7 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -791,6 +791,7 @@ Sascha Volkenandt <sascha@akv-soft.de> for reporting a bug in timeout handling in cRwLock::Lock() for pointing out that the SVDRP command DELR deleted recordings that are currently being written to by a timer + for fixing a crash in cConfig::Load() when compiling on the PPC Malcolm Caldwell <malcolm.caldwell@ntu.edu.au> for modifying LOF handling to allow for C-band reception @@ -918,6 +919,7 @@ Hermann Gausterer <mrq1@gmx.net> Peter Bieringer <pb@bieringer.de> for reporting a problem with duplicate recordings with the same file name for suggesting to implement the command line option '--vfat' + for reporting a leftover 'summary.vdr' in vdr.5 Alexander Damhuis <ad@phonedation.de> for reporting problems when deleting a timer that is currently recording @@ -933,6 +935,8 @@ Jon Burgess <mplayer@jburgess.uklinux.net> for pointing out a problem with NPTL ("Native Posix Thread Library") for changing thread handling to make it work with NPTL ("Native Posix Thread Library") for fixing a memory leak in thread handling when using NPTL + for reporting a bug in handling the '.update' file in case the video directory is + not at the default location Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de> for reporting a crash when canceling a newly created timer @@ -1229,6 +1233,7 @@ Marco Schlüßler <marco@lordzodiac.de> for improving resetting CAM connections for fixing handling EPG data for time shifted events for fixing detecting short channel names for "Kabel Deutschland" + for reporting that the FATALERRNO macro needs to check for a non-zero errno value Jürgen Schmitz <j.schmitz@web.de> for reporting a bug in displaying the current channel when switching via the SVDRP @@ -1281,6 +1286,9 @@ Udo Richter <udo_richter@gmx.de> for reporting a problem with cRemux in a single thread for adding 'Service' functions to the plugin interface for reporting an unused MAINMENUENTRY in svdrpdemo.c + for reporting a bug in opening recording folders in case the last replayed recording + no longer exists + for reporting a missing check against MAXOSDAREAS in cOsd::CanHandleAreas() Sven Kreiensen <svenk@kammer.uni-hannover.de> for his help in keeping 'channels.conf.terr' up to date @@ -45,7 +45,7 @@ Video Disk Recorder Revision History a prepended '@' character. - If an instant recording is currently active, the "Main" menu now contains an option to stop that recording. -- Timers are now only processed when the Menu is not active. So after editing +- Timers are now only processed when the menu is not active. So after editing a timer the effect will take place only after the menu has been closed. In order to avoid missing a timer event by inadvertently leaving the menu open, the menu will be closed automatically after about two minutes of @@ -3849,3 +3849,39 @@ Video Disk Recorder Revision History added or deleted, so that other VDR instances can update their lists (thanks to Alexander Rieger). - Made the function ExchangeChars() public (suggested by Lucian Muresan). + +2005-10-03: Version 1.3.34 + +- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting + this one). +- Fixed opening recording folders in case the last replayed recording no longer + exists (reported by Udo Richter). +- Fixed an unjustified "Error while accessing recording!" after deleting a recording + from a subfolder. +- Fixed handling the '.update' file in case the video directory is not at the default + location (reported by Jon Burgess). +- Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha + Volkenandt). +- Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco + Schlüßler). +- Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo + Richter). +- Fixed setting current menu item if the first one is non-selectable. +- cOsdItem::cOsdItem() now has a 'Selectable' parameter. +- Improved displaying 'sub-title' and 'bottom text' in the CAM menu. +- Added status message "Resetting CAM..." for an immediate feedback when the CAM + reset has been triggered. +- The CAM menu now automatically updates itself in case of a progress display (as + used, for instance, when updating the firmware via satellite). +- Now skipping some funny characters sent by some CAMs at the beginning of strings. +- The CAM menu is now completely closed when pressing the Menu key while inside + a sub menu. +- Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing + appear hanging). +- Added status message "Opening CAM menu..." for an immediate feedback when the CAM + menu has been requested. +- Speeded up initial opening of the CAM menu. +- Fixed handling of menus with no selectable items. +- The character 0x8A in CAM menu strings is now mapped to a real newline. +- The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines. +- Improved the CAM enquiry menu. diff --git a/PLUGINS/src/skincurses/HISTORY b/PLUGINS/src/skincurses/HISTORY index 33119f4..3af01cc 100644 --- a/PLUGINS/src/skincurses/HISTORY +++ b/PLUGINS/src/skincurses/HISTORY @@ -17,3 +17,7 @@ VDR Plugin 'skincurses' Revision History 2005-05-16: Version 0.0.4 - New "recording info" display. + +2005-10-01: + +- Added a note about using this skin to the README file. diff --git a/PLUGINS/src/skincurses/README b/PLUGINS/src/skincurses/README index 7e82b22..ff82b0e 100644 --- a/PLUGINS/src/skincurses/README +++ b/PLUGINS/src/skincurses/README @@ -14,3 +14,11 @@ The 'skincurses' plugin implements a VDR skin that works in a shell window, using only plain text output. It re-implements what used to be available by compiling VDR versions before 1.3.7 with the DEBUG_OSD macro set. + +To activate this skin you can either select it in the Setup/OSD +menu, or put the line + +OSDSkin = curses + +into your 'setup.conf' file before starting VDR. Make sure this +is the only OSDSkin line in that file. diff --git a/channels.conf b/channels.conf index 0b35a9c..c34b8b4 100644 --- a/channels.conf +++ b/channels.conf @@ -8,26 +8,27 @@ hr-fernsehen;ARD:11836:hC34:S19.2E:27500:301:302=deu:304:0:28108:1:1101:0 NDR FS MV;ARD:12109:hC34:S19.2E:27500:2401:2402=deu:2404:0:28224:1:1073:0 SR SÜDWEST Fernsehen;ARD:12265:hC34:S19.2E:27500:1301:1302=deu:1304:0:28486:1:1093:0 WDR Köln;ARD:11836:hC34:S19.2E:27500:601:602=deu:604:0:28111:1:1101:0 -BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu:704:0:28112:1:1101:0 +BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu;703:704:0:28112:1:1101:0 SÜDWEST Ferns. BW;ARD:11836:hC34:S19.2E:27500:801:802=deu:804:0:28113:1:1101:0 Phoenix;ARD:11836:hC34:S19.2E:27500:901:902=deu:904:0:28114:1:1101:0 ZDF;ZDFvision:11953:hC34:S19.2E:27500:110:120=deu,121=2ch;125=dd:130:0:28006:1:1079:0 3sat;ZDFvision:11953:hC34:S19.2E:27500:210:220=deu,221=2ch;225=dd:230:0:28007:1:1079:0 -KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320=deu:330:0:28008:1:1079:0 +KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320:330:0:28008:1:1079:0 arte;ARD:11836:hC34:S19.2E:27500:401:402=deu,403=fra:404:0:28109:1:1101:0 ORF1;ORF:12692:hC56:S19.2E:22000:160:161=deu;163=deu:165:1762,D05,1702,1801:13001:1:1117:0 -ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:3:13002:1:1117:0 +ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:1762,D05,1702,1801:13002:1:1117:0 ZDFinfokanal;ZDFvision:11953:hC34:S19.2E:27500:610:620=deu:130:0:28011:1:1079:0 CNN Int.;CNN:11778:vC34:S19.2E:27500:165:100=eng:47:0:28522:1:1068:0 Super RTL,S RTL;RTL World:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089:0 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 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 -EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,91=rus,98=por,99=deu:0:0:8004:1:1070:0 -rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28205:1:1073:0 +EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,98=por,99=deu,91=rus:0:0:8004:1:1070:0 +rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:501:502=deu:504:0:28205:1:1073:0 Sky News:11597:vC56:S19.2E:22000:305+131:306=eng:0:0:28707:1:1026:0 Veronica/JETIX;CANALDIGITAAL:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,100:5020:53:1109:0 BVN;CANALDIGITAAL:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0 @@ -44,22 +45,22 @@ MDR FERNSEHEN;ARD:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0 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:1:8:133:2:0 -PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1:10:133:2:0 -PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1:11:133:2:0 +PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1:10:133:2:0 +PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1:11:133:2:0 PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1: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:1702,1801,1722:29:133:2:0 +PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1722,1702,1801:29:133:2:0 PREMIERE 6,PREM 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1:41:133:2:0 -PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1702,1801,1722:20:133:2:0 +PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1801,1722,1702:20:133:2:0 DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1722,1801,1702:34:133:17:0 :Premiere Direkt PREMIERE DIREKT,DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0 :PW Erotic -BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1801,1722,1702:21:133:17:0 -DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1722,1801,1702:513:133:4:0 +BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1722,1702,1801:21:133:17:0 +DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1801,1722,1702:513:133:4:0 :Sportsworld -PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1702,1801,1722:17:133:3:0 -PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1722,1801,1702:27:133:4:0 +PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1722,1702,1801:17:133:3:0 +PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1801,1702,1722:27:133:4:0 :Beta Digital 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 @@ -89,9 +90,9 @@ TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0 :@201 Sky Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0 Sky Mix;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0 -ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng:2317:960,961:10070:2:2044:0 +ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng,2363=NAR:2317:960,961:10070:2:2044:0 Sci-Fi;BSkyB:12148:hC23:S28.2E:27500:512+8190:640=eng:576:960,961:4905:2:2023:0 -Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2317=eng,2318=NAR:2315:960,961:5904:2:2025:0 +Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2326=eng,2327=NAR:2315:960,961:5904:2:2025:0 Paramount;BSkyB:11526:vC23:S28.2E:27500:2317+2306:2318=eng:2319:960,961:50305:2:2404:0 Paramount 2;BSkyB:11914:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:4504:2:2011:0 Discovery;BSkyB:11875:hC23:S28.2E:27500:2304:2306=eng,2307=NAR:2305:960,961:6201:2:2009:0 @@ -108,7 +109,7 @@ Sky Cinema 1;BSkyB:12285:vC23:S28.2E:27500:519+8190:647=eng,667=NAR:583:960,961: Sky Cinema 2;BSkyB:12285:vC23:S28.2E:27500:517+8190:645=eng,665=NAR:581:960,961:4802:2:2030:0 :@900 Some 'seed' channels Chelsea TV;BskyB:11778:vC23:S28.2E:27500:2308+2304:2309=eng:0:960,961:9307:2:2004:0 -WDR Münster;ARD:12421:hC34:S19.2E:27500:701:702=deu:104:0:28310:1:1201:0 +WDR Münster;ARD:12421:hC34:S19.2E:27500:101:102=deu:104:0:28310:1:1201:0 Animal Plnt+;BSkyB:12070:hC23:S28.2E:27500:2314+2307:2315=eng:0:960,961:50002:2:2019:0 S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:2030:0 CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0 @@ -117,4 +118,5 @@ IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0 Euro1080;EURO1080:12168:vC34:S19.2E:27500:308:256:0:FF:21100:1:1088:0 Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:FF:29700:0:0:0 eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0 +TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:2:1:65535:1:0 :@1000 New channels @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 1.28 2005/09/17 11:43:08 kls Exp $ + * $Id: ci.c 1.36 2005/10/03 12:58:22 kls Exp $ */ #include "ci.h" @@ -92,9 +92,17 @@ static char *CopyString(int Length, const uint8_t *Data) ///< Copies the string at Data. ///< \return Returns a pointer to a newly allocated string. { + // Some CAMs send funny characters at the beginning of strings. + // Let's just skip them: + while (Length > 0 && (*Data == ' ' || *Data == 0x05 || *Data == 0x96 || *Data == 0x97)) { + Length--; + Data++; + } char *s = MALLOC(char, Length + 1); strncpy(s, (char *)Data, Length); s[Length] = 0; + // The character 0x8A is used as newline, so let's put a real '\n' in there: + strreplace(s, 0x8A, '\n'); return s; } @@ -394,7 +402,7 @@ const uint8_t *cCiTransportConnection::Data(int &Length) return tpdu->Data(Length); } -#define MAX_CONNECT_RETRIES 20 +#define MAX_CONNECT_RETRIES 2 int cCiTransportConnection::CreateConnection(void) { @@ -1026,6 +1034,7 @@ public: cCiEnquiry *Enquiry(bool Clear = false); bool SendMenuAnswer(uint8_t Selection); bool SendAnswer(const char *Text); + bool SendCloseMMI(void); }; cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc) @@ -1198,6 +1207,14 @@ bool cCiMMI::SendAnswer(const char *Text) return true; } +bool cCiMMI::SendCloseMMI(void) +{ + dbgprotocol("%d: ==> Close MMI\n", SessionId()); + SendData(AOT_CLOSE_MMI, 0); + //XXX return value of all SendData() calls??? + return true; +} + // --- cCiMenu --------------------------------------------------------------- cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable) @@ -1229,6 +1246,12 @@ bool cCiMenu::AddEntry(char *s) return false; } +bool cCiMenu::HasUpdate(void) +{ + // If the mmi is gone, the menu shall be closed, which also qualifies as 'update'. + return !mmi || mmi->HasUserIO(); +} + bool cCiMenu::Select(int Index) { cMutexLock MutexLock(&mutex); @@ -1242,6 +1265,11 @@ bool cCiMenu::Cancel(void) return Select(-1); } +bool cCiMenu::Abort(void) +{ + return mmi && mmi->SendCloseMMI(); +} + // --- cCiEnquiry ------------------------------------------------------------ cCiEnquiry::cCiEnquiry(cCiMMI *MMI) @@ -1271,6 +1299,11 @@ bool cCiEnquiry::Cancel(void) return Reply(NULL); } +bool cCiEnquiry::Abort(void) +{ + return mmi && mmi->SendCloseMMI(); +} + // --- cCiCaPmt -------------------------------------------------------------- // Ca Pmt List Management: @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.h 1.14 2005/08/20 14:56:11 kls Exp $ + * $Id: ci.h 1.17 2005/10/03 12:49:52 kls Exp $ */ #ifndef __CI_H @@ -40,6 +40,8 @@ public: bool Selectable(void) { return selectable; } bool Select(int Index); bool Cancel(void); + bool Abort(void); + bool HasUpdate(void); }; class cCiEnquiry { @@ -58,6 +60,7 @@ public: int ExpectedLength(void) { return expectedLength; } bool Reply(const char *s); bool Cancel(void); + bool Abort(void); }; class cCiCaPmt { @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.228 2005/09/14 16:04:09 kls Exp $ + * $Id: config.h 1.230 2005/10/01 10:41:33 kls Exp $ */ #ifndef __CONFIG_H @@ -19,8 +19,8 @@ #include "i18n.h" #include "tools.h" -#define VDRVERSION "1.3.33" -#define VDRVERSNUM 10333 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.34" +#define VDRVERSNUM 10334 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -91,7 +91,7 @@ public: const char *FileName(void) { return fileName; } bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false) { - Clear(); + cConfig<T>::Clear(); if (FileName) { free(fileName); fileName = strdup(FileName); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.210 2005/09/25 11:57:04 kls Exp $ + * $Id: i18n.c 1.213 2005/10/03 12:27:15 kls Exp $ * * Translations provided by: * @@ -2273,6 +2273,27 @@ const tI18nPhrase Phrases[] = { "Kõvaketas peaaegu täis!", "Kun lidt diskplads tilbage!", }, + { "Opening CAM menu...", + "CAM-Menü wird geöffnet...", + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + }, { "Can't open CAM menu!", "CAM-Menü kann nicht geöffnet werden!", "Ne morem odpreti CAM menija!", @@ -2294,6 +2315,27 @@ const tI18nPhrase Phrases[] = { "Ei saa avada CAM menüüd!", "Kan ikke åbne CAM menuen!", }, + { "Resetting CAM...", + "CAM wird zurückgesetzt...", + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + }, { "Can't reset CAM!", "CAM-Reset fehlgeschlagen!", "Ne morem resetirati CAM-a", @@ -2316,26 +2358,47 @@ const tI18nPhrase Phrases[] = { "Kan ikke nulstille CAM!", }, { "CAM has been reset", - "CAM wurde zurückgesetzt!", - "CAM je resetiran!", - "Modulo CAM reimpostato!", - "CAM is herstart!", + "CAM wurde zurückgesetzt", + "CAM je resetiran", + "Modulo CAM reimpostato", + "CAM is herstart", "",//TODO "La CAM a été réinitialisée", "",//TODO "Salausmoduuli alustettu", - "CAM-Reset wykonany!", + "CAM-Reset wykonany", "CAM reiniciada", "Óôï CAM Ýãéíå åðáíáöïñÜ", "CA modulen har återställts", "CAM-ul a fost resetat", "A CAM vissza lett állítva", "CAM reiniciada", - "CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ!", - "CAM je resetiran!", + "CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ", + "CAM je resetiran", "CAM mooduli taaskäivitus tehtud", "CAM er blevet nulstillet", }, + { "Please enter %d digits!", + "Bitte geben Sie %d Ziffern ein!", + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + }, { "No audio available!", "Kein Audio verfügbar!", "Zvok ni dosegljiv", @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.362 2005/09/25 13:37:21 kls Exp $ + * $Id: menu.c 1.374 2005/10/03 12:53:51 kls Exp $ */ #include "menu.h" @@ -34,6 +34,7 @@ #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 CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1) @@ -1287,33 +1288,59 @@ eOSState cMenuCommands::ProcessKey(eKeys Key) cMenuCam::cMenuCam(cCiMenu *CiMenu) :cOsdMenu("") { + dsyslog("CAM: Menu ------------------"); ciMenu = CiMenu; selected = false; + offset = 0; if (ciMenu->Selectable()) SetHasHotkeys(); - SetTitle(ciMenu->TitleText() ? ciMenu->TitleText() : "CAM"); - for (int i = 0; i < ciMenu->NumEntries(); i++) - Add(new cOsdItem(hk(ciMenu->Entry(i)))); - //XXX implement a clean way of displaying this: - Add(new cOsdItem(ciMenu->SubTitleText())); - Add(new cOsdItem(ciMenu->BottomText())); + SetTitle(*ciMenu->TitleText() ? ciMenu->TitleText() : "CAM"); + dsyslog("CAM: '%s'", ciMenu->TitleText()); + if (*ciMenu->SubTitleText()) { + dsyslog("CAM: '%s'", ciMenu->SubTitleText()); + AddMultiLineItem(ciMenu->SubTitleText()); + offset = Count(); + } + for (int i = 0; i < ciMenu->NumEntries(); i++) { + Add(new cOsdItem(hk(ciMenu->Entry(i)), osUnknown, ciMenu->Selectable())); + dsyslog("CAM: '%s'", ciMenu->Entry(i)); + } + if (*ciMenu->BottomText()) { + AddMultiLineItem(ciMenu->BottomText()); + dsyslog("CAM: '%s'", ciMenu->BottomText()); + } Display(); - dsyslog("CAM: Menu - %s", ciMenu->TitleText()); } cMenuCam::~cMenuCam() { if (!selected) - ciMenu->Cancel(); + ciMenu->Abort(); delete ciMenu; } +void cMenuCam::AddMultiLineItem(const char *s) +{ + while (s && *s) { + const char *p = strchr(s, '\n'); + int l = p ? p - s : strlen(s); + cOsdItem *item = new cOsdItem; + item->SetSelectable(false); + item->SetText(strndup(s, l), false); + Add(item); + s = p ? p + 1 : p; + } +} + eOSState cMenuCam::Select(void) { if (ciMenu->Selectable()) { - ciMenu->Select(Current()); - selected = true; + ciMenu->Select(Current() - offset); + dsyslog("CAM: select %d", Current() - offset); } + else + ciMenu->Cancel(); + selected = true; return osEnd; } @@ -1327,36 +1354,51 @@ eOSState cMenuCam::ProcessKey(eKeys Key) default: break; } } + else if (state == osBack) { + ciMenu->Cancel(); + selected = true; + return osEnd; + } + if (ciMenu->HasUpdate()) { + selected = true; + return osEnd; + } return state; } // --- cMenuCamEnquiry ------------------------------------------------------- -//XXX this is just quick and dirty - make this a separate display object cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry) -:cOsdMenu("", 10) +:cOsdMenu("", 1) { ciEnquiry = CiEnquiry; int Length = ciEnquiry->ExpectedLength(); input = MALLOC(char, Length + 1); *input = 0; replied = false; - SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM"); - Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind())); + SetTitle("CAM"); + Add(new cOsdItem(ciEnquiry->Text(), osUnknown, false)); + Add(new cOsdItem("", osUnknown, false)); + Add(new cMenuEditNumItem("", input, Length, ciEnquiry->Blind())); Display(); } cMenuCamEnquiry::~cMenuCamEnquiry() { if (!replied) - ciEnquiry->Cancel(); + ciEnquiry->Abort(); free(input); delete ciEnquiry; } eOSState cMenuCamEnquiry::Reply(void) { - //XXX check length??? + if (ciEnquiry->ExpectedLength() < 0xFF && int(strlen(input)) != ciEnquiry->ExpectedLength()) { + char buffer[64]; + snprintf(buffer, sizeof(buffer), tr("Please enter %d digits!"), ciEnquiry->ExpectedLength()); + Skins.Message(mtError, buffer); + return osContinue; + } ciEnquiry->Reply(input); replied = true; return osEnd; @@ -1372,6 +1414,11 @@ eOSState cMenuCamEnquiry::ProcessKey(eKeys Key) default: break; } } + else if (state == osBack) { + ciEnquiry->Cancel(); + replied = true; + return osEnd; + } return state; } @@ -1513,6 +1560,7 @@ cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus) SetCurrent(First()); else if (OpenSubMenus && cReplayControl::LastReplayed() && Open(true)) return; + Display(); SetHelpKeys(); } @@ -1556,7 +1604,7 @@ void cMenuRecordings::Set(bool Refresh) if (Refresh) { cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()); if (ri) { - cRecording *Recording = GetRecording(ri); + cRecording *Recording = Recordings.GetByName(ri->FileName()); if (Recording) CurrentRecording = Recording->FileName(); } @@ -1583,7 +1631,8 @@ void cMenuRecordings::Set(bool Refresh) } } free(LastItemText); - Display(); + if (Refresh) + Display(); } cRecording *cMenuRecordings::GetRecording(cMenuRecordingItem *Item) @@ -2155,8 +2204,13 @@ eOSState cMenuSetupCICAM::Menu(void) { cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current()); if (item) { - if (item->CiHandler()->EnterMenu(item->Slot())) + if (item->CiHandler()->EnterMenu(item->Slot())) { + Skins.Message(mtWarning, tr("Opening CAM menu...")); + time_t t = time(NULL); + while (time(NULL) - t < MAXWAITFORCAMMENU && !item->CiHandler()->HasUserIO()) + item->CiHandler()->Process(); return osEnd; // the CAM menu will be executed explicitly from the main loop + } else Skins.Message(mtError, tr("Can't open CAM menu!")); } @@ -2167,6 +2221,7 @@ eOSState cMenuSetupCICAM::Reset(void) { cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current()); if (item) { + Skins.Message(mtWarning, tr("Resetting CAM...")); if (item->CiHandler()->Reset(item->Slot())) { Skins.Message(mtInfo, tr("CAM has been reset")); return osEnd; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.74 2005/09/25 09:03:32 kls Exp $ + * $Id: menu.h 1.76 2005/10/03 10:39:08 kls Exp $ */ #ifndef __MENU_H @@ -120,6 +120,8 @@ class cMenuCam : public cOsdMenu { private: cCiMenu *ciMenu; bool selected; + int offset; + void AddMultiLineItem(const char *s); eOSState Select(void); public: cMenuCam(cCiMenu *CiMenu); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 1.62 2005/06/19 10:43:04 kls Exp $ + * $Id: osd.c 1.63 2005/10/02 08:47:13 kls Exp $ */ #include "osd.h" @@ -618,6 +618,8 @@ cBitmap *cOsd::GetBitmap(int Area) eOsdError cOsd::CanHandleAreas(const tArea *Areas, int NumAreas) { + if (NumAreas > MAXOSDAREAS) + return oeTooManyAreas; eOsdError Result = oeOk; for (int i = 0; i < NumAreas; i++) { if (Areas[i].x1 > Areas[i].x2 || Areas[i].y1 > Areas[i].y2 || Areas[i].x1 < 0 || Areas[i].y1 < 0) @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.c 1.20 2005/06/18 10:30:51 kls Exp $ + * $Id: osdbase.c 1.22 2005/10/02 15:00:40 kls Exp $ */ #include "osdbase.h" @@ -25,12 +25,12 @@ cOsdItem::cOsdItem(eOSState State) fresh = true; } -cOsdItem::cOsdItem(const char *Text, eOSState State) +cOsdItem::cOsdItem(const char *Text, eOSState State, bool Selectable) { text = NULL; offset = -1; state = State; - selectable = true; + selectable = Selectable; fresh = true; SetText(Text); } @@ -196,8 +196,11 @@ void cOsdMenu::Display(void) int count = Count(); if (count > 0) { int ni = 0; - for (cOsdItem *item = First(); item; item = Next(item)) + for (cOsdItem *item = First(); item; item = Next(item)) { cStatus::MsgOsdItem(item->Text(), ni++); + if (current < 0 && item->Selectable()) + current = item->Index(); + } if (current < 0) current = 0; // just for safety - there HAS to be a current item! if (current - first >= displayMenuItems || current < first) { @@ -210,8 +213,9 @@ void cOsdMenu::Display(void) int i = first; int n = 0; for (cOsdItem *item = Get(first); item; item = Next(item)) { - displayMenu->SetItem(item->Text(), i - first, i == current, item->Selectable()); - if (i == current) + bool CurrentSelectable = (i == current) && item->Selectable(); + displayMenu->SetItem(item->Text(), i - first, CurrentSelectable, item->Selectable()); + if (CurrentSelectable) cStatus::MsgOsdCurrentItem(item->Text()); if (++n == displayMenuItems) break; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.h 1.11 2005/06/12 10:46:34 kls Exp $ + * $Id: osdbase.h 1.12 2005/10/02 09:18:20 kls Exp $ */ #ifndef __OSDBASE_H @@ -56,7 +56,7 @@ protected: bool fresh; public: cOsdItem(eOSState State = osUnknown); - cOsdItem(const char *Text, eOSState State = osUnknown); + cOsdItem(const char *Text, eOSState State = osUnknown, bool Selectable = true); virtual ~cOsdItem(); bool Selectable(void) { return selectable; } void SetText(const char *Text, bool Copy = true); diff --git a/recording.c b/recording.c index 8b21cdd..9e96922 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.119 2005/09/25 14:29:49 kls Exp $ + * $Id: recording.c 1.120 2005/10/01 10:29:02 kls Exp $ */ #include "recording.h" @@ -743,10 +743,11 @@ void cRecording::ResetResume(void) const cRecordings Recordings; +char *cRecordings::updateFileName = NULL; + cRecordings::cRecordings(bool Deleted) :cThread("video directory scanner") { - updateFileName = strdup(AddDirectory(VideoDirectory, ".update")); deleted = Deleted; lastUpdate = 0; state = 0; @@ -755,7 +756,6 @@ cRecordings::cRecordings(bool Deleted) cRecordings::~cRecordings() { Cancel(3); - free(updateFileName); } void cRecordings::Action(void) @@ -763,6 +763,13 @@ void cRecordings::Action(void) Refresh(); } +const char *cRecordings::UpdateFileName(void) +{ + if (!updateFileName) + updateFileName = strdup(AddDirectory(VideoDirectory, ".update")); + return updateFileName; +} + void cRecordings::Refresh(bool Foreground) { lastUpdate = time(NULL); // doing this first to make sure we don't miss anything @@ -825,13 +832,13 @@ bool cRecordings::StateChanged(int &State) void cRecordings::TouchUpdate(void) { - TouchFile(updateFileName); + TouchFile(UpdateFileName()); lastUpdate = time(NULL); // make sure we don't tigger ourselves } bool cRecordings::NeedsUpdate(void) { - return lastUpdate < LastModifiedTime(updateFileName); + return lastUpdate < LastModifiedTime(UpdateFileName()); } bool cRecordings::Update(bool Wait) diff --git a/recording.h b/recording.h index 96bb4b5..341284f 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.44 2005/09/25 14:30:13 kls Exp $ + * $Id: recording.h 1.45 2005/10/01 10:24:41 kls Exp $ */ #ifndef __RECORDING_H @@ -93,10 +93,11 @@ public: class cRecordings : public cList<cRecording>, public cThread { private: - char *updateFileName; + static char *updateFileName; bool deleted; time_t lastUpdate; int state; + const char *UpdateFileName(void); void Refresh(bool Foreground = false); void ScanVideoDir(const char *DirName, bool Foreground = false); protected: @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: skins.c 1.4 2005/01/14 13:07:19 kls Exp $ + * $Id: skins.c 1.5 2005/10/02 10:12:10 kls Exp $ */ #include "skins.h" @@ -169,8 +169,9 @@ bool cSkins::SetCurrent(const char *Name) eKeys cSkins::Message(eMessageType Type, const char *s, int Seconds) { switch (Type) { - case mtInfo: isyslog("info: %s", s); break; - case mtError: esyslog("ERROR: %s", s); break; + case mtInfo: isyslog("info: %s", s); break; + case mtWarning: isyslog("warning: %s", s); break; + case mtError: esyslog("ERROR: %s", s); break; default: ; } if (!Current()) @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.78 2005/09/25 12:54:58 kls Exp $ + * $Id: tools.h 1.79 2005/10/01 12:43:31 kls Exp $ */ #ifndef __TOOLS_H @@ -45,7 +45,7 @@ extern int SysLogLevel; #define DELETENULL(p) (delete (p), p = NULL) #define CHECK(s) { if ((s) < 0) LOG_ERROR; } // used for 'ioctl()' calls -#define FATALERRNO (errno != EAGAIN && errno != EINTR) +#define FATALERRNO (errno && errno != EAGAIN && errno != EINTR) #ifndef __STL_CONFIG_H // in case some plugin needs to use the STL template<class T> inline T min(T a, T b) { return a <= b ? a : b; } @@ -8,7 +8,7 @@ .\" License as specified in the file COPYING that comes with the .\" vdr distribution. .\" -.\" $Id: vdr.5 1.38 2005/09/04 14:43:42 kls Exp $ +.\" $Id: vdr.5 1.39 2005/09/26 21:38:44 kls Exp $ .\" .TH vdr 5 "19 Mar 2005" "1.3.23" "Video Disk Recorder Files" .SH NAME @@ -325,7 +325,7 @@ of these cannot be determined, \fBTITLE\fR will default to the channel name, and Arbitrary text that describes the recording made by this timer. Any newline characters in the summary have to be replaced by '|', and the summary may contain ':' characters. If this field is not empty, its -contents will be written into the \fIsummary.vdr\fR file of the recording. +contents will be written into the \fIinfo.vdr\fR file of the recording. .SS SOURCES The file \fIsources.conf\fR defines the codes to be used in the \fBSource\fR field of channels in \fIchannels.conf\fR and assigns descriptive texts to them. |